תהליכים, תהליכונים, סנכרון, ניהול זיכרון ומערכות קבצים
Lock(int *m) (MUTEX) וממשו בדרך הפשוטה ביותר את שחרור המנעול Unlock(int *m).++counter):atomic_change(variable, value). ערך ה value יכול להיות חיובי או שלילי.compare_and_swap יכולים להיות משתנה וביטוי אריתמטי, לדוגמא: CAS(&val, exp, new + 1). בביטוי אריתמטי אפשר להשתמש גם במשתנה במקום המספר.struct item *head לראש הרשימה. ממשו שגרה insert(int d) שמכניסה איבר חדש לרשימה שערך השדה data בו הוא , וזאת תוך שימוש במקרואים ו . אסור להשתמש במנעולים ואסור להגדיר משתנים נוספים (פרט למשתנים אוטומטיים בשגרה).A-enter, A-exit, B-enter, B-exit, C-enter, C-exitbusy waiting). כלומר, תהליכונים יכולים להמתין רק ע"י שינה על סמפור.A-enter, A-exit, B-enter, B-exit, C-enter, C-exitm1, m2 ו-c שמאותחלים לאפס. תהליכונים הנאלצים להמתין יעשו זאת באמצעות busy waiting בעזרת פקודת test-and-set.test-and-set(c,1 מתבצעת באופן אטומי, כותבת ערך 1 למשתנה c ומחזירה את ערכו הקודם שלו. אין להשתמש בסמפורים בסעיף הזה.switch_thread אשר מימשתם בקובץ uthread_switch.S בממ״ן 11 יכולה לעבוד שלא כשורה אם מערכת הפעלה 6xv תרוץ על 2 מעבדים?remove מרשימה מקושרת דו כיוונית ציקלית (מעגלית). הרשימה נועדה לשפר את הגישה המקבילית של מספר תהליכונים (threads) לרשימה, ולכן משתמשת במנעולים ברמה של איברי הרשימה.remove בסעיף ב בפונקציה הבא:| line | P3 | P2 | P1 |
|---|---|---|---|
| 1 | ... | bsync | ... |
| 2 | ... | ... | ... |
| 3 | bsync | ... | ... |
| 4 | ... | ... | ... |
| 5 | ... | ... | ... |
| 6 | ... | bsync | ... |
| 7 | bsync | ... | Bsync |
| 8 | ... | bsync | Bsync |
| 9 | bsync | ... | Bsync |
שאלות תרגול במערכות הפעלה בנושא מנעולים ממבחנים של האוניברסיטה הפתוחה. השאלות ממוינות לפי רמת קושי, עם פתרונות לבדיקה עצמית - כך שניתן ללמוד מטעויות ולהבין את דרך הפתרון לפני הבחינה. ניתן לאתר שאלות חוזרות ולהריץ מבחני סימולציה ממוקדים בנושא מנעולים.