פסיקות ב-XINU

במכונת ה-PC, כאשר מתרחשת פסיקה, המעבד דוחף באופן אוטומטי את FLAGS ואת CS:IP אל המחסנית. כאשר חוזרים מהפסיקה חוזרים בעזרת פקודה מיוחדת, האומרת למעבד לשלוף את שני ערכים אלו.

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

הפתרון של XINU: לנתח את הפסיקות בשני שלבים. כל הפסיקות יופנו לפונקציה קטנה באסמבלר, שתכונה משגר הפסיקות - "Interrupt Dispatcher". הפונקציה אחראית לשמירת ושחזור הרגיסטרים.

  • פונקצית האסמבלי המופעלת בעת הפסיקות והקוראת לפונקציות בשפת C הינה הפונקציה intcom.
  • על מנת לתמוך בקריאה לפונקציות המקוריות, נשמור מידע עבור כל אחת מהפסיקות בטבלה, בה קיים עבור כל פסיקה דגל האומר האם לקרוא לקוד ה-ROM-BIOS או לא.

תגיות המסמך:

מאת: באסל

תודה

הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.
שיתוף:
| עוד