טיפול בפסיקת השעון - clkint

תיאור:

פונקצית השירות intcom קוראת לפונקציה clkint כאשר מתרחשת פסיקת שעון.

מכיוון שהפונקציה נקרא דרך משגר הפסיקות, clkint מניחה שבכניסה אליה הפסיקות כבר כבויות.

מילת המפתח INTPROC המשמשת כטיפוס המוחזר של הפונקציה, באה להבהיר לקורא את הנחה זו.

הפרמטר המועבר לפונקציה הוא פרמטר דמה שמועבר אוטומטית על ידי intcom.

משתנים גלובלים הקשורים לפונקציה:

  • tod

time of day - מספרי מחזורי השעון מרגע הפעלת המערכת.

  • defclk

שעון דחוי - דגל האומר האם אנו במצב שעון דחוי או לא. (יוסבר בהמשך)

  • clkdiff

מונה מחזורים דחויים.

  • slnempty, sltop

דגלי עזר המיועדים למנוע חישובים מיותרים בזמן הפסיקה. בעזרת slnempty ניתן לדעת האם התור לא ריק. אם יש תהליכים בתור, sltop מכיל את כתובת המפתח של הראשון מביניהם.

  • preempt

מונה הזמן עד לקריאה הבאה ל-resched().

פעולת הפונקציה:

  • הגדלת שעון המערכת.
  • טיפול בתהליכים ישנים.
  • טיפול בהחלפת תהליכים אם יש בכך צורך.

הערת תהליכים ישנים - wakeup

הפונקציה wakeup מעבירה לתור ה-ready את כל התהליכים שזמן ההשהיה שלהם עבר.

כמו כן היא קובעת את המשתנים הגלובליים sltop, slnempty לפני שהיא קוראת ל-resched (כי resched יכולה להעביר לתהליך אחר, בו פסיקות השעון יהיו פעילות).

בעיה בפונקציה kill

כאשר מוציאים תהליך ישן, לא מעדכנים את clockq, ולכן יתכן שתהליכים יתעוררו טרם זמנם.

תגיות המסמך:

מאת: באסל

תודה

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