معالج المقاطعة

في برمجة أنظمة الحاسوب ، يُعد معالج المقاطعة ، المعروف أيضًا باسم روتين خدمة المقاطعة ( ISR )، كتلة برمجية خاصة مرتبطة بحالة مقاطعة محددة . يتم تفعيل معالجات المقاطعة بواسطة مقاطعات الأجهزة، أو تعليمات مقاطعة البرامج ، أو استثناءات البرامج ، وتُستخدم لتنفيذ برامج تشغيل الأجهزة أو الانتقالات بين أوضاع التشغيل المحمية، مثل استدعاءات النظام .

يُعدّ معالج المقاطعات المادية الشكل التقليدي لمعالج المقاطعات. تنشأ المقاطعات المادية من إشارة كهربائية. وتختلف تفاصيل معالجة المقاطعات باختلاف المكونات المادية، ولكن بشكل عام، يُوقف المعالج المركزي تنفيذ مهمته الحالية مؤقتًا، ويحفظ عداد البرنامج الحالي (وأحيانًا المؤشرات) في المكدس، ويُحدّث عداد البرنامج إلى عنوان الروتين المسؤول عن معالجة المقاطعة. بعد ذلك، يجب على روتين معالجة المقاطعة حفظ أي سجلات قد يُجري عليها تغييرات. عمومًا، تُستخدم المقاطعات المادية ومعالجاتها للتعامل مع الحالات ذات الأولوية العالية التي تتطلب مقاطعة تنفيذ التعليمات البرمجية الحالية للمعالج . [ 1 ] [ 2 ]

من الملائم للبرمجيات أن تكون قادرة على تشغيل نفس الآلية: مقاطعة البرمجيات. وبدلاً من استخدام جدول توزيع المقاطعات المبرمج مسبقًا على مستوى الأجهزة، غالبًا ما يتم تنفيذ مقاطعات البرمجيات على مستوى نظام التشغيل كشكل من أشكال دالة الاستدعاء .

تتعدد وظائف معالجات المقاطعات، وتختلف هذه الوظائف باختلاف سبب حدوث المقاطعة وسرعة إنجاز معالج المقاطعة لمهمته. على سبيل المثال، يؤدي الضغط على مفتاح في لوحة مفاتيح الحاسوب ، [ 1 ] أو تحريك الفأرة ، إلى حدوث مقاطعات تستدعي معالجات المقاطعات التي تقرأ المفتاح، أو موضع الفأرة، وتنسخ المعلومات المرتبطة به إلى ذاكرة الحاسوب. [ 2 ]

معالج المقاطعة هو نظير منخفض المستوى لمعالجات الأحداث . ومع ذلك، فإن معالجات المقاطعة لها سياق تنفيذ غير عادي، والعديد من القيود الصارمة في الوقت والمساحة، وطبيعتها غير المتزامنة تجعل من الصعب للغاية تصحيح أخطائها وفقًا للممارسات القياسية (لا توجد حالات اختبار قابلة للتكرار بشكل عام)، مما يتطلب مجموعة مهارات متخصصة - وهي مجموعة فرعية مهمة من برمجة النظام - من مهندسي البرمجيات الذين يعملون على مستوى مقاطعة الأجهزة.

المقاطعات المتداخلة

أثناء تنفيذ روتين خدمة المقاطعة، قد تحدث مقاطعة أخرى. وتعتمد كيفية التعامل مع هذه المقاطعة الثانية على مكونات الجهاز. بشكل عام، يقرر المطور ما إذا كان سيسمح بمقاطعة روتين خدمة المقاطعة الحالي لمعالجة مقاطعة ذات أولوية أعلى أم لا. في حال السماح بذلك، سيتم حفظ عداد البرنامج الحالي (وأحيانًا العلامات) في المكدس قبل كتابة عنوان روتين خدمة المقاطعة ذي الأولوية الأعلى إلى عداد البرنامج. يجب على روتين خدمة المقاطعة ذي الأولوية الأعلى حفظ أي سجلات قد يقوم بتعديلها. عند اكتمال روتين خدمة المقاطعة ذي الأولوية الأعلى، سيتم إخراج عنوان وحالة روتين خدمة المقاطعة ذي الأولوية الأقل من المكدس، وسيستمر تنفيذ روتين خدمة المقاطعة ذي الأولوية الأقل.

أعلام المقاطعة

بخلاف معالجات الأحداث الأخرى، من المتوقع أن تقوم معالجات المقاطعات بتعيين علامات المقاطعة إلى القيم المناسبة كجزء من وظائفها الأساسية.

