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

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
טבלאות סמלים נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
מערכות הפעלה תרגול 5 – תהליכים ב-Linux (3). מערכות הפעלה - תרגול 52 (c) ארז חדד 2003 תוכן התרגול החלפת הקשר (context switch) ב-Linux יצירת תהליך חדש ב-Linux.
מערכות הפעלה תרגול 4 – החלפת הקשר (context switch)
מערכות הפעלה תרגול 10 – מבוא למנהלי התקנים ב-Linux Linux Device Drivers, 2 nd Edition Alessandro Rubini & Jonathan Corbet O’Reilly
מערכות הפעלה תרגול 7 – ק/פ ותקשורת תהליכים ב-Linux.
דוד שוורץ, עידן זק, נטע צור וחיה כהן. הפונקציונאליות : המשתמש יבחר קובץ שעליו הוא רוצה לבצע את האנליזה, וילחץ עליו עם כפתור ימני בעכבר. יפתח תפריט ובו.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
מערכות הפעלה תרגול 5 – תהליכים ב-Linux (3). מערכות הפעלה - תרגול 52 (c) ארז חדד 2003 תוכן התרגול החלפת הקשר (context switch) ב-Linux יצירת תהליך חדש ב-Linux.
מערכות הפעלה תרגול 7 – ק/פ ותקשורת תהליכים ב-Linux.
הפרעות ופסיקות (exceptions & interrupts) מבוסס ברובו על פרק 8 ב Computer Systems / Bryant & O’Hallaron.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 פסיקות  סוגי פסיקות  איך מערכת ההפעלה מטפלת בפסיקות  דוגמא : קלט בעזרת פסיקות.
מערכות הפעלה קורס מס ' מבוא  אדמיניסטרציה.  מהי מערכת הפעלה.  ארגון מערכות הפעלה.
מערכות הפעלה תרגול 3 – תהליכים ב-Linux (1). מערכות הפעלה - תרגול 32 (c) ארז חדד 2003 תוכן התרגול מבוא לתהליכים ב-Linux API לעבודה עם תהליכים מבוא לניהול.
מערכות הפעלה תרגול 10 – זיכרון וירטואלי ב- Linux.
הגנה במערכות מתוכנתות תרגול 1 – המחשב האישי הערה: שקפים אלה אינם מהווים תחליף לחומר התרגולים המפורסם באתר הקורס, ומשמשים כעזר הוראה בלבד.
מערכות הפעלה תרגול 6 – חוטים ב-Linux.
מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux פסיקות ב-IA32:  סוגי הפסיקות  טבלת.
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 מערכות הפעלה קורס מס '
מערכות הפעלה תרגול 3 – תהליכים ב-Linux (1). מערכות הפעלה - תרגול 32 (c) ארז חדד 2003 תוכן התרגול מבוא לתהליכים ב-Linux API לעבודה עם תהליכים מבוא לניהול.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux פסיקות ב-IA32:  סוגי הפסיקות  טבלת.
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 מערכות הפעלה קורס מס '
A. Frank File Organization Indexed-Sequential File Introduction Thanks to Tamar Barnes.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
מערכות הפעלה תרגול 2 – קריאות מערכת ב-Linux. מערכות הפעלה - תרגול 22 (c) ארז חדד 2003 תוכן התרגול קריאה לפונקציות ב-Linux קריאה לשירותי מערכת ב-Linux.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מערכות הפעלה תרגול 6 – חוטים ב-Linux. מערכות הפעלה - תרגול 62 (c) ארז חדד 2003 תוכן התרגול מבוא לחוטים ב-Linux כיצד גרעין Linux תומך בחוטים עבודה עם חוטים.
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
Multi-Cycle MIPS דוגמאות. דוגמה 1 נתון קטע הקוד הבא: begin:addi $v0, $zero, -1 loop:add $a0, $a0, $a0 addi$v0,$v0,1 bne $a0, $zero, loop הניחו כי בתחילת.
מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך.
מערכות הפעלה תרגול 1 - מבוא. מערכות הפעלה - תרגול 12 (c) ארז חדד 2003 ברוכים הבאים לקורס מערכות הפעלה! אדמיניסטרציה סקירה בסיסית של ארכיטקטורת IA32 (80386+)
אביב 2004 מערכות הפעלה מערכות הפעלה קורס מס '
מערכות הפעלה תרגול 6 – חוטים ב-Linux. מערכות הפעלה - תרגול 62 (c) ארז חדד 2003 תוכן התרגול סינכרוניזציה בגרעין של Linux מבוא לחוטים ב-Linux כיצד גרעין.
מערכות הפעלה תרגול 2 - הכרת Linux. מערכות הפעלה - תרגול 22 (c) ארז חדד 2003 תוכן התרגול הדגמה מעשית:  כיצד לקבל עזרה בעבודה ב-Linux  כתיבת תכנית ראשונה.
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
עקרון ההכלה וההדחה.
יחס סדר חלקי.
מערכות הפעלה תרגול 8 – סינכרוניזציה ב-Linux. מערכות הפעלה - תרגול 82 (c) ארז חדד 2003 תוכן התרגול מבוא לסינכרוניזציה ב-Linux סנכרון בין חוטי POSIX  mutex.
מערכות הפעלה תרגול 1 - מבוא. מערכות הפעלה - תרגול 12 (c) ארז חדד 2003 ברוכים הבאים לקורס מערכות הפעלה! אדמיניסטרציה סקירה בסיסית של ארכיטקטורת IA32 (80386+)
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
מערכות הפעלה תרגול 1 - מבוא. מערכות הפעלה - תרגול 12 (c) ארז חדד 2003 ברוכים הבאים לקורס מערכות הפעלה! אדמיניסטרציה סקירה בסיסית של ארכיטקטורת IA32 (80386+)
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
1 Spring Semester 2007, Dept. of Computer Science, Technion Internet Networking recitation #3 Internet Control Message Protocol (ICMP)
מערכות הפעלה תרגול 10 – מבוא למנהלי התקנים ב-Linux Linux Device Drivers, 2 nd Edition Alessandro Rubini & Jonathan Corbet O’Reilly
1 ׃1998 Morgan Kaufmann Publishers פקודת ה- jump 4 bits 26 bits 2 bits 00 : כתובת קפיצה במילים : כתובת קפיצה בבתים … …
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
1 CE6105 Linux 作業系統 Linux Operating System 許 富 皓.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
עקרונות תכנות מונחה עצמים תרגול 11: OOP in C++. Outline  Where do the objects live ?  Inheritance  Slicing  Overriding vs Shadowing.
Lecture 7 Interrupt ,Trap and System Call
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 5 תרשימי מצבים Statecharts למחלקות תגובתיות Reactive Classes הקדמה ודוגמא.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Computer Architecture and Assembly Language
SQL בסיסי – הגדרה אינדוקטיבית
תרגול 5 – מימוש זמן תהליכים
עבודה עם נתונים באמצעות ADO.NET
מערכות הפעלה תרגול9 – פסיקות ב-Linux.
תרגול 2 – קריאות מערכת ב-Linux
תרגול 12 – ניהול זיכרון ב-Linux: המשך
תהליכים-דייאט: חוטים מוטיבציה חוטי משתמש וחוטי מערכת
Shell Scripts בסביבת UNIX
Computer Architecture and Assembly Language
Presentation transcript:

