मेमोरी एड्रेस

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

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

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

लॉजिकल एड्रेस
एक कंप्यूटर प्रोग्राम मशीन कोड को निष्पादित करने और डेटा को स्टोर करने और पुनः प्राप्त करने के लिए मेमोरी एड्रेस का उपयोग करता है। शुरुआती कंप्यूटरों में तार्किक और फिजिकल एड्रेस का मिलान किया जाता था, लेकिन वर्चुअल मेमोरी की शुरुआत के बाद से, अधिकांश एप्लिकेशन प्रोग्रामों को फिजिकल एड्रेस का ज्ञान नहीं होता है। इसके बजाय, वे कंप्यूटर की मेमोरी मैनेजमेंट यूनिट और ऑपरेटिंग सिस्टम मेमोरी मैपिंग का उपयोग करके लॉजिकल एड्रेस या वर्चुअल एड्रेस को संबोधित करते हैं; नीचे देखें।

एड्रेस रेजोल्यूशन की इकाई
अधिकांश आधुनिक कम्प्यूटर बाइट -एड्रेसेबल होते हैं। प्रत्येक एड्रेस एक बाइट (8 बिट) स्टोरेज की पहचान करता है। एक बाइट से बड़े डेटा को लगातार एड्रेस के क्रम में संग्रहीत किया जा सकता है। वर्ड -एड्रेसेबल कंप्यूटर मौजूद हैं, जहां न्यूनतम एड्रेसेबल स्टोरेज यूनिट प्रोसेसर का शब्द है। उदाहरण के लिए, डेटा जनरल नोवा मिनीकंप्यूटर, टेक्सास इंस्ट्रूमेंट्स टीएमएस 9900 और नेशनल सेमीकंडक्टर आईऍमपी-16 माइक्रो कंप्यूटर 16-बिट शब्दों का उपयोग करते हैं, और कई 36-बिट मेनफ्रेम कंप्यूटर (जैसे, पीडीपी-10 थे, जो 18-बिट शब्द एड्रेसिंग का उपयोग करते थे बाइट एड्रेसिंग नहीं, 218 36-बिट शब्दों का एड्रेस लोकेशन, लगभग 1 मेगाबाइट स्टोरेज। मेमोरी को संबोधित करने की दक्षता पतों के लिए उपयोग की जाने वाली बस के बिट आकार पर निर्भर करती है - जितने अधिक बिट का उपयोग किया जाता है, उतने ही अधिक एड्रेस कंप्यूटर के लिए उपलब्ध होते हैं। उदाहरण के लिए, एक 20-बिट एड्रेस बस (जैसे इंटेल 8086) के साथ एक 8-बिट-बाइट-एड्रेसेबल मशीन 220 (1,048,576) मेमोरी लोकेशन, या एक एमबी मेमोरी को संबोधित कर सकती है, जबकि एक 32-बिट बस (जैसे इंटेल 80386) 232 (4,294,967,296) स्थानों या एक 4 जीबी पता स्थान को संबोधित करता है। इसके विपरीत, एक 18-बिट एड्रेस बस के साथ एक 36-बिट वर्ड-एड्रेसेबल मशीन केवल 218 (262,144) 36-बिट स्थानों (9,437,184 बिट्स) को संबोधित करती है, जो 1,179,648 8-बिट बाइट्स, या 1152 केबी, या 1.125 एमबी के बराबर है - थोड़ा 8086 से अधिक।

कुछ पुराने कंप्यूटर (डेसीमल कंप्यूटर) डेसीमल डिजिट-एड्रेसेबल योग्य थे। उदाहरण के लिए, आईबीएम 1620 की चुंबकीय-कोर मेमोरी में प्रत्येक पता 6 -बिट बाइनरी-कोडेड डेसीमल अंक द्वारा पहचाना जाता है, जिसमें पैरिटी बिट, फ्लैग बिट, और चार संख्यात्मक बिट्स शामिल हैं। 1620 के दशक में 5 अंकों के डेसीमल एड्रेस का उपयोग किया गया था, इसलिए सिद्धांत रूप में, उच्चतम संभव पता 99,999 था। व्यवहार में, सीपीयू ने 20,000 मेमोरी स्थानों का समर्थन किया, और कुल 60,000 (00000-59999) के लिए दो वैकल्पिक बाहरी मेमोरी इकाइयां जोड़ी गईं, जिनमें से प्रत्येक 20,000 एड्रेस का समर्थन करती थी।

वर्ड साइज बनाम एड्रेस साइज
वर्ड साइज कंप्यूटर आर्किटेक्चर की एक विशेषता है जो बिट्स की संख्या का प्रतिनिधित्व करता है जिसे एक सीपीयू एक समय में प्रोसेस कर सकता है। आधुनिक प्रोसेसर, एम्बेडेड सिस्टम सहित, आमतौर पर 8, 16, 24, 32, या 64 बिट्स का शब्द आकार होता है; अधिकांश वर्तमान सामान्य-उद्देश्य वाले कंप्यूटर या तो 32 या 64 बिट्स का उपयोग करते हैं। 8, 9, 10, 12, 18, 24, 36, 39, 40, 48, और 60 बिट्स सहित कई अलग-अलग बिट आकारों का ऐतिहासिक रूप से उपयोग किया गया है।

बहुत बार, आधुनिक कंप्यूटर के वर्ड साइज का जिक्र करते समय, उस कंप्यूटर पर पता स्थान के आकार का भी वर्णन किया जाता है। उदाहरण के लिए, "32-बिट" लेबल वाला कंप्यूटर आमतौर पर 32-बिट मेमोरी एड्रेस की अनुमति देता है; एक बाइट-एड्रेसेबल 32-बिट कंप्यूटर 232 = 4,294,967,296 बाइट्स मेमोरी, या 4 बाईट्स (जीबी) को एड्रेस कर सकता है। यह एक मेमोरी एड्रेस को एक शब्द में कुशलतापूर्वक संग्रहित करने की अनुमति देता है।

हालांकि, यह हमेशा सच नहीं है। कंप्यूटर मेमोरी एड्रेस उनके वर्ड साइज से बड़ा या छोटा हो सकता है। उदाहरण के लिए, कई 8 बिट प्रोसेसर, जैसे एमओएस टेक्नोलॉजी 6502, 16-बिट एड्रेस का समर्थन करते हैं - यदि वे नहीं करते हैं, तो वे मेमोरी एड्रेसिंग के केवल 256 बाइट्स तक ही सीमित रहेंगे। 16-बिट इंटेल 8088 और इंटेल 8086 ने डिवीजन के माध्यम से 20-बिट एड्रेसिंग का समर्थन किया, जिससे उन्हें 64 केबी मेमोरी के बजाय 1 एमबी  का उपयोग करने की अनुमति मिली। पेंटियम प्रो के बाद से सभी इंटेल पेंटियम प्रोसेसर में फिजिकल एड्रेस एक्सटेंशन (पीएई) सम्मिलित हैं जो 36-बिट फिजिकल एड्रेस को 32-बिट वर्चुअल एड्रेस पर मैप करने का समर्थन करते हैं। कई शुरुआती प्रोसेसर में प्रति वर्ड 2 एड्रेस होते थे, जैसे कि 36-बिट प्रोसेसर।

सिद्धांत रूप में, आधुनिक बाइट-एड्रेसेबल 64-बिट कंप्यूटर 264 बाइट्स (16 एक्साबाइट्स) को संबोधित कर सकते हैं, लेकिन व्यवहार में, मेमोरी की मात्रा सीपीयू, मेमोरी कंट्रोलर या मुद्रित परिपथ बोर्ड डिज़ाइन (जैसे, फिजिकल मेमोरी की संख्या) द्वारा सीमित होती है) है। कनेक्टर्स या सोल्डर-ऑन मेमोरी की मात्रा)।

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

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

