OS PyramidTechnion 234123 · Operating Systemsbasics → exam
Stage 9: Virtual Memory
examB-spring2020Question 4corecritical25 pts

This question spans 2 stages — each part below is tagged with, and links to, the stage it belongs to.

1. (4 נק') נתון תהליך בעל מרחב זיכרון וירטואלי כפי שמוצג באיור המצורף מימין: - ריבוע צבוע מסמן אזור זיכרון במרחב המשתמש (למעט אפור המסמן את מרחב הגרעין). - בתוך כל ריבוע מופיע הגודל של אזור הזיכרון. - אין לתהליך עוד אזורי זיכרון מלבד המתוארים בתמונה. - התהליך רץ במעבד 64 ביט, הזהה לנלמד בתרגולים. בסעיף זה בלבד אין חובה לנמק. רשמו את הטווח המדויק ביותר העונה על השאלה (למשל: בתים XX-YY). מעתה והלאה, חובה לנמק בכל תשובה. 2. (10 נק') כעת נניח כי התהליך הנתון מריץ את הפונקציה func הנתונה למטה (אין שינוי בתמונת הזיכרון של התהליך). ```c 1. #define PAGE_SIZE 4096 // Number of bytes in a single page. 2. void func() { 3. // Allocating 3 anonymous pages. 4. char* arr = (char*)mmap (NULL, PAGE_SIZE*3, PROT_WRITE | PROT_READ, ..., -1, ... ); 5. x = arr[0]; 6. arr[0] = 'a'; 7. arr[PAGE_SIZE + 4] = 'b'; 8. arr[1000] = 'c'; ``` כעת נתון הקוד הבא: ```c 1. #define ARR_LEN 100 2. int main() { 3. int* arr = (int*) malloc(ARR_LEN * sizeof(int)); 4. 5. // fill array: 6. for (int i = 0; i < ARR_LEN; i++){ 7. arr[i] = i; 8. } 9. 10. if (fork () == 0) { 11. char tmp1 = arr[0]; 12. arr[1] = tmp1; 13. } else { 14. char tmp2 = arr[0]; 15. arr[1] = tmp2; 16. wait(); 17. } 18. } ``` 4. (4 נק') הניחו כי תהליך האב מבצע את שורות 14-15 לפני שתהליך הבן מבצע את שורות 11-12. 5. (4 נק') כעת הניחו שתהליך האב מבצע את שורות 14-15 אחרי שתהליך הבן מבצע את שורות 11-12.

Full original question text (raw OCR)

