בחלק זה כל השאלות הן מסוג רב-ברירה (שאלות אמריקאיות) כאשר לכל שאלה יש בדיוק תשובה אחת נכונה. בשאלות אלו יש להקיף את התשובה הנכונה ביותר לדעתכם ולנמק. תזכורת: במערכת הקבצים VSFS (מערכת הקבצים הקלאסית של UNIX כפי שנלמדה בתרגולים ובהרצאות), לכל קובץ נשמר inode. סגל הקורס מערכות הפעלה משתמש במערכת הקבצים VSFS. כדי להאיץ את הזנת הציונים לסטודנטים, סגל הקורס הציע מערכת קבצים חדשה בשם Grades File System (GFS). מערכת הקבצים GFS נועדה להזנת ציונים בלבד, והיא פועלת באופן הבא: 1. כל בקשת כתיבה או עידכון של ציון מנותבת לחוצץ בגודל 4MB הנמצא בזיכרון. 2. אך ורק כאשר החוצץ מתמלא הוא נכתב לדיסק. נתון שבלוק בדיסק הינו בגדול 4KB. עם מילוי החוצץ ה-ו, הוא נכתב ברציפות לבלוקים [x,x+1,..., x+1023]. החוצץ ה ו יכתב ברציפות לבלוקים [x+1024]. רצף החוצצים בדיסק יוצר לוג המתעד את כל הפעולות שנעשו על המידע. 3. הזנת ציון לסטודנט קיים מוסיפה רשומה המכילה <id:grade> לחוצץ. 4. עדכון ציון לסטודנט קיים גם מוסיף רשומה המכילה <id:grade> לחוצץ, ללא שינוי או מחיקה של הרשומה המקורית שנכתבה. 5. שימו לב: קריאת ציון עבור סטודנט קיים מצריכה לקרוא את הרשומה האחרונה שנכתבה עבורו. בשאלות הבאות הניחו כי לכל הסטודנטים הוזן ציון וכי מספר הסטודנטים הינו גדול מאוד אך ידוע מראש.
Full original question text (raw OCR)
חלק 3 - מערכות קבצים (25 נק') בחלק זה כל השאלות הן מסוג רב-ברירה (שאלות אמריקאיות) כאשר לכל שאלה יש בדיוק תשובה אחת נכונה. בשאלות אלו יש להקיף את התשובה הנכונה ביותר לדעתכם ולנמק. תזכורת: במערכת הקבצים VSFS (מערכת הקבצים הקלאסית של UNIX כפי שנלמדה בתרגולים ובהרצאות), לכל קובץ נשמר inode. 11. (5 נק') איזו פעולה על קובץ A תגרום בהכרח לעדכון ה-inode המתאים לקובץ A על הדיסק? a. יצירת קישור רך בשם B המצביע ל-A b. כתיבה של 1GB לסוף הקובץ A c. שינוי שם התיקייה המכילה את הקובץ d. שינוי מיקום מחוון הקובץ e. שינוי ההרשאות של תיקיית שורש מערכת הקבצים נימוק: סגל הקורס מערכות הפעלה משתמש במערכת הקבצים VSFS. כדי להאיץ את הזנת הציונים לסטודנטים, סגל הקורס הציע מערכת קבצים חדשה בשם Grades File System (GFS). מערכת הקבצים GFS נועדה להזנת ציונים בלבד, והיא פועלת באופן הבא: 1. כל בקשת כתיבה או עידכון של ציון מנותבת לחוצץ בגודל 4MB הנמצא בזיכרון. 2. אך ורק כאשר החוצץ מתמלא הוא נכתב לדיסק. נתון שבלוק בדיסק הינו בגדול 4KB. עם מילוי החוצץ ה-ו, הוא נכתב ברציפות לבלוקים [x,x+1,..., x+1023]. החוצץ ה ו יכתב ברציפות לבלוקים [x+1024]. רצף החוצצים בדיסק יוצר לוג המתעד את כל הפעולות שנעשו על המידע. 3. הזנת ציון לסטודנט קיים מוסיפה רשומה המכילה <id:grade> לחוצץ. 4. עדכון ציון לסטודנט קיים גם מוסיף רשומה המכילה <id:grade> לחוצץ, ללא שינוי או מחיקה של הרשומה המקורית שנכתבה. 5. שימו לב: קריאת ציון עבור סטודנט קיים מצריכה לקרוא את הרשומה האחרונה שנכתבה עבורו. בשאלות הבאות הניחו כי לכל הסטודנטים הוזן ציון וכי מספר הסטודנטים הינו גדול מאוד אך ידוע מראש. 12. (5 נק') שליו החליט לכבוד פרישתו מתרגול הקורס לפנק את הסטודנטים. לשם כך כתב תוכנית המגרילה ח סטודנטים אקראיים ומשנה את הציון שלהם בקורס ל-100. הניחו שאין שימוש במטמון הדפים (page cache) ושה-inode objects הרלוונטים כבר נמצאים בזיכרון. הקיפו את ההיגד הנכון ביותר: a. בממוצע זמן ריצת התוכנית יהיה ארוך יותר ב GFS מאשר ב VSFS b. בממוצע זמן ריצת התוכנית יהיה ארוך יותר ב VSFS מאשר ב GFS c. בממוצע זמן ריצת התוכנית יהיה שווים בין VSFS ל GFS d. אם ב VSFS כל ציון (מתוך ח הציונים) שמור בקובץ נפרד אז תשובה a נכונה, אחרת תשובה c נכונה. e. אם בכל ח הפעמים מוגרלת אותה רשומה בדיוק אז תשובה b נכונה, אחרת תשובה a נכונה. נימוק: 13. (5 נק') יהונתן שם לב שכאשר הוא מזין ציונים באמצעות GFS, אם מערכת ההפעלה קורסת פתאומיות, לעיתים חלק מהציונים אינם מעודכנים. עזרו ליהונתן להבין את מקור הבעיה ואולי תזכו בפקטור מכובד. a. יהונתן צריך להקטין את גודל החוצץ לגודלה של רשומה בודדת b. יהונתן צריך לקרוא את הלוג מסופו לתחילתו c. יהונתן צריך לקרוא מהחוצץ שבזיכרון ולא מהדיסק d. יהונתן צריך בכל פרק זמן מוגדר מראש (למשל כל 100 מילי שניות) לכתוב את תוכן החוצץ לדיסק על אף שהוא אינו מלא e. יהונתן צריך לשנות את קריאת המערכת exit כך שכאשר תהליך מסתיים החוצץ יכתב לדיסק f. אף תשובה אינה נכונה נימוק: 14. (5 נק') עידן שם לב בשימוש ב-GFS טעינת קובץ הציונים לוקחת זמן רב. כיצד עידן יכול לשפר את זמן טעינת הקובץ? a. עידן צריך להקטין את גודל החוצץ לגודל של מגירה בדיסק (4KB) b. עידן צריך לקרוא את הלוג מתחילתו לסופו c. עידן צריך לקרוא אך ורק מהחוצץ שבזיכרון ולא מהדיסק d. עידן צריך בכל פרק זמן מוגדר מראש (למשל כל 100 מילי שניות) לעבור על הלוג ולנקות רשומות שאינן עדכניות e. עידן צריך לשנות את קריאת המערכת read כך שכאשר תהליך מסיים לקרוא רשומה החוצץ יכתב לדיסק f. אף תשובה אינה נכונה נימוק: 15. (5 נק') עידו שם לב שבשימוש ב GFS קריאת ציון לוקחת זמן רב. לכן עידו ממליץ על האופטימיזציה הבאה: בנוסף למבני הנתונים שתוארו תישמר טבלה המכילה את העדכון האחרון של כל רשומה. סמנו את ההיגד הנכון והיעיל ביותר מבחינת זמן הקריאה של רשומה: a. בעת עליית מערכת ההפעלה תיווצר טבלה המכילה את כל הרשומות הקיימות. בעדכון רשומה תהיה גישה לדיסק בלבד ובמהלך קריאת רשומה תהיה גישה לזיכרון בלבד b. בעת עליית מערכת ההפעלה תיווצר טבלה המכילה את כל הרשומות הקיימות. בעדכון רשומה תהיה גישה לזיכרון בלבד ובמהלך קריאת רשומה תהיה גישה לדיסק בלבד c. בעת עליית מערכת ההפעלה תיווצר טבלה המכילה את כל הרשומות הקיימות. בעדכון רשומה תהיה גישה לזיכרון ולדיסק ובמהלך קריאת רשומה תהיה גישה לזיכרון בלבד d. רשומה תתווסף לטבלה רק בעת עדכון או קריאה שלה. בעדכון רשומה תהיה גישה לדיסק בלבד ובמהלך קריאת רשומה תהיה גישה לזיכרון בלבד e. רשומה תתווסף לטבלה רק בעת עדכון או קריאה שלה. בעדכון רשומה תהיה גישה לזיכרון בלבד ובמהלך קריאת רשומה תהיה גישה לדיסק בלבד f. רשומה תתווסף לטבלה רק בעת עדכון או קריאה שלה. בעדכון רשומה תהיה גישה לזיכרון ולדיסק ובמהלך קריאת רשומה תהיה גישה לזיכרון בלבד נימוק:
(5 נק') איזו פעולה על קובץ A תגרום בהכרח לעדכון ה-inode המתאים לקובץ A על הדיסק? a. יצירת קישור רך בשם B המצביע ל-A b. כתיבה של 1GB לסוף הקובץ A c. שינוי שם התיקייה המכילה את הקובץ d. שינוי מיקום מחוון הקובץ e. שינוי ההרשאות של תיקיית שורש מערכת הקבצים
libc syscall wrapper caching pitfallsHard link vs symlink inode behavior- libc syscall wrapper caching pitfallsPer-process file descriptor tableHard link vs symlink inode behavior
(5 נק') שליו החליט לכבוד פרישתו מתרגול הקורס לפנק את הסטודנטים. לשם כך כתב תוכנית המגרילה ח סטודנטים אקראיים ומשנה את הציון שלהם בקורס ל-100. הניחו שאין שימוש במטמון הדפים (page cache) ושה-inode objects הרלוונטים כבר נמצאים בזיכרון. הקיפו את ההיגד הנכון ביותר: a. בממוצע זמן ריצת התוכנית יהיה ארוך יותר ב GFS מאשר ב VSFS b. בממוצע זמן ריצת התוכנית יהיה ארוך יותר ב VSFS מאשר ב GFS c. בממוצע זמן ריצת התוכנית יהיה שווים בין VSFS ל GFS d. אם ב VSFS כל ציון (מתוך ח הציונים) שמור בקובץ נפרד אז תשובה a נכונה, אחרת תשובה c נכונה. e. אם בכל ח הפעמים מוגרלת אותה רשומה בדיוק אז תשובה b נכונה, אחרת תשובה a נכונה.
Hard link vs symlink inode behavior- libc syscall wrapper caching pitfallsPer-process file descriptor tableHard link vs symlink inode behavior
(5 נק') יהונתן שם לב שכאשר הוא מזין ציונים באמצעות GFS, אם מערכת ההפעלה קורסת פתאומיות, לעיתים חלק מהציונים אינם מעודכנים. עזרו ליהונתן להבין את מקור הבעיה ואולי תזכו בפקטור מכובד. a. יהונתן צריך להקטין את גודל החוצץ לגודלה של רשומה בודדת b. יהונתן צריך לקרוא את הלוג מסופו לתחילתו c. יהונתן צריך לקרוא מהחוצץ שבזיכרון ולא מהדיסק d. יהונתן צריך בכל פרק זמן מוגדר מראש (למשל כל 100 מילי שניות) לכתוב את תוכן החוצץ לדיסק על אף שהוא אינו מלא e. יהונתן צריך לשנות את קריאת המערכת exit כך שכאשר תהליך מסתיים החוצץ יכתב לדיסק f. אף תשובה אינה נכונה
libc syscall wrapper caching pitfalls- libc syscall wrapper caching pitfallsPer-process file descriptor tableHard link vs symlink inode behavior
(5 נק') עידן שם לב בשימוש ב-GFS טעינת קובץ הציונים לוקחת זמן רב. כיצד עידן יכול לשפר את זמן טעינת הקובץ? a. עידן צריך להקטין את גודל החוצץ לגודל של מגירה בדיסק (4KB) b. עידן צריך לקרוא את הלוג מתחילתו לסופו c. עידן צריך לקרוא אך ורק מהחוצץ שבזיכרון ולא מהדיסק d. עידן צריך בכל פרק זמן מוגדר מראש (למשל כל 100 מילי שניות) לעבור על הלוג ולנקות רשומות שאינן עדכניות e. עידן צריך לשנות את קריאת המערכת read כך שכאשר תהליך מסיים לקרוא רשומה החוצץ יכתב לדיסק f. אף תשובה אינה נכונה
libc syscall wrapper caching pitfalls- libc syscall wrapper caching pitfallsPer-process file descriptor tableHard link vs symlink inode behavior
(5 נק') עידו שם לב שבשימוש ב GFS קריאת ציון לוקחת זמן רב. לכן עידו ממליץ על האופטימיזציה הבאה: בנוסף למבני הנתונים שתוארו תישמר טבלה המכילה את העדכון האחרון של כל רשומה. סמנו את ההיגד הנכון והיעיל ביותר מבחינת זמן הקריאה של רשומה: a. בעת עליית מערכת ההפעלה תיווצר טבלה המכילה את כל הרשומות הקיימות. בעדכון רשומה תהיה גישה לדיסק בלבד ובמהלך קריאת רשומה תהיה גישה לזיכרון בלבד b. בעת עליית מערכת ההפעלה תיווצר טבלה המכילה את כל הרשומות הקיימות. בעדכון רשומה תהיה גישה לזיכרון בלבד ובמהלך קריאת רשומה תהיה גישה לדיסק בלבד c. בעת עליית מערכת ההפעלה תיווצר טבלה המכילה את כל הרשומות הקיימות. בעדכון רשומה תהיה גישה לזיכרון ולדיסק ובמהלך קריאת רשומה תהיה גישה לזיכרון בלבד d. רשומה תתווסף לטבלה רק בעת עדכון או קריאה שלה. בעדכון רשומה תהיה גישה לדיסק בלבד ובמהלך קריאת רשומה תהיה גישה לזיכרון בלבד e. רשומה תתווסף לטבלה רק בעת עדכון או קריאה שלה. בעדכון רשומה תהיה גישה לזיכרון בלבד ובמהלך קריאת רשומה תהיה גישה לדיסק בלבד f. רשומה תתווסף לטבלה רק בעת עדכון או קריאה שלה. בעדכון רשומה תהיה גישה לזיכרון ולדיסק ובמהלך קריאת רשומה תהיה גישה לזיכרון בלבד
libc syscall wrapper caching pitfalls- libc syscall wrapper caching pitfallsPer-process file descriptor tableHard link vs symlink inode behavior
The exam question — original PDF
pages 14, 15, 16, 17Exactly as it appears on the exam paper.
Built from these components
Ordered basic → advanced. Master the earlier ones first.
Review the material
Read these before you answer — each verified slide teaches a component this question tests, and nothing from an unrelated topic is included. Tutorial slides show the actual slide image.
POSIX file descriptors (FDs) • A successful open<“file name”> of a file returns a FD rpt – A nonnegative integer – An index to a per-process array called the “file descriptor table” – Each entry in the array saves, e.g., the current offset – Threads share the array (and hence the offset) – C’s FILE structure encapsulates a FD • FD or filename? – Some file-related POSIX system calls operate on FDs • read, write, fchmod, fchown, fchdir, fstat, ftruncate… – Others operate on file names • chmod, chown, chdir, stat, truncate – Has security implications: FD versions are more secure in some sense • Because association of FD to underlying file is immutable – Once an FD exists, it will always point to the same file • Whereas association between file & its name is mutable – So they can lead to TOCTTOU (time of check to time of use) races OS (234123) - files 9
Hard links – when is a file deleted? • Every file has a “reference count” associated with it – link() ref_count++ – unlink() ref_count-- • if( ref_count == 0 ) – The file has no more names – It isn’t pointed to from any node within the file hierarchy – So it can finally be deleted • What if an open file is deleted? (its ref_count==0) – Can we still access the file through the open FD(s)? • Yes – If >=1 processes have the file open when the last link is removed • The link shall be removed before unlink() returns • But the removal of the file contents shall be postponed until all references (file descriptors) to the file are close()-ed • Have you seen files names that begin with “.nfs”? OS (234123) - files 26
inodes & *stat syscalls • lstat(2) – Exactly the same as stat(2) if applied to a hard link – But if applied to a symlink, would return the information of this symlink (not to the target of the symlink) – In this case, POSIX says that the only fields within the stat structure that you can portably use are: • st_mode which will specify that the file is a symlink • st_size symlink content length (= length of target filepath) – The value of the rest of the fields could be valid, but it is not specified by POSIX – Notably, it is not specified if a symlink has a corresponding inode • Will be discussed shortly OS (234123) - files 34
קריאת המערכת waitpid()pid_t waitpid(pid_t pid, int *wstatus, int options);פעולה: המתנה לסיום בן ספציפי שמספרו pid.wait(), waitpid() הן קריאות מערכת חוסמות.כלומר חוסמות את התקדמות התהליך עד להתרחשות תנאי מסוים.באנגלית: blocking system calls.הארגומנט options מאפשר לשנות את ההתנהגות של waitpid() לקריאת מערכת לא חוסמת.אם options==WNOHANG קריאת המערכת תחזור מיד, כאשר ערך חזרה 0 משמעותו שאף תהליך בן עוד לא סיים, ואילו ערך חזרה חיובי הוא ה-pid של תהליך בן שסיים ונמצא עדיין במצב zombie.מערכות הפעלה - תרגול 216
קריאת המערכת exit()שאלה: למה בכלל לקרוא ל-exit(status) , אם אפשר פשוט לרשום return status בסוף פונקציית ה-main?תשובה: main היא לא באמת הפונקציה הראשית של התכנית...main() נקראת ע"י __libc_start_main() שאוספת את ערך החזרה של main() וקוראת ל-exit().int __libc_start_main(…) { …… exit(main(…));}מסקנה: הפונקציה exit תמיד נקראת לסיום סטנדרטי של התוכנית.מערכות הפעלה - תרגול 218
קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו.pid_t getppid();קריאת מערכת המחזירה את ה-PID של תהליך האב של התהליך הקורא.שאלה: מה המשמעות של getppid() == 1 עבור תהליך משתמש טיפוסי?תשובה: תהליך האב הוא init. קורה למשל אם תהליך הבן יתום.מערכות הפעלה - תרגול 222
דוגמת קודמסכמתprintf("pid = %d\n", getpid());pid_t pid = fork();if (pid == 0) { printf("child pid = %d\n", getpid()); char* args[] = {"/bin/date", NULL}; execv(args[0], args); printf("This should not be printed\n");} else { wait(NULL); printf("parent pid = %d\n", getpid());}פלט לדוגמה:pid = 8919child pid = 8920Sun Oct 29 00:31:32 IDT 2017parent pid = 8919מערכות הפעלה - תרגול 224
אתחול תהליכים בלינוקסמשתמשים מתחברים לעבודה בלינוקס דרך מסופים (terminal).מסוף = מסך + מקלדת (מקומי או מרוחק).התהליך init יוצר תהליך בן עבור כל מסוף, אשר טוען ומבצע את המשימות הבאות לפי הסדר:איתחול של המסוף.התחברות של המשתמש עם שם משתמש וסיסמא באמצעות תכנית login.אם אושרה כניסת המשתמש: קריאה לתוכנית shell(כמו tcsh או bash) המאפשרת למשתמש להעביר פקודות למערכת ההפעלה.מערכות הפעלה - תרגול 225
דוגמה לשימוש בתהליכים - shellממשק שורת פקודה (command line).ייעוד עיקרי: לקבל פקודות ולבצע אותן באופן סדרתי.ה-shell מייצר תהליך בן עבור כל פקודה על-מנת לבצע אותה.כל פקודה ניתן להריץ בחזית (foreground) או ברקע (background).הרצה בחזית: האב (shell) ממתין לסיום הבן לפני קריאת הפקודה הבאה.הרצה ברקע: האב (shell) עובר מיד לקריאת הפקודה הבאה.ייעוד נוסף: להציג קבצים ותיקיות על-מנת לסייר במערכת.דוגמה חיה:https://www.tutorialspoint.com/unix_terminal_online.phpמערכות הפעלה - תרגול 226
בלינוקס יש שני סוגי קישורים (links)soft / symbolic linkln -s src dstקישור סימבולי הוא קובץ חדש עם inode נפרד מזה של הקובץ המקורי.כתיבה דרך הקישור כותבת לקובץ אליו הוא מצביע.מחיקת הקישור (באמצעות הפקודה rm) לא תמחק את הקובץ המוצבע.אפשר ליצור קישורים סימבוליים גם לקובץ שלא קיים.hard linkln src dstקישור קשיח הוא שם נרדף לקובץ המקורי כי הוא מצביע ישירות ל-inode של הקובץ המקורי.כתיבה דרך הקישור כותבת לקובץ אליו הוא מצביע.מחיקת הקישור תקטין את מונה הקישורים של הקובץ (כפי שנשמר ב-inode).הקובץ יימחק מהדיסק רק כאשר כל ה-hard links אליו יימחקו.מערכות הפעלה - תרגול 1213
>> rm /A/helloמערכות הפעלה - תרגול 1219inode #2type=dirdatanameinode #A5B7inode #5type=dirdatanameinode #…………inode #13type=soft_linkdatainode #7type=dirdatanameinode #soft13……data block/A/helloקישור "שבור"!dangling link
The exam text, the skills it tests, and the exact slides are already in context.