OS PyramidTechnion 234123 · Operating Systemsbasics → exam
Stage 7: Deadlock
2017A_Winter_AQuestion 3core25 pts

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

כפי שראיתם בהרצאות, כל התנאים הבאים חייבים להתקיים על מנת שיוכל להיווצר deadlock: 1. Mutual exclusion 2. Hold & wait 3. Circular wait 4. No process preemption. בבעיית החלב, יהודה ושלומית שמו לב שמאז החתונה הם נקלעים לבעיה באספקת החלב. שלומית, שהתחילה תואר במדעי המחשב כתיכוניסטית, החליטה לנסח אלגוריתם סנכרון כך שביצועו יבטיח את התכונות הבאות: • אם בתחילת ריצת האלגוריתם אין חלב במקרר, אז בסיומו יהיה לכל הפחות קרטון חלב אחד במקרר. • האלגוריתם תמיד מסתיים. שימו לב: • באלגוריתם ישנם 2 משאבים הפועלים כמנעולים: wallet-ı car keys • על מנת שהפעולה buy milk תצליח יש להחזיק לפני כן גם ב-car keys וגם ב-wallet, במקרה של כישלון החלב לא נרכש. • ניסיון לתפיסה של משאב שכבר תפוס ע"י אותו הקורא חוזר מיד ללא שינוי במצב המשאב התפוס. • ניסיון לתפיסת משאב שטרם נתפס ע"י הקורא חוסם את הקורא עד שהמשאב משתחרר ונתפס ע"י הקורא. אם המשאב אינו תפוס הקורא תופס את המשאב וחוזר מיידית. בכל מקרה ברגע שהמשאב נתפס הקורא ממשיך מאיפה שעצר. יהודה ושלומית מקפידים לפעול לפי האלגוריתם המוצע.

Full original question text (raw OCR)

