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