गैर-प्रीमेप्टिव, प्रीमेप्टिव और सेलेक्टिव प्रीमेप्टिव कर्नेल के बीच अंतर क्या है?


18

"गैर-प्रीमेप्टिव", "प्रीमेप्टिव" और "सेलेक्टिव प्रीमेप्टिव" कर्नेल के बीच अंतर क्या है?

आशा है कि कोई इसमें कुछ प्रकाश डाल सकता है।


यह भी उपयोगी हो सकता है: cdynamicprogramming.blogspot.com/p/blog-page_5.html
रिक

जवाबों:


14

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

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

उदाहरण के तौर पे:

प्रक्रिया Aएक अपवाद हैंडलर को निष्पादित करती है, प्रक्रिया Bएक IRQ अनुरोध द्वारा जागृत हो जाती है, कर्नेल प्रक्रिया Aको B(एक मजबूर प्रक्रिया स्विच) के साथ बदल देता है । प्रक्रिया Aअधूरी छोड़ दी जाती है। शेड्यूलर बाद में निर्णय लेता है कि प्रक्रिया Aको सीपीयू समय मिलता है या नहीं।

एक गैर-व्याख्यात्मक कर्नेल पर, प्रक्रिया Aतब तक सभी प्रोसेसर समय का उपयोग करेगी जब तक कि वह समाप्त नहीं हो जाता या स्वेच्छा से अन्य प्रक्रियाओं को उसे (एक नियोजित प्रक्रिया स्विच) को बाधित करने की अनुमति देने का निर्णय नहीं लेता।

आज के लिनक्स आधारित ऑपरेटिंग सिस्टम में आम तौर पर पूरी तरह से प्रीमेप्टिव कर्नेल शामिल नहीं होते हैं, फिर भी महत्वपूर्ण कार्य होते हैं जिन्हें बिना किसी रुकावट के चलाना होता है। इसलिए मुझे लगता है कि आप इसे "सेलेक्टिव प्रीमेप्टिव कर्नेल" कह सकते हैं।

इसके अलावा, लिनक्स कर्नेल (लगभग) को पूरी तरह से प्रीमेप्टिव बनाने के लिए दृष्टिकोण हैं।


मैकिंटोश सिस्टम 6 और संबंधित कोड (जैसे, सिस्टम 7, सिस्टम 8 और सिस्टम 9) सभी गैर-निवारक थे। मैकओएस एक्स के लिए एप्पल के स्विच ने प्रीमेप्टिव मल्टीटास्किंग की शुरूआत भी देखी।
मेई

कर्नेल, B (एक मजबूर प्रक्रिया स्विच) के साथ प्रक्रिया A को प्रतिस्थापित करता है। -> एक अंग्रेजी तरीके से, क्या हम वाक्य के लिए वैकल्पिक रूप से कह सकते हैं कि प्रक्रिया A पूर्व-निर्धारित है (प्रक्रिया B से)?
एसएनआर

2

preemption है -> किसी उच्च प्राथमिकता वाले कार्य के पक्ष में वर्तमान में कार्य को पूर्व निर्धारित या बंद करने की ऑपरेटिंग सिस्टम की क्षमता। शेड्यूलिंग एक हो सकती है, लेकिन सीमित नहीं है, प्रक्रिया या I / O शेड्यूलिंग आदि।

लिनक्स के तहत, उपयोगकर्ता-अंतरिक्ष कार्यक्रम हमेशा से ही अप्राप्य रहे हैं: कर्नेल नियमित घड़ी टिक का उपयोग करके अन्य थ्रेड्स पर स्विच करने के लिए उपयोगकर्ता-अंतरिक्ष कार्यक्रमों को बाधित करता है। तो, कर्नेल स्पष्ट रूप से प्रोसेसर (जो सहकारी मल्टीटास्किंग में मामला है) को रिलीज़ करने के लिए उपयोगकर्ता-अंतरिक्ष कार्यक्रमों की प्रतीक्षा नहीं करता है। इसका मतलब है कि उपयोगकर्ता-अंतरिक्ष कार्यक्रम में एक अनंत लूप सिस्टम को ब्लॉक नहीं कर सकता है।

हालांकि, 2.6 कर्नेल तक, कर्नेल स्वयं प्रीमेचेबल नहीं था: जैसे ही एक धागे ने कर्नेल में प्रवेश किया है, यह दूसरे धागे को निष्पादित करने के लिए पूर्वनिर्मित नहीं किया जा सकता है। हालांकि, कर्नेल में प्रीमेशन की अनुपस्थिति ने विलंबता और मापनीयता के संबंध में कई समस्याएं पैदा कीं। तो, कर्नेल प्रीमेशन को 2.6 कर्नेल में पेश किया गया है, और कोई CONFIG_PREEMPT विकल्प का उपयोग करके इसे सक्षम या अक्षम कर सकता है। यदि CONFIG_PREEMPT सक्षम है, तो कर्नेल कोड को हर जगह प्रीपेप्ट किया जा सकता है, सिवाय इसके कि जब कोड ने स्थानीय व्यवधानों को निष्क्रिय कर दिया हो। कोड में एक अनंत लूप अब पूरे सिस्टम को ब्लॉक नहीं कर सकता है। यदि CONFIG_PREEMPT अक्षम है, तो 2.4 व्यवहार पुनर्स्थापित किया जाता है।

से उद्धृत और प्रारूपित: http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/


2.4 कर्नेल नॉन-प्रीमिटिव क्यों था?
सेन

लाइनस टॉर्वाल्ड्स से बेहतर पूछें :)
मधुर आहूजा

1

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.