Delta List
הבעיה: אנו רוצים לבנות מנגנון התומך ב-sleep.
תהליכים ישנים
ייחכו בתור המתנה מיוחד, וכל פסיקת שעון אנו נעיר את
התהליכים שהגיע זמנם להתעורר.
כאשר ישנם תהליכים
ישנים רבים, יכולה להתעורר בעיה אם נשתמש
בתור רגיל, מכיוון שכל פעם נצטרך לסרוק את
כל התור לחפש תהליכים שצריכים להתעורר -
פעולה הלוקחת זמן.
הפתרון: ניצור רשימת המתנה, בה התהליכים יהיו ממוינים לפי הזמן שבו
הם צריכים להתעורר. המפתח של כל איבר ברשימה יכיל
את מספר מחזורי השעון שהתהליך רוצה לישון מעבר למספר המחזורים של התהליך הנמצא
לפניו ברשימה.
ראש הרשימה יוחזר
במשתנה בשם clockq. הפונקציה insertd(pid, head, key) מכניסה את התהליך
pid לרשימה clockq, עם
הערך key. הערך key המועבר אל הפונקציה הוא זמן יחסי לזמן הנוכחי.
הפונקציה insertd מקיימת את השמורה הבאה: בכל רגע במהלך החיפוש, גם key וגם q[next].qkey מגדירים
השהיה יחסית לזמן בו האב הקדמון יתעורר.
תודה
הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.