Transcript
Page 1: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה

Linux- – פסיקות ב9תרגול

Page 2: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 2(c) 2003 ארז חדד

תוכן התרגול

-מבוא לפסיקות בLinux-פסיקות בIA32:

סוגי הפסיקות( טבלת הפסיקותIDT)טיפול בפסיקות

-אתחול הIDT-ב Linux-טיפול בפסיקות בLinux:

טיפול בחריגותטיפול בפסיקות חומרהמשימות ממתינותסיום הטיפול

Page 3: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 3(c) 2003 ארז חדד

)Linux )1מבוא לפסיקות ב- פסיקה היא אות חשמלי הנשלח למעבד לציון אירוע

הדורש את טיפולו המיידי גורם למעבד להפסיק לבצע את הקוד הנוכחי ולעבור

לבצע קוד מיוחד לטיפול בפסיקהבהרצאה קוד הטיפול בפסיקה נקראInterrupt Service

Routine .-בLinux.יש למונח זה משמעות אחרת, כפי שנראה בהמשך

התקני חומרה שולחים פסיקות למעבד כדי לקבל טיפול לדוגמה: לחיצת מקש במקלדת גורמת למקלדת לשלוח פסיקה

למעבד על-מנת שיקרא את המידע על המקש שנלחץ

Page 4: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 4(c) 2003 ארז חדד

)Linux )2מבוא לפסיקות ב- המעבד יכול לשלוח לעצמו פסיקות כתוצאה מביצוע

קוד כדי לדווח על תקלה בביצוע או בכוונה כדרך לביצוע של הקוד המיועד לטיפול בפסיקה

-גורמת לפסיקה0לדוגמה: פקודת חלוקה ב במערכותIA32 סוגי פסיקות256 יש

0-255ממוספרים גם וקטור הפסיקהמספר הפסיקה נקרא( interrupt vector)

במערכת מרובת מעבדים, מעבדים שולחים פסיקותזה לזה כאמצעי תקשורת

למשל לצורך חלוקת תהליכים ביניהם

Page 5: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 5(c) 2003 ארז חדד

)Linux )3מבוא לפסיקות ב- המעבד בודק אם יש פסיקות ממתינות לטיפול בין

ביצוע של כל שתי הוראות עוקבות בקודפסיקה אינה קוטעת ביצוע של הוראת מכונה בסיסית

לאחר סיום הטיפול בפסיקה, המעבד יכול להמשיך לפני תשמר)כתובת החזרה נבביצוע הקוד המקורי

(הקפיצה לשגרת הטיפול בלי אסינכרוני, פסיקה יכולה להשלח למעבד באופן

קשר למצב המעבד כרגעקינון( nesting פסיקות -)בזמן שהמעבד גיעעשויות לה

מטפל בפסיקה קודמת במערכת מרובת מעבדים, מספר מעבדים יכולים

לטפל בפסיקות שונות בו-זמנית

Page 6: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 6(c) 2003 ארז חדד

)Linux )4מבוא לפסיקות ב-

-הטיפול בפסיקות בLinux הוא בתחום אחריותו של הגרעין בלבד

( בתגובה על פסיקה מבוצע מסלול בקרה בגרעיןKernel Control Path) הגרעין חייב לסנכרן את הגישה למבני הנתונים שלו כדי להגן עליהם מפני

מסלולי בקרה מקוננים או מקבילים )במעבדים שונים(פסיקה מטופלת תמיד בהקשר הביצוע של התהליך הנוכחי

גם אם לתהליך אין קשר לפסיקה שקרתה-טיפול בפסיקה מצריך מעבר לKernel Mode כולל החלפת

מחסניות לפי הצורך עבור התהליך הנוכחי-בפסיקה מקוננת אין החלפת מחסניות כי המעבד כבר נמצא בKernel

Mode

Page 7: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 7(c) 2003 ארז חדד

IA32: Interruptsפסיקות ב-

חומרהע"י התקני אסינכרונינשלחות אל המעבד באופן חיצוניים

( חלקן ניתנות לחסימהmasking-ע"י דגל ה )Interrupt Flag )IF( ,ברגיסטר הדגלים

פסיקה חסומה אינה מטופלת עד שהחסימה מוסרת פקודות המכונהcli-ו sti חוסמות ומסירות את החסימה ע"י

IFכיבוי והדלקת הדגל במהלך טיפול בפסיקת חומרה מבוצעת חסימה באופן

אוטומטיפסיקות מסוימות לא ניתנות לחסימה

נקראותNMI – Non-Maskable Interruptsמשמשות לדיווח על בעיות חומרה קריטיות, כגון נפילת מתח

Page 8: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 8(c) 2003 ארז חדד

)IA32: Interrupts )2פסיקות ב-

