MMU के बिना प्रोसेसर के लिए मल्टीटास्किंग ऑपरेटिंग सिस्टम लिखना


9

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

जैसा कि मैंने हमेशा i386 + प्रोसेसर के साथ काम किया है और कुछ और कभी नहीं (कुछ माइक्रोचिप PICs को छोड़कर), मैं अब उलझन में हूं और निश्चित नहीं हूं कि अगर कोई काम कर रहे ऑपरेटिंग सिस्टम को लिख सकता है जिसकी कार्यक्षमता सीमित नहीं होगी जब OS की तुलना लिखित होगी MMU के साथ MPUs के लिए।

मैं "एमएमयू" या "अनुकरण" के लिए कुछ समाधानों के बारे में सोच सकता था और मुझे कुछ प्रश्न मिले हैं:

  • 16 और 32-बिट मोड में इंटेल प्रोसेसर पर विभिन्न कार्यों द्वारा मेमोरी के विभिन्न ब्लॉकों का उपयोग करने के लिए सेगमेंट और सेगमेंट चयनकर्ताओं का उपयोग करने का एक तरीका है। इसका मतलब है कि मैं x86 पर टास्क स्विच करते समय सेगमेंट रजिस्टर की सामग्री को बदलकर मेमोरी स्पेस बदल सकता था। क्या स्मृति विभाजन के लिए कोई सामान्य अवधारणाएं हैं जिनका उपयोग एआरएम वास्तुकला पर किया जा सकता है?
  • निष्पादन योग्य के बजाय एक लिंक किए गए ऑब्जेक्ट फ़ाइल को लोड करके मैं उसी तरह से मेमोरी के टुकड़ों पर कार्य करने के लिए रिलोकेशन (फिक्स-अप) या स्थिति स्वतंत्र कोड का उपयोग कर सकता था जैसे कि मैंने पेजिंग संरचनाओं का उपयोग करके मेमोरी को मैप किया। क्या यह पर्याप्त प्रभावी होगा?
  • मैंने ARM प्रोसेसर पर मेमोरी प्रोटेक्शन यूनिट्स के बारे में भी पढ़ा है। क्या ये मददगार हो सकते हैं?

क्या MMU के बिना सिस्टम पर कार्यों के प्रबंधन के कोई "सामान्य" तरीके हैं?

जवाबों:


16

यह वास्तव में एक ऑपरेटिंग सिस्टम को डिजाइन करना मुश्किल नहीं है, जिसे MMU की आवश्यकता नहीं है। वहाँ कुछ उपयुक्तताएँ हैं जिनके बिना आपको करना होगा, लेकिन कुछ भी असंभव नहीं है।

  • चूंकि विभिन्न कार्यों को अलग-अलग पते पर लोड करना होगा, इसलिए आपके सभी कोड (कर्नेल को छोड़कर, मानक लाइब्रेरी और आपके आधार रनटाइम वातावरण का हिस्सा है जो किसी भी अन्य कोड) को स्थिति-स्वतंत्र के रूप में संकलित करना होगा। इसका मतलब है कि रिश्तेदार कूदता है और एक रजिस्टर में संग्रहीत ढेर पहुंच के लिए एक आधार पता है। यदि आप x86-32 के चार सामान्य रजिस्टरों के लिए उपयोग किए जाते हैं, तो एक आधार पते के रूप में एक रजिस्टर खर्च करना महंगा लग सकता है, लेकिन अधिकांश आधुनिक आर्किटेक्चर में अधिक है, और यहां तक ​​कि 8088 के लिए भी ठीक से रजिस्टर रजिस्टर हैं।
  • यूनिक्स जैसी वास्तुकला को संशोधित करना होगा, क्योंकि आप इसे लागू नहीं कर सकते fork। यह ठीक है, अधिकांश ऑपरेटिंग सिस्टम के पास नहीं है fork। (आपके पास हो सकता है vfork।)
  • आप संबंधित मेमोरी को आवंटित किए बिना अंतरिक्ष के बड़े gobs का प्रचार नहीं कर सकते हैं। इसका मतलब है कि एक बार में एक और पेज आवंटित करके मक्खी पर ढेर या ढेर का न बढ़ना।

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

uClinux लिनक्स कर्नेल पर आधारित एक परियोजना है जो एक MMU के बिना प्रोसेसर (ARM Cortex-M सहित) पर चलती है। मल्टीटास्किंग पर इसके प्रतिबंध अनिवार्य रूप से हैं जो मैंने ऊपर उल्लिखित किए हैं।

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