מערכות הפעלה תרגול 9 – פסיקות ב-Linux

מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux פסיקות ב-IA32:  סוגי הפסיקות  טבלת הפסיקות (IDT)  טיפול בפסיקות אתחול ה-IDT ב-Linux טיפול בפסיקות ב-Linux:  טיפול בחריגות  טיפול בפסיקות חומרה  משימות ממתינות  סיום הטיפול

מערכות הפעלה - תרגול 93 (c) ארז חדד 2003 מבוא לפסיקות ב-Linux (1) פסיקה היא אות חשמלי הנשלח למעבד לציון אירוע הדורש את טיפולו המיידי גורם למעבד להפסיק לבצע את הקוד הנוכחי ולעבור לבצע קוד מיוחד לטיפול בפסיקה  בהרצאה קוד הטיפול בפסיקה נקראInterrupt Service Routine.  ב-Linux יש למונח זה משמעות אחרת, כפי שנראה בהמשך. התקני חומרה שולחים פסיקות למעבד כדי לקבל טיפול  לדוגמה: לחיצת מקש במקלדת גורמת למקלדת לשלוח פסיקה למעבד על-מנת שיקרא את המידע על המקש שנלחץ

מערכות הפעלה - תרגול 94 (c) ארז חדד 2003 מבוא לפסיקות ב-Linux (2) המעבד יכול לשלוח לעצמו פסיקות כתוצאה מביצוע קוד כדי לדווח על תקלה בביצוע או בכוונה כדרך לביצוע של הקוד המיועד לטיפול בפסיקה  לדוגמה: פקודת חלוקה ב-0 גורמת לפסיקה  במערכות IA32 יש 256 סוגי פסיקות ממוספרים מספר הפסיקה נקרא גם וקטור הפסיקה (interrupt vector) במערכת מרובת מעבדים, מעבדים שולחים פסיקות זה לזה כאמצעי תקשורת  למשל לצורך חלוקת תהליכים ביניהם

