8

मैंने पढ़ा है, "जब कोई प्रोग्राम एक निर्देश निष्पादित करता है जैसे: MOV REG,1000, तो यह मेमोरी एड्रेस 1000 की सामग्री को आरईजी में कॉपी करने के लिए करता है। पता इंडेक्सिंग, बेस रजिस्टर्स, सेगमेंट रजिस्ट्रार और अन्य तरीकों।आभासी पता और वर्चुअल एड्रेस स्पेस को समझना

इन प्रोग्राम जेनरेट किए गए पते को वर्चुअल एड्रेस कहा जाता है और वर्चुअल एड्रेस स्पेस बनाते हैं। "

क्या कोई मुझे बता सकता है, यह क्या है (इन प्रोग्राम जेनरेट किए गए पते को वर्चुअल एड्रेस कहा जाता है) मतलब है?

उत्तर

27

प्रोग्राम और डेटा स्मृति कक्षों में संख्याओं के रूप में संग्रहीत किए जाते हैं। प्रत्येक मेमोरी सेल में एक अद्वितीय संख्या होती है, जिसे पता कहा जाता है। मान्य पते का प्रतिनिधित्व करने वाली संख्याओं की संख्या को पता स्थान कहा जाता है।

प्रोग्राम चलाते समय, सीपीयू स्मृति से डेटा पढ़ता है और परिणाम स्मृति को वापस लिखता है। सीपीयू वांछित स्थान को पढ़ने या लिखने के ऑपरेशन द्वारा लक्षित मेमोरी सेल का पता निर्दिष्ट करके स्मृति में संचारित करता है।

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

आधुनिक आर्किटेक्चर कई कार्यक्रमों को निष्पादित करने देते हैं जैसे कि वे संपूर्ण तार्किक पता स्थान के स्वामी हैं। दूसरे शब्दों में, कई कार्यक्रम एक ही पते पर स्मृति स्थान पर एक-दूसरे के परिणामों को आगे बढ़ाए बिना लिख ​​सकते हैं। यह पता स्थान को वर्चुअलाइज करके किया जाता है: मान लें कि प्रोग्राम ए और बी 0x1000 पर मेमोरी लोकेशन को लिखते हैं। ऑपरेटिंग सिस्टम द्वारा समर्थित सीपीयू, पते पर अतिरिक्त समायोजन कर सकता है, और मानचित्र इसे भौतिक पता 0x60001000 प्रोग्राम ए के लिए और प्रोग्राम बी के लिए 0x5F001000 तक कर सकता है। दोनों प्रोग्राम सोचते हैं कि उन्होंने 0x1000 पर स्थान लिखा था , क्योंकि वे वर्चुअल पता स्थान पर काम करते हैं। स्मृति का उनका मॉडल 0 से शुरू होने वाला एक संगत ब्लॉक है और 0x000100000000 तक जारी है (यह मानते हुए कि आपके सिस्टम में प्रक्रियाओं के लिए 4 जीबीबी मेमोरी उपलब्ध है)। लेकिन यह मॉडल केवल इसलिए काम करता है क्योंकि सीपीयू अतिरिक्त भौतिक पते पर उनके तार्किक पते का अनुवाद करता है, जिन्हें आवंटित किया जाता है और प्रोग्राम चलाने की प्रक्रिया में आवश्यकतानुसार ले जाया जाता है।

एक ही नंबर एक पते का प्रतिनिधित्व करने के लिए एक कार्यक्रम करने के लिए और एक सीपीयू को अलग बातें मतलब है क्योंकि, कार्यक्रम का पता स्थान आभासी कहा जाता है, और सीपीयू का पता स्थान शारीरिक कहा जाता है।

+0

आपके उदाहरण में 0x1000 एक प्रोग्राम जेनरेट पता है? –

+0

@ प्रोग्राम-ओ-स्टीव हां, यह एक प्रोग्राम जेनरेट पता है।ध्यान दें कि इससे कोई फर्क नहीं पड़ता कि प्रोग्राम ने उस पते को कैसे बनाया: यह एक स्थिर चर का पता हो सकता है, पता 0x1000 पर सरणी का एक तत्व 0, पता 0x0FE0 पर सरणी का तत्व 32, और इसी तरह । – dasblinkenlight

+0

लेकिन मेरे प्रश्न में बयान में कहा गया है कि प्रोग्राम ने आभासी पता होने के लिए पता उत्पन्न किया है। 0x1000 वर्चुअल एड्रेस नहीं दिखता –

1

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