OS PyramidTechnion 234123 · Operating Systemsbasics → exam
Stage 6: Synchronization & Threads
2018A_Winter_AQuestion 4core30 pts

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

חסן רצה לממש מנעולים לשימוש קוד הגרעין (כלומר מנעולים להגדרת קטעים קריטיים בקוד הגרעין) כפי שנלמדו בהרצאה. נגדיר שלוש תכונות של מנעולים: A - אם תהליך מנסה לתפוס את המנעול בזמן שהמנעול תפוס, התהליך יוצא להמתנה. B - המימוש של המנעול יכול לרוץ גם ב-user mode. C - המימוש של המנעול משתמש בטכניקת busy wait. בהרצאה, במימוש של אחד המנעולים ראינו את הקוד הבא: 1. void acquire(struct spinlock *lk) { 2. disableInterrupts(); 3. while(xchg(&lk->locked, 1) != 0 ); 4.} עידו טוען: שורה 2 מיותרת עבור מעבד עם ליבה אחת. ליאוניד טוען: שורה 3 מיותרת עבור מעבד עם ליבה אחת.

Full original question text (raw OCR)

חלק 4 - סינכרוניזציה (30 נק') חסן רצה לממש מנעולים לשימוש קוד הגרעין (כלומר מנעולים להגדרת קטעים קריטיים בקוד הגרעין) כפי שנלמדו בהרצאה. נגדיר שלוש תכונות של מנעולים: A - אם תהליך מנסה לתפוס את המנעול בזמן שהמנעול תפוס, התהליך יוצא להמתנה. B - המימוש של המנעול יכול לרוץ גם ב-user mode. C - המימוש של המנעול משתמש בטכניקת busy wait. 15. (6 נק') איזה תכונות מתקיימות עבור spinlock כפי שנלמד בהרצאה? נימוק: 16. (6 נק') איזה תכונות מתקיימות עבור semaphore כפי שנלמד בהרצאה? נימוק: בהרצאה, במימוש של אחד המנעולים ראינו את הקוד הבא: 1. void acquire(struct spinlock *lk) { 2. disableInterrupts(); 3. while(xchg(&lk->locked, 1) != 0 ); 4.} עידו טוען: שורה 2 מיותרת עבור מעבד עם ליבה אחת. 17. (6 נק') האם הטענה של עידו נכונה? נימוק: ליאוניד טוען: שורה 3 מיותרת עבור מעבד עם ליבה אחת. 18. (6 נק') האם הטענה של ליאוניד נכונה? נימוק: 19. (6 נק') האם שורה 2 צריכה לבטל את הפסיקות מקומית (רק בליבת המעבד הנוכחית) או גלובאלית (בכל הליבות במערכת)? נימוק:

  1. (6 נק') איזה תכונות מתקיימות עבור spinlock כפי שנלמד בהרצאה? a. A בלבד b. B בלבד c. C בלבד d. A,B בלבד e. A,C בלבד f. B,C בלבד

    Spinlock implementation properties
  2. (6 נק') איזה תכונות מתקיימות עבור semaphore כפי שנלמד בהרצאה? a. A בלבד b. B בלבד c. C בלבד d. A,B בלבד e. A,C בלבד f. B,C בלבד

    Semaphore blocking and busy-wait
  3. 17· mcq· 6 ptsDeadlock

    (6 נק') האם הטענה של עידו נכונה? a. הטענה נכונה. שורה זו הכרחית רק במערכת מרובת ליבות כדי למנוע deadlock. b. הטענה נכונה. שורה זו הכרחית רק במערכת מרובת ליבות כדי להבטיח מניעה הדדית. c. הטענה נכונה. שורה זו הכרחית רק במערכת מרובת ליבות כדי להבטיח סדר ביצוע נכון. d. הטענה שגויה. ללא שורה זו שימוש במנעול עלול לגרום ל-deadlock. e. הטענה שגויה. ללא שורה זו המנעול לא מבטיח מניעה הדדית. f. הטענה שגויה. ללא שורה זו המעבד עלול לבצע את הפקודות בסדר לא נכון.

    libc syscall wrapper caching pitfallsMutex correctness and deadlock avoidanceBanker's algorithm safety check
  4. (6 נק') האם הטענה של ליאוניד נכונה? a. הטענה נכונה. שורה זו הכרחית רק במערכת מרובת ליבות כדי למנוע deadlock. b. הטענה נכונה. שורה זו הכרחית רק במערכת מרובת ליבות כדי להבטיח מניעה הדדית. c. הטענה נכונה. שורה זו הכרחית רק במערכת מרובת ליבות כדי להבטיח סדר ביצוע נכון. d. הטענה שגויה. ללא שורה זו שימוש במנעול עלול לגרום ל-deadlock. e. הטענה שגויה. ללא שורה זו המנעול לא מבטיח מניעה הדדית. f. הטענה שגויה. ללא שורה זו המעבד עלול לבצע את הפקודות בסדר לא נכון.

    libc syscall wrapper caching pitfallsMutex correctness and deadlock avoidanceBanker's algorithm safety check
  5. (6 נק') האם שורה 2 צריכה לבטל את הפסיקות מקומית (רק בליבת המעבד הנוכחית) או גלובאלית (בכל הליבות במערכת)? a. מקומית, כי אחרת יהיה deadlock. b. מקומית, כדי לשפר את הביצועים. c. מקומית, אחרת המנעול לא יבטיח מניעה הדדית. d. גלובאלית, כי אחרת יהיה deadlock. e. גלובאלית, כדי לשפר את הביצועים. f. גלובאלית, אחרת המימוש לא מבטיח שהמעבד יבצע את הפקודות בסדר הנכון.

    libc syscall wrapper caching pitfallsLocal vs global interrupt disableMutex correctness and deadlock avoidanceBanker's algorithm safety check

The exam question — original PDF

pages 13, 14, 15

Exactly as it appears on the exam paper.

loading page 13
loading page 14
loading page 15

Built from these components

Ordered basic → advanced. Master the earlier ones first.

L3libc syscall wrapper caching pitfallsL3Local vs global interrupt disableL3Spinlock implementation propertiesL3Semaphore blocking and busy-waitL3Mutex correctness and deadlock avoidanceL4Banker's algorithm safety checkL4SRT / preemptive Gantt construction

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).
Tutorial 2slide 22קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו

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

Tutorial 2slide 28מערכות הפעלה - תרגול 2281שאלה ממבחן

מערכות הפעלה - תרגול 2281שאלה ממבחן

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 7slide 28קריאת המערכת clone()flags – מסכת דגלים הקובעת את צורת השיתוף בין התהליך הקורא והתהליך החדש

קריאת המערכת clone()flags – מסכת דגלים הקובעת את צורת השיתוף בין התהליך הקורא והתהליך החדש. להלן מספר דגלים אופייניים:ניתן לשלב מספר דגלים יחד באמצעות OR לוגי ביניהם, לדוגמה:CLONE_VM | CLONE_FS .ערך מוחזר: במקרה של הצלחה מוחזר ה-PID של התהליך החדש,אחרת -1.מערכות הפעלה - תרגול 728CLONE_VMשיתוף מרחב הזיכרוןCLONE_FILESשיתוף טבלת הקבצים הפתוחיםCLONE_FSשיתוף טבלת נתוני עבודה עם קבצים, המכילה נתונים כגון ספרית העבודה הנוכחית ועודCLONE_PARENTלתהליך החדש יהיה אותו אב כמו התהליך הקורא (אחרת החדש יהיה הבן של הקורא)CLONE_THREADהתהליך החדש הוא חוט באותה קבוצת חוטים כמו התהליך הקורא (אותו tgid). גורר גם CLONE_PARENT

Tutorial 7slide 45מנעולים עם/בלי המתנהspinlockכאשר חוט מנסה לתפוס מנעול נעול, הוא בודק את ערך המנעול שוב ושוב מבלי לצאת מתור הריצה

מנעולים עם/בלי המתנהspinlockכאשר חוט מנסה לתפוס מנעול נעול, הוא בודק את ערך המנעול שוב ושוב מבלי לצאת מתור הריצה.טכניקה כזו נקראת גם: polling, busy waiting, busy looping.יתרון: התהליך יכול להמשיך לרוץ עוד בקוונטום הנוכחי, וכך לחסוך את התקורה על החלפת הקשר.עדיף כאשר זמן ההמתנה המשוער נמוך יותר מהמחיר של החלפת הקשר (כלומר, כאשר הקטע הקריטי קצר, כפי שקורה לרוב בקוד גרעין).mutexכאשר חוט מנסה לתפוס מנעול נעול, מערכת ההפעלה תעביר אותו לתור המתנה ותבצע החלפת הקשר.כאשר המנעול ישוחרר, מערכת ההפעלה תעיר את אחד החוטים המחכים למנעול.יתרון: תהליך חדש יכול לרוץ מיד, וכך לא מתבזבז זמן מעבד יקר.עדיף כאשר זמן ההמתנה המשוער גבוה יחסית (כלומר, כאשר הקטע הקריטי ארוך, כפי שקורה לרוב בקוד משתמש).מערכות הפעלה - תרגול 745

Tutorial 8slide 2TL;DRבתרגול הקודם למדנו לכתוב קוד מקבילי באמצעות חוטים

TL;DRבתרגול הקודם למדנו לכתוב קוד מקבילי באמצעות חוטים.ראינו שבכל בעיה לא טריוויאלית יש צורך בסנכרון בין החוטים.היום נלמד על מנגנוני סנכרון נוספים של ממשק pthreads :לבסוף, נלמד דוגמה נוספת של קוד מקבילי חשוב: גרעין לינוקס.קוד הגרעין לא משתמש בחוטים, אבל ניגש לזיכרון משותף מתוך מספר מסלולי בקרה שרצים במקביל, ולכן העקרונות שלמדנו תקפים גם עבורו.2מערכות הפעלה - תרגול 8להבטחת סדרלהבטחת אטומיותמשתני תנאי(condition variables)מנעולים(mutexes)סמפורים (semaphores)

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

Tutorial 8slide 38מועד א', אביב 2008, שאלה 1sem_t sem; // Global semaphore, with initial value 1 int writer_lock() { sem_wait(sem);} in...

מועד א', אביב 2008, שאלה 1sem_t sem; // Global semaphore, with initial value 1 int writer_lock() { sem_wait(sem);} int writer_unlock() { sem_post(sem);} int reader_lock() { while(sem_getvalue(sem) <= 0) sleep(1); sem_wait(sem);} int reader_unlock() { sem_post(sem);}סעיף ב: להלן הצעה לפתרון בעיית קוראים/כותבים עם עדיפות לכותבים, המשתמשת בסמפורים.תארו 3 בעיות שונות של נכונות ו/או יעילות שיש בפתרון הנ"ל. הניחו כי הסמפור הינו הוגן.מערכות הפעלה - תרגול 838

Tutorial 8slide 39מועד א', אביב 2008, שאלה 1sem_t sem; // Global semaphore, with initial value 1 int writer_lock() { sem_wait(sem);} in...

מועד א', אביב 2008, שאלה 1sem_t sem; // Global semaphore, with initial value 1 int writer_lock() { sem_wait(sem);} int writer_unlock() { sem_post(sem);} int reader_lock() { while(sem_getvalue(sem) <= 0) sleep(1); sem_wait(sem);} int reader_unlock() { sem_post(sem);}בעיית נכונות: הפתרון לא מאפשר ליותר מקורא אחד להיכנס לקטע קריטי.בעיית נכונות: אם יש גם קוראים וגם כותבים, הכותבים לא בהכרח יקבלו עדיפות ועלולים להיות מורעבים בניגוד לדרישה.בעיית יעילות: קוראים מבצעים busy wait.מערכות הפעלה - תרגול 839

Tutorial 8slide 56פסיקות חומרה במערכת מרובת ליבותבמערכת מרובת ליבות, מעבדים שונים יכולים לגשת בו-זמנית למבני נתונים משותפים  יש להוסיף...

פסיקות חומרה במערכת מרובת ליבותבמערכת מרובת ליבות, מעבדים שונים יכולים לגשת בו-זמנית למבני נתונים משותפים  יש להוסיף נעילה מעבר לחסימת הפסיקות המקומית.שגרות טיפול בפסיקות חומרה עושות שימוש במנעולי spinlock (מנעולים הממומשים כ-busy wait).שאלה: מדוע מעדיפים מנעולי spinlock על-פני מנעולי סמפור?busy wait הוא המתנה יעילה יותר כאשר מדובר בנעילות קצרות מאוד כפי שקורה בגרעין, מפני שכך נחסכת התקורה של כניסה ויציאה מהמתנה.בעיית הוגנות, למשל בתרחיש הבא:תהליך רץ, ובאותו הזמן מתקבלת פסיקת חומרה (למשל מהמקלדת).הטיפול בפסיקה מנסה לתפוס את המנעול, אבל המנעול כבר תפוס.התהליך עובר לתור המתנה מסיבה שאינה תלויה בו.מערכות הפעלה - תרגול 856

Ask Gemini
2018A_Winter_A · 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.