سؤال

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

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

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

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

ولا، هذا ليس واجب منزلي. :-)

هل كانت مفيدة؟

المحلول

لن أقول أن مجزهة الموارد هي حالة خاصة من livelock. مستخدم:

  • في Livelock، لا يوجد موضوع يجعل تقدم لكنهم يستمرون في التنفيذ. (في طريق مسدود، لا يحتفظون حتى بالتنفيذ)

  • عند جوعا، يقوم بعض الخيط (مؤشر الترابط) بإحراز تقدم وبعض الخيط (الرسائل) غير منفذة.

تفسير جيد: http://docs.oracle.com/javase/tutorial/essentaly/concurrency/starvelive.html.. وبعد لكنني أفهم اختيار المصطلحات قد تختلف.

عندما يتعلق الأمر بالجوع، فإن التعريف الذي سمعته هو:

لنفترض أنه من الممكن تحديد مسار تنفيذا لا حصر له (يتستبط) يتوافق مع الافتراضات (Semaphore Semantics وسلوك جدولة OS ...) بحيث يتم تعليق الخيط T في انتظار بعض المورد ولم يتم استئنافه أبدا، حتى لو كان ذلك ممكنا عدة مرات وبعد ثم يسمى T يتضورون جوعا.

لكن الممارسة لا تتطابق مع ذلك. لنفترض أن اثنين من المواضيع تنفيذ القسم الانتقادي في حلقة لانهائية. يسمح رمز المزامنة الخاص بك بالخيط الأول لدخول القسم الانتقادي مرة واحدة في الساعة. هل الجوع؟ يسمح كلا المواضيعين بالتقدم، ولكن أول واحد يقوم بعمله ببطء بشكل مؤلم.

أبسط مصدر المجاعة ضعيفة. إذا كنت تستخدم مزامنة بدائية (أو بناء خاصة بك) يتصرف بالمثل، فسوف ينتج عن الجوع.

المشاكل الكلاسيكية حيث المجاعة معروفة جيدا:

لمزيد من التفاصيل، أوصي بصدق الكتاب الصغير للدرسة (مجانا): http://www.greenteapress.com/semaphores/.

أنت تسأل عما إذا كان كل جوع ناتج عن انتظار بعض الموارد. أود أن أقول - نعم.

يمكن تعليق الخيط:

(1) على بعض مكالمة نظام الحظر - في انتظار / اكتساب Mutex، Semaphore، متغير مشروط؛ اكتب ()، استطلاع () إلخ.

(2) في بعض العملية غير المشبعة - مثل أداء الحسابات.

يتضورون جوعا على (1) يتضورون جوعا على الموارد (Mutexes، المخزن المؤقت وما إلى ذلك).

يتضورون جوعا على (2) يتضورون جوعا على وحدة المعالجة المركزية - يمكنك اعتباره كمورد. إذا حدث ذلك، فإن المشكلة مع جدولة.

هذر

نصائح أخرى

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

ستكون قريبا جوعا. ؛)

الآن تخيل أنك عملية ذات أولوية منخفضة والنساء الحوامل ذات أولوية أعلى. =)

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

في حالة الجداول الأولوية، الحل هو "الشيخوخة". الشيخوخة هي تقنية زيادة أولوية العمليات التي تنتظر النظام لفترة طويلة.

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

هذا مثال على أنني قمت بالتو فقط لأغراض التوضيح.

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

وهذا ما يسمى الجوع.

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top