2011-09-16 104 views
23

मुझे एक संदर्भ प्रक्रिया (1) में दो अलग-अलग प्रक्रियाओं और (2) के बीच एक ही प्रक्रिया में दो अलग-अलग धागे के बीच शामिल चरणों का वर्णन करने के लिए कहा जाता है।संदर्भ स्विचिंग में चरण

  1. एक संदर्भ स्विच के दौरान गिरी अपने पीसीबी में पुराने प्रक्रिया के संदर्भ की बचत होगी और उसके बाद नई प्रक्रिया चलाने के लिए निर्धारित की बचाया संदर्भ लोड।
  2. उसी प्रक्रिया में दो अलग-अलग धागे के बीच संदर्भ स्विचिंग ऑपरेटिंग सिस्टम द्वारा निर्धारित की जा सकती है ताकि वे समानांतर में निष्पादित हो सकें, और इस प्रकार आमतौर पर दो अलग-अलग प्रक्रियाओं के बीच संदर्भ स्विच से तेज़ होता है।

क्या यह सामान्य है या प्रक्रिया को स्पष्ट करने के लिए आप क्या जोड़ेंगे?

उत्तर

43

रिवर्स ऑर्डर में उनको समझाना बहुत आसान है क्योंकि प्रक्रिया-स्विच में हमेशा थ्रेड-स्विच शामिल होता है।

एक एकल कोर सीपीयू पर एक ठेठ धागा संदर्भ स्विच इस तरह होता है:

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

  2. गैर-तुच्छ प्रणाली को कर्नेल-स्टेटस दर्ज करने के लिए हार्डवेयर-सुरक्षा-स्तर परिवर्तन शुरू करना होगा ताकि कर्नेल कोड/डेटा इत्यादि का उपयोग किया जा सके।

  3. बाधित थ्रेड के लिए कोर स्थिति को सहेजना होगा। एक साधारण एम्बेडेड सिस्टम पर, यह सिर्फ सभी रजिस्टरों को थ्रेड स्टैक पर धक्का दे सकता है और स्टैक पॉइंटर को अपने थ्रेड कंट्रोल ब्लॉक (टीसीबी) में सहेज सकता है।

  4. कई सिस्टम इस चरण में एक ओएस-समर्पित स्टैक पर स्विच करते हैं ताकि ओएस-आंतरिक स्टैक आवश्यकताओं के बड़े हिस्से को प्रत्येक थ्रेड के ढेर पर नहीं लगाया जा सके।

  5. थ्रेड स्टैक स्थिति को चिह्नित करना आवश्यक हो सकता है जहां अवरोध-स्थिति में परिवर्तन नेस्टेड इंटरप्ट्स की अनुमति देने के लिए हुआ।

  6. चालक/सिस्टम कॉल रन करता है और विभिन्न थ्रेड प्राथमिकताओं के लिए टीसीबी के आंतरिक कतारों से टीसीबी को जोड़कर/हटाकर तैयार धागे का सेट बदल सकता है। नेटवर्क कार्ड ड्राइवर ने एक ईवेंट सेट किया हो या एक सेमफोर सिग्नल किया हो कि एक और धागा इंतजार कर रहा था, ताकि धागा तैयार सेट में जोड़ा जा सके, या एक चलने वाले थ्रेड को नींद() कहा जा सकता है और इसलिए तैयार सेट से खुद को हटाने के लिए चुने गए ।

  7. ओएस शेड्यूलर एल्गोरिदम यह निर्धारित करने के लिए चलाया जाता है कि कौन सा धागा आगे चलाना है, आमतौर पर उच्च प्राथमिकता वाले तैयार धागे जो उस प्राथमिकता के लिए कतार के सामने है। यदि अगली-टू-रन थ्रेड पहले से चलने वाले थ्रेड के लिए एक अलग प्रक्रिया से संबंधित है, तो यहां कुछ अतिरिक्त सामान की आवश्यकता है, (बाद में देखें)।

  8. उस थ्रेड के लिए टीसीबी से सहेजे गए स्टैक पॉइंटर को पुनर्प्राप्त और हार्डवेयर स्टैक पॉइंटर में लोड किया गया है।

  9. चयनित धागे के लिए मूल स्थिति पुनर्स्थापित की गई है। मेरे सरल सिस्टम पर, रजिस्टरों को चयनित थ्रेड के ढेर से पॉप किया जाएगा। अधिक जटिल प्रणालियों को उपयोगकर्ता स्तर की सुरक्षा में वापसी को संभालना होगा।

  10. एक इंटरप्ट-रिटर्न किया जाता है, इसलिए चयनित थ्रेड को निष्पादन स्थानांतरित किया जाता है।

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

  1. प्रक्रिया संदर्भ स्विच शुरू कर रहे हैं: इस आपरेशन की जटिलताओं, अन्य सभी सामान के शीर्ष पर, ओएस कर्नेल :)

    एक ठेठ प्रक्रिया संदर्भ स्विच इस तरह होता है लेखन से बचने के लिए एक अच्छा कारण है थ्रेड-कॉन्टेक्शन स्विच द्वारा, इसलिए उपरोक्त सभी, 1-9, होने की आवश्यकता होगी।

  2. उपरोक्त चरण 5 पर, शेड्यूलर पहले से चलने वाले थ्रेड वाले स्वामित्व वाली एक अलग प्रक्रिया से संबंधित थ्रेड चलाने का निर्णय लेता है।

  3. मेमोरी-प्रबंधन हार्डवेयर को नई प्रक्रिया के लिए पता-स्थान के साथ लोड किया जाना चाहिए, यानी जो भी चयनकर्ता/सेगमेंट/झंडे/जो भी नई प्रक्रिया के थ्रेड/एस को अपनी स्मृति तक पहुंचने की अनुमति देता है।

  4. किसी भी एफपीयू हार्डवेयर के संदर्भ को पीसीबी से सहेजा/बहाल करने की आवश्यकता है।

  5. अन्य प्रक्रिया-समर्पित हार्डवेयर हो सकते हैं जिन्हें सहेजा/बहाल करने की आवश्यकता है।

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

