वर्चुअल एड्रेस स्पेस

From Vigyanwiki
Virtual address space and physical address space relationship.svg

कम्प्यूटिंग में, वर्चुअल एड्रेस स्पेस (वीएएस) या एड्रेस स्पेस वर्चुअल एड्रेस की सीमाओं का सेट है जो ऑपरेटिंग प्रणाली एक प्रक्रिया के लिए उपलब्ध कराता है।[1] वर्चुअल एड्रेस की सीमा सामान्यतः कम एड्रेस पर प्रारंभ होती है और कंप्यूटर के निर्देश सेट द्वारा अनुमत उच्चतम एड्रेस तक विस्तारित हो सकती है और ऑपरेटिंग प्रणाली के सूचक आकार के कार्यान्वयन द्वारा समर्थित होती है, जो 32-बिट के लिए 4 बाइट्स या 64-बिट के लिए 8 बाइट्स ओएस संस्करण हो सकती है। यह कई लाभ प्रदान करता है, जिनमें से एक प्रक्रिया अलगाव के माध्यम से सुरक्षा है, यह मानते हुए कि प्रत्येक प्रक्रिया को एक अलग एड्रेस स्पेस दिया गया है।

उदाहरण

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


जब 32-बिट OS पर एक नया एप्लिकेशन निष्पादित किया जाता है, तो प्रक्रिया में एक होता है 4 गीगाबाइट वीएएस: मेमोरी एड्रेस (0 से 232 − 1) में से प्रत्येक उस स्पेस में मान के रूप में एक बाइट हो सकता है। प्रारंभ में, उनमें से कोई भी मान ('-' कोई मान नहीं दर्शाता है) नहीं है। ऐसे वीएएस में मानों का उपयोग करने या सेट करने से पेज दोष हो सकता है।

  0                                           4 GiB
VAS        |----------------------------------------------|

तब एप्लिकेशन की निष्पादन योग्य फ़ाइल को वीएएस में माप किया जाता है। वीएएस प्रक्रिया में एड्रेस को एक्सई फ़ाइल में बाइट्स में माप किया जाता है। ओएस मैपिंग का प्रबंधन करता है:

0                                           4 GiB
VAS        |---vvv----------------------------------------|
mapping        |||
file bytes     app

वी मेमोरी-माप की गई फ़ाइल में बाइट्स से मान हैं। फिर, आवश्यक डायनामिक-लिंक लाइब्रेरी फ़ाइलों को माप (इसमें कस्टम लाइब्रेरी के साथ-साथ प्रणाली वाले भी सम्मिलित हैं kernel32.dll और user32.dll) किया जाता है:

0                                           4 GiB
VAS        |---vvv--------vvvvvv---vvvv-------------------|
mapping        |||        ||||||   ||||
file bytes     app        kernel   user

प्रक्रिया तब exe फ़ाइल में बाइट निष्पादित करना प्रारंभ करती है। चूँकि, जिस प्रकार से प्रक्रिया अपने वीएएस में '-' मानों का उपयोग या सेट कर सकती है, वह ओएस से उन्हें फ़ाइल से बाइट्स में माप करने के लिए कहना है। इस प्रकार से वीएएस मेमोरी का उपयोग करने का एक सामान्य तरीका इसे पेज फ़ाइल में माप करना है। पृष्ठ फ़ाइल एक एकल फ़ाइल है, किन्तु सन्निहित बाइट्स के कई अलग-अलग सेटों को वीएएस में माप किया जा सकता है:

0                                           4 GiB
VAS        |---vvv--------vvvvvv---vvvv----vv---v----vvv--|
mapping        |||        ||||||   ||||    ||   |    |||
file bytes     app        kernel   user   system_page_file

और पृष्ठ फ़ाइल के विभिन्न भाग विभिन्न प्रक्रियाओं के वीएएस में माप कर सकते हैं:

0                                           4 GiB
VAS 1      |---vvvv-------vvvvvv---vvvv----vv---v----vvv--|
mapping        ||||       ||||||   ||||    ||   |    |||
file bytes     app1 app2  kernel   user   system_page_file
mapping             ||||  ||||||   ||||       ||   |
VAS 2      |--------vvvv--vvvvvv---vvvv-------vv---v------|