एप्लिकेशन प्रोग्रामिंग में एड्रेस स्पेस
आधुनिक कंप्यूटर मल्टीटास्किंग वातावरण में, एक एप्लिकेशन प्रोग्राम में आमतौर पर इसके एड्रेस स्पेस में निम्न प्रकार की मेमोरी होती है: हो सकता है कि एड्रेस लोकेशन के कुछ भागों को बिल्कुल भी मैप न किया गया हो।
 * मशीन कोड, सहित:
 * प्प्रोग्राम का अपना कोड (ऐतिहासिक रूप से कोड सेगमेंट या टेक्स्ट सेगमेंट के रूप में जाना जाता है);
 * शेयर्ड लाइब्रेरी
 * डेटा, जिसमें शामिल है
 * आरंभीकृत डेटा (डेटा सेगमेंट);
 * अप्रारंभीकृत लेकिन आवंटित चर;
 * रन-टाइम स्टैक ;
 * हीप;
 * शेयर्ड मेमोरी और मेमोरी-मैप्ड फ़ाइलें।

कुछ प्रणालियों में एक "स्प्लिट" मेमोरी आर्किटेक्चर होता है जहां मशीन कोड, स्थिरांक और डेटा अलग-अलग स्थानों पर होते हैं, और अलग-अलग पते के आकार हो सकते हैं। उदाहरण के लिए, पीआईसी 18 माइक्रोकंट्रोलर्स के पास फ्लैश मेमोरी में मशीन कोड और स्थिरांक को संबोधित करने के लिए 21-बिट प्रोग्राम काउंटर हैं, और एसआरएएम में डेटा को संबोधित करने के लिए 12-बिट एड्रेस रजिस्टर हैं।

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

फिजिकल और लॉजिकल मेमोरी में लॉजिकल एड्रेस मैपिंग भी संकेत के कई स्तरों को जोड़ती है; नीचे देखें।

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

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

x86 आर्किटेक्चर में मेमोरी मॉडल
प्रारंभिक x86 कंप्यूटर दो संख्याओं के संयोजन के आधार पर मेमोरी विभाजन एड्रेस का उपयोग करते थे: एक x86 मेमोरी सेगमेंटेशन, और दूसरा उस सेगमेंट के भीतर एक ऑफ़सेट।

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

यह भी देखें

 * बेस एड्रेस
 * इंडियननेस
 * निम्न-स्तरीय प्रोग्रामिंग भाषा


 * मेमोरी एड्रेस रजिस्टर


 * मेमोरी आवंटन
 * मेमोरी प्रबंधन इकाई-एमएमयू
 * मेमोरी मॉडल-प्रोग्रामिंग
 * मेमोरी सुरक्षा
 * मेमोरी विभाजन
 * ऑफ़सेट (कंप्यूटर विज्ञान), जिसे विस्थापन के रूप में भी जाना जाता है
 * पेज टेबल