2011-03-26 27 views
76

क्या कोई मुझे बता सकता है कि दोनों स्थितियों में वास्तव में क्या किया जाता है? उनमें से प्रत्येक मुख्य लागत क्या है?धागा संदर्भ स्विच बनाम प्रक्रिया संदर्भ स्विच

+0

यह शायद http://www.linfo.org/context_switch.html –

उत्तर

138

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

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

+19

अच्छा जवाब मदद कर सकता है। काश मैं इस सामान को अच्छी तरह से जानता था! – CtrlDot

+4

यह सब मानते हैं कि टीएलबी और कैश प्रत्येक प्रविष्टि के लिए पिड स्टोर नहीं करते हैं। – dramzy

+0

IMHO @dramzy सही है, ओएस रैपिड कॉन्टेक्स्ट स्विचिंग का समर्थन कर सकता है जिसे जल्द ही यहां बताया गया है: https://youtu.be/3akTtCu_F_k?t=46m8s (वर्चुअल मेमोरी, पेज टेबल और टीएलबी के बारे में और जानने के लिए शुरुआत से देखें) । – piotrwest

-1

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

इसमें एक और अधिक लुईओट है। उन्होंने किताबें लिखी हैं।

लागत, एक प्रक्रिया संदर्भ स्विच >>>> थ्रेड के लिए के रूप में के रूप में आप ढेर काउंटर आदि को रीसेट करना है

-1

यह मानते हुए कि सीपीयू OS चल रहा मिला है कुछ उच्च विलंबता डिवाइस संलग्न,

यह प्रक्रिया का पता अंतरिक्ष का एक और धागा चलाने के लिए समझ में आता है, जबकि उच्च विलंबता डिवाइस वापस प्रतिक्रिया करता है।

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

इसके अलावा, हॉट कैश (प्रक्रिया/थ्रेड चलाने के लिए आवश्यक डेटा कम समय में पहुंच योग्य है) बेहतर विकल्प है।

3
  • प्रक्रिया स्विचिंग: यह एक बहु क्रमादेशन वातावरण में प्रक्रिया के दो स्मृति निवासी के बीच एक संक्रमण है,
  • संदर्भ स्विचिंग: यह एक निष्पादन कार्यक्रम से एक इंटरप्ट सेवा दिनचर्या (आईएसआर) में एक बदलती संदर्भ है।
8

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

थ्रेड स्विचिंग एक ही प्रक्रिया में एक थ्रेड से दूसरी तरफ संदर्भ स्विचिंग है (प्रक्रियाओं में धागे से थ्रेड तक स्विचिंग केवल प्रक्रिया स्विचिंग है)। प्रोसेसर राज्य (जैसे प्रोग्राम काउंटर और रजिस्टर सामग्री) आमतौर पर बहुत ही कुशल है।

6

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

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

पी.एस .: संदर्भ स्विच भूमि के ऊपर के बारे में अच्छी पोस्ट: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html

0

थ्रेड संदर्भ स्विचिंग में, आभासी स्मृति अंतरिक्ष एक ही रहता है, जबकि यह प्रक्रिया संदर्भ स्विच के मामले में नहीं है। साथ ही, प्रक्रिया संदर्भ स्विच थ्रेड संदर्भ स्विच की तुलना में महंगा है।

संबंधित मुद्दे