حتى في وحدة المعالجة المركزية التي تدعم المقاطعات المتداخلة، غالبًا ما يتم الوصول إلى معالج المقاطعة بعد أن تكون جميع المقاطعات معطلة بشكل عام بواسطة عملية عتادية في وحدة المعالجة المركزية. في هذا التصميم، يقوم معالج المقاطعة عادةً بحفظ أقل قدر ممكن من السياق اللازم، ثم يعيد ضبط علامة تعطيل المقاطعة العامة عند أول فرصة، للسماح للمقاطعات ذات الأولوية الأعلى بمقاطعة المعالج الحالي. من المهم أيضًا أن يقوم معالج المقاطعة بكبح مصدر المقاطعة الحالي بطريقة ما (غالبًا عن طريق تبديل بت علامة ما في سجل طرفي) حتى لا تتكرر المقاطعة الحالية فورًا عند الخروج من المعالج، مما يؤدي إلى حلقة لا نهائية.

قد يكون إنهاء معالج المقاطعة مع الحفاظ على نظام المقاطعة في الحالة الصحيحة تمامًا في جميع الظروف مهمة شاقة ودقيقة، وسوء التعامل معه هو مصدر العديد من الأخطاء الخطيرة التي قد توقف النظام تمامًا. تكون هذه الأخطاء أحيانًا متقطعة، حيث لا تظهر الحالة الحدية التي تم التعامل معها بشكل خاطئ إلا بعد أسابيع أو شهور من التشغيل المتواصل. يُعد التحقق الرسمي من معالجات المقاطعة أمرًا بالغ الصعوبة، بينما لا يكشف الاختبار عادةً إلا عن أكثر أنماط الفشل شيوعًا، ولذلك غالبًا ما تصل الأخطاء الدقيقة والمتقطعة في معالجات المقاطعة إلى المستخدمين النهائيين.

سياق التنفيذ

في نظام التشغيل الحديث، يكون سياق تنفيذ معالج مقاطعة الأجهزة دقيقًا عند الدخول.

لأسباب تتعلق بالأداء، يُبدأ معالج المقاطعة عادةً في سياق الذاكرة والتنفيذ للعملية الجارية، والتي لا يرتبط بها ارتباطًا خاصًا (إذ تُعتبر المقاطعة في جوهرها استيلاءً على سياق التشغيل - وغالبًا ما يُحتسب وقت معالجة المقاطعات للعملية المُقاطعة ضمن وقت العملية). مع ذلك، وعلى عكس العملية المُقاطعة، عادةً ما يتم رفع مستوى المقاطعة بواسطة آلية مُبرمجة مسبقًا في وحدة المعالجة المركزية إلى مستوى امتياز عالٍ بما يكفي للوصول إلى موارد الأجهزة مباشرةً.

اعتبارات مساحة التخزين

في المتحكمات الدقيقة منخفضة المستوى، قد تفتقر الشريحة إلى أوضاع الحماية أو وحدة إدارة الذاكرة (MMU). في هذه الشرائح، يكون سياق تنفيذ معالج المقاطعة مطابقًا تقريبًا لسياق البرنامج المُقاطع، والذي يعمل عادةً على مكدس صغير ذي حجم ثابت (حيث كانت موارد الذاكرة شحيحة للغاية في المستويات الدنيا). غالبًا ما تُوفّر مقاطعات متداخلة، مما يزيد من استهلاك المكدس. يتمثل أحد القيود الأساسية على معالج المقاطعة في هذا النوع من البرمجة في عدم تجاوز سعة المكدس المتاحة في أسوأ الحالات، مما يتطلب من المبرمج التفكير بشكل شامل في متطلبات مساحة المكدس لكل معالج مقاطعة مُنفّذ ولكل مهمة تطبيق.

عند تجاوز مساحة المكدس المخصصة (وهي حالة تُعرف بتجاوز سعة المكدس )، لا يتم عادةً اكتشاف ذلك في الأجهزة بواسطة رقائق من هذه الفئة. إذا تم تجاوز سعة المكدس إلى منطقة ذاكرة أخرى قابلة للكتابة، فسيعمل المعالج عادةً كما هو متوقع، ولكن سيفشل التطبيق لاحقًا (أحيانًا بعد فترة طويلة) بسبب التأثير الجانبي للمعالج المتمثل في تلف الذاكرة. أما إذا تم تجاوز سعة المكدس إلى منطقة ذاكرة غير قابلة للكتابة (أو محمية)، فسيحدث الفشل عادةً داخل المعالج نفسه (وهي الحالة الأسهل عمومًا لتصحيح الأخطاء لاحقًا).

