लिनक्स और आरटी प्राथमिकताओं में सुखद प्राथमिकताओं के बीच अंतर

लिनक्स पर, शेड्यूलर नियंत्रित करता है कि किस स्ट्रीम को निष्पादित किया गया है और कब तक। दो परस्पर विरोधी आवश्यकताओं को संबोधित करने की आवश्यकता है: इनपुट / आउटपुट और कम्प्यूटेशनल चालकता।

निष्पादन का क्रम प्रत्येक थ्रेड की प्राथमिकता की नीति और योजना पर आधारित है। लिनक्स संस्करण 2.2 में, एक तालिका नीति लागू की गई है। Linux 6 नीतियाँ प्रदान करता है: SCHED_FIFO, SCHED_RR, SCHED_DEADLINE, SCHED_DEADLINE, SCHED_OTHER, SCHED_BATCH और SCHED_IDLE। ये नीतियां SCHED_DEADLINE को छोड़कर 2 समूहों में विभाजित हैं; SCHED_OTHER, SCHED_IDLE और SCHED_ATCH सामान्य नीति से संबंधित हैं, और SCHED_FIFO, SCHED_RR वास्तविक समय है। SCHED_DEADLINE विषय विशेष और प्राथमिकता वाले विषय हैं।

प्रत्येक थ्रेड में "शेड्यूल_पैरिटी" मान होता है, और अन्य की तुलना में अधिक "शेड्यूल_पायरिटी" मूल्य वाले थीम होते हैं। शेड्यूल_पायरिटी को कभी-कभी वास्तविक समय की प्राथमिकता कहा जाता है क्योंकि यह मुख्य रूप से वास्तविक समय की नीति का उपयोग करके थ्रेड्स के निष्पादन क्रम का चयन करने के लिए किया जाता है। सामान्य पॉलिसी रनटाइम टेबल_पैरिटी वैल्यू 0 हैं, जबकि रियल-टाइम थ्रेड आमतौर पर 1 से 99 हैं। प्रणाली। Sched_pyerity का मान, शेड्यूल_सेटसेट्यूलर फ़ंक्शन के साथ-साथ पॉलिसी द्वारा भी सेट किया जा सकता है और शेड्यूल_शीटेडर फ़ंक्शन द्वारा चेक किया जा सकता है।

यदि Sched_priority मान वास्तविक-समय प्रवाह से मेल खाती है, तो अन्य थ्रेड के लिए डिफ़ॉल्ट थ्रेड अच्छा मान कहा जाता है। पसंदीदा रेंज -20 (उच्च प्राथमिकता) से +19 (कम प्राथमिकता) है। खुशी का मूल्य एक अच्छे फ़ंक्शन या सेटपैरिटी फ़ंक्शन के माध्यम से और गेटपैरिटी फ़ंक्शन द्वारा जाँच की जा सकती है।

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

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

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

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