علامة المقاطعة
علامة المقاطعة ( IF ) هي بتة في سجل FLAGS الخاص بوحدة المعالجة المركزية ، تُحدد ما إذا كانت وحدة المعالجة المركزية ستستجيب فورًا لمقاطعات الأجهزة القابلة للإخفاء أم لا . [ 1 ] إذا كانت العلامة مضبوطة على "صحيح"، فسيتم تفعيل المقاطعات القابلة للإخفاء. أما إذا كانت مضبوطة على "خطأ "، فسيتم تعطيل هذه المقاطعات حتى يتم تفعيلها مرة أخرى. لا تؤثر علامة المقاطعة على معالجة المقاطعات غير القابلة للإخفاء (NMIs) أو مقاطعات البرامج الناتجة عن تعليمة INT .10
الضبط والتنظيف
في نظام يستخدم بنية x86 ، تُستخدم التعليمات CLI ( مسح المقاطعة ) وSTI ( ضبط المقاطعة ) . تقوم التعليمات POPF ( سحب الأعلام ) بإزالة كلمة من المكدس إلى سجل FLAGS ، مما قد يؤدي إلى ضبط أو مسح علامة المقاطعة بناءً على البت الموجود في سجل FLAGS من أعلى المكدس. [ 1 ]
مستوى الامتياز
في الأنظمة التي تدعم الوضع المميز، لا يُسمح إلا للتطبيقات المميزة (عادةً نواة نظام التشغيل ) بتعديل علامة المقاطعة . في نظام x86 ، ينطبق هذا فقط على التعليمات البرمجية في الوضع المحمي ( بينما يُسمح للتعليمات البرمجية في الوضع الحقيقي بتعديل علامة المقاطعة دائمًا ). تُعدّ تعليمات CLI وSTI تعليمات مميزة، وتتسبب في خطأ حماية عام إذا حاول تطبيق غير مميز تنفيذها. لن تُعدّل تعليمة POPF علامة المقاطعة إذا كان التطبيق غير مميز.
برامج DOS القديمة
تستخدم بعض برامج DOS القديمة التي تعتمد على مُوسِّع DOS للوضع المحمي وتُثبِّت معالجات المقاطعات الخاصة بها (عادةً الألعاب) تعليمة CLI في المعالجات لتعطيل المقاطعات، ثم إما POPF (بعد تنفيذ PUSHF المقابل) أو IRET (التي تستعيد الرايات من المكدس كجزء من تأثيراتها) لاستعادتها. ينجح هذا الأسلوب إذا تم تشغيل البرنامج في الوضع الحقيقي، ولكنه يُسبب مشاكل عند تشغيل هذه البرامج في حاوية DPMI على أنظمة التشغيل الحديثة (مثل NTVDM في Windows NT أو الإصدارات الأحدث). نظرًا لأن CLI تعليمة ذات امتيازات، فإنها تُسبب خطأً في نظام التشغيل عندما يُحاول البرنامج استخدامها. عندها يتوقف نظام التشغيل عادةً عن إرسال المقاطعات إلى البرنامج حتى يُنفِّذ البرنامج STI (مما قد يُسبب خطأً آخر). مع ذلك، فإن تعليمة POPF ليست ذات امتيازات، وتفشل ببساطة في استعادة IF دون أي تنبيه. والنتيجة هي أن نظام التشغيل يتوقف عن إرسال المقاطعات إلى البرنامج، مما يؤدي إلى توقفه عن العمل. برامج DOS التي لا تستخدم موسع الوضع المحمي لا تعاني من هذه المشكلة، لأنها تعمل في وضع V86 حيث يؤدي POPF إلى حدوث خطأ.
لا توجد حلول مرضية كثيرة لهذه المشكلة. عادةً ما يكون من غير الممكن تعديل البرنامج، إذ لا يتوفر عادةً كود المصدر، ولا توجد مساحة كافية في مسار التعليمات لإدخال مقاطعة فرعية (STI) دون تعديلات واسعة النطاق على مستوى لغة التجميع. قد يؤدي حذف مقاطعات سطر الأوامر (CLI) من البرنامج أو جعل نظام V86 المضيف يتجاهلها تمامًا إلى ظهور أخطاء أخرى إذا لم تكن معالجات المقاطعات في النظام الضيف مصممة لتكون قابلة لإعادة الدخول (مع أنها عند تنفيذها على معالج حديث، تُنفذ عادةً بسرعة كافية لتجنب تداخل المقاطعات).
تعطيل المقاطعات
في مجموعة تعليمات x86، يُستخدم CLI عادةً كآلية تزامن في أنظمة المعالجات الأحادية. على سبيل المثال، يُستخدم CLI في أنظمة التشغيل لتعطيل المقاطعات حتى يتمكن كود النواة (عادةً برنامج تشغيل ) من تجنب حالات التزامن غير المتوقعة داخل معالج المقاطعة . وهذا ضروري عند تعديل هياكل بيانات متعددة مرتبطة دون انقطاع.
تمكين المقاطعات
تتيح خاصية STI في مجموعة تعليمات x86 إمكانية المقاطعات عن طريق ضبط IF.
في بعض تطبيقات التعليمات التي تُفعّل المقاطعات، لا تُفعّل المقاطعات إلا بعد تنفيذ التعليمات التالية. في هذه الحالة، يؤدي تسلسل تفعيل المقاطعات متبوعًا مباشرةً بتعطيلها إلى عدم التعرف على المقاطعات.
اعتبارات المعالجات المتعددة
لا يؤثر علم المقاطعة إلا على معالج واحد. في أنظمة المعالجات المتعددة، يجب على معالج المقاطعة استخدام آليات تزامن أخرى مثل الأقفال .
انظر أيضاً
مراجع
- 1 2 "دليل مطوري برامج معمارية إنتل، المجلد 2: دليل مرجعي لمجموعة التعليمات" (ملف PDF) . تم الاطلاع عليه بتاريخ 13-07-2007 .
روابط خارجية
- أدلة مطوري البرامج لبنيتي Intel 64 و IA-32 - تم الاطلاع عليها بتاريخ 14 سبتمبر 2017
- تعليمات X86
- المقاطعات