מועברות אל המעבד באמצעות בקר פסיקות מתוכנת Programmable Interrupt[ Advanced]נפרד לכל מעבד )

Controller – ]A[PIC )

מעבד APIC

שעון

דיסק

IRQ0

IRQ7

כרטיס קול

מדפסת

IRQ11

Page 9: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 9(c) 2003 ארז חדד

)IA32: Interrupts )3פסיקות ב-

כל התקן חומרה המבקש לשלוח פסיקה שולח אותIRQ )Interrupt ReQuest( לאחד מקווי הכניסה של

בקר הפסיקות אליו ההתקן מחובר קווי כניסה ממוספרים 16-24ישנם IRQ0-IRQ15/IRQ23( אפשר לחבר כמה התקנים לאותו קוIRQ Sharing)

טיפול בפסיקת חומרה מחייב בדיקת כל ההתקנים שיכלו לגרום לה

,כאשר בקר הפסיקות מבחין בבקשה מהתקן חומרההוא מעביר אות פסיקה למעבד אליו הוא מחובר

מספר הפסיקה הנוצרת עבור קוIRQn .ניתן לבחירה ,בדרך כללn+32

Page 10: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 10(c) 2003 ארז חדד

IA32: exceptionsפסיקות ב- (, אשר נוצרות ע"י המעבד כתוצאה חריגות )סינכרוניותפסיקות

מביצוע הוראה אחרונה בקוד ולא ע"י רכיבים חיצונייםאינן תלויות בדגל הפסיקות

:שלושה סוגים של חריגות.1Faults מציינות תקלות הניתנות לתיקון בביצוע ההוראה האחרונה –

בקוד-0דוגמה: חלוקה ב כתובת החזרה בסיום הטיפול היא זו של ההוראה שגרמה את התקלה, כדי

לבצע אותה מחדש.2Traps נגרמות באופן מכוון ע"י ההוראה האחרונה בקוד, כדי להפעיל –

את קוד הטיפול בפסיקה משמש בד"כ בהקשר שלdebuggers למשל למימוש ,breakpoint-כתובת החזרה בסיום הטיפול היא זו שאחרי ההוראה שגרמה לtrap

.3Abortsמציינות תקלות חמורות בביצוע ההוראה האחרונה בקוד – Machineדוגמה: מנגנון בדיקה אוטומטי של הזיכרון יכול לייצר חריגה מסוג 1.

Checkבעקבות גילוי שיבוש בתכולת הזיכרון

Page 11: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 11(c) 2003 ארז חדד

programmed exceptions

( חריגות מתוכנתותprogrammed exceptions או ) traps( הן סוג של software interruptsפסיקות תוכנה )

המשמשות לביצוע קריאות מערכתכפי שכבר ראינו בתרגולים קודמים-כזכור, בLinux ההוראה int 0x80 משמשת לקריאות

מערכת

Page 12: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 12(c) 2003 ארז חדד

Interrupt Descriptor Table )1(

-הקישור בIA32 בין וקטור פסיקה לשגרת הטיפול Interruptבפסיקה מבוצע דרך טבלה הקרויה

Descriptor Table )IDT(רגיסטר מיוחד ,idtr ,-מצביע לטבלת הIDT

נטען ע"י מערכת ההפעלה בזמן האתחול, בפקודת מכונהlidt-בIDTיש רשומה עבור כל וקטור פסיקה

רשומות256סה"כ בתים8כל רשומה בגודל כל רשומה נקראתinterrupt descriptor

Page 13: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 13(c) 2003 ארז חדד

Interrupt Descriptor Table )2(רשומה מכילה:

ציון סוג הרשומה1.

כתובת שגרת הטיפול 2.(segment:offset)

.3 DPL ערך –CPL מקסימלי להרצת שגרת הטיפול

קוד המשתמש יוכל לגרום 1.לפסיקות מסוימות )קריאות

(, debuggingמערכת, באמצעות פסיקות תוכנה

אבל לא פסיקות אחרות )כגון 2.טיפול בדיסק(

:IDT סוגי רשומות ב-3.1Interrupt Gate לפסיקות :

חומרה -דגל הIF מכובה אוטומטית

בגישה לטיפול דרך רשומה זו

.2Trap Gateלחריגות :-אין שינוי בIF בגישה לטיפול

בפסיקה דרך רשומה זו

.3Task Gate מגדיר תהליך :שיזומן לטיפול בפסיקה

-סוג זה אינו בשימוש בLinux ,כי הגרעין מטפל בפסיקות

Page 14: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 14(c) 2003 ארז חדד

דוגמאות של רשומות בטבלת IDTה-

סוג הרשומהכניסה

(gate)

כתובת שגרת הטיפול

seg:offs

DPL

0trapdivide_error0

3trapint33

13trapgeneral_protection0

32interrupttimer0

43interruptdisk0

128trapsystem_call3

להפעלה מקוד

משתמש

לא להפעלה מקוד

משתמש

Page 15: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 15(c) 2003 ארז חדד

)Linux )1 ב-IDTאתחול ה--טבלת הIDT-מאותחלת במקור ע"י ה BIOSLinux.מחליפה את כל הטבלה, בזמן הטעינה ראשית, מופעלת הפונקציהsetup_idt)( המאתחלת את כל

