क्या लिनक्स कर्नेल उपयोगकर्ता पता स्थान में pthreads के बारे में जागरूक है (जो मुझे नहीं लगता कि यह है .. लेकिन मुझे उस पर कोई जानकारी नहीं मिली)। थ्रेड स्विचिंग होने पर निर्देश सूचक कैसे बदलता है .. ??एक प्रक्रिया में pthreads के बीच समय टुकड़ा विभाजित कैसे किया जाता है?
उत्तर
1) कर्नेल उपयोगकर्ता स्तर के धागे के बारे में नहीं जानता है। हालांकि, एनपीटीएल उपयोगकर्ता स्तर
2) यह वास्तव में एक व्यापक प्रश्न है। आपको ओएस बुक देखना चाहिए। यह उस मुद्दे पर गहराई में जाएगा और अन्य सभी संदर्भ स्विच में शामिल होंगे।
अरे धन्यवाद !! AFAIK, ओएस किताबें प्रक्रिया संदर्भ स्विचिंग पर कवर कवर। लेकिन सोच रहा था, धागे के बीच समय टुकड़ा प्रबंधन कैसे होता है .. अगर कर्नेल धागे से अवगत नहीं है, तो क्या यह आंशिक रूप से, शेड्यूलर सक्रियण की तरह कुछ चीज है ?? यदि प्रक्रिया नहीं है, तो थ्रेड को प्रबंधित करने और बुक करने में सक्षम कैसे है। और मुझे लगता है कि यह अधिक है, यह उपयोगकर्ता स्तर प्रोग्रामिंग से अधिक संबंधित है .. इसलिए, यहां सवाल पूछा .. – SpinLocked
यदि आप इन चीजों को लिनक्स कैसे करते हैं, इस बारे में जानने में रुचि रखते हैं, तो रॉबर्ट लव द्वारा लिनक्स कर्नेल डेवलपमेंट देखें। इसमें बहुत कुछ शामिल है, लेकिन यह काफी सुलभ है। का आनंद लें। – Avi
वैसे लिनक्स कर्नेल उपयोगकर्ता थ्रेड के बारे में नहीं जानता है (pthread उपयोगकर्तास्थान में करता है, इसके अलावा कर्नेल वास्तव में उनके बारे में परवाह नहीं करता है सिवाय इसके कि उसे केवल शेड्यूल करना है)।
कर्नेल में निर्देश सूचक को संदर्भ स्विच कहा जाता है, इसके दौरान निर्देश सूचक बदल जाता है। इस स्विच के दौरान कर्नेल अनिवार्य रूप से शेड्यूलर से पूछता है कि अगला क्या है? शेड्यूलर इसे एक task_struct सौंप देगा जिसमें थ्रेड के बारे में सारी जानकारी और एक संदर्भ स्विच के लिए इंटरप्ट हैंडलर आगे बढ़ेगा और मानों के अनुसार सीपीयू पर सेट करेगा (पेज टेबल, निर्देश सूचक, आदि ...) और जब वह कोड सीपीयू किया जाता है बस बस वहां से निष्पादन शुरू होता है।
तो आपको कहना जरूरी है .. एक धागा एक पूर्णकालिक टुकड़ा पकड़ लेता है, प्रक्रिया आवंटित की गई थी? और प्रक्रिया में थ्रेड के बीच कोई टुकड़ा विभाजित नहीं होता है? – SpinLocked
@SpinLocked कर्नेल परवाह नहीं है कि यह एक प्रक्रिया या धागा है (यह वास्तव में कोई भेद नहीं करता है) यह केवल प्राथमिकता (थ्रेड देने के लिए समय की मात्रा) की परवाह करता है और यदि यह शेड्यूल करने योग्य है या नहीं (I/O या कुछ के लिए प्रतीक्षा)। –
धन्यवाद। मैं शायद सवाल गलत गलत बताया। क्षमा याचना। मैं धागा स्तर शेड्यूलिंग काम जानने का इरादा रखता हूं। क्या यह थ्रेड मैपिंग के लिए सादा समय टुकड़ा है या, प्रक्रिया स्तर पर कोई खुफिया जानकारी है, जो प्रत्येक धागे को उस समय का हिस्सा देती है। – SpinLocked
मूल एनपीटीएल (देशी पॉजिक्स थ्रेड लाइब्रेरी) लिनक्स मैप्स में उपयोग की जाती है जो कर्नेल में "संसाधनों को साझा करने वाली प्रक्रियाओं और इसलिए धागे की तरह दिखती है" को पाथ्रेड करता है। इस तरह, कर्नेल का शेड्यूलर सीधे pthreads के शेड्यूलिंग को नियंत्रित करता है।
एक "पर्थ्रेड स्विच" सटीक उसी कोड (कर्नेल में) द्वारा किया जाता है जो प्रक्रिया स्विच को संभालता है। सरलीकृत, यह कुछ "स्टोर पिछली प्रक्रिया स्थिति" जैसा होगा; यदि अगली प्रक्रिया एक अलग वर्चुअल एड्रेस स्पेस का उपयोग करती है तो वर्चुअल एड्रेस रिक्त स्थान स्विच करें; अगली प्रक्रिया स्थिति लोड करें; " (जहां "प्रक्रिया स्थिति" प्रक्रिया/धागे के लिए निर्देश सूचक शामिल है)।
धन्यवाद कुछ जानकारी मिली है। क्या आप आगे की जानकारी के लिए कुछ स्रोत उद्धृत कर सकते हैं .. – SpinLocked
यह ठीक है कि लिनक्स ने हमेशा धागे कैसे किए हैं। हालांकि मुझे कुछ संदर्भ मिल गए। 1) http://www.icir.org/gregor/tools/pthread-scheduling.html पर "5 लिनक्स" तक स्क्रॉल करें। 2) http://linux.die.net/man/7/pthreads पर "पॉज़िक्स थ्रेड के लिनक्स कार्यान्वयन" तक स्क्रॉल करें। – Brendan
- 1. pthreads: कोड को कैसे जोर देना एक थ्रेड किए गए संदर्भ में चलाया जाता है
- 2. क्या थ्रेडपूल एप्लिकेशन डोमेन के बीच साझा किया जाता है?
- 3. दो पूंजी अक्षरों के बीच कैसे विभाजित किया जाए?
- 4. कोड का एक टुकड़ा के बाद ही सभी धागे से किया जाता है
- 5. अन्य समय सीमाओं में एक समय सीमा को विभाजित करें
- 6. क्या होता है जब प्रक्रिया को फोर्क किया जाता है?
- 7. जावास्क्रिप्ट में समय का टुकड़ा कैसे होता है?
- 8. शून्य निरंतर संकलित समय त्रुटि द्वारा जावा जावा को विभाजित क्यों नहीं किया जाता है?
- 9. फ़ाइल का उपयोग दूसरी प्रक्रिया द्वारा किया जाता है। कैसे प्रक्रिया को जानना है?
- 10. निगरानी करते समय एक रेडियो बटन अनचेक किया जाता है
- 11. लिनक्स में pthreads tracing?
- 12. जब एक टुकड़ा प्रतिस्थापित किया जाता है और पीछे की ढेर में डाल दिया जाता है (या हटाया जाता है) क्या यह स्मृति में रहता है?
- 13. अभिविन्यास बदलते समय एक्शनबार स्केरलॉक रीफ्रेश नहीं किया जाता है
- 14. पता लगाएं कि एक टुकड़ा कब खींचा जाता है?
- 15. प्रोसेस आकार कैसे निर्धारित किया जाता है?
- 16. pthreads के लिए अच्छा स्तर?
- 17. pthreads प्राथमिकता
- 18. कैसे एक टुकड़ा एंड्रॉयड
- 19. एक वेक्टर कॉपी कब किया जाता है, एक संदर्भ कब पास किया जाता है?
- 20. क्या मॉड्यूल के इंस्टेंस वैरिएबल क्लास के बीच कक्षा के बीच साझा किया जाता है?
- 21. चरित्र समूह में कैसे विभाजित किया जाए?
- 22. मैं समय-समय पर एक रिपोर्टिंग तालिका का पुनर्निर्माण कैसे करूं जिसे अक्सर उपयोग किया जाता है?
- 23. कैसे ConcurrentDictionary का उपयोग किया जाता है और इसे क्रमबद्ध कैसे किया जाता है?
- 24. एक ही समय में बहु-अनुरोधों को कैसे हल किया जाता है?
- 25. एक क्यूआर एक टुकड़ा
- 26. pthread_join कैसे कार्यान्वित किया जाता है?
- 27. डिस्क पर btree कैसे संग्रहीत किया जाता है?
- 28. एक टुकड़ा
- 29. एसएमपी पर हस्तक्षेप कैसे किया जाता है?
- 30. .NET में, जीआईटी समय के बजाय संकलन समय पर स्थिरांक का मूल्यांकन क्यों किया जाता है?
हालांकि धागे और प्रक्रियाओं के बीच कोई शेड्यूलिंग अंतर नहीं है, आप थ्रेड/प्रक्रियाओं को नियंत्रण समूहों में समूहित कर सकते हैं, जिनमें से प्रत्येक को शेड्यूलर द्वारा "एकाउंटिंग इकाई" के रूप में माना जाएगा, यानी यह पूरे नियंत्रण समूह को चार्ज करेगा सीपीयू समय, तो यदि आप समूह, उदाहरण के लिए एक मेवेन आमंत्रण (जो बहुत सारे धागे बनाता है), शेष नियंत्रण समूहों को CPU समय का एक बड़ा हिस्सा मिलेगा। – ninjalj