1 מספר זהות : סמסטר ב תשפ" ב תאריך : 2 .202 02 1 שעה : :00 9 משך הבחינה : 3 שעות חומר עזר : כל חומר עזר כתוב מותר בחינה בקורס: מערכות הפעלה מרצה: משה סולאמי הנחיות: בבחינה 4 שאלות בעלות ניקוד זהה, בסך של 100 נקודות. את התשובות יש לכתוב ב טופס הבחינה במקום המיועד לכך מיד לאחר כל שאלה. מחברת הבחינה לא תיבדק. הבחינה הינה עם חומר פתוח )כל חומר עזר כתוב מותר(, כולל מחשבון. לכל תשובה יש לצרף הסבר מפורט ) 3 - 2 שורות בלבד (. תשובה נכונה ללא הסבר לא תזכה בנקודות. עמימות או כתיבת תשובות )או חלקן( שלא קשורות לשאלה תוריד נקודות. טופס הבחינה כולל 8 עמודים )כולל עמוד זה(. בהצלחה! מדבקית ברקוד 2 שאלה 1 לכל אח ד מהסעיפים יש לענות נכון/לא נכון ולצרף הסבר. א ) 5 נק'( בכונן SSD , נתוני קובץ שניגשים אליו לעיתים רחוקות נשאר ים באותו מיקום פיזי על הדיסק. __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ב ) 5 נק'( אלגוריתם התזמון STCF פותר את בעיית ההרעבה של תהליכים __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ג ) 5 נק'( במערכת עם מעבד יחיד, שימוש ב חוטים יכול ל שפר את ביצוע י התוכנית __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ד ) 5 נק'( ברשימה מקושרת hand over hand עם מנעולים הוגנים, תיתכן הרעבה. ___ _____________________________________________________ __ _____________________________________________________ _____ _____________________________________________________ _____ _____________________________________________________ _____ __________________________________________________________ __________________________________________________________ ה ) 5 נק'( שימוש ב - DMA מאפשר לתהליכים לקבל יותר זמן מעבד. ___ _____________________________________________________ __ _____________________________________________________ _____ _____________________________________________________ _____ _____________________________________________________ _____ __________________________________________________________ __________________________________________________________ 3 שאלה 2 בשאלה זו ניתן להתעלם מגבולות int ולהניח שהייצוג אינסופי )אין overflow (, וניתן להשתמש ב - spinning Barrier הוא אובייקט סנכרון ל - N חוטים ) N פרמטר אתחול( עם פעולה אחת: checkin , אשר נועדה לסנכרון שלב הביצוע של N החוטים. בקריאה לפעולה checkin , החוט הקורא ממתין עד ש - N חוטים )כולל הוא עצמו ( ביצעו קריאה לפעולה. רק כאשר N חוטים ביצעו קריאה ל - checkin , הקריאה חוזרת עבור כולם והם ממשיכים לפקודה הבאה. במילים אחרות, חוט שקורא ל - checkin חס ום )הקריאה לא חוזרת( עד ש - N חוטים קוראים ל - checkin , ו החוט ה - N שמבצע קריאה ל - checkin משחרר מחסימה את כל החוטים, שממשיכים לרוץ מהפקודה הבאה. שימו לב: הפעולה checkin אינה חד - פעמית. לאחר חזרה מפעולת checkin ניתן לקרוא שוב לפעולה ולחכות שוב – עד אשר כל שאר החוטים גם יקראו שוב ל - checkin )וכן הלאה(. א ) 10 נק'( נתונה מערכת עם N חוטים בה לכל חוט יש מזהה i )בין 0 ל - N-1 ( אשר מועבר כפרמטר ל - checkin , ו מימוש חלקי ל - Barrier המשתמש ב - N תאי זיכרון. ממשו את הפעולה checkin ללא פעולות אטומיות או אובייקטי סנכרון אחרים. אין להוסיף שדות למבנה או לשנות את הקוד הנתון. typedef struct { int N; int *arr; } Barrier ; void init ( Barrier *bar, int N) { bar->N = N; bar->arr = ( int *) calloc( sizeof ( int ), N); } void destroy ( Barrier *bar) { free(bar->arr); } void checkin ( Barrier *bar, int i) { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } 4 ב ) 15 נק'( ממשו Barrier עם שימוש כרצונכם באובייקטי סנכרון ופעולות אטומיות שנלמדו, תוך הקפדה על שימוש בזיכרון מינימלי יש להגדיר מבנה ל אובייקט ) struct Barrier ( ולממש את הפונקציות הבאות: typedef struct __Barrier { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } Barrier ; void init ( Barrier *bar, int N) { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } void checkin ( Barrier *bar) { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } void destroy ( Barrier *bar) { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } 5 שאלה 3 יש לפרט ולנמק את כל החישובים. נתונה מערכת עם workload אקראי של 1MiB וסדרתי של 50MiB . בנוסף נתונים שלושה דיסקים קשיחים עם הנתונים הבאים: RPM Seek Time Transfer Rate NEXUS 1200 10ms 200 MiB/s PYLON 5400 50ms 100 MiB/s PHOTON 5400 10ms 150 MiB/s א ) 10 נק'( איזה דיסק קשיח נעדיף עבור ה - workload האקראי , ו איזה נעדיף עבור ה סדרתי? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ 6 ב ) 10 נק'( נתון ש ה - workload ה סדרתי מייצג פעולה ע ל סגמנט LFS שלם מה אחוז הביצועים שנקבל עבור כל אחד מהדיסקים הקשיחים? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ג ) 5 נק'( לשיפור ביצועי ה - workload ה אקראי הוחלט להשתמש במערך 4 - RAID של דיסקים קשיחים מסוג PYLON . מה המספר המינימלי של דיסקים שנצטרך כדי לשפר את הביצועים על - פני הדיסקים האחרים )ללא RAID (? יש לתת תשובה לכל תרחיש. __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ 7 שאלה 4 נתונה התוכנית הבאה: 1 void foo( int p_read[2], int p_write[2]) { 2 unsigned int num; 3 int ret; 4 close(p_read[1]); 5 close(p_write[0]); 6 7 while (1) { 8 ret = read(p_read[0], &num, sizeof ( int )); 9 if (ret == 0) 10 exit(0); 11 12 printf(“%d ”, num); 13 if (num == 1) 14 exit(0); 15 16 usleep(50 * 1000); 17 num = (num%2 == 0) ? num/2 : num*3+1; 18 write(p_write[1], &num, sizeof ( int )); 19 } 20 } 21 int main () { 22 setbuf(stdout, NULL ); // cancel buffering 23 int pipe1[2], pipe2[2]; 24 const int NUM = 3; 25 pipe(pipe1); 26 pipe(pipe2); 27 if (!fork()) 28 foo(pipe1, pipe2); 29 if (!fork()) 30 foo(pipe2, pipe1); 31 write(pipe1[1], &NUM, sizeof ( int )); 32 // while (wait( NULL ) > 0); // commented out! 33 exit(0); 34 } ניתן להניח שכל קריאות המערכת מצליחות, וקיום כל הצהרות ה - include הנדרשות. תזכורת : יש לצרף נימוק קצר לכל תשובה. 8 א ) 6 נק'( מה הפלט של התוכנית? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ב ) 6 נק'( בהנחה שהרצנו את התוכנית מתוך הטר מינל, האם ה - prompt של הטרמינל עשוי להתערבב עם הפלט של התוכנית? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ג ) 6 נק'( אם נכניס את שורה 16 להערה, האם עלול להיווצר race condition ? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ד ) 7 נק'( אם נוציא את שורה 32 מהערה, מה תהיה ההשפעה על ריצת התוכנית? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________