2013-10-13 13 views
24

तो मेरी समझ यह है कि प्रत्येक प्रक्रिया में 0x0 से 0xFF तक की अपनी वर्चुअल मेमोरी स्पेस होती है .... एफ। ये आभासी पते भौतिक स्मृति (रैम) में पते से मेल खाते हैं। अमूर्तता का यह स्तर सहायक क्यों है? क्यों न सिर्फ सीधे पते का उपयोग करें?हमें वर्चुअल मेमोरी की आवश्यकता क्यों है?

मुझे समझ में आता है कि पेजिंग फायदेमंद क्यों है, लेकिन वर्चुअल मेमोरी नहीं है।

उत्तर

29

ऐसा करने के कई कारण हैं:

  • आप एक संकलित बाइनरी है, तो प्रत्येक समारोह स्मृति में एक निश्चित पते और विधानसभा निर्देश कॉल करने के लिए कार्य करता है कि पता हार्डकोडेड है है। यदि वर्चुअल मेमोरी मौजूद नहीं है, तो दो प्रोग्राम स्मृति में लोड नहीं हो सकते हैं और एक ही समय में चल सकते हैं, क्योंकि उन्हें संभावित भौतिक पते पर अलग-अलग कार्यों की आवश्यकता होती है।

  • यदि दो या दो से अधिक प्रोग्राम एक ही समय में चल रहे हैं (या संदर्भ-स्विच किए जा रहे हैं) और सीधे पते का उपयोग करते हैं, तो एक प्रोग्राम में एक स्मृति त्रुटि (उदाहरण के लिए, एक खराब सूचक पढ़ने) स्मृति का उपयोग कर नष्ट कर सकती है दूसरी प्रक्रिया से, एक ही दुर्घटना के कारण कई कार्यक्रमों को कम करना।

  • इसी तरह के एक नोट पर, एक सुरक्षा समस्या है जहां एक प्रक्रिया किसी अन्य कार्यक्रम में संवेदनशील डेटा को अनुमान लगाकर अनुमान लगा सकती है कि यह किस भौतिक पते पर स्थित होगा और इसे सीधे पढ़ा जाएगा।

  • आप एक प्रक्रिया के लिए सभी स्मृति बाहर पेजिंग जब एक दूसरी प्रक्रिया में स्विच करके दो उपरोक्त मुद्दों से निपटने के लिए प्रयास करते हैं तो आप एक बड़े पैमाने पर प्रदर्शन हिट उठाना क्योंकि आप पृष्ठ की स्मृति के सभी के लिए हो सकता है।

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

आशा है कि इससे मदद मिलती है!

+0

एक बहुत मदद करता है। लेकिन विखंडन के बारे में क्या? तो कुछ चीजें (उदाहरण के लिए एक सरणी) को आवंटित करने की आवश्यकता है। यदि वर्चुअल मेमोरी में एक सरणी आवंटित की जाती है, तो क्या इसका मतलब यह भौतिक स्मृति में भी संगत है? या क्या विखंडन का स्तर – user2079802

+2

@ user2079802 नहीं होता है- जरूरी नहीं है। यदि सरणी वर्चुअल मेमोरी के कई पृष्ठों को फैलाती है, तो ओएस उन पृष्ठों को भौतिक स्मृति के पूरी तरह से अलग क्षेत्रों में आवंटित कर सकता है। यह सुनिश्चित करने के लिए ओएस पर निर्भर है कि इससे प्रदर्शन के मुद्दों का कारण नहीं बनता है। – templatetypedef

+0

एक और बात। जब आपको कुछ चर का पता मिलता है, उदाहरण के लिए सी में और सी में, यह उसका वर्चुअल पता है, है ना? – user2079802

-1

वर्चुअल मेमोरी का मुख्य उद्देश्य बहु-कार्यशील है और बड़े कार्यक्रम चला रहा है। भौतिक स्मृति का उपयोग करना बहुत अच्छा होगा, क्योंकि यह बहुत तेज़ होगा, लेकिन राम की तुलना में राम स्मृति बहुत महंगा है।

शुभकामनाएं!

+0

पेजिंग के बारे में ओपी की टिप्पणी देखें। –

+2

यह उत्तर गलत है। यह स्वैपिंग के साथ वर्चुअल मेमोरी को भ्रमित करता है। –

8

संक्षिप्त उत्तर: प्रक्रिया के निष्पादन के लिए आवश्यक प्रोग्राम कोड और डेटा को मुख्य स्मृति में निष्पादित किया जाना चाहिए, लेकिन मुख्य स्मृति पूरी प्रक्रिया की आवश्यकताओं को समायोजित करने के लिए पर्याप्त नहीं हो सकती है।

दो प्रस्तावों

(1) भंडारण आवंटन के लिए किसी भी आवश्यकता को कम करने के एक बहुत बड़े मुख्य स्मृति का उपयोग करना: यह बहुत उच्च लागत की वजह से संभव नहीं है।

(2) वर्चुअल मेमोरी: यह उन प्रक्रियाओं को अनुमति देता है जो अनुरोध पर स्वचालित संग्रहण आवंटन के माध्यम से निष्पादित करने के लिए स्मृति में पूरी तरह से नहीं हो सकते हैं। शब्द वर्चुअल मेमोरी को लॉजिकल मेमोरी को अलग करने के अबास्ट्रक्शन को संदर्भित किया जाता है - प्रक्रिया द्वारा देखी गई स्मृति - भौतिक स्मृति से - मेमोरी प्रोसेसर द्वारा देखी गई।इस अलगाव के कारण, प्रोग्रामर को केवल लॉजिकल मेमोरी स्पेस के बारे में पता होना चाहिए जबकि ऑपरेटिंग सिस्टम भौतिक मेमोरी स्पेस के दो या दो से अधिक स्तर बनाए रखता है।

अधिक:

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

अक्षम स्मृति प्रबंधन की समस्या को हल करने के लिए दो सिद्धांत उभरे - स्थैतिक और गतिशील आवंटन। स्टेटिक आवंटन मानता है कि स्मृति संसाधनों की उपलब्धता और किसी प्रोग्राम की स्मृति संदर्भ स्ट्रिंग की भविष्यवाणी की जा सकती है। गतिशील आवंटन स्मृति उपयोग पर निर्भर करता है वास्तविक कार्यक्रम आवश्यकताओं के साथ बढ़ता और घटता है, स्मृति आवश्यकताओं की भविष्यवाणी पर नहीं।

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

एक समूह का मानना ​​था कि प्रोग्रामर को भंडारण आवंटन के लिए जिम्मेदार होना जारी रखना चाहिए, जो स्मृति कॉल आवंटित या रद्द करने के लिए सिस्टम कॉल द्वारा पूरा किया जाएगा। स्टोरेज आवंटन की जटिलता और मल्टीप्रोग्रामिंग के उभरते महत्व की वजह से दूसरे समूह ने ऑपरेटिंग सिस्टम द्वारा किए गए स्वचालित संग्रहण आवंटन का समर्थन किया।

1 9 61 में, दो समूहों ने एक-स्तरीय मेमोरी स्टोर का प्रस्ताव दिया। एक प्रस्ताव भंडारण आवंटन की किसी भी आवश्यकता को कम करने के लिए एक बहुत बड़ी मुख्य स्मृति के लिए बुलाया गया। बहुत अधिक लागत के कारण यह समाधान संभव नहीं था। दूसरा प्रस्ताव आभासी स्मृति के रूप में जाना जाता है।

सीएनई/मॉड्यूल/VM/हरी/defn.html

संबंधित मुद्दे