שאלה 3 - סינכרוניזציה (25 נק') כפי שראיתם בהרצאות, כל התנאים הבאים חייבים להתקיים על מנת שיוכל להיווצר deadlock Mutual exclusion .1 Hold & wait .2 Circular wait .3 No process preemption .4 בבעיית החלב, יהודה ושלומית שמו לב שמאז החתונה הם נקלעים לבעיה באספקת החלב. שלומית, שהתחילה תואר במדעי המחשב כתיכוניסטית, החליטה לנסח אלגוריתם סנכרון כך שביצועו יבטיח את התכונות הבאות: • אם בתחילת ריצת האלגוריתם אין חלב במקרר, אז בסיומו יהיה לכל הפחות קרטון חלב אחד במקרר. האלגוריתם תמיד מסתיים. שימו לב: • • • • באלגוריתם ישנם 2 משאבים הפועלים כמנעולים: wallet-ı car keys על מנת שהפעולה buy milk תצליח יש להחזיק לפני כן גם ב-car keys וגם ב-wallet, במקרה של כישלון החלב לא נרכש. ניסיון לתפיסה של משאב שכבר תפוס ע"י אותו הקורא חוזר מיד ללא שינוי במצב המשאב התפוס. ניסיון לתפיסת משאב שטרם נתפס ע"י הקורא חוסם את הקורא עד שהמשאב משתחרר ונתפס ע"י הקורא. אם המשאב אינו תפוס הקורא תופס את המשאב וחוזר מיידית. בכל מקרה ברגע שהמשאב נתפס הקורא ממשיך מאיפה שעצר. יהודה ושלומית מקפידים לפעול לפי האלגוריתם המוצע. 1. (5 נק') שלומית הציעה בהתחלה את האלגוריתם הבא: 1. if no milk: 2. if (Yehuda): 3. 4. if (Shlomit): 5. wait until there is milk get the car keys 6. get the wallet 7. buy milk יהודה טוען שהאלגוריתם עשוי לא להסתיים, האם יהודה צודק? נמקו 2. (5 נק') שלומית שמה לב שהיא זו שתמיד קונה את החלב ולכן ניסחה את האלגוריתם באופן סימטרי: 1. if no milk: 2. 3. atomically get the car keys and the wallet buy milk יהודה טוען שהאלגוריתם עשוי לא להסתיים, האם יהודה צודק? נמקו. 3. (5 נק') יהודה טוען שהאלגוריתם קשה למימוש ולכן שלומית ניסחה אלגוריתם חדש: 1. if no milk: 2. get the car keys 3. 4. get the wallet buy milk יהודה טוען שהאלגוריתם עשוי לא להסתיים, האם יהודה צודק? נמקו. 4. (5 נק') שלומית שמה לב שהאלגוריתם גורם לוויכוחים על המפתחות של הרכב ולכן החליטה לנסח אלגוריתם נוסף: 2. 1. if no milk: if (Yehuda): 3. get the car keys 4. get the wallet 5. buy milk 6. if (Shlomit): 7. 8. 9. 10. 11. 12. get the wallet try to get the car keys //try: non-blocking attempt to take the keys if could not get the car keys: buy milk release the wallet יהודה טוען שהאלגוריתם עשוי לא להסתיים, האם יהודה צודק? נמקו. 5. (5 נק') שלומית שמה לב שהאלגוריתם לא מספיק חברתי ולכן החליטה לנסח אלגוריתם נוסף: 1. if (Yehuda): 2. 3. 4. 5. 6. 7. 8. while (no milk): get the wallet try to get the car keys if could not get car keys: release the wallet else buy milk 9. if (Shlomit): 10. 11. 12. 13. 14. 15. 16. while (no milk): get the car keys try to get the wallet if could not get the wallet: release the car keys else buy milk שלומית טוענת שלפחות אחד מהתנאים לקיום deadlock לא מתקיים כאן. יהודה טוען שהאלגוריתם עשוי לא להסתיים, מי צודק? נמקו.

  1. 1· short_answer· 5 ptsSynchronization & Threads

    (5 נק') שלומית הציעה בהתחלה את האלגוריתם הבא: 1. if no milk: 2. if (Yehuda): 3. wait until there is milk 4. if (Shlomit): 5. get the car keys 6. get the wallet 7. buy milk יהודה טוען שהאלגוריתם עשוי לא להסתיים, האם יהודה צודק? נמקו

    Voluntary vs preemptive context switchPreemption trigger identificationMutex correctness and deadlock avoidance
  2. 2· short_answer· 5 ptsDeadlock

    (5 נק') שלומית שמה לב שהיא זו שתמיד קונה את החלב ולכן ניסחה את האלגוריתם באופן סימטרי: 1. if no milk: 2. atomically get the car keys and the wallet 3. buy milk יהודה טוען שהאלגוריתם עשוי לא להסתיים, האם יהודה צודק? נמקו.

    Voluntary vs preemptive context switchPreemption trigger identificationMutex correctness and deadlock avoidance
  3. 3· short_answer· 5 ptsDeadlock

    (5 נק') יהודה טוען שהאלגוריתם קשה למימוש ולכן שלומית ניסחה אלגוריתם חדש: 1. if no milk: 2. get the car keys 3. get the wallet 4. buy milk יהודה טוען שהאלגוריתם עשוי לא להסתיים, האם יהודה צודק? נמקו.

    Voluntary vs preemptive context switchPreemption trigger identificationMutex correctness and deadlock avoidance
  4. 4· short_answer· 5 ptsDeadlock

    (5 נק') שלומית שמה לב שהאלגוריתם גורם לוויכוחים על המפתחות של הרכב ולכן החליטה לנסח אלגוריתם נוסף: 1. if no milk: 2. if (Yehuda): 3. get the car keys 4. get the wallet 5. buy milk 6. if (Shlomit): 7. get the wallet 8. try to get the car keys 9. //try: non-blocking attempt to take the keys 10. if could not get the car keys: 11. release the wallet 12. buy milk יהודה טוען שהאלגוריתם עשוי לא להסתיים, האם יהודה צודק? נמקו.

    Voluntary vs preemptive context switchPreemption trigger identificationMutex correctness and deadlock avoidance
  5. 5· short_answer· 5 ptsDeadlock

    (5 נק') שלומית שמה לב שהאלגוריתם לא מספיק חברתי ולכן החליטה לנסח אלגוריתם נוסף: 1. if (Yehuda): 2. while (no milk): 3. get the wallet 4. try to get the car keys 5. if could not get car keys: 6. release the wallet 7. else 8. buy milk 9. if (Shlomit): 10. while (no milk): 11. get the car keys 12. try to get the wallet 13. if could not get the wallet: 14. release the car keys 15. else 16. buy milk שלומית טוענת שלפחות אחד מהתנאים לקיום deadlock לא מתקיים כאן. יהודה טוען שהאלגוריתם עשוי לא להסתיים, מי צודק? נמקו.

    Mutex correctness and deadlock avoidanceBanker's algorithm safety check

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 switchL3Preemption trigger identificationL3Mutex correctness and deadlock avoidanceL4Banker's algorithm safety check

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 7slide 36Banker’s algorithm

Banker’s algorithm • “Safe state” – System state whereby we’re sure that all processes can be executed, in a certain order, one after the other, such that each will obtain all the resources it needs to complete its execution – By ensuring such a sequence exists after each allocation => we avoid deadlock • Banker’s data structure – max[p] = (m_1,m_2, …, m_k) = max resource requirements for process p – cur[p] = (c_1,c_2, …, c_k) = current resource allocation for process p – R = (r_1, r_2, …, r_k) = the current resource request (for some process p) – avail = (a_1, a_2, …., a_k) = currently available (free) resources (global) • Example – max[p] = (3,0,1), cur[p] = (3,0,0) – Note that max[p] >= cur[p] always holds /* compare by coordinates */ OS (234123) - deadlocks 36

Lecture slide — text above is the material (no raster available).
Lecture 7slide 37Banker’s algorithm

Banker’s algorithm • Tentatively assume that request R was granted to process q – cur[q] += R // vector addition – avail -= R // vector subtraction • Check if “safe state” (= can satisfy all processes in some order) – initialize P to hold all non-terminated process – while( P isn’t empty ) { found = false for each p in P { // find one p that can be satisfied if( max[p] – cur[p] <= avail ) // p’s biggest request avail += cur[p] // pretend p terminates P -= {p} found = true } if( ! found ) return FAILURE } return SUCCESS OS (234123) - deadlocks 37

Lecture slide — text above is the material (no raster available).
Lecture 7slide 41Summary: ways to deal with deadlocks

Summary: ways to deal with deadlocks rpt 1. Deadlock “prevention” – Violate one of the 4 conditions necessary for deadlock – Deadlock can’t happen – E.g., by ordering resources & acquiring from smallest to biggest 2. Deadlock “avoidance” – Banker’s algorithm – Requires full knowledge about available & requested resources – System stays away from deadlocks by being careful on a per resource-allocation decision basis 3. Deadlock “detection & recovery” – Allow system to enter deadlock state, but put in place mechanisms that can detect, and then recover from this situation – Typically refer to the algorithmic resource-graph problem OS (234123) - deadlocks 41

Lecture slide — text above is the material (no raster available).
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 6slide 14הפקעה (preemption)בעיה: תהליך משתמש עלול לרוץ לנצח (למשל, לולאה אינסופית) ולמנוע את המעבד משאר התהליכים

הפקעה (preemption)בעיה: תהליך משתמש עלול לרוץ לנצח (למשל, לולאה אינסופית) ולמנוע את המעבד משאר התהליכים.פגיעה בהוגנות (fairness) ותגובתיות (rrsponsiveness).פתרון: לינוקס מפקיעה (preempt) את המעבד מתהליך אחד לטובת תהליך אחר, בעזרת התקן חומרה מיוחד – השעון.מערכת ההפעלה מבקשת מהשעון לשלוח פסיקה במרווחי זמן קבועים כדי להעביר את השליטה למערכת ההפעלה.כל הפסיקות, בפרט פסיקת שעון, מטופלות במצב גרעין, ואז הגרעין מחליף הקשר אם יש צורך.מערכות הפעלה - תרגול 614

Tutorial 8slide 6משתנה תנאי (condition variable)משתנה תנאי הוא אובייקט סנכרון המאפשר לחוט לצאת להמתנה בתוך קטע קריטי

משתנה תנאי (condition variable)משתנה תנאי הוא אובייקט סנכרון המאפשר לחוט לצאת להמתנה בתוך קטע קריטי.כלומר, לפנות את המעבד ולצאת לתור המתנה.ההמתנה תתבצע עד לקיום תנאי כלשהו.ההמתנה מאפשרת לאכוף סדר בביצוע של החוטים. שימוש תכנותי נכון במשתני תנאי מחייב להגדיר גם:משתנה מצב – החוט עובר להמתנה או חוזר מהמתנה בהתאם לערכו של משתנה המצב.מנעול mutex – מבטיח לנו אטומיות והגנה על הקטע הקריטי.מערכות הפעלה - תרגול 86

Tutorial 8slide 7סכימה כללית למשתני תנאיcond_t c; // should be initializedmutex_t m; // should be initializedint state_var = 0;החוט המ...

סכימה כללית למשתני תנאיcond_t c; // should be initializedmutex_t m; // should be initializedint state_var = 0;החוט הממתין לאירוע יקרא ל:while (!condition_holds(state_var)) cond_wait(&c, &m);החוט שמסמן לחוטים הממתינים להמשיך יקרא ל:if (condition_holds(state_var)) cond_signal(&c);מערכות הפעלה - תרגול 87מדוע cond_wait() מקבלתגם את המנעול?

Tutorial 8slide 11המתנה על משתני תנאיint pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);פעולה: משחררת את המנעול ומעביר...

המתנה על משתני תנאיint pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);פעולה: משחררת את המנעול ומעבירה את החוט להמתין על משתנה התנאי באופן אטומי (ראינו קודם מדוע זה הכרחי).החוט הממתין חייב להחזיק במנעול mutex לפני הקריאה.בחזרה מהמתנה על משתנה התנאי, החוט עובר להמתין על המנעול. החוט יחזור מהקריאה ל-pthread_cond_wait() רק לאחר שינעל מחדש את ה-mutex.ערך מוחזר: הפעולה תמיד מצליחה ומחזירה 0.11מערכות הפעלה - תרגול 8

Ask Gemini
2017A_Winter_A · Q3 — 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.