שאלה 4 – זיכרון וירטואלי (נק': 25) 1. (4 נק') נתון תהליך בעל מרחב זיכרון וירטואלי כפי שמוצג באיור המצורף מימין: - ריבוע צבוע מסמן אזור זיכרון במרחב המשתמש (למעט אפור המסמן את מרחב הגרעין). בתוך כל ריבוע מופיע הגודל של אזור הזיכרון. - אין לתהליך עוד אזורי זיכרון מלבד המתוארים בתמונה. - התהליך רץ במעבד 64 ביט, הזהה לנלמד בתרגולים. בסעיף זה בלבד אין חובה לנמק. רשמו את הטווח המדויק ביותר העונה על השאלה (למשל: בתים XX-YY). a.(1 נק') לכמה בתים בזיכרון הוירטואלי יכול התהליך לגשת (בבתים)? .b (1 נק') לכמה בתים בזיכרון הפיזי יכול התהליך לגשת (בבתים)? c.(2 נק') באילו כתובות וירטואליות נמצא ה-PCB של התהליך? מעתה והלאה, חובה לנמק בכל תשובה. 2. (10 נק') כעת נניח כי התהליך הנתון מריץ את הפונקציה func הנתונה למטה (אין שינוי בתמונת הזיכרון של התהליך). 1 #define PAGE_SIZE 4096 // Number of bytes in a single page. 2 void func() { 3 // Allocating 3 anonymous pages. 4 char* arr = (char*)mmap (NULL, PAGE_SIZE*3, PROT_WRITE | PROT_READ, ..., -1, ... ); 5 x = arr[0]; 6 arr[0] = 'a'; 7 arr[PAGE_SIZE + 4] = 'b'; 8 arr[1000] = 'c'; מלאו את הטבלה הבאה בנוגע לקוד שהוצג: נמקו בקצרה עבור כל שורה: כעת נתון הקוד הבא: 1 #define ARR_LEN 100 2 int main() { 3 int* arr = (int*) malloc(ARR_LEN * sizeof(int)); 4 5 // fill array: 6 for (int i = 0; i < ARR_LEN; i++){ 7 arr[i] = i; 8 } 9 10 if (fork () == 0) { 11 char tmp1 = arr[0]; 12 arr[1] = tmp1; 13 } else { 14 char tmp2 = arr[0]; 15 arr[1] = tmp2; 16 wait(); 17 } 18 } 3. (3 נק') באיזו שורה/שורות מע' ההפעלה יוצרת לראשונה את רשומות אזורי הזיכרון של תהליך הבן? נימוק: 4. (4 נק') הניחו כי תהליך האב מבצע את שורות 14-15 לפני שתהליך הבן מבצע את שורות 11-12. .a (2 נק') האם תתרחש חריגת דף (PF) כשתהליך האב יבצע את שורה 14? כן / לא נימוק: .b (2 נק') האם תתרחש חריגת דף (PF) כשתהליך האב יבצע את שורה 15? כן / לא נימוק: 5. (4 נק') כעת הניחו שתהליך האב מבצע את שורות 14-15 אחרי שתהליך הבן מבצע את שורות 11-12. האם תתרחש חריגת דף (PF) כשתהליך האב יבצע את שורה 15? כן / לא נימוק:

  1. 1.a· calculation· 1 ptsVirtual Memory

    (1 נק') לכמה בתים בזיכרון הוירטואלי יכול התהליך לגשת (בבתים)?

    fork/exec address-space semanticslibc syscall wrapper caching pitfallsSRT / preemptive Gantt construction
  2. 1.b· calculation· 1 ptsVirtual Memory

    (1 נק') לכמה בתים בזיכרון הפיזי יכול התהליך לגשת (בבתים)?

    fork/exec address-space semanticslibc syscall wrapper caching pitfallsSRT / preemptive Gantt construction
  3. 1.c· short_answer· 2 ptsVirtual Memory

    (2 נק') באילו כתובות וירטואליות נמצא ה-PCB של התהליך?

    libc syscall wrapper caching pitfalls
    review:T2·22
  4. 2· trace· 10 ptsVirtual Memory

    מלאו את הטבלה הבאה בנוגע לקוד שהוצג: מספר שורת קוד: 4, 5, 6, 7, 8 מספר חריגות הדף (PF) המינימלי שנוצרו במהלך הפקודה מספר אזורי זיכרון חדשים שהוקצו לתהליך במהלך הפקודה מספר מסגרות פיזיות חדשות שהוקצו עבור מרחב המשתמש של התהליך במהלך הפקודה

    fork/exec address-space semantics
  5. 3· short_answer· 3 ptsProcesses & Signals

    (3 נק') באיזו שורה/שורות מע' ההפעלה יוצרת לראשונה את רשומות אזורי הזיכרון של תהליך הבן? נימוק:

    fork/exec address-space semanticslibc syscall wrapper caching pitfallsSRT / preemptive Gantt construction
  6. 4.a· short_answer· 2 ptsVirtual Memory

    (2 נק') האם תתרחש חריגת דף (PF) כשתהליך האב יבצע את שורה 14? כן / לא נימוק:

    Page fault error code classification
  7. 4.b· short_answer· 2 ptsVirtual Memory

    (2 נק') האם תתרחש חריגת דף (PF) כשתהליך האב יבצע את שורה 15? כן / לא נימוק:

    Page fault error code classification
  8. 5· short_answer· 4 ptsVirtual Memory

    (4 נק') כעת הניחו שתהליך האב מבצע את שורות 14-15 אחרי שתהליך הבן מבצע את שורות 11-12. האם תתרחש חריגת דף (PF) כשתהליך האב יבצע את שורה 15? כן / לא נימוק:

    Page fault error code classification

The exam question — original PDF

Exactly as it appears on the exam paper.

loading PDF…
loading PDF…

Built from these components

Ordered basic → advanced. Master the earlier ones first.

L3fork/exec address-space semanticsL3libc syscall wrapper caching pitfallsL3Linux VMA vm_flags interpretationL3Copy-on-write fork memory protectionL4SRT / preemptive Gantt constructionL4Page fault error code classificationL4do_page_fault handler reasoning

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.

Lecture 4–5slide 39SRTF (Shortest-Remaining-Time First)

SRTF (Shortest-Remaining-Time First) • Assume different jobs may arrive at different times • SJF is not optimal – As it’s not preemptive, and – A short job might arrive while a very long job is running => recall: convoy effect • SRTF is just like SJF but – Is allowed to use preemption – Hence, it’s “optimal” (assuming a zero context-switch cost etc.) • Whenever a new job arrives, or an old job terminates – SRTF schedules the job with the shortest remaining time – Thereby making an optimal decision 39 OS (234123) - scheduling

Lecture slide — text above is the material (no raster available).
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 5slide 9דוגמת FCFSaverageResponseTime = (10 + 20 + 30) / 3 = 20כעת נסיר את הנחה 1 ("כל התהליכים רצים למשך אותו זמן")

דוגמת FCFSaverageResponseTime = (10 + 20 + 30) / 3 = 20כעת נסיר את הנחה 1 ("כל התהליכים רצים למשך אותו זמן"). לכל תהליך זמן ריצה משלו.תוכלו לחשוב על דוגמה שבה FCFS אינו יעיל?מערכות הפעלה - תרגול 59כל התהליכים רצים למשך אותו זמן.כל התהליכים מגיעים באותו זמן (t=0).אם תהליך התחיל לרוץ, אז הוא ירוץ עד לסיומו ללא הפסקות.התהליכים משתמשים רק במעבד ולא מבצעים I/O.זמן הריצה של כל התהליכים ידוע מראש.

Tutorial 5slide 10אפקט השיירה (convoy effect)averageResponseTime = (100 + 110 + 120) / 3 = 110אלגוריתם FCFS עלול לסבול מ"אפקט השיירה": ...

אפקט השיירה (convoy effect)averageResponseTime = (100 + 110 + 120) / 3 = 110אלגוריתם FCFS עלול לסבול מ"אפקט השיירה": מצב שבו תהליך אחד ארוך מעכב הרבה תהליכים קצרים. מערכות הפעלה - תרגול 510

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

מרחבי זיכרון וקריאות מערכתחוטים הנוצרים ע"י קריאת המערכתclone() משתפים את מרחב הזיכרון ע"י הצבעה לאותו מתאר מרחב הזיכרון של תהליך האב.יש להגדיל את מונה השיתוף (mm_users) של מתאר מרחב הזיכרון של תהליך האב.קריאת המערכת execv() ודומותיה טוענות תהליך חדש ולכן הן משחררות את מרחב הזיכרון ומקצות אחד חדש.קריאת המערכתfork() מקצה לתהליך הבן מרחב זיכרון משלו.במקרה שכזה צריך להעתיק את מרחב הזיכרון של האב לזה של הבן.בפועל, בדרך-כלל אין באמת העתקה בזכות מנגנון copy-on-write.23מערכות הפעלה - תרגול 10

Tutorial 11slide 27הפתרון: copy-on-write (COW)הרעיון של מנגנון copy-on-write (COW) הוא:דפים הניתנים לכתיבה שאינם יכולים להיות משותפים (ל...

הפתרון: copy-on-write (COW)הרעיון של מנגנון copy-on-write (COW) הוא:דפים הניתנים לכתיבה שאינם יכולים להיות משותפים (לדוגמה, המחסנית), מוגדרים בתחילה כמשותפים אבל מועתקים לעותק פרטי כאשר אחד התהליכים השותפים (האב או הבן) מנסה לכתוב אליהם לראשונה.שאר הדפים (כדוגמת דפי קוד או דפי נתונים לקריאה בלבד) הופכים למשותפים בין מרחבי הזיכרון של האב והבן.מנגנון COW פותר את שתי הבעיות שהוצגו קודם:COW מקטין את זמן הביצוע של fork() כי הוא "פורס לתשלומים" את ההעתקה של כל מרחב הזיכרון להרבה העתקות קטנות בגודל דף שיתבצעו בעתיד---בכל כתיבה ראשונה לדף שאינו משותף.במידה ותהליך הבן יבצע מיד execv(), מרחב הזיכרון שלו יימחק וכך תיחסך רוב פעולת ההעתקה.27מערכות הפעלה - תרגול 10

Tutorial 11slide 28father processpage tablememory regionsדוגמה: לפני קריאת מערכת fork()28…PTE #11r/w = 1…frame #250count == 1מערכות הפעל...

father processpage tablememory regionsדוגמה: לפני קריאת מערכת fork()28…PTE #11r/w = 1…frame #250count == 1מערכות הפעלה - תרגול 10region #1VM_MAYWRITE=1VM_WRITE=1region #2

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

Tutorial 11slide 43חריגת דף (page fault)החומרה מתריעה באמצעות חריגת דף על:גישה לדף שאינו נמצא בזיכרון, כלומר הביט present==0 בכניסה המתא...

חריגת דף (page fault)החומרה מתריעה באמצעות חריגת דף על:גישה לדף שאינו נמצא בזיכרון, כלומר הביט present==0 בכניסה המתאימה בטבלת הדפים.גישה לא חוקית (שלא לפי ההרשאות בטבלת הדפים) לדף שנמצא בזיכרון, למשל ניסיון כתיבה לדף שמותר לקריאה בלבד.חריגת דף מפעילה את שגרת הטיפול הממומשת בפונקציית הגרעין do_page_fault().בסיום הטיפול בחריגה מבוצעת מחדש ההוראה שגרמה לה.אלא אם כן, כמובן, הטיפול בחריגה הורג את התהליך.43מערכות הפעלה - תרגול 10

Ask Gemini
examB-spring2020 · 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.