في حالة إمكانية الكتابة، يمكن تطبيق حارس مكدس مؤقت - قيمة ثابتة تقع مباشرةً بعد نهاية المكدس القانوني، ويمكن الكتابة فوق قيمتها، ولكن لن يحدث ذلك أبدًا إذا كان النظام يعمل بشكل صحيح. من الشائع ملاحظة تلف حارس المكدس بشكل دوري باستخدام آلية مراقبة. سيؤدي ذلك إلى رصد معظم حالات تجاوز سعة المكدس في وقت قريب من العملية المُسببة للمشكلة.

في نظام متعدد المهام، يمتلك كل خيط تنفيذ عادةً مكدسًا خاصًا به. إذا لم يُخصص مكدس نظام للمقاطعات، فإن المقاطعات ستستهلك مساحة المكدس من خيط التنفيذ الذي تمت مقاطعته. تحتوي هذه التصاميم عادةً على وحدة إدارة الذاكرة (MMU)، ويتم عادةً تهيئة مكدسات المستخدم بحيث تلتقط وحدة إدارة الذاكرة تجاوز سعة المكدس، إما كخطأ نظام (لأغراض التصحيح) أو لإعادة تعيين الذاكرة لتوسيع المساحة المتاحة. عادةً ما تكون موارد الذاكرة في هذا المستوى من المتحكمات الدقيقة أقل تقييدًا بكثير، مما يسمح بتخصيص المكدسات بهامش أمان كبير.

في الأنظمة التي تدعم عددًا كبيرًا من الخيوط، يُفضّل أن تقوم آلية المقاطعة المادية بتحويل مكدس الذاكرة إلى مكدس نظام خاص، بحيث لا يحتاج أي من مكدسات الخيوط إلى مراعاة أسوأ حالات استخدام المقاطعات المتداخلة. وقد وفرت وحدات المعالجة المركزية الصغيرة، بدءًا من معالج موتورولا 6809 ذي 8 بتات من عام 1978، مؤشرات منفصلة لمكدس النظام ومكدس المستخدم.

القيود الزمنية والتزامن

لأسباب عديدة، يُفضّل بشدة أن يُنفّذ معالج المقاطعة بأقصر وقت ممكن، ويُمنع منعًا باتًا (أو يُثبط) استدعاءات النظام التي قد تُعيق عمل المعالج عند حدوث مقاطعة في الجهاز. في نظام متعدد النوى، تُعدّ اعتبارات إعادة الدخول بالغة الأهمية. إذا كان النظام يدعم الوصول المباشر إلى الذاكرة (DMA ) عبر الأجهزة ، فقد تنشأ مشكلات التزامن حتى مع نواة معالج واحدة فقط. (ليس من النادر أن تفتقر وحدة التحكم الدقيقة متوسطة المستوى إلى مستويات الحماية ووحدة إدارة الذاكرة (MMU)، ولكنها مع ذلك توفر محرك DMA بقنوات متعددة؛ في هذه الحالة، عادةً ما يُطلق محرك DMA نفسه العديد من المقاطعات، ويُتوقع من معالج المقاطعة المرتبط بها التعامل معها بحذر شديد).

تطورت ممارسة حديثة لتقسيم معالجات مقاطعات الأجهزة إلى عنصرين: النصف الأمامي والنصف الخلفي. يستقبل النصف الأمامي (أو المستوى الأول) المقاطعة الأولية ضمن سياق العملية الجارية، ويقوم بالحد الأدنى من العمل لإعادة الجهاز إلى حالة أقل إلحاحًا (مثل إفراغ مخزن الاستقبال الممتلئ)، ثم يُعلم النصف الخلفي (أو المستوى الثاني) للتنفيذ في المستقبل القريب وفقًا لأولوية الجدولة المناسبة. بمجرد استدعائه، يعمل النصف الخلفي في سياق عملية خاص به مع قيود أقل، ويُكمل العملية المنطقية للمعالج (مثل نقل البيانات المستلمة حديثًا إلى قائمة انتظار بيانات نظام التشغيل).

معالجات مقسمة في أنظمة التشغيل الحديثة

في العديد من أنظمة التشغيل -لينكس ، يونكس ، ماك أو إس ، مايكروسوفت ويندوز ، زد/أو إس ، دي إس كيو فيو ، وبعض أنظمة التشغيل الأخرى المستخدمة سابقًا - تُقسّم معالجات المقاطعات معالج المقاطعة من المستوى الأول ( FLIH ) ومعالجات المقاطعة من المستوى الثاني ( SLIH ). تُعرف معالجات المقاطعة من المستوى الأول أيضًا بمعالجات المقاطعة السريعة ، بينما تُعرف معالجات المقاطعة من المستوى الثاني بمعالجات المقاطعة البطيئة ، أو استدعاءات الإجراءات المؤجلة في ويندوز.