माइक्रोसॉफ़्ट विंडोज़ 32-बिट पर, डिफ़ॉल्ट रूप से, केवल 2 गीगाबाइट प्रक्रियाओं को उनके स्वयं के उपयोग के लिए उपलब्ध कराया जाता है।[2] अन्य 2 गीगाबाइट ऑपरेटिंग प्रणाली द्वारा उपयोग किया जाता है। माइक्रोसॉफ़्ट विंडोज़ के बाद के 32-बिट संस्करणों में उपयोगकर्ता-मोड वर्चुअल एड्रेस स्पेस को विस्तारित करना संभव है 3 गीगाबाइट चूँकि केवल 1 गीगाबाइट प्रोग्राम को इमेज_फाइल_लार्ज_एड्रेस_अवेयर के रूप में चिह्नित करके और बूट.आईएनआई फ़ाइल में /3जीबी स्विच को सक्षम करके कर्नेल-मोड वर्चुअल एड्रेस स्पेस के लिए छोड़ दिया गया है।[3][4]

माइक्रोसॉफ़्ट विंडोज़ 64-बिट पर, एक निष्पादन योग्य चलाने वाली प्रक्रिया में जो /लार्जएड्रेसअवेयर:एनओ से जुड़ा था, ऑपरेटिंग प्रणाली कृत्रिम रूप से प्रक्रिया के वर्चुअल एड्रेस स्पेस के उपयोगकर्ता मोड भाग को 2 गीगाबाइट तक सीमित कर देता है। यह 32- और 64-बिट निष्पादनयोग्य दोनों पर प्रायुक्त होता है।[5][6] निष्पादनयोग्य चलाने वाली प्रक्रियाएँ जो /लार्जेडड्रेसवेयर:हाँ विकल्प से जुड़ी थीं, जो 64-बिट विज़ुअल स्टूडियो 2010 और बाद के संस्करण के लिए डिफ़ॉल्ट है,[7] 2 गीगाबाइट वर्चुअल एड्रेस स्पेस की: तक 4 गीगाबाइट 32-बिट एक्जीक्यूटेबल्स के लिए, अप करने के लिए 8 टेराबाइट विंडोज 8 के माध्यम से विंडोज में 64-बिट एक्जीक्यूटेबल्स के लिए, और 128 TiB विंडोज 8.1 और बाद में 64-बिट निष्पादनयोग्य के लिएसे अधिक तक पहुंच है ।[4][8]

सी (प्रोग्रामिंग लैंग्वेज) के मॉलोक के माध्यम से मेमोरी आवंटित करना स्थापित करता है

पृष्ठ फ़ाइल को किसी भी नए वर्चुअल एड्रेस स्पेस के लिए बैकिंग स्टोर के रूप में। चूँकि, एक प्रक्रिया मेमोरी-माप की गई फ़ाइल फ़ाइल बाइट्स भी कर सकती है।

लिनक्स

x86 सीपीयू के लिए, लिनक्स 32-बिट उपयोगकर्ता और कर्नेल एड्रेस श्रेणियों को अलग-अलग विधियों से विभाजित: 3जी/1जी उपयोगकर्ता/कर्नेल (डिफ़ॉल्ट), 1जी/3जी उपयोगकर्ता/कर्नेल या 2जी/2जी उपयोगकर्ता/कर्नेल करने की अनुमति देता है।[9]


यह भी देखें

टिप्पणियाँ

  1. IBM Corporation. "What is an address space?". Retrieved August 24, 2013.
  2. "Virtual Address Space". MSDN. Microsoft.
  3. "LOADED_IMAGE structure". MSDN. Microsoft.
  4. 4.0 4.1 "4-Gigabyte Tuning: BCDEdit and Boot.ini". MSDN. Microsoft.
  5. "/LARGEADDRESSAWARE (Handle Large Addresses)". MSDN. Microsoft.
  6. "Virtual Address Space". MSDN. Microsoft.
  7. "/LARGEADDRESSAWARE (Handle Large Addresses)". MSDN. Microsoft.
  8. "/LARGEADDRESSAWARE (Handle Large Addresses)". MSDN. Microsoft.
  9. "Linux kernel - x86: Memory split".


संदर्भ

  • "Advanced Windows" by Jeffrey Richter, Microsoft Press