असुरक्षित स्थिति हमेशा गतिरोध का कारण क्यों नहीं बनती?


10

मैं गैल्विन द्वारा ऑपरेटिंग सिस्टम पढ़ रहा था और नीचे की लाइन में आया था,

हालांकि सभी असुरक्षित राज्य गतिरोध वाले नहीं हैं। असुरक्षित स्थिति में गतिरोध हो सकता है

किसी को बताएं कि किस तरह बता सकते हैं गतिरोध! = असुरक्षित राज्य? मैंने भी यहीं लाइन पकड़ी

यदि एक सुरक्षित अनुक्रम मौजूद नहीं है, तो सिस्टम असुरक्षित स्थिति में है, जो MAY गतिरोध की ओर ले जाता है। (सभी सुरक्षित राज्य गतिरोध मुक्त हैं, लेकिन सभी असुरक्षित राज्य गतिरोध पैदा नहीं करते हैं।)


1
गतिरोध एक दौड़ की स्थिति के समान अवधारणा हो सकती है जो रुक-रुक कर होती है। असुरक्षित कोड केवल गतिरोध को ट्रिगर करता है जब एक विशेष अनुक्रम ऊपर होता है। यह क्रम "किसी भी समय" उर्फ ​​"दुर्घटना होने की प्रतीक्षा में हो सकता है" ...
vzn

असुरक्षित स्थिति का अर्थ है, सैद्धांतिक रूप से गतिरोध की संभावना है। गतिरोध तब हो सकता है जब कुछ विशिष्ट चीजें होती हैं। सुरक्षित स्थिति के लिए, कोई फर्क नहीं पड़ता कि क्या होता है, कोई गतिरोध नहीं हो सकता।
nishhantbhardwaj2002

1
ठीक उसी कारणों से कि कोई भी खतरनाक स्थिति (वास्तविक जीवन में) हमेशा खराब चीजों का कारण नहीं बनती है।
डेविड रिचेर्बी

जवाबों:


14

गतिरोध का अर्थ कुछ विशिष्ट है: दो (या अधिक) प्रक्रियाएं हैं जो वर्तमान में एक दूसरे के इंतजार में अवरुद्ध हैं ।

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

निम्नलिखित उदाहरण पर विचार करें:

Process A                  Process B
lock X                     lock Y           # state is "unsafe"
                           unlock Y
lock Y                                      # state is back to "safe" (no deadlock this time.  We got lucky.)

आपके द्वारा दिए गए लिंक की धारा 7.5.1 में एक और दिलचस्प उदाहरण है :

12 टेप ड्राइव वाले सिस्टम पर विचार करें:

Process       Max Need       Current
P0:             10              5
P2:              9              3

यह एक असुरक्षित स्थिति है। लेकिन हम गतिरोध में नहीं हैं। वहाँ, उदाहरण के लिए, केवल 4 मुक्त ड्राइव है, इसलिए यदि P0 करता अनुरोध एक अतिरिक्त 5, और P2 करता अनुरोध एक अतिरिक्त 1, हम गतिरोध होगा, लेकिन यह अभी तक नहीं हुई। और P0 किसी भी अधिक ड्राइव का अनुरोध नहीं कर सकता है , लेकिन इसके बजाय पहले से मौजूद ड्राइव को मुफ्त कर सकता है। यह Max needकार्यक्रम के सभी संभावित निष्पादन से अधिक है, और यह उन निष्पादन में से एक नहीं हो सकता है जहां हमें P0 में सभी 10 ड्राइव की आवश्यकता है।


बहुत बहुत धन्यवाद सर! और मुझे अपनी अस्पष्ट पाठ्यपुस्तक से नफरत है ...
निंग

लेकिन मेरे कुछ सवाल भी हैं: (1) आपने कहा ["] मैक्स की ज़रूरत कार्यक्रम के सभी संभावित निष्पादन से अधिक है ["] , लेकिन आपने यह भी कहा था कि अगर P0 अतिरिक्त 5 का अनुरोध करता है, और P2 अनुरोध करता है एक अतिरिक्त 1, हम गतिरोध करेंगे [।] , जहां (1) का मतलब है कि अगर मैक्स की आवश्यकता नहीं है , तो यह गतिरोध होना संभव है, जबकि (2) का मतलब यह है कि गतिरोध कब होना चाहिए ?
निंग

