वर्चुअल एड्रेस स्पेस
कम्प्यूटिंग में, वर्चुअल एड्रेस स्पेस (वीएएस) या एड्रेस स्पेस वर्चुअल एड्रेस की सीमाओं का सेट है जो ऑपरेटिंग सिस्टम एक प्रक्रिया के लिए उपलब्ध कराता है।[1] वर्चुअल एड्रेस की सीमा सामान्यतः कम एड्रेस पर प्रारंभ होती है और कंप्यूटर के निर्देश सेट द्वारा अनुमत उच्चतम एड्रेस तक विस्तारित हो सकती है और ऑपरेटिंग सिस्टम के सूचक आकार के कार्यान्वयन द्वारा समर्थित होती है, जो 32-बिट के लिए 4 बाइट्स या 64-बिट के लिए 8 बाइट्स ओएस संस्करण हो सकती है। यह कई लाभ प्रदान करता है, जिनमें से एक प्रक्रिया अलगाव के माध्यम से सुरक्षा है, यह मानते हुए कि प्रत्येक प्रक्रिया को एक अलग एड्रेस स्पेस दिया गया है।
उदाहरण
- निम्नलिखित विवरण में, उपयोग की जाने वाली शब्दावली विशेष रूप से विंडोज एनटी ऑपरेटिंग सिस्टम के लिए होगी, लेकिन अवधारणाएं अन्य वर्चुअल मेमोरी ऑपरेटिंग सिस्टम पर लागू होती हैं।
जब 32-बिट OS पर एक नया एप्लिकेशन निष्पादित किया जाता है, तो प्रक्रिया में एक होता है 4 GiB वीएएस: मेमोरी एड्रेस में से प्रत्येक (0 से 232 − 1) उस स्पेस में मान के रूप में एक बाइट हो सकता है। प्रारंभ में, उनमें से कोई भी मान नहीं है ('-' कोई मान नहीं दर्शाता है)। ऐसे VAS में मानों का उपयोग करने या सेट करने से पेज दोष हो सकता है।
0 4 GiB
VAS |----------------------------------------------|
तब एप्लिकेशन की निष्पादन योग्य फ़ाइल को 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 फ़ाइल में बाइट निष्पादित करना प्रारंभ करती है। हालाँकि, जिस तरह से प्रक्रिया अपने VAS में '-' मानों का उपयोग या सेट कर सकती है, वह OS से उन्हें फ़ाइल से बाइट्स में मैप करने के लिए कहना है। इस तरह से वीएएस मेमोरी का उपयोग करने का एक सामान्य तरीका इसे पेज फ़ाइल में मैप करना है। पृष्ठ फ़ाइल एक एकल फ़ाइल है, लेकिन सन्निहित बाइट्स के कई अलग-अलग सेटों को VAS में मैप किया जा सकता है:
0 4 GiB
VAS |---vvv--------vvvvvv---vvvv----vv---v----vvv--|
mapping ||| |||||| |||| || | |||
file bytes app kernel user system_page_file
और पृष्ठ फ़ाइल के विभिन्न भाग विभिन्न प्रक्रियाओं के VAS में मैप कर सकते हैं:
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------|
Microsoft Windows 32-बिट पर, डिफ़ॉल्ट रूप से, केवल 2 GiB प्रक्रियाओं को उनके स्वयं के उपयोग के लिए उपलब्ध कराया जाता है।[2] अन्य 2 GiB ऑपरेटिंग सिस्टम द्वारा उपयोग किया जाता है। Microsoft Windows के बाद के 32-बिट संस्करणों में उपयोगकर्ता-मोड वर्चुअल एड्रेस स्पेस को विस्तारित करना संभव है 3 GiB जबकि केवल 1 GiB प्रोग्राम को IMAGE_FILE_LARGE_ADDRESS_AWARE के रूप में चिह्नित करके और boot.ini फ़ाइल में /3GB स्विच को सक्षम करके कर्नेल-मोड वर्चुअल एड्रेस स्पेस के लिए छोड़ दिया गया है।[3][4]
Microsoft Windows 64-बिट पर, एक निष्पादन योग्य चलाने वाली प्रक्रिया में जो /LARGEADDRESSAWARE:NO से जुड़ा था, ऑपरेटिंग सिस्टम कृत्रिम रूप से प्रक्रिया के वर्चुअल एड्रेस स्पेस के उपयोगकर्ता मोड हिस्से को 2 GiB तक सीमित कर देता है। यह 32- और 64-बिट निष्पादनयोग्य दोनों पर लागू होता है।[5][6] निष्पादनयोग्य चलाने वाली प्रक्रियाएँ जो /लार्जेडड्रेसवेयर:हाँ विकल्प से जुड़ी थीं, जो 64-बिट विज़ुअल स्टूडियो 2010 और बाद के संस्करण के लिए डिफ़ॉल्ट है,[7] से अधिक तक पहुंच है 2 GiB वर्चुअल एड्रेस स्पेस की: तक 4 GiB 32-बिट एक्जीक्यूटेबल्स के लिए, अप करने के लिए 8 TiB विंडोज 8 के माध्यम से विंडोज में 64-बिट एक्जीक्यूटेबल्स के लिए, और 128 TiB विंडोज 8.1 और बाद में 64-बिट निष्पादनयोग्य के लिए।[4][8]
C (प्रोग्रामिंग लैंग्वेज) के malloc के माध्यम से मेमोरी आवंटित करना स्थापित करता है पृष्ठ फ़ाइल को किसी भी नए वर्चुअल एड्रेस स्पेस के लिए बैकिंग स्टोर के रूप में। हालाँकि, एक प्रक्रिया मेमोरी-मैप की गई फ़ाइल फ़ाइल बाइट्स भी कर सकती है।
लिनक्स
x86 CPUs के लिए, Linux 32-बिट उपयोगकर्ता और कर्नेल एड्रेस श्रेणियों को अलग-अलग तरीकों से विभाजित करने की अनुमति देता है: 3G/1G उपयोगकर्ता/कर्नेल (डिफ़ॉल्ट), 1G/3G उपयोगकर्ता/कर्नेल या 2G/2G उपयोगकर्ता/कर्नेल।[9]
यह भी देखें
टिप्पणियाँ
- ↑ IBM Corporation. "What is an address space?". Retrieved August 24, 2013.
- ↑ "Virtual Address Space". MSDN. Microsoft.
- ↑ "LOADED_IMAGE structure". MSDN. Microsoft.
- ↑ 4.0 4.1 "4-Gigabyte Tuning: BCDEdit and Boot.ini". MSDN. Microsoft.
- ↑ "/LARGEADDRESSAWARE (Handle Large Addresses)". MSDN. Microsoft.
- ↑ "Virtual Address Space". MSDN. Microsoft.
- ↑ "/LARGEADDRESSAWARE (Handle Large Addresses)". MSDN. Microsoft.
- ↑ "/LARGEADDRESSAWARE (Handle Large Addresses)". MSDN. Microsoft.
- ↑ "Linux kernel - x86: Memory split".
संदर्भ
- "Advanced Windows" by Jeffrey Richter, Microsoft Press