הרשומות בטבלה לערכי ברירת מחדל הבאים:Interrupt Gate כתובת השגרהignore_int)(

" שגרה זו מדפיסה הודעתUnknown Interrupt על המסך בתגובה לפסיקה "– לא אמורה להיות מופעלת לעולם )אחרת באג או בעית חומרה(

DPL=0setup_idt)(-ו ignore_int)( מוגדרות באסמבלר בקובץ הגרעין

arch/i386/kernel/head.S-לאחר האתחול, מעבר נוסף על הIDT מעדכן את הכניסות

המתאימות לטיפול בחריגות ובפסיקות מהחומרה המותקנת במהלך פעולת המערכת ייתכן עדכון נוסף של הטבלה עקב התקנת

drivers

Page 16: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 16(c) 2003 ארז חדד

)Linux )2 ב-IDTאתחול ה- עדכון כניסה משתמש באחת הפונקציות הבאות, המוגדרות בקובץ הגרעין

arch/i386/kernel/traps.c: set_intr_gate(n, addr)

מיועדת לטיפול בפסיקות חומרהכותבת interrupt gate בכניסה n בטבלה, עםDPL=0 וכתובת שגרת טיפול

kcs:addr( kcs-מציין את ה code segment)של הגרעין

set_system_gate(n, addr) כותבתsystem gate( trap gate בכניסה )לשימוש תהליכי משתמש nבטבלה כתובתkcs:addr, DPL=3שגרות טיפול בפסיקה הנקבעות באופן זה נגישות לכל תוכנית משתמשמשמשת לפסיקות debugging 128ולפסיקה( 0x80המיועדת לקריאות מערכת )

set_trap_gate(n,addr)כותבת trap gate בכניסה n בטבלה, עם כתובתkcs:addr-ו DPL=0משמשת לטיפול בחריגות

Page 17: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 17(c) 2003 ארז חדד

)Linux )3 ב-IDTאתחול ה-

הפונקציהtrap_init)( המוגדרת בקובץ הגרעין ,arch/i386/kernel/traps.c מכילה חלק מהאתחול ,

. להלן חלק מהפונקציה:IDTהמשני של טבלת ה-

set_trap_gate(0, &divide_error);...set_system_gate(4, &overflow);...set_trap_gate(6, &invalid_op);...set_trap_gate(13, &general_protection);set_intr_gate(14, &page_fault);set_trap_gate(16, &coprocessor_error);...set_system_gate(128, &system_call);

Page 18: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 18(c) 2003 ארז חדד

)Linux )1טיפול בחריגות ב- - עבור חלק מהחריגות נדחף למחסנית קוד שגיאהhardware error