מערכות הפעלה - תרגול 95 (c) ארז חדד 2003 מבוא לפסיקות ב-Linux (3) המעבד בודק אם יש פסיקות ממתינות לטיפול בין ביצוע של כל שתי הוראות עוקבות בקוד  פסיקה אינה קוטעת ביצוע של הוראת מכונה בסיסית לאחר סיום הטיפול בפסיקה, המעבד יכול להמשיך בביצוע הקוד המקורי (כתובת החזרה נשמרת לפני הקפיצה לשגרת הטיפול) פסיקה יכולה להשלח למעבד באופן אסינכרוני, בלי קשר למצב המעבד כרגע  קינון ( nesting )- פסיקות עשויות להגיע בזמן שהמעבד מטפל בפסיקה קודמת במערכת מרובת מעבדים, מספר מעבדים יכולים לטפל בפסיקות שונות בו-זמנית

מערכות הפעלה - תרגול 96 (c) ארז חדד 2003 מבוא לפסיקות ב-Linux (4) הטיפול בפסיקות ב-Linux הוא בתחום אחריותו של הגרעין בלבד  בתגובה על פסיקה מבוצע מסלול בקרה בגרעין (Kernel Control Path)  הגרעין חייב לסנכרן את הגישה למבני הנתונים שלו כדי להגן עליהם מפני מסלולי בקרה מקוננים או מקבילים (במעבדים שונים) פסיקה מטופלת תמיד בהקשר הביצוע של התהליך הנוכחי  גם אם לתהליך אין קשר לפסיקה שקרתה טיפול בפסיקה מצריך מעבר ל-Kernel Mode כולל החלפת מחסניות לפי הצורך עבור התהליך הנוכחי  בפסיקה מקוננת אין החלפת מחסניות כי המעבד כבר נמצא ב-Kernel Mode

מערכות הפעלה - תרגול 97 (c) ארז חדד 2003 פסיקות ב-IA32: Interrupts נשלחות אל המעבד באופן אסינכרוני ע"י התקני חומרה חיצוניים חלקן ניתנות לחסימה (masking) ע"י דגל ה-Interrupt Flag (IF), ברגיסטר הדגלים  פסיקה חסומה אינה מטופלת עד שהחסימה מוסרת  פקודות המכונה cli ו-sti חוסמות ומסירות את החסימה ע"י כיבוי והדלקת הדגל IF  במהלך טיפול בפסיקת חומרה מבוצעת חסימה באופן אוטומטי פסיקות מסוימות לא ניתנות לחסימה  נקראות NMI – Non-Maskable Interrupts  משמשות לדיווח על בעיות חומרה קריטיות, כגון נפילת מתח

מערכות הפעלה - תרגול 98 (c) ארז חדד 2003 פסיקות ב-IA32: Interrupts (2) מועברות אל המעבד באמצעות בקר פסיקות מתוכנת נפרד לכל מעבד ( [Advanced] Programmable Interrupt Controller – [A]PIC ) מעבד APIC שעון דיסק IRQ0 IRQ7 כרטיס קול מדפסת IRQ11

