प्रक्रिया Syncह्रोनाइजेशन: ओएस में क्रिटिकल सेक्शन समस्या
⚡ स्मार्ट सारांश
प्रक्रिया Syncक्रोननाइजेशन वह प्रक्रिया है जिसमें प्रक्रियाओं के निष्पादन को इस प्रकार समन्वित किया जाता है कि कोई भी दो प्रक्रियाएं एक ही समय में एक ही साझा डेटा या संसाधन तक न पहुंच सकें। यह क्रिटिकल सेक्शन में प्रवेश को नियंत्रित करके बहु-प्रक्रिया प्रणालियों में डेटा असंगति को रोकता है।

प्रक्रिया क्या है? Syncतुल्यकालन?
प्रक्रिया Syncतुल्यकालन प्रक्रियाओं के निष्पादन को इस तरह से समन्वित करने का कार्य है कि किसी भी दो प्रक्रियाओं की एक ही साझा डेटा और संसाधनों तक पहुंच न हो सके।
इसकी विशेष रूप से आवश्यकता मल्टी-प्रोसेस सिस्टम में होती है जब कई प्रोसेस एक साथ चल रहे होते हैं, और एक से अधिक प्रोसेस एक ही समय में एक ही साझा संसाधन या डेटा तक पहुंच प्राप्त करने का प्रयास करते हैं।
इससे साझा डेटा में असंगति उत्पन्न हो सकती है। इसलिए, एक प्रक्रिया द्वारा किया गया परिवर्तन अन्य प्रक्रियाओं द्वारा उसी साझा डेटा तक पहुँचने पर आवश्यक रूप से प्रतिबिंबित नहीं होता है। इस प्रकार की डेटा असंगति से बचने के लिए, प्रक्रियाओं को एक दूसरे के साथ सिंक्रनाइज़ करना आवश्यक है।
प्रक्रिया कैसे Syncह्रोनाइजेशन काम करता है?
उदाहरण के लिए, प्रोसेस A किसी मेमोरी लोकेशन में डेटा बदल रहा है, जबकि दूसरा प्रोसेस B उसी मेमोरी लोकेशन से डेटा पढ़ने की कोशिश कर रहा है। वही मेमोरी स्थान। इस बात की बहुत अधिक संभावना है कि दूसरी प्रक्रिया द्वारा पढ़ा गया डेटा ग़लत होगा।
एक कार्यक्रम के अनुभाग
आलोचनात्मक अनुभाग के चार आवश्यक तत्व इस प्रकार हैं:
- प्रवेश अनुभाग: यह प्रक्रिया का वह भाग है जो किसी विशेष प्रक्रिया के प्रवेश का निर्णय करता है।
- महत्वपूर्ण अनुभाग: यह भाग एक प्रक्रिया को साझा चर में प्रवेश करने और उसे संशोधित करने की अनुमति देता है।
- बाहर निकलें अनुभाग: एग्जिट सेक्शन, एंट्री सेक्शन में प्रतीक्षा कर रही अन्य प्रक्रियाओं को क्रिटिकल सेक्शन में प्रवेश करने की अनुमति देता है। यह यह भी जांचता है कि किसी प्रक्रिया का निष्पादन पूरा हो जाने पर उसे इस सेक्शन के माध्यम से हटाया जाना चाहिए या नहीं।
- शेष भाग: अन्य सभी भाग Codeवे भाग जो महत्वपूर्ण, प्रवेश और निकास अनुभाग में नहीं हैं, उन्हें शेष अनुभाग के रूप में जाना जाता है।
क्रिटिकल सेक्शन समस्या क्या है?
क्रिटिकल सेक्शन कोड का वह खंड है जिसे किसी विशिष्ट समय पर केवल एक ही प्रोसेस द्वारा एक्सेस किया जा सकता है। इस खंड में साझा डेटा संसाधन होते हैं जिन्हें अन्य प्रोसेसों द्वारा एक्सेस करना आवश्यक होता है।
- महत्वपूर्ण अनुभाग में प्रविष्टि wait() फ़ंक्शन द्वारा नियंत्रित की जाती है, और इसे P() के रूप में दर्शाया जाता है।
- किसी महत्वपूर्ण खंड से निकास को signal() फ़ंक्शन द्वारा नियंत्रित किया जाता है, जिसे V() के रूप में दर्शाया जाता है।
क्रिटिकल सेक्शन में केवल एक ही प्रक्रिया निष्पादित की जा सकती है। अपने क्रिटिकल सेक्शन को निष्पादित करने के लिए प्रतीक्षा कर रही अन्य प्रक्रियाओं को तब तक प्रतीक्षा करनी पड़ती है जब तक कि वर्तमान प्रक्रिया अपना निष्पादन पूरा नहीं कर लेती।
क्रिटिकल सेक्शन के लिए नियम
महत्वपूर्ण अनुभाग को तीनों नियमों का पालन करना होगा:
- आपसी बहिष्कार: म्यूचुअल एक्सक्लूजन एक विशेष प्रकार का बाइनरी सेमाफोर है जिसका उपयोग साझा संसाधन तक पहुंच को नियंत्रित करने के लिए किया जाता है। इसमें विस्तारित प्राथमिकता व्युत्क्रम समस्याओं से बचने के लिए प्राथमिकता विरासत तंत्र शामिल है। एक समय में इसके महत्वपूर्ण खंड में एक से अधिक प्रक्रिया निष्पादित नहीं हो सकती है।
- प्रगति: इस समाधान का उपयोग तब किया जाता है जब क्रिटिकल सेक्शन में कोई भी प्रक्रिया मौजूद न हो और कोई उसमें प्रवेश करना चाहता हो। तब शेष सेक्शन में मौजूद न होने वाली प्रक्रियाओं को सीमित समय में यह तय करना चाहिए कि कौन प्रवेश करेगा।
- बाध्य प्रतीक्षा: जब कोई प्रक्रिया क्रिटिकल सेक्शन में प्रवेश करने का अनुरोध करती है, तो उस सेक्शन में प्रवेश करने वाली प्रक्रियाओं की संख्या पर एक विशिष्ट सीमा होती है। इसलिए, जब यह सीमा पूरी हो जाती है, तो सिस्टम को उस प्रक्रिया के क्रिटिकल सेक्शन में प्रवेश करने के अनुरोध को स्वीकार करना होगा।
महत्वपूर्ण अनुभाग के समाधान
इस प्रक्रिया में Syncमानकीकरण में, महत्वपूर्ण खंड मुख्य भूमिका निभाता है ताकि समस्या का समाधान किया जा सके।
यहां क्रांतिक खंड समस्या को हल करने के लिए कुछ व्यापक रूप से प्रयुक्त विधियां दी गई हैं।
पीटरसन समाधान
पीटरसन का समाधान क्रिटिकल सेक्शन समस्याओं के लिए व्यापक रूप से उपयोग किया जाने वाला समाधान है। इस एल्गोरिदम को पीटरसन नामक एक कंप्यूटर वैज्ञानिक ने विकसित किया था, इसलिए इसे पीटरसन का समाधान कहा जाता है।
इस समाधान में, जब कोई प्रक्रिया क्रिटिकल अवस्था में निष्पादित होती है, तो दूसरी प्रक्रिया केवल शेष कोड को निष्पादित करती है, और विपरीत हो सकता है। यह विधि यह सुनिश्चित करने में भी मदद करती है कि किसी विशिष्ट समय पर केवल एक ही प्रक्रिया क्रिटिकल सेक्शन में चले।
उदाहरण
PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
- मान लीजिए कि N प्रक्रियाएँ (P1, P2, … PN) हैं और प्रत्येक प्रक्रिया को किसी न किसी समय क्रिटिकल सेक्शन में प्रवेश करने की आवश्यकता होती है।
- N आकार का एक FLAG[] ऐरे रखा जाता है, जो डिफ़ॉल्ट रूप से false होता है। इसलिए, जब भी किसी प्रोसेस को क्रिटिकल सेक्शन में प्रवेश करना होता है, तो उसे अपना फ्लैग true सेट करना पड़ता है। उदाहरण के लिए, यदि Pi क्रिटिकल सेक्शन में प्रवेश करना चाहता है, तो वह FLAG[i]=TRUE सेट करेगा।
- TURN नामक एक अन्य वेरिएबल उस प्रक्रिया संख्या को इंगित करता है जो वर्तमान में सीएस में प्रवेश करने की प्रतीक्षा कर रही है।
- जो प्रक्रिया महत्वपूर्ण खंड में प्रवेश करती है, बाहर निकलते समय वह तैयार प्रक्रियाओं की सूची में से TURN को किसी अन्य संख्या में बदल देती है।
- उदाहरण: बारी 2 है, तो P2 क्रिटिकल सेक्शन में प्रवेश करता है और बाहर निकलते समय बारी = 3 होती है और इसलिए P3 प्रतीक्षा लूप से बाहर निकल जाता है।
Syncह्रोनाइजेशन हार्डवेयर
कभी-कभी क्रिटिकल सेक्शन की समस्याओं का समाधान हार्डवेयर द्वारा भी किया जाता है। कुछ ऑपरेटिंग सिस्टम लॉक फ़ंक्शनैलिटी प्रदान करते हैं, जिसमें एक प्रोसेस क्रिटिकल सेक्शन में प्रवेश करते समय लॉक प्राप्त कर लेता है और उससे बाहर निकलने के बाद लॉक को रिलीज़ कर देता है।
इसलिए जब कोई दूसरी प्रक्रिया क्रिटिकल सेक्शन में प्रवेश करने की कोशिश कर रही होती है, तो वह प्रवेश नहीं कर पाती क्योंकि वह लॉक हो चुकी होती है। वह ऐसा तभी कर सकती है जब वह खुद लॉक हासिल करके मुक्त हो।
म्यूटेक्स ताले
Syncहार्डवेयर को सिंक्रनाइज़ करना हर किसी के लिए लागू करने का एक सरल तरीका नहीं है, इसलिए म्यूटेक्स लॉक नामक एक सख्त सॉफ्टवेयर विधि भी पेश की गई।
इस दृष्टिकोण में, कोड के प्रवेश अनुभाग में, महत्वपूर्ण अनुभाग के अंदर उपयोग किए गए महत्वपूर्ण संसाधनों पर एक लॉक प्राप्त किया जाता है। निकास अनुभाग में उस लॉक को रिलीज़ किया जाता है।
Semaphore उपाय
Semaphore यह एक ऐसा चर है जो ऋणात्मक नहीं होता और थ्रेड्स के बीच साझा किया जाता है। यह क्रिटिकल सेक्शन समस्या का एक अन्य एल्गोरिदम या समाधान है। यह एक सिग्नलिंग तंत्र है, और एक थ्रेड जो सेमाफोर पर प्रतीक्षा कर रहा है, उसे दूसरे थ्रेड द्वारा संकेत दिया जा सकता है।
यह दो परमाणु संक्रियाओं का उपयोग करता है: 1) प्रतीक्षा करना, और 2) प्रक्रिया तुल्यकालन के लिए संकेत देना।
उदाहरण
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


