מערכות הפעלה

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‬‬