מנגנון הפסיקות הוא מנגנון שמנוהל בד"כ ע"י חומרה ובא לתת מענה מהיר למצבים הגורמים לשנוי מצב הפעולה הרגיל של המערכת.
לדוגמא: אם כרגע ביקשתי לפנות לאיזשהוא קובץ ואותו מידע לא נמצא בזכרון התהליך שלי, אלא נמצא על הדיסק. במצב זה יגרם page fault (סוג של exception).
ישנם סוגים שונים של exceptions כמו חלוקה באפס או general failure ועוד.
והנה רשימה מסודרת יותר :0 Divide by zero
1 Single step
2 Non-maskable (NMI)
3 Breakpoint
4 Overflow trap
5 BOUND range exceeded (186,286,386)
6 Invalid opcode (186,286,386)
7 Coprocessor not available (286,386)
8 Double fault exception (286,386)
9 Coprocessor segment overrun (286,386)
A Invalid task state segment (286,386)
B Segment not present (286,386)
C Stack exception (286,386)
D General protection exception (286,386)
E Page fault (286,386)
F Reserved
10 Coprocessor error (286,386)
ועכשיו אחרי שאנחנו יודעים מה זה exceptions נלמד קצת על טבלה מיוחדת במעה"פ:
IDT - Interrupt Descriptor Table
זוהי הטבלה המכילה את כל הכתובות לשגרות הפסיקות. כלומר אם מתבצע page fault במערכת, המעבד הולך לטבלה זו, מוציא את הכתובת המתאימה עבור page fault exception ומתחיל לרוץ ממנה.
טבלה זו מאותחלת בזמן ההעלאה של מעה"פ שבעצם מכינה לחומרה את הכתובות של כל שגרות הפסיקות.חשבו כעת, מה היה קורה אם היינו יכולים לשנות כתובות בטבלה זו להצביע על קוד שלנו..נשמע נחמד לא?
kernel driver - לא להתבלבל עם device driver, זהו kernel driver
, סה"כ קטע קוד שרץ בהרשאות kernel.
מושגים חשובים נוספים שאם יש צורך תרשמו ואסביר עליהם:1) פעולת המחסנית - חשוב מאוד, אם אתם לא סגורים אוכל להעביר כמה דברים חשובים.
2) רגיסטרים במעבד, חשוב שתכירו את כל הרגיסטרים : eip, esp, ebp
3) נוהל קריאה לשגרה - ביצוע הפעולות ברגע שנקראת שגרה.
למנהל - הייתי שמח אם היית יכול לעגון את זה בבקשה.
זה מספיק לכרגע, אשמח לשמוע שאלות לבינתיים.