Sample exam 2015 - Elad Aigner
Transcription
Sample exam 2015 - Elad Aigner
מערכות הפעלה 2015 סמסטר ב׳ מבחן דוגמא אוניברסיטת אריאל המחלקה למדעי המחשב ומתמטיקה ד״ר אלעד חורב הנחיות: .1המבחן הינו עם חומר סגור ובכתב יד ללא סיוע מחשבים. .2ניתן לרשום ״לא יודע/ת״ על סעיף ולזכות ב 20%מהנקודות המוקנות לסעיף הספציפי. .2.1במידה ולסעיף ניתנה תשובה ובנוסף נרשם לגבי הסעיף ״לא יודע/ת״ אזי הניקוד שינתן לסעיף יהיה 0מבלי שהתשובה תיקרא. .3אם לא מצויינת השפה בה יש לרשום קוד אזי ניתן להשתמש בפסודו-קוד כפי שניתן בהרצאות והתרגולים. .3.1אם מצויינת שפת תכנות אזי חובה לתת תשובה באמצעותה. .3.2אם לא מצויינת שפה והתשובה ניתנת באמצעות שפת תכנות אין הדבר מקנה ניקוד נוסף. .4אין להגדיר שום פעולות אטומיות על דעת עצמכם. .5ספקו הוכחה לאלגוריתם רק אם במפורש נכתב לספק אחת ,אחרת אין צורך ולא ינתן ניקוד נוסף במידה וכן תסופק. .6אין לכתוב בעיפרון. .7חובה לענות בדף התשובות המסופק עם המבחן .תשובות שלא בדף התשובות לא תיבדקנה. 1 שאלה 40) :1נקודות( א 10) .נקודות( מה ההבדל בין Eventל.Condition variable - ב 10) .נקודות( מהו אלגוריתם ?Round Robinציינו חסרונות ויתרונות. ג 10) .נקודות( אובייקט Barrierיקרא reusableאם ניתן להשתמש באותו אובייקט שוב ושוב לשם ביצוע .Barrier synchronisationכלומר ,לאחר שכל התהליכים מגיעים לאותו אובייקט Barrierשיחרורם גורם ל״איפוס״ האובייקט אליו הגיעו ולכן ישנה היכולת להשתמש באותו אובייקט שוב לביצוע .Barrier synchronisationממש/י reusable barrierבאמצעות משתנה integerיחיד ושני binary semaphoresאשר יהיו משותפים לכל התהליכים .עליך לכתוב פרוצדורה בעלת השם והחתימה.void join_barrier() : ד 10) .נקודות( נניח כעת כי הפעולה max(x_1,x_2,…,x_n)+1 :ניתנת לביצוע באופן אטומי .להלן קוד עבור אלגוריתם ל mutual exclusionעבור nתהליכים. ד 5) .1.נקודות( נכון או לא נכון :האלגוריתם מספק .mutual exclusionאם תשובתכם הינה כי הטענה נכונה רשמו רק ״נכון״ ללא הוכחה .אחרת ,יש לספק תרחיש שמראה שהטענה לא נכונה. ד 5) .2.נקודות( נכון או לא נכון :האלגוריתם הינו .starvation-freeאם תשובתכם הינה כי הטענה נכונה רשמו רק ״נכון״ ללא הוכחה .אחרת ,יש לספק תרחיש שמראה שהטענה לא נכונה. // n times //shared: ;}int num[n] = {0 code for process i //Entry code !!num[i] = max(num[0],..., num[n-1])+1; //ATOMIC {)for (k = 0 ;k < n; k++ ;)]while(num[i] > num[k } ><CS //Exit ;num[i]=0 2 שאלה 45) :2נקודות( להלן הצעה למימוש של אלגוריתם Lamportלמניעה הדדית עבור nתהליכים .על מנת להיכנס קטע הקריטי תהליך קורא לפרוצדורה ) Enter(iועל מנת לעזוב את הקטע הקריטי קורא לפרוצדורה ) Leave(iכאשר iהינו מספר הזהות הייחודי של התהליך. //shared data: ;}int number[n] = {0 ;]int flag[n {)void Enter(int i ;flag[i] = true ;number[i] = max(number[0],…,number[n-1])+1 ;flag[i] = false {)for (k = 0; k< n; k++ ;)while(flag[k] == true ;))while(number[k] != 0 && (number[k],k) < (number[i],i } } {)void Leave(int i ;number[i] = 0 } א 15) .נקודות( הוכח או הפרך :האלגוריתם מספק .mutual exclusion ב 15) .נקודות( הוכח או הפרך :האלגוריתם הינו .deadlock-free ג 15) .נקודות( הוכח או הפרך :האלגוריתם הינו .starvation-free 3 שאלה 15) :3נקודות( להלן הקוד של אלגוריתם Petersonכפי שזה הוצג בכתה. Shared: bool inter[2] = {False}, turn_to_wait = Don’t care Program for process 0 inter[0]:=true 1. turn_to_wait:=0 2. ;)while (inter[1]=true and turn_to_wait=0 3. ><CS 4. inter[0]:=false 5. Program for process 1 inter[1]:=true 1. turn_to_wait:=1 2. )while (inter[0]=true and turn_to_wait=1 3. CS 4. inter[1]:=false 5. א 5) .נקודות( השיבו נכון או לא נכון :באלגוריתם של Petersonאם תהליך 0נכנס להמתנה לפני ש 1נכנס ל Doorwayאזי 0יכנס לפני 1ל ?CSהסבר/י תשובתך. ב 10) .נקודות( ישנם שלושה תהליכים .p,q,rהנכם נדרשים לתכנן עבור שלושתם אלגוריתם ל mutual exclusionשהינו .deadlock-freeלרשותכם ארבעה מקטעי קוד המוגדרים באופן הבא: נסמן ב ) Peterson_Enter_0(a,bאת קוד הכניסה של אלגוריתם Petersonשבו aהינו תהליך 0ו bהינו תהליך 1והמקטע הנ״ל הינו הקוד של .0באופן דומה מוגדר המקטע ).Peterson_Enter_1(a,b נסמן ב ) Peterson_Leave_0(a,bאת קוד הכניסה היציאה של אלגוריתם Petersonשבו a הינו תהליך 0ו bהינו תהליך 1והמקטע הנ״ל הינו הקוד של .0באופן דומה מוגדר המקטע ).Peterson_Leave_1(a,b 4 השמות p,q,rמשותפים לכל התהליכים .מעבר לכך הינכם יכולים להגדיר עוד משתנה אחד בלבד שיהיה משותף לכל התהליכים שיכול לייצג תהליך. השלימו את הקוד הבא עבור כל אחד מהתהליכים p,q,rעל ידי הצבת המשתנה המשותף הנוסף המותר לכם והמקטעים ) Peterson_Enter(a,bו ) Peterson_Leave(a,bבמקומות הנכונים עם שמות התהליכים הנכונים במקום bו .aזאת על מנת להשיג אלגוריתם ל mutual exclusion שהינו deadlock-freeעבור שלושת התהליכים ובנוסף על כך נותן עדיפות כניסה ל critical sectionלתהליך pבאופן הבא: אם pמתחיל להמתין למנעול לפני שהתהליך שכעת מחזיק במנעול מתחיל לבצע את קוד היציאה שלו אזי pהינו התהליך הבא שיכנס ל .critical section העתיקו מקטעים אלו לתשובתכם והשלימו את החסר לפי הדרישות לעיל. Algorithm for p: Algorithm for r: Algorithm for q: //Entry code 1. ><CS //Exit code 1. //Entry code 1. 2. 3. ><CS //Exit code 1. 2. //Entry code 1. 2. 3. ><CS //Exit code 1. 2. 5