מערכות הפעלה - תרגול 99 (c) ארז חדד 2003 פסיקות ב-IA32: Interrupts (3) כל התקן חומרה המבקש לשלוח פסיקה שולח אות IRQ (Interrupt ReQuest) לאחד מקווי הכניסה של בקר הפסיקות אליו ההתקן מחובר  ישנם קווי כניסה ממוספרים IRQ0-IRQ15/IRQ23  אפשר לחבר כמה התקנים לאותו קו (IRQ Sharing)  טיפול בפסיקת חומרה מחייב בדיקת כל ההתקנים שיכלו לגרום לה כאשר בקר הפסיקות מבחין בבקשה מהתקן חומרה, הוא מעביר אות פסיקה למעבד אליו הוא מחובר  מספר הפסיקה הנוצרת עבור קו IRQn ניתן לבחירה.  בדרך כלל, n+32

מערכות הפעלה - תרגול 910 (c) ארז חדד 2003 פסיקות ב-IA32: exceptions פסיקות סינכרוניות (חריגות), אשר נוצרות ע"י המעבד כתוצאה מביצוע הוראה אחרונה בקוד ולא ע"י רכיבים חיצוניים  אינן תלויות בדגל הפסיקות שלושה סוגים של חריגות: 1. Faults – מציינות תקלות הניתנות לתיקון בביצוע ההוראה האחרונה בקוד דוגמה: חלוקה ב-0 כתובת החזרה בסיום הטיפול היא זו של ההוראה שגרמה את התקלה, כדי לבצע אותה מחדש 2. Traps – נגרמות באופן מכוון ע"י ההוראה האחרונה בקוד, כדי להפעיל את קוד הטיפול בפסיקה משמש בד"כ בהקשר של debuggers, למשל למימוש breakpoint כתובת החזרה בסיום הטיפול היא זו שאחרי ההוראה שגרמה ל-trap 3. Aborts – מציינות תקלות חמורות בביצוע ההוראה האחרונה בקוד דוגמה: מנגנון בדיקה אוטומטי של הזיכרון יכול לייצר חריגה מסוג Machine Check בעקבות גילוי שיבוש בתכולת הזיכרון

מערכות הפעלה - תרגול 911 (c) ארז חדד 2003 programmed exceptions חריגות מתוכנתות ( programmed exceptions ) או פסיקות תוכנה ( software interrupts ) הן סוג של traps המשמשות לביצוע קריאות מערכת  כפי שכבר ראינו בתרגולים קודמים  כזכור, ב-Linux ההוראה int 0x80 משמשת לקריאות מערכת

מערכות הפעלה - תרגול 912 (c) ארז חדד 2003 Interrupt Descriptor Table (1) הקישור ב-IA32 בין וקטור פסיקה לשגרת הטיפול בפסיקה מבוצע דרך טבלה הקרויה Interrupt Descriptor Table (IDT) רגיסטר מיוחד, idtr, מצביע לטבלת ה-IDT  נטען ע"י מערכת ההפעלה בזמן האתחול, בפקודת מכונה lidt ב-IDT יש רשומה עבור כל וקטור פסיקה  סה"כ 256 רשומות  כל רשומה בגודל 8 בתים  כל רשומה נקראת interrupt descriptor

מערכות הפעלה - תרגול 913 (c) ארז חדד 2003 Interrupt Descriptor Table (2) רשומה מכילה: 1. ציון סוג הרשומה 2. כתובת שגרת הטיפול (segment:offset) 3. DPL– ערך CPL מקסימלי להרצת שגרת הטיפול 1. קוד המשתמש יוכל לגרום לפסיקות מסוימות (קריאות מערכת, debugging), באמצעות פסיקות תוכנה 2. אבל לא פסיקות אחרות (כגון טיפול בדיסק) 3 סוגי רשומות ב-IDT: 1. Interrupt Gate: לפסיקות חומרה  דגל ה-IF מכובה אוטומטית בגישה לטיפול דרך רשומה זו 2. Trap Gate: לחריגות  אין שינוי ב-IF בגישה לטיפול בפסיקה דרך רשומה זו 3. Task Gate: מגדיר תהליך שיזומן לטיפול בפסיקה  סוג זה אינו בשימוש ב-Linux, כי הגרעין מטפל בפסיקות

