اختبر واختبر ثم اضبط

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

مع وجود قفل:

boolean locked := false // متغير قفل مشترك

بروتوكول الدخول هو:

الإجراء EnterCritical() { do { while ( locked == true ) skip // استمر في استخدام التعليمات العادية حتى يصبح القفل متاحًا } while ( TestAndSet (locked) == true ) // حاول إجراء قفل ذري فعلي باستخدام تعليمة الاختبار والتعيين }

وبروتوكول الخروج هو:

الإجراء ExitCritical() { مقفل := خطأ }

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

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

لا تُستخدم معاملات بروتوكول تماسك ذاكرة التخزين المؤقت إلا في الحلقة الخارجية، بعد أن يتأكد الفحص الأولي من أن لديها احتمالية معقولة للنجاح.

إذا كانت لغة البرمجة المستخدمة تدعم التقييم المختصر ، فيمكن تنفيذ بروتوكول الإدخال على النحو التالي:

الإجراء EnterCritical() { بينما ( locked == true أو TestAndSet(locked) == true) تخطي // استمر في الدوران حتى يتم القفل }

تنبيه قضائي

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

باستخدام كائنات القفل التي يوفرها نظام التشغيل، مثل mutexes، يمكن لنظام التشغيل جدولة الخيوط غير المحظورة بدقة.

انظر أيضاً

مراجع

  • غريغوري ر. أندروز، أسس البرمجة متعددة الخيوط والمتوازية والموزعة ، الصفحات  100-101. أديسون-ويسلي، 2000. ISBN 0-201-35752-6.