वर्चुअल मेमोरी सपोर्ट करने के लिए प्रोसेसर के लिए MMU (मेमोरी मैनेजमेंट यूनिट) चिप आवश्यक है?
क्या सॉफ्टवेयर में MMU कार्यक्षमता का अनुकरण करना संभव है? (मुझे पता है कि प्रदर्शन पर इसका बड़ा असर पड़ेगा।
वर्चुअल मेमोरी सपोर्ट करने के लिए प्रोसेसर के लिए MMU (मेमोरी मैनेजमेंट यूनिट) चिप आवश्यक है?
क्या सॉफ्टवेयर में MMU कार्यक्षमता का अनुकरण करना संभव है? (मुझे पता है कि प्रदर्शन पर इसका बड़ा असर पड़ेगा।
जवाबों:
कोई भी सिस्टम एमुलेटर जो एमएमयू युक्त एक प्रणाली का अनुकरण करता है, सॉफ्टवेयर में एमएमयू को प्रभावी ढंग से अनुकरण करता है, इसलिए आपके प्रश्न का उत्तर "हां" है। हालाँकि , वर्चुअल मेमोरी में मेमोरी एक्सेस कंट्रोल या कम से कम एड्रेस ट्रांसलेशन को लागू करने के कुछ तरीके की आवश्यकता होती है, इसलिए इसे या तो सीपीयू के पूर्ण सॉफ्टवेयर इम्यूलेशन की जरूरत होती है, जो सॉफ्टवेयर को नियंत्रित करता है, या इसे हार्डवेयर सहायता की आवश्यकता होती है।
तो आप किसी भी MMU के साथ एक प्रणाली का निर्माण कर सकते हैं, इसमें QEMU को पोर्ट कर सकते हैं, लापता मेमोरी को वर्चुअल मेमोरी को वास्तव में उपयोगी बनाने के लिए जोड़ सकते हैं ( जैसे , होस्ट सिस्टम पर स्वैप के लिए समर्थन जोड़ें), और QEMU में MMU की आवश्यकता वाली ऑपरेटिंग सिस्टम को चलाएं, सभी सुरक्षा के साथ आप अतिथि ऑपरेटिंग सिस्टम (QEMU बग्स को छोड़कर) में अपेक्षा करेंगे।
आभासी स्मृति प्रदान करने के लिए उपयोग किए जाने वाले एक एमएमयू-कम "एमुलेशन" का एक वास्तविक और पुराना उदाहरण, जेड-मशीन है , जो सत्तर के दशक के अंत और अस्सी के दशक की शुरुआत में 8-बिट सिस्टम पर अपने कोड और डेटा को पेजिंग और स्वैप करने में सक्षम था। । यह अंतर्निहित वास्तविक प्रोसेसर पर एक वर्चुअल प्रोसेसर का अनुकरण करके काम करता है; इस तरह, दुभाषिया मेमोरी लेआउट पर पूर्ण नियंत्रण रखता है जो चल रहे प्रोग्राम "देखता है"।
व्यवहार में, यह आमतौर पर माना जाता है कि वर्चुअल मेमोरी सपोर्ट के लिए कम से कम ऑपरेटिंग सिस्टम स्तर पर MMU की आवश्यकता होती है। जैसा कि एमएमयू-कम कर्नेल को इंगित किया गया है ? , लिनक्स कर्नेल का निर्माण संभव है ताकि यह एमएमयू के बिना सिस्टम पर चल सके, लेकिन परिणामस्वरूप कॉन्फ़िगरेशन बहुत ही असामान्य है और केवल बहुत विशिष्ट उपयोग-मामलों के लिए उपयुक्त है (विशेष रूप से कोई शत्रुतापूर्ण सॉफ़्टवेयर के साथ)। यह वर्चुअल मेमोरी (स्वैपिंग, mmap
...) की आवश्यकता वाले कई परिदृश्यों का समर्थन नहीं कर सकता है ।
यह बिल्कुल उसी पर निर्भर करता है जिसे आप वर्चुअल मेमोरी कहते हैं। एक दिलचस्प मॉडल पुराना Win16 मॉडल (पुराने विंडोज 3.x से जाना जाता है, विंडोज एनटी से जाना जाता है)। उस मॉडल में, आप के लिए किया था GlobalLock
और GlobalUnlock
, LocalLock
और LocalUnlock
कार्य करता है। ये वर्चुअल मेमोरी के सहकारी, मैनुअल प्रबंधन का एक रूप थे। जैसा कि यह (एप्लिकेशन) सॉफ्टवेयर में किया गया था, इसके लिए MMU की आवश्यकता नहीं थी। और मेमोरी इस मायने में वर्चुअल थी कि अनलॉक की गई मेमोरी को डिस्क में स्वैप किया जा सकता था।
हालांकि, Win16 मॉडल में विभिन्न प्रक्रियाओं के बीच कोई सुरक्षा नहीं है। यदि स्मृति में कोई अन्य प्रक्रिया डेटा छोड़ देती है, तो आप इसे अधिलेखित कर सकते हैं। यह मौलिक प्रतिबंध नहीं है। एसएसडी के इन दिनों के साथ, आप पूरी तरह से मेमोरी से एक नॉन-रनिंग प्रक्रिया को हटा सकते हैं, और उचित समय में ऐसा कर सकते हैं।
हार्डवेयर MMU होना आवश्यक नहीं है, यदि आपके पास ऐसा सॉफ़्टवेयर है जो भौतिक मेमोरी से प्रक्रियाओं को स्वैप कर सकता है ।
यह प्रारंभिक मल्टी-टास्किंग ऑपरेटिंग सिस्टम के संचालन का तरीका था। किसी भी समय स्मृति में केवल एक ही प्रक्रिया होती है, जब इसकी समय-सीमा समाप्त हो जाती है (तो आप देख सकते हैं कि यह बड़ी प्रक्रियाओं के साथ समस्याग्रस्त हो जाता है)। वर्तमान में चल रही प्रक्रिया द्वारा देखी गई मेमोरी सामग्री वैसी नहीं है जैसी किसी अन्य प्रक्रिया द्वारा देखी गई है, और प्रत्येक का पता स्थान का अपना दृष्टिकोण है।
कुछ हार्डवेयर समर्थन सहायक हैं - ओएस के स्वयं के उपयोग के लिए "संरक्षित" मेमोरी क्षेत्र की एक धारणा (जैसे एमएसबी सेट के साथ सभी पते केवल पर्यवेक्षक मोड में सुलभ हैं) और "ब्रेक" मूल्य उपयोग में उच्चतम पते का संकेत देता है, लेकिन स्मृति प्रबंधन वर्चुअल मेमोरी के लिए हार्डवेयर एक परम आवश्यकता नहीं है; इसे प्राप्त करने के लिए यह केवल एक विशेष रूप से प्रभावी तरीका है।
वीएम करने के लिए मूल वाणिज्यिक मशीनों में एमएमयू नहीं था - उन्होंने वीएम को प्रोसेसर में बनाया था। मेरी वर्तमान सोच यह है कि MMUs केवल वीएम को गैर-वीएम प्रोसेसर के शीर्ष पर रखने के लिए हैं। वीएम मैनचेस्टर विश्वविद्यालय में विकसित किया गया था, और बरोज डिजाइनरों को यकीन था कि उन्हें इसे शामिल करना चाहिए - हालांकि उस समय बहुत नवीन था।
बुरॉग्स बी 5000 (अब यूनिसिस एमसीपी मशीन) ने मेमोरी डिस्क्रिप्टर का इस्तेमाल किया जो स्मृति सीमाओं को लागू करता है - एक सीमा के बाहर जाता है और आपका प्रोग्राम डंप हो जाता है (सीमाओं का सम्मान करना एक अच्छे समाज का आधार है, लेकिन कुछ विशेषाधिकार का दुरुपयोग करते हैं, इसलिए सीमाओं को लागू किया जाना चाहिए)।
डिस्क्रिप्टर एक मेमोरी एड्रेस, ब्लॉक लेंथ और डेटा टाइप रखते हैं, लेकिन सभी महत्वपूर्ण पी-बिट या उपस्थिति बिट भी। पी-बिट इंगित करता है कि ब्लॉक मेमोरी में है। शून्य का एक पी-बिट का मतलब है कि ब्लॉक मास स्टोरेज पर है और एड्रेस स्टोरेज एड्रेस है, या तो मूल प्रोग्राम (कोड या डेटा) में, या वीएम (रोल-आउट डेटा) में।
इन मशीनों ने एक श्रेणीबद्ध मेमोरी मॉडल लागू किया। एमएमयू फ्लैट मेमोरी की कमियों के लिए बना प्रतीत होता है, यूजर ऑब्जेक्ट को फ्लैट मेमोरी में मैप करने की आवश्यकता होती है। JK Iliffe ने इस मॉडल के साथ ICL मशीनें भी डिजाइन की हैं:
http://www.computerconservationsociety.org/resurrection/res74.htm#f
https://en.wikipedia.org/wiki/Burroughs_large_systems
इन मशीनों और आज के अधिकांश लोगों के बीच का अंतर यह है कि वे पूरी प्रणाली वास्तुकला को संबोधित करते हैं, न कि केवल सीपीयू वास्तुकला को।
तो ऐसा लगता है कि न केवल एमएमयू आवश्यक नहीं हैं, लेकिन सिस्टम उनके बिना बेहतर हैं।
अधिकांश डेस्कटॉप, लैपटॉप और सर्वर प्रोसेसर में मेमोरी-मैनेजमेंट हार्डवेयर में एक या अधिक टीएलबी शामिल होते हैं, और यह लगभग हमेशा किसी भी प्रोसेसर में मौजूद होता है जो पृष्ठांकित या खंडित वर्चुअल मेमोरी का उपयोग करता है ।
और फिर, वर्चुअल मेमोरी के बारे में पढ़ें, और यह वास्तव में किसके लिए है। विशाल वर्चुअल एड्रेस स्पेस मुख्य विचार नहीं है। मुख्य विचार कई स्तरों पर कैशिंग / बफरिंग है।
यह सरल से बहुत दूर है, लेकिन यह टीएलबी मेमोरी कैश हार्डवेयर का एक महत्वपूर्ण टुकड़ा है कर्नेल का मिमी सबसिस्टम बनाता है (अन्यथा वीएम काफी हद तक खत्म हो जाएगा)।
वी एम =
वर्चुअल मेमोरी या वर्चुअल मशीन। बहुत अलग, बहुत जुड़ा हुआ।
तो जवाब है नहीं, MMU चिप ( मेनबोर्ड पर सीपीयू के बाहर एक अलग इकाई ) आवश्यक नहीं है।
हां, कुछ हार्डवेयर एमएमयू (सीपीयू में) उपयोगी वीएम के बारे में सोचने के लिए आवश्यक है। (यह x86 प्लेटफॉर्म के लिए इस 8086 विभाजन के साथ शुरू हुआ )