OS PyramidTechnion 234123 · Operating Systemsbasics → exam
Stage 9: Virtual Memory
2017B_Spring_BQuestion 4core25 pts

בטבלה הבאה מתוארים כל אזורי הזיכרון של תהליך מסוים. לשם פשטות נתייחס לכתובות דצימליות (בבסיס 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 נק') הציעו דרך למנוע את הבעיה שתיארתם בסעיף הקודם בצורה היעילה ביותר.

  1. א· trace· 10 ptsVirtual Memory

    (2 נק' לכל שורה בטבלה, סך הכל 10 נק') [table of page faults]

    Page fault error code classification
  2. ב· short_answer· 3 ptsVirtual Memory

    (3 נק') מהו היתרון במערכת החדשה על פני המערכת המקורית? נמקו

    libc syscall wrapper caching pitfalls
    review:T2·22
  3. ג· short_answer· 3 ptsVirtual Memory

    (3 נק') מהו ה-trade off במערכת החדשה (מה אנחנו משלמים כדי לקבל את הפונקציונליות החדשה)?

    libc syscall wrapper caching pitfalls
    review:T2·22
  4. ד· short_answer· 4 ptsVirtual Memory

    (4 נק') מפתחי לינוקס שמו לב שבמערכת החדשה שפיתחו צצה תקלה חדשה שגרמה למערכת ההפעלה לקרוס לעתים. כאשר חקרו את הבעיה גילו שמשום מה התבצעה כתיבה לאיזורי זכרון של תהליכים מסויימים ושל הגרעין אפילו שתהליכים אלו כלל לא ניסו לכתוב לשם. הסבירו מה יכול היה לגרום לתקלה במערכת החדשה. (רמז: התקלה קרתה לעתים תכופות יותר ככל שהיה יותר עומס זכרון במערכת ההפעלה)

    libc syscall wrapper caching pitfalls
    review:T2·22
  5. ה· short_answer· 5 ptsVirtual Memory

    (5 נק') הציעו דרך למנוע את הבעיה שתיארתם בסעיף הקודם בצורה היעילה ביותר.

    Voluntary vs preemptive context switchfork/exec address-space semanticslibc syscall wrapper caching pitfalls

The exam question — original PDF

pages 12, 13, 14, 15

Exactly as it appears on the exam paper.

loading page 12
loading page 13
loading page 14
loading page 15

Built from these components

Ordered basic → advanced. Master the earlier ones first.

L2Voluntary vs preemptive context switchL3fork/exec address-space semanticsL3libc syscall wrapper caching pitfallsL3Pipe IPC semanticsL3Virtual-to-physical address translationL3Linux VMA vm_flags interpretationL4SRT / preemptive Gantt constructionL4Page fault error code classification

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.

Tutorial 2slide 10אחרי fork()parentint main() { int x = 0; pid_t p = fork(); if (p == 0) { x = 1; } else { x = 2; }}sonint main() { int...

אחרי 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

Tutorial 2slide 15הדפסה מתואמת למסךשימוש ב-wait() יכול לפתור את הבעיה שראינו קודם כאשר מדפיסים למסך במקביל משני תהליכים:int main() { pi...

הדפסה מתואמת למסךשימוש ב-wait() יכול לפתור את הבעיה שראינו קודם כאשר מדפיסים למסך במקביל משני תהליכים:int main() { pid_t p = fork(); if (p > 0) { // parent waits for child wait(NULL); } printf(“hello”); return 0;}מערכות הפעלה - תרגול 215

Tutorial 2slide 22קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו

קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו.pid_t getppid();קריאת מערכת המחזירה את ה-PID של תהליך האב של התהליך הקורא.שאלה: מה המשמעות של getppid() == 1 עבור תהליך משתמש טיפוסי?תשובה: תהליך האב הוא init. קורה למשל אם תהליך הבן יתום.מערכות הפעלה - תרגול 222

Tutorial 3slide 20FD (file descriptors)כל פעולות קלט/פלט של תהליך בלינוקס מבוצעות דרך "קבצים":קבצים "רגילים" לאחסון מידע (/usr/file

FD (file descriptors)כל פעולות קלט/פלט של תהליך בלינוקס מבוצעות דרך "קבצים":קבצים "רגילים" לאחסון מידע (/usr/file.txt) נמצאים בדיסק.התקני חומרה גם כן מיוצגים כקבצים, אבל נמצאים בזיכרון.למשל, העכברים המחוברים למחשב מיוצגים כ- /dev/input/mouseN .גם ערוצי תקשורת כמו pipes מיוצגים ע"י קבצים שנמצאים בזיכרון.הקשר בין תהליך לבין קובץ שהוא ניגש אליו נשמר, ברמת המשתמש, ע"י מספר שלם שנקרא file descriptor (FD).לדוגמה: קריאת המערכת open() מחזירה FD.המשתמש מעביר את ה-FD לקריאות מערכת כמו read(), write() כדי לקרוא ולכתוב לקובץ.מערכות הפעלה - תרגול 320

Tutorial 3slide 42שחרור file objectשאלה: מי מבצע את שחרור הזיכרון של file object? מתי ניתן לשחררו? ייתכנו מצבים בהם תהליכים שונים מצביע...

שחרור file objectשאלה: מי מבצע את שחרור הזיכרון של file object? מתי ניתן לשחררו? ייתכנו מצבים בהם תהליכים שונים מצביעים לאותו file object, לכן שחרור ה-file object יכול להתבצע רק לאחר ביצוע close() מכל התהליכים החולקים את אותו ה-file object. זכרו של-file object יש מונה (f_count) הסופר את כמות התהליכים המצביעים עליו בכל רגע נתון. המונה קטן באחד עם כל פעולת close() על האובייקט. כאשר המונה מתאפס, ה-file object ישוחרר.מערכות הפעלה - תרגול 342

Tutorial 6slide 10מהי החלפת הקשר?מערכות הפעלה - תרגול 610

מהי החלפת הקשר?מערכות הפעלה - תרגול 610

Tutorial 6slide 11מהי החלפת הקשר?לכל תהליך יש "הקשר ביצוע" (execution context) המכיל את כל המידע הדרוש לביצוע התהליך

מהי החלפת הקשר?לכל תהליך יש "הקשר ביצוע" (execution context) המכיל את כל המידע הדרוש לביצוע התהליך.מחסניות, רגיסטרים, תכולת זיכרון, קבצים פתוחים, ..."החלפת הקשר" = עצירת הביצוע של התהליך הנוכחי ושמירת ההקשר שלו.טעינת ההקשר של התהליך הבא לביצוע.הקשר התהליך הנוכחי מתחלף – מכאן שם הפעולה "החלפת הקשר".מערכות הפעלה - תרגול 611

Tutorial 6slide 13שני סוגים של החלפת הקשרהחלפת הקשר כפויה(== הפקעה)הגרעין מפקיע (כלומר, לוקח בכוח) את המעבד מהתהליך, למשל בעקבות:פסיקת ...

שני סוגים של החלפת הקשרהחלפת הקשר כפויה(== הפקעה)הגרעין מפקיע (כלומר, לוקח בכוח) את המעבד מהתהליך, למשל בעקבות:פסיקת שעון (מטופלת בשגרה scheduler_tick) אשר מגלה כי הזמן שהוקצב לתהליך הנוכחי אזל.אירוע אסינכרוני אשר מעיר תהליך בעל עדיפות טובה יותר מהתהליך הרץ כרגע.לדוגמה: פסיקת דיסק או שחרור מנעול שתהליך המתין לו.החלפת הקשר יזומההתהליך מוותר מרצונו על המעבד, למשל באמצעות:קריאת מערכת חוסמת (כמו wait(), read(), …) אשר מוציאה את התהליך להמתנה.קריאת מערכת exit() אשר מסיימת את התהליך.קריאת מערכת sched_yield() – קריאת מערכת ייעודית לוויתור על המעבד.מערכות הפעלה - תרגול 613

Tutorial 10slide 19טבלת הדפים (page table)לכל תהליך יש טבלת דפים משלו – מבנה נתונים אשר ממפה בין דפים למסגרות

טבלת הדפים (page table)לכל תהליך יש טבלת דפים משלו – מבנה נתונים אשר ממפה בין דפים למסגרות.ניתן לממש טבלת דפים באמצעות מבני נתונים שונים: מערך פשוט, עצים, טבלאות גיבוב (hash tables), ...עבור כל דף במרחב הזיכרון הווירטואלי של התהליך, יש כניסה בטבלת הדפים אשר מציינת:האם הדף נמצא בזיכרון ובאיזו מסגרת?האם הדף נמצא בדיסק ובאיזה מיקום?האם הדף מעולם לא הוקצה? (כלומר איננו בזיכרון ואיננו בדיסק)טבלת הדפים אחראית לתפקידים נוספים כמו הגנת גישה.למשל: טבלת הדפים מסמנת דפים לקריאה בלבד ומונעת גישות כתיבה.19מערכות הפעלה - תרגול 10

Tutorial 10slide 39סיכום: תהליך התרגום במעבדי אינטל39the CPU searches the TLBhitmissthe CPU walks the page tablecompletedpage faultphysi...

סיכום: תהליך התרגום במעבדי אינטל39the CPU searches the TLBhitmissthe CPU walks the page tablecompletedpage faultphysical addressvirtual addressthe OS serves the page faultמערכות הפעלה - תרגול 10

Tutorial 11slide 2סיכום השיעור שעבר2the CPU searches the TLBhitmissthe CPU walks the page tablecompletedpage faultphysical addressvirtu...

סיכום השיעור שעבר2the CPU searches the TLBhitmissthe CPU walks the page tablecompletedpage faultphysical addressvirtual addressthe OS serves the page faultמערכות הפעלה - תרגול 10

Tutorial 11slide 3מה נלמד היום?3the CPU searches the TLBhitmissthe CPU walks the page tablecompletedpage faultphysical addressvirtual a...

מה נלמד היום?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

Tutorial 11slide 17הרשאות של אזור זיכרוןהדגלים המציינים את הרשאות האזור נשמרים בשדה vm_flags והם מאפשרים לגרעין לסווג גישות חוקיות ולא ח...

הרשאות של אזור זיכרוןהדגלים המציינים את הרשאות האזור נשמרים בשדה 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

Tutorial 11slide 37COW: טיפול ב-page faultתרחיש הטיפול: האב או הבן מנסים לכתוב לדף מוגן ע"י COW

COW: טיפול ב-page faultתרחיש הטיפול: האב או הבן מנסים לכתוב לדף מוגן ע"י COW.המעבד ניגש לסיביות הבקרה ב-PTE של הדף, ומגלה כי r/w כבוי.המעבד יוצר חריגת דף (page fault).הגרעין מטפל בחריגה, ובודק שהדף שייך לאחד מאזורי הזיכרון ושהגישה בכלל חוקית (דגל VM_WRITE דלוק במתאר האזור).הגרעין בודק את ערך המונה השיתוף של המסגרת:אם count > 1, מקצים מסגרת חדשה, מעתיקים אליה את המסגרת המקורית, ומצביעים את הדף למסגרת החדשה.במסגרת הישנה מבוצע count-- .במסגרת החדשה מוצב count = 1 .בעותק החדש מאופשרת הכתיבה.אחרת (count == 1), הגרעין פשוט מאפשר כתיבה בדף ע"י הדלקת הדגל r/w.37מערכות הפעלה - תרגול 10

Ask Gemini
2017B_Spring_B · Q4 — question + its material already loaded
Pick a shortcut above or ask anything about this question.
The exam text, the skills it tests, and the exact slides are already in context.