נתונות שתי התוכניות הבאות, מריצים כל פעם אחת מהן על מערכת לינוקס עם מעבד 64_x86 כפי שנלמד בכיתה. נתונות ההנחות הבאות אשר מתקיימות בעת הרצת התוכניות: 1. רק אחת התוכנית הבאות רצה על המערכת ואף תוכנית אחרת לא רצה. 2. קיים מטמון דפים והוא ריק לפני תחילת הריצה של כל אחת מהתוכניות הבאות. 3. מובטח שקיים שטח זיכרון פיזי פנוי גדול מ- 4GB ברגע שמתחילים להריץ אחת התוכניות הבאות. Program A 1. int main() { 2. int PAGE_SIZE = 4096; 3. // empty line 4. char* p = (char*)mmap(NULL, 3*PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1, 0); 5. pid_t pid = fork(); 6. if (pid > 0) 7. wait(NULL); // wait for the child 8. int x = p[0]; 9. p[0] = 0; 10. p[0] = 0; 11. printf("%d", x); 12. return 0; 13.} Program B 1. int main() { 2. int PAGE_SIZE = 4096; 3. fd = open("/tmp/file.txt"); 4. char* p = (char*)mmap(NULL, 3*PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); 5. pid_t pid = fork(); 6. if (pid > 0) 7. wait(NULL); // wait for the child 8. int x = p[0]; 9. p[0] = 0; 10. p[0] = 0; 11. printf("%d", x); 12. return 0; 13. }
Full original question text (raw OCR)
נא לסמן את התשובה הנכונה בטופס התשובות המצורף, ללא נימוק. הבדיקה תתבצע באופן אוטומטי, ולכן יש להקפיד לסמן נכון ובבירור את (1) מספר תעודת הזהות,את (2) מספר הטור המצוין למטה, ואת (3) התשובות עצמן. בכל סעיף יש לבחור תשובה אחת בלבד. טור X (כל סעיף 5 נק') נתונות שתי התוכניות הבאות, מריצים כל פעם אחת מהן על מערכת לינוקס עם מעבד 64_x86 כפי שנלמד בכיתה. נתונות ההנחות הבאות אשר מתקיימות בעת הרצת התוכניות: 1. רק אחת התוכנית הבאות רצה על המערכת ואף תוכנית אחרת לא רצה. 2. קיים מטמון דפים והוא ריק לפני תחילת הריצה של כל אחת מהתוכניות הבאות. 3. מובטח שקיים שטח זיכרון פיזי פנוי גדול מ- 4GB ברגע שמתחילים להריץ אחת התוכניות הבאות. Program A 1. int main() { 2. int PAGE_SIZE = 4096; 3. // empty line 4. char* p = (char*)mmap(NULL, 3*PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1, 0); 5. pid_t pid = fork(); 6. if (pid > 0) 7. wait(NULL); // wait for the child 8. int x = p[0]; 9. p[0] = 0; 10. p[0] = 0; 11. printf("%d", x); 12. return 0; 13.} Program B 1. int main() { 2. int PAGE_SIZE = 4096; 3. fd = open("/tmp/file.txt"); 4. char* p = (char*)mmap(NULL, 3*PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); 5. pid_t pid = fork(); 6. if (pid > 0) 7. wait(NULL); // wait for the child 8. int x = p[0]; 9. p[0] = 0; 10. p[0] = 0; 11. printf("%d", x); 12. return 0; 13. }
איזה מבני נתונים מהבאים הקרנל יעדכן בשורה 4? א. רשימת אזורי הזיכרון בשתי התוכניות ב. טבלת הדפים בשתי התוכניות ג. טבלת המסגרות בשתי התוכניות ד. רשימת הקבצים הפתוחים רק בתוכנית B ה. רשימת ההקצאות של glibc/malloc ו. יש יותר מתשובה אחת נכונה
fork/exec address-space semanticslibc syscall wrapper caching pitfallsPage fault error code classificationאיזה מבין המשפטים הבאים נכון (כשמתייחסים לביצוע של שורה 8 בשתי התוכניות)? א. הערך של x אצל האבא בהכרח שווה ל- 0 בתוכנית A ואולי שווה ל- 0 בתוכנית B ב. הערך של x אצל האבא בהכרח שווה ל- 0 בשתי התוכניות ג. הערך של x אצל האבא בהכרח שווה ל- 0 בתוכנית A ובהכרח שונה מ- 0 בתוכנית B ד. הערך של x אצל האבא בהכרח שווה ל- 0 בתוכנית B ובהכרח שונה מ- 0 בתוכנית A ה. הערך של x אצל האבא בהכרח שווה ל- 0 בתוכנית B ואולי שווה ל- 0 בתוכנית A ו. אי אפשר להגיד בוודאות מה הערך של x אצל האבא בתוכנית A וגם אי אפשר להגיד בוודאות מה הערך של x אצל האבא בתוכנית B
fork/exec address-space semanticslibc syscall wrapper caching pitfallsPage fault error code classificationאיזה מבין המשפטים הבאים מתאר נכון את המספר והסוג של חריגות דף אשר שורה 8 יוצרת? א. תוכנית A תיצור שתי חריגת דף מסוג Minor ב. תוכנית A תיצור רק חריגת דף אחת מסוג Minor ואף חריגת דף מסוג Major ג. תוכנית B תיצור רק חריגת דף אחת מסוג Major ואף חריגת דף מסוג Minor ד. תוכנית B תיצור שתי חריגת דף מסוג Major ה. תוכנית A תיצור שתי חריגת דף מסוג Minor ותוכנית B תיצור שתי חריגת דף מסוג Major ו. תוכנית A תיצור חריגת דף אחת מסוג Minor ותוכנית B תיצור חריגת דף אחת מסוג Major
Page fault error code classificationאיזה מבין ההיגדים הבאים נכון לגבי שורה 8 בשתי התוכניות הנ"ל? א. זמן הריצה של שורה 8 בתהליך הבן של A בהכרח יותר קצר מאשר בתהליך הבן של B ב. זמן הריצה של שורה 8 בתהליך האבא של A בהכרח יותר קצר מאשר בתהליך האבא של B ג. זמן הריצה של שורה 8 בתהליך הבן של A בהכרח יותר ארוך מאשר בתהליך הבן של B ד. זמן הריצה של שורה 8 בתהליך האבא של A בהכרח יותר ארוך מאשר בתהליך האבא של B ה. זמן הריצה של שורה 8 בתהליך הבן של A בהכרח יותר קצר מאשר בתהליך האבא של A ו. זמן הריצה של שורה 8 בתהליך הבן של A בהכרח יותר ארוך מאשר בתהליך האבא של A
fork/exec address-space semanticslibc syscall wrapper caching pitfallsPage fault error code classificationאיזה מבין המשפטים הבאים מתאר נכון את מספר חריגות הדף אשר שורה 9 יוצרת? א. גם תהליך האבא וגם תהליך הבן של A יוצרים חריגת דף אחת כל אחד מהם ב. תהליך האבא של A יוצר חריגת דף אחת ואילו תהליך הבן של A לא יוצר אף חריגת דף ג. תהליך הבן של A יוצר חריגת דף אחת ואילו תהליך האבא של A לא יוצר אף חריגת דף ד. תהליך האבא של B יוצר חריגת דף אחת ואילו תהליך הבן של B לא יוצר אף חריגת דף ה. תהליך הבן של B יוצר חריגת דף אחת ואילו תהליך האבא של B לא יוצר אף חריגת דף ו. גם תהליך האבא וגם תהליך הבן של B יוצרים חריגת דף אחת כל אחד מהם
Page fault error code classificationבהינתן ששתי התוכניות הנ"ל ירוצו על מערכת דומה לזו המתוארת בשאלה אך התנאים 1-3 הנתונים אינם מתקיימים. כלומר, לא ניתן להבטיח שכל תוכנית תרוץ לבדה במערכת, לא מובטח שמטמון הדפים ריק לפני שמתחילים להריץ את שתי התוכניות, ולא ידוע כמה זיכרון פיזי פנוי קיים במערכת לפני ריצת התוכניות. איזה מבין המשפטים הבאים נכון? א. כל ההיגדים נכונים ב. [היגד:] תהליך האבא של A עלול ליצור major page fault בשורה 10 ג. [היגד:] תהליך הבן של A עלול ליצור major page fault בשורה 10 ד. [היגד:] תהליך האבא של B עלול ליצור major page fault בשורה 10 ה. [היגד:] תהליך הבן של B עלול ליצור major page fault בשורה 10 ו. כל ההיגדים אינם נכונים
libc syscall wrapper caching pitfallsPage fault error code classification
The exam question — original PDF
pages 2, 3, 4Exactly 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.
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
אחרי fork()parentint main() { int x = 0; pid_t p = fork(); if (p == 0) { x = 1; } else { x = 2; }}sonint main() { int x = 0; pid_t p = fork(); if (p == 0) { x = 1; } else { x = 2; }}מערכות הפעלה - תרגול 210
הדפסה מתואמת למסךשימוש ב-wait() יכול לפתור את הבעיה שראינו קודם כאשר מדפיסים למסך במקביל משני תהליכים:int main() { pid_t p = fork(); if (p > 0) { // parent waits for child wait(NULL); } printf(“hello”); return 0;}מערכות הפעלה - תרגול 215
קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו.pid_t getppid();קריאת מערכת המחזירה את ה-PID של תהליך האב של התהליך הקורא.שאלה: מה המשמעות של getppid() == 1 עבור תהליך משתמש טיפוסי?תשובה: תהליך האב הוא init. קורה למשל אם תהליך הבן יתום.מערכות הפעלה - תרגול 222
סיכום השיעור שעבר2the CPU searches the TLBhitmissthe CPU walks the page tablecompletedpage faultphysical addressvirtual addressthe OS serves the page faultמערכות הפעלה - תרגול 10
מה נלמד היום?3the CPU searches the TLBhitmissthe CPU walks the page tablecompletedpage faultphysical addressvirtual addresskill the process or the entire systemfix the page table and retrythe OS serves the page faultinvalidvalidמערכות הפעלה - תרגול 10
הרשאות של אזור זיכרוןהדגלים המציינים את הרשאות האזור נשמרים בשדה vm_flags והם מאפשרים לגרעין לסווג גישות חוקיות ולא חוקיות לדפים באזור.VM_READ, VM_WRITE, VM_EXEC – האם מותר לקרוא/לכתוב/לבצע נתונים בדפים באזור.VM_MAYREAD, VM_MAYWRITE, VM_MAYEXEC – "הרשאת הרשאה" לכל אחת מההרשאות הנ"ל.לדוגמה VM_MAYWRITE קובע האם מותר להדליק את VM_WRITE.הדגלים האלה קשורים לקריאת המערכת mprotect() – מעבר לחומר הקורס.VM_SHARED – האם צריך לשתף דפים באזור זה עם תהליכי בן.VM_LOCKED – אסור לפנות את הדפים באזור מהזיכרון לדיסק.17מערכות הפעלה - תרגול 10
מרחבי זיכרון וקריאות מערכתחוטים הנוצרים ע"י קריאת המערכתclone() משתפים את מרחב הזיכרון ע"י הצבעה לאותו מתאר מרחב הזיכרון של תהליך האב.יש להגדיל את מונה השיתוף (mm_users) של מתאר מרחב הזיכרון של תהליך האב.קריאת המערכת execv() ודומותיה טוענות תהליך חדש ולכן הן משחררות את מרחב הזיכרון ומקצות אחד חדש.קריאת המערכתfork() מקצה לתהליך הבן מרחב זיכרון משלו.במקרה שכזה צריך להעתיק את מרחב הזיכרון של האב לזה של הבן.בפועל, בדרך-כלל אין באמת העתקה בזכות מנגנון copy-on-write.23מערכות הפעלה - תרגול 10
הפתרון: copy-on-write (COW)הרעיון של מנגנון copy-on-write (COW) הוא:דפים הניתנים לכתיבה שאינם יכולים להיות משותפים (לדוגמה, המחסנית), מוגדרים בתחילה כמשותפים אבל מועתקים לעותק פרטי כאשר אחד התהליכים השותפים (האב או הבן) מנסה לכתוב אליהם לראשונה.שאר הדפים (כדוגמת דפי קוד או דפי נתונים לקריאה בלבד) הופכים למשותפים בין מרחבי הזיכרון של האב והבן.מנגנון COW פותר את שתי הבעיות שהוצגו קודם:COW מקטין את זמן הביצוע של fork() כי הוא "פורס לתשלומים" את ההעתקה של כל מרחב הזיכרון להרבה העתקות קטנות בגודל דף שיתבצעו בעתיד---בכל כתיבה ראשונה לדף שאינו משותף.במידה ותהליך הבן יבצע מיד execv(), מרחב הזיכרון שלו יימחק וכך תיחסך רוב פעולת ההעתקה.27מערכות הפעלה - תרגול 10
father processpage tablememory regionsדוגמה: לפני קריאת מערכת fork()28…PTE #11r/w = 1…frame #250count == 1מערכות הפעלה - תרגול 10region #1VM_MAYWRITE=1VM_WRITE=1region #2
COW: טיפול ב-page faultתרחיש הטיפול: האב או הבן מנסים לכתוב לדף מוגן ע"י COW.המעבד ניגש לסיביות הבקרה ב-PTE של הדף, ומגלה כי r/w כבוי.המעבד יוצר חריגת דף (page fault).הגרעין מטפל בחריגה, ובודק שהדף שייך לאחד מאזורי הזיכרון ושהגישה בכלל חוקית (דגל VM_WRITE דלוק במתאר האזור).הגרעין בודק את ערך המונה השיתוף של המסגרת:אם count > 1, מקצים מסגרת חדשה, מעתיקים אליה את המסגרת המקורית, ומצביעים את הדף למסגרת החדשה.במסגרת הישנה מבוצע count-- .במסגרת החדשה מוצב count = 1 .בעותק החדש מאופשרת הכתיבה.אחרת (count == 1), הגרעין פשוט מאפשר כתיבה בדף ע"י הדלקת הדגל r/w.37מערכות הפעלה - תרגול 10
חריגת דף (page fault)החומרה מתריעה באמצעות חריגת דף על:גישה לדף שאינו נמצא בזיכרון, כלומר הביט present==0 בכניסה המתאימה בטבלת הדפים.גישה לא חוקית (שלא לפי ההרשאות בטבלת הדפים) לדף שנמצא בזיכרון, למשל ניסיון כתיבה לדף שמותר לקריאה בלבד.חריגת דף מפעילה את שגרת הטיפול הממומשת בפונקציית הגרעין do_page_fault().בסיום הטיפול בחריגה מבוצעת מחדש ההוראה שגרמה לה.אלא אם כן, כמובן, הטיפול בחריגה הורג את התהליך.43מערכות הפעלה - תרגול 10
בלינוקס יש שני סוגי קישורים (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.