تُنفّذ وحدة معالجة المقاطعات طويلة الأمد (FLIH) كحد أدنى معالجةً خاصة بالمنصة للمقاطعات، على غرار إجراءات المقاطعات . عند حدوث مقاطعة، يتم تبديل السياق ، ثم يُنفّذ رمز المقاطعة. تتمثل مهمة وحدة FLIH في معالجة المقاطعة بسرعة، أو تسجيل المعلومات الهامة الخاصة بالمنصة والتي لا تتوفر إلا وقت حدوث المقاطعة، وجدولة تنفيذ وحدة معالجة المقاطعات طويلة الأمد (SLIH) لمعالجة المقاطعات طويلة الأمد الأخرى. [ 2 ]

تُسبب وحدات معالجة الإشارات طويلة المدى (FLIHs) تذبذبًا في تنفيذ العمليات، كما أنها تُخفي المقاطعات. يُعدّ تقليل هذا التذبذب بالغ الأهمية لأنظمة التشغيل في الوقت الحقيقي ، إذ يجب عليها ضمان إتمام تنفيذ التعليمات البرمجية المحددة خلال فترة زمنية متفق عليها. ولتقليل التذبذب وتقليل احتمالية فقدان البيانات نتيجةً للمقاطعات المُخفية، يسعى المبرمجون إلى تقليل وقت تنفيذ وحدة FLIH قدر الإمكان، بنقل أكبر قدر ممكن من العمليات إلى وحدة SLIH. وبفضل سرعة الحواسيب الحديثة، يُمكن لوحدات FLIH تنفيذ جميع عمليات المعالجة المُعتمدة على الجهاز والمنصة، واستخدام وحدة SLIH لمزيد من عمليات المعالجة طويلة المدى المُستقلة عن المنصة.

عادةً ما تقوم معالجات المقاطعات ذات الأولوية الثابتة (FLIHs) التي تخدم الأجهزة بإخفاء مقاطعتها المرتبطة بها (أو إبقائها مخفية حسب الحالة) حتى اكتمال تنفيذها. يُطلق على معالج المقاطعات ذي الأولوية الثابتة (FLIH) الذي يكشف مقاطعته المرتبطة به قبل اكتمال تنفيذه اسم معالج المقاطعات المُعاد دخوله . قد تتسبب معالجات المقاطعات المُعاد دخولها في حدوث تجاوز سعة المكدس نتيجةً لعمليات مقاطعة متعددة من نفس متجه المقاطعة ، ولذلك يتم تجنبها عادةً. في نظام المقاطعات ذي الأولوية ، يقوم معالج المقاطعات ذي الأولوية الثابتة (FLIH) أيضًا بإخفاء المقاطعات الأخرى ذات الأولوية المساوية أو الأقل (لفترة وجيزة).

تُنجز وحدة معالجة المقاطعات الطويلة (SLIH) مهام معالجة المقاطعات الطويلة بطريقة مشابهة للعمليات. إما أن يكون لكل وحدة معالجة مقاطعات طويلة خيط معالجة مخصص في نواة النظام، أو يتم تنفيذها بواسطة مجموعة من خيوط معالجة نواة النظام. تبقى هذه الخيوط في قائمة انتظار التشغيل في نظام التشغيل حتى يتوفر وقت المعالج لتنفيذ معالجة المقاطعة. قد تستغرق وحدات معالجة المقاطعات الطويلة وقتًا طويلاً للتنفيذ، ولذلك يتم جدولتها عادةً بطريقة مشابهة لجدولة الخيوط والعمليات.

في نظام لينكس، تُسمى وحدات FLIH بالنصف العلوي ، وتُسمى وحدات SLIH بالنصف السفلي . [ 1 ] [ 2 ] يختلف هذا عن التسمية المستخدمة في أنظمة يونكس الأخرى، حيث يُعتبر كلاهما جزءًا من النصف السفلي .

انظر أيضاً

مراجع

  1. 1 2 3 "دليل برمجة وحدات نواة لينكس، الفصل 12. معالجات المقاطعات" . مشروع توثيق لينكس . 18 مايو 2007. تم الاطلاع عليه في 20 فبراير 2015 .
  2. ١ ٢ ٣ ٤ جوناثان كوربيت؛ أليساندرو روبيني؛ جريج كروه-هارتمان (٢٧ يناير ٢٠٠٥). "برامج تشغيل أجهزة لينكس، الفصل ١٠. معالجة المقاطعات" (ملف PDF) . دار نشر أورايلي ميديا . تاريخ الاسترجاع: ٢٠ فبراير ٢٠١٥ .