Livelock: ما هو، مثال، الفرق مع Deadlock

⚡ ملخص ذكي

Livelock هو حالة تزامن حيث تستمر العمليات في تغيير حالاتها استجابة لبعضها البعض ولكنها لا تحرز أي تقدم حقيقي، وتبقى نشطة وتستهلك دورات وحدة المعالجة المركزية دون إكمال مهامها أو التوقف.

  • 🔁 فريف: يحدث التعطل عندما تغير العمليات حالتها باستمرار لتتلاءم مع بعضها البعض ولكنها لا تتقدم أبدًا، على عكس العمليات المتجمدة في حالة التعطل التام.
  • 🚶 على سبيل المثال: شخصان يخطوانping يُظهر التواجد جنبًا إلى جنب في ممر للسماح لبعضهما البعض بالمرور، حركةً مستمرة دون أن يتقاطعا أبدًا.
  • 🧮 السبب: يؤدي الاستطلاع المتكرر وإعادة المحاولة للحصول على الأقفال، والمحدود بفتحات جدول العمليات المحدودة، إلى دفع العمليات إلى حالة التعطل دون أن يتم حظر أي منها.
  • 🇧🇷 مقارنة: يؤدي التعطل التام إلى تجميد العمليات، ويؤدي الحرمان من الموارد إلى أجل غير مسمى، ويبقي التعطل المستمر العمليات مشغولة دون أي تقدم للأمام.
  • 🛡️ الوقاية: يؤدي التراجع العشوائي وحدود إعادة المحاولة وترتيب الأولوية إلى كسر عمليات إعادة المحاولة المتناظرة التي تؤدي إلى حالة التعطل.
  • 🤖 زاوية الذكاء الاصطناعي: يقوم التعلم الآلي بتحديد أنماط وحدة المعالجة المركزية التي لا تقدم، ويساعد Copilot في كتابة التعليمات البرمجية الخاصة بالتراجع وترتيب القفل لتجنب حالة التعطل.

ليفلوك في Operaنظام تينج

ما هو لايفلوك؟

A livelock هي حالة يتم فيها رفض طلب الحصول على قفل حصري بشكل متكرر، حيث تتداخل العديد من الحالات.ping تتسبب الأقفال المشتركة في تداخلها مع بعضها البعض. وتستمر العمليات في تغيير حالتها، مما يمنعها من إكمال المهمة.

أمثلة على Livelock

مثال 1:

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

مثال 2:

أمثلة على حالة الاحتجاز الحي في Operaنظام تينج

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

  1. العملية أ تحتوي على المورد ص
  2. العملية B تحمل المورد X
  3. تتطلب العملية أ المورد س
  4. تتطلب العملية ب المورد ص

لنفترض أن العملية A تعمل أولاً وتحصل على المورد X، ثم تعمل العملية B وتحصل على المورد Y. بغض النظر عن العملية التي تعمل أولاً، فإن أياً منهما لا يحرز تقدماً إضافياً.

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

لذلك، فإن هذا الوضع ليس مأزق، لأنه لا توجد عملية واحدة محظورة؛ بدلاً من ذلك، نواجه حالة تعادل حالة الجمود، والتي تسمى LIVELOCK.

ما الذي يؤدي إلى Livelock؟

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

ما هو Deadlock؟

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

مثال على الجمود

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

مثال على حالة الجمود في Operaنظام تينج

مثال على الجمود

ما هو المجاعة؟

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

في بعض الخوارزميات، قد لا تحصل بعض العمليات على الخدمة المطلوبة حتى وإن لم تكن في حالة جمود. يحدث التجويع عندما تجعل بعض الخيوط الموارد المشتركة غير متاحة لفترة طويلة.

مثال على المجاعة

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

الفرق بين الجمود والجوع والتوقف الدائم

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

الأسئلة الشائعة

يمكن تقليل حالات التعطل عن طريق إضافة عنصر عشوائي أو ترتيب لعمليات إعادة المحاولة. تشمل التقنيات التراجع العشوائي أو الأسي قبل إعادة المحاولة، ووضع حد أقصى.ping عدد محاولات إعادة المحاولة، وفرض ترتيب ثابت للحصول على القفل بحيث تتوقف العمليات عن محاكاة تحركات بعضها البعض.

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

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

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

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

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

نعم. يمكن لـ GitHub Copilot اقتراح أنماط عشوائية للتراجع، والمهلات الزمنية، وترتيب الأقفال المتسقة، مما يقلل من مخاطر كل من التعطل والجمود. مع ذلك، ينبغي على المطورين مراجعة منطق التزامن المُنشأ بعناية، لأن أخطاء التوقيت الدقيقة قد لا تُكتشف بسهولة.

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

تلخيص هذه التدوينة بـ: