2009-07-22 9 views
32

मल्टीटास्किंग सिस्टम में, कुछ असामान्य स्थितियां निष्पादन प्रक्रियाओं या धागे की प्रगति को रोकती हैं। मैं बस प्रक्रियाओं और धागे दोनों को "प्रक्रियाओं" के रूप में संदर्भित करूंगा। इनमें से दो स्थितियों को मृत-ताला और लाइव-लॉक कहा जाता है।भुखमरी क्या है?

पूर्व प्रक्रियाओं को संदर्भित करता है जो एक दूसरे को अवरुद्ध कर रहे हैं, इस प्रकार या तो निष्पादन से रोकते हैं। उत्तरार्द्ध उन प्रक्रियाओं को संदर्भित करता है जो एक दूसरे को प्रगति से रोकते हैं, लेकिन वास्तव में निष्पादन को अवरुद्ध नहीं करते हैं। उदाहरण के लिए, वे लगातार एक दूसरे को रोलबैक लेनदेन के कारण बना सकते हैं, न ही उन्हें पूरा करने में सक्षम हैं।

एक और शर्त संसाधन भुखमरी के रूप में जानी जाती है, जिसमें प्रक्रियाओं की प्रगति के लिए आवश्यक एक या अधिक सीमित संसाधनों को उनके द्वारा समाप्त कर दिया गया है और प्रक्रियाओं की प्रगति होने तक इसे पुनर्स्थापित नहीं किया जा सकता है। यह लाइव-लॉक का एक विशेष मामला भी है।

मैं जानना चाहता हूं कि "भुखमरी" के लिए कोई अन्य परिभाषा, विशेष रूप से एक अकादमिक है, जो "संसाधन भुखमरी" तक ही सीमित नहीं है। संदर्भ विशेष रूप से स्वागत है।

और, नहीं, यह होमवर्क नहीं है। :-)

+4

जबकि आप इस विषय पर हैं, आपको लॉक कॉन्वॉय की भी जांच करनी चाहिए, वे बहुत ही रोचक हैं। और बुरा http://en.wikipedia.org/wiki/Lock_convoy –

+0

भले ही यह होमवर्क था, यह एसओ पर कभी भी देखा गया सबसे अच्छा लिखित होमवर्क प्रश्न होगा। –

उत्तर

26

मैं यह नहीं कहूंगा कि संसाधन भुखमरी एक आजीविका का एक विशेष मामला है।आमतौर पर:

  • एक livelock में, कोई धागा प्रगति करता है लेकिन वे निष्पादन जारी रखते हैं। (एक डेडलॉक में, वे निष्पादन भी नहीं रखते हैं)

  • भूख से, कुछ धागे प्रगति करते हैं और कुछ धागे निष्पादित नहीं होते हैं।

एक अच्छी व्याख्या: http://docs.oracle.com/javase/tutorial/essential/concurrency/starvelive.html। लेकिन मैं समझता हूं कि शब्दावली की पसंद भिन्न हो सकती है।

यह भुखमरी की बात आती है, परिभाषा मैंने सुना है:

मान लीजिए यह निष्पादन (जिल्द) की एक अनंत पथ निर्दिष्ट करने के लिए मान्यताओं के अनुरूप संभव है (सेमाफोर अर्थ विज्ञान, ओएस अनुसूचक व्यवहार ...) ऐसा है कि थ्रेड टी को कुछ संसाधनों के लिए इंतजार कर दिया गया है और कभी भी फिर से शुरू नहीं हुआ है, भले ही यह असीम रूप से कई बार संभव हो। तब टी भूखा कहा जाता है।

लेकिन अभ्यास उससे मेल नहीं खाता है। मान लीजिए कि दो थ्रेड एक अनंत लूप में समीक्षक अनुभाग निष्पादित करते हैं। आपका सिंक्रनाइज़ेशन कोड पहले थ्रेड को प्रति घंटे एक बार समीक्षक अनुभाग में प्रवेश करने की अनुमति देता है। क्या यह भुखमरी है? दोनों धागे को प्रगति की अनुमति है, लेकिन पहला व्यक्ति धीरे-धीरे अपने काम को दर्द से कर रहा है।

भुखमरी का सबसे सरल स्रोत कमजोर सेमफोर हैं। यदि आप एक सिंक्रनाइज़ेशन आदिम (या अपना खुद का निर्माण) का उपयोग कर रहे हैं जो समान व्यवहार करता है, तो भुखमरी का परिणाम होगा।

शास्त्रीय समस्याओं जहां भुखमरी अच्छी तरह से जाना जाता है:

अधिक जानकारी के लिए मैं तहे दिल से Semaphores की छोटी पुस्तक (मुक्त) की सलाह देते हैं।

आप पूछ रहे हैं कि प्रत्येक भुखमरी कुछ संसाधनों की प्रतीक्षा कर रही है या नहीं। मैं कहूंगा - हाँ।

