2012-02-22 6 views
5

क्या लिनक्स कर्नेल उपयोगकर्ता पता स्थान में pthreads के बारे में जागरूक है (जो मुझे नहीं लगता कि यह है .. लेकिन मुझे उस पर कोई जानकारी नहीं मिली)। थ्रेड स्विचिंग होने पर निर्देश सूचक कैसे बदलता है .. ??एक प्रक्रिया में pthreads के बीच समय टुकड़ा विभाजित कैसे किया जाता है?

+0

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

उत्तर

1

1) कर्नेल उपयोगकर्ता स्तर के धागे के बारे में नहीं जानता है। हालांकि, एनपीटीएल उपयोगकर्ता स्तर

2) यह वास्तव में एक व्यापक प्रश्न है। आपको ओएस बुक देखना चाहिए। यह उस मुद्दे पर गहराई में जाएगा और अन्य सभी संदर्भ स्विच में शामिल होंगे।

+0

अरे धन्यवाद !! AFAIK, ओएस किताबें प्रक्रिया संदर्भ स्विचिंग पर कवर कवर। लेकिन सोच रहा था, धागे के बीच समय टुकड़ा प्रबंधन कैसे होता है .. अगर कर्नेल धागे से अवगत नहीं है, तो क्या यह आंशिक रूप से, शेड्यूलर सक्रियण की तरह कुछ चीज है ?? यदि प्रक्रिया नहीं है, तो थ्रेड को प्रबंधित करने और बुक करने में सक्षम कैसे है। और मुझे लगता है कि यह अधिक है, यह उपयोगकर्ता स्तर प्रोग्रामिंग से अधिक संबंधित है .. इसलिए, यहां सवाल पूछा .. – SpinLocked

+0

यदि आप इन चीजों को लिनक्स कैसे करते हैं, इस बारे में जानने में रुचि रखते हैं, तो रॉबर्ट लव द्वारा लिनक्स कर्नेल डेवलपमेंट देखें। इसमें बहुत कुछ शामिल है, लेकिन यह काफी सुलभ है। का आनंद लें। – Avi

2

वैसे लिनक्स कर्नेल उपयोगकर्ता थ्रेड के बारे में नहीं जानता है (pthread उपयोगकर्तास्थान में करता है, इसके अलावा कर्नेल वास्तव में उनके बारे में परवाह नहीं करता है सिवाय इसके कि उसे केवल शेड्यूल करना है)।

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

+0

तो आपको कहना जरूरी है .. एक धागा एक पूर्णकालिक टुकड़ा पकड़ लेता है, प्रक्रिया आवंटित की गई थी? और प्रक्रिया में थ्रेड के बीच कोई टुकड़ा विभाजित नहीं होता है? – SpinLocked

+0

@SpinLocked कर्नेल परवाह नहीं है कि यह एक प्रक्रिया या धागा है (यह वास्तव में कोई भेद नहीं करता है) यह केवल प्राथमिकता (थ्रेड देने के लिए समय की मात्रा) की परवाह करता है और यदि यह शेड्यूल करने योग्य है या नहीं (I/O या कुछ के लिए प्रतीक्षा)। –

+0

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

5

मूल एनपीटीएल (देशी पॉजिक्स थ्रेड लाइब्रेरी) लिनक्स मैप्स में उपयोग की जाती है जो कर्नेल में "संसाधनों को साझा करने वाली प्रक्रियाओं और इसलिए धागे की तरह दिखती है" को पाथ्रेड करता है। इस तरह, कर्नेल का शेड्यूलर सीधे pthreads के शेड्यूलिंग को नियंत्रित करता है।

एक "पर्थ्रेड स्विच" सटीक उसी कोड (कर्नेल में) द्वारा किया जाता है जो प्रक्रिया स्विच को संभालता है। सरलीकृत, यह कुछ "स्टोर पिछली प्रक्रिया स्थिति" जैसा होगा; यदि अगली प्रक्रिया एक अलग वर्चुअल एड्रेस स्पेस का उपयोग करती है तो वर्चुअल एड्रेस रिक्त स्थान स्विच करें; अगली प्रक्रिया स्थिति लोड करें; " (जहां "प्रक्रिया स्थिति" प्रक्रिया/धागे के लिए निर्देश सूचक शामिल है)।

+0

धन्यवाद कुछ जानकारी मिली है। क्या आप आगे की जानकारी के लिए कुछ स्रोत उद्धृत कर सकते हैं .. – SpinLocked

+0

यह ठीक है कि लिनक्स ने हमेशा धागे कैसे किए हैं। हालांकि मुझे कुछ संदर्भ मिल गए। 1) http://www.icir.org/gregor/tools/pthread-scheduling.html पर "5 लिनक्स" तक स्क्रॉल करें। 2) http://linux.die.net/man/7/pthreads पर "पॉज़िक्स थ्रेड के लिनक्स कार्यान्वयन" तक स्क्रॉल करें। – Brendan

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

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