השהית תהליכים
ניתן להשהות את
פעולתו של תהליך ולמנוע ממנו לההפך לתהליך הנוכחי.
חידוש פעולת התהליך
יעשה על ידי בקשה מפורשת שתינתן על ידי תהליך אחר.
לא ניתן להשהות
תהליך שאינו במצב PRREADY או PRCURR. תהליך
מושהה מקבל את המצב PRSUSP. תהליך יכול להשהות את עצמו (אך לא לחדש את פעולת עצמו).
ביצוע ההשהיה:
חידוש הפעולה:
suspend מבצע את ההשהיה
בצורה שונה עבור תהליכים במצב PRCURR ו-PRREADY.
כאשר תהליך במצב PRREADY, נוציא
מרשימת ה-ready ואז נקבע אותו להיות PSUSP.
כאשר תהליך במצב PRCURR, נקבע
אותו להיות במצב PRSUSP ונקרא ל-resched().
הפונקציה suspend מחזירה את עדיפות התהליך המושהה. נשים לב שדגימת ערך העדיפות של התהליך
נעשה אחרי הקריאה ל-resched(). התוצאה: אם תהליך השהה את עצמו, כאשר התהליך יחזור מההשהיה הוא יקבל את
העדיפות הנוכחית שלו, ולא את העדיפות שהייתה לו לפני
שהוא השהה את עצמו (בזמן שהוא היה מושהה, תהליכים אחרים יכלו לשנות את עדיפות זו).
הערות:
- תהליך
חדש נוצר תמיד במצב PRSUSP.
- אסור
להשעות את NULL Process!
- ב-suspend יש בדיקה מיותרת:
isbadpid() וגם pid==NULLPROC.
תודה
הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.