थ्रेड संदर्भ स्विच बनाम। प्रक्रिया संदर्भ स्विच


128

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


जवाबों:


204

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

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


8
यह सभी मान रहे हैं कि TLB और कैश प्रत्येक प्रविष्टि के लिए pid को संग्रहीत नहीं करते हैं।
नाटकीय

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

@piotrwest मुख्यधारा के किसी भी ओएस को तीव्र संदर्भ स्विचिंग का समर्थन करते हैं?
अधिकतम

2
@dramzy क्या आपका मतलब ओएस या हार्डवेयर पीआईडी ​​स्टोर कर सकता है? क्या यह प्रासंगिक है?
अधिकतम

मेरे मन में लिनक्स पर केवल थ्रेड स्विच (सुनिश्चित करने के लिए नहीं) है, इसलिए लिनक्स ओएस यह जांच करेगा कि क्या अगले धागे को चलाने के लिए चलने वाले धागे के साथ सेव पीड है?
रोचासिनई

16

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

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


13

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

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

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


3
  • प्रक्रिया स्विचिंग: यह एक मल्टीग्राउमिंग वातावरण में प्रक्रिया के निवासी दो मेमोरी के बीच एक संक्रमण है;
  • संदर्भ स्विचिंग: यह एक निष्पादन कार्यक्रम से एक बाधा सेवा दिनचर्या (ISR) के लिए एक बदलते संदर्भ है।

2

थ्रेड कॉन्टेक्ट स्विचिंग में, वर्चुअल मेमोरी स्पेस वही रहता है, जबकि प्रोसेस कॉन्टेक्स्ट स्विच के मामले में ऐसा नहीं है। इसके अलावा, प्रक्रिया संदर्भ स्विच थ्रेड संदर्भ स्विच की तुलना में महंगा है।


0

मुझे लगता है कि मुख्य अंतर यह है कि जब कॉलिंग switch_mm()पुराने और नए कार्य के मेमोरी डिस्क्रिप्टर को संभालती है। थ्रेड्स के मामले में, वर्चुअल मेमोरी एड्रेस स्पेस अपरिवर्तित होता है (थ्रेड्स वर्चुअल मेमोरी साझा करते हैं), इसलिए बहुत कम काम करना पड़ता है, और इसलिए कम खर्चीला होता है।


0

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


-1

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

वहाँ एक loooooot यह करने के लिए और अधिक है। उन्होंने इस पर किताबें लिखी हैं।

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


-1

यह मानते हुए कि OS चलाने वाले CPU को कुछ उच्च अक्षांश उपकरण संलग्न हैं,

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.