מערכות הפעלה
Download
Report
Transcript מערכות הפעלה
מערכות הפעלה
תרגול – 9ניהול פסיקות שעון
מה בתכנית?
ניהול פסיקות שעון
אתחול המערכת
2
מערכות הפעלה -תרגול 8
אפריל 15
פסיקת השעון
מתרחשת כל הזמן בצורה מחזורית
הפרשי זמן קצרים ,המערכת נשארת בשליטה
נותנת למערכת לספור זמן ,התרחשות הפסיקה
פירושה שעברה יחידת זמן נוספת
שימוש של :XINU
3
מנגנון הpreemption-
הרדמת תהליכים
ניהול שעון גלובלי מאז עלית המערכת ()tod
מערכות הפעלה -תרגול 8
אפריל 15
שגרת פסיקת השעון clkint -
הקוד הייחודי של פסיקת השעון
נקראת ע"י סדרן הפסיקות intcom
המצביע לשגרה נמצא בשדה newisr
בטבלת ,intmapטבלת הפסיקות של XINU
4
מערכות הפעלה -תרגול 8
אפריל 15
הרדמת התהליכים
תהליך נכנס להרדמה רק אם הוא בעצמו
החליט על כך
שגרות ההרדמה – sleep, sleept
כל החישובים – ביחידות של פסיקות השעון
המימוש יעיל ככל האפשר – משפיע על
מהירות הביצוע של שגרת פסיקת השעון
5
מערכות הפעלה -תרגול 8
אפריל 15
תור ההפרשים
התהליכים הרדומים נמצאים בתור ההפרשים
הסדר – לפי סדר ההתעוררות
qkey שומר את ההפרש בזמן בין שני
תהליכים עוקבים
עבור התהליך הראשון בתור ,המפתח שומר
את מספר הפעימות שנשארו עד שיתעורר,
שמתעדכן עם כל פעימת שעון
6
מערכות הפעלה -תרגול 8
אפריל 15
תור ההפרשים
למה זה טוב?
עדכון ההמתנות בעקבות פסיקה כרוך בהפחתה
של מפתח ראשון בלבד
זמן ההמתנה של תהליך יהיה שווה שסכום ערכי
המפתח של כל מי שלפניו
כשתהליך יוצא מתור (ערך המפתח ,)0תהליך
שנהיה הראש החדש יתחיל את הספירה לאחור
7
מערכות הפעלה -תרגול 8
אפריל 15
תור הפרשים :דוגמה
זמני המתנה :
תהליך ,15 : 1תהליך ,20 : 2תהליך 12 : 3
בטבלת : q
8
)3 = (15-12
2
3
1
)5 = (20-12-3
tail
1
2
12
1
head
3
…
…
…
…
3
-
head
-
2
tail
מערכות הפעלה -תרגול 8
אפריל 15
insertd.c
הכנסת תהליך לתור ההפרשים insertd -
לא משתתפת בפסיקת שעון
עוברת על התור במטרה למצוא את ההפרש
הקרוב ביותר לנתון – סכום של ערכי המפתח
של כל מי שלפניו אמור להיות קטן שווה
למספר הפעימות שהוא אמור להכנס למצב
sleep
9
מערכות הפעלה -תרגול 8
אפריל 15
sleep.h
10
מערכות הפעלה -תרגול 8
אפריל 15
insertd.c
11
מערכות הפעלה -תרגול 8
אפריל 15
sleept.c/sleep.c
sleept מממשת המתנה בפסיקות שעון
עד 30דקות ( 32767פסיקות)
sleep מממשת המתנה בשניות ,תוך המרה
פנימית ליחידות פסיקת שעון
אם זמן ההרדמה גדול מ 30-דקות התהליך
מרדים את עצמו כמה פעמים .השיטה הזאת
לא מדויקת .למה?
12
מערכות הפעלה -תרגול 8
אפריל 15
sleept.c/sleep.c
אם זמן ההרדמה גדול מ 30-דקות התהליך
מרדים את עצמו כמה פעמים .השיטה הזאת
לא מדויקת .למה?
זה נכון בהנחה שתהליך הופך להיות
currentבסוף כל הרדמה קצובה
זה לא המצב – בגלל מדיניות החלפת
התהליכים
13
מערכות הפעלה -תרגול 8
אפריל 15
sleept.c
14
מערכות הפעלה -תרגול 8
אפריל 15
sleep.c
15
מערכות הפעלה -תרגול 8
אפריל 15
wakeup.c
משחררת תהליכים רדומים
התהליך משוחרר כל עוד המפתח שלו קטן או
שווה לאפס
16
מערכות הפעלה -תרגול 8
אפריל 15
clkint.c
הפחתת המפתח הראשון באחד
בדיקה האם קיימים תהליכים שחייבים
להתעורר ,הוצאה מתור הרדומים
טיפול בpreemption-
האם ערך ה preempt-יכול להיות שלילי?
כן ,במקרה של תהליך עם עדיפות גבוהה
שלא מתחלף כשזמנו נגמר.
17
מערכות הפעלה -תרגול 8
אפריל 15
clkint.c
18
מערכות הפעלה -תרגול 8
אפריל 15
clkint.c
מקדמת את todבאחד
סדר הפעולות הוא חשוב
מה יקרה אם reschedיקדים את הטיפול
בתור הרדומים?
ההמתנה עלולה להתארך מעבר למצופה ,עד
לפסיקה הבאה ואפילו יותר מזה
19
מערכות הפעלה -תרגול 8
אפריל 15
החלפת תהליכים בזמן פסיקה
האם זה בטוח לקרוא ל resched-מתוך
שגרת ?clkint
עם החלפת תהליכים חזרה מפסיקה יכולה
לקחת זמן (ואפילו להימשך לנצח)
אז איך בכל זאת זה עובד?
20
מערכות הפעלה -תרגול 8
אפריל 15
החלפת תהליכים בזמן פסיקה
למה צריך לטפל בפסיקה במהירות?
21
צריך להודיע לחמרה שהפסיקה טופלה
במהירות ,אחרת מנגנון הפסיקות ישתבש
מנגנון הפסיקות חסום בזמן הפסיקה שגם עלול
לשבש פעילות מחשב תקינה
התכנית המופסקת אמורה לא "לחוש" את
הפסיקה
מערכות הפעלה -תרגול 8
אפריל 15
החלפת תהליכים בזמן פסיקה
איך זה עובד?
22
לא קוראים ל resched-לפני שהודענו לחמרה
שהפסיקה טופלה
גם אם יש החלפה ,מנגנון ישוחרר על ידי
restoreשל התהליך הנכנס
ההנחה היא שמערכת ההפעלה עובדת בצורה
סבירה
מערכות הפעלה -תרגול 8
אפריל 15
דוגמה
עלינו לשנות את השגרה sleeptכך שתהיה
מסוגלת לקבל ערכים העולים על TICSD
(יותר מ 30-דקות)
נגדיר מערך חדשsleep_time[NPROC] ,
נממש שגרת wakeupחדשה,
)(wakeup_new
23
מערכות הפעלה -תרגול 8
אפריל 15
דוגמה clkint.c -
24
מערכות הפעלה -תרגול 8
אפריל 15
דוגמה new_wakeup.c -
25
מערכות הפעלה -תרגול 8
אפריל 15
דוגמה – CPU time limit
ממשו שגרה limit_cpu_timeשמונעת מתהליך
pidלשהות יותר מ secs-שניות במעבד:
)SYSCALL limit_cpu_time(int pid, int secs
נא לסיים תהליך אחרי שתם זמנו
26
מערכות הפעלה -תרגול 9
אפריל 15
דוגמה – CPU time limit
27
מערכות הפעלה -תרגול 9
אפריל 15
דוגמה – CPU time limit
28
מערכות הפעלה -תרגול 9
אפריל 15
דוגמה – CPU time limit
29
מערכות הפעלה -תרגול 9
אפריל 15
דוגמה – CPU time limit
30
מערכות הפעלה -תרגול 9
אפריל 15