مصيدة النظام غير المتزامن
يشير مصطلح "مصيدة النظام غير المتزامن " ( AST ) إلى آلية مستخدمة في العديد من أنظمة تشغيل الحاسوب التي صممتها شركة Digital Equipment Corporation (DEC) السابقة في ماينارد ، ماساتشوستس . وتُعد هذه الآلية طريقة لتنفيذ الإجراءات الفرعية خارج سلسلة التنفيذ الرئيسية. [ 1 ]
الآلية
يمكن إرسال إشارات اختيارية إلى عمليات المستخدم عبر آلية شجرة بناء الجملة المجردة (AST) تتضمن أحداثًا مختلفة داخل هذه الأنظمة. تعمل هذه الأشجار كاستدعاءات للبرامج الفرعية، ولكنها تُرسل بشكل غير متزامن ، أي دون أي اعتبار لسياق الخيط الرئيسي. لذا، يجب توخي الحذر.
- لضمان أن أي كود مشترك بين الخيط الرئيسي وشجرة بناء الجملة المجردة يجب تصميمه بحيث يكون قابلاً لإعادة الدخول ، و
- يجب أن تكون أي بيانات يتم مشاركتها آمنة من التلف في حال تعديلها في أي وقت بواسطة شجرة التحليل النحوي. وإلا، فيجب حماية البيانات عن طريق حظر أشجار التحليل النحوي أثناء المقاطع الحرجة .
تُصادف أشجار بناء الجملة المجردة (ASTs) غالبًا نتيجةً لإصدار استدعاءات QIO إلى النواة . ويمكن الإشارة إلى اكتمال عمليات الإدخال/الإخراج بإصدار شجرة بناء جملة مجردة إلى العملية/المهمة المستدعِية. كما يمكن الإشارة إلى بعض أخطاء وقت التشغيل باستخدام آلية شجرة بناء الجملة المجردة. في نظام OpenVMS، تُستخدم أشجار بناء الجملة المجردة الخاصة بوضع النواة كآلية قياسية للوصول بسهولة نسبية إلى سياق العملية (بما في ذلك نقل العملية إلى الذاكرة الفعلية عند الحاجة). تُنفَّذ هذه الأنواع من أشجار بناء الجملة المجردة بأعلى أولوية ممكنة لكل عملية في المرة التالية التي يُفعِّل فيها المُجدوِل تلك العملية، وتُستخدم، من بين أمور أخرى، لاسترجاع معلومات على مستوى العملية (استجابةً لاستدعاء النظام $GETJPI "getjob/process information") ولحذف العملية.
تُطبّق أنظمة التشغيل التالية أشجار بناء الجملة المجردة (ASTs):
- RSX-11 (بما في ذلك جميع المتغيرات)
- RSTS/E
- أوبن في إم إس
تُشابه أشجار بناء الجملة المجردة (ASTs) إشارات يونكس إلى حد كبير . وتتمثل الاختلافات المهمة فيما يلي:
- لا توجد "رموز إشارة" مخصصة لأشجار بناء الجملة المجردة (ASTs): فبدلاً من تعيين معالج لرمز إشارة وإطلاق هذا الرمز، يتم تحديد شجرة بناء الجملة المجردة مباشرةً بواسطة عنوانها. وهذا يسمح بوجود أي عدد من أشجار بناء الجملة المجردة قيد الانتظار في وقت واحد (رهناً بحصص المعالجة).
- لا تُوقف أشجار بناء الجملة المجردة (ASTs) أي استدعاء نظام قيد التنفيذ . في الواقع، يُمكن للعملية أن تُدخل نفسها في حالة "سبات" (باستخدام استدعاء النظام $HIBER)، أو أن تنتظر إشارة حدث ما عن طريق استدعاء دالة مثل $WAITFR، حيث لا تفعل شيئًا سوى انتظار تسليم أشجار بناء الجملة المجردة. عند تسليم شجرة بناء الجملة المجردة (نتيجةً لإتمام عملية إدخال/إخراج، أو مؤقت، أو حدث آخر)، تُستدعى العملية مؤقتًا من الانتظار لتنفيذ شجرة بناء الجملة المجردة. بعد اكتمال إجراء شجرة بناء الجملة المجردة، يُعاد استدعاء الدالة التي وضعت العملية في حالة السبات أو انتظار إشارة الحدث؛ أي يُعاد تقييم سبب الانتظار. الطريقة الوحيدة للخروج من هذه الحلقة (باستثناء حذف العملية) هي تنفيذ استدعاء النظام $WAKE أو $SETEF لتلبية الانتظار. يُمكن للعملية نفسها القيام بذلك عن طريق استدعاء $WAKE أو $SETEF داخل شجرة بناء الجملة المجردة، أو (في حال استخدام إشارة حدث عامة) استدعاء $SETEF داخل عملية أخرى.
قدّمت أنظمة VAX/VMS V4 والإصدارات اللاحقة تحسينًا مثيرًا للاهتمام لمشكلة التزامن بين التعليمات البرمجية على مستوى شجرة بناء الجملة المجردة (AST) والتعليمات البرمجية الأخرى. إذ يُمكن استخدام خدمة نظام تُسمى $SETAST لتعطيل أو تمكين عرض أشجار بناء الجملة المجردة (AST) لأنماط الوصول الحالية وجميع أنماط الوصول الأقل امتيازًا (مصطلح OpenVMS لميزات الأمان القائمة على الحلقات ). مع ذلك، إذا كان القسم الحرج الذي يحتاج إلى الحماية من أشجار بناء الجملة المجردة (AST) يتكون من بضع تعليمات فقط، فإنّ تكلفة استدعاءات $SETAST قد تفوق بكثير وقت تنفيذ تلك التعليمات.
لذا، في وضع المستخدم فقط (أقل مستوى امتياز، والذي تستخدمه عادةً برامج المستخدم العادية)، تم توفير زوج من علامات البت في موقع ذاكرة قابل للكتابة من قِبل المستخدم (في مساحة "P1" لكل عملية). يمكن تفسير معنى هاتين العلامتين على أنهما "عدم تسليم أي أشجار بناء جملة مجردة" و"تم تعطيل أشجار بناء الجملة المجردة". بدلاً من استدعاءات $SETAST المعتادة، يقوم رمز وضع المستخدم بتعيين العلامة الأولى قبل تنفيذ سلسلة التعليمات التي تتطلب حظر أشجار بناء الجملة المجردة، ثم يقوم بمسحها بعد انتهاء السلسلة. بعد ذلك (لاحظ الترتيب هنا لتجنب حالات التزامن ) يتحقق من العلامة الثانية لمعرفة ما إذا كانت قد عُيّنت خلال هذه الفترة: إذا كان الأمر كذلك، فهذا يعني أن أشجار بناء الجملة المجردة قد تم تعطيلها بالفعل، ويجب استدعاء $SETAST لإعادة تمكينها. في الحالة الأكثر شيوعًا، لن تكون هناك أي أشجار بناء جملة مجردة معلقة خلال هذه الفترة، لذلك لن تكون هناك حاجة لاستدعاء $SETAST على الإطلاق.
أما رمز تسليم شجرة بناء الجملة المجردة (AST) الخاص بالنواة، من جانبه، فسيتحقق من العلم الأول قبل محاولة تسليم شجرة بناء الجملة المجردة في وضع المستخدم؛ إذا تم تعيينه، فسيقوم بتعيين بت تعطيل أشجار بناء الجملة المجردة مباشرةً في كتلة التحكم في العملية (نفس البت الذي سيتم تعيينه بواسطة استدعاء $SETAST صريح من وضع المستخدم)، وسيقوم أيضًا بتعيين العلم الثاني، قبل العودة وترك شجرة بناء الجملة المجردة دون تسليم.
آلية استدعاء الإجراءات غير المتزامنة في عائلة أنظمة التشغيل Windows NT هي آلية مماثلة.
مراجع
- ↑ جيزيلتر، روبرت (13 نوفمبر 1996). "OpenVMS Asynchronous System Trap (AST) Internals" (PDF) .
للمزيد من القراءة
- OpenVMS Alpha: البنية الداخلية وهياكل البيانات : الجدولة والتحكم في العمليات : الإصدار 7.0، روث غولدينبيرغ، سارو سارافانان، دينيس دوماس، ISBN 1-55558-156-0
- تقنية نظام التشغيل
- أوبن في إم إس
