ماذا عن سجلات مبرمج "غير مرئية"؟
-
19-09-2019 - |
سؤال
هؤلاء هم "مبرمج مرئي" سجل X86-64:
(مصدر: usenix.org.)
ماذا عن السجلات غير المرئية؟ فقط تعلمت أن سجلات MMU، الجدول واصف المقاطعة (IDT) يستخدم السجلات غير المرئية هذه. أنا أتعلم هذه الأشياء بالطريقة الصعبة. هل هناك أي مورد (كتاب / وثائق / إلخ) التي تعطيني الصورة كاملة في وقت واحد؟
أنا على علم بسجلات مبرمجة مرئية ومريحة في البرمجة معها. أريد فقط أن أتعلم عن سجلات غير مرئية ووظائفها. أريد الحصول على صورة كاملة. أين يمكنني الحصول على هذه المعلومات؟
تعديل:
أريد الحصول على صورة كاملة. أين يمكنني الحصول على هذه المعلومات؟
هؤلاء هم الكتابان ساعدتان في فهم هذه التفاصيل منخفضة المستوى.
المحلول
IDT هو جدول واصف المقاطعة، والذي يحتوي على شيء من هذا القبيل من وجهة نظر مجردة، يتم حجز المقاطعات الثمانية عشر الأولى من قبل المعالج، ثمانية عشر المقبل مخصصة من قبل Intel للسيطرة على المستقبل بنية الرقاقة ...
معالج المقاطعة 0 divide_by_zero_handler 1 debug_handler .. ... 13 general_exception_handler 14 page_fault_handler .. ... 18 machine_check_handler
في هذا السياق، يعد المعالجون جزءا من لعبة Kernel لعبة، ويتم إعداد كل من المعالجين في وقت التمهيد، قبل تحميل رمز المستخدم المستخدم. (BIOS هو 16 بت رمز AKA رمز الوضع الحقيقي)، يقوم Kernel بإعداد المعالجات، والتحول إلى وضع محمي 32 بت، عند إصدار أي من المقاطعات، يتم تنفيذ المعالج المناسب حسب رقم المقاطعة. على سبيل المثال، إذا تم إنشاء المقاطعة 14، فسوف ينفذ النواة page_fault_handler
, ، تحقق من أن الصفحة قذرة وإقامة على القرص، ثم قم بتحميل تلك الصفحة في الذاكرة، وإصلاح العناوين واضحة القليل القذر، وينفذ IRET
تقاطع تعليمات العودة للمتابعة، وتخليص الأعلام ....
هذا هو منظر مجردة لكيفية عمل IDT ... هناك أشياء أكثر تعقيدا تسير وراء الكواليس ... اعتمادا على بنية ونوع إدارة الذاكرة مثل مخططات معالجة العملة / المسطحة / المحمية / الوضع الافتراضي ...
إلقاء نظرة هنا في شركة انتل الوثائق التي تعطي وجهة نظر ممتازة وشاملة لبرمجة إنتل ...
تعديل:مرة أخرى في الأيام الخوالي من DOS (والتي كانت رمز 16 بت وغير جيدة، بالضبط الذاكرة المحمية)، كان من الممكن إعادة توجيه معالجات المقاطعة إلى معالجاتك الخاصة وبالتالي تراكب IDT الأصلي، مثال على هذه المقاطعة، المقاطعة 9 أي مقاطعة لوحة المفاتيح (المقاطعات BIOS في هذا السياق) باستخدام getvect(...)
و setvect(...)
المكالمات، يمكنك أيضا التعامل مع بعض (وليس جميع المقاطعات المعالج، لا سيما، IDT 0 للقسمة على الصفر) ... على الرغم من أن مقاطعات BIOS كانت مشابهة تماما في مظهر المقاطعات المعالج، فقد شاركت ميزة مشتركة، كلاهما لديك جدول ناقلات المقاطعة (كما كان معروفا بعد ذلك). كان هذا هو كيف تمكنت TSR (إنهاء البقاء المقيمين) من الحفاظ على إعادة الدخول في DOS نتيجة لمقاطعات BIOS إعادة توجيهها إلى معالجات TSR ...
نصائح أخرى
ستحتاج إلى دراسة دليل مراجع المعالج لمعالج معين الذي تهتم به. إليك دليل مرجع معالج إيتانيوم.