codeלמשל, עבור חריגה מתמטית נשמר סוג השגיאה

:קוד טיפוסי של שגרת טיפול בחריגהhandler_name:

pushl $0 /* only if no handler error code */pushl $do_handler_name /* C handler function */jmp error_code

השגרהerror_code שולפת את שני הערכים שנדחפו למחסנית לעיל ( ואחריו כל הרגיסטרים מלפני הפסיקה )בדומה 1ודוחפת למחסנית )-

(SAVE_ALLל- ,בהמשךerror_code-תבצע קריאה ל do_handler_name עם

, ומצביע לתחילת הרגיסטרים )מסוג hardware error codeהפרמטרים struct pt_regs .)*

,לאחר החזרה מהשגרה הפנימיתerror_code מורידה את הפרמטרים ret_from_exceptionשל השגרה הפנימית מהמחסנית וקוראת ל-

לסיום הטיפול

Page 19: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 19(c) 2003 ארז חדד

)Linux )2טיפול בחריגות ב-

מרבית שגרות הטיפול הפנימי בחריגות שולחותsignalלתהליך הנוכחי כדי שיטפל בתקלה שנגרמה

-סוג הsignalנקבע על-פי סוג החריגה המטופלת לדוגמה: עבורfloating point exception נשלח SIGFPE-שליחת הsignal באמצעות פונקציה כדוגמת force_sig)(

:kernel/signal.cהמוגדרת בקובץ הגרעין force_sig(sig_number, current);

-לפני החזרה לUser Modeהתהליך יגלה שיש , signal -הממתין לו, ויפנה לטפל בsignal.זה

Page 20: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 20(c) 2003 ארז חדד

Linuxטיפול בפסיקות חומרה ב-

:כל כניסה של פסיקת חומרה מצביעה לקוד מהצורה הבאהIRQn_interrupt:

pushl $n-256call common_interrupt

הטיפול בכל פסיקות החומרה עובר דרך מנגנון מרכזי אחד, כאשר האבחנה בין הפסיקות common_interruptהמתחיל ב-

היא באמצעות הערך הנשמר במחסנית מיד בתחילת שגרת הפסיקה

השגרהcommon_interrupt:common_interrupt:

SAVE_ALL /* save registers */call do_IRQ /* handle interrupt */jmp ret_from_intr /* resume execution */

Page 21: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 21(c) 2003 ארז חדד

)(do_IRQהפונקציה

הפונקציהdo_IRQ-הכתובה ב ,)(C מבצעת את , וקוראת APICהטיפול בפסיקה ברמת תפעול ה-

ISRs)( להפעלת ה-handle_IRQ_eventלפונקציה קובץ גרעיןarch/i386/kernel/irq.cdo_IRQ:מוגדרת כדלקמן )(

unsigned int do_IRQ(struct pt_regs regs); הפרמטרregs מאפשר לפונקציה לגשת לרגיסטרים השמורים

במחסנית, ובפרט גם לערך הבקרה המכיל את מספר הפסיקה (orig_eax)השדה הקרוי

הערך המוחזר אינו בשימוש מתוךcommon_interrupt

Linuxטיפול בפסיקות חומרה ב-

Page 22: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 22(c) 2003 ארז חדד

APICטיפול ב-

-כאשר קורית פסיקת חומרה, הAPICמודיע על הפסיקה למעבד ננעל" ואינו מודיע על פסיקות נוספות עד שיקבל אישור מהמעבד"-ובפרט ב( טכניקה מקובלתLinux-לטיפול ב )APIC בפסיקת

חומרה היא לשלוח לו בהקדם אישור להודיע על פסיקות חדשות פרט לכאלה מהסוג המטופל כרגע

"באופן זה, ברגע שיאופשרו פסיקות במעבד, ניתן יהיה לטפל "במקביל)מסלולי בקרה אחרים( בפסיקות חומרה נוספות

מצד שני, נמנעre-entrancy לקוד הטיפול באותו סוג פסיקה -בסיום הטיפול בפסיקה, יש לאפשר לAPIC להודיע גם על

פסיקה מהסוג שטופל

Linuxטיפול בפסיקות חומרה ב-

Page 23: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 23(c) 2003 ארז חדד

)do_IRQ)( )2הפונקציה

