מערכות הפעלה תרגול – 6פסיקת שעון ,אתחול מ"ה ויצירת תהליכים פסיקת השעון מתרחשת כל הזמן בצורה מחזורית הפרשי זמן קצרים ,המערכת נשארת בשליטה נותנת למערכת לספור זמן ,התרחשות הפסיקה פירושה שעברה יחידת זמן נוספת שימוש של :XINU 2 מנגנון הpreemption- הרדמת תהליכים ניהול שעון גלובלי מאז עלית המערכת ()tod הרדמת התהליכים תהליך נכנס להרדמה רק אם הוא בעצמו החליט על כך שגרות ההרדמה – sleep, sleept כל החישובים – ביחידות של פסיקות השעון המימוש יעיל ככל האפשר – משפיע על מהירות הביצוע של שגרת פסיקת השעון 3 תור ההפרשים התהליכים הרדומים נמצאים בתור ההפרשים הסדר – לפי סדר ההתעוררות qkey שומר את ההפרש בזמן בין שני תהליכים עוקבים עבור תהליך ראשון בתור המפתח שומר את הזמן עד שהתהליך מתעורר 4 תור ההפרשים למה זה טוב? 7 5 M 3 6 9 1 10 7 M 5 3 עדכון ההמתנות בעקבות פסיקה כרוך בהפחתה של מפתח ראשון בלבד 5 insertd.c הכנסת תהליך לתור ההפרשים insertd - לא משתתפת בפסיקת שעון עוברת על התור במטרה למצוא את ההפרש הקרוב ביותר לנתון 6 sleep.h 7 insertd.c 8 sleept.c/sleep.c sleept מממשת המתנה בפסיקות שעון עד TICSNפסיקות sleep מממשת המתנה בשניות ,תוך המרה פנימית ליחידות פסיקת שעון אם זמן ההרדמה גדול מ 1080-שניות התהליך מרדים את עצמו כמה פעמים. השיטה הזאת לא מדויקת .למה? 9 sleept.c/sleep.c אם זמן ההרדמה גדול מ 1080-שניות התהליך מרדים את עצמו כמה פעמים. השיטה הזאת לא מדויקת .למה? זה נכון בהנחה שתהליך הופך להיות currentבסוף כל הרדמה קצובה זה לא המצב – בגלל מדיניות החלפת התהליכים 10 sleept.c 11 sleep.c 12 wakeup.c משחררת תהליכים רדומים התהליך משוחרר כל עוד המפתח שלו קטן או שווה לאפס 13 שגרת פסיקת השעון clkint - הקוד הייחודי של פסיקת השעון נקראת ע"י סדרן הפסיקות intcom המצביע לשגרה נמצא בשדה newisr בטבלת ,intmapטבלת הפסיקות של XINU 14 intmap.asm ,intmap תזכורת – טבלת 15 clkint.c הפחתת המפתח הראשון באחד בדיקת האם קיימים תהליכים שחייבים להתעורר ,הוצאה מתור הרדומים טיפול בpreemption- האם ערך ה preemt-יכול להיות שלילי? כן ,במקרה של תהליך עם עדיפות גבוהה 16 clkint.c 17 clkint.c מקדמת את todבאחד סדר הפעולות הוא חשוב מה יקרה אם reschedיקדים את הטיפול בתור הרדומים? ההמתנה עלולה להתארך מעבר למצופה ,עד לפסיקה הבאה ואפילו יותר מזה 18 אתחול השעון ותור הרדומים 19 דוגמה עלינו לשנות את השגרה sleeptכך שתהיה מסוגלת לקבל ערכים העולים על TICSD נגדיר מערך חדשsleep_time[NPROC] , נממש שגרת wakeupחדשה, )(wakeup_new 20 clkint.c - דוגמה 21 new_wakeup.c - דוגמה 22 דוגמה – CPU time limit ממשו שגרה limit_cpu_timeשמונעת מתהליך pidלשהות יותר מ secs-שניות במעבד: )SYSCALL limit_cpu_time(int pid, int secs נא לסיים תהליך אחרי שתם זמנו 23 CPU time limit – דוגמה 24 CPU time limit – דוגמה 25 CPU time limit – דוגמה 26 CPU time limit – דוגמה 27 אתחול המערכת שלבים: אתחול המכונה בזמן ההדלקה ( ,bootלא קיים ב- )XINU אתחול מבנה הנתונים מעבר למוד של ריצה קוד האתחול נמצא בפונקצית main שמתחילה לרוץ כיישום רגיל ,משתלטת על פסיקות והופכת למערכת תהליכים 28 אתחול מבנה נתונים חישוב זכרון פנוי ואיתחול מנהל הזכרון אתחול טבלאות תהליכים ,תורים ,סמפורים אתחול מבני נתונים של שעון וכו' (שלא דנו בקורס) השתלטות על פסיקות ,כולל אתחול טבלת הפסיקות 29 מעבר לשלב ריצה מצב שיכול היה להיות שלב ביניים בריצה של מערכת הצבת ערכי אתחול במבנה נתונים עבור תהליך NULLפעיל הוספת תהליכי מערכת butler ,וxmain- (במקום )command line 30 initialize.c 31 initialize.c 32 initialize.c 33 main - initialize.c 34 main - initialize.c 35 sysinit 36 sysinit 37 sysinit 38 sysinit 39 sysinit 40 יצירת תהליך חדש – )(newpid 41 סיום התהליך – )( userret 42 43 -מתחזה ל ctxsw SP <di> <si> INITF BP ctxsw stack operations <bp> procaddr INITRET args procaddr calls to ctxsw without parameters INITRET calls to procaddr with args 44 תכניות דוגמה – xexec, xfork מימוש קריאות דמוי: – xexec קריאה שמריצה תכנית אחרת ()exec1, exec2 – xfork עבור קריאת דמוי ( forkבשיעור הבא) 45 xexec1 אין צורך בכניסה חדשה בטבלת התהליכים לא צריך זיכרון נוסף מבצעים createעל תהליך עצמו: עדכון פרמטר INITRET ,והמצביע על הקוד לערכים של תכנית חדשה עדכון תוכן להחלפת התהליכים קריאה ctxsw- 46 xexec1 47 xexec1 48 xexec1 49 SP xexec1 INITF PF INITRET PARAM 50 xexec1 51 xexec2 לולאה שמעתיקה מספר לא קבוע של פרמטרים מהנקודה הפעילה של מחסנית אל התחתית לא צריך זיכרון נוסף 52 xexec2 53 xexec2 54 xexec2 55 xexec2 56 xexec2 57 SP xexec2 INITF PF INITRET PARAM1 … PARAMn 58
© Copyright 2024