क्या कर्नेल एक प्रक्रिया है?


30
  1. लिनक्स में, हम हमेशा कहते हैं कि पहली प्रक्रिया init(pid == 1) है। लेकिन कर्नेल (स्टार्टअप) क्यों नहीं है जो सिस्टम को सेटअप करता है और initप्रक्रिया बनाता है। क्या कर्नेल एक प्रक्रिया है?
  2. हम जानते हैं कि सभी उपयोगकर्ता स्पेस थ्रेड्स init प्रक्रिया में निहित हैं। फिर शेड्यूलर और अन्य कर्नेल सामान के बारे में क्या, जैसे स्मृति प्रबंधन?

असल में, जो मुझे भ्रमित करता है वह है कर्नेल की संरचना। यदि यह एक प्रक्रिया है, तो क्या यह एक एकल प्रक्रिया है, या इसमें कई प्रक्रियाएँ हैं?

जवाबों:


19

छोटे जवाब:

  1. नहीं, यह एक प्रक्रिया नहीं है
  2. उपयोगकर्ता थ्रेड्स जड़ में नहीं हैं।

Init सिर्फ पहली प्रक्रिया है; यह किसी भी प्रॉसेस या थ्रेड का प्रबंधन नहीं करता है। यह कुछ बनाता है, कर्नेल syscalls कांटा () और निष्पादन का उपयोग कर।

मुझे लगता है कि आपके पास एक प्रक्रिया क्या है, इसका मैला विचार है। यह कोड निष्पादित करने का एक सा मतलब नहीं है। हाँ, कर्नेल init से पहले निष्पादित होता है (और इससे पहले भी बूट लोडर)। लेकिन 'प्रक्रिया' की एक विशिष्ट परिभाषा है:

  • उपयोगकर्ता अंतरिक्ष में चलाता है
  • एक प्रक्रिया आईडी के साथ चलाता है
  • कर्नेल के माध्यम से जाने के लिए कई इंटरैक्शन की आवश्यकता होती है
  • सभी संसाधनों को कर्नेल से आने की आवश्यकता है
  • कर्नेल द्वारा निर्धारित करने की आवश्यकता है

इसलिए, जब एक बार कर्नेल इनिशियलाइज़ हो जाता है, तो यह init चलाता है, जो इसके विन्यास के बाद जो भी अन्य प्रक्रियाएँ कहती हैं, उन्हें जन्म देती है।

जहाँ तक # 2 जाता है, कर्नेल में सभी कर्नेल सामग्री अच्छी तरह से है। कोड के एक बड़े क्षेत्र के रूप में कर्नेल के बारे में सोचें। फिर, एक प्रक्रिया नहीं है, लेकिन एक बड़ा कोड बूँद। कर्नेल के कुछ हिस्से मेमोरी मैनेजमेंट के साथ आते हैं, इसके कुछ हिस्से शेड्यूलिंग भागों (जैसे ड्राइवर, आदि), और शेड्यूलिंग प्रक्रियाओं के साथ होते हैं।


3
मुझे आश्चर्य है कि अगर ओपी सूक्ष्म कर्नेल द्वारा अपने दिमाग को उड़ाने के लिए पर्याप्त जानता है? मैंने इसे अपना संपादन शामिल नहीं किया क्योंकि मुझे लगा कि यह किसी भी दर पर विचलित करने वाला होगा।
new123456

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

15

कर्नेल वास्तव में एक प्रक्रिया की तरह व्यवहार नहीं करता है। यह अनुसूचित नहीं होता है, यह या तो एक प्रक्रिया (तथाकथित प्रक्रिया-संदर्भ या उपयोगकर्ता-संदर्भ) की ओर से चलता है, या एक रुकावट या अपवाद (तथाकथित रुकावट-संदर्भ) के परिणामस्वरूप चलता है।

उस ने कहा, लिनक्स कर्नेल कुछ कार्यों को करने के लिए कर्नेल थ्रेड्स को फैलाता है, या बहुत लंबे समय के लिए रुकावट के संदर्भ में कुछ चलाने से बचने के लिए (जो कि ksoftirqd थ्रेड करता है, अत्यधिक विलंबता से बचता है जैसे कि नेतृत्व कर सकता है जैसे: गिरा हुआ ऑडियो, ...) ।

आप psकमांड के आउटपुट पर कर्नेल थ्रेड्स देख सकते हैं । उन्हें आसानी से पहचाना जाता है: उनका नाम कोष्ठक के बीच है। उनमें से कुछ एक उदाहरण प्रति सीपीयू चलाते हैं, सीपीयू की पहचान एक स्लैश के बाद के नंबर से की जाती है, इसलिए [ksoftirqd / 0] CPU 0 पर ksoftirqd का उदाहरण है।


1

माइक्रो-कर्नेल में अवधारणाएं हैं जहां कर्नेल के विभिन्न भाग वास्तव में प्राथमिक प्रहरी के साथ प्रक्रियाएं हैं जो ज्यादातर आईपीसी का प्रबंधन करते हैं।

लिनक्स - बेहतर या बदतर के लिए - एक माइक्रो कर्नेल प्रणाली नहीं है।


1

नहीं, यह नहीं है ... कर्नेल (और कर्नेल एक्सटेंशन) सीधे मेमोरी में लोड होते हैं। यदि कर्नेल में असुरक्षित कोड है, तो इसके बीच कुछ भी नहीं है और बड़ी परेशानी है।

एक तरफ, कर्नेल मूल रूप से प्रक्रियाओं के बीच / स्विच करता है। स्पष्ट रूप से कुछ है जो वास्तव में प्रक्रियाओं को चलाता है एक प्रक्रिया ही नहीं होगी।

(tl; dr 1. no 2. कर्नेल / उसके विस्तार का हिस्सा)


0

निंजाल ने लिखा: "कर्नेल वास्तव में एक प्रक्रिया की तरह व्यवहार नहीं करता है। यह निर्धारित नहीं होता है,"

ठीक है, निष्क्रिय प्रक्रिया है (मूल रूप से पीआईडी ​​0, हालांकि इसे कहीं भी नहीं दिखाया गया है) जो अनुसूचित है और लगभग हमेशा एक निष्क्रिय स्थिति में है।


0

प्रसंग स्विचिंग

The प्रक्रियाओं को कर्नेल नामक ओएस कोड के साझा हिस्से द्वारा प्रबंधित किया जाता है

▪ The kernel is not a separate process, but rather runs as part of a user process

❖ प्रसंग स्विच एक प्रक्रिया से दूसरी प्रक्रिया में नियंत्रण प्रवाह पास करता है और कर्नेल कोड का उपयोग करके किया जाता है

स्रोत: https://courses.cs.washington.edu/courses/cse351/19su/lectures/18/CSE351-L18-processes_19su.pdf , पेज 36

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