प्रबंधित कोड चलाने वाले न्यूनतम कर्नेल वाले संभावित नुकसान क्या हैं?


14

मान लीजिए कि मैं एक बहुत छोटे देशी निचले कर्नेल के आधार पर एक ऑपरेटिंग सिस्टम बनाना चाहता हूं जो एक प्रबंधित कोड दुभाषिया / रनटाइम के रूप में कार्य करता है और एक गैर-देशी मशीन भाषा (जावा बाइटकोड, सीआईएल, आदि) के लिए संकलित एक बड़ा ऊपरी कर्नेल। समान ऑपरेटिंग सिस्टम के उदाहरण विलक्षणता और कॉस्मॉस होंगे

विशुद्ध रूप से देशी समाधान के विपरीत इस तरह की बुनियादी सुविधाओं के साथ एक ओएस लिखने में क्या नुकसान और विकास चुनौतियां मौजूद हैं?

जवाबों:


8

भाषा के आधार पर, विकास की कई चुनौतियाँ हो सकती हैं:

  1. पॉइंटर्स: यदि किसी भाषा में पॉइंटर्स नहीं हैं, तो अपेक्षाकृत आसान कार्य करना एक चुनौती होगी। उदाहरण के लिए, आप स्क्रीन पर मुद्रण के लिए वीजीए मेमोरी में लिखने के लिए पॉइंटर्स का उपयोग कर सकते हैं। हालाँकि, एक प्रबंधित भाषा में, आपको ऐसा करने के लिए कुछ प्रकार के "प्लग" (C / C ++ से) की आवश्यकता होगी।

  2. असेंबली: एक OS को हमेशा कुछ असेंबली की आवश्यकता होती है। C / C ++ के विपरीत C #, Java आदि भाषाएँ इसके साथ इतनी अच्छी तरह से काम नहीं करती हैं। C या C ++ में आप इनलाइन असेंबली भी कर सकते हैं जो बहुत से कार्यों के लिए बहुत उपयोगी है। ऐसे कई मामले हैं जहाँ इसकी आवश्यकता है (उदाहरण x86 में): एक GDT लोड करना, एक IDT लोड करना, पेजिंग सक्षम करना, IRQ सेट करना, आदि।

  3. नियंत्रण: यदि आप कॉस्मॉस जैसी किसी चीज़ का उपयोग कर रहे हैं, तो आपको पूर्ण नियंत्रण नहीं है। कॉस्मॉस एक माइक्रो-कर्नेल है और अनिवार्य रूप से "बूटस्ट्रैप" आपका "कर्नेल" है। यदि आप वास्तव में चाहते हैं, तो आप स्क्रैच से कॉस्मॉस जैसी चीज को लागू कर सकते हैं, हालांकि, इसमें लंबा समय लग सकता है।

  4. ओवरहेड: प्रबंधित भाषाओं के साथ, सी या यहां तक ​​कि सी ++ की तुलना में ओवरहेड का एक बहुत कुछ है। कॉस्मॉस जैसी चीजों को बहुत सी चीजों को लागू करने की आवश्यकता होती है, इससे पहले कि एक सी # हैलो वर्ल्ड कर्नेल भी चलाया जा सकता है। सी में, आप जाने के लिए तैयार हैं, कोई वास्तविक सेटअप की आवश्यकता नहीं है। C ++ में, कुछ चीजें हैं जिन्हें C ++ की कुछ विशेषताओं का उपयोग करने के लिए लागू करने की आवश्यकता है।

  5. संरचनाएं: C / C ++ में ऐसी संरचनाएं होती हैं जो कई प्रबंधित भाषाओं में नहीं होती हैं, और इसलिए, आपको किसी संरचना की तरह कुछ होने के कुछ तरीके लागू करने की आवश्यकता होगी। उदाहरण के लिए, यदि आप C / C ++ में IDT (इंटरप्ट डिस्क्रिप्टर टेबल) लोड करना चाहते हैं, तो आप एक स्ट्रक्चर (पैक्ड विशेषता के साथ) बना सकते हैं, और इसे x86 ASM इंस्ट्रक्शन लिफ़्ट का उपयोग करके लोड कर सकते हैं । एक प्रबंधित भाषा में, यह करना बहुत कठिन है ...

प्रबंधित भाषाओं, सिंटैक्स-वार, आसान हैं, हालांकि, कई ओएस से संबंधित चीजों के लिए कई बार बहुत अच्छी तरह से अनुकूल नहीं हैं। इसका मतलब यह नहीं है कि उनका उपयोग नहीं किया जा सकता है, हालांकि, C / C ++ जैसी किसी चीज की अक्सर सिफारिश की जाती है।


