وفي هذه المقالة سوف تتعرف على الفرق بين ISR و استدعاء وظيفة ، ولكن قبل مناقشة الاختلافات، عليك أن تعرف باختصار عن ISR واستدعاء الوظيفة.
ما هو الاستخبارات والمراقبة والاستطلاع؟
روتين خدمة المقاطعة (ISR) هو روتين برمجي يستدعيه الجهاز استجابة للمقاطعة. يقوم ISR بفحص المقاطعة، وتحديد كيفية التعامل معها، وتنفيذها، وإرجاع قيمة المقاطعة المنطقية. إذا لم تكن هناك حاجة إلى مزيد من المعالجة، يقوم ISR بإعلام النواة بقيمة الإرجاع. يجب أن يتم تنفيذ ISR بسرعة كبيرة لتجنب إبطاء تشغيل الجهاز وتشغيل جميع ISRs ذات الأولوية المنخفضة.
على الرغم من أن ISR قد ينقل البيانات من سجل وحدة المعالجة المركزية أو منفذ الأجهزة إلى مخزن مؤقت للذاكرة، إلا أنه يعتمد عمومًا على مؤشر ترابط (أو مهمة) مقاطعة مخصص، يسمى مؤشر ترابط خدمة المقاطعة (IST)، للقيام بمعظم المعالجة المطلوبة. إذا كانت هناك حاجة إلى معالجة إضافية، يقوم ISR بإرجاع قيمة مقاطعة منطقية إلى kernel. ثم يقوم بتعيين رقم مقاطعة فعلي إلى قيمة مقاطعة منطقية.
آلية معالجة المقاطعة
وفيما يلي آلية معالجة المقاطعة في الخطوات التالية، مثل:
- المقاطعة هي حالة تجعل وحدة المعالجة المركزية تعلق البرنامج الحالي وتنفذ ISR. ISR هو برنامج مكتوب خصيصًا لخدمة الحالة التي تسببت في المقاطعة.
- بعد صيانة المقاطعة، تعود وحدة المعالجة المركزية إلى البرنامج الرئيسي، بالضبط عند التعليمات التالية التي توقفت عندها.
- في نقل البيانات المعتمد على المقاطعة، عندما يكون جهاز الإدخال/الإخراج جاهزًا لنقل البيانات، فإنه سيقاطع وحدة المعالجة المركزية. في ISR، ستقوم وحدة المعالجة المركزية بإجراء نقل البيانات.
- تعد هذه الطريقة أفضل من الاستقصاء لأن وحدة المعالجة المركزية لا تحتاج إلى إضاعة الوقت في التحقق من حالة جهاز الإدخال/الإخراج. تعد لوحة المفاتيح مثالًا جيدًا للوصول إلى الإدخال/الإخراج المعتمد على المقاطعة.
- بدلاً من التحقق من وحدة المعالجة المركزية، يجب أن تقوم لوحة المفاتيح بمقاطعة وحدة المعالجة المركزية عند الضغط على أحد المفاتيح. وبالتالي لن يتم إضاعة الوقت في التحقق بشكل متكرر من لوحة المفاتيح عندما لا يكتب المستخدم على الإطلاق.
- يطلب جهاز الإدخال/الإخراج المقاطعة عن طريق إرسال ملف $overline{INTR}$ إشارة إلى وحدة المعالجة المركزية.
- كلما تلقت وحدة المعالجة المركزية $overline{INTR}$ إشارة، فإنه يكمل تنفيذ التعليمات الحالية ومن ثم ينفذ ISR. عندما تكون وحدة المعالجة المركزية جاهزة، فإنها ترسل إشارة إقرار من خلال بينما خط.
- يتم تنفيذ ISR، وتعود وحدة المعالجة المركزية إلى البرنامج الرئيسي.
- تقوم أجهزة الإدخال/الإخراج بإيقاف تشغيل $overline{INTR}$ إشارة بعد التنفيذ.
على سبيل المثال: في المثال أدناه، يتم نقل الإدخال/الإخراج عن طريق الإدخال/الإخراج المعتمد على المقاطعة.
- إذا كان جهاز الإدخال/الإخراج الذي يريد إجراء نقل البيانات مع المعالج يجب أن يقاطع المعالج.
- المقاطعة هي حالة تجعل المعالج ينفذ روتين خدمة المقاطعة.
- في ISR، سيقوم المعالج بنقل البيانات باستخدام جهاز الإدخال/الإخراج.
في هذا المثال، قم بمقاطعة الطلب بالضغط على مفتاح لوحة المفاتيح،
- بدلاً من أن يتحقق المعالج من الضغط على أحد المفاتيح، تقوم لوحة المفاتيح بمقاطعة المعالج عند الضغط على أي مفتاح.
- في ISR الخاص بلوحة المفاتيح، والذي يعد جزءًا من برنامج تشغيل لوحة المفاتيح، سيقوم المعالج بقراءة البيانات من لوحة المفاتيح.
مزايا الاستخبارات والمراقبة والاستطلاع
فيما يلي المزايا التالية لـ ISR، مثل:
- يمكن أن تحدث أحداث ISR غير المتزامنة في أي وقت أثناء تنفيذ البرنامج.
- يقوم ISR بحفظ جهاز الكمبيوتر والأعلام والتسجيلات على المكدس، وتعطيل كافة المقاطعات، وتحميل عنوان ISR.
- لا يمكن أن يحتوي ISR على وسيطات يمكن تمريرها إليه.
- لا يمكن لـ ISR إرجاع القيم.
- ISR تمكن المقاطعات.
- بشكل عام، يعتبر ISR صغيرًا لأنه يستغرق وقتًا في بعض العمليات الأخرى.
- بعض ISR لديها مكدس خاص بها.
ما هو استدعاء الوظيفة؟
يُطلق على استدعاء الوظيفة أيضًا اسم استدعاء الروتين الفرعي. الروتين الفرعي عبارة عن مجموعة من التعليمات التي يحتاجها البرنامج بشكل متكرر. إنه جزء من برنامج أكبر مسؤول عن تنفيذ مهمة محددة. قد ينفذ البرنامج الأكبر عبء عمل ثقيل، وقد يؤدي الروتين الفرعي مجرد مهمة بسيطة، وهي أيضًا مستقلة عن ترميز البرنامج المتبقي.
يتم ترميز الوظيفة بطريقة يمكن استدعاؤها عدة مرات ومن أماكن مختلفة (حتى من داخل وظائف أخرى). عندما يتم استدعاء وظيفة ما، قد ينتقل المعالج إلى المكان الذي يوجد فيه رمز الوظيفة وينفذ تعليمات الوظيفة واحدة تلو الأخرى. بعد الانتهاء من الوظائف، سيعود المعالج إلى حيث توقف تمامًا ويستمر في التنفيذ بدءًا من التعليمات التالية.
تعد الوظائف أداة رائعة لإعادة استخدام التعليمات البرمجية. العديد من لغات البرمجة الحديثة تدعم الوظائف. مجموعة من الوظائف تسمى أ مكتبة . تُستخدم المكتبات غالبًا كوسيلة لمشاركة البرامج وتداولها. في بعض الحالات، قد يكون البرنامج بأكمله عبارة عن سلسلة من الإجراءات الفرعية.
في حالة المعالج 8086، يتم استدعاء الروتين الفرعي بواسطة أ يتصل التعليمات، وإرجاع التحكم بواسطة أ يمين تعليمات. فهو يقلل من حجم البرنامج.
الفرق بين ISR واستدعاء الوظيفة
يجب أن يتم استدعاء الوظيفة بشكل صريح وأن تكون جزءًا من نفس السياق وسلسلة التنفيذ مثل المتصل بها. لا يتم استدعاء ISR للأجهزة بشكل صريح، بل يتم استدعاؤها بواسطة حدث خارجي. يتم الحفاظ على سياق مؤشر الترابط الحالي تلقائيًا عند استدعاء المقاطعة قبل تبديل السياق إلى ISR.
وفي المقابل يحدث تبديل السياق العكسي، مما يستعيد حالة المعالج قبل المقاطعة بحيث يستمر التنفيذ من نقطة الانقطاع. فيما يلي بعض الاختلافات الإضافية بين ISR واستدعاء الوظيفة.
ISR | استدعاء الوظيفة |
---|---|
تبدأ المقاطعة عادة بواسطة معالج إشارة داخلي أو خارجي بدلاً من تنفيذ التعليمات. يتم تنفيذ ISR بعد تخزين الحالة الحالية للبرنامج في المكدس. يقوم ISR بمهام مختلفة اعتمادًا على الجهاز الذي تمت مقاطعته أو التعليمات المكتوبة بواسطة المبرمج. | يتم استدعاء استدعاء الوظيفة عن طريق تنفيذ التعليمات، التي تؤدي مهام محددة وتقلل من حجم البرنامج. |
يحدد الجهاز عنوان ISR. تتم كتابة عنوان ISR داخل جدول متجهات المقاطعة، ويتم إصلاح عنوان ISR لكل مقاطعة. | يتم كتابة عنوان الروتين الفرعي داخل التعليمات، والتي يتم كتابتها داخل رمز البرنامج الرئيسي. |
يتم استخدام ISR لجميع المهام ذات الأغراض العامة. | يتم إجراء استدعاءات الوظائف للمهام الخاصة بالبرنامج. |
عند حدوث مقاطعة أثناء تنفيذ البرنامج الحالي، لذلك، بعد تنفيذ التعليمات الحالية، يقوم المعالج بتنفيذ ISR. بعد تنفيذ ISR، يجب على المعالج استئناف البرنامج تمامًا كما كان قبل حدوث المقاطعة. لهذا، يتم تخزين محتوى الكمبيوتر وسجلات μP وبعض شروط الحالة. يُطلق على مجموعة جميع شروط بتات الحالة في المعالج الدقيق اسم PSW (كلمة حالة البرنامج).
| هنا، يتم تخزين جهاز كمبيوتر فقط على المكدس للحصول على عنوان التعليمات التالية في البرنامج الرئيسي. يجب أن يتمتع الروتين الفرعي بإمكانية الوصول إلى البيانات من الروتين الفرعي للاتصال وإرجاع النتائج إلى هذا الروتين الفرعي. لذلك، يتم تنفيذ معلمات الروتين الفرعي وربط البيانات. ويمكن القيام بذلك من خلال
|