क्या मेरा तर्क सही है ?: अगर P2 एक अतिरिक्त 1 का अनुरोध करता है और यह समाप्त हो जाता है , तो मुफ्त टेप बन जाते हैं (4 + 3 = 7), और चूंकि P1 अतिरिक्त 5 का अनुरोध करता है, इसलिए इसे प्राप्त किया जा सकता है, इसलिए कोई गतिरोध नहीं है। लेकिन अगर पी 2 खत्म नहीं होता है, तो गतिरोध तब भी होता है, जब पी 1 को समाप्त करने के लिए केवल 5 की आवश्यकता होती है, फिर भी 4 <5।
निंग

अंतिम उदाहरण के लिए: P0 अतिरिक्त 5 का अनुरोध करें, फिर 5 + 5 + 3 = 13> 12, इसलिए P0 को P2 का इंतजार करना है, गतिरोध उत्पन्न करने के लिए बस P2 को अतिरिक्त अनुरोध करने दें।
Bit_hcAl एल्गोरिथम

7

बस भटकने वाले तर्क क्या कह रहे थे, उस पर पर्दाफाश करना।

कहें कि मेरे पास दो धागे हैं जो दोनों को एक्स और वाई तक पहुंच की आवश्यकता है, और गतिरोध को ठीक करने के लिए कोई सिंक्रनाइज़ेशन और कोई तंत्र नहीं है। यह असुरक्षित है, क्योंकि एक एक्स और दूसरे वाई को बंद कर सकता है और फिर न ही आगे बढ़ सकता है। लेकिन इसकी गारंटी नहीं है।

Thread 1                    Thread 2
Lock X                      
Lock Y
OS Interrupts Thread 1 and passes control to Thread 2
                            Unable to lock needed resources.
OS Interrupts Thread 2 and passes control to Thread 1
Unlock X                    
Unlock Y                    
                            Lock Y
                            Lock X
 ....

इस परिदृश्य में गतिरोध नहीं आया, लेकिन यह हो सकता है। थ्रेडिंग कार्य करने के तरीके के कारण, कोई सेट प्रवाह नहीं है। OS थ्रेडिंग को नियंत्रित करता है और इसलिए यह निम्न जैसा कुछ हो सकता है:

Thread 1                    Thread 2
Lock X        
OS Interrupts Thread 1 and passes control to Thread 2
                            Lock Y              
DEADLOCK Thread 1 needs Y, Thread 2 needs X. Neither knows to back down and simply waits.

1

सुरक्षित स्थिति सुनिश्चित करने के लिए गतिरोध मुक्त है, लेकिन यदि आप गतिरोध को रोकने के लिए सभी आवश्यकताओं को पूरा नहीं कर सकते हैं तो यह हो सकता है। उदाहरण के लिए, यदि थ्रेड ए शुरू होने पर दो धागे गतिरोध में गिर सकते हैं, तो थ्रेड बी, लेकिन जब वे विपरीत शुरू करते हैं (बी, ए) वे ठीक काम करेंगे - मुझे लगता है कि बी अच्छे हैं;) सिस्टम की स्थिति असुरक्षित है, लेकिन भाग्यशाली शुरुआती अनुक्रम के साथ यह काम कर रहा होगा। कोई गतिरोध नहीं है, लेकिन यह संभव है। यदि आप उन्हें हाथ से भी सिंक्रनाइज़ करते हैं - अच्छे क्रम में शुरू करें - यह खतरनाक है - किसी कारण से वे आपको निकाल नहीं सकते हैं जैसा कि आप चाहते हैं - सिस्टम अभी भी असुरक्षित है (संभावित गतिरोध के कारण) लेकिन इसकी संभावना कम है। जारी रखने के बाद थ्रेडिंग या इंटरपर्ट जैसी कुछ बाहरी घटनाओं के मामले में यह विफल हो जाएगा।

