कॉन्टेक्स्ट स्विच

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

जैसा कि हार्डवेयर में किए जाने वाले अन्य कार्यों के साथ होता है, किसी को इसके अपेक्षाकृत तेज़ होने की उम्मीद होगी; हालाँकि, Microsoft Windows और Linux सहित मुख्यधारा के ऑपरेटिंग सिस्टम, इस सुविधा का उपयोग न करें। यह मुख्यतः दो कारणों से होता है:


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

यह भी देखें

 * विलंबता (इंजीनियरिंग)

बाहरी संबंध

 * Context Switching at OSDev.org
 * Context Switch Definition by The Linux Information Project (LINFO)
 * Context Switches from the Microsoft Developer Network (MSDN)
 * General Architecture and Design -Interrupt Handling at FreeBSD.org
 * OS Context Switching - Computerphile