של פעולות הסדרdo_IRQ:)(שליפת סוג הפסיקה המטופלת-שליחת אישור סלקטיבי לAPIC הפעלת שגרות טיפול בפסיקה ע"יhandle_IRQ_event)…(

ISR – Interrupt Service Routine)פרטים בהמשך(

-אפשור סוג הפסיקה המטופלת בAPIC)ביצוע משימות ממתינות )פרטים בהמשך

Linuxטיפול בפסיקות חומרה ב-

Page 24: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 24(c) 2003 ארז חדד

)ISRs )1הפעלת ה-

כלISRהתקן מסוים מיועד בדרך-כלל לטפל ב :פסיקת חומרה מסוימתבתגובה ל

ISRעבור המקלדת קורא את קוד המקש שנלחץ ISRעבור כרטיס הרשת קורא נתונים שהתקבלו מהרשת

-אחד הפרמטרים שHandle_IRQ_event)( מקבלת עבור טיפול בפסיקה ISRsהוא רשימה מקושרת של

שהתקבלה.-לכל אחד מהISRs מצוינים דגלים לגבי אופן פעולתו

השגרהhandle_IRQ_event מפעילה את כל )( הרשומים עבור הפסיקה הנוכחית בזה אחר ISRsה-זה.בדיקת כל ההתקנים שיכלו לגרום לפסיקה

Linuxטיפול בפסיקות חומרה ב-

Page 25: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 25(c) 2003 ארז חדד

)ISRs )2הפעלת ה-

הפונקציהhandle_IRQ_event:מבצעת בעיקר )( מאפשרת פסיקות במעבד אלא אם מוגדר שלא בדגל

SA_INTERRUPT -בודקת רק את הדגלים של הISRהראשון בשרשרת

-מפעילה את הISRsשבשרשרת בזה אחר זה חוסמת את הפסיקות מחדש בסיום

Linuxטיפול בפסיקות חומרה ב-

Page 26: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 26(c) 2003 ארז חדד

חלוקת הטיפול בפסיקות חומרה

טיפול בפסיקות חומרה מסוימות עשויות לדרוש זמן רב( כזכור, הפסיקות במעבד חסומותIF בתחילת )כבוי

הטיפול בפסיקת חומרה ביצוע שגרת טיפול במלואה בפסיקות חסומות עלול

לגרום לעיכוב הטיפול בפסיקות אחרותפגיעה בביצועים)אובדן פסיקות ואובדן נתונים אפשרי )למשל: הקשות מקלדת

לכן, מנסים לצמצם למינימום את הפעילות הנעשיתבפסיקות חסומות

Page 27: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 27(c) 2003 ארז חדד

דרגות דחיפות בטיפול בפסיקות חומרה

.1critical פעולות שהכרחי לבצען בפסיקות חסומות–פעולות אלו מתבצעות :במהירות

-דוגמא: עבודה עם הAPIC -דוגמא: הISR של השעון קורא ומסנכרן ערכי שעוני חומרה במחשב בסדרות של

עלולה ליצור עיכוב שישבש ערכי השעון או ISRפעולות. פסיקה שתקרה במהלך ה-יגרום לשני שעונים לצאת מסנכרון

.2noncritical פעולות שיש לבצען מיד במסגרת הפסיקה, אך אין צורך בחסימת :הפסיקות

