लिनक्स कर्नेल की तुलना माइक्रो कर्नेल आर्किटेक्चर से कैसे की जाती है?


38

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



1
आप माइक्रोकोर्न बनाम अखंड कर्नेल पर बहस पढ़ सकते हैं। अजवायन . com/openbook/opensources/book/appa.html इस पत्र में, एंड्रयू तानेंबूम माइक्रोक्रेन का समर्थन करता है और लिनुस टॉर्वाल्ड मोनोलिथिक कर्नेल का समर्थन करता है।
भुवन

जवाबों:


35

Microkernels को कम कोड की आवश्यकता होती है जो कि अंतरतम मोड में चलता है, जो मोनोलिथिक कर्नेल की तुलना में सबसे विश्वसनीय मोड है । इसके कई पहलू हैं, जैसे:

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

यूनिक्स जीयूआई को एक्स विंडो के माध्यम से प्रदान किया जाता है, जो कि यूजरलैंड कोड (वीडियो डिवाइस ड्राइवर के लिए () को छोड़कर) है। कई आधुनिक इकाइयाँ आम उपयोगकर्ताओं को FUSE के माध्यम से फाइलसिस्टम ड्राइवरों को लोड करने की अनुमति देती हैं । लिनक्स नेटवर्क पैकेट फ़िल्टरिंग के कुछ उपयोगकर्ता में किया जा सकता है। हालाँकि, डिवाइस ड्राइवर, शेड्यूलर, मेमोरी मैनेजर और अधिकांश नेटवर्किंग प्रोटोकॉल अभी भी कर्नेल-ओनली हैं।

एक क्लासिक (यदि दिनांकित है) लिनक्स और माइक्रोकर्नेल के बारे में पढ़ा जाता है, तो तेनबेबम-टोरवाल्ड्स बहस है । बीस साल बाद, कोई यह कह सकता है कि लिनक्स बहुत धीरे-धीरे एक माइक्रोकर्नेल संरचना की ओर बढ़ रहा है (लोड करने योग्य मॉड्यूल जल्दी दिखाई दिए, FUSE अधिक हाल ही में है), लेकिन अभी भी एक लंबा रास्ता तय करना है।

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



1
यह सब बहुत अच्छा सिद्धांत है। यदि कोई उपकरण किसी तरह से तार-तार हो जाता है, तो सिस्टम टोस्ट हो जाता है। यदि कोई ड्राइवर एक ऑपरेशन के दौरान आधे रास्ते पर दुर्घटनाग्रस्त हो जाता है, तो कोई भी ड्राइवर को पुनरारंभ नहीं करने से सिस्टम को कार्यात्मक स्थिति में बहाल किया जाएगा। यदि आप कोई भी प्रदर्शन चाहते हैं, तो ड्राइवरों को बहुस्तरीय होना चाहिए ... और "एक शेड्यूलर" का लाभ पूरी तरह से खो गया है। प्रदर्शन चाहते हैं, आपको (तेजी से महंगी) मेमोरी प्रतियां और संदर्भ स्विच से बचना होगा ... और "प्रतिरूपकता" खो गई है। कुछ माइक्रोकर्नेल के आकार को देखें, और आप देखेंगे कि उनमें ड्राइवरों के साथ अखंड गुठली के आकार और जटिलता शामिल हैं
वॉनब्रांड

15

एक माइक्रोकर्नेल उस समय को सीमित करता है, जब सिस्टम कर्नेल मोड में होता है, जैसा कि यूजरस्पेस के विपरीत है, पूर्ण न्यूनतम संभव के लिए।

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

माइक्रोकर्नेल अवधारणा पारंपरिक रूप से कर्नेल मोड, जैसे नेटवर्किंग और डिवाइस ड्राइवर्स, में बहुत सारे सामान डालती है। चूंकि माइक्रोकर्नल वास्तव में बहुत अधिक जिम्मेदार नहीं है, इसका मतलब यह भी है कि यह सरल और अधिक विश्वसनीय हो सकता है। जिस तरह से आईपी प्रोटोकॉल, सरल और बेवकूफ होने के बारे में सोचो, वास्तव में किनारों पर जटिलता को धक्का देकर और कोर झुकाव और मतलब छोड़ने से मजबूत नेटवर्क की ओर जाता है।


5

पढ़ने की सामग्री के लिए लिंक पोस्ट करने के लिए धन्यवाद! अमूर्त में ब्रेंट डब्ल्यू का बिंदु ध्वनि है, और कुछ हद तक, मैं क्रिस्टोफ़ एल की माइक्रो-कर्नेल सिंक्रनाइज़ेशन तंत्र में अति-जटिलता के बारे में चिंता व्यक्त करता हूं; हालाँकि, मुझे लगता है कि बाद वाला पेपर संदेश-आधारित ईवेंट लूप्स की अनदेखी कर सकता है। चूंकि इवेंट लूप्स एक-दूसरे के साथ मेमोरी साझा नहीं करते हैं, इसलिए लॉक की आवश्यकता नहीं होती है, और (IMO) के बाद से वे खुद को एक घोषणात्मक कोडिंग शैली के लिए उधार देते हैं, एक सुसंगत एल्गोरिथ्म स्पष्ट रूप से परिभाषित किया जा सकता है (लैम्ब्डा कैलकुलस के बिंदु ...) - मैं आमतौर पर ऐप्स को कोड करता हूं, लेकिन यह क्यू एक सुखद सीखने का अनुभव रहा है
एन्थ्रोपिक एंड्रॉइड

1

