You are on page 1of 5

‫מערכות הפעלה ‪ 10010‬סמסטר ב' – תשפ"ג‬

‫תרגיל בית מס' ‪2‬‬


‫נושא התרגיל‪ :‬סינכרון תהליכים‬
‫יש להגיש אך ורק דרך תפריט המטלות שבאתר הקורס‪ ,‬כפי שהוסבר בתרגול‪  .‬‬
‫הנחיות הגשה כלליות‪:‬‬
‫התרגיל ייבדק בסביבת‪ ‬אובונטו‪ ‬בלבד‪ .‬‬ ‫‪‬‬
‫הקוד חייב לעבור קומפילציה‪ ,‬קוד שאינו מתקמפל לא ייבדק‪ .‬‬ ‫‪‬‬
‫יש להגיש קוד ללא הערות קומפילציה‪ ,warnings ,‬קוד בו יהיו‬ ‫‪‬‬
‫הערות יגרור הורדה של ‪ 10‬נקודות‪.‬‬
‫ניתן לעבוד בזוגות ‪ -  ‬במידה ומגישים בזוג קובץ ההגשה יהיה מורכב‬ ‫‪‬‬
‫משמות (לא מספרי ת"ז!!!!) ‪ 2‬המגישים ושני המגישים צריכים לעלות‬
‫את העבודה למודל‪.‬‬

‫הוראות כלליות‪:‬‬
‫יש להקפיד על כללי הנדסת התוכנה‪ :‬‬ ‫‪‬‬
‫פונקציה לא אמורה להיות ארוכה מ ‪ 25‬שורות‪ .‬אם יש קטע קוד‬ ‫‪‬‬
‫שניתן לתת לו כותרת מה הוא מבצע יש לכתוב אותו בפונקציה‬
‫נפרדת‪.‬‬
‫יש לחלק את הקוד לתת פונקציות מתאימות‪ .‬אין לשכפל קוד‪ .‬קוד זהה אמור‬ ‫‪‬‬
‫להיות בפונקציה מתאימה‪  .‬‬
‫מבנה התכנית (הזחות) ותיעוד במידת הצורך‪ .‬‬ ‫‪‬‬
‫חובה להשתמש בקבועים במקומות המתאימים‪ .‬‬ ‫‪‬‬
‫יש להשתמש בפונקציות קצרות‪ ,‬כלליות‪ ,‬קריאות ושימושיות‪.‬‬ ‫‪‬‬
‫יש להקפיד על בדיקת תקינות קלט‪ ,‬אפשר להניח שאם ביקשו‬ ‫‪‬‬
‫מהמשתמש מספר הוא הכניס מספר אך יתכן ולא בטווח הנכון‪ .‬‬
‫הפלט צריך להיות כפי שניתן בתרגיל‪.‬‬ ‫‪‬‬
‫קוד קצר‪ ,‬לא מסורבל ויעיל הן מבחינת כתיבתו והן מבחינת ריצת‬ ‫‪‬‬
‫התוכנית‪.‬‬
‫שאלות דיון תיכתבנה ב ‪ word‬בעברית‪.‬‬ ‫‪‬‬
‫יצירת עצי תהליכים‬

‫בכל התכניות יש להשתמש ב ‪ fork‬ו‪ . posix semaphore -‬יש להשתמש ב ‪ API‬הבאים‪:‬‬

‫‪sem_open,sem_init,sem_post,sem_wait,fork‬‬

‫תרגיל ‪)30 ( 1‬‬

‫עליך לכתוב תכנית אשר מייצרת את עץ תהליכים הבא‪:‬‬

‫‪p1‬‬

‫‪p2‬‬ ‫‪p3‬‬ ‫‪p4‬‬ ‫‪p5‬‬ ‫‪p6‬‬

‫האב ‪ p1‬מייצר את חמשת ילדיו בסדר המצויין‪ .‬מ ‪ p2‬ל‪ , p6 -‬אבל פלט התכנית איננו לפי סדר היצירה‪ .‬פלט‬
‫‪p4, p3,p5,p1,p6,p2‬‬ ‫התכנית הוא כדלהלן‪:‬‬
‫תרגיל ‪) 30 ( 2‬‬

‫כתוב תכנית אשר מייצרת את עץ התהליכים הבא‪:‬‬

‫‪p1‬‬

‫‪p4‬‬
‫‪p2‬‬

‫‪p5‬‬
‫‪p3‬‬ ‫‪p6‬‬

‫סדר הולדת התהליכים הוא כזה‪:‬‬

‫‪p1‬יולד את ‪ p2‬ואז את ‪p4‬‬

‫‪ p2‬יולד את ‪,p3‬‬

‫‪ p4‬יולד את ‪ 6p‬ואז את ‪.5p‬‬

‫עליך להפיק פלט יחיד ‪p4,p2,p6,p3,p5,p1 :‬‬


‫תרגיל ‪40 ( 3‬נקודות)‬

‫צא(י) מהדוגמאות שלמדנו בכיתה עבור ‪ PRODUCER‬ו ‪ CONSUMER‬המופיעות במודול בשיעור‬ ‫א‪.‬‬
‫מספר ‪ .4‬השתמש(י) בסמפורים שלמטה כפי שלמדת בכיתה כך שה‪ PRODUCER -‬יכתוב לשטח‬
‫זיכרון משותף בהיסט אפס בייט יחיד המכיל את האות האנגלית ‪ ,A‬ה‪ CONSUMER -‬יתעורר על יד ה‬
‫‪ PRODUCER‬וידפיס את ‪ ,A‬ואחר יעיר את ה‪ . PRODUCER -‬ה‪ PRODUCER -‬מצידו‪ ,‬כעת ימלא‬
‫בהיסט אפס את האות ‪ B‬וחוזר חלילה עד ‪.Z‬‬

‫‪Producer‬‬ ‫‪Consumer‬‬

‫)‪Signal(S1‬‬ ‫)‪Wait(S1‬‬

‫)‪Wait(S2‬‬
‫)‪Signal(S2‬‬

‫)‪Wait(S1‬‬

‫כאשר‪:‬‬

‫)‪Signal(Sx‬‬ ‫)‪Wait(Sx‬‬

‫‪mem[Sx offset] = 0x01‬‬ ‫;)]‪while(!mem[Sx offset‬‬

‫;)‪usleep(100‬‬

‫‪mem[Sx offset]=0x00‬‬
‫עבור ‪ wait‬ו ‪ Signal‬הכתובות למעלה‪ ,‬אם נשתמש בפרימיטיבים אלה (פונקציות) על מנת‬ ‫ב‪.‬‬
‫ליצור קטע קוד קריטי‪ .‬כאשר אין הנחה שהפונקציות אטומיות‪ ,‬האם התכונות הבאות נכונות‪:‬‬
‫מניעה הדדית ( ‪) MUTUAL EXCLUSION‬‬ ‫‪.a‬‬
‫התקדמות ( ‪ ,)PROGRESS‬מבוי סתום ( ‪) DEADLOCK‬‬ ‫‪.b‬‬
‫הוגנות ‪ ,‬הרעבה‪.‬‬ ‫‪.c‬‬

You might also like