2009-01-01 13 views
11

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

कौन सा शेड्यूलर एक छोटी लेकिन महत्वपूर्ण निगरानी डेमॉन के लिए उपयुक्त होगा, प्राथमिकता क्या सुरक्षित रूप से सुरक्षित होगी? दोनों के बीच मतभेदों को समझने की कोशिश करते समय भी मैं थोड़ा अस्पष्ट आ रहा हूं।

मेरा प्रोग्राम 3k (और mlockall() का उपयोग करता है) के तहत आवंटित कर रहा है, यह लिखता है कि 600 बाइट्स xenbus के बाद सोते हैं, लेकिन मेरे लिए यह असंभव है कि यह कितना समय (एमएस में) वास्तव में डेटा लिखने में लगेगा .. चूंकि लिखा गया है विन्यास फाइल पर निर्भर करता है।

किसी भी सुझाव/स्पष्टीकरण के लिए अग्रिम धन्यवाद।

उत्तर

10

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

कार्यक्रम कुख्यात है क्योंकि इसे जीपीएल और लेखक tried to revoke the GPL retroactively के तहत जारी किया गया था। इस अधिनियम ने एक मामूली फायरस्टॉर्म उकसाया। वैसे भी, आप http://frequal.com/pmn/pchdtvr.html पर अध्ययन करने के लिए एक हालिया संस्करण पा सकते हैं।

+0

यह देखने के लिए __really__ मजाकिया है कि डेवलपर्स एक लाइसेंस चुनते हैं जिसे वे समझ में नहीं आये .. वास्तव में उदास, लेकिन हास्यास्पद। मैं फीफो के साथ जाने जा रहा हूं, लेकिन जब प्रोग्राम प्रोग्राम कर सकता है और सामान्य शेड्यूलिंग पर वापस आ सकता है, या चीजों को मोटा होने पर आरटी पर वापस आना चाहिए। मैं देखता हूँ कि यह कैसे चला जाता है। –

+1

@ टिंकर्टिम: स्लैडडॉट पर फूरर अविश्वसनीय था। http://yro.slashdot.org/article.pl?no_d2=1&sid=08/01/26/0341210 –

2

मैं शेड्यूलिंग योजनाओं के लिए एक विशेषज्ञ नहीं हूँ, लेकिन

man sched_setscheduler 

यह विवरण क्या अलग शेड्यूलिंग एल्गोरिदम के बीच अंतर कर रहे हैं पर एक नजर है, और अन्य शेड्यूलिंग कार्यों के लिए लिंक प्रदान। SCHED_FIFO वास्तव में बहुत खतरनाक लगता है, लेकिन सबसे आक्रामक शेड्यूलिंग के रूप में वर्णित है:

एक SCHED_FIFO प्रक्रिया चलाता है जब तक या तो यह एक मैं/हे अनुरोध के द्वारा अवरुद्ध है, यह एक उच्च प्राथमिकता प्रक्रिया द्वारा रोका जाता है, या यह sched_yield कॉल (2)।

अपने सिस्टम को लॉक न करने से सावधान रहें। मैं व्यक्तिगत रूप से कुछ अनुभवजन्य परीक्षण करता हूं यह देखने के लिए कि कौन सी प्राथमिकता सर्वोत्तम फिट बैठती है और वे वास्तव में कैसे व्यवहार करते हैं।

+0

उत्तर के लिए धन्यवाद, मैंने मैन पेजों और विभिन्न दस्तावेजों को देखा जो खोजों में बदल गए। अब मैं कोई समस्या नहीं के साथ SCHED_FIFO का उपयोग कर रहा हूं, लेकिन आरआर के बारे में आश्चर्यचकित हूं।मुझे नहीं लगता कि मैं आरआर का उपयोग कर सकता हूं, क्योंकि मुझे यह जानने का कोई तरीका नहीं है कि क्या मैं वास्तव में एक टुकड़ा में परमाणु लेखन को पूरा कर सकता हूं। एक बार sysinfo() की सामग्री स्वीकार्य हो जाने के बाद –

+0

I (सकता) शेड_इल्ड() भी कॉल कर सकता है .. यानी सिस्टम अब तनाव में नहीं है। हो सकता है कि मैं फीफो के साथ रहूंगा लेकिन आरटी जाने के लिए तर्क लिखूंगा जब सिस्टम (या जल्द ही होगा) पर बल दिया जाए, फिर शांत होने पर वापस जाएं। –

+0

एचएम, हाँ मुझे लगता है कि उस कार्य के लिए फीफो उचित लगता है। –

2

यदि आपके सभी अन्य कार्य मानक शेड्यूलर का उपयोग करते हैं, तो इससे कोई फर्क नहीं पड़ता; SCHED_FIFO और SCHED_RR केवल इन कार्यों के शेड्यूलिंग को एक दूसरे के साथ प्रभावित करते हैं।

तो सामान्य प्रणाली पर इससे कोई फर्क नहीं पड़ता। फीफो को समझना सबसे आसान है, इसलिए मुझे लगता है कि इसका उपयोग करें।

आप अलग प्राथमिकताओं के कई कार्य किया है, केवल उच्च एक अगर वे सब चलाने के लिए तैयार कर रहे हैं (और वहाँ केवल एक सीपीयू कोर है)

6

SCHED_FIFO रोका नहीं जा सकता चलाया जाएगा (संदर्भ बंद एक और प्रक्रिया के लिए) जब तक उच्च प्राथमिकता की एक और प्रक्रिया निष्पादन कतार में दिखाई नहीं देती है।

SCHED_RR को समय क्वांटम (निष्पादित करने की प्रक्रिया में देरी) द्वारा छूट दी जा सकती है।

वे दोनों लिनक्स आधारित शेड्यूलर की "वास्तविक समय" प्राथमिकताओं दोनों हैं।

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