טיפול בפסיקת השעון - clkint
תיאור:
פונקצית השירות intcom קוראת לפונקציה clkint כאשר מתרחשת פסיקת שעון.
מכיוון שהפונקציה
נקרא דרך משגר הפסיקות, clkint מניחה שבכניסה אליה הפסיקות כבר
כבויות.
מילת המפתח INTPROC המשמשת כטיפוס המוחזר של הפונקציה, באה להבהיר לקורא את הנחה זו.
הפרמטר המועבר
לפונקציה הוא פרמטר דמה שמועבר אוטומטית על ידי intcom.
משתנים גלובלים
הקשורים לפונקציה:
|
time of day - מספרי מחזורי השעון מרגע
הפעלת המערכת. |
|
שעון דחוי - דגל האומר האם אנו במצב שעון דחוי או
לא. (יוסבר בהמשך) |
|
מונה מחזורים
דחויים. |
|
דגלי עזר
המיועדים למנוע חישובים מיותרים בזמן הפסיקה. בעזרת
slnempty ניתן לדעת האם
התור לא ריק. אם יש תהליכים בתור, sltop מכיל את כתובת המפתח של הראשון מביניהם. |
|
מונה הזמן עד
לקריאה הבאה ל-resched(). |
פעולת הפונקציה:
- הגדלת שעון המערכת.
- טיפול בתהליכים ישנים.
- טיפול בהחלפת תהליכים אם יש בכך
צורך.
הערת תהליכים
ישנים - wakeup
הפונקציה wakeup מעבירה לתור ה-ready את כל התהליכים שזמן ההשהיה שלהם עבר.
כמו כן היא קובעת
את המשתנים הגלובליים sltop, slnempty לפני
שהיא קוראת ל-resched (כי
resched יכולה להעביר
לתהליך אחר, בו פסיקות השעון יהיו פעילות).
בעיה בפונקציה kill
כאשר מוציאים תהליך
ישן, לא מעדכנים את clockq, ולכן
יתכן שתהליכים יתעוררו טרם זמנם.
תודה
הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.