בטבלה הבאה מתוארים כל אזורי הזיכרון של תהליך מסוים. לשם פשטות נתייחס לכתובות דצימליות (בבסיס 10) כאשר גודל דף (page) בדצימלי הוא 4096. ערכי vm_flags המתוארים בטבלה מייצגים את ההרשאות הוירטואליות של איזור הזכרון המדובר: vm_read - מותר לגשת לכתובות באיזור זה לקריאה vm_write - מותר לגשת לכתובות באיזור זה לכתיבה vm_exec - מותר לבצע פקודות בכתובות באיזור זה כפקודות מעבד [table of vm_areas] בטבלה הבאה מתוארות חריגות דף (page fault) אשר התקבלו ע"י מערכת ההפעלה, קוד השגיאה של כל חריגת דף וערך הרגיסטר CR2 השומר את הכתובת אשר גרמה לחריגה. הדגל ק - מציין אם המסגרת (frame) שניגשו אליה נמצאת בזכרון או לא (present) הדגל w - מציין שהגישה לדף נעשתה לשם כתיבה אליו (0 מייצג גישת קריאה ו-1 כתיבה) הדגל rw - מציין האם המסגרת (frame) שניגשו אליה ניתנת לכתיבה (1 אם כן ו-0 אם לא). הדגל ט - מציין האם הגישה נעשתה מהקרנל או מהיוזר (1 מהיוזר, 0 מהקרנל) לכל חריגת דף ציינו אם הגישה לזיכרון חוקית או לא (גישה חוקית מוגדרת ככל גישה למידע שאמורה להצליח בסופו של דבר, גם אם יש מספר חריגות דף בדרך), אם גישה אינה חוקית הסבירו מדוע. בנוסף פרטו לכל חריגת דף שזיהיתם (page fault) מה הסיבה לחריגת הדף וכיצד הגרעין יטפל בה. המשך שאלה זו עוסק ב-TLB. כידוע, בעת החלפת הקשר בין תהליכים מתבצע גיבוי של חלק מהרגיסטרים של התהליך שיוצא מהקשר בשדה thread במתאר התהליך. כמו כן ידוע שבעת החלפת הקשר בין תהליכים מתבצע FLUSH לתוכנו של ה-TLB. מפתחי לינוקס החליטו להוסיף תמיכה בקרנל לגיבוי TLB: בעת יציאתו של תהליך מהקשר יישמר התוכן של ה-TLB במשתנה חדש תחת השדה thread במתאר התהליך. כאשר התהליך יחזור להקשר, ייטען הגיבוי ל-TLB של המעבד עליו התהליך חוזר לרוץ. מלבד שינוי זה מערכת ההפעלה זהה לזו שנלמדה בתרגולים.
Full original question text (raw OCR)
שאלה 4 (25 נק') - זיכרון ווירטואלי א. (2 נק' לכל שורה בטבלה, סך הכל 10 נק') בטבלה הבאה מתוארים כל אזורי הזיכרון של תהליך מסוים. לשם פשטות נתייחס לכתובות דצימליות (בבסיס 10) כאשר גודל דף (page) בדצימלי הוא 4096. ערכי vm_flags המתוארים בטבלה מייצגים את ההרשאות הוירטואליות של איזור הזכרון המדובר: • vm_read - מותר לגשת לכתובות באיזור זה לקריאה • vm_write - מותר לגשת לכתובות באיזור זה לכתיבה • vm_exec - מותר לבצע פקודות בכתובות באיזור זה כפקודות מעבד vm_start vm_end Num page S name vm_flags 100,000 108,192 2 code vm_read, vm_exec 200,000 204,096 1 pipe vm_write, vm_may_write 4,096 40,960 9 heap vm_read, vm_write, vm_may_write בטבלה הבאה מתוארות חריגות דף (page fault) אשר התקבלו ע"י מערכת ההפעלה, קוד השגיאה של כל חריגת דף וערך הרגיסטר CR2 השומר את הכתובת אשר גרמה לחריגה. הדגל ק - מציין אם המסגרת (frame) שניגשו אליה נמצאת בזכרון או לא (present) הדגל w - מציין שהגישה לדף נעשתה לשם כתיבה אליו (0 מייצג גישת קריאה ו-1 כתיבה) הדגל rw - מציין האם המסגרת (frame) שניגשו אליה ניתנת לכתיבה (1 אם כן ו-0 אם לא). הדגל ט - מציין האם הגישה נעשתה מהקרנל או מהיוזר (1 מהיוזר, 0 מהקרנל) לכל חריגת דף ציינו אם הגישה לזיכרון חוקית או לא (גישה חוקית מוגדרת ככל גישה למידע שאמורה להצליח בסופו של דבר, גם אם יש מספר חריגות דף בדרך), אם גישה אינה חוקית הסבירו מדוע. בנוסף פרטו לכל חריגת דף שזיהיתם (page fault) מה הסיבה לחריגת הדף וכיצד הגרעין יטפל בה. error code* CR2 r p w u W 190,000 0 1 0 1 0 1 1 1 101,002 r p w u W 30,000 1 1 0 1 200,004 0 1 1 1 3.5GB (ככתובת) 1 0 1 1 גישה הסבר חוקית (כן/לא) המשך שאלה זו עוסק ב-TLB. כידוע, בעת החלפת הקשר בין תהליכים מתבצע גיבוי של חלק מהרגיסטרים של התהליך שיוצא מהקשר בשדה thread במתאר התהליך. כמו כן ידוע שבעת החלפת הקשר בין תהליכים מתבצע FLUSH לתוכנו של ה-TLB. מפתחי לינוקס החליטו להוסיף תמיכה בקרנל לגיבוי TLB: בעת יציאתו של תהליך מהקשר יישמר התוכן של ה-TLB במשתנה חדש תחת השדה thread במתאר התהליך. כאשר התהליך יחזור להקשר, ייטען הגיבוי ל-TLB של המעבד עליו התהליך חוזר לרוץ. מלבד שינוי זה מערכת ההפעלה זהה לזו שנלמדה בתרגולים. ב. (3 נק') מהו היתרון במערכת החדשה על פני המערכת המקורית? נמקו ג. (3 נק') מהו ה-trade off במערכת החדשה (מה אנחנו משלמים כדי לקבל את הפונקציונליות החדשה)? ד. (4 נק') מפתחי לינוקס שמו לב שבמערכת החדשה שפיתחו צצה תקלה חדשה שגרמה למערכת ההפעלה לקרוס לעתים. כאשר חקרו את הבעיה גילו שמשום מה התבצעה כתיבה לאיזורי זכרון של תהליכים מסויימים ושל הגרעין אפילו שתהליכים אלו כלל לא ניסו לכתוב לשם. הסבירו מה יכול היה לגרום לתקלה במערכת החדשה. (רמז: התקלה קרתה לעתים תכופות יותר ככל שהיה יותר עומס זכרון במערכת ההפעלה) ה. (5 נק') הציעו דרך למנוע את הבעיה שתיארתם בסעיף הקודם בצורה היעילה ביותר.
(2 נק' לכל שורה בטבלה, סך הכל 10 נק') [table of page faults]
Page fault error code classification(3 נק') מהו היתרון במערכת החדשה על פני המערכת המקורית? נמקו
libc syscall wrapper caching pitfallsreview:T2·22(3 נק') מהו ה-trade off במערכת החדשה (מה אנחנו משלמים כדי לקבל את הפונקציונליות החדשה)?
libc syscall wrapper caching pitfallsreview:T2·22(4 נק') מפתחי לינוקס שמו לב שבמערכת החדשה שפיתחו צצה תקלה חדשה שגרמה למערכת ההפעלה לקרוס לעתים. כאשר חקרו את הבעיה גילו שמשום מה התבצעה כתיבה לאיזורי זכרון של תהליכים מסויימים ושל הגרעין אפילו שתהליכים אלו כלל לא ניסו לכתוב לשם. הסבירו מה יכול היה לגרום לתקלה במערכת החדשה. (רמז: התקלה קרתה לעתים תכופות יותר ככל שהיה יותר עומס זכרון במערכת ההפעלה)
libc syscall wrapper caching pitfallsreview:T2·22(5 נק') הציעו דרך למנוע את הבעיה שתיארתם בסעיף הקודם בצורה היעילה ביותר.
Voluntary vs preemptive context switchfork/exec address-space semanticslibc syscall wrapper caching pitfalls
The exam question — original PDF
pages 12, 13, 14, 15Exactly 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.
אחרי 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
FD (file descriptors)כל פעולות קלט/פלט של תהליך בלינוקס מבוצעות דרך "קבצים":קבצים "רגילים" לאחסון מידע (/usr/file.txt) נמצאים בדיסק.התקני חומרה גם כן מיוצגים כקבצים, אבל נמצאים בזיכרון.למשל, העכברים המחוברים למחשב מיוצגים כ- /dev/input/mouseN .גם ערוצי תקשורת כמו pipes מיוצגים ע"י קבצים שנמצאים בזיכרון.הקשר בין תהליך לבין קובץ שהוא ניגש אליו נשמר, ברמת המשתמש, ע"י מספר שלם שנקרא file descriptor (FD).לדוגמה: קריאת המערכת open() מחזירה FD.המשתמש מעביר את ה-FD לקריאות מערכת כמו read(), write() כדי לקרוא ולכתוב לקובץ.מערכות הפעלה - תרגול 320
שחרור file objectשאלה: מי מבצע את שחרור הזיכרון של file object? מתי ניתן לשחררו? ייתכנו מצבים בהם תהליכים שונים מצביעים לאותו file object, לכן שחרור ה-file object יכול להתבצע רק לאחר ביצוע close() מכל התהליכים החולקים את אותו ה-file object. זכרו של-file object יש מונה (f_count) הסופר את כמות התהליכים המצביעים עליו בכל רגע נתון. המונה קטן באחד עם כל פעולת close() על האובייקט. כאשר המונה מתאפס, ה-file object ישוחרר.מערכות הפעלה - תרגול 342
מהי החלפת הקשר?מערכות הפעלה - תרגול 610
מהי החלפת הקשר?לכל תהליך יש "הקשר ביצוע" (execution context) המכיל את כל המידע הדרוש לביצוע התהליך.מחסניות, רגיסטרים, תכולת זיכרון, קבצים פתוחים, ..."החלפת הקשר" = עצירת הביצוע של התהליך הנוכחי ושמירת ההקשר שלו.טעינת ההקשר של התהליך הבא לביצוע.הקשר התהליך הנוכחי מתחלף – מכאן שם הפעולה "החלפת הקשר".מערכות הפעלה - תרגול 611
שני סוגים של החלפת הקשרהחלפת הקשר כפויה(== הפקעה)הגרעין מפקיע (כלומר, לוקח בכוח) את המעבד מהתהליך, למשל בעקבות:פסיקת שעון (מטופלת בשגרה scheduler_tick) אשר מגלה כי הזמן שהוקצב לתהליך הנוכחי אזל.אירוע אסינכרוני אשר מעיר תהליך בעל עדיפות טובה יותר מהתהליך הרץ כרגע.לדוגמה: פסיקת דיסק או שחרור מנעול שתהליך המתין לו.החלפת הקשר יזומההתהליך מוותר מרצונו על המעבד, למשל באמצעות:קריאת מערכת חוסמת (כמו wait(), read(), …) אשר מוציאה את התהליך להמתנה.קריאת מערכת exit() אשר מסיימת את התהליך.קריאת מערכת sched_yield() – קריאת מערכת ייעודית לוויתור על המעבד.מערכות הפעלה - תרגול 613
טבלת הדפים (page table)לכל תהליך יש טבלת דפים משלו – מבנה נתונים אשר ממפה בין דפים למסגרות.ניתן לממש טבלת דפים באמצעות מבני נתונים שונים: מערך פשוט, עצים, טבלאות גיבוב (hash tables), ...עבור כל דף במרחב הזיכרון הווירטואלי של התהליך, יש כניסה בטבלת הדפים אשר מציינת:האם הדף נמצא בזיכרון ובאיזו מסגרת?האם הדף נמצא בדיסק ובאיזה מיקום?האם הדף מעולם לא הוקצה? (כלומר איננו בזיכרון ואיננו בדיסק)טבלת הדפים אחראית לתפקידים נוספים כמו הגנת גישה.למשל: טבלת הדפים מסמנת דפים לקריאה בלבד ומונעת גישות כתיבה.19מערכות הפעלה - תרגול 10
סיכום: תהליך התרגום במעבדי אינטל39the CPU searches the TLBhitmissthe CPU walks the page tablecompletedpage faultphysical addressvirtual addressthe OS serves the page faultמערכות הפעלה - תרגול 10
סיכום השיעור שעבר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
COW: טיפול ב-page faultתרחיש הטיפול: האב או הבן מנסים לכתוב לדף מוגן ע"י COW.המעבד ניגש לסיביות הבקרה ב-PTE של הדף, ומגלה כי r/w כבוי.המעבד יוצר חריגת דף (page fault).הגרעין מטפל בחריגה, ובודק שהדף שייך לאחד מאזורי הזיכרון ושהגישה בכלל חוקית (דגל VM_WRITE דלוק במתאר האזור).הגרעין בודק את ערך המונה השיתוף של המסגרת:אם count > 1, מקצים מסגרת חדשה, מעתיקים אליה את המסגרת המקורית, ומצביעים את הדף למסגרת החדשה.במסגרת הישנה מבוצע count-- .במסגרת החדשה מוצב count = 1 .בעותק החדש מאופשרת הכתיבה.אחרת (count == 1), הגרעין פשוט מאפשר כתיבה בדף ע"י הדלקת הדגל r/w.37מערכות הפעלה - תרגול 10
The exam text, the skills it tests, and the exact slides are already in context.