एचएमबी क्या है? Semaphore? गिनती, बाइनरी प्रकार उदाहरण के साथ
⚡ स्मार्ट सारांश
Semaphore ऑपरेटिंग सिस्टम में एक गैर-ऋणात्मक पूर्णांक चर होता है जो थ्रेड्स के बीच साझा किया जाता है और यह दो परमाणु संचालन, प्रतीक्षा और संकेत के माध्यम से साझा संसाधनों तक पहुंच का समन्वय करता है, जिससे प्रक्रिया तुल्यकालन के दौरान दौड़ की स्थिति को रोका जा सकता है।

एचएमबी क्या है? Semaphore?
Semaphore यह बस एक चर है जो गैर-नकारात्मक है और थ्रेड्स के बीच साझा किया जाता है। सेमाफोर एक सिग्नलिंग तंत्र है, और एक थ्रेड जो सेमाफोर पर प्रतीक्षा कर रहा है उसे दूसरे थ्रेड द्वारा संकेत दिया जा सकता है। यह दो परमाणु संचालन का उपयोग करता है, 1) प्रतीक्षा करें, और 2) Signal प्रक्रिया तुल्यकालन के लिए.
सेमाफोर या तो संसाधन तक पहुंच की अनुमति देता है या नहीं देता है, जो इस बात पर निर्भर करता है कि इसे कैसे सेट किया गया है।
की पहचान, की विशिष्टता Semaphore
यहां एक सेमाफोर की विशेषताएं दी गई हैं:
- यह एक ऐसा तंत्र है जिसका उपयोग कार्यों का समन्वयन प्रदान करने के लिए किया जा सकता है।
- यह एक निम्न-स्तरीय तुल्यकालन तंत्र है।
- Semaphore हमेशा एक गैर-ऋणात्मक पूर्णांक मान रखेगा.
- Semaphore परीक्षण संचालन और इंटरप्ट का उपयोग करके कार्यान्वित किया जा सकता है, जिसे फ़ाइल डिस्क्रिप्टर का उपयोग करके निष्पादित किया जाना चाहिए।
के प्रकार Semaphores
दो सामान्य प्रकार के सिग्नल इस प्रकार हैं:
- सेमाफोर की गिनती
- बाइनरी सेमाफोर
गिनती Semaphores
इस प्रकार की Semaphore यह एक ऐसी गणना का उपयोग करता है जो किसी कार्य को कई बार प्राप्त या मुक्त करने में सहायता करती है। यदि प्रारंभिक गणना = 0 है, तो गणना संकेत को अनुपलब्ध स्थिति में बनाया जाना चाहिए।
हालाँकि, यदि गिनती > 0 है, तो सेमाफोर उपलब्ध स्थिति में बनाया जाता है, और इसमें टोकन की संख्या इसकी गिनती के बराबर होती है।
द्विचर Semaphores
बाइनरी सेमाफोर, काउंटिंग सेमाफोर के काफी समान होते हैं, लेकिन इनका मान 0 और 1 तक सीमित होता है। इस प्रकार के सेमाफोर में, प्रतीक्षा क्रिया तभी काम करती है जब सेमाफोर = 1 हो, और सिग्नल क्रिया तभी सफल होती है जब सेमाफोर = 0 हो। इसे लागू करना काउंटिंग सेमाफोर की तुलना में आसान है।
इसका उदाहरण Semaphore
नीचे दिया गया प्रोग्राम एक चरण-दर-चरण कार्यान्वयन है, जिसमें सेमाफोर के उपयोग और घोषणा शामिल है।
Shared var mutex: semaphore = 1;
Process i
begin
.
.
P(mutex);
execute CS;
V(mutex);
.
.
End;
रुको और Signal Operaमें tion Semaphores
इन दोनों कार्यों का उपयोग कार्यान्वयन के लिए किया जाता है प्रक्रिया तुल्यकालनइस सेमाफोर ऑपरेशन का लक्ष्य पारस्परिक बहिष्करण प्राप्त करना है।
के लिए इंतजार Operaउत्पादन
इस प्रकार का सेमाफोर ऑपरेशन आपको क्रिटिकल सेक्शन में किसी कार्य की प्रविष्टि को नियंत्रित करने में मदद करता है। हालाँकि, यदि प्रतीक्षा का मान सकारात्मक है, तो प्रतीक्षा तर्क X का मान घट जाता है। नकारात्मक या शून्य मान के मामले में, कोई ऑपरेशन निष्पादित नहीं होता है। इसे P(S) ऑपरेशन भी कहा जाता है।
सेमाफोर मान कम होने के बाद, जो ऋणात्मक हो जाता है, कमांड को तब तक रोक कर रखा जाता है जब तक कि आवश्यक शर्तें पूरी नहीं हो जातीं।
P(S)
{
while (S<=0);
S--;
}
Signal आपरेशन
इस प्रकार की Semaphore ऑपरेशन का उपयोग किसी महत्वपूर्ण अनुभाग से किसी कार्य के बाहर निकलने को नियंत्रित करने के लिए किया जाता है। यह तर्क के मान को 1 से बढ़ाने में मदद करता है, जिसे V(S) के रूप में दर्शाया जाता है।
P(S)
{
while (S>=0);
S++;
}
गिनती Semaphore बनाम बाइनरी Semaphore
गिनती और बाइनरी सेमाफोर के बीच कुछ प्रमुख अंतर इस प्रकार हैं:
| गिनती Semaphore | द्विचर Semaphore |
| कोई पारस्परिक बहिष्कार नहीं | पारस्परिक बहिष्कार |
| कोई भी पूर्णांक मान | केवल 0 और 1 का मान |
| एक से अधिक स्लॉट | केवल एक स्लॉट |
| प्रक्रियाओं का एक सेट प्रदान करें | इसमें पारस्परिक बहिष्करण तंत्र है। |
के बीच अंतर Semaphore बनाम म्यूटेक्स
नीचे दी गई तालिका तुलना करती है म्यूटेक्स के साथ सेमाफोर कई मापदंडों के आधार पर:
| पैरामीटर्स | Semaphore | म्युटेक्स |
| तंत्र | यह एक प्रकार का संकेत तंत्र है। | यह एक लॉकिंग तंत्र है। |
| डाटा प्रकार | Semaphore एक पूर्णांक चर है. | म्यूटेक्स केवल एक ऑब्जेक्ट है। |
| परिवर्तन | प्रतीक्षा और संकेत प्रचालन सेमाफोर को संशोधित कर सकते हैं। | इसे केवल उस प्रक्रिया द्वारा संशोधित किया जाता है जो संसाधन का अनुरोध या रिलीज कर सकती है। |
| संसाधन प्रबंधन | यदि कोई संसाधन खाली नहीं है, तो प्रक्रिया को एक संसाधन की आवश्यकता होती है जो प्रतीक्षा ऑपरेशन को निष्पादित करे। इसे तब तक प्रतीक्षा करनी चाहिए जब तक कि सेमाफोर की गिनती 0 से अधिक न हो जाए। | यदि यह लॉक है, तो प्रक्रिया को प्रतीक्षा करनी होगी। प्रक्रिया को कतार में रखा जाना चाहिए। इसे केवल तभी एक्सेस किया जाना चाहिए जब म्यूटेक्स अनलॉक हो। |
| धागा | आपके पास एकाधिक प्रोग्राम थ्रेड हो सकते हैं. | आप म्यूटेक्स में एकाधिक प्रोग्राम थ्रेड रख सकते हैं, लेकिन एक साथ नहीं। |
| स्वामित्व | संसाधन को जारी करने या प्राप्त करने वाली किसी भी प्रक्रिया द्वारा मूल्य को बदला जा सकता है। | ऑब्जेक्ट लॉक केवल उस प्रक्रिया द्वारा जारी किया जाता है, जिसने उस पर लॉक प्राप्त किया है। |
| प्रकार | के प्रकार Semaphore गिनती सेमाफोर और बाइनरी सेमाफोर हैं। | म्यूटेक्स का कोई उपप्रकार नहीं है। |
| Operaउत्पादन | Semaphore मूल्य को wait() और signal() ऑपरेशन का उपयोग करके संशोधित किया जाता है। | म्यूटेक्स ऑब्जेक्ट लॉक या अनलॉक है. |
| संसाधन अधिभोग | यदि सभी संसाधनों का उपयोग किया जा रहा है और संसाधन के लिए अनुरोध करने वाली प्रक्रिया प्रतीक्षा () ऑपरेशन करती है और तब तक खुद को अवरुद्ध करती है जब तक कि सेमाफोर गिनती > 1 नहीं हो जाती, तो इसे व्यस्त माना जाता है। | यदि ऑब्जेक्ट पहले से ही लॉक है, तो संसाधनों का अनुरोध करने वाली प्रक्रिया प्रतीक्षा करती है और लॉक जारी होने से पहले सिस्टम द्वारा उसे कतारबद्ध कर दिया जाता है। |
के फायदे Semaphores
यहाँ, उपयोग करने के पक्ष/लाभ हैं Semaphore:
- यह एक से अधिक थ्रेड को क्रिटिकल सेक्शन तक पहुंचने की अनुमति देता है।
- Semaphoreये मशीन-स्वतंत्र हैं।
- Semaphoreइन्हें माइक्रोकर्नेल के मशीन-स्वतंत्र कोड में क्रियान्वित किया जाता है।
- वे एकाधिक प्रक्रियाओं को महत्वपूर्ण खंड में प्रवेश करने की अनुमति नहीं देते हैं।
- चूंकि सेमाफोर में प्रतीक्षा व्यस्त रहती है, इसलिए प्रक्रिया समय और संसाधनों की कभी भी बर्बादी नहीं होती।
- वे मशीन-स्वतंत्र हैं, जिन्हें माइक्रोकर्नेल के मशीन-स्वतंत्र कोड में चलाया जाना चाहिए।
- वे संसाधनों के लचीले प्रबंधन की अनुमति देते हैं।
का नुकसान Semaphores
यहां, सेमाफोर के कुछ नुकसान/कमियां दी गई हैं:
- सेमाफोर की सबसे बड़ी सीमाओं में से एक है प्राथमिकता व्युत्क्रमण।
- ऑपरेटिंग सिस्टम को बनाए रखना होगा tracसभी कॉलों में से k प्रतीक्षा करने और सेमाफोर को संकेत देने के लिए।
- इनका प्रयोग कभी भी जबरन नहीं किया जाता, बल्कि यह केवल परंपरा के अनुसार ही होता है।
- सेमाफोर में गतिरोध से बचने के लिए, प्रतीक्षा और Signal कार्यों को सही क्रम में निष्पादित करने की आवश्यकता है।
- Semaphore प्रोग्रामिंग जटिल है, इसलिए पारस्परिक अपवर्जन हासिल न होने की संभावना है।
- यह बड़े पैमाने पर उपयोग के लिए भी व्यावहारिक विधि नहीं है क्योंकि इसके उपयोग से मॉड्यूलरिटी की हानि होती है।
- Semaphore प्रोग्रामर त्रुटि की संभावना अधिक होती है।
- इसका कारण हो सकता है गतिरोध या प्रोग्रामर की त्रुटि के कारण पारस्परिक बहिष्कार का उल्लंघन।


