1 מספר זהות : סמסטר א תשפ" ב תאריך : 2 .202 01 11 שעה : :00 9 משך הבחינה : 3 שעות חומר עזר : כל חומר עזר כתוב מותר בחינה בקורס: מערכות הפעלה מרצה: משה סולאמי הנחיות: בבחינה 4 שאלות בעלות ניקוד זהה, בסך של 100 נקודות. את התשובות יש לכתוב ב טופס הבחינה במקום המיועד לכך מיד לאחר כל שאלה. מחברת הבחינה לא תיבדק. הבחינה הינה עם חומר פתוח )כל חומר עזר כתוב מותר(, כולל מחשבון. לכל תשובה יש לצרף הסבר מפורט ) 3 - 2 שורות בלבד (. תשובה נכונה ללא הסבר לא תזכה בנקודות. עמימות או כתיבת תשובות )או חלקן( שלא קשורות לשאלה תוריד נקודות. טופס הבחינה כולל 7 עמודים )כולל עמוד זה(. בהצלחה! מדבקית ברקוד 2 שאלה 1 לכל אח ד מהסעיפים יש לענות נכון/לא נכון ולצרף הסבר. א ) 5 נק'( אלגוריתם השעון בוחר לפנות את הדף הכי ותיק ) שניגשו אליו הכי בעבר ( __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ב ) 5 נק'( במקרים מסוימים, תהליכי משתמש יכולים לבטל פסיקות. __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ג ) 5 נק'( חוטים של אותו תהליך יכולים לגשת למחסנית אחד של השני. __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ד ) 5 נק'( בדפדוף יש בעיה של קיטוע חיצוני ) external fragmentation .( ___ _____________________________________________________ __ _____________________________________________________ _____ _____________________________________________________ _____ _____________________________________________________ _____ __________________________________________________________ __________________________________________________________ ה ) 5 נק'( אם יש קיפאון ) deadlock ( בהכרח יש גם הרעבה ) starvation .( ___ _____________________________________________________ __ _____________________________________________________ _____ _____________________________________________________ _____ _____________________________________________________ _____ __________________________________________________________ __________________________________________________________ 3 שאלה 2 מנעול חד - פעמי הוא מנעול אשר ניתן לנעול פעם אחת בלבד: ברגע שחוט תופס את המנעול בהצלחה, אף חוט לא יכול לתפוס יותר את המנעול לכל אורך התוכנית פונקציית הנעילה מחזירה 0 לחוטים אשר נכשלו בתפיסת המנעול מבלי שהם יחסמו ) כלומר, ללא המתנה(, ומחזירה 1 לחוט שהצליח. ב מנעול חד - פעמי ל - N חוטים מובטח שפונקציית הנעילה לא נקראת יותר מ - N פעמים. נניח שלרשותנו עומדת פקודת חומרה אטומית ששמה Check&Add , אשר מקדמת מונה באחד ומחזירה ה אם ערכו החדש שווה ל - C את פעול ת הפקודה ניתן לתאר כך: int check_add ( int *p, int C) { assert (*p < C); // check invalid op return (++*p == C); } שימו לב: התוצאה אינה מוגדרת אם ערך המונה גד ו ל מ - C יש לצרף הסבר קצר לכל מימוש, ולקיים mutual exclusion ו - deadlock freedom א ) 5 נק'( ממשו מנעול חד - פעמי ל - 2 חוטים המשתמש בתא זיכרון יחיד. יש לממש את הפונקציות הבאות: void init2 ( int *lock) { __________________________________________________________ __________________________________________________________ __________________________________________________________ } int lock2 ( int *lock) { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } ב ) 10 נק'( ממשו מנעול חד - פעמי ל - 3 חוטים המשתמש ב - 2 תאי זיכרון. יש לממש את הפונקציות הבאות: void init3 ( int *l1, int *l2) { __________________________________________________________ __________________________________________________________ __________________________________________________________ } int lock3 ( int *l1, int *l2) { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } 4 ג ) 10 נק'( ממשו מנעול חד - פעמי ל - N חוטים ) כאשר N פרמטר ב פונקציית ה אתחול( יש להגדיר את מבנה המנעול ) struct CALock ( ולממש את הפונקציות הבאות: typedef struct __CALock { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } CALock ; void init ( CALock *lock, int N) { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } int lock ( CALock *lock) { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } void destroy ( CALock *lock) { __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ } 5 שאלה 3 יש לפרט ולנמק את כל החישובים. נתונה מערכת עם זיכרון וירטואלי של 32GiB וגודל דף של 4KiB א ) 10 נק'( נתון שטבלת דפים לינארית תופסת 24MiB בזיכרון , וכל כניסה בטבל ת הדפים ) PTE ( מכילה מספר מסגרת ועוד שלושה ביטים בלבד )ללא תוספות או עיגול לחזקה הקרובה של 2 :( ביט Valid , ביט Access , ביט Dirty מה גודל הזיכרון הפיזי המקסימלי במערכת זו? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ בסעיפ ים הבאים נתון שכל כניסה בטבלת הדפים ) PTE ( מכילה 32 ביטים בכל רמה, ונדרש שכל טבלה תאוחסן בדף אחד בדיוק. ב ) 10 נק'( כמה רמות של טבלאות דרושות כדי למפות את מרחב הכתובות הוירטואלי? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ג ) 5 נק'( מה מספר הגישות המקסימלי שעלול להתבצע לזיכרון הראשי, הזיכרון המשני )הדיסק(, וה - TLB , בעקבות גישה של תהליך לכתובת וירטואלית כלשהי? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ 6 שאלה 4 נתונה מערכת קבצים בלינוקס עם גודל בלוק של 4KiB מספר הבלוקים במערכת הוא 20,000,000 ומספר ה - inodes הוא 40,000 . הגודל של struct inode הוא 128 בתים. הסופר - בלוק מכיל את השדות )חברים( הבאים: struct super_block { int BSIZE; // block size = 4096 int Nblocks; // total number of blocks int Ninodes; // number of inodes int I_BMAP_Start; // first block of inode bit-map int D_BMAP_Start; // first block of data bit-map .... // possibly more data, not relevant to this question }; כמו - כן מוגדר המבנה struct inode שבו קיים מערך עם המצביעים הבאים ל - DATA : - 10 מצביעים של direct addressing - מצביע אחד של indirect addressing - מצביע אחד של double indirect addressing בקרנל מוגדרים מערכים שמתארים כמה ביטים פנויים )אפסים( יש בכל בלוק של bit-map : int inode_bmap_stat[ <value_1> ]; int data_bmap_stat[ <value_2> ]; הערה: בשאלה זו יש להתעלם מקריאות/כתיבות למקום זמני בדיסק , שמטרתן להבטיח את האטומיות של הפעולה. א ) 5 נק'( האם ניתן לדעת על סמך הנתונים בשאלה זאת, מהם הגדלים של המערכים האלו? הסבירו בקצרה. אם התשובה חיובית, מה הערכים value_1 , value_2 ? אם התשובה שלילית, איזה פרט חסר כדי לדעת את ערכם? __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ 7 ב ) 10 נק'( המשתמש ביצע את הפעולה הבא ה בטרמינל: mkdir d1 . הניחו שהפעולה מצליחה. כמה בלוקים צריך לקרוא מהדיסק וכמה בלוקים צריך לכתוב לדיסק בכדי לבצע את הפעולה? הסבירו בקצרה. __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ ג ) 10 נק'( בתיקיית העבודה הנוכחית קיים קובץ רגיל, שגודלו הוא size = 45050 תכנית משתמש מבצעת את הקוד הבא: int fs = open("f1", O_WRONLY, O_APPEND); const char str[] = " 0123456789 " ; write(fd, str, 10); כמה בלוקים צריך לקרוא מהדיסק בכדי לבצע את הקריאה לפונקציה write ? הסבירו בקצרה )בסעיף זה אין צורך להתייחס לכתיבות לדיסק(. __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________