מערכות הפעלה - תרגול 914 (c) ארז חדד 2003 דוגמאות של רשומות בטבלת ה-IDT DPLכתובת שגרת הטיפול seg:offs סוג הרשומה (gate) כניסה 0divide_errortrap0 3int3trap3 0general_protectiontrap13 0timerinterrupt32 0diskinterrupt43 3system_calltrap128 להפעלה מקוד משתמש לא להפעלה מקוד משתמש

מערכות הפעלה - תרגול 915 (c) ארז חדד 2003 אתחול ה-IDT ב-Linux (1) טבלת ה-IDT מאותחלת במקור ע"י ה-BIOS Linux מחליפה את כל הטבלה, בזמן הטעינה. ראשית, מופעלת הפונקציה setup_idt() המאתחלת את כל הרשומות בטבלה לערכי ברירת מחדל הבאים:  Interrupt Gate  כתובת השגרה ignore_int() שגרה זו מדפיסה הודעת "Unknown Interrupt" על המסך בתגובה לפסיקה – לא אמורה להיות מופעלת לעולם (אחרת באג או בעית חומרה)  DPL=0 setup_idt() ו-ignore_int() מוגדרות באסמבלר בקובץ הגרעין arch/i386/kernel/head.S לאחר האתחול, מעבר נוסף על ה-IDT מעדכן את הכניסות המתאימות לטיפול בחריגות ובפסיקות מהחומרה המותקנת  במהלך פעולת המערכת ייתכן עדכון נוסף של הטבלה עקב התקנת drivers

מערכות הפעלה - תרגול 916 (c) ארז חדד 2003 אתחול ה-IDT ב-Linux (2) עדכון כניסה משתמש באחת הפונקציות הבאות, המוגדרות בקובץ הגרעין 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  משמשת לטיפול בחריגות

מערכות הפעלה - תרגול 917 (c) ארז חדד 2003 אתחול ה-IDT ב-Linux (3) הפונקציה 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);

