הכנסת תהליך למצב sleep

  • תוכניות המשתמש אינן ניגשות אל ה-delta list באופן ישיר, אלא בעזרת קריאות מערכת.
  • קריאת המערכת sleept(n) משהה את התהליך הקורא לה ל-n פסיקות שעון. היא מבצעת זאת על ידי הכנסת התהליך ל-delta list. כמו כן, היא קובעת את מצב התהליך ל-PRSLEEP.
  • לשימוש ב-sleept יש מגבלה, והיא שמספר מחזורי השעון שאנו יכולים לחכות מוגבל על ידי הגודל של int, ולכן אנו מוגבלים ל-plot:$\left( {{2^{15}} - 1} \right)$ מחזורי שעון (כ-1800 שניות - חצי שעה).
  • על מנת לעקוף את המגבלה, קיימת פונקציה נוספת, בשם sleep. sleep מקבלת זמן בשניות ולא במחזורי שעון, וישנה כמות שניות כמבוקש. אנו עוקפים את מגבלת מחזורי השעון בכך שאם אנו מבקשים לחכות יותר מכמות מסויימת של שניות (כמות המוגדרת על ידי הקבוע TICSN), אז הפונקציה sleep מחלקת את ההשהיה למספר קריאות ברצף לפונקציה sleept, שבכל אחת מהן היא תחכה TICSD מחזורי שעון.
  • אם קוראים לפונקציה sleep עם פרמטר 0, מתבצע resched(). מכיוון שאסור לקרוא

    ל-resched כאשר פסיקות מופעלות, זוהי שיטה לגרום לתהליך לבצע לעצמו resched().

תגיות המסמך:

מאת: באסל

תודה

הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.
שיתוף:
| עוד