वर्चुअल मेमोरी क्या है?


27

मैं 'वर्चुअल मेमोरी' के लिए अपने नोट्स की दोहरी जाँच कर रहा था और मेरी पाठ्य पुस्तक में परिभाषा है:

मुख्य मेमोरी के हिस्से के रूप में कार्य करने के लिए द्वितीयक भंडारण के एक खंड को आवंटित करने की प्रक्रिया

जहाँ विकिपीडिया कहता है:

वर्चुअल मेमोरी एक कंप्यूटर सिस्टम तकनीक है, जो एप्लिकेशन प्रोग्राम को यह आभास देती है कि इसमें सन्निहित कार्य मेमोरी (एड्रेस स्पेस) है

और (विकिपीडिया भी कहता है)

ध्यान दें कि "वर्चुअल मेमोरी" भौतिक मेमोरी साइज़ को बढ़ाने के लिए "डिस्क स्पेस का उपयोग करने" से अधिक है

क्या कोई भी स्पष्टीकरण दे सकता है जो सही है?


मेरा मानना ​​है कि विकिपीडिया के नोट में सन्दर्भित होने वाली चीज़ों के संदर्भ में उपयोग की जाने वाली कुछ योग्यताएँ शामिल हैं।
जेबी किंग

इस सवाल का एसओ पर बेहतर जवाब मिलेगा।
20

2
वर्चुअल मेमोरी का उपयोग कैसे किया जाता है, इसे लेकर भ्रमित न हों। विकिपीडिया का पहला वाक्य यह क्या है परिभाषित कर रहा है। आपकी पुस्तक इस बारे में बात कर रही है कि आमतौर पर इसका उपयोग कैसे किया जाता है। एक बार जब लोग "पृष्ठों" के बारे में बात करते हैं तो वे वर्चुअल मेमोरी के एक विशिष्ट कार्यान्वयन के बारे में बात करते हैं।
टोनी ली

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

1
पाठ्यपुस्तक इसे पूरी तरह से गलत तरीके से परिभाषित करती है, माध्यमिक भंडारण परिभाषा का हिस्सा नहीं है। और यहां तक ​​कि "डिस्क स्थान से अधिक" के बारे में विकिपीडिया का बयान भ्रामक है, क्योंकि इसमें डिस्क शामिल नहीं हो सकती है - यह कथन ऐसा लगता है कि यह "डिस्क से मेमोरी का विस्तार" और कुछ और है।
केल्विन

जवाबों:


41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

वर्चुअल मेमोरी प्रत्येक प्रक्रिया को प्रदान की गई अमूर्तता की एक परत है। कंप्यूटर में कहा गया है, 2GB की फिजिकल रैम, 0 से 2G तक संबोधित की जाती है। एक प्रक्रिया में 4GB का एड्रेस स्पेस देखा जा सकता है, जो कि पूरी तरह से खुद के पास है। वर्चुअल एड्रेस से भौतिक पते तक मैपिंग को एक स्मृति प्रबंधन इकाई द्वारा नियंत्रित किया जाता है, जिसे ऑपरेटिंग सिस्टम द्वारा प्रबंधित किया जाता है। आमतौर पर यह 4KB "पृष्ठों" में किया जाता है।

यह कई विशेषताएं देता है:

  1. एक प्रक्रिया अन्य प्रक्रियाओं में मेमोरी नहीं देख सकती है (जब तक कि ओएस इसे नहीं चाहता है!)
  2. किसी दिए गए वर्चुअल पते पर मेमोरी उसी भौतिक पते पर स्थित नहीं हो सकती है
  3. वर्चुअल पते पर मेमोरी को डिस्क में "पेजडेड" किया जा सकता है, और फिर "एक्सेस" किया जाता है जब इसे फिर से एक्सेस किया जाता है।

आपकी पाठ्यपुस्तक सिर्फ # 3 के रूप में वर्चुअल मेमोरी (गलत तरीके से) को परिभाषित करती है।

