कॉन्टेक्स्ट स्विच: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 2: Line 2:
{{About|कंप्यूटर टास्क स्विचिंग|मानव संज्ञान में शब्द|मानव मल्टीटास्किंग के रूप में है}}
{{About|कंप्यूटर टास्क स्विचिंग|मानव संज्ञान में शब्द|मानव मल्टीटास्किंग के रूप में है}}
{{technical|date=October 2017}}
{{technical|date=October 2017}}
[[कंप्यूटिंग]] में, संदर्भ स्विच [[प्रक्रिया]] या थ्रेड की स्थिति को संग्रहीत करने की प्रक्रिया के रूप में होती है, जिससे की इसे बाद में एक बिंदु पर पुनर्स्थापित किया जा सके और [[निष्पादन (कंप्यूटिंग)]] को फिर से प्रारंभ किया जा सके और पहले से बचाए गए स्टेट को फिर से शुरू किया जा सके।<ref>{{cite book
[[कंप्यूटिंग]] में, संदर्भ स्विच [[प्रक्रिया]] या थ्रेड की स्थिति को संग्रहीत करने की प्रक्रिया के रूप में होती है, जिससे की इसे बाद में एक बिंदु पर पुनर्स्थापित किया जा सके और [[निष्पादन (कंप्यूटिंग)]] को फिर से प्रारंभ किया जा सके और पहले से बचाए गए स्टेट को फिर से शुरू किया जा सके।<ref>{{cite book
  | title    = Operating System Design
  | title    = Operating System Design
  | volume    = I: The XINU Approach (PC Edition)
  | volume    = I: The XINU Approach (PC Edition)
Line 14: Line 14:
  | publisher = Prentice Hall
  | publisher = Prentice Hall
  }}
  }}
</ref> यह कई प्रक्रियाओं को एकल सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) को साझा करने की अनुमति देता है और यह [[मल्टीटास्किंग ऑपरेटिंग सिस्टम|मल्टीटास्किंग ऑपरेटिंग प्रणाली]] की अनिवार्य विशेषता के रूप में होता है।
</ref> यह कई प्रक्रियाओं को एकल सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) को साझा करने की अनुमति देता है और यह [[मल्टीटास्किंग ऑपरेटिंग सिस्टम|मल्टीटास्किंग ऑपरेटिंग प्रणाली]] की अनिवार्य विशेषता के रूप में होता है।


संदर्भ स्विच वाक्यांश का सटीक अर्थ भिन्न होता है। मल्टीटास्किंग संदर्भ में यह एक कार्य के लिए प्रणाली की स्थिति को संग्रहीत करने की प्रक्रिया को संदर्भित करता है, जिससे की कार्य को रोका जा सके और दूसरा कार्य फिर से प्रारंभ किया जा सके। और यह एक संदर्भ स्विच बाधा के परिणाम के रूप में भी हो सकता है, जैसे कि जब किसी कार्य को डिस्क संग्रहण तक पहुंचने की आवश्यकता होती है, तो वह अन्य कार्यों के लिए सीपीयू समय मुक्त करता है। कुछ ऑपरेटिंग प्रणाली को [[उपयोगकर्ता मोड]] और [[कर्नेल मोड]] कार्यों के बीच स्थानांतरित करने के लिए संदर्भ स्विच की भी आवश्यकता होती है। संदर्भ स्विचन प्रणाली निष्पादन के प्रदर्शन पर नकारात्मक प्रभाव डाल सकती है।<ref name="Tanenbaum2014">{{cite book |last1=Tanenbaum |first1=Andrew S. |last2=Bos |first2=Herbert |title=Modern Operating Systems |date=March 20, 2014 |publisher=Pearson |isbn=978-0133591620 |edition=4th |language=en}}</ref>{{rp|28}}
संदर्भ स्विच वाक्यांश का सटीक अर्थ भिन्न होता है। मल्टीटास्किंग संदर्भ में यह एक कार्य के लिए प्रणाली की स्थिति को संग्रहीत करने की प्रक्रिया को संदर्भित करता है, जिससे की कार्य को रोका जा सके और दूसरा कार्य फिर से प्रारंभ किया जा सके। और यह एक संदर्भ स्विच बाधा के परिणाम के रूप में भी हो सकता है, जैसे कि जब किसी कार्य को डिस्क संग्रहण तक पहुंचने की आवश्यकता होती है, तो वह अन्य कार्यों के लिए सीपीयू समय मुक्त करता है। कुछ ऑपरेटिंग प्रणाली को [[उपयोगकर्ता मोड]] और [[कर्नेल मोड]] कार्यों के बीच स्थानांतरित करने के लिए संदर्भ स्विच की भी आवश्यकता होती है। संदर्भ स्विचन प्रणाली निष्पादन के प्रदर्शन पर नकारात्मक प्रभाव डाल सकती है।<ref name="Tanenbaum2014">{{cite book |last1=Tanenbaum |first1=Andrew S. |last2=Bos |first2=Herbert |title=Modern Operating Systems |date=March 20, 2014 |publisher=Pearson |isbn=978-0133591620 |edition=4th |language=en}}</ref>{{rp|28}}
== लागत ==
== लागत ==
संदर्भ स्विच सामान्यतः कम्प्यूटेशनल रूप से गहन होते हैं और ऑपरेटिंग प्रणाली का अधिकांश डिज़ाइन संदर्भ स्विच के उपयोग को अनुकूलित करने के लिए होता है। एक प्रक्रिया से दूसरे में बदलने के लिए एडमिनिस्ट्रेशन की बचत करने तथा रजिस्टरों एवं स्मृति नक्शों को लोड करने, विभिन्न तालिकाओं और सूचियों को अपडेट करने के लिए निश्चित समय की आवश्यकता होती है। एक संदर्भ स्विच में वास्तव में क्या शामिल है जो आर्किटेक्चर ऑपरेटिंग प्रणाली पर स्थायी रूप से काम करता है और संसाधनों की संख्या एक ही प्रक्रिया से संबंधित हैं, और एक संबंधित असहयोगी अनुपात की तुलना में कई अनुपात साझा करते हैं।
संदर्भ स्विच सामान्यतः कम्प्यूटेशनल रूप से गहन होते हैं और ऑपरेटिंग प्रणाली का अधिकांश डिज़ाइन संदर्भ स्विच के उपयोग को अनुकूलित करने के लिए होता है। एक प्रक्रिया से दूसरे में बदलने के लिए एडमिनिस्ट्रेशन की बचत करने तथा रजिस्टरों एवं स्मृति नक्शों को लोड करने, विभिन्न तालिकाओं और सूचियों को अपडेट करने के लिए निश्चित समय की आवश्यकता होती है। एक संदर्भ स्विच में वास्तव में क्या शामिल है जो आर्किटेक्चर ऑपरेटिंग प्रणाली पर स्थायी रूप से काम करता है और संसाधनों की संख्या एक ही प्रक्रिया से संबंधित हैं, और एक संबंधित असहयोगी अनुपात की तुलना में कई अनुपात साझा करते हैं।