+2

और अधिक विस्तार में सिंगल कोर संदर्भ स्विच के चरण 4 व्याख्या कर सकते हैं? नेस्टेड इंटरप्ट्स के लिए बिल्कुल "चिह्न" क्यों आवश्यक है? साथ ही, रजिस्टरों को वास्तव में कहां से सहेजा जाता है? (लिनक्स मानते हैं) –

7

मुझे उम्मीद है कि मैं अधिक विस्तृत/स्पष्ट तस्वीर प्रदान कर सकता हूं।

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

  1. समयबद्धक लागू किया जाना चाहिए। तीन बुनियादी दृश्य हैं:

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

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

  4. कर्नेल द्वारा की जाने वाली पहली क्रिया सीपीयू रजिस्टरों की सामग्री को सहेज रही है, जो कर्नेल अपने कार्यों के लिए पुन: उपयोग करेगा। आम तौर पर कर्नेल केवल सामान्य प्रयोजन सीपीयू रजिस्टरों का उपयोग करता है और उन्हें ढेर में धक्का देकर बचाता है।
  5. फिर कर्नेल एक प्राथमिक अनुरोध संभालता है - हस्तक्षेप संभालता है, या फ़ाइल पढ़ने के अनुरोध को तैयार करता है या टाइमर सेटअप करता है।
  6. अनुरोध के कुछ बिंदु पर, कर्नेल एक ऐसी क्रिया करता है जो या तो वर्तमान धागे की स्थिति को प्रभावित करता है (यह तय करता है कि इस धागे में कुछ भी नहीं है और हमें कुछ इंतजार करना चाहिए) या किसी अन्य थ्रेड की स्थिति को प्रभावित करना चाहिए (प्राप्त हुआ इंटरप्ट या म्यूटेक्स जारी किए जाने के कारण, नया धागा चलने योग्य हो गया)।
  7. कर्नेल शेड्यूलर का आह्वान करता है। शेड्यूलर को दो निर्णय लेना होगा। सबसे पहले एक मौजूदा धागे के साथ क्या करना है इसके बारे में है। क्या इसे अवरुद्ध किया जाना चाहिए? यदि हां, तो प्रतीक्षा कतार में इसे रखा जाना चाहिए? अगर थ्रेड को अनैच्छिक रूप से स्विच किया जाता है तो इसे रनक्यू के अंत में रखा जाता है, अगर थ्रेड अवरुद्ध हो जाता है, क्योंकि यह somethins के लिए इंतजार कर रहा है, तो यह वेटकिज़ में से एक में रखा जाता है। दूसरा निर्णय यह है कि किस धागे को आगे चलाना है।
  8. एक बार दोनों निर्णय किए जाने के बाद, शेड्यूलर संदर्भ पैरासिट को दो पैरामीटर - वर्तमान और अगले धागे के थ्रेड कंट्रोल ब्लॉक से गुजरता है।
  9. संदर्भ स्विच स्वयं तीन मुख्य चरणों से होता है। पहले व्यक्ति में, कर्नेल बताता है कि कौन सी सीपीयू रजिस्ट्रार थ्रेड वास्तव में उपयोग करता है और स्टैक पर या आउटगोइंट थ्रेड के टीसीबी में अपनी सामग्री को बचाता है। अगर थ्रेड एफपीयू और एसएसई रजिस्टरों का उपयोग नहीं करता है (आईए -32 मंच के लिए एक्सपेल) उनकी सामग्री सहेजी नहीं जाएगी।
  10. दूसरा चरण संदर्भ स्विच का दिल है। कर्नेल मौजूदा निर्देश सूचक को स्टैक पर धक्का देता है और आउटगोइंग थ्रेड के टीसीबी में स्टैक पॉइंटर बचाता है। फिर यह आने वाले धागे के टीसीबी से सीपीयू नए स्टैक पॉइंटर में लोड होता है और इसके शीर्ष से निर्देश सूचक पॉइंट करता है। बस यही है! नए सक्रिय ढेर का मतलब है नया सक्रिय धागा। इस बिंदु से शुरू होने से बाकी सिस्टम सोचेंगे कि यह आने वाले धागे के संदर्भ में काम करता है।
  11. तीसरे चरण में कर्नल आंकड़े बताते हैं कि वास्तव में आने वाले धागे द्वारा कौन से रजिस्टरों का उपयोग किया जाता है और उनकी पिछली सहेजी गई सामग्री (चरण 1 देखें) को वापस CPU में लोड करता है।
  12. फिर कर्नेल जांच करता है कि दोनों धागे (आने वाली और जाने वाली) एक ही प्रक्रिया से संबंधित हैं या नहीं। यदि वे विभिन्न प्रक्रियाओं से संबंधित हैं (जिस मामले में लोग कॉल प्रक्रिया स्विच करते हैं), कर्नेल मौजूदा पता स्थान को एमएमयू को आभासी के नए सेट पर भौतिक पता अनुवाद तालिकाओं पर इंगित करता है। इस प्रक्रिया के हिस्से के रूप में सीपीयू फ्लश अनुवाद लुकसाइड बफर (टीएलबी) जो आभासी को भौतिक पता ट्रान्सलेशन नियमों तक पहुंचाता है। नया आभासी पता स्थान का अर्थ है कि पहले कैश किए गए नियम अब गलत हैं। ध्यान दें कि संदर्भ स्विच क्रियाओं के पूरे सेट में यह एकमात्र कदम है जो प्रक्रियाओं की परवाह करता है!
  13. कर्नेल आने वाले धागे के लिए थ्रेड स्थानीय संग्रहण तैयार करता है। उदाहरण के लिए, निर्दिष्ट मेमोरी पेजों को निर्दिष्ट पते पर मानचित्रित करें या उदाहरण के लिए आईए -32 आम दृष्टिकोण पर आने वाले धागे के टीएलएस डेटा को इंगित करने वाले नए सेगमेंट को लोड करना है।
  14. अंत में कर्नेल आने वाले धागे के कर्नेल भाग के सीपीयू पते में लोड होता है। इसके बाद, प्रत्येक नया कर्नेल आमंत्रण इनकमिंग थ्रेड के ढेर के कर्नेल भाग का उपयोग करेगा, और आउटगोइंग थ्रेड के ढेर पर संग्रहीत डेटा दूषित नहीं करेगा।
  15. कर्नेल द्वारा किया जा सकता है एक और कदम सिस्टम टाइमर का पुन: प्रोग्रामिंग है। इस कर्नेल को करने से टाइमर को रिंग करने और कुछ समय बीतने के बाद कर्नेल को नियंत्रण पास करने के लिए कहा जाता है। इस समय अवधि को धागे के समय की मात्रा कहा जाता है।
  16. अंततः कर्नेल को संदर्भ स्विच के दौरान आँकड़े इकट्ठा करना पसंद है, जिसमें सीएचपी समय थ्रेड का उपभोग होता है, वास्तविक समय की इकाई में सिस्टम में संदर्भ स्विच कैसे हो सकते हैं, कितने बार थ्रेड लगाए जाते हैं, कितनी बार उनके पास होता है सीपीयू स्वैच्छिक और अनैच्छिक जारी किया गया, कितनी बार वे क्वांटम से बाहर भाग गए थे। उस आंकड़ों का हिस्सा तब शेड्यूलर द्वारा उपयोग किया जाता है, जो अधिक इष्टतम निर्णय लेने का प्रयास करता है। आंकड़ों का एक और उद्देश्य सिस्टम प्रशासकों और उपयोगकर्ताओं को सिस्टम के हुड के नीचे क्या चल रहा है, उन्हें दिखाने के लिए डिलीवरी है।
  17. थ्रेड स्विच को इस बिंदु पर पूरा किया जा सकता है और कर्नेल पहले सिस्टम क्रियाओं में बाधा डालता है। उदाहरण के लिए थ्रेड जो फ़ाइल पढ़ने की प्रतीक्षा कर रहा था, मेमोरी में परिणाम पढ़ने और इसे संभालने का निरीक्षण करता है। या कुछ थ्रेड सिस्टम गतिविधि के मध्य में म्यूटेक्स पर अवरुद्ध एक थ्रेड उस गतिविधि को जारी रखता है।
  18. अंत में, बाद में या जल्द ही धागा अपनी सिस्टम गतिविधियों को समाप्त करता है और अपने प्राथमिक कार्य को जारी रखने के लिए उपयोगकर्ता मोड पर वापस लौटना चाहता है, जिसके लिए इसे प्रारंभ में नियोजित किया गया था। इस बिंदु पर कर्नल सामान्य प्रयोजन रजिस्टरों की कर्नेल स्टैक सामग्री से पॉप करता है जिसे पहले कर्नेल में प्रवेश के दौरान सहेजा गया था और सीपीयू को उपयोगकर्ता मोड में वापसी करने के लिए कहता है।
  19. सीपीयू निर्देश पॉइंटर और स्टैक पॉइंटर के मानों को कैप्चर करता है, जिन्हें पहले कर्नेल मोड में प्रवेश के दौरान सहेजा गया था और उन्हें पुनर्स्थापित किया गया था। ऐसा करने से यह स्टैक के उपयोगकर्ता भाग में अपने ढेर के कर्नेल हिस्से से धागे को वापस भी स्विच करता है। अंत में सीपीयू कोड की अनुमतियों को रीसेट करता है जो अधिक सीमित सेट पर निष्पादित किया जाएगा (उदाहरण के लिए विशेष सिस्टम निर्देशों का उपयोग प्रतिबंधित करता है, या केरल कोड और डेटा तक पहुंच प्रतिबंधित करता है)। अंत में सीपीयू उस बिंदु पर नियंत्रण वापस ले जाता है जहां थ्रेड शुरू में छूट दी गई थी। सिस्टम कॉल थ्रेड के मामले में उस बिंदु पर आगे बढ़ेगा जहां सिस्टम कॉल का आह्वान किया गया था, जिसके परिणामस्वरूप कैप्चरिंग और हैंडलिंग किया गया था। बाधा से मोचन के मामले में, थ्रेड उसी निष्पादन को ठीक उसी बिंदु पर जारी रखेगा जिसमें अंतराल हुआ था। उस स्थिति में यह पूरी तरह से अनजान होगा कि यह बाधित था।

