एक गतिरोध तब होता है जब दो या दो से अधिक प्रक्रियाओं को उनके निष्पादन को पूरा करने के लिए कुछ संसाधनों की आवश्यकता होती है जो दूसरी प्रक्रिया द्वारा आयोजित की जाती है।
उपरोक्त आरेख में, प्रक्रिया 1 में संसाधन 1 है और संसाधन 2 की आवश्यकता है। इसी प्रकार प्रक्रिया 2 में संसाधन 2 है और संसाधन 1 की आवश्यकता है। इनमें से प्रत्येक प्रक्रिया को पूरा करने के लिए दूसरे के संसाधन की आवश्यकता होती है, लेकिन उनमें से कोई भी अपने संसाधनों को छोड़ने के लिए तैयार नहीं है। तो, प्रक्रिया 1 और प्रक्रिया 2 गतिरोध में हैं।
कॉफ़मैन की स्थिति
एक गतिरोध तभी होगा जब कॉफ़मैन की चार शर्तें सही हों। जरूरी नहीं कि ये शर्तें परस्पर अनन्य हों। वे हैं:
आपसी बहिष्करण
एक संसाधन होना चाहिए जो एक समय में केवल एक प्रक्रिया द्वारा आयोजित किया जा सके। नीचे दिए गए आरेख में, संसाधन R1 का एक ही उदाहरण है और यह केवल प्रक्रिया P1 द्वारा आयोजित किया जाता है।
रुको और रुको
एक प्रक्रिया कई संसाधनों को धारण कर सकती है और फिर भी अन्य प्रक्रियाओं से अधिक संसाधनों का अनुरोध कर सकती है जो उन्हें धारण कर रही हैं। नीचे दिए गए आरेख में, प्रक्रिया P1 में संसाधन R1 और R2 हैं और संसाधन R3 का अनुरोध कर रहा है जो प्रक्रिया P2 द्वारा आयोजित किया जाता है।
कोई छूट नहीं
किसी संसाधन को किसी प्रक्रिया से बलपूर्वक मुक्त नहीं किया जा सकता है। एक प्रक्रिया केवल स्वेच्छा से एक संसाधन जारी कर सकती है। नीचे दिए गए आरेख में, प्रक्रिया P1 संसाधन R3 को प्रक्रिया P2 से पूर्व-मुक्त नहीं कर सकता है। इसे तभी रिलीज़ किया जाएगा जब P2 इसका निष्पादन पूरा होने के बाद स्वेच्छा से इसे छोड़ देगा।
परिपत्र प्रतीक्षा
एक प्रक्रिया दूसरी प्रक्रिया द्वारा आयोजित संसाधन की प्रतीक्षा कर रही है, जो तीसरी प्रक्रिया द्वारा आयोजित संसाधन की प्रतीक्षा कर रही है और इसी तरह, जब तक अंतिम प्रक्रिया पहली प्रक्रिया द्वारा आयोजित संसाधन की प्रतीक्षा कर रही है। यह एक गोलाकार श्रृंखला बनाता है। उदाहरण के लिए:प्रक्रिया P1 को संसाधन R1 आवंटित किया गया है और यह संसाधन R2 का अनुरोध कर रहा है। इसी तरह, प्रक्रिया P2 को संसाधन R2 आवंटित किया गया है और यह संसाधन R1 का अनुरोध कर रहा है। यह एक गोलाकार प्रतीक्षा लूप बनाता है।
एक प्रक्रिया दूसरी प्रक्रिया द्वारा आयोजित संसाधन की प्रतीक्षा कर रही है, जो तीसरी प्रक्रिया द्वारा आयोजित संसाधन की प्रतीक्षा कर रही है और इसी तरह, जब तक अंतिम प्रक्रिया पहली प्रक्रिया द्वारा आयोजित संसाधन की प्रतीक्षा कर रही है। यह एक गोलाकार श्रृंखला बनाता है। उदाहरण के लिए:प्रक्रिया P1 को संसाधन R1 आवंटित किया गया है और यह संसाधन R2 का अनुरोध कर रहा है। इसी तरह, प्रक्रिया P2 को संसाधन R2 आवंटित किया गया है और यह संसाधन R1 का अनुरोध कर रहा है। यह एक गोलाकार प्रतीक्षा लूप बनाता है।
गतिरोध का पता लगाना
संसाधन अनुसूचक एक गतिरोध का पता लगा सकता है क्योंकि यह विभिन्न प्रक्रियाओं के लिए आवंटित सभी संसाधनों का ट्रैक रखता है। गतिरोध का पता चलने के बाद, इसे निम्न विधियों का उपयोग करके हल किया जा सकता है:
- गतिरोध में शामिल सभी प्रक्रियाओं को समाप्त कर दिया गया है। यह एक अच्छा तरीका नहीं है क्योंकि प्रक्रियाओं द्वारा की गई सभी प्रगति नष्ट हो जाती है।
- संसाधनों को कुछ प्रक्रियाओं से मुक्त किया जा सकता है और गतिरोध के हल होने तक दूसरों को दिया जा सकता है।
गतिरोध निवारण
गतिरोध उत्पन्न होने से पहले इसे रोकना अनिवार्य है। इसलिए, सिस्टम यह सुनिश्चित करने के लिए निष्पादित होने से पहले प्रत्येक लेनदेन की सख्ती से जांच करता है कि यह गतिरोध का कारण नहीं बनता है। यदि इस बात की भी संभावना है कि किसी लेन-देन से गतिरोध पैदा हो सकता है, तो इसे कभी भी निष्पादित करने की अनुमति नहीं है।
कुछ गतिरोध निवारण योजनाएं हैं जो यह सुनिश्चित करने के लिए टाइमस्टैम्प का उपयोग करती हैं कि गतिरोध उत्पन्न नहीं होता है। ये हैं -
- प्रतीक्षा करें - योजना समाप्त करें
प्रतीक्षा-मृत्यु योजना में, यदि कोई लेन-देन T1 लेन-देन T2 द्वारा रखे गए संसाधन के लिए अनुरोध करता है, तो निम्न दो संभावनाओं में से एक हो सकती है:
- TS(T1)
TS(T1)> TS(T2) - यदि T1 T2 से छोटा है अर्थात T1 T2 के बाद सिस्टम में आया है, तो T1 को मार दिया जाता है। इसे बाद में उसी टाइमस्टैम्प के साथ फिर से शुरू किया जाता है।
- TS(T1)
- घाव - प्रतीक्षा योजना
घाव-प्रतीक्षा योजना में, यदि कोई लेन-देन T1 लेन-देन T2 द्वारा रखे गए संसाधन के लिए अनुरोध करता है, तो निम्न दो संभावनाओं में से एक हो सकती है:
- TS(T1)
TS(T1)> TS(T2) - यदि T1 T2 से छोटा है, अर्थात T1 T2 के बाद सिस्टम में आया है, तो उसे उस संसाधन की प्रतीक्षा करने की अनुमति है जो T2 के निष्पादन के पूरा होने पर मुक्त हो जाएगा।
- TS(T1)
गतिरोध से बचाव
गतिरोध होने के बाद उपाय करने के बजाय गतिरोध से बचना बेहतर है। गतिरोध से बचने के लिए ग्राफ की प्रतीक्षा का उपयोग किया जा सकता है। हालांकि यह केवल छोटे डेटाबेस के लिए उपयोगी है क्योंकि यह बड़े डेटाबेस में काफी जटिल हो सकता है।
ग्राफ़ की प्रतीक्षा करें
ग्राफ की प्रतीक्षा संसाधनों और लेनदेन के बीच संबंध को दर्शाती है। यदि कोई लेन-देन किसी संसाधन का अनुरोध करता है या यदि उसके पास पहले से कोई संसाधन है, तो यह ग्राफ़ की प्रतीक्षा में बढ़त के रूप में दिखाई देता है। यदि ग्राफ की प्रतीक्षा में एक चक्र है, तो सिस्टम में गतिरोध हो सकता है, अन्यथा नहीं।
डेडलॉक पर ध्यान न दें - शुतुरमुर्ग एल्गोरिथम
शुतुरमुर्ग एल्गोरिथ्म का मतलब है कि गतिरोध को आसानी से नजरअंदाज कर दिया जाता है और यह माना जाता है कि यह कभी नहीं होगा। ऐसा इसलिए किया जाता है क्योंकि कुछ प्रणालियों में गतिरोध को संभालने की लागत केवल इसे अनदेखा करने की तुलना में बहुत अधिक होती है क्योंकि ऐसा बहुत कम होता है। इसलिए, यह मान लिया जाता है कि गतिरोध कभी नहीं होगा और यदि ऐसा होता है तो सिस्टम रीबूट हो जाता है।