מערכות הפעלה - תרגול 918 (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 לסיום הטיפול

מערכות הפעלה - תרגול 919 (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 זה.

מערכות הפעלה - תרגול 920 (c) ארז חדד 2003 טיפול בפסיקות חומרה ב-Linux כל כניסה של פסיקת חומרה מצביעה לקוד מהצורה הבאה: IRQn_interrupt: pushl $n-256 call common_interrupt הטיפול בכל פסיקות החומרה עובר דרך מנגנון מרכזי אחד המתחיל ב-common_interrupt, כאשר האבחנה בין הפסיקות היא באמצעות הערך הנשמר במחסנית מיד בתחילת שגרת הפסיקה השגרה common_interrupt: common_interrupt: SAVE_ALL/* save registers */ call do_IRQ/* handle interrupt */ jmp ret_from_intr/* resume execution */

מערכות הפעלה - תרגול 921 (c) ארז חדד 2003 הפונקציה do_IRQ() הפונקציה do_IRQ(), הכתובה ב-C, מבצעת את הטיפול בפסיקה ברמת תפעול ה-APIC וקוראת לפונקציה handle_IRQ_event() להפעלת ה-ISRs  קובץ גרעין arch/i386/kernel/irq.c  do_IRQ() מוגדרת כדלקמן: unsigned int do_IRQ(struct pt_regs regs); הפרמטר regs מאפשר לפונקציה לגשת לרגיסטרים השמורים במחסנית, ובפרט גם לערך הבקרה המכיל את מספר הפסיקה (השדה הקרוי orig_eax) הערך המוחזר אינו בשימוש מתוך common_interrupt טיפול בפסיקות חומרה ב-Linux

מערכות הפעלה - תרגול 922 (c) ארז חדד 2003 טיפול ב-APIC כאשר קורית פסיקת חומרה, ה-APIC מודיע על הפסיקה למעבד "ננעל" ואינו מודיע על פסיקות נוספות עד שיקבל אישור מהמעבד טכניקה מקובלת (ובפרט ב-Linux) לטיפול ב-APIC בפסיקת חומרה היא לשלוח לו בהקדם אישור להודיע על פסיקות חדשות פרט לכאלה מהסוג המטופל כרגע  באופן זה, ברגע שיאופשרו פסיקות במעבד, ניתן יהיה לטפל "במקביל" (מסלולי בקרה אחרים) בפסיקות חומרה נוספות  מצד שני, נמנע re-entrancy לקוד הטיפול באותו סוג פסיקה בסיום הטיפול בפסיקה, יש לאפשר ל-APIC להודיע גם על פסיקה מהסוג שטופל טיפול בפסיקות חומרה ב-Linux

מערכות הפעלה - תרגול 923 (c) ארז חדד 2003 הפונקציה do_IRQ() (2) סדר הפעולות של do_IRQ():  שליפת סוג הפסיקה המטופלת  שליחת אישור סלקטיבי ל-APIC  הפעלת שגרות טיפול בפסיקה ע"י handle_IRQ_event(…) ISR – Interrupt Service Routine (פרטים בהמשך)  אפשור סוג הפסיקה המטופלת ב-APIC  ביצוע משימות ממתינות (פרטים בהמשך) טיפול בפסיקות חומרה ב-Linux

מערכות הפעלה - תרגול 924 (c) ארז חדד 2003 הפעלת ה-ISRs (1) כל ISR מיועד בדרך-כלל לטפל בהתקן מסוים בתגובה לפסיקת חומרה מסוימת:  ISR עבור המקלדת קורא את קוד המקש שנלחץ  ISR עבור כרטיס הרשת קורא נתונים שהתקבלו מהרשת אחד הפרמטרים ש-Handle_IRQ_event() מקבלת הוא רשימה מקושרת של ISRs עבור טיפול בפסיקה שהתקבלה.  לכל אחד מה-ISRs מצוינים דגלים לגבי אופן פעולתו השגרה handle_IRQ_event() מפעילה את כל ה-ISRs הרשומים עבור הפסיקה הנוכחית בזה אחר זה.  בדיקת כל ההתקנים שיכלו לגרום לפסיקה טיפול בפסיקות חומרה ב-Linux

מערכות הפעלה - תרגול 925 (c) ארז חדד 2003 הפעלת ה-ISRs (2) הפונקציה handle_IRQ_event() מבצעת בעיקר:  מאפשרת פסיקות במעבד אלא אם מוגדר שלא בדגל SA_INTERRUPT בודקת רק את הדגלים של ה-ISR הראשון בשרשרת  מפעילה את ה-ISRs שבשרשרת בזה אחר זה  חוסמת את הפסיקות מחדש בסיום טיפול בפסיקות חומרה ב-Linux

מערכות הפעלה - תרגול 926 (c) ארז חדד 2003 חלוקת הטיפול בפסיקות חומרה טיפול בפסיקות חומרה מסוימות עשויות לדרוש זמן רב כזכור, הפסיקות במעבד חסומות (IF כבוי) בתחילת הטיפול בפסיקת חומרה ביצוע שגרת טיפול במלואה בפסיקות חסומות עלול לגרום לעיכוב הטיפול בפסיקות אחרות  פגיעה בביצועים  אובדן פסיקות ואובדן נתונים אפשרי (למשל: הקשות מקלדת) לכן, מנסים לצמצם למינימום את הפעילות הנעשית בפסיקות חסומות

מערכות הפעלה - תרגול 927 (c) ארז חדד 2003 דרגות דחיפות בטיפול בפסיקות חומרה 1. critical: פעולות שהכרחי לבצען בפסיקות חסומות–פעולות אלו מתבצעות במהירות  דוגמא: עבודה עם ה-APIC  דוגמא: ה-ISR של השעון קורא ומסנכרן ערכי שעוני חומרה במחשב בסדרות של פעולות. פסיקה שתקרה במהלך ה-ISR עלולה ליצור עיכוב שישבש ערכי השעון או יגרום לשני שעונים לצאת מסנכרון 2. noncritical: פעולות שיש לבצען מיד במסגרת הפסיקה, אך אין צורך בחסימת הפסיקות  דוגמא: העתקת קוד המקש שנלחץ לחוצץ של מערכת ההפעלה ב-ISR של המקלדת: חייב להתבצע במסגרת הפסיקה הנוכחית (כדי לא לאבד את ההקשה הנוכחית) אבל אינו מצריך חסימת פסיקות 3. noncritical deferred: משימות שיש צורך לבצען בעקבות הפסיקה, אך לא באופן מיידי, אלא כשיסתיים הטיפול המיידי בפסיקה  דוגמא: העברת נתוני הקשות מקלדת שהצטברו בחוצץ מערכת ההפעלה לתהליך המפעיל את המסוף המתאים.  משימות אלה מוכנסות לַמאגר של משימות ממתינות (deferrable functions) לביצוע בעתיד

מערכות הפעלה - תרגול 928 (c) ארז חדד 2003 סוגי משימות ממתינות ב-Linux 1. Softirq: מנגנון בסיסי, מממש את הסוגים האחרים  פונקציה המתבצעת ב-softirq יכולה להיות מופעלת במקביל משני מעבדים שונים (re-entrant) 2. Tasklet: המנגנון המומלץ, לשימוש רגיל  קוד של tasklet מוגן מפני הפעלה במקביל ממעבדים שונים ולכן איננו צריך להיות re-entrant 3. Bottom Halves: tasklets בעדיפות גבוהה  כל ה-bottom halves מהווים קטע קריטי יחיד, כלומר, שני bottom halves (אפילו עם קוד שונה) לא מתבצעים במקביל ממעבדים שונים  פגיעה חמורה במקביליות המערכת – מנגנון שמיועד להעלם

מערכות הפעלה - תרגול 929 (c) ארז חדד 2003 ביצוע משימות ממתינות ב-Linux בכל מעבד יחיד, המשימות הממתינות מתבצעות באופן סדרתי  אף משימה חדשה לא מתחילה להתבצע לפני סיום הקודמת בודקים אם יש משימות ממתינות לביצוע בנקודות זמן שונות כגון:  בסיום do_IRQ() (כפי שראינו קודם)  כאשר מופעל חוט גרעין (kernel thread) מיוחד. חוט זה רץ בעדיפות נמוכה בכל מעבד ומבצע בלולאה אינסופית בדיקה של משימות ממתינות וקריאה ל- do_softirq() ניצול הזמן הפנוי בכל מעבד לטיפול במשימות ממתינות שם החוט: ksoftirqd_CPUn עבור מעבד מספר n  ניתן לראות חוט זה אם תבצעו פקודת "ps –ax"....

מערכות הפעלה - תרגול 930 (c) ארז חדד 2003 מחסנית הגרעין בטיפול בפסיקה (1) בשקף הבא מתואר מבנה מחסנית הגרעין בזמן טיפול בפסיקה כלשהי (חריגה או חומרה) ב-Linux סדר שמירת האיברים אחיד וקבוע בכל צורות הטיפול כל האיברים נשמרים כשדות של 32 ביט, כולל תכולת segment registers באופן זה ניתן ל"קפל" את מחסנית הגרעין באותה צורה בעת חזרה מטיפול בכל סוג פסיקה שהוא  קיפול המחסנית מבוצע ע"י המאקרו RESTORE_ALL, הנקרא מתוך קוד הסיום של כל שגרת טיפול בכל סוג פסיקה

מערכות הפעלה - תרגול 931 (c) ארז חדד 2003 חריגהפסיקת חומרהקריאת מערכתהאיבר במחסנית מצביע למחסנית התהליך ב-User Mode (אם התבצעה החלפת מחסניות) ss esp ערך רגיסטר הדגליםeflags כתובת חזרה לאחר הפסיקה cs eip hardware error code (או 0 אם אין) הופך ל: (-1) מספר הפסיקה פחות 256 מספר קריאת המערכת orig_eax ערכי הרגיסטרים מלפני הפסיקה כפי שנשמרו ע"י השגרה error_code ערכי הרגיסטרים מלפני הפסיקה כפי שנשמרו ע"י המאקרו SAVE_ALL (עבור קריאות מערכת, שדה eax מכיל בסיום את הערך המוחזר) es ds eax ebp edi esi edx ecx ebx

מערכות הפעלה - תרגול 932 (c) ארז חדד 2003 מחסנית הגרעין בטיפול בפסיקה (3) החלק הגבוה של המחסנית (שמירת ss:esp, eflags ו-cs:eip) נשמר באופן אוטומטי ע"י המעבד  ss:esp נשמר רק אם הטיפול בפסיקה כרוך בהחלפת מחסניות שאר האיברים מוכנסים למחסנית מייד בתחילת שגרת הפסיקה  תחילה נשמר האיבר הקרוי orig_eax, שהוא "שדה בקרה" המכיל מידע רלוונטי לפי סוג הטיפול, כמופיע בטבלה  בטיפול בפסיקת חומרה וקריאות מערכת, המאקרו SAVE_ALL שומר את ערכי שאר הרגיסטרים, כדי לשחזרם בסיום הפסיקה  בטיפול בחריגה, מבוצעת שמירת שאר ערכי הרגיסטרים ע"י השגרה error_code

מערכות הפעלה - תרגול 933 (c) ארז חדד 2003 מחסנית הגרעין בטיפול בפסיקה (4) המאקרו RESTORE_ALL: popl %ebx.. popl %es addl 4, %esp iret כל שגרת טיפול בפסיקה יכולה להוסיף איברים למחסנית מעבר למבנה זה במהלך פעולתה, אך היא מחויבת לקפל את האיברים הנוספים בעצמה לפני הקריאה ל- RESTORE_ALL  למשל: שגרת טיפול בחריגה מעבירה לשגרת הטיפול הפנימית שלה, הכתובה ב-C, פרמטרים במחסנית. פרמטרים אלו מקופלים בחזרה מהשגרה הפנימית לפני הקריאה ל-RESTORE_ALL קיפול ושחזור ערכי הרגיסטרים מלפני הפסיקה קיפול orig_eax קיפול שאר האיברים וחזרה

מערכות הפעלה - תרגול 934 (c) ארז חדד 2003 החלפת הקשר בזמן טיפול בפסיקות לעיתים, שגרת הטיפול בפסיקה מגיעה למסקנה שיש לבצע החלפת הקשר  למשל, טיפול בפסיקת שעון מגלה כי נגמר פרק הזמן המוקצב לתהליך  או אולי הפסיקה היא קריאת מערכת שמעבירה את התהליך למצב המתנה ב-Linux לא ניתן לבצע החלפת הקשר בזמן טיפול בפסיקה אסינכרונית במקום זאת, רק מסמנים כי נדרשת החלפת הקשר באמצעות הדלקת הדגל need_resched במתאר התהליך בסיום הטיפול בפסיקה, לפני החזרה ל-User Mode, בודקים אם צריך להחליף הקשר באופן דומה, גם הבדיקה אם לתהליך הגיע signal מתבצעת רק לפני החזרה ל-User Mode

מערכות הפעלה - תרגול 935 (c) ארז חדד 2003 סיום טיפול בפסיקות (1) כשטיפול בפסיקה מסתיים, יש כאמור לשחזר את ערכי הרגיסטרים מלפני הפסיקה, לבצע iret ולחזור לתהליך שבזמן פעילותו התרחשה הפסיקה אבל, לפני כן, יש לבצע מספר בדיקות  האם הפסיקה מקוננת – אם כן, לא מבצעים את הבדיקות הבאות ומסיימים  האם צריך להחליף הקשר – אם כן, קוראים ל-schedule()  האם יש signals ממתינים - יש לטפל בהם תחילה (פונקציה do_signal()) סוף שגרת הטיפול הוא בקריאה לקוד הבא:  ל- ret_from_exception- עבור סיום טיפול בחריגה  ל-ret_from_intr – עבור סיום טיפול בפסיקת חומרה  ל-ret_from_sys_call – עבור סיום טיפול בקריאת מערכת שגרות סיום אלו מבצעות את הבדיקות הנחוצות, ורק אז קוראות ל- RESTORE_ALL לסיום, כמתואר בתרשים בשקף הבא

מערכות הפעלה - תרגול 936 (c) ארז חדד 2003 סיום טיפול בפסיקות (2) ret_from_exception: פסיקה מקוננת? RESTORE_ALL האם יש צורך להחליף הקשר? ret_from_intr:ret_from_sys_call: schedule() האם יש signals ממתינים? do_signal() כן לא כן לא