2012-11-21 13 views
13

POSIX XSH 2.8.4 Process Scheduling के बीच विसंगति को समझना धागे और प्रक्रियाओं के लिए शेड्यूलिंग विशेषताओं के व्यवहार को परिभाषित करता है। sched_* इंटरफेस को प्रक्रिया की शेड्यूलिंग गुणों को प्रभावित करने के लिए निर्दिष्ट किया गया है, धागा नहीं। यह निम्न मार्ग में स्पष्ट किया जाता है:POSIX और Linux/glibc sched_ * फ़ंक्शंस

POSIX मॉडल एक या अधिक थ्रेड प्रोसेसर (ओं) पर ऑपरेटिंग सिस्टम द्वारा निर्धारित किया गया हो सहित सिस्टम संसाधन, के एकीकरण का एक "प्रक्रिया" व्यवहार करता है यह नियंत्रित करता है । यद्यपि एक प्रक्रिया में शेड्यूलिंग विशेषताओं का अपना सेट होता है, लेकिन नीचे वर्णित व्यक्तिगत थ्रेड के शेड्यूलिंग व्यवहार पर इन पर अप्रत्यक्ष प्रभाव (यदि कोई है) है।

और

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

इस बात का मेरे पढ़ने कि, एक प्रणाली है जहाँ केवल "प्रणाली शेड्यूलिंग विवाद गुंजाइश" समर्थित है (लिनक्स/एक ऐसी प्रणाली glibc है) पर, sched_* कार्यों बिल्कुल नहीं नमूदार प्रभाव होना चाहिए है।

यह लिनक्स/ग्लिब पर वर्तमान व्यवहार की वास्तविकता के विपरीत है जहां sched_* किसी विशेष थ्रेड के शेड्यूलिंग विशेषताओं को सेट करता है।

एक तरफ बेहतर सामान्य रूप में इस स्थिति को समझने के लिए इच्छुक से, मुझे लगता है मैं इन महत्वपूर्ण प्रश्न हैं लगता है:

  1. वहाँ इस विसंगति के लिए तर्क के किसी भी प्रलेखन है?

  2. क्या मेरा मानक सही है? विशेष रूप से, यह वास्तव में मुझे आश्चर्यजनक लगता है कि sched_setparam और sched_setscheduler को एकल-थ्रेडेड एप्लिकेशन में कोई प्रभाव नहीं डाला जाएगा (जहां मुख्य धागा डिफ़ॉल्ट शेड्यूलिंग नीति का उपयोग कर रहा है, जिसे बदला नहीं जा सकता है, और सिस्टम विवाद स्कोप)।

  3. मानक sched_* फ़ंक्शंस की उपयोगिता क्या है? ऐसा लगता है कि उनके पास अधिकांश कार्यान्वयन पर कोई प्रभाव नहीं पड़ता है, और प्रक्रिया विवाद स्कोप का समर्थन करने वाले कार्यान्वयन पर भी कम प्रभाव पड़ता है। क्या कोई उनके इच्छित उद्देश्य का वर्णन कर सकता है?

+2

यदि यह स्टैक ओवरफ्लो नहीं था, तो यहां एक लौ युद्ध शुरू हो गया होगा। – ssice

उत्तर

0

लिनक्स में sched_setparam आदि के व्यवहार के लिए कोई औचित्य नहीं है धागे clone(2) सिस्टम कॉल, cf द्वारा बनाई गई इस तथ्य की प्रक्रिया में हैं glibc/nptl/sysdeps/pthread/createthread.c

+2

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

+0

ठीक है, यह शब्द अच्छा नहीं लगता है, वास्तव में, हालांकि यह अब कम (या अधिक) सत्य नहीं है लिनक्स थ्रेड समय के लिए। वैसे भी, कर्नेल में शेड्यूल-सक्षम इकाई और कर्नेल में 'dok' और' pthread_create' 'तक पहुंचने के लिए कोई भी "थ्रेड समूह" नहीं है, जो कि कर्नेल में समान' do_fork' फ़ंक्शन तक पहुंचता है, जो एक ही 'struct task_struct का उदाहरण बनाता है '। – chill

+1

मैं मानता हूं कि लिनक्स में प्रक्रियाओं (थ्रेड समूहों) के लिए कोई शेड्यूलिंग गुण नहीं है। यही कारण है कि एनपीटीएल प्रक्रिया शेड्यूलिंग विवाद स्कोप (जो POSIX वैकल्पिक बनाता है) को छोड़ देता है। मुझे जो नहीं मिलता है वह यह है कि ये फ़ंक्शन एक थ्रेड के शेड्यूलिंग गुणों को क्यों बदल रहे हैं जब उन्हें नज़दीक या पूर्ण नो-ऑप्स के रूप में निर्दिष्ट किया जाता है। –

1

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

और संभवतः क्योंकि, जैसा कि आप इंगित करते हैं, जिस तरह से पॉज़िक्स उन्हें निर्दिष्ट करता है, वास्तव में प्रक्रिया विवाद स्कोप और नरक के बिना वास्तव में उपयोगी नहीं होगा;

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