बिना किसी स्वैपिंग के भी, आपको विशेष रूप से वर्चुअल मेमोरी के बारे में पता होना चाहिए यदि आप डिवाइस के लिए डिवाइस ड्राइवर लिखते हैं जो डीएमए (डायरेक्ट मेमोरी) है। आपका ड्राइवर कोड सीपीयू पर चलता है, जिसका अर्थ है कि इसकी मेमोरी एक्सेस MMU (आभासी) के माध्यम से होती है। डिवाइस संभवतः MMU के माध्यम से नहीं जाता है, इसलिए यह कच्चे भौतिक पते देखता है। एक ड्राइवर लेखक के रूप में आपको यह सुनिश्चित करने की आवश्यकता है:

  1. हार्डवेयर में आपके द्वारा पास की जाने वाली कोई भी कच्ची मेमोरी भौतिक नहीं, बल्कि आभासी होती है।
  2. आपके द्वारा भेजे गए मेमोरी के किसी भी बड़े (मल्टी पेज) ब्लॉक शारीरिक रूप से सन्निहित हैं। एक 8K सरणी वस्तुतः संक्रामक (MMU के माध्यम से) हो सकती है, लेकिन दो शारीरिक रूप से अलग पृष्ठ। यदि आप डिवाइस को उस सरणी की शुरुआत के अनुरूप भौतिक पते पर 8K डेटा लिखने के लिए कहते हैं, तो यह पहला 4K लिखेगा जहां आप उम्मीद करते हैं, लेकिन दूसरा 4K कहीं न कहीं कुछ मेमोरी को भ्रष्ट करेगा। :-(

4

मैं धीरे-धीरे शुरू करने की कोशिश करूँगा, और फिर आपके लिए यह सब एक साथ रखूँगा। ऐसी बात हे:

वर्चुअल मेमोरी, जैसा कि आमतौर पर उपयोग किया जाता है, "पेजिंग" को संदर्भित करता है। जैसा कि नाम से पता चलता है, पेजिंग एक मानव नोटपैड की तरह है।

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

हालाँकि, जब आप जटिल जानकारी सीख रहे होते हैं, या जटिल रकम के साथ काम कर रहे होते हैं, तो आप एक ही बार में वह सब नहीं कर सकते हैं। आप भ्रमित हो जाते हैं, धीमा करना शुरू करते हैं, एक बार में यह सब वहाँ रखने में विफल होते हैं, और कुछ और याद करने के लिए कुछ भूलना पड़ता है।

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

तो वास्तव में, पेजिंग बहुत सरल है। जानकारी के सभी पृष्ठ स्मृति में फिट नहीं होते हैं, इसलिए कुछ पृष्ठों को डिस्क पर रखा जाता है, और बाद में फिर से लोड किया जाता है।

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

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

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

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

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


मैं इस जवाब से 100% असहमत हूं। यदि "वर्चुअल मेमोरी" को पेजिंग के लिए संदर्भित किया जाता है, तो एक सिस्टम जो पेज नहीं करता है (कहते हैं, कोई स्वैप या पेज फाइल सक्षम नहीं है) वर्चुअल मेमोरी का समर्थन नहीं कर सकता है। लेकिन यह स्पष्ट रूप से पागल है।
डेविड श्वार्ट्ज

@DavidSchwartz - शुरू में मेरी भी आपके जैसी प्रतिक्रिया थी, लेकिन अधिक विस्तार से जवाब पढ़ने में, मुझे नहीं लगता कि यह इतना बुरा है। विकिपीडिया / आभासी स्मृति पर विचार करें / पृष्ठांकित कहता है " आभासी स्मृति के लगभग सभी कार्यान्वयन पृष्ठों में एक आभासी पता स्थान को विभाजित करते हैं, सन्निहित आभासी स्मृति पते के ब्लॉक"। यही है, "पेजिंग", व्यापक अर्थों में, एक पेज फ़ाइल की आवश्यकता नहीं है , लेकिन भौतिक पते में आभासी पतों की मैपिंग को संदर्भित करता है।
टूलमेकर

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

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

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

0

मुझे पता है कि बहुत देर हो चुकी है .... लेकिन अभी भी यह उपयोगी है।

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

-2

वैसे अगर हम आभासी शब्द को समझते हैं तो मुझे लगता है कि हम समझ सकते हैं कि यह मेमोरी से कैसे संबंधित है।

Dictionary.com पर परिभाषित "वर्चुअल": "कंप्यूटर सॉफ़्टवेयर द्वारा अस्थायी रूप से सिम्युलेटेड या विस्तारित: रैम में एक वर्चुअल डिस्क, हार्ड डिस्क में वर्चुअल मेमोरी।"

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

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


-2

वर्चुअल मेमोरी एक ऑपरेटिंग सिस्टम (ओएस) की एक विशेषता है जो कंप्यूटर को अस्थायी एक्सेस मेमोरी (रैम) से डेटा के पन्नों को डिस्क स्टोरेज में अस्थायी रूप से स्थानांतरित करके भौतिक मेमोरी की कमी की भरपाई करने की अनुमति देता है।

मतलब यह एक मिरर या सैंपल मेमोरी की तरह है जिसका इस्तेमाल कंप्यूटर को फॉर्मेट किए बिना ऑपरेटिंग सिस्टम को आजमाने के लिए वर्चुअल मशीन या वर्चुअल बॉक्स में किया जाता है।


नहीं, यह पेजिंग है।
डेविड श्वार्ट्ज

-4

वर्चुअल मेमोरी आपके हार्ड ड्राइव का एक ब्लॉक है जिसे सिस्टम भौतिक रैम के अलावा पेजिंग फ़ाइल के रूप में उपयोग करता है।

यह मुश्किल हो जाता है, और कभी-कभी धीमा हो जाता है, क्योंकि विंडोज आपकी हार्ड ड्राइव के इस हिस्से को डीफ़्रैग नहीं करता है।

सर्वश्रेष्ठ 2 युक्तियां जो मैं पेश कर सकता हूं: 1) पुण्य मेम को आपकी भौतिक मेमोरी लगभग 1.5x पर न्यूनतम और अधिकतम दोनों सेट किया जाना चाहिए। पूर्व। 2GB RAM = 3070MB पुण्य। 2) डीफ़्रैगिंग करते समय, अपनी पेजिंग फ़ाइल बंद करें। डीफ़्रैग 2x, और मूल संख्या पर वापस रीसेट करें। यह ड्राइव का एक साफ टुकड़ा देता है और पेजिंग फ़ाइल की गति बढ़ाएगा।


1
यह पूरी तरह से सच नहीं है - आधुनिक मेमोरी मैनेजर सभी सिस्टम मेमोरी को वर्चुअलाइज करते हैं। यह वह है जो प्रक्रिया पृथक्करण के लिए अनुमति देता है - प्रत्येक प्रक्रिया केवल अपनी स्मृति को छू सकती है। मेमोरी मैनेजर इन वर्चुअल पेज को वास्तविक स्टोरेज में मैप करने के लिए जिम्मेदार होता है, और वैकल्पिक रूप से एक निश्चित डिस्क पर।
एंथनी जियोर्जियो

1
"विंडोज आपकी हार्ड ड्राइव के इस हिस्से को डीफ़्रैग नहीं करता है।" बस nuke pagefile.sys, रिबूट, डिस्क को डीफ्रैग करें और पेजिंग, वॉयला, एक ताजा और कंटेजलेस पेजफाइल को फिर से सक्षम करें! हालाँकि, Sysinternals 'PageDefrag बेहतर कार्य करता है क्योंकि यह बेहतर प्रदर्शन के लिए ड्राइव / विभाजन की शुरुआत में पेजफाइल को भी रखेगा।

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