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