استعصاء
المحتويات

على سبيل التعريف، الاستعصاء أو المأزق هو حالة تطرأ في مجال الحوسبة المتوازية. تقع حالة الاستعصاء عندما تصل مهمتان متنافستان إلى حالة انتظار كل منهما للأخرى من أجل تحرير مورد تطلبه. المهام التي تصل لهذه الحالة تخلق حالة استعصاء. وفيما يلي تفاصيل أوسع عن ذلك.
إضافةً إلى ذلك، والاستعصاء الحوسبي كالاستعصاء في تقاطع الطرق يحدث حينما تحاول السيارات عبور التقاطع في نفس الوقت فيوقف بعضهم البعض.
الوقاية
من جهة ثانية، إحدى الطرق تنص على اكتساب الإقصاء المتبادل بنفس الترتيب. في الواقع، إذا احتاجت عدة خيوط لاكتساب عدة قيود لتنفيذ أعمالها وتم ذلك بترتيب مختلف فممكن وقوعها في مأزق (راجع المثال السابق).
إضافةً إلى ذلك، من المفيد كذلك الاهتمام بأولوية المهام. فمثلا، إذا طلبت مهمة بأولوية عليا قفلا مشتركا مع مهمة ذات أولوية دنيا، هنا يمكن الوقوع كذلك في حالة استعصاء. الحل لمثل هذه الحالة هو اقتصار استعمال القيود فقط على المهام بنفس مستوى الأولية.
تفادي الاستعصاء
علاوةً على ذلك، يمكن تحديد عمر المهمة باستعمال الختم الزمني عند استحداث المهمة. التواريخ الصغيرة هي للمهام المسنة والتواريخ الكبيرة هي للفتية.
علاوةً على ذلك، من المهم الأخذ بعين الاعتبار أنه يمكن أن تكون مهمة في حالة مريبة دون أن يؤدي ذلك بالضرورة لحالة استعصاء. مفهوم الحالة المريبة أو لا هو مرجع لاحتمال وقوع النظام في حالة استعصاء أو لا. مثلا إذا طلبت مهمة احتكار مورد أ وينجم عن ذلك حالة مريبة ولكن يحرر مرد آخر ب لتفادي الانتظار المتبادل، فإن الحالة المريبة لا تؤدي إلى حالة استعصاء.
وعلى صعيد آخر، خوارزميات انتظار/موت وجريح/انتظار هي طرق أخرى للتفادي التي تستعمل تقنية كسر التناظر. تأخذ الخورزميتان بعين الاعتبار عمر كل مهمة وتفصل بين مهمة مسنة (م) ومهمة فتية (ف).
ومن ناحية أخرى، يمكن تدارك حالة الاستعصاء إذا عرفت بعض المعطيات مسبقا. لكل طلب احتكار لمورد، يقوم النظام بمراقبة إذا ما كان ممكنا الوقوع في حالة مريبة يمكن أن تتحول إلى مأزق. فلا يقبل النظام إلا الطلبات التي لا تشكل خطرا. وحتى يتمكن من أخذ القرار عن إذا ما كان الطلب سيؤدي لحالة مريبة أو لا، يجب أن يعرف النظام في كل وقت عدد ونوع الموارد الموجودة المتوفرة أو المحجوزة. خوارزمية المصرفي هي إحدى الخوارزميات الكلاسيكية للتوقع المبكر لحالة الاستعصاء. الخوارزمية بحاجة لمعرفة مسبقة لحدود استعمال الموارد. بالنسبة للعديد من الأنظمة يستحيل توقع الاستعصاء قبل كل طلب ما يجعل تفادي الاستعصاء أمرا شبه مستحيل.
مثال
- الاستعصاء هنا ممكن، حيث إذا كانت عملية التنفيذ تسير كما يلي:
- المهمة أ يحصل على M1.
- المهمة ب يحصل على M2.
- المهمة أ تنتظر للحصول على M2 (المملوك لـ المهمة ب).
- المهمة ب تنتظر للحصول على M1 (المملوك لـ المهمة أ).
- في هذه الحالة، المهمتين أ وب في حالة استعصاء.
إضافةً إلى ذلك، مثال في الحوسبة عن حالة استعصاء نجم عن تنافس مهمتين في طلب قفلين بترتيب مختلف. فإذا كان لدينا اقصاء متبادل (M1 وM2) والمهمتين تاليتين:
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