आपको महसूस करना होगा - गतिरोध से बचने के लिए सुरक्षित स्थिति पर्याप्त स्थिति है, लेकिन असुरक्षित केवल निस्सारिक स्थिति है। अभी सिर से बाहर कोड लिखना कठिन है, लेकिन मैं कुछ खोज सकता हूं। मैंने Ada में कोड का सामना किया था कि 99/100 बार से अधिक यह पूरी तरह से कई हफ्तों के लिए काम कर रहा था (और फिर सर्वर फिर से गतिरोध के कारण बंद नहीं हुआ) लेकिन एक समय में यह गतिरोध की स्थिति में कई सेकंड के बाद दुर्घटनाग्रस्त हो गया था।

मुझे विभाजन की तुलना करके कुछ आसान उदाहरण जोड़ते हैं: यदि आपका फ़ंक्शन c / d को विभाजित करता है और परिणाम देता है, तो यह जाँच किए बिना कि क्या d 0 बराबर है, शून्य त्रुटि से विभाजन हो सकता है, इसलिए कोड असुरक्षित है (समान नामकरण इच्छित), लेकिन जब तक आप ऐसा विभाजन करते हैं, सब कुछ ठीक है, लेकिन सैद्धांतिक विश्लेषण कोड असुरक्षित होने के बाद और अपरिभाषित व्यवहार में पड़ सकता है जो ठीक से नहीं संभाला जाता है।


0

इस पर मेरी समझ है (कृपया मुझे गलत होने पर सही करें): (ए) यदि गतिरोध है, तो इसका मतलब है कि एक चक्र मौजूद है (आवश्यक स्थिति में से एक) (बी) एक चक्र गतिरोध के लिए अनिवार्य शर्त है (एकल और बहु ​​दोनों के लिए) उदाहरण के संसाधन)

तो हम अब साबित कर सकते हैं कि एक चक्र मौजूद है जो गतिरोध का कारण नहीं बन सकता है, चक्र के साथ असुरक्षित स्थिति आप यहाँ देख सकते हैं कि एक चक्र मौजूद है जिसका अर्थ है कि एक असुरक्षित अवस्था पाई जाती है, लेकिन इससे संसाधन गतिरोध उत्पन्न नहीं हो सकता है क्योंकि चक्र में भाग लेने वाले को तोड़ सकते हैं। जैसे ही प्रक्रिया P3 समाप्त हो जाती है और इसे जारी करती है (याद रखें P3 कोई निर्भरता नहीं है या किसी अन्य संसाधन की प्रतीक्षा नहीं कर रहा है)।


2
साइट पर आपका स्वागत है! एक छोटी सी बात: लिखित अंग्रेजी में "नहीं हो सकता है" वाक्यांश से बचना सबसे अच्छा है, क्योंकि यह स्पष्ट नहीं है कि इसका अर्थ "नहीं होना चाहिए" ("आप यहां पार्क नहीं कर सकते हैं") या "नहीं हो सकता है" ("आप इस फिल्म का आनंद नहीं ले सकते हैं" । ")
डेविड रिचरबी

0

एक तुच्छ असुरक्षित स्थिति: थ्रेड 1 लॉक A लेता है, फिर B लॉक करता है, फिर दोनों को अनलॉक करता है। थ्रेड 2 लॉक B लेता है, फिर A को लॉक करता है, फिर दोनों को अनलॉक करता है।

यह केवल एक गतिरोध पैदा करेगा यदि थ्रेड 2 केवल थ्रेड 1 के बीच B को लॉक A लेता है और लॉक B लेने की कोशिश कर रहा है, या थ्रेड 1, थ्रेड A के बीच लॉक A लेता है, केवल लॉक B ले रहा है और लॉक A लेने की कोशिश कर रहा है।

यदि थ्रेड 1 और थ्रेड 2 एक घंटे में एक बार अनियमित रूप से करते हैं, और समय का एक माइक्रोसेकंड गैप है जो वास्तव में गतिरोध पैदा करेगा। यह ग्राहकों के हाथ में एक बहुत लंबे समय तक चल सकता है जब तक कि अंत में आपको संयोग से गतिरोध न हो।

अपनी आँखें बंद करके एक गली में चलें। यह असुरक्षित है। लेकिन आप हमेशा मारे नहीं जाते।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.