यह उत्तर बहुत कमजोर है। "अपेक्षाकृत आसान कार्य" क्या हैं जो आप पॉइंटर्स (एक छोटी सी नींव को छोड़कर) के बिना नहीं कर सकते हैं? ऐसे कौन से हिस्से हैं जिन्हें विधानसभा की आवश्यकता है? क्या नियंत्रण की कमी है? आप ओवरहेड के बारे में अपने बयान को क्या आधार बनाते हैं? आपके पास प्रबंधित भाषा में संरचनाएँ क्यों नहीं हो सकती हैं?
गिलेस एसओ- बुराई को रोकना '

1. कोई कारण नहीं है कि एक प्रबंधित भाषा वीजीए मेमोरी तक पहुंचने की क्षमता की पेशकश नहीं करेगी, यह केवल मैपिंग / अनमैपिंग है जो कि एक आदिम (एक मेमोरी प्रबंधन आदिम) के रूप में प्रदान करना होगा। 2. कुछ कार्य स्विचिंग (जैसे बचत रजिस्टर) को आमतौर पर असेंबली कोड के रूप में करना पड़ता है, लेकिन यह बहुत स्थानीय है, यह एक प्रबंधित भाषा में ओएस के 99% होने के खिलाफ एक तर्क नहीं है। MMU में हेरफेर एक मेमोरी मैनेजमेंट आदिम है। 4. सी को भी सेटअप की आवश्यकता है (स्टैक और ढेर सेट करें); प्रबंधित भाषाओं के लिए थोड़ा और अधिक सेटअप की आवश्यकता है लेकिन कोई गुणात्मक अंतर नहीं है।
गिलेस एसओ-

@ सवाल, एक प्रबंधित भाषा का उपयोग करने के लिए विकास संबंधी चुनौतियां क्या हैं। ये विकासात्मक चुनौतियाँ हैं, हालाँकि, आप अभी भी ऐसी चुनौतियों से सफलतापूर्वक पार पा सकते हैं ...
एममेक

5

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

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

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

मुझे नहीं पता कि पारंपरिक माइक्रो-कर्नेल आइसोलेशन तकनीक या प्रबंधित-कोड आधारित आइसोलेशन तकनीक वास्तव में कम या ज्यादा विश्वसनीय हैं। यहां बूटस्ट्रैपिंग की समस्या है: जब तक प्रबंधित-कोड अलगाव तकनीकों का व्यापक रूप से उपयोग नहीं किया जाता है, तब तक हम यह नहीं जान पाएंगे कि वे कितनी बार असुरक्षित हैं। लेकिन यह जाने बिना कि वे कितने असुरक्षित हैं, सुरक्षा परिस्थितियों के लिहाज से उन्हें उन परिस्थितियों में तैनात करना मुश्किल है।


यह एक उत्कृष्ट बिंदु है।
एडम मरास

मुझे ये तर्क बहुत अजीब लगते हैं। (दी गई जानकारी, मैं औपचारिक तरीकों से अपनी पृष्ठभूमि से पक्षपाती हो सकता हूं, लेकिन यह मेरी राय का एकमात्र आधार नहीं है।) एक माइक्रो-कर्नेल प्लस एमएमयू की तुलना में एक टाइपकैचर इतना जटिल नहीं है। उदाहरण के लिए, Coq का माइक्रोकर्नेल OCaml का लगभग 14kLoC है - एक माइक्रोकर्नल से बड़ा, लेकिन उस सब से ज्यादा नहीं, और उस भाषा में लिखा गया है जो अधिकांश कर्नेल (कोई C या कोडांतरक) की तुलना में कम त्रुटि वाला है। टाइप चेकर्स दौड़ की स्थिति के लिए अतिसंवेदनशील नहीं हैं, जो विशेष रूप से सूक्ष्म वर्ग के कीड़े हैं।
गिलेस एसओ-

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

व्यावहारिक पक्ष पर, अलगाव प्रदान करने वाली कई आभासी मशीनें EAL5 और ऊपर प्रमाणित की गई हैं। यहां दो उदाहरण दिए गए हैं जो आपके यूरोपीय होने पर आपके बटुए में अच्छी तरह से हो सकते हैं, क्योंकि उनका उपयोग क्रेडिट कार्ड जैसे स्मार्टकार्ड में किया जाता है: माल्टोस , जावा कार्ड खुला मंच । सुरक्षा मूल्यांकन समुदाय में, मैंने कई संदेह सुने हैं कि MMU अलगाव EAL2 से आगे जा सकता है।
गिल्स एसओ- बुराई को रोकना '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.