2010-06-08 12 views
9

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

क्वेरी है: 1. शेड्यूलर कौन कॉल करता है? [VxWorks में] 2. यदि इसे नियमित अंतराल पर बुलाया जाता है - यह तंत्र कैसे लागू किया जाता है?

अग्रिम धन्यवाद।

--Ashwin

+0

जबकि मुझे अन्य ओएस में VxWorks नहीं पता है, शेड्यूलर को आमतौर पर टाइमर इंटरप्ट द्वारा बुलाया जाता है, इसलिए यह एक कार्य वर्तमान में व्यस्त होने पर भी कार्य स्विच कर सकता है। – Rudi

उत्तर

12

सरल उत्तर यह है कि vxWorks सिस्टम टाइमर से हार्डवेयर इंटरप्ट के माध्यम से नियंत्रण लेता है जो सिस्टम चल रहा है, जबकि निश्चित अंतराल पर लगातार होता है।

जब vxWorks शुरू होता है, यह आपके हार्डवेयर कॉन्फ़िगर करता है एक टाइमर interrupt हर n मिलीसेकेंड, जहां n अक्सर 10 है, लेकिन पूरी तरह से आपके हार्डवेयर पर निर्भर करता है उत्पन्न करने के लिए:

यहाँ अधिक विस्तार से बताया। टाइमर अंतराल आमतौर पर vxWorks द्वारा आपके Board Support Package (BSP) में शुरू होने पर स्थापित किया जाता है।

हर बार टाइमर एक बाधा उत्पन्न करता है, सिस्टम टाइमर interrupt handler निष्पादित करना शुरू करता है। टाइमर इंटरप्ट हैंडलर vxWorks का हिस्सा है, इसलिए अब vxWorks का नियंत्रण है। पहली बात यह है कि वर्तमान में चल रहे कार्य के Task Control Block (TCB) में सीपीयू स्थिति (जैसे रजिस्टरों) को सहेजना है।

फिर आखिरकार vxWorks शेड्यूलर चलाता है यह निर्धारित करने के लिए कि कौन आगे चलता है। कार्य को चलाने के लिए, vxWorks कार्य की स्थिति को अपने टीसीबी से मशीन रजिस्टरों में प्रतिलिपि बनाता है, और उसके बाद यह कार्य CPU पर नियंत्रण रखता है।

बोनस जानकारी:

vxWorks स्विचन तर्क कार्य में hooks प्रदान करता है ताकि आप जब भी अपने कार्य को रोका जाता हो जाता है एक समारोह में कहा जाता हो हो सकता है।

+0

विस्तृत उत्तर के लिए धन्यवाद ... – Ashwin

+0

ध्यान दें कि यह केवल तभी सही है जब आप राउंड रॉबिन शेड्यूलिंग सक्षम करते हैं (kernelTimeSlice() को कॉल करके) डिफ़ॉल्ट प्राथमिकता-आधारित प्रीemptive शेड्यूलिंग है। – nos

+0

@nos: शेड्यूलिंग पॉलिसी के बावजूद टाइमर इंटरप्ट हमेशा टिक गिनती, वॉचडॉग टाइमर और सेमफोर टाइमआउट का ट्रैक रखने के लिए चल रहा है। ऐसा होता है कि प्राथमिकता-आधारित प्रीemptive शेड्यूलिंग के लिए, vxWorks शेड्यूलर तब तक चलाने के लिए एक नया कार्य नहीं चुनता जब तक कि कुछ टाइमर ऑपरेशन तैयार कतार में उच्च प्राथमिकता कार्य नहीं ले जाता। लेकिन उचित बिंदु। मैं हमेशा इस उत्तर को और अधिक सटीक बनाने के लिए अद्यतन करना चाहता हूं और सिस्टम कॉल शामिल करना चाहता हूं, जिसे मैं उस समय उल्लेख करना भूल गया था। – indiv

0

जब तक आप एक majorily-अनुकूलित लक्ष्य का निर्माण किया है, अनुसूचक टाइमर व्यवधान से शुरू हो जाती है। विवरण प्लेटफॉर्म-विशिष्ट हैं, यद्यपि।

0

यदि वर्तमान कार्य पूरा हो जाता है या ब्लॉक हो जाता है तो शेड्यूलर भी लागू होता है।

5

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

शेड्यूलर या तो सिंक्रोनस या असिंक्रोनस ऑपरेशंस के परिणामस्वरूप निष्पादित किया जा सकता है।

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

असिंक्रोनस ऑपरेशंस अनिवार्य रूप से इंटरप्ट्स का संदर्भ लेते हैं।टाइमर इंटरप्ट्स इंडिव द्वारा बहुत अच्छी तरह से वर्णित थे। हालांकि, विभिन्न तत्वों की एक संख्या निष्पादित करने के लिए एक अवरोध का कारण बन सकता: नेटवर्क यातायात, सेंसर, धारावाहिक डेटा, आदि ...

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

ध्यान दें कि शेड्यूलर का अपना संदर्भ नहीं है; यह एक काम नहीं है। यह केवल कोड है जो इसे किसी भी संदर्भ में निष्पादित करता है। या तो इंटरप्ट संदर्भ (एसिंक्रोनस) या invoking कार्य संदर्भ (तुल्यकालिक) से।

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