לדלג לתוכן

6.5 מערכת הקבצים הוירטואלית תרגול

תרגול - מערכת הקבצים הוירטואלית - VFS

תרגיל 1 - בחינת inodes עם stat

השתמשו בפקודה stat כדי לבדוק את ה-inode של כמה קבצים:

stat /etc/passwd
stat /etc/hostname
stat /bin/ls

א. מה מספר ה-inode של כל קובץ?

ב. איזה מידע מופיע ב-stat שלא מופיע ב-ls -l?

ג. הריצו ls -i /etc/passwd - מה ההבדל בין הפלט הזה לבין stat?


א. צרו קובץ וקישור קשיח אליו:

echo "hello" > /tmp/original.txt
ln /tmp/original.txt /tmp/hardlink.txt

הריצו ls -li /tmp/original.txt /tmp/hardlink.txt. מה מספר ה-inode של כל אחד? מה המשמעות?

ב. עכשיו צרו קישור רך (symbolic link):

ln -s /tmp/original.txt /tmp/softlink.txt

הריצו ls -li /tmp/softlink.txt. מה מספר ה-inode שלו? האם הוא זהה ל-original?

ג. מחקו את הקובץ המקורי:

rm /tmp/original.txt

מה קורה כשמנסים לקרוא מ-hardlink.txt? ומה קורה כשמנסים לקרוא מ-softlink.txt? הסבירו את ההבדל באמצעות המושגים inode ו-dentry.


תרגיל 3 - חקירת נקודות mount

א. הריצו את הפקודה findmnt (או mount) ובחנו את הפלט. מצאו:
- באיזה סוג מערכת קבצים נמצא / (השורש)?
- האם /proc מותקן? מה סוג מערכת הקבצים?
- האם /sys מותקן? מה סוג מערכת הקבצים?
- האם /tmp מותקן בנפרד? אם כן, מה סוג מערכת הקבצים?

ב. הריצו:

cat /proc/filesystems

מה ההבדל בין מערכות קבצים שמסומנות ב-nodev לבין אלו שלא?


תרגיל 4 - page cache בפעולה

נבדוק את ה-page cache בעבודה:

א. הריצו:

cat /proc/meminfo | grep -E "^(Cached|Buffers|MemFree)"

רשמו את הערכים.

ב. עכשיו קראו קובץ גדול (למשל קובץ בינארי של תוכנית):

cat /usr/bin/python3 > /dev/null

ג. הריצו שוב את הפקודה מסעיף א. מה השתנה? למה Cached גדל?

ד. הסבירו: אם נקרא את אותו קובץ שוב, האם הוא ייקרא מהדיסק? למה?


תרגיל 5 - שאלה תיאורטית

תארו את הזרימה המלאה של מה שקורה בתוך הקרנל כשתהליך קורא ל:

int fd = open("/home/user/notes.txt", O_RDONLY);

התייחסו לשלבים הבאים:
- פתרון הנתיב (pathname resolution) - מה קורה בכל רכיב?
- בדיקת הרשאות
- יצירת struct file
- החזרת file descriptor

מה התפקיד של ה-dcache בתהליך? מה קורה אם הdentry לא נמצא בcache?