कुछ सारांश नोट:

  1. कर्नेल कार्यक्रम और केवल सूत्र, नहीं प्रक्रियाओं निष्पादित करता है। इस संदर्भ के कारण swicth धागे के बीच होता है।
  2. विभिन्न प्रक्रियाओं से संबंधित ट्रेडों के बीच संदर्भ स्विच की प्रक्रिया अनिवार्य रूप से वही प्रक्रिया के समान होती है जो समान प्रक्रिया से संबंधित होती है। पहले मामले में केवल एक अतिरिक्त कदम है - नई आभासी पता स्थान लोड करना (जो टीएलबी फ्लश की ओर जाता है)।
  3. धागे का संदर्भ थ्रेड के ढेर के कर्नेल भाग में या थ्रेड टीसीबी (पीसीबी में नहीं!) में संग्रहीत किया जाता है।
  4. थ्रेड स्विच प्रदर्शन दंड प्रस्तुत करता है। धागे स्विच की महत्वपूर्ण सीधी लागत है। और कैश प्रदूषण और टीएलबी फ्लश द्वारा बनाई गई बहुत बड़ी इंडेक्ट लागत (यदि वर्चुअल एड्रेस स्पेस स्विच के दौरान पुनः लोड किया गया था)।
2
  1. एक स्विच में, वर्तमान में क्रियान्वित की प्रक्रिया के राज्य, किसी भी तरह बचाया जाना चाहिए ताकि जब वह फिर से निर्धारित किया जाता है, इस राज्य बहाल किया जा सकता।
  2. प्रक्रिया स्थिति में उन सभी रजिस्टरों को शामिल किया गया है जो प्रक्रिया का उपयोग कर सकती हैं, विशेष रूप से प्रोग्राम काउंटर, साथ ही कोई अन्य ऑपरेटिंग सिस्टम विशिष्ट डेटा जो आवश्यक हो सकता है। यह आमतौर पर process control block (पीसीबी) या स्विचफ्रेम नामक डेटा संरचना में संग्रहीत होता है।
  3. पीसीबी कर्नेल मेमोरी (उपयोगकर्ता-मोड कॉल स्टैक के विपरीत) में प्रति-प्रक्रिया स्टैक पर संग्रहीत किया जा सकता है, या इस जानकारी के लिए कुछ विशिष्ट ऑपरेटिंग सिस्टम परिभाषित डेटा संरचना हो सकती है। पीसीबी के लिए एक हैंडल उन प्रक्रियाओं की कतार में जोड़ा जाता है जो दौड़ने के लिए तैयार होते हैं, जिन्हें अक्सर तैयार कतार कहा जाता है।
  4. चूंकि ऑपरेटिंग सिस्टम ने प्रभावी रूप से एक प्रक्रिया के निष्पादन को निलंबित कर दिया है, इसलिए यह तैयार कतार से प्रक्रिया चुनकर और अपने पीसीबी को बहाल करके संदर्भ स्विच कर सकता है। ऐसा करने में, पीसीबी से प्रोग्राम काउंटर लोड हो गया है, और इस प्रकार निष्पादन चयनित प्रक्रिया में जारी रख सकता है। प्रक्रिया और धागा प्राथमिकता प्रभावित कर सकती है कि कौन सी प्रक्रिया तैयार कतार से चुनी जाती है (यानी, यह प्राथमिकता कतार हो सकती है)।

Context Switch

(स्रोत: Context switch)