-דוגמא: העתקת קוד המקש שנלחץ לחוצץ של מערכת ההפעלה בISR :של המקלדת חייב להתבצע במסגרת הפסיקה הנוכחית )כדי לא לאבד את ההקשה הנוכחית( אבל

אינו מצריך חסימת פסיקות.3noncritical deferred משימות שיש צורך לבצען בעקבות הפסיקה, אך לא :

באופן מיידי, אלא כשיסתיים הטיפול המיידי בפסיקה דוגמא: העברת נתוני הקשות מקלדת שהצטברו בחוצץ מערכת ההפעלה לתהליך

המפעיל את המסוף המתאים. מאגר של cמשימות ממתינותמשימות אלה מוכנסות ל( deferrable functions לביצוע )

בעתיד

Page 28: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 28(c) 2003 ארז חדד

Linuxסוגי משימות ממתינות ב-.1Softirqמנגנון בסיסי, מממש את הסוגים האחרים :

-פונקציה המתבצעת בsoftirq יכולה להיות מופעלת (re-entrantבמקביל משני מעבדים שונים )

.2Taskletהמנגנון המומלץ, לשימוש רגיל : קוד שלtasklet מוגן מפני הפעלה במקביל ממעבדים

re-entrantשונים ולכן איננו צריך להיות Bottom Halves: tasklets בעדיפות גבוהה

, כלומר, שני יחיד מהווים קטע קריטי bottom halves ה-כל1.bottom halves אפילו עם קוד שונה( לא מתבצעים(

במקביל ממעבדים שוניםפגיעה חמורה במקביליות המערכת – מנגנון שמיועד 2.

להעלם

Page 29: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 29(c) 2003 ארז חדד

Linuxביצוע משימות ממתינות ב-

בכל מעבד יחיד, המשימות הממתינות מתבצעות באופן סדרתיאף משימה חדשה לא מתחילה להתבצע לפני סיום הקודמת

:בודקים אם יש משימות ממתינות לביצוע בנקודות זמן שונות כגון בסיוםdo_IRQ)כפי שראינו קודם( )(( כאשר מופעל חוט גרעיןkernel thread מיוחד. חוט זה רץ בעדיפות נמוכה )

בכל מעבד ומבצע בלולאה אינסופית בדיקה של משימות ממתינות וקריאה )(do_softirqל-

ניצול הזמן הפנוי בכל מעבד לטיפול במשימות ממתינות :שם החוטksoftirqd_CPUn עבור מעבד מספר n

" ניתן לראות חוט זה אם תבצעו פקודתps –ax"

....

Page 30: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 30(c) 2003 ארז חדד

מחסנית הגרעין בטיפול בפסיקה (1) בשקף הבא מתואר מבנה מחסנית הגרעין בזמן טיפול

Linuxבפסיקה כלשהי )חריגה או חומרה( ב-סדר שמירת האיברים אחיד וקבוע בכל צורות הטיפול ביט, כולל תכולת 32כל האיברים נשמרים כשדות של

segment registers באופן זה ניתן ל"קפל" את מחסנית הגרעין באותה צורה

בעת חזרה מטיפול בכל סוג פסיקה שהוא קיפול המחסנית מבוצע ע"י המאקרוRESTORE_ALL , הנקרא

מתוך קוד הסיום של כל שגרת טיפול בכל סוג פסיקה

Page 31: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 31(c) 2003 ארז חדד

האיבר במחסנית

חריגהפסיקת חומרהקריאת מערכת

ss-מצביע למחסנית התהליך בUser Mode

)אם התבצעה החלפת מחסניות( esp

eflagsערך רגיסטר הדגלים

cs כתובת חזרה

לאחר הפסיקה eip

orig_eax מספר קריאתהמערכת

מספר הפסיקה 256פחות

hardware error code

אם אין(0)או

(1הופך ל: )-

es

ערכי הרגיסטרים מלפני הפסיקה

כפי שנשמרו ע"י המאקרו SAVE_ALL

eax)עבור קריאות מערכת, שדה מכיל בסיום את הערך המוחזר(

ערכי הרגיסטרים

מלפני הפסיקה כפי שנשמרו ע"י

השגרה error_code

ds

eax

ebp

edi

esi

edx

ecx

ebx

Page 32: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 32(c) 2003 ארז חדד

מחסנית הגרעין בטיפול בפסיקה (3) שמירת( החלק הגבוה של המחסניתss:esp, eflags-ו cs:eip )

נשמר באופן אוטומטי ע"י המעבדss:espנשמר רק אם הטיפול בפסיקה כרוך בהחלפת מחסניות

שאר האיברים מוכנסים למחסנית מייד בתחילת שגרתהפסיקה

תחילה נשמר האיבר הקרויorig_eax שהוא "שדה בקרה" המכיל מידע ,רלוונטי לפי סוג הטיפול, כמופיע בטבלה

בטיפול בפסיקת חומרה וקריאות מערכת, המאקרוSAVE_ALL שומר את ערכי שאר הרגיסטרים, כדי לשחזרם בסיום הפסיקה

בטיפול בחריגה, מבוצעת שמירת שאר ערכי הרגיסטרים ע"י השגרהerror_code

Page 33: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 33(c) 2003 ארז חדד

מחסנית הגרעין בטיפול בפסיקה (4)

:RESTORE_ALLהמאקרו

popl %ebx..popl %esaddl 4, %espiret

כל שגרת טיפול בפסיקה יכולהלהוסיף איברים למחסנית מעבר למבנה זה במהלך פעולתה, אך

היא מחויבת לקפל את האיברים הנוספים בעצמה לפני הקריאה

RESTORE_ALLל- למשל: שגרת טיפול בחריגה

מעבירה לשגרת הטיפול הפנימית , פרמטרים Cשלה, הכתובה ב-

במחסנית. פרמטרים אלו מקופלים בחזרה מהשגרה

הפנימית לפני הקריאה RESTORE_ALLל-

קיפול ושחזור ערכי הרגיסטרים מלפני

הפסיקה

orig_eaxקיפול

שאר האיברים וחזרה קיפול

Page 34: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 34(c) 2003 ארז חדד

החלפת הקשר בזמן טיפול בפסיקות

לעיתים, שגרת הטיפול בפסיקה מגיעה למסקנה שיש לבצעהחלפת הקשר

למשל, טיפול בפסיקת שעון מגלה כי נגמר פרק הזמן המוקצב לתהליך או אולי הפסיקה היא קריאת מערכת שמעבירה את התהליך למצב

המתנה-בLinux לא ניתן לבצע החלפת הקשר בזמן טיפול בפסיקה

אסינכרונית במקום זאת, רק מסמנים כי נדרשת החלפת הקשר באמצעות

במתאר התהליךneed_reschedהדלקת הדגל -בסיום הטיפול בפסיקה, לפני החזרה לUser Mode בודקים ,

אם צריך להחליף הקשר באופן דומה, גם הבדיקה אם לתהליך הגיעsignal מתבצעת

User Modeרק לפני החזרה ל-

Page 35: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 35(c) 2003 ארז חדד

(1סיום טיפול בפסיקות )

כשטיפול בפסיקה מסתיים, יש כאמור לשחזר את ערכיולחזור לתהליך שבזמן iret הרגיסטרים מלפני הפסיקה, לבצע

פעילותו התרחשה הפסיקהאבל, לפני כן, יש לבצע מספר בדיקות

האם הפסיקה מקוננת – אם כן, לא מבצעים את הבדיקות הבאות ומסיימים-האם צריך להחליף הקשר – אם כן, קוראים לschedule)( האם ישsignals פונקציה( ממתינים - יש לטפל בהם תחילה do_signal)()

:סוף שגרת הטיפול הוא בקריאה לקוד הבא-ל ret_from_exceptionעבור סיום טיפול בחריגה --לret_from_intrעבור סיום טיפול בפסיקת חומרה – -לret_from_sys_callעבור סיום טיפול בקריאת מערכת –

שגרות סיום אלו מבצעות את הבדיקות הנחוצות, ורק אז קוראות לסיום, כמתואר בתרשים בשקף הבאRESTORE_ALLל-

Page 36: מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux

מערכות הפעלה - תרגול 9 36(c) 2003 ארז חדד

(2סיום טיפול בפסיקות )ret_from_exception:

?פסיקה מקוננת

RESTORE_ALL

האם יש צורך?להחליף הקשר

ret_from_intr: ret_from_sys_call:

schedule)(

signals האם יש ?ממתינים

do_signal)(

כן

לא

כן

כן

לא

לא


Recommended