1 / 31

מערכות הפעלה

מערכות הפעלה. תרגול 8 – ניהול פסיקות. מה בתכנית?. תזכורת - ניהול פסיקות ניהול פסיקות ב- XINU. תזכורת – מהי פסיקה?. מצב של העברת שליטה בכפייה של ה- CPU לרוטינה. פסיקות נבדלות לכמה סוגים:

tadita
Download Presentation

מערכות הפעלה

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. מערכות הפעלה תרגול8 – ניהול פסיקות

  2. מה בתכנית? • תזכורת - ניהול פסיקות • ניהול פסיקות ב-XINU מערכות הפעלה - תרגול 9

  3. תזכורת – מהי פסיקה? • מצב של העברת שליטה בכפייה של ה-CPU לרוטינה. • פסיקות נבדלות לכמה סוגים: • 1. Hardware Interrupts – פסיקות חומרה – תגובה לאיתותי חומרה במחשב שמחוץ ל-CPU. בד"כ לצרכי קלט\פלט. • 2. Exceptions – חריגות – פסיקות הנובעות ממצב לא תקין במהלך הריצה. • 3. Software Interrupts – פסיקות תוכנה – פסיקות ביוזמת התוכנית מערכות הפעלה - תרגול 2

  4. תזכורת - וקטור הפסיקות • טיפול בפסיקה מתבצע באמצעות הרצת שגרה מיוחדת האחראית לטפל באותה פסיקה. לשגרה כזאת קוראים ISR – Interrupt Service Routine • למבנה נתונים המקשר בין כל מספר פסיקה לשגרת הטיפול בה קוראים וקטור פסיקות • כתובת שגרת ISR: 4 בתים (2 סגמנט, 2 אופסט) • K1 בזכרון לשמירת כל הכתובות (=1024 בתים) • הפסיקות המזוהות ע"י מס' FF..0. כשמגיעה פסיקה מס' v , מריצים את שגרת הטיפול הנמצאת בזכרון בכתובת 4v. מערכות הפעלה - תרגול 2

  5. חריגות • חריגות (למשל חלוק באפס, גישה לזכרון לא קיים, נפילת מתח) מטופלות כפסיקות. • דוגמאות: • כניסה 0 בוקטור הפסיקות שמורה לחריגה – חילוק באפס • כניסה 4 שמורה עבור גלישה (overflow) מערכות הפעלה - תרגול 2

  6. פסיקות תכנה • ניתן "לייצר" פסיקות באמצעות פקודת האסמבלר int. פסיקות אלו נקראות פסיקות תכנה • תחביר: int <מספר פסיקה>; • דוגמה: פסיקת breakpoint int 3; מערכות הפעלה - תרגול 2

  7. סוגי פסיקות ב-XINU מערכות הפעלה - תרגול 2

  8. מנגנון הפסיקות • סיום הפקודה הנוכחית. • שמירת אוגר הדגלים. • איפוס Interrupt Flag – IF. • איפוס Trap Flag – TF. • שמירת כתובת הפקודה הבאה לביצוע cs:ip. • שימוש בפקודת IRET במקום RET: חזור מטיפול בפסיקה – שולפת מהמחסנית את ה-FLAGS, cs, ip ושינוי cs:ip לערכים שנשלפו מהמחסנית. מערכות הפעלה - תרגול 9

  9. מימוש פסיקות - דרישות • אין קריאה מסודרת לפונקציות טיפול בפסיקה. הפסיקה קוראת "בין" שורות הקוד של התוכנית. • יש צורך לשמור את ה-FLAGS וכתובת החזרה CS:IP • יש צורך בפקודה מיוחדת כדי להוציא את ה- CS:IP הישנים שנשמרו ואת ה-FLAGS. • לא ניתן לממש שגרת טיפול בפסיקה בשפת C • אבל... נרצה קוד כמה שיותר פשוט מערכות הפעלה - תרגול 9

  10. פתרון: אסטרטגית פסיקות ב-XINU • אסטרטגיית שני שלבים: • פסיקות מועברות לשגרה קטנה הכתובה בשפת אסמבלר שאחראית על טיפול בערכי אוגרים, זיהוי ההתקן שגרם לפסיקה, וחזרה מפסיקה • בנוסף השגרה גם קוראת לפונקצית טיפול ראשית עבור אותו התקן שכתובה ב-C מערכות הפעלה - תרגול 9

  11. Interrupt Dispatcher • משתמש בטבלת הפסיקות intmapשכוללת פניות לשגרתintcom דרך פקודת CALL. • כאשר קוראת פסיקה, המעבד מייד מבצע את פקודת ה- CALL ל-intcom שבעקבותיה מתבצע הקוד של intcom. • אם כל הפסיקות משתמשות באותה שגרה, כיצד יש הבחנה בינהן? • פקודת CALL דוחפת כתובת חזרה למחסנית,כלומר, את ה-byte שאחרי הפקודה. לכן, intcom יכולה להשתמש בכתובת הזו כפויננטר לטבלת intmap. מערכות הפעלה - תרגול 9

  12. מבנה הנתונים - Intmap מערכות הפעלה - תרגול 9

  13. מבנה הנתונים - Intmap מערכות הפעלה - תרגול 9

  14. Interrupt Dispatcher – אופן טיפול בפסיקה • 1. Intcom יכולה לבצע שגרת BIOS לפני טיפול בפסיקה. זה נועד להתמודד עם הצורך להריץ קוד התלוי בחומרה. • 2. קריאה לקוד הייחודי של XINU לפסיקה. • Reentancy Problem: אם הפסיקה התרחשה במהלך קריאת Bios עלולה להיות בעיה. קריאות BIOS מאפשרות פסיקות, ולא יכולות להגן על המשתנים הגלובליים שלהם מפני קריאות חוזרות מתהליכים שונים (non-reentrant). מערכות הפעלה - תרגול 9

  15. אופן טיפול בפסיקה - המשך • מה עלול לקרות? ישנן פסיקות (רוטינות של XINU) שקוראות ל- resched. אם התהליך מתחלף זה יכול לגרום לפסיקת BIOS נוספת • פתרון: ביטול החלפת תהליכים במידה והפסיקה התרחשה במהלך קריאת Bios – כיבוי .pcxflag • עניין נוסף: פסיקות שמתרחשות במהלך קריאת Bios ימתמשו בסגמנטי קוד ומידע השונים מזה ש-XINU משתמשת (כך גם נדע להבחין שאנו במהלך קריאת Bios). • לכן, קוד הפסיקה של XINU חייב להיקרא עם סגמנטים תואמים ל-XINU – באחריות intcom ליצור מחסנית זמנית בסגמנט המידע של XINU. מערכות הפעלה - תרגול 9

  16. מערכות הפעלה - תרגול 9

  17. מערכות הפעלה - תרגול 9

  18. מערכות הפעלה - תרגול 9

  19. מערכות הפעלה - תרגול 9

  20. עיבוד פסיקה עם pcxflag מכובה • דגל pcxflag שולט ב-resched • pcxflag = 0 כשהמחסנית הלוקלית משמשת לקריאות BIOS • xdisable/xrestore שולטות על הדגל • שדה iflag בכניסת intmap אומר האם לבצע קריאה לשגרה המקורית לפני קריאה לשגרת XINU מערכות הפעלה - תרגול 9

  21. עיבוד פסיקה עם pcxflag דלוק • האם ניתן לעשות resched? כן, בתנאי שלא מתבצעת קריאה לשגרת BIOS • נראה תרשים שמציג למה זה בטוח עבור שני תהליכים, P ו-Q P Intcom (1) ISR Q Intcom (2) … איך נמנע "stack overflow"? Resched מערכות הפעלה - תרגול 9

  22. עיבוד פסיקה עם pcxflag דלוק • לכל תהליך יש מחסנית משלו • רק פסיקה אחת מתבצעת עבור אותו תהליך • כשהתהליך חוזר למעבד הפסיקות שוב מכובות עד לחזרה מהפסיקה המקורית • פסיקה נוספת לא תופיע בזמן ריצה של פסיקה בהקשר של P • פסיקה אכן יכולה להופיע בזמן ריצה של Q מערכות הפעלה - תרגול 9

  23. עיבוד פסיקה עם pcxflag דלוק • resched בזמן עיבוד פסיקה הוא בטוח אם: • ISR מעדכן את כל הנתונים הגלובליים לפני קריאה ל-resched • אף שגרה לא מתירה פסיקות בלי שאסרה אותן לפני זה • היוצא מן הכלל – מהלך העדכון שמתיר את הפסיקות בעליית המערכת מערכות הפעלה - תרגול 9

  24. כללים לכתיבת ISR • לא מרימה דגל של פסיקות בצורה מפורשת • יכולה לבצע resched(בודקת את תקינות המבנים הגלובליים לפני הקריאה) • לא קוראת לפונקציה שמעבירה את התהליך למצב שונה מ-CURR ו-READY (תהליך NULL) • לא משאירה פסיקות מכובות הרבה זמן – ההתקנים חייבים לפעול נכון • זמן העיקוב האפשרי הוא תלוי התקן מערכות הפעלה - תרגול 9

  25. דוגמא: הדפס את מספר הפעמים שבו פסיקת XINU נתונה הופיעה • רעיון: נוסיף שדה חדש ל-intmap- countint. • בפונקציית intcom נעלה את ה-counter ב-1 • נכתוב קריאות מערכת int return_interrupt_int_no_of_times(int int_no) void int_used_by_xinu() כך שהפונקציה return_interrupt_int_no_of_times תחזיר את מספר הפעמים שבה הפסיקה מספר int_no הופיעה, והפונקציה int_used_by_xinu תדפיס את כל הפסיקות שמטופלות על ידי XINU. מערכות הפעלה - תרגול 9

  26. מערכות הפעלה - תרגול 9

  27. מערכות הפעלה - תרגול 9

  28. מערכות הפעלה - תרגול 9

  29. מערכות הפעלה - תרגול 9

  30. מערכות הפעלה - תרגול 9

  31. מערכות הפעלה - תרגול 9

More Related