उपयोगकर्ता-स्तरीय थ्रेड्स और कर्नेल-स्तर थ्रेड्स के बीच अंतर क्या है?


33

कई स्रोतों को पढ़ने के बाद मैं अभी भी उपयोगकर्ता- और कर्नेल-स्तरीय थ्रेड्स के बारे में उलझन में हूं।

विशेष रूप से:

थ्रेड्स उपयोगकर्ता के स्तर और कर्नेल स्तर दोनों पर मौजूद हो सकते हैं

उपयोगकर्ता स्तर और कर्नेल स्तर के बीच अंतर क्या है?


1
यह वास्तव में COMP विज्ञान (सिद्धांत) या सिर्फ प्रोग्रामिंग है?
मेहरदाद

6
@ मेहरदाद, ऑपरेटिंग सिस्टम कंप्यूटर विज्ञान का एक हिस्सा है।
केवह

जवाबों:


28

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

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

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

एक प्रणाली कर्नेल-स्तर और उपयोगकर्ता-स्तर थ्रेड दोनों की पेशकश कर सकती है; इसे हाइब्रिड थ्रेडिंग के रूप में जाना जाता है ।

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


आपकी अंतिम पंक्ति कहती है "कर्नेल-स्तरीय थ्रेड्स मल्टीप्रोसेसर मशीनों पर एक साथ चल सकते हैं, जो विशुद्ध रूप से उपयोगकर्ता-स्तर के थ्रेड्स प्राप्त नहीं कर सकते हैं"। लेकिन, दी गई लिंक कहती है, ULT साथ-साथ stackoverflow.com/questions/14791801/… चला सकते हैं । क्या मुझे कुछ गलत हो रहा है?
गैरिक

क्या आप कृपया मेरी उपरोक्त टिप्पणी देख सकते हैं?
गैरिक

1
@Garrick एक से अधिक उपयोगकर्ता-स्तरीय थ्रेड्स अलग-अलग कोर पर एक ही समय में चल सकते हैं, बशर्ते कि वे अलग-अलग कर्नेल-लेवल थ्रेड के अंदर चल रहे हों। यदि आपके पास केवल एक उपकरण के रूप में ULT है, तो आप एक एकल प्रोसेसर तक सीमित हैं। यदि केएलटी उपलब्ध हैं, तो आप कर्नेल थ्रेड को कई प्रोसेसर पर फैला सकते हैं और अपने यूएलटी को उपलब्ध कर्नेल थ्रेड्स के बीच भेज सकते हैं।
गिल्स एसओ- बुराई को रोकें '

4

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

यहाँ तथ्य हैं

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

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

मॉडल के

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

  • यदि कुछ और वर्चुअल प्रोसेसर बनाए जा सकते हैं तो यह सीमा समाप्त हो सकती है। अब, थ्रेड्स समवर्ती रूप से चल सकते हैं (समानांतर में यदि कई वास्तविक प्रोसेसर मौजूद हैं)। एक धागा अन्य थ्रेड्स को प्रभावित नहीं करेगा जो अन्य वर्चुअल प्रोसेसर पर मैप किए जाते हैं।

  • बाद के मॉडल में, एक या कई थ्रेड्स को वर्चुअल प्रोसेसर पर मैप किया जा सकता है।

  • उपरोक्त मॉडलों को क्रमशः एक से एक, एक से एक और कई से कई नाम दिए गए हैं।

रेफरेंस: गैल्विन एट अल द्वारा ऑपरेटिंग सिस्टम अवधारणाओं। विषय: धागे -> कई मॉडल बनाना

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