उदाहरण के लिए, [[लिनक्स कर्नेल]] में, संदर्भ स्विचिंग में नई प्रक्रिया की स्थिति के बारे में जानकारी प्राप्त करने के लिए कर्नेल स्टैक में पीसीबी तालिका में संग्रहीत संबंधित [[प्रक्रिया नियंत्रण ब्लॉक]] (पीसीबी) को लोड करना सम्मलित होता है। सीपीयू स्टेट की जानकारी जिसमें रजिस्टर, [[प्रोसेसर रजिस्टर]] और [[कार्यक्रम गणक|प्रोग्राम गणक]] के साथ-साथ मेमोरी प्रबंधन जानकारी जैसे [[स्मृति विभाजन]] और [[पेज टेबल]] इत्यादि के रूप में होती है और जब तक कि पुरानी प्रक्रिया नए के साथ मेमोरी साझा नहीं करती नई प्रक्रिया के लिए पीसीबी से लोड की जाती है। भिन्न -भिन्न मेमोरी का उपयोग करने वाली पिछली और वर्तमान प्रक्रियाओं के स्थिति में गलत एड्रेस ट्रांसलेशन से बचने के लिए, [[अनुवाद लुकसाइड बफर]] (टीएलबी) को फ्लश किया जाना चाहिए। यह प्रदर्शन को नकारात्मक रूप से प्रभावित करता है क्योंकि टीएलबी के लिए प्रत्येक स्मृति संदर्भ एक मिस होता है क्योंकि अधिकांश संदर्भ स्विच के बाद यह खाली हो जाता है।<ref>''IA-64 Linux Kernel: Design and Implementation'', [http://www.informit.com/articles/article.aspx?p=29961&seqNum=7 4.7 Switching Address Spaces]</ref><ref>''Operating Systems'', 5.6 The Context Switch, [https://books.google.com/books?id=orZ0CLxEMXEC&pg=PA118 p. 118]</ref>
उदाहरण के लिए, [[लिनक्स कर्नेल]] में, संदर्भ स्विचिंग में नई प्रक्रिया की स्थिति के बारे में जानकारी प्राप्त करने के लिए कर्नेल स्टैक में पीसीबी तालिका में संग्रहीत संबंधित [[प्रक्रिया नियंत्रण ब्लॉक]] (पीसीबी) को लोड करना सम्मलित होता है। सीपीयू स्टेट की जानकारी जिसमें रजिस्टर, [[प्रोसेसर रजिस्टर]] और [[कार्यक्रम गणक|प्रोग्राम गणक]] के साथ-साथ मेमोरी प्रबंधन जानकारी जैसे [[स्मृति विभाजन]] और [[पेज टेबल]] इत्यादि के रूप में होती है और जब तक कि पुरानी प्रक्रिया नए के साथ मेमोरी साझा नहीं करती नई प्रक्रिया के लिए पीसीबी से लोड की जाती है। भिन्न -भिन्न मेमोरी का उपयोग करने वाली पिछली और वर्तमान प्रक्रियाओं के स्थिति में गलत एड्रेस ट्रांसलेशन से बचने के लिए, [[अनुवाद लुकसाइड बफर]] (टीएलबी) को फ्लश किया जाना चाहिए। यह प्रदर्शन को नकारात्मक रूप से प्रभावित करता है क्योंकि टीएलबी के लिए प्रत्येक स्मृति संदर्भ एक मिस होता है क्योंकि अधिकांश संदर्भ स्विच के बाद यह खाली हो जाता है।<ref>''IA-64 Linux Kernel: Design and Implementation'', [http://www.informit.com/articles/article.aspx?p=29961&seqNum=7 4.7 Switching Address Spaces]</ref><ref>''Operating Systems'', 5.6 The Context Switch, [https://books.google.com/books?id=orZ0CLxEMXEC&pg=PA118 p. 118]</ref>


इसके अतिरिक्त, अनुरूप संदर्भ स्विचिंग उपयोगकर्ता थ्रेड्स, विशेष रूप से हरे थ्रेड्स के बीच होता है और अधिकांशतः बहुत हल्का होता है, न्यूनतम संदर्भ को सहेजता और पुनर्स्थापित करता है। जैसे संदर्भ स्विच के स्थितियो में, गो (प्रोग्रामिंग भाषा) में गोरोइन के बीच स्विच करना होता है, एक संदर्भ स्विच एक [[coroutine|कोरटाइन]] उपज के बराबर होता है, जो [[सबरूटीन]] कॉल की तुलना में सिर्फ थोड़ा अधिक महंगा होता है।
इसके अतिरिक्त, अनुरूप संदर्भ स्विचिंग उपयोगकर्ता थ्रेड्स, विशेष रूप से हरे थ्रेड्स के बीच होता है और अधिकांशतः बहुत हल्का होता है, न्यूनतम संदर्भ को सहेजता और पुनर्स्थापित करता है। जैसे संदर्भ स्विच के स्थितियो में, गो (प्रोग्रामिंग भाषा) में गोरोइन के बीच स्विच करना होता है, एक संदर्भ स्विच एक [[coroutine|कोरटाइन]] उपज के बराबर होता है, जो [[सबरूटीन]] कॉल की तुलना में सिर्फ थोड़ा अधिक महंगा होता है।
Line 28: Line 28:


=== मल्टीटास्किंग ===
=== मल्टीटास्किंग ===
सामान्यतः , कुछ [[शेड्यूलिंग (कंप्यूटिंग)]] योजना के भीतर, एक प्रक्रिया को सीपीयू से बाहर कर देते है, जिससे की दूसरी प्रक्रिया चल सके। इस संदर्भ स्विच को प्रक्रिया द्वारा स्वयं को अनुपयोगी बनाने के लिए ट्रिगर किया जाता है, जैसे इनपुट/आउटपुट आई/ओ के लिए प्रतीक्षा करते हुए या सिंक्रनाइज़ेशन (कंप्यूटर साइंस) ऑपरेशन को पूरा करने के लिए एक प्री-[[एंटाइटिव मल्टीटास्किंग]] प्रणाली पर, शेड्यूलर उन प्रक्रियाओं को बदल सकता है जो अभी भी चलने योग्य हैं। सीपीयू समय की कमी से अन्य प्रक्रियाओं को रोकने के लिए, [[प्री-]]एम्प्टिव शेड्यूलर अधिकांशतः एक टाइमर इंटरप्ट को फायर करने के लिए कॉन्फ़िगर करते हैं जब एक प्रक्रिया अपने समय के स्लाइस से अधिक हो जाती है। यह बाधा सुनिश्चित करती है कि शेड्यूलर संदर्भ स्विच करने के लिए नियंत्रण प्राप्त कर सके।
सामान्यतः , कुछ [[शेड्यूलिंग (कंप्यूटिंग)]] योजना के भीतर, एक प्रक्रिया को सीपीयू से बाहर कर देते है, जिससे की दूसरी प्रक्रिया चल सके। इस संदर्भ स्विच को प्रक्रिया द्वारा स्वयं को अनुपयोगी बनाने के लिए ट्रिगर किया जाता है, जैसे इनपुट/आउटपुट आई/ओ के लिए प्रतीक्षा करते हुए या सिंक्रनाइज़ेशन (कंप्यूटर साइंस) ऑपरेशन को पूरा करने के लिए एक प्री-[[एंटाइटिव मल्टीटास्किंग]] प्रणाली पर, शेड्यूलर उन प्रक्रियाओं को बदल सकता है जो अभी भी चलने योग्य हैं। सीपीयू समय की कमी से अन्य प्रक्रियाओं को रोकने के लिए, [[प्री-]]एम्प्टिव शेड्यूलर अधिकांशतः एक टाइमर इंटरप्ट को फायर करने के लिए कॉन्फ़िगर करते हैं जब एक प्रक्रिया अपने समय के स्लाइस से अधिक हो जाती है। यह बाधा सुनिश्चित करती है कि शेड्यूलर संदर्भ स्विच करने के लिए नियंत्रण प्राप्त कर सके।


=== इंटरप्ट हैंडलिंग ===
=== इंटरप्ट हैंडलिंग ===
आधुनिक आर्किटेक्चर इंटरप्ट रूप में संचालित होते है। इसका अर्थ यह है कि यदि सीपीयू डिस्क से डेटा का अनुरोध करता है, उदाहरण के लिए, इसे पढ़ने के समाप्त होने तक व्यस्त रहने की आवश्यकता नहीं होती है यह आई/ओ उपकरण के लिए अनुरोध जारी करता है और किसी अन्य कार्य के साथ जारी रख सकता है। जब आप इसे पढ़ लें तो सीपीयू को इस स्थिति में [[हार्डवेयर]] के द्वारा बाधित किया जा सकता है जिससे तस्वीरों को पढ़ने के लिए इंटरप्ट रिक्वेस्ट भेजा जाता है। इंटरप्ट्स के लिए, [[इंटरप्ट हैंडलर]] नामक एक प्रोग्राम स्थापित किया गया है, और यह इंटरप्ट हैंडलर है जो डिस्क से इंटरप्ट को संभालता है।
आधुनिक आर्किटेक्चर इंटरप्ट रूप में संचालित होते है। इसका अर्थ यह है कि यदि सीपीयू डिस्क से डेटा का अनुरोध करता है, उदाहरण के लिए, इसे पढ़ने के समाप्त होने तक व्यस्त रहने की आवश्यकता नहीं होती है यह आई/ओ उपकरण के लिए अनुरोध जारी करता है और किसी अन्य कार्य के साथ जारी रख सकता है। जब आप इसे पढ़ लें तो सीपीयू को इस स्थिति में [[हार्डवेयर]] के द्वारा बाधित किया जा सकता है जिससे तस्वीरों को पढ़ने के लिए इंटरप्ट रिक्वेस्ट भेजा जाता है। इंटरप्ट्स के लिए, [[इंटरप्ट हैंडलर]] नामक एक प्रोग्राम स्थापित किया गया है, और यह इंटरप्ट हैंडलर है जो डिस्क से इंटरप्ट को संभालता है।


जब कोई व्यवधान उत्पन्न होता है, तो हार्डवेयर स्वचालित रूप से संदर्भ के एक स्वरुप को बदल देता है जिससे कि हैंडलर को बाधित कोड पर वापस जाने की अनुमति मिल सके। विशेष हार्डवेयर और सॉफ़्टवेयर डिज़ाइन के विवरण के आधार पर हैंडलर अतिरिक्त संदर्भ सहेज सकता है। व्यवधान को संभालने में लगने वाले समय को कम करने के लिए अधिकांशतः संदर्भ का सिर्फ एक न्यूनतम भाग बदला जाता है। [[कर्नेल (ऑपरेटिंग सिस्टम)|कर्नेल (ऑपरेटिंग प्रणाली )]] इंटरप्ट्स को संभालने के लिए एक विशेष प्रक्रिया को स्पॉन या शेड्यूल नहीं करता है, अपितु इसके अतिरिक्त   हैंडलर इंटरप्ट हैंडलिंग की शुरुआत में स्थापित अधिकांशतः आंशिक संदर्भ में निष्पादित करता है। एक बार इंटरप्ट सर्विसिंग पूरी हो जाने के बाद, इंटरप्ट होने से पहले संदर्भ प्रभावी रूप से फिर से शुरू हो जाता है जिससे की बाधित प्रक्रिया अपने उचित स्थिति में निष्पादन को फिर से प्रारंभ कर सके।
जब कोई व्यवधान उत्पन्न होता है, तो हार्डवेयर स्वचालित रूप से संदर्भ के एक स्वरुप को बदल देता है जिससे कि हैंडलर को बाधित कोड पर वापस जाने की अनुमति मिल सके। विशेष हार्डवेयर और सॉफ़्टवेयर डिज़ाइन के विवरण के आधार पर हैंडलर अतिरिक्त संदर्भ सहेज सकता है। व्यवधान को संभालने में लगने वाले समय को कम करने के लिए अधिकांशतः संदर्भ का सिर्फ एक न्यूनतम भाग बदला जाता है। [[कर्नेल (ऑपरेटिंग सिस्टम)|कर्नेल (ऑपरेटिंग प्रणाली )]] इंटरप्ट्स को संभालने के लिए एक विशेष प्रक्रिया को स्पॉन या शेड्यूल नहीं करता है, अपितु इसके अतिरिक्त हैंडलर इंटरप्ट हैंडलिंग की शुरुआत में स्थापित अधिकांशतः आंशिक संदर्भ में निष्पादित करता है। एक बार इंटरप्ट सर्विसिंग पूरी हो जाने के बाद, इंटरप्ट होने से पहले संदर्भ प्रभावी रूप से फिर से शुरू हो जाता है जिससे की बाधित प्रक्रिया अपने उचित स्थिति में निष्पादन को फिर से प्रारंभ कर सके।


=== उपयोगकर्ता और कर्नेल मोड स्विचिंग ===
=== उपयोगकर्ता और कर्नेल मोड स्विचिंग ===
जब प्रणाली उपयोगकर्ता मोड और कर्नेल मोड के बीच परिवर्तन करता है, तथा एक संदर्भ स्विच आवश्यक नहीं होता है, एक मोड परिवर्तन अपने आप में एक संदर्भ स्विच के रूप में नहीं होता है। चूंकि, ऑपरेटिंग प्रणाली के आधार पर इस समय संदर्भ स्विच भी हो सकता है।
जब प्रणाली उपयोगकर्ता मोड और कर्नेल मोड के बीच परिवर्तन करता है, तथा एक संदर्भ स्विच आवश्यक नहीं होता है, एक मोड परिवर्तन अपने आप में एक संदर्भ स्विच के रूप में नहीं होता है। चूंकि, ऑपरेटिंग प्रणाली के आधार पर इस समय संदर्भ स्विच भी हो सकता है।


== चरण ==
== चरण ==
वर्तमान में चल रही प्रक्रिया की स्थिति को सहेजा जाना चाहिए जिससे की निष्पादन के लिए पुनर्निर्धारित होने पर इसे फिर से शुरू किया जा सके।
वर्तमान में चल रही प्रक्रिया की स्थिति को सहेजा जाना चाहिए जिससे की निष्पादन के लिए पुनर्निर्धारित होने पर इसे फिर से शुरू किया जा सके।


प्रक्रिया स्थिति में वे सभी रजिस्टर सम्मलित होते है, जिनका उपयोग प्रक्रिया विशेष रूप से प्रोग्राम काउंटर और किसी भी अन्य ऑपरेटिंग प्रणाली विशिष्ट डेटा का उपयोग कर रही है, जो आवश्यक हो सकता है। यह सामान्यतः एक प्रक्रिया नियंत्रण ब्लॉक (पीसीबी) या स्विचफ्रेम नामक डेटा संरचना में संग्रहीत होता है।
प्रक्रिया स्थिति में वे सभी रजिस्टर सम्मलित होते है, जिनका उपयोग प्रक्रिया विशेष रूप से प्रोग्राम काउंटर और किसी भी अन्य ऑपरेटिंग प्रणाली विशिष्ट डेटा का उपयोग कर रही है, जो आवश्यक हो सकता है। यह सामान्यतः एक प्रक्रिया नियंत्रण ब्लॉक (पीसीबी) या स्विचफ्रेम नामक डेटा संरचना में संग्रहीत होता है।


पीसीबी को कर्नेल मेमोरी (पयोगकर्ता मोड [[कॉल स्टैक]] के विपरीत में प्रति-प्रक्रिया स्टैक डेटा संरचना पर संग्रहीत किया जाता है या इस जानकारी के लिए कुछ विशिष्ट ऑपरेटिंग प्रणाली परिभाषित डेटा संरचना हो सकती है। पीसीबी में एक [[हैंडल (कंप्यूटिंग)]] प्रक्रियाओं की एक कतार में जोड़ा जाता है जो चलने के लिए तैयार होती है, जिसे अधिकांशतः तैयार कतार कहा जाता है।
पीसीबी को कर्नेल मेमोरी (पयोगकर्ता मोड [[कॉल स्टैक]] के विपरीत में प्रति-प्रक्रिया स्टैक डेटा संरचना पर संग्रहीत किया जाता है या इस जानकारी के लिए कुछ विशिष्ट ऑपरेटिंग प्रणाली परिभाषित डेटा संरचना हो सकती है। पीसीबी में एक [[हैंडल (कंप्यूटिंग)]] प्रक्रियाओं की एक कतार में जोड़ा जाता है जो चलने के लिए तैयार होती है, जिसे अधिकांशतः तैयार कतार कहा जाता है।


चूंकि ऑपरेटिंग प्रणाली ने एक प्रक्रिया के निष्पादन को प्रभावी ढंग से निलंबित कर देती है, यह तैयार कतार से एक प्रक्रिया को चुनकर और अपने पीसीबी को पुनर्स्थापित करके संदर्भ को बदल सकता है। ऐसा करने पर पीसीबी से प्रोग्राम काउंटर लोड हो जाता है और इस प्रकार चुनी हुई प्रक्रिया में निष्पादन जारी रहता है। प्रक्रिया और थ्रेड प्राथमिकता प्रभावित कर सकती है कि कौन सी प्रक्रिया तैयार कतार से चुनी गई है अर्थात, यह [[प्राथमिकता कतार]] के रूप में हो सकती है।
चूंकि ऑपरेटिंग प्रणाली ने एक प्रक्रिया के निष्पादन को प्रभावी ढंग से निलंबित कर देती है, यह तैयार कतार से एक प्रक्रिया को चुनकर और अपने पीसीबी को पुनर्स्थापित करके संदर्भ को बदल सकता है। ऐसा करने पर पीसीबी से प्रोग्राम काउंटर लोड हो जाता है और इस प्रकार चुनी हुई प्रक्रिया में निष्पादन जारी रहता है। प्रक्रिया और थ्रेड प्राथमिकता प्रभावित कर सकती है कि कौन सी प्रक्रिया तैयार कतार से चुनी गई है अर्थात, यह [[प्राथमिकता कतार]] के रूप में हो सकती है।


== उदाहरण ==
== उदाहरण ==
एक सामान्य अंकगणितीय जोड़ ऑपरेशन A = B+1 को ध्यान में रखते हुए। निर्देश को [[निर्देश रजिस्टर]] में संग्रहीत किया जाता है और प्रोग्राम काउंटर को बढ़ाया जाता है। A और B को मेमोरी से पढ़ा जाता है और क्रमशः R1, R2 रजिस्टरों में संग्रहीत किया जाता है। इस स्थिति में, B+1 की गणना की जाती है और अंतिम उत्तर के रूप में R1 में लिखा जाता है। यह ऑपरेशन चूंकि अनुक्रमिक पढ़ता है और लिखता है और सबरूटीन के उपयोग के लिए कोई प्रतीक्षा नहीं है, इसलिए इस स्थिति में कोई संदर्भ स्विच/प्रतीक्षा नहीं होती है।
एक सामान्य अंकगणितीय जोड़ ऑपरेशन A = B+1 को ध्यान में रखते हुए। निर्देश को [[निर्देश रजिस्टर]] में संग्रहीत किया जाता है और प्रोग्राम काउंटर को बढ़ाया जाता है। A और B को मेमोरी से पढ़ा जाता है और क्रमशः R1, R2 रजिस्टरों में संग्रहीत किया जाता है। इस स्थिति में, B+1 की गणना की जाती है और अंतिम उत्तर के रूप में R1 में लिखा जाता है। यह ऑपरेशन चूंकि अनुक्रमिक पढ़ता और लिखता है और सबरूटीन के उपयोग के लिए कोई प्रतीक्षा नहीं करता है, इसलिए इस स्थिति में कोई संदर्भ स्विच/प्रतीक्षा नहीं होती है।


चूंकि , कुछ विशेष निर्देशों के लिए [[सिस्टम कॉल|प्रणाली कॉल]] की आवश्यकता होती है जिसके लिए प्रतीक्षा/नींद प्रक्रियाओं के लिए संदर्भ स्विच की आवश्यकता होती है। कर्नेल (ऑपरेटिंग प्रणाली ) मोड में संदर्भ स्विच के लिए एक प्रणाली कॉल हैंडलर का उपयोग किया जाता है। एक डिस्प्ले (डेटा x) फ़ंक्शन को डिस्क से डेटा x और कर्नेल मोड में एक उपकरण ड्राइवर की आवश्यकता हो सकती है, इसलिए डिस्प्ले () फ़ंक्शन सो जाता है और [[डिस्क विभाजन]] से x का मान प्राप्त करने के लिए रीड ऑपरेशन पर प्रतीक्षा करता है, जिससे प्रतीक्षा करने के लिए प्रोग्राम और फ़ंक्शन (गणित) के लिए प्रतीक्षा जारी करने के लिए वर्तमान कथन को सोने के लिए जाने के लिए कॉल करें और इसे जगाने के लिए सिस्कल की प्रतीक्षा करें। समवर्ती नियंत्रण को बनाए रखने के लिए प्रोग्राम को फिर से नए मूल्य और नींद की प्रक्रिया को फिर से निष्पादित करने की आवश्यकता है।
चूंकि, कुछ विशेष निर्देशों के लिए [[सिस्टम कॉल|प्रणाली कॉल]] की आवश्यकता होती है जिसके लिए प्रतीक्षा/नींद प्रक्रियाओं के लिए संदर्भ स्विच की आवश्यकता होती है। कर्नेल ऑपरेटिंग प्रणाली मोड में संदर्भ स्विच के लिए एक प्रणाली कॉल हैंडलर का उपयोग किया जाता है। एक डिस्प्ले डेटा x फलन को डिस्क से डेटा x और कर्नेल मोड में एक उपकरण ड्राइवर की आवश्यकता होती है, इसलिए डिस्प्ले () फलन सो जाता है और [[डिस्क विभाजन]] से x का मान प्राप्त करने के लिए रीड ऑपरेशन पर प्रतीक्षा करता है, जिससे प्रतीक्षा करने के लिए प्रोग्राम और फलन (गणित) के लिए प्रतीक्षा जारी करने के लिए वर्तमान कथन को स्लीप में जाने के लिए कॉल करते और इसे जगाने के लिए सिस्कल की प्रतीक्षा करते। समवर्ती नियंत्रण को बनाए रखने के लिए प्रोग्राम को फिर से नए मूल्य और नींद की प्रक्रिया को फिर से निष्पादित करने की आवश्यकता होती है।


== {{Anchor|LATENCY}}प्रदर्शन ==
== प्रदर्शन ==
शेड्यूलिंग (कंप्यूटिंग), टीएलबी फ्लश, और अप्रत्यक्ष रूप से [[सीपीयू कैश]] को कई कार्यों के बीच साझा करने के कारण संदर्भ स्विचिंग में प्रदर्शन की लागत होती है।<ref>{{cite journal |author1=Chuanpeng Li |author2=Chen Ding |author3=Kai Shen |title=Quantifying The Cost of Context Switch |url=https://www.usenix.org/legacy/events/expcs07/papers/2-li.pdf |archive-url=https://web.archive.org/web/20170813225252/https://www.usenix.org/legacy/events/expcs07/papers/2-li.pdf |archive-date=2017-08-13 |url-status=live }}</ref> एकल प्रक्रिया के थ्रेड्स के बीच स्विच करना दो भिन्न -भिन्न प्रक्रियाओं की तुलना में तेज़ हो सकता है, क्योंकि थ्रेड्स समान [[आभासी मेमोरी]] मैप साझा करते हैं, इसलिए TLB फ्लश आवश्यक नहीं है।<ref>{{cite news |author=Ulrich Drepper |date=9 October 2014 |title=Memory part 3: Virtual Memory |publisher=[[LWN.net]] |url=https://lwn.net/Articles/253361/ }}</ref>
शेड्यूलिंग (कंप्यूटिंग), टीएलबी फ्लश, और अप्रत्यक्ष रूप से [[सीपीयू कैश]] को कई कार्यों के बीच साझा करने के कारण संदर्भ स्विचिंग में प्रदर्शन की लागत होती है।<ref>{{cite journal |author1=Chuanpeng Li |author2=Chen Ding |author3=Kai Shen |title=Quantifying The Cost of Context Switch |url=https://www.usenix.org/legacy/events/expcs07/papers/2-li.pdf |archive-url=https://web.archive.org/web/20170813225252/https://www.usenix.org/legacy/events/expcs07/papers/2-li.pdf |archive-date=2017-08-13 |url-status=live }}</ref> एकल प्रक्रिया के थ्रेड्स के बीच स्विच करना दो भिन्न -भिन्न प्रक्रियाओं की तुलना में तेज़ हो सकता है, क्योंकि थ्रेड्स समान [[आभासी मेमोरी|वर्चुअल मेमोरी]] मैप साझा करते हैं, इसलिए टीएलबी फ्लश आवश्यक नहीं होती है।<ref>{{cite news |author=Ulrich Drepper |date=9 October 2014 |title=Memory part 3: Virtual Memory |publisher=[[LWN.net]] |url=https://lwn.net/Articles/253361/ }}</ref>
दो भिन्न -भिन्न  प्रक्रियाओं के बीच स्विच करने के समय को प्रक्रिया स्विचिंग लेटेंसी कहा जाता है।
एक ही प्रक्रिया के दो थ्रेड्स के बीच स्विच करने के समय को थ्रेड स्विचिंग लेटेंसी कहा जाता है।
वह समय जब एक हार्डवेयर व्यवधान उत्पन्न होता है जब व्यवधान की सेवा की जाती है, उसे [[व्यवधान विलंबता]] कहा जाता है।


एक ही पता स्थान ऑपरेटिंग प्रणाली में दो प्रक्रियाओं के बीच स्विचिंग निजी प्रति-प्रक्रिया पता स्थान वाले ऑपरेटिंग प्रणाली में दो प्रक्रियाओं के बीच स्विच करने से तेज़ हो सकती है।<ref>
दो भिन्न -भिन्न प्रक्रियाओं के बीच स्विच करने के समय को प्रक्रिया स्विचिंग लेटेंसी कहा जाता है। एक ही प्रक्रिया के दो थ्रेड्स के बीच स्विच करने के समय को थ्रेड स्विचिंग लेटेंसी कहा जाता है। वह समय जब एक हार्डवेयर में इंटरप्शन उत्पन्न होता है जब इंटरप्शन की सेवा की जाती है, उसे [[व्यवधान विलंबता|इंटरप्शन विलंबता]] कहलाता है।
 
एक ही एड्रेस स्थान ऑपरेटिंग प्रणाली में दो प्रक्रियाओं के बीच स्विचिंग निजी प्रति-प्रक्रिया एड्रेस स्थान वाले ऑपरेटिंग प्रणाली में दो प्रक्रियाओं के बीच स्विच करने से तेज़ हो सकती है।<ref>
D.L. Sims.
D.L. Sims.
"Multiple and single address spaces: towards a middle ground".
"Multiple and single address spaces: towards a middle ground".
Line 64: Line 63:
{{doi|10.1109/IWOOOS.1993.324906}}
{{doi|10.1109/IWOOOS.1993.324906}}
</ref>
</ref>




=== हार्डवेयर बनाम सॉफ्टवेयर ===
=== हार्डवेयर बनाम सॉफ्टवेयर ===
कॉन्टेक्स्ट स्विचिंग मुख्य रूप से सॉफ्टवेयर या हार्डवेयर द्वारा किया जा सकता है। कुछ प्रोसेसर, जैसे [[इंटेल 80386]] और इसके उत्तराधिकारी,<ref>{{cite web |url=http://www.linfo.org/context_switch.html |title=Context Switch definition |publisher=Linfo.org |access-date=2013-09-08 |archive-url=https://web.archive.org/web/20100218115342/http://www.linfo.org/context_switch.html |archive-date=2010-02-18 |url-status=dead }}</ref> [[कार्य राज्य खंड|कार्य स्टेट  खंड]] (TSS) नामित एक विशेष डेटा सेगमेंट का उपयोग करके संदर्भ स्विच के लिए हार्डवेयर समर्थन प्राप्त करें। [[वैश्विक वर्णनकर्ता तालिका]] में TSS डिस्क्रिप्टर पर लक्षित कॉल या JMP इंस्ट्रक्शन के साथ टास्क स्विच को स्पष्ट रूप से ट्रिगर किया जा सकता है। [[इंटरप्ट डिस्क्रिप्टर टेबल]] (IDT) में एक [[कार्य द्वार]] होने पर एक रुकावट या अपवाद ट्रिगर होने पर यह स्पष्ट रूप से हो सकता है। जब कोई कार्य स्विच होता है तो CPU स्वचालित रूप से TSS से नई स्थिति को लोड कर सकता है।
कुछ प्रोसेसर, [[इंटेल 80386]] और उसके सक्सेस्सर्स की तरह,<ref>{{cite web |url=http://www.linfo.org/context_switch.html |title=Context Switch definition |publisher=Linfo.org |access-date=2013-09-08 |archive-url=https://web.archive.org/web/20100218115342/http://www.linfo.org/context_switch.html |archive-date=2010-02-18 |url-status=dead }}</ref> एक विशेष [[डेटा खंड]] का उपयोग करते हुए, कॉन्टेक्स्ट स्विचिंग मुख्य रूप से सॉफ्टवेयर या हार्डवेयर की सहायता करते हैं, जिसे टास्क स्टेट सेगमेंट नामित किया गया है। [[वैश्विक वर्णनकर्ता तालिका]] में टीएसएस डिस्क्रिप्टर पर लक्षित कॉल या जेएमपी इंस्ट्रक्शन के साथ टास्क स्विच को स्पष्ट रूप से ट्रिगर किया जा सकता है। यह परोक्ष रूप से तब घटित होता है जब इंटरप्शन या अपवाद ट्रिगर हो जाता है जब [[इंटरप्ट डिस्क्रिप्टर टेबल|इंटरप्ट डिस्क्रिप्टर तालिका]] (आईडीटी) में कार्य द्वार होता है। जब कार्य स्विच होता है तो सीपीयू टीएसएस से नई स्थिति को स्वतः लोड कर सकता है।


जैसा कि हार्डवेयर में किए जाने वाले अन्य कार्यों के साथ होता है, किसी को इसके अपेक्षाकृत तेज़ होने की अपेक्षा होगी; चूंकि , [[Microsoft Windows]] और [[Linux]] सहित मुख्यधारा के ऑपरेटिंग प्रणाली ,<ref>{{cite book|url=https://books.google.com/books?id=h0lltXyJ8aIC&q=Linux+hardware+TSS&pg=PA104|title=Understanding the Linux Kernel, Third Edition|last1=Bovet|first1=Daniel Pierre|last2=Cesati|first2=Marco|publisher=[[O'Reilly Media]]|year=2006|page=104|access-date=2009-11-23|isbn=978-0-596-00565-8}}</ref> इस सुविधा का उपयोग न करें। यह मुख्यतः दो कारणों से होता है:
जैसा कि हार्डवेयर में किए जाने वाले अन्य कार्यों के साथ होता है, किसी को इसके अपेक्षाकृत तेज़ होने की अपेक्षा होता है, चूंकि, [[माइक्रोसॉफ्ट विंडोज और लिंक्स|माइक्रोसॉफ्ट विंडोज और लिनक्स]] सहित मुख्यधारा के ऑपरेटिंग प्रणाली के रूप में होते है,<ref>{{cite book|url=https://books.google.com/books?id=h0lltXyJ8aIC&q=Linux+hardware+TSS&pg=PA104|title=Understanding the Linux Kernel, Third Edition|last1=Bovet|first1=Daniel Pierre|last2=Cesati|first2=Marco|publisher=[[O'Reilly Media]]|year=2006|page=104|access-date=2009-11-23|isbn=978-0-596-00565-8}}</ref> इस सुविधा का उपयोग न करें, यह मुख्यतः दो कारणों से होता है:


* हार्डवेयर संदर्भ स्विचिंग सभी रजिस्टरों को सहेजता नहीं है (सिर्फ  सामान्य-उद्देश्य रजिस्टर, [[तैरनेवाला स्थल]] रजिस्टर नहीं - चूंकि <code>TS</code> बिट स्वचालित रूप से चालू हो जाता है <code>CR0</code> [[नियंत्रण रजिस्टर]], फ़्लोटिंग-पॉइंट [[निर्देश (कंप्यूटर विज्ञान)]] को निष्पादित करते समय एक गलती के परिणामस्वरूप और OS को फ़्लोटिंग-पॉइंट स्टेट को आवश्यकतानुसार बचाने और पुनर्स्थापित करने का अवसर देता है)।
* हार्डवेयर संदर्भ स्विचिंग, सभी रजिस्टरों को केवल सामान्य प्रयोजन रजिस्टरों को नहीं सहेजता है, तथा [[तैरनेवाला स्थल|फ्लोटिंग प्वाइंट]] रजिस्टर के रूप में नहीं होते है, चूंकि <code>टीएस</code> बिट स्वचालित रूप से सीआरओ नियंत्रण रजिस्टर में चालू हो जाता है, जिसके परिणामस्वरूप [[नियंत्रण रजिस्टर]], फ़्लोटिंग-पॉइंट [[निर्देश (कंप्यूटर विज्ञान)]] को निष्पादित करते समय एक गलती के परिणामस्वरूप ओएस को फ़्लोटिंग-पॉइंट स्टेट को आवश्यकतानुसार बचाने और पुनर्स्थापित करने का अवसर प्रदान करता है।
* एसोसिएटेड परफॉर्मेंस इश्यूज, उदाहरण के लिए, सॉफ्टवेयर कॉन्टेक्स्ट स्विचिंग चयनात्मक हो सकता है और सिर्फ उन रजिस्टरों को स्टोर करता है, जिन्हें स्टोर करने की आवश्यकता होती है, जबकि हार्डवेयर संदर्भ स्विचिंग लगभग सभी रजिस्टरों को स्टोर करता है, चाहे वे आवश्यक हों या नहीं।
* एसोसिएटेड परफॉर्मेंस इश्यूज, उदाहरण के लिए, सॉफ्टवेयर कॉन्टेक्स्ट स्विचिंग चयनात्मक हो सकता है और सिर्फ उन रजिस्टरों को स्टोर करता है, जिन्हें स्टोर करने की आवश्यकता होती है, जबकि हार्डवेयर संदर्भ स्विचिंग लगभग सभी रजिस्टरों को स्टोर करता है, चाहे वे आवश्यक हों या नहीं।


== यह भी देखें ==
== यह भी देखें ==

Revision as of 00:01, 27 February 2023

कंप्यूटिंग में, संदर्भ स्विच प्रक्रिया या थ्रेड की स्थिति को संग्रहीत करने की प्रक्रिया के रूप में होती है, जिससे की इसे बाद में एक बिंदु पर पुनर्स्थापित किया जा सके और निष्पादन (कंप्यूटिंग) को फिर से प्रारंभ किया जा सके और पहले से बचाए गए स्टेट को फिर से शुरू किया जा सके।[1] यह कई प्रक्रियाओं को एकल सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) को साझा करने की अनुमति देता है और यह मल्टीटास्किंग ऑपरेटिंग प्रणाली की अनिवार्य विशेषता के रूप में होता है।

संदर्भ स्विच वाक्यांश का सटीक अर्थ भिन्न होता है। मल्टीटास्किंग संदर्भ में यह एक कार्य के लिए प्रणाली की स्थिति को संग्रहीत करने की प्रक्रिया को संदर्भित करता है, जिससे की कार्य को रोका जा सके और दूसरा कार्य फिर से प्रारंभ किया जा सके। और यह एक संदर्भ स्विच बाधा के परिणाम के रूप में भी हो सकता है, जैसे कि जब किसी कार्य को डिस्क संग्रहण तक पहुंचने की आवश्यकता होती है, तो वह अन्य कार्यों के लिए सीपीयू समय मुक्त करता है। कुछ ऑपरेटिंग प्रणाली को उपयोगकर्ता मोड और कर्नेल मोड कार्यों के बीच स्थानांतरित करने के लिए संदर्भ स्विच की भी आवश्यकता होती है। संदर्भ स्विचन प्रणाली निष्पादन के प्रदर्शन पर नकारात्मक प्रभाव डाल सकती है।[2]: 28 

लागत

संदर्भ स्विच सामान्यतः कम्प्यूटेशनल रूप से गहन होते हैं और ऑपरेटिंग प्रणाली का अधिकांश डिज़ाइन संदर्भ स्विच के उपयोग को अनुकूलित करने के लिए होता है। एक प्रक्रिया से दूसरे में बदलने के लिए एडमिनिस्ट्रेशन की बचत करने तथा रजिस्टरों एवं स्मृति नक्शों को लोड करने, विभिन्न तालिकाओं और सूचियों को अपडेट करने के लिए निश्चित समय की आवश्यकता होती है। एक संदर्भ स्विच में वास्तव में क्या शामिल है जो आर्किटेक्चर ऑपरेटिंग प्रणाली पर स्थायी रूप से काम करता है और संसाधनों की संख्या एक ही प्रक्रिया से संबंधित हैं, और एक संबंधित असहयोगी अनुपात की तुलना में कई अनुपात साझा करते हैं।

उदाहरण के लिए, लिनक्स कर्नेल में, संदर्भ स्विचिंग में नई प्रक्रिया की स्थिति के बारे में जानकारी प्राप्त करने के लिए कर्नेल स्टैक में पीसीबी तालिका में संग्रहीत संबंधित प्रक्रिया नियंत्रण ब्लॉक (पीसीबी) को लोड करना सम्मलित होता है। सीपीयू स्टेट की जानकारी जिसमें रजिस्टर, प्रोसेसर रजिस्टर और प्रोग्राम गणक के साथ-साथ मेमोरी प्रबंधन जानकारी जैसे स्मृति विभाजन और पेज टेबल इत्यादि के रूप में होती है और जब तक कि पुरानी प्रक्रिया नए के साथ मेमोरी साझा नहीं करती नई प्रक्रिया के लिए पीसीबी से लोड की जाती है। भिन्न -भिन्न मेमोरी का उपयोग करने वाली पिछली और वर्तमान प्रक्रियाओं के स्थिति में गलत एड्रेस ट्रांसलेशन से बचने के लिए, अनुवाद लुकसाइड बफर (टीएलबी) को फ्लश किया जाना चाहिए। यह प्रदर्शन को नकारात्मक रूप से प्रभावित करता है क्योंकि टीएलबी के लिए प्रत्येक स्मृति संदर्भ एक मिस होता है क्योंकि अधिकांश संदर्भ स्विच के बाद यह खाली हो जाता है।[3][4]

इसके अतिरिक्त, अनुरूप संदर्भ स्विचिंग उपयोगकर्ता थ्रेड्स, विशेष रूप से हरे थ्रेड्स के बीच होता है और अधिकांशतः बहुत हल्का होता है, न्यूनतम संदर्भ को सहेजता और पुनर्स्थापित करता है। जैसे संदर्भ स्विच के स्थितियो में, गो (प्रोग्रामिंग भाषा) में गोरोइन के बीच स्विच करना होता है, एक संदर्भ स्विच एक कोरटाइन उपज के बराबर होता है, जो सबरूटीन कॉल की तुलना में सिर्फ थोड़ा अधिक महंगा होता है।

स्विचिंग केस

संदर्भ स्विच के लिए तीन संभावित ट्रिगर के रूप में होते है

मल्टीटास्किंग

सामान्यतः , कुछ शेड्यूलिंग (कंप्यूटिंग) योजना के भीतर, एक प्रक्रिया को सीपीयू से बाहर कर देते है, जिससे की दूसरी प्रक्रिया चल सके। इस संदर्भ स्विच को प्रक्रिया द्वारा स्वयं को अनुपयोगी बनाने के लिए ट्रिगर किया जाता है, जैसे इनपुट/आउटपुट आई/ओ के लिए प्रतीक्षा करते हुए या सिंक्रनाइज़ेशन (कंप्यूटर साइंस) ऑपरेशन को पूरा करने के लिए एक प्री-एंटाइटिव मल्टीटास्किंग प्रणाली पर, शेड्यूलर उन प्रक्रियाओं को बदल सकता है जो अभी भी चलने योग्य हैं। सीपीयू समय की कमी से अन्य प्रक्रियाओं को रोकने के लिए, प्री-एम्प्टिव शेड्यूलर अधिकांशतः एक टाइमर इंटरप्ट को फायर करने के लिए कॉन्फ़िगर करते हैं जब एक प्रक्रिया अपने समय के स्लाइस से अधिक हो जाती है। यह बाधा सुनिश्चित करती है कि शेड्यूलर संदर्भ स्विच करने के लिए नियंत्रण प्राप्त कर सके।

इंटरप्ट हैंडलिंग

आधुनिक आर्किटेक्चर इंटरप्ट रूप में संचालित होते है। इसका अर्थ यह है कि यदि सीपीयू डिस्क से डेटा का अनुरोध करता है, उदाहरण के लिए, इसे पढ़ने के समाप्त होने तक व्यस्त रहने की आवश्यकता नहीं होती है यह आई/ओ उपकरण के लिए अनुरोध जारी करता है और किसी अन्य कार्य के साथ जारी रख सकता है। जब आप इसे पढ़ लें तो सीपीयू को इस स्थिति में हार्डवेयर के द्वारा बाधित किया जा सकता है जिससे तस्वीरों को पढ़ने के लिए इंटरप्ट रिक्वेस्ट भेजा जाता है। इंटरप्ट्स के लिए, इंटरप्ट हैंडलर नामक एक प्रोग्राम स्थापित किया गया है, और यह इंटरप्ट हैंडलर है जो डिस्क से इंटरप्ट को संभालता है।

जब कोई व्यवधान उत्पन्न होता है, तो हार्डवेयर स्वचालित रूप से संदर्भ के एक स्वरुप को बदल देता है जिससे कि हैंडलर को बाधित कोड पर वापस जाने की अनुमति मिल सके। विशेष हार्डवेयर और सॉफ़्टवेयर डिज़ाइन के विवरण के आधार पर हैंडलर अतिरिक्त संदर्भ सहेज सकता है। व्यवधान को संभालने में लगने वाले समय को कम करने के लिए अधिकांशतः संदर्भ का सिर्फ एक न्यूनतम भाग बदला जाता है। कर्नेल (ऑपरेटिंग प्रणाली ) इंटरप्ट्स को संभालने के लिए एक विशेष प्रक्रिया को स्पॉन या शेड्यूल नहीं करता है, अपितु इसके अतिरिक्त हैंडलर इंटरप्ट हैंडलिंग की शुरुआत में स्थापित अधिकांशतः आंशिक संदर्भ में निष्पादित करता है। एक बार इंटरप्ट सर्विसिंग पूरी हो जाने के बाद, इंटरप्ट होने से पहले संदर्भ प्रभावी रूप से फिर से शुरू हो जाता है जिससे की बाधित प्रक्रिया अपने उचित स्थिति में निष्पादन को फिर से प्रारंभ कर सके।

उपयोगकर्ता और कर्नेल मोड स्विचिंग

जब प्रणाली उपयोगकर्ता मोड और कर्नेल मोड के बीच परिवर्तन करता है, तथा एक संदर्भ स्विच आवश्यक नहीं होता है, एक मोड परिवर्तन अपने आप में एक संदर्भ स्विच के रूप में नहीं होता है। चूंकि, ऑपरेटिंग प्रणाली के आधार पर इस समय संदर्भ स्विच भी हो सकता है।

चरण

वर्तमान में चल रही प्रक्रिया की स्थिति को सहेजा जाना चाहिए जिससे की निष्पादन के लिए पुनर्निर्धारित होने पर इसे फिर से शुरू किया जा सके।

प्रक्रिया स्थिति में वे सभी रजिस्टर सम्मलित होते है, जिनका उपयोग प्रक्रिया विशेष रूप से प्रोग्राम काउंटर और किसी भी अन्य ऑपरेटिंग प्रणाली विशिष्ट डेटा का उपयोग कर रही है, जो आवश्यक हो सकता है। यह सामान्यतः एक प्रक्रिया नियंत्रण ब्लॉक (पीसीबी) या स्विचफ्रेम नामक डेटा संरचना में संग्रहीत होता है।

पीसीबी को कर्नेल मेमोरी (पयोगकर्ता मोड कॉल स्टैक के विपरीत में प्रति-प्रक्रिया स्टैक डेटा संरचना पर संग्रहीत किया जाता है या इस जानकारी के लिए कुछ विशिष्ट ऑपरेटिंग प्रणाली परिभाषित डेटा संरचना हो सकती है। पीसीबी में एक हैंडल (कंप्यूटिंग) प्रक्रियाओं की एक कतार में जोड़ा जाता है जो चलने के लिए तैयार होती है, जिसे अधिकांशतः तैयार कतार कहा जाता है।

चूंकि ऑपरेटिंग प्रणाली ने एक प्रक्रिया के निष्पादन को प्रभावी ढंग से निलंबित कर देती है, यह तैयार कतार से एक प्रक्रिया को चुनकर और अपने पीसीबी को पुनर्स्थापित करके संदर्भ को बदल सकता है। ऐसा करने पर पीसीबी से प्रोग्राम काउंटर लोड हो जाता है और इस प्रकार चुनी हुई प्रक्रिया में निष्पादन जारी रहता है। प्रक्रिया और थ्रेड प्राथमिकता प्रभावित कर सकती है कि कौन सी प्रक्रिया तैयार कतार से चुनी गई है अर्थात, यह प्राथमिकता कतार के रूप में हो सकती है।

उदाहरण

एक सामान्य अंकगणितीय जोड़ ऑपरेशन A = B+1 को ध्यान में रखते हुए। निर्देश को निर्देश रजिस्टर में संग्रहीत किया जाता है और प्रोग्राम काउंटर को बढ़ाया जाता है। A और B को मेमोरी से पढ़ा जाता है और क्रमशः R1, R2 रजिस्टरों में संग्रहीत किया जाता है। इस स्थिति में, B+1 की गणना की जाती है और अंतिम उत्तर के रूप में R1 में लिखा जाता है। यह ऑपरेशन चूंकि अनुक्रमिक पढ़ता और लिखता है और सबरूटीन के उपयोग के लिए कोई प्रतीक्षा नहीं करता है, इसलिए इस स्थिति में कोई संदर्भ स्विच/प्रतीक्षा नहीं होती है।

चूंकि, कुछ विशेष निर्देशों के लिए प्रणाली कॉल की आवश्यकता होती है जिसके लिए प्रतीक्षा/नींद प्रक्रियाओं के लिए संदर्भ स्विच की आवश्यकता होती है। कर्नेल ऑपरेटिंग प्रणाली मोड में संदर्भ स्विच के लिए एक प्रणाली कॉल हैंडलर का उपयोग किया जाता है। एक डिस्प्ले डेटा x फलन को डिस्क से डेटा x और कर्नेल मोड में एक उपकरण ड्राइवर की आवश्यकता होती है, इसलिए डिस्प्ले () फलन सो जाता है और डिस्क विभाजन से x का मान प्राप्त करने के लिए रीड ऑपरेशन पर प्रतीक्षा करता है, जिससे प्रतीक्षा करने के लिए प्रोग्राम और फलन (गणित) के लिए प्रतीक्षा जारी करने के लिए वर्तमान कथन को स्लीप में जाने के लिए कॉल करते और इसे जगाने के लिए सिस्कल की प्रतीक्षा करते। समवर्ती नियंत्रण को बनाए रखने के लिए प्रोग्राम को फिर से नए मूल्य और नींद की प्रक्रिया को फिर से निष्पादित करने की आवश्यकता होती है।

प्रदर्शन

शेड्यूलिंग (कंप्यूटिंग), टीएलबी फ्लश, और अप्रत्यक्ष रूप से सीपीयू कैश को कई कार्यों के बीच साझा करने के कारण संदर्भ स्विचिंग में प्रदर्शन की लागत होती है।[5] एकल प्रक्रिया के थ्रेड्स के बीच स्विच करना दो भिन्न -भिन्न प्रक्रियाओं की तुलना में तेज़ हो सकता है, क्योंकि थ्रेड्स समान वर्चुअल मेमोरी मैप साझा करते हैं, इसलिए टीएलबी फ्लश आवश्यक नहीं होती है।[6]

दो भिन्न -भिन्न प्रक्रियाओं के बीच स्विच करने के समय को प्रक्रिया स्विचिंग लेटेंसी कहा जाता है। एक ही प्रक्रिया के दो थ्रेड्स के बीच स्विच करने के समय को थ्रेड स्विचिंग लेटेंसी कहा जाता है। वह समय जब एक हार्डवेयर में इंटरप्शन उत्पन्न होता है जब इंटरप्शन की सेवा की जाती है, उसे इंटरप्शन विलंबता कहलाता है।

एक ही एड्रेस स्थान ऑपरेटिंग प्रणाली में दो प्रक्रियाओं के बीच स्विचिंग निजी प्रति-प्रक्रिया एड्रेस स्थान वाले ऑपरेटिंग प्रणाली में दो प्रक्रियाओं के बीच स्विच करने से तेज़ हो सकती है।[7]


हार्डवेयर बनाम सॉफ्टवेयर

कुछ प्रोसेसर, इंटेल 80386 और उसके सक्सेस्सर्स की तरह,[8] एक विशेष डेटा खंड का उपयोग करते हुए, कॉन्टेक्स्ट स्विचिंग मुख्य रूप से सॉफ्टवेयर या हार्डवेयर की सहायता करते हैं, जिसे टास्क स्टेट सेगमेंट नामित किया गया है। वैश्विक वर्णनकर्ता तालिका में टीएसएस डिस्क्रिप्टर पर लक्षित कॉल या जेएमपी इंस्ट्रक्शन के साथ टास्क स्विच को स्पष्ट रूप से ट्रिगर किया जा सकता है। यह परोक्ष रूप से तब घटित होता है जब इंटरप्शन या अपवाद ट्रिगर हो जाता है जब इंटरप्ट डिस्क्रिप्टर तालिका (आईडीटी) में कार्य द्वार होता है। जब कार्य स्विच होता है तो सीपीयू टीएसएस से नई स्थिति को स्वतः लोड कर सकता है।

जैसा कि हार्डवेयर में किए जाने वाले अन्य कार्यों के साथ होता है, किसी को इसके अपेक्षाकृत तेज़ होने की अपेक्षा होता है, चूंकि, माइक्रोसॉफ्ट विंडोज और लिनक्स सहित मुख्यधारा के ऑपरेटिंग प्रणाली के रूप में होते है,[9] इस सुविधा का उपयोग न करें, यह मुख्यतः दो कारणों से होता है:

  • हार्डवेयर संदर्भ स्विचिंग, सभी रजिस्टरों को केवल सामान्य प्रयोजन रजिस्टरों को नहीं सहेजता है, तथा फ्लोटिंग प्वाइंट रजिस्टर के रूप में नहीं होते है, चूंकि टीएस बिट स्वचालित रूप से सीआरओ नियंत्रण रजिस्टर में चालू हो जाता है, जिसके परिणामस्वरूप नियंत्रण रजिस्टर, फ़्लोटिंग-पॉइंट निर्देश (कंप्यूटर विज्ञान) को निष्पादित करते समय एक गलती के परिणामस्वरूप ओएस को फ़्लोटिंग-पॉइंट स्टेट को आवश्यकतानुसार बचाने और पुनर्स्थापित करने का अवसर प्रदान करता है।
  • एसोसिएटेड परफॉर्मेंस इश्यूज, उदाहरण के लिए, सॉफ्टवेयर कॉन्टेक्स्ट स्विचिंग चयनात्मक हो सकता है और सिर्फ उन रजिस्टरों को स्टोर करता है, जिन्हें स्टोर करने की आवश्यकता होती है, जबकि हार्डवेयर संदर्भ स्विचिंग लगभग सभी रजिस्टरों को स्टोर करता है, चाहे वे आवश्यक हों या नहीं।

यह भी देखें

संदर्भ

  1. Douglas Comer; Timmothy V. Fossum (1988). "4 Scheduling and Context Switching". Operating System Design. Vol. I: The XINU Approach (PC Edition). Prentice Hall. p. 67. ISBN 0-13-638180-4. Context switching lies at the heart of the process juggling act. It consists of stopping the current computation, saving enough information so it may be restarted later, and restarting another process.
  2. Tanenbaum, Andrew S.; Bos, Herbert (March 20, 2014). Modern Operating Systems (in English) (4th ed.). Pearson. ISBN 978-0133591620.
  3. IA-64 Linux Kernel: Design and Implementation, 4.7 Switching Address Spaces
  4. Operating Systems, 5.6 The Context Switch, p. 118
  5. Chuanpeng Li; Chen Ding; Kai Shen. "Quantifying The Cost of Context Switch" (PDF). Archived (PDF) from the original on 2017-08-13. {{cite journal}}: Cite journal requires |journal= (help)
  6. Ulrich Drepper (9 October 2014). "Memory part 3: Virtual Memory". LWN.net.
  7. D.L. Sims. "Multiple and single address spaces: towards a middle ground". 1993. doi:10.1109/IWOOOS.1993.324906
  8. "Context Switch definition". Linfo.org. Archived from the original on 2010-02-18. Retrieved 2013-09-08.
  9. Bovet, Daniel Pierre; Cesati, Marco (2006). Understanding the Linux Kernel, Third Edition. O'Reilly Media. p. 104. ISBN 978-0-596-00565-8. Retrieved 2009-11-23.


बाहरी संबंध