एक धागा निलंबित किया जा सकता:

(1) कुछ अवरुद्ध सिस्टम कॉल पर -/पर इंतजार कर रहे एक म्युटेक्स, सेमाफोर, सशर्त चर प्राप्त करने; लिखें(), मतदान() आदि

(2) कुछ गैर-ब्लॉकिंग ऑपरेशन पर - कंप्यूटेशंस करने की तरह।

(1) पर भूख से संसाधनों (म्यूटेक्स, बफर इत्यादि) पर भूख लगी है।

(2) पर भूख से सीपीयू पर भूख लगी है - आप इसे संसाधन के रूप में देख सकते हैं। यदि ऐसा होता है, तो समस्या शेड्यूलर के साथ होती है।

एचटीएच

+0

आपका पहला लिंक मर चुका है। क्या आप इसे अपडेट कर सकते हैं? –

+1

@ nubhihi219 - हो गया – sdcvvc

1

कार्य भी एक प्रकार का संसाधन है। जब निर्माता-उपभोक्ता सेटअप में कार्य वितरण निष्पक्ष (या आदर्श नहीं) होता है, तो कुछ धागे उन्हें हर समय व्यस्त रखने के लिए पर्याप्त कार्य आइटम नहीं मिल सकते हैं।

38

कल्पना कीजिए कि आप एक रेस्तरां में भोजन खरीदने के लिए कतार में हैं, जिसके लिए गर्भवती महिलाओं को प्राथमिकता है। और हर समय गर्भवती महिलाओं का पूरा समूह है।

आप जल्द ही भूख से मर जाएंगे। ;)

अब कल्पना करें कि आप कम प्राथमिकता प्रक्रिया हैं और गर्भवती महिलाएं उच्च प्राथमिकता वाले हैं। =)

+0

हास्यास्पद अभी तक सर्वोत्तम स्पष्टीकरण – user8027365

12

प्राथमिकता शेड्यूलिंग एल्गोरिदम के बारे में बात करते समय एक अन्य क्षेत्र जहां भुखमरी या "अनिश्चित अवरोध" आम तौर पर आता है। प्राथमिकता शेड्यूलिंग एल्गोरिदम में कुछ कम प्राथमिकता प्रक्रिया अनिश्चित काल तक प्रतीक्षा करने की संभावना है। उच्च प्राथमिकता प्रक्रियाओं की एक स्थिर धारा कम प्राथमिकता प्रक्रिया को कभी भी चलाने से रोक सकती है।

प्राथमिकता अनुसूचक के मामले में, समाधान "उम्र बढ़ने" है। एजिंग धीरे-धीरे प्रक्रियाओं की प्राथमिकता को बढ़ाने की तकनीक है जो लंबे समय तक सिस्टम में प्रतीक्षा करती है।

6

भुखमरी बस तब होती है जब प्रक्रिया या सेवा की सेवा नहीं होती है, भले ही सिस्टम पर कोई डेडलॉक न हो।

यह एक उदाहरण है जिसे मैंने अभी स्पष्टीकरण उद्देश्यों के लिए बनाया है।

कल्पना करें कि एक एल्गोरिदम है जो कंप्यूटर को एक वैन या उस तरह से कुछ तक पहुंच नियंत्रित करता है। इस एल्गोरिदम में ऐसी नीति हो सकती है जो कहती है, "उन कंप्यूटरों को प्राथमिकता प्रदान करें जो कम बैंडविड्थ का उपयोग करेंगे।", यह एक उचित नीति की तरह प्रतीत होता है, लेकिन फिर तब होता है जब एक कंप्यूटर एक FTP अपलोड के लिए नेटवर्क तक पहुंचना चाहता है कहीं कहीं कई जीबी भेजें। अकेले इस नीति के साथ, वह कंप्यूटर भूखा होगा क्योंकि एल्गोरिदम कभी भी उस कंप्यूटर का चयन नहीं करेगा, क्योंकि हमेशा छोटे कंप्यूटरविड्थ उपयोग का अनुरोध करने वाले अन्य कंप्यूटर होंगे।

जिसे भुखमरी कहा जाता है।

1

जावा में लॉक भुखमरी का एक उदाहरण बनाएं।यह धागा प्राथमिकता के बारे में सब कुछ है। सुनिश्चित नहीं है कि उदाहरण अच्छा है, लेकिन आप here देख सकते हैं।

0

एक प्रक्रिया को लंबे समय तक संसाधन या संसाधन नहीं मिलते हैं। यह एक डेडलॉक नहीं है, क्योंकि एक प्रक्रिया बिना किसी समस्या के चलती है। इस समस्या को हल करने के लिए एजिंग का उपयोग किया जा सकता है, प्रत्येक अनुरोध के लिए उम्र बढ़ने वाला कारक उपयोग किया जाता है।

संबंधित मुद्दे