Deadlock होने की जो conditions होती है उनको हम कुछ हद तक prevent कर सकते है. ज्यादातर हम उनको prevent नहीं कर सकते है क्योंकि हमारे resources limited होते है. कुछ रिसोर्स sharable होते है तथा कुछ non sharable होते है। यदि हम इन 4 conditions में से किसी एक को prevent कर सकते हो तो सिस्टम में deadlock नहीं होगा।
- Mutual exclusion:- अगर हम resources को share कर सकते है तो हम mutual exclusion को prevent कर सकते है. अगर हमारे पास non sharable resources होते है जिन्हें share नहीं किया जा सकता है तो उस स्थिति में हम mutual exclusion को होने से नहीं रोक सकते. उदाहरण के लिए Printer एक non sharable resource है. इस स्थिति में mutual exclusion को prevent नहीं कर सकते. लेकिन अगर आपके पास sharable resource है तो आप उसे share करके mutual exclusion को रोक सकते है। जैसे:- मैमोरी को हम share कर सकते है।
2. Hold & wait:- अगर किसी process को, इसके execution से पहले ही, resource allocate कर दिया जाए तो हम hold & wait कंडीशन को होने से रोक सकते है. परन्तु इसकी हानि यह है कि इससे सिस्टम की utilization कम हो जाती है ।
उदाहरण के लिए किसी प्रोसेस को प्रिंटर की बाद में जरुरत है. और हम उसे पहले ही प्रिंटर allocate कर देते है. तो जब तक इसकी execution समाप्त नहीं हो जाती तब तक यह प्रिंटर block रहेगा और दूसरे प्रोसेस इसका प्रयोग इसके खाली समय में नहीं कर सकते. तथा इसकी दूसरी हानि यह है कि इसमें starvation होता है।
3. No preemption:- अगर किसी प्रोसेस ने resources को hold किया है और वह दूसरे resources का wait कर रहा है तो उस प्रोसेस से सभी resources को release कर दिया जाता है जिससे दूसरे प्रोसेस अपने execution को पूरा कर सकें। लेकिन कुछ resources जैसे:- printer, tape drivers को preempt नहीं किया जा सकता है।
4. Circular wait:- circular wait को रोकने के लिए, processes को resources केवल बढ़ते हुए क्रम में ही allocate कर सकते है। अर्थात् resources का एक क्रम होता है जिसके अनुसार ही processes को resources allocate किया जाता है ।
उदाहरण के लिए:- यदि प्रोसेस P2 को R6 रिसोर्स allocate किया गया है तो अगली बार P2 को R5, R4 या इससे नीचे के रिसोर्स allocate नहीं किये जायेंगे. केवल R6 से उपर के रिसोर्स ही P2 को allocate किये जायेंगे । परन्तु इसकी हानि यह है कि इससे रिसोर्स utilization बहुत ही कम हो जाता है।
Deadlock prevention के प्रभाव:-
deadlock prevention से होने वाले प्रभाव निम्नलिखित है.
- इससे डिवाइस की utilization बहुत कम हो जाती है.
- इससे सिस्टम की प्रभाव क्षमता (throughput) बहुत कम हो जाता है.
Deadlock Avoidance
जैसा कि हम पढ़ चुके है कि deadlock prevention की algorithms अच्छी नहीं है जिससे resource utilization तथा system throughput कम हो जाता है. लेकिन हम डेडलॉक को avoid कर सकते है। deadlock avoidance अल्गोरिथम यह सुनिश्चित करती है कि processes कभी भी unsafe state में नहीं जाएगी।
इसमें दो states होती है:-
- Safe state
- Unsafe state
Safe state:- safe state वह state होती है जिसमें हम processes को एक safe sequence में execute करते है। इसमें प्रोसेस safe sequence में इस प्रकार exist होती है कि पहली प्रोसेस के पास execute होने के लिए पर्याप्त resources हों. और जब execution समाप्त हो जाएँ तो इस प्रोसेस के resources release होने के बाद अगली प्रोसेस के execution के लिए भी पर्याप्त resources हों।
Unsafe state:- अगर processes एक safe sequence में नहीं है तो वह unsafe state में होती है और unsafe state में डेडलॉक हो सकता है।
उदाहरण के लिए माना हमारे पास 11 tape drivers है.
processes | maximum required | current hold |
---|---|---|
P0 | 9 | 5 |
P1 | 4 | 2 |
P2 | 8 | 2 |
हमारी जो tape drivers की current hold है- 5+2+2=9
हमारे पास बची हुई हुए tape drivers है: 11-9=2.
सबसे पहले हम P0 को देखते है तो हम P0 को पहले execute नहीं कर सकते है क्योंकि उसे 4 और tape drivers की जरुरत है परन्तु हमारे पास 2 ही है. अब P1 को देखते है. P1 को 2 की जरुरत है तो हम इसे execute कर लेते है. अब इसके execution के पूरा होने के बाद यह 4 tape drivers को release करेगा.
अब हम P0 को execute करेंगे क्योंकि इसे 4 tape drivers की जरुरत है तो इसके execution के बाद यह 9 tape drivers को release करेगा. और फिर हम P2 को execute करेंगे, P2 को 6 की जरूरत है और हमारे पास 9 tape drivers है तो P2 भी execute हो जायेगा.
तो हमारी safe sequence होगी:-
P1, P0, P2