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

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

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

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

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

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

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

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

इंटरप्ट हैंडलिंग
आधुनिक आर्किटेक्चर इंटरप्ट संचालित हैं। इसका मतलब यह है कि यदि सीपीयू डिस्क से डेटा का अनुरोध करता है, उदाहरण के लिए, इसे पढ़ने के खत्म होने तक व्यस्त-प्रतीक्षा करने की आवश्यकता नहीं है; यह अनुरोध (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