बस x86 आर्किटेक्चर पर एक नज़र डालें - अखंड कर्नेल केवल रिंग 0 और 3 का उपयोग करता है । एक बेकार, वास्तव में। लेकिन कम संदर्भ स्विचिंग के कारण फिर से यह तेज हो सकता है।

x86 बजता है


X86 रिंग संरचना केवल अतिव्यापी है। कोई व्यावहारिक उपयोग (आभासी मशीनों को छोड़कर, लेकिन इसका तेजी से उपयोग किया जाता है ...)
वॉनब्रांड

1
  1. मोनोलिथिक कर्नेल माइक्रो कर्नेल की तुलना में बहुत पुराना है । यह यूनिक्स में उपयोग किया जाता है, जबकि माइक्रोकर्नेल का विचार 1980 के दशक के अंत में दिखाई दिया था ।

  2. अखंड कर्नेल वाले OS के उदाहरण UNIX, LINUX हैं जबकि माइक्रोकर्नेल वाले OSN QNX, L4, HURD और प्रारंभ में Mach (नहीं MacOS X) हैं जो बाद में संकर कर्नेल में परिवर्तित हो गए थे। यहां तक ​​कि MINIX एक शुद्ध माइक्रोकर्नेल नहीं है क्योंकि इसके डिवाइस ड्राइवर को कर्नेल के भाग के रूप में संकलित किया जाता है।

  3. मोनोलिथिक गुठली माइक्रोकर्नेल की तुलना में तेज़ होती है । पहली मच माइक्रो कर्नेल अखंड कर्नेल की तुलना में 50% धीमी है। एल 4 जैसे बाद के संस्करण अखंड कर्नेल की तुलना में केवल 2% या 4% धीमे हैं

  4. अखंड गुठली आम तौर पर भारी होती है, जबकि शुद्ध माइक्रो कर्नेल आकार में छोटा होता है , यहां तक ​​कि प्रोसेसर के पहले स्तर के कैश (पहली पीढ़ी के माइक्रोकर्नेल) में भी फिट होता है।

  5. अखंड कर्नेल में, डिवाइस ड्राइवर कर्नेल स्थान में रहते हैं जबकि माइक्रो कर्नेल डिवाइस ड्राइवर उपयोगकर्ता अंतरिक्ष में रहते हैं ।

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

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

  8. एक अखंड प्रणाली में नई सुविधाओं को जोड़ने का मतलब है कि आप पूरे कर्नेल को फिर से जोड़ सकते हैं, जबकि आप नए फीचर या पैच को बिना दोबारा जोड़ सकते हैं


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

0

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


-1

मामला यह है कि लिनक्स कर्नेल अखंड और माइक्रोकर्नेल का एक संकर है। शुद्ध अखंड कार्यान्वयन में रनटाइम पर लोडिंग मॉड्यूल नहीं होते हैं।


9
यह। तथ्य यह है कि मॉड्यूल को गतिशील रूप से लोड किया जाता है, इस तथ्य को नहीं बदलता है, कि वे पूर्ण कर्नेल विशेषाधिकार के साथ चलाए जाते हैं, और अखंड कर्नेल के हिस्से के रूप में।
vartec

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

-1

जब वे कर्नेल डिज़ाइन (संरचना बनाम आकार) के विभिन्न पहलुओं का वर्णन करते हैं, तो शर्तों की तुलना monolithic kernelऔर microkernelगंभीरता से नहीं किया जा सकता है।

एक विशिष्ट अखंड कर्नेल SunOS-4.x कर्नेल था और लिनक्स अभी भी समान है, जैसा कि आप मूल कर्नेल की सामग्री को मैन्युअल रूप से कॉन्फ़िगर करते हैं।

सोलारिस कर्नेल (1992 में 2.1 से शुरू) को अब अखंड नहीं कहा जा सकता है क्योंकि सभी ड्राइवर स्वचालित रूप से मांग पर लोड होते हैं और प्रारंभिक बूट के दौरान केवल एक छोटा हिस्सा लोड होता है।

SunOS-4.x और Solaris (SunOS-5.x) और लिनक्स सभी एकल संदर्भ कार्यान्वयन हैं। उनका पूरा कोड एक एकल MMU संदर्भ में चलता है।

मैक ओएस एक्स मच पर आधारित है और एमएमयू संदर्भों द्वारा अलग किए गए कई प्रक्रियाओं के साथ बहु संदर्भ कार्यान्वयन के रूप में चलता है। इस अवधारणा में, ड्राइवर अलग-अलग प्रक्रियाओं में हैं और एमएमयू संदर्भों को अलग करते हैं।

बहुत से लोग मैक ओएस एक्स को एक "माइक्रोकर्नल सिस्टम" कहते हैं, लेकिन यह हो सकता है कि मूल कर्नेल सोलारिस से बुनियादी कर्नेल से छोटा नहीं है।

इसलिए ऐसा लगता है कि single context kernelsबनाम के बारे में बात करना बेहतर होगा multi context kernels


1
MacOS एक (अनिवार्य रूप से अखंड) BSD एक माइक्रोकर्नेल पर चलता है। वहां अलग-अलग प्रक्रियाओं में कोई अलगाव नहीं, एक वास्तविक माइक्रोकर्नेल डिजाइन नहीं।
वॉनब्रांड

1
तो आप एक डिजाइन स्वीकार करते हैं जो कम से कम दो तथाकथित कर्नेल प्रक्रियाओं का उपयोग करता है। यह शब्द microkernelवैसे भी गलत है क्योंकि इसे आमतौर पर किसी ऐसी चीज के लिए उपयोग किया जाता है जिसे कहा जाना चाहिए multi context kernel
विद्वान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.