विषय-सूचि
प्रोसेस सिंक्रोनाइजेशन क्या है? (process synchronization in hindi)
ऑपरेटिंग सिस्टम में सिंक्रोनाइजेशन के आधार पर प्रोसेस को दो भागों में बांटा गया है:
- इंडिपेंडेंट प्रोसेस: इसमें एक प्रोसेस का execution दूसरे प्रोसेस के execution पर कोई असर नहीं डालता।
- कोआपरेटिव प्रोसेस: इसमें एक प्रोसेस के execution का दूसरे प्रोसेस के execution पर असर पड़ता है।
इसकी विस्तार से चर्चा हम सबसे अंत वाले सेक्शन में करेंगे।
क्रिटिकल सेक्शन प्रॉब्लम (critical section problem)
रिटिकल सेक्शन एक ऐसा कोड सेगमेंट है जिसे एक समय में सिर्फ एक प्रोसेस द्वारा ही एक्सेस किया जा सकता है। क्रिटिकल सेक्शन शेयर्ड वेरिएबल को रखता है जिन्हें डाटा वेरिएबल की निरंतरता को मेंटेन रखने के लिए सिंक्रोनाइज करना जरूरी होता है।
एंट्री सेक्शन में प्रोसेस क्रिटिकल सेक्शन में एंट्री के लिए निवेदन करता है।
क्रिटिकल सलूशन प्रॉब्लम का कोई भी हल इन तीन जरूरतों को जरूर संतुष्ट करना चाहिए:
- Mutual Exclusion : अगर कोई प्रोसेस अपने क्रिटिकल सेक्शन में एक्सीक्यूट हो रहा है, तो क्रिटिकल सेक्शन में किसी और प्रोसेस को एक्सीक्यूट होने की अनुमति नहीं दी जा सकती।
- Progress : अगर क्रिटिकल सेक्शन में कोई भी प्रोसेस नहीं है तो बहार से कोई भी प्रोसेस इसे क्रिटिकल सेक्शन में जाने से नहीं रोक सकता।
- Bounded Waiting : मान लीजिये किसी प्रोसेस ने क्रिटिकल सेक्शन में आने की अनुमति मांगी और इस से पहले कि उसे परमिशन दिया जाये, एक bound होना चाहिए जो ये तय करे कि कितनी बार कोई प्रोसेस क्रिटिकल सेक्शन में इंटर कर सकता है।
Peterson’s सलूशन
ये क्रिटिकल सेक्शन प्रॉब्लम के लिए एक क्लासिकल सॉफ्टवेर आधारित हल है।
Peterson’s सलूशन में दो शेयर्ड वेरिएबल होते हैं:
- boolean flag[i] : इसे FALSE इनिशियलाइज़ किया जाता है, शुरुआत में कोई भी क्रिटिकल सेक्शन में नहीं जाना चाहता।
- int turn : ऐसा प्रोसेस जिसके क्रिटिकल सेक्शन में आने की बारी है।
Peterson’s सलूशन ये तीन शर्तों पर काम करता है:
- म्यूच्यूअल एक्सक्लूशन की गारंटी दी जाती है क्योंकि एक समय पर केवल एक प्रोसेस ही क्रिटिकल सेक्शन का एक्सेस पा सकता है।
- प्रोग्रेस की भी गारंटी दी जाती है क्योंकि क्रिटिकल सेक्शन के बाहर के प्रोसेस किसी अन्य प्रोसेस को क्रिटिकल सेक्शन में एंट्री लेने से नहीं रोकते हैं।
- bounded वेटिंग को रखा जाता है ताकि सभी प्रोसेस को सही मौक़ा मिले।
Peterson’s सलूशन की खामियां
- इसमें बिजी वेटिंग की समस्या आती है।
- ये दो प्रोसेस तक ही सीमित होता है।
TestAndSet
TestAndSet सिंक्रोनाइजेशन की समस्या का एक हार्डवेयर सलूशन है। इसमें एक शेयर्ड लॉक वेरिएबल होता है जो 0 या 1 में से कोई एक मान ले सकता है।
0 Unlock 1 Lock
क्रिटिकल सेक्शन में एंट्री लेने से पहले एक प्रोसेस लॉक के बारे में पता करता है। अगर वो लॉक्ड है तो वो तब तक इन्तजार करता रहता है जब तक वो फ्री न हो जाये। अगर वो लॉक्ड नहीं है तो वो लॉक लेता है और क्रिटिकल सेक्शन को एक्सीक्यूट करता है।
TestAndSet में म्यूच्यूअल एक्सक्लूशन और प्रोग्रेस को preserve किया जाता है लेकिन bounded वेटिंग को प्रेसेर्वे नहीं किया जा सकता।
प्रश्न: enter_CS() and leave_CS() फंक्शन को किसी प्रोसेस के क्रिटिकल सेक्शन में implement करने के लिए realize किया जाता है और निम्नलिखित टेस्ट सेट इंस्ट्रक्शन का प्रयोग होता है:
void enter_CS(X) { while test-and-set(X) ; } void leave_CS(X) { X = 0; }
उपर वाले सलूशन में X एक मेमोरी लोकेशन है जो CS से जुदा है और उसे 0 इनिशियलाइज़ किया गया है। अब निम्नलिखित वाक्यों को ध्यान से देखिये:
I. CS समस्या के लिए उपर दिया गया सलूशन डेडलॉक से फ्री है।
II. ये सलूशन स्टारवेशन से भी फ्री है।
III. यहाँ प्रोसेस CS में FIFO आर्डर में इंटर करते हैं।
IV. एक समय पर एक से ज्यादा प्रोसेस CS में इंटर कर सकते हैं।
अब उपर वाले वाक्यों में कौन से सही हैं:
(A) I
(B) II and III
(C) II and IV
(D) IV
हल: उपर वाला एक सिंपल टेस्ट सेट सलूशन है जो बस ये सुनिश्चित करता है कि डेडलॉक नहीं हो। लेकिन ये स्टारवेशन से बचने के लिए या FIFO क्रम में आने के लिए किसी भी क्यू का इस्तेमाल नहीं करता। इसीलिए स्टेटमेंट I सही है। उत्तर (A) सही होगा।
Seamaphores
Semaphore एक इन्टिजर वेरिएबल है, जिसे केवल दो ऑपरेशन द्वारा ही एक्सेस किया जा सकता है: wait() और signal().
कुल दो प्रकार के semaphores होते हैं: बाइनरी Semaphores और काउंटिंग Semaphores
बाइनरी seamaphores
ये केवल या तो 0 हो सकते हैं नहीं तो 1. इन्हें म्यूटेक्स लॉक के नाम से भी जाना जाता है क्योंकि लॉक म्यूच्यूअल एक्सक्लूशन की सुविधा दे सकते हैं। सभी प्रोसेस समान म्यूटेक्स semaphore का प्रयोग करते हैं जिसे 1 से इनिशियलाइज़ किया जाता है। इसके बाद किसी प्रोसेस को तब तक इन्तजार करना पड़ता है जब तक कि लॉक 0 न हो जाये। अब प्रोसेस म्यूटेक्स seamaphore को 1 बना सकता है और फिर अपना क्रिटिकल सेक्शन शुरू कर सकता है।
जब ये अपना क्रिटिकल सेक्शन पूरा करता है तब ये म्यूटेक्स seamaphore के मान को फिर से 0 रिसेट कर सकता है ताकि अब कोई और प्रोसेस क्रिटिकल सेक्शन में एंट्री ले सके।
काउंटिंग seamaphore
ये किसी डोमेन में बांध कर नहीं रहते और कोई भी मान हो सकते हैं। इन्हें उन रिसोर्स को कण्ट्रोल एक्सेस करने के लिए इनका प्रयोग किया जा सकता है जिनके एक समय में एक से ज्यादा एक्सेस कि सीमितता है। Seamaphore को उस संसाधन के instances की संख्या तक इनिशियलाइज़ किया जा सकता है। जब भी कोई प्रोसेस उस संसाधन को प्रयोग करना चाहता है, ये इस बात की जांच करता है कि बचे हुए instances की संख्या 0 से ज्यादा है या नहीं।
इसका अर्थ ये हुआ कि इस बात कि जांच होती है कि प्रोसेस का इंस्टैंस अभी उपलब्ध है या नहीं। इसके बाद प्रोसेस अपने क्रिटिकल सेक्शन में इंटर कर सकता है लेकिन इसके लिए उसे काउंटिंग seamaphore का मान 1 से घटाना होगा। जब रिसोर्स के इंस्टैंस का प्रयोग कर के प्रोसेस ख़त्म हो जाएगा तब ये क्रिटिकल सेक्शन को छोड़ सकता है लेकिन उसके लिए इसे रिसोर्स में उपलब्ध इंस्टैंस कीसंख्या में 1 जोड़ना होगा।
प्रोसेस सिंक्रोनाइजेशन: मॉनीटर्स (Monitors)
मॉनीटर्स क्या है?
मॉनिटर प्रोसेस सिंक्रोनाइजेशन को प्राप्त करने का एक रास्ता है। मॉनिटर को प्रोग्रामिंग लैंग्वेज द्वारा सपोर्ट किया जाता है ताकि ये एक से ज्यादा प्रोसेस के बीच म्यूच्यूअल एक्सक्लूशन को हासिल करे। उदाहरण के तौर पर जावा synchronized मेथड। जावा wait() और notify() – ये दो तरह के कांस्त्रुक्ट की सुविधा देता है।
1. ये कंडीशन वेरिएबल और procedures का एक समूह होता है जो एक ख़ास किस्म के module या पैकेज में साथ में कंबाइन किये हुए होते हैं।
2. मॉनिटर के बाहर रन हो रहे प्रोसेस में से कोई भी मॉनिटर के इंटरनल वेरिएबल को एक्सेस नहीं कर सकता लेकिन मॉनिटर के प्रोसीजर को कॉल कर सकता है।
3. Only one process at a time can execute code inside monitors. एक बार में मॉनिटर के अंदर सिर्फ एक कोड ही एक्सीक्यूट हो सकता है।
मॉनिटर का सिंटेक्स
condition x, y; //वेरिएबल को डिक्लेअर करने के लिए
Wait operation
x.wait() : ऐसे प्रोसेस जो किसी भी कंडीशन वेरिएबल पर वेट ऑपरेशन को परफॉर्म कर रहे हों उन्हें सुस्पेंद कर दिया जाता है। ससपेंड किये हुए उस प्रोसेस को उस कंडीशन वेरिएबल के ब्लाक क्यू में डाल दिया जाता है।
नोट: हर कंडीशन वरिक्ब्ले का अपना यूनिक ब्लाक क्यू होता है।
सिग्नल ऑपरेशन
x.signal(): जब कोई प्रोसेस किसी कंडीशन वेरिएबल पर सिग्नल ऑपरेशन करता है तब ब्लाक किये गये सारे प्रोसेस में से किसी एक को मौक़ा दिया जाता है।
If (x block queue empty) // सिग्नल को इगनोरे करता है। else // ब्लाक क्यू में से किसी एक प्रोसेस को रिज्यूम कर देता है।
प्रोसेस के प्रकार (Types of process in os in hindi)
एक प्रोसेस दो प्रकार के हो सकते हैं:- इंडिपेंडेंट प्रोसेस और को-ऑपरेटिंग प्रोसेस
एक इंडिपेंडेंट प्रोसेस पर किसी और प्रोसेस के एक्सीक्यूट होने का कोई प्रभाव नहीं पड़ता जाकी को-ऑपरेटिंग प्रोसेस एक दुसरे के एक्सीक्यूट होने से खुद पर असर डाल सकते हैं।
अब आप सोंच रहे होंगे कि जो प्रोसेस स्वतंत्र रूप से एक्सीक्यूट हो रहे हैं वो काफी efficient होते होंगे लेकिन असल में देखा जाये तो बहुत से ऐसे मौके आते हैं जहां को-ऑपरेटिव प्रकृति को कम्प्यूटेशनल गति, convenience और modularity बढाने के लिए प्रयोग में लाया जाता है।
इंटर प्रोसेस कम्युनिकेशन (IPC) एक ऐसा मैकेनिज्म है जो प्रोसेस को एक दूसरे से संवाद करने की अनुमति देता है और उनके एक्शन को सिंक्रोनाइज करता है। इन प्रोसेस के बीच का संचार को उनके बीच सहकारिता के मेथड के रूप में देखा जाता है।
इस लेख से सम्बंधित यदि आपका कोई भी सवाल या सुझाव है, तो आप उसे नीचे कमेंट में लिख सकते हैं।
Thank you sir
Thanks sir ji
Thanx sir jee
Thanks a lot