מערכות הפעלה
Download
Report
Transcript מערכות הפעלה
מערכות הפעלה
תרגול – 8ניהול פסיקות
מה בתכנית?
תזכורת -ניהול פסיקות
ניהול פסיקות בXINU-
2
מערכות הפעלה -תרגול 9
אפריל 15
תזכורת – מהי פסיקה?
מצב של העברת שליטה בכפייה של ה CPU-לרוטינה.
פסיקות נבדלות לכמה סוגים:
– Hardware Interrupts .1פסיקות חומרה – תגובה
לאיתותי חומרה במחשב שמחוץ ל .CPU-בד"כ לצרכי
קלט\פלט.
– Exceptions .2חריגות – פסיקות הנובעות ממצב לא תקין
במהלך הריצה.
– Software Interrupts .3פסיקות תוכנה – פסיקות ביוזמת
התוכנית
3
מערכות הפעלה -תרגול 2
אפריל 15
תזכורת -וקטור הפסיקות
טיפול בפסיקה מתבצע באמצעות הרצת שגרה מיוחדת
האחראית לטפל באותה פסיקה .לשגרה כזאת קוראים ISR
– Interrupt Service Routine
למבנה נתונים המקשר בין כל מספר פסיקה לשגרת הטיפול
בה קוראים וקטור פסיקות
כתובת שגרת 4 :ISRבתים ( 2סגמנט 2 ,אופסט)
1Kבזכרון לשמירת כל הכתובות (= 1024בתים)
הפסיקות המזוהות ע"י מס' .0..FFכשמגיעה פסיקה מס' , v
מריצים את שגרת הטיפול הנמצאת בזכרון בכתובת .4v
4
מערכות הפעלה -תרגול 2
אפריל 15
חריגות
חריגות (למשל חלוק באפס ,גישה לזכרון לא קיים ,נפילת
מתח) מטופלות כפסיקות.
דוגמאות:
כניסה 0בוקטור הפסיקות שמורה לחריגה – חילוק באפס
כניסה 4שמורה עבור גלישה ()overflow
5
מערכות הפעלה -תרגול 2
אפריל 15
פסיקות תכנה
ניתן "לייצר" פסיקות באמצעות פקודת האסמבלר .int
פסיקות אלו נקראות פסיקות תכנה
תחביר:
;>מספר פסיקה< int
דוגמה :פסיקת breakpoint
;int 3
6
מערכות הפעלה -תרגול 2
אפריל 15
סוגי פסיקות בXINU-
7
מספר
סוג
00
חריגה
תאור
שם
חילוק באפס
08
חומרה
CLK_INT
פסיקת שעון (כ 18.2פעמים בשנייה)
09
חומרה
KBD_INT
לחיצה על מקלדת
10
תוכנה
VID
שרותי תצוגת מסך
13
תוכנה
DSK
שרותי דיסק
16
תוכנה
KBD
שרותי קלט מהמקלדת
18
תוכנה
Ctrl_Break
נקראת בCtrl-Break-
מערכות הפעלה -תרגול 2
אפריל 15
מנגנון הפסיקות
סיום הפקודה הנוכחית.
שמירת אוגר הדגלים.
איפוס .Interrupt Flag – IF
איפוס .Trap Flag – TF
שמירת כתובת הפקודה הבאה
לביצוע .cs:ip
שימוש בפקודת IRETבמקום :RETחזור מטיפול
בפסיקה – שולפת מהמחסנית את הip ,cs ,FLAGS-
ושינוי cs:ipלערכים שנשלפו מהמחסנית.
8
מערכות הפעלה -תרגול 9
אפריל 15
מימוש פסיקות -דרישות
אין קריאה מסודרת לפונקציות טיפול בפסיקה .הפסיקה
קוראת "בין" שורות הקוד של התוכנית.
יש צורך לשמור את ה FLAGS-וכתובת החזרה CS:IP
יש צורך בפקודה מיוחדת כדי להוציא את הCS:IP-
הישנים שנשמרו ואת ה.FLAGS-
לא ניתן לממש שגרת טיפול בפסיקה בשפת C
אבל ...נרצה קוד כמה שיותר פשוט
9
מערכות הפעלה -תרגול 9
אפריל 15
פתרון :אסטרטגית פסיקות בXINU-
אסטרטגיית שני שלבים:
פסיקות מועברות לשגרה קטנה הכתובה בשפת
אסמבלר שאחראית על טיפול בערכי אוגרים ,זיהוי
ההתקן שגרם לפסיקה ,וחזרה מפסיקה
בנוסף השגרה גם קוראת לפונקצית טיפול ראשית
עבור אותו התקן שכתובה בC-
10
מערכות הפעלה -תרגול 9
אפריל 15
Interrupt Dispatcher
11
משתמש בטבלת הפסיקות intmapשכוללת פניות
לשגרת intcomדרך פקודת .CALL
כאשר קוראת פסיקה ,המעבד מייד מבצע את פקודת
ה CALL -ל intcom-שבעקבותיה מתבצע הקוד של
.intcom
אם כל הפסיקות משתמשות באותה שגרה ,כיצד יש
הבחנה בינהן?
פקודת CALLדוחפת כתובת חזרה למחסנית,כלומר,
את ה byte-שאחרי הפקודה .לכן intcom ,יכולה
להשתמש בכתובת הזו כפויננטר לטבלת .intmap
מערכות הפעלה -תרגול 9
אפריל 15
מבנה הנתונים Intmap -
12
מערכות הפעלה -תרגול 9
אפריל 15
מבנה הנתונים Intmap -
13
מערכות הפעלה -תרגול 9
אפריל 15
– Interrupt Dispatcherאופן טיפול בפסיקה
Intcom .1יכולה לבצע שגרת BIOSלפני טיפול
בפסיקה .זה נועד להתמודד עם הצורך להריץ קוד
התלוי בחומרה.
.2קריאה לקוד הייחודי של XINUלפסיקה.
:Reentancy Problem אם הפסיקה התרחשה
במהלך קריאת Biosעלולה להיות בעיה .קריאות
BIOSמאפשרות פסיקות ,ולא יכולות להגן על
המשתנים הגלובליים שלהם מפני קריאות חוזרות
מתהליכים שונים ).(non-reentrant
14
מערכות הפעלה -תרגול 9
אפריל 15
אופן טיפול בפסיקה -המשך
מה עלול לקרות? ישנן פסיקות (רוטינות של )XINU
שקוראות ל .resched -אם התהליך מתחלף זה יכול לגרום
לפסיקת BIOSנוספת
פתרון :ביטול החלפת תהליכים במידה והפסיקה התרחשה
במהלך קריאת – Biosכיבוי .pcxflag
עניין נוסף :פסיקות שמתרחשות במהלך קריאת Bios
ימתמשו בסגמנטי קוד ומידע השונים מזה שXINU-
משתמשת (כך גם נדע להבחין שאנו במהלך קריאת .)Bios
לכן ,קוד הפסיקה של XINUחייב להיקרא עם סגמנטים
תואמים ל – XINU-באחריות intcomליצור מחסנית זמנית
בסגמנט המידע של .XINU
15
מערכות הפעלה -תרגול 9
אפריל 15
16
מערכות הפעלה -תרגול 9
אפריל 15
17
מערכות הפעלה -תרגול 9
אפריל 15
18
מערכות הפעלה -תרגול 9
אפריל 15
19
מערכות הפעלה -תרגול 9
אפריל 15
עיבוד פסיקה עם pcxflagמכובה
דגל pcxflagשולט בresched-
pcxflag = 0 כשהמחסנית הלוקלית משמשת
לקריאות BIOS
xdisable/xrestore שולטות על הדגל
שדה iflagבכניסת intmapאומר האם לבצע
קריאה לשגרה המקורית לפני קריאה לשגרת
XINU
20
מערכות הפעלה -תרגול 9
אפריל 15
עיבוד פסיקה עם pcxflagדלוק
האם ניתן לעשות ?reschedכן ,בתנאי שלא
מתבצעת קריאה לשגרת BIOS
נראה תרשים שמציג למה זה בטוח עבור שני
תהליכים P ,וQ-
…
)Intcom (2
איך נמנע " stack
?"overflow
21
Q
ISR
)Intcom (1
P
Resched
מערכות הפעלה -תרגול 9
אפריל 15
עיבוד פסיקה עם pcxflagדלוק
לכל תהליך יש מחסנית משלו
רק פסיקה אחת מתבצעת עבור אותו תהליך
כשהתהליך חוזר למעבד הפסיקות שוב מכובות עד
לחזרה מהפסיקה המקורית
פסיקה נוספת לא תופיע בזמן ריצה של פסיקה
בהקשר של P
פסיקה אכן יכולה להופיע בזמן ריצה של Q
22
מערכות הפעלה -תרגול 9
אפריל 15
עיבוד פסיקה עם pcxflagדלוק
resched בזמן עיבוד פסיקה הוא בטוח אם:
ISR מעדכן את כל הנתונים הגלובליים לפני קריאה
לresched-
אף שגרה לא מתירה פסיקות בלי שאסרה אותן
לפני זה
היוצא מן הכלל – מהלך העדכון שמתיר את
הפסיקות בעליית המערכת
23
מערכות הפעלה -תרגול 9
אפריל 15
כללים לכתיבת ISR
לא מרימה דגל של פסיקות בצורה מפורשת
יכולה לבצע ( reschedבודקת את תקינות המבנים
הגלובליים לפני הקריאה)
לא קוראת לפונקציה שמעבירה את התהליך למצב
שונה מ CURR-ו( READY-תהליך )NULL
לא משאירה פסיקות מכובות הרבה זמן –
ההתקנים חייבים לפעול נכון
זמן העיקוב האפשרי הוא תלוי התקן
24
מערכות הפעלה -תרגול 9
אפריל 15
דוגמא :הדפס את מספר הפעמים שבו
פסיקת XINUנתונה הופיעה
רעיון :נוסיף שדה חדש ל.countint -intmap-
בפונקציית 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
25
מערכות הפעלה -תרגול 9
אפריל 15
26
מערכות הפעלה -תרגול 9
אפריל 15
27
מערכות הפעלה -תרגול 9
אפריל 15
28
מערכות הפעלה -תרגול 9
אפריל 15
29
מערכות הפעלה -תרגול 9
אפריל 15
30
מערכות הפעלה -תרגול 9
אפריל 15
31
מערכות הפעלה -תרגול 9
אפריל 15