1. ما المقصود بالنهيار نظام التشغيل أو انهيار العملية (crash)؟
الموضوع بسيط لكنه أعقد من الي نتصوره ومرتبط بالمعالج ثم نظام التشغيل، رايح أتكلم هنا عن x86 و Linux، كل المعالجات وأنظمة التشغيل تتشابه، فقط اختلاف في التفاصيل الصغيرة ولا مجال لتغطيتها…
2. أثناء تنفذ المعالج لكود قد يحصل استثناء exception مثل:
- وصول خاطئ للذاكرة، مثل الكتابة لذاكرة للقراءة فقط، أو تنفيذ كود في ذاكرة غير قابلة للتنفيذ، أو الوصول لذاكرة unmapped أو misaligned
- تنفيذ تعليمة خاطئة
- القسمة على الصفر
- استثناءات الـ FPU …
3. ليست كل الاستثناءات أخطاء، قد تكون فشل في الهاردوير (فشل في الذاكرة، أو اللوحة الأم، أو المعالج كارتفاع حرارته).
بعضها تحصل طبيعياً، مثل الـ page fault عندما تكون الذاكرة swapped، هنا يقوم نظام التشغيل بعمل swap-in لها من القرص الصلب للذاكرة الفيزيائية ويكمل البرنامج تنفيذه…
4. الآلية التي يتعامل معها المعالج مع الاستثناءات نفسها التي يستخدمها للمقاطعات interrupts.
معظم المعالجات تستخدم مايسمى عادةً بالـ IVT اختصاراً لـ interrupt vector table، وهو مجرد جدول يضع فيه نظام التشغيل عناوين الدوال التي سيستدعيها المعالج عند حدوث مقاطعة من نوع محدد…
5. في x86 يسمى ذلك الجدول بالـ IDT اختصار لـ Interrupt Descriptor Table، وهو جدول (مصفوفة) فيها عناوين دوال التعامل مع المقاطعات، يتم إخبار المعالج عن حجم وعنوان جدول الـ IDT باستخدام التعليمة lidt، وهي privileged instruction لا يستطيع المستخدم تنفيذها…
https://t.co/ExnI89JCpu