डेबियन लिनक्स प्रति प्रोसेस 128TiB वर्चुअल एड्रेस स्पेस की अनुमति क्यों देता है लेकिन सिर्फ 64TiB भौतिक मेमोरी?


23

मैं अभी यहाँ पढ़ा :

  • प्रति प्रक्रिया (2GiB के बजाय) 128TiB वर्चुअल एड्रेस स्पेस तक
  • 4GiB (या PAE एक्सटेंशन के साथ 64GiB) के बजाय 64TiB भौतिक मेमोरी सपोर्ट

ऐसा क्यों है? मेरा मतलब है, भौतिक मेमोरी समर्थन कर्नेल द्वारा या वर्तमान हार्डवेयर द्वारा सीमित किया जा रहा है?

आपको वास्तविक मेमोरी से दोगुनी वर्चुअल मेमोरी स्पेस की आवश्यकता क्यों होगी जिसे आप वास्तव में संबोधित कर सकते हैं?


आप स्वैप भी जोड़ सकते हैं।
थोरबजर्न रेवन एंडरसन

2
यह बहुत राम है ...
dalearn

4
@ साला - आप जानते हैं, जब मैंने पहली बार सीखा कि आप 8-बिट माइक्रो के लिए बैंक-स्विच्ड मेमोरी एक्सपेंशन प्राप्त कर सकते हैं, जो कि उनके पास 4096KB तक है, मैंने ठीक यही बात कही है ...
जूल्स

जवाबों:


35

वे सीमाएं डेबियन या लिनक्स से नहीं आती हैं, वे हार्डवेयर से आती हैं। विभिन्न आर्किटेक्चर (प्रोसेसर और मेमोरी बस) की अलग-अलग सीमाएं हैं।

वर्तमान x86-64 पीसी प्रोसेसर पर, MMU 48 बिट वर्चुअल एड्रेस स्पेस की अनुमति देता है । इसका मतलब है कि पता स्थान 256TB तक सीमित है। उपयोगकर्ता के पते से कर्नेल पतों को अलग करने के लिए एक बिट के साथ, जो प्रक्रिया के पते के स्थान के लिए 128TB छोड़ देता है।

वर्तमान x86-64 प्रोसेसर पर, भौतिक पते 48 बिट तक का उपयोग कर सकते हैं , जिसका अर्थ है कि आप 256TB तक हो सकते हैं। यह सीमा उत्तरोत्तर बढ़ गई है क्योंकि amd64 वास्तुकला को पेश किया गया था (यदि मुझे सही ढंग से याद है तो 40 बिट्स से)। एड्रेस स्पेस के प्रत्येक बिट में कुछ वायरिंग और डिकोडिंग लॉजिक होता है (जो प्रोसेसर को अधिक महंगा, धीमा और गर्म बनाता है), इसलिए हार्डवेयर निर्माताओं के पास साइज को कम रखने के लिए एक प्रोत्साहन है।

लिनक्स केवल भौतिक पतों को 2 ^ 46 तक जाने की अनुमति देता है (इसलिए आप केवल 64TB तक का हो सकते हैं) क्योंकि यह भौतिक मेमोरी को पूरी तरह से कर्नेल स्थान में मैप करने की अनुमति देता है। याद रखें कि पता स्थान के 48 बिट्स हैं; कर्नेल / उपयोगकर्ता के लिए एक बिट कर्नेल एड्रेस स्पेस के लिए 47 बिट्स छोड़ता है। इसका अधिकांश भाग भौतिक स्मृति को सीधे संबोधित करता है, और दूसरा आधा कर्नेल को इसकी आवश्यकता के अनुसार मैप करने की अनुमति देता है। (लिनक्स एक ही समय में पूरी तरह से मैप नहीं की जा सकने वाली भौतिक मेमोरी का सामना कर सकता है, लेकिन यह अतिरिक्त जटिलता का परिचय देता है, इसलिए यह केवल उन प्लेटफार्मों पर किया जाता है, जहां इसकी आवश्यकता होती है, जैसे कि पीएई के साथ x86-32 और LPAE के साथ armv7।)

वर्चुअल मेमोरी के लिए कई कारणों से भौतिक मेमोरी से बड़ा होना उपयोगी है:

  • यह कर्नेल को पूरी भौतिक मेमोरी को मैप करने देता है, और वर्चुअल मैपिन्स के लिए जगह छोड़ देता है।
  • भौतिक मेमोरी के मैपिंग के अलावा, स्वैप की फाइलें और डिवाइस ड्राइवरों की मैपिंग हैं।
  • यह स्थानों में तुच्छ स्मृति के लिए उपयोगी होता है: पकड़ करने के लिए गार्ड पृष्ठों अतिप्रवाह बफ़र , की वजह से बड़े तुच्छ क्षेत्रों ASLR , आदि

9
भौतिक मेमोरी पर 46-बिट सीमा लिनक्स मेमोरी मैप से संबंधित है : इसमें कर्नेल स्पेस में भौतिक मेमोरी की पूरी मैपिंग शामिल है, जिसका अर्थ है कि भौतिक मेमोरी केवल उपलब्ध पता स्थान के एक चौथाई के अनुरूप हो सकती है।
स्टीफन किट

क्या कोई @StephenKitt टिप्पणी पर विस्तार से बता सकता है? मुझे यह समझने में बहुत दिलचस्पी है लेकिन संदर्भ पढ़ने के बाद भी उन्होंने उद्धृत किया कि मुझे यह नहीं मिला;)
gsi-frank

@ gsi-frank कर्नेल के लिए यह सुविधाजनक है कि वह संपूर्ण भौतिक मेमोरी को स्थायी रूप से मैप कर सके। तो 2 ^ 48 एड्रेस स्पेस में, 2 ^ 47 यूजरलैंड एड्रेस पर जाता है, 2 ^ 46 कर्नेल एड्रेस पर जाता है और 2 ^ 46 फिजिकल मेमोरी एड्रेसिंग के लिए है।
गिल्स एसओ- बुराई को रोकें

@ gsi-frank यदि आप क्लासिक पुस्तक " अपनी खुद की 32-बिट ऑपरेटिंग सिस्टम का विकास " की एक प्रति पकड़ सकते हैं , तो यह उस लेखक के अपने ओएस के लिए एक समान निर्णय लेने के कारण के बारे में काफी गहराई में जाता है। 80386 के 4GiB वर्चुअल एड्रेस स्पेस को 2GiB कर्नेल सेगमेंट में विभाजित करना जिसमें 1GiB फिजिकल रैम मैपिंग और 2GiB यूजर सेगमेंट शामिल है)। ओएस इंटर्नल्स में रुचि रखने वाले किसी व्यक्ति को शायद इसे पढ़ना चाहिए - यह समझने के लिए पर्याप्त सरल का एक पूर्ण डिजाइन प्रदान करता है लेकिन उपयोगी ओएस कर्नेल होने के लिए पर्याप्त उन्नत है।
जूल्स

चूंकि कर्नेल के संस्करण 4.13, x86-64 (और कुछ अन्य आर्किटेक्चर) को पांच-स्तरीय पेजेटेबल्स के साथ बनाया जा सकता है , जो भौतिक रैम के लिए x86-64 पर पता स्थान को बढ़ाते हैं, और आभासी के लिए 57 बिट्स (4BB /) 128 PiB)। ध्यान दें कि कर्नेल स्पेस में मेमोरी मैप सुरक्षा मुद्दों का परिचय देता है ताकि निकट-ईश भविष्य में बदलने के लिए उत्तरदायी हो।
स्टीफन किट

9

मैं नहीं जानता कि क्यों, लेकिन मैं सात कारणों से सोच सकता हूं कि भौतिक मेमोरी की तुलना में दो गुना अधिक स्थान का समर्थन करना उपयोगी होगा।

  1. पहला ऐसा है कि आप ऐसे एप्लिकेशन चला सकते हैं, जिन्हें अतिरिक्त मेमोरी की आवश्यकता होती है - भले ही इसका मतलब डिस्क पर स्वैप करना हो।
  2. मेमोरी मेमोरी के विभाजन के लिए क्लीनर मेमोरी लेआउट। उदाहरण के लिए, एक OS उच्चतर संख्या वाले पते ले सकता है और अलग-अलग क्लीनर बनाने के लिए अनुप्रयोगों के लिए कम-संख्या वाले पते छोड़ सकता है।
  3. पता स्थान लेआउट यादृच्छिकरण थोड़ा अधिक प्रभावी है।
  4. निष्पादन योग्य के रूप में पृष्ठों को चिह्नित करने का मतलब बचे हुए स्मृति हो सकता है।
  5. मेमोरी-मैप्ड I / O।
  6. मेमोरी एलोकेशन आसान है: एक बार में एक बड़ा हिस्सा आवंटित किया जा सकता है।
  7. याददाश्त का कम होना

1
धन्यवाद! 1) इतना स्पष्ट और बुनियादी है कि मैं इस सवाल के लिए शर्मिंदा महसूस करता हूं;)
gsi-frank

2
(३) वास्तव में भी महत्वपूर्ण है। आप वास्तव में एक वर्चुअल एड्रेस स्पेस चाहते हैं जो कि आपके द्वारा आवंटित की गई मेमोरी की मात्रा से अधिक परिमाण का आदेश हो ताकि यादृच्छिक अनुमान लगभग निश्चित रूप से जाल में परिणत हों।
आर ..

6

वे हार्डवेयर सीमाएँ हैं। वर्तमान x86_64 / amd64 हार्डवेयर 48-बिट वर्चुअल पते और विभिन्न आकार (कार्यान्वयन पर निर्भर करता है - उदाहरण के लिए, मेरा वर्कस्टेशन यहां केवल 36 बिट्स का समर्थन करता है) भौतिक पते की अनुमति देता है। लिनक्स कर्नेल आभासी पता स्थान को आधे में विभाजित करता है (कर्नेल के लिए आधे का उपयोग करते हुए, उपयोगकर्ता के लिए आधा - ठीक उसी तरह जैसे यह 686 पर होता है)।

तो आप प्राप्त करें:

2 बाइट्स = 2 = 2⁴⁷ बाइट्स = 128 टीआईबी

भौतिक पता आकार अक्सर छोटा होता है क्योंकि यह वास्तव में भौतिक होता है। यह बोर्ड पर सीपीयू और ट्रेस लाइनों में पिन / पैड, ट्रांजिस्टर, कनेक्शन इत्यादि लेता है। संभवत: चिपसेट में भी ऐसा ही है। यह समझ में नहीं आता कि प्रोसेसर कोर या सॉकेट के डिजाइन के जीवनकाल में राम की राशि का समर्थन करने में कोई कठिनाई नहीं है - उन सभी चीजों में पैसे खर्च होते हैं। (प्रत्येक में 32 DIMM स्लॉट्स और 64GiB DIMM के साथ, आप अभी भी केवल 2TiB पर हैं। भले ही DIMM की क्षमता वार्षिक रूप से दोगुनी हो, हम 64TiB से 5 साल दूर हैं।

जैसा कि पीटर कॉर्डेस बताते हैं, लोग अब गैर-वाष्पशील भंडारण जैसे कि 3 डी XPoint को मेमोरी बस में संलग्न कर रहे हैं , जो पता स्थान से बाहर चलने योग्य बनाता है। नए प्रोसेसर ने भौतिक पता स्थान को 48 बिट तक बढ़ा दिया है; यह संभव है कि डेबियन विकि को अभी अपडेट नहीं किया गया है।


मेमोरी बस (जैसे 3D XPoint) से सीधे जुड़ा हुआ गैर-वाष्पशील भंडारण एक बात बनती जा रही है, और यह अगले कुछ वर्षों में भौतिक पता स्थान की मांग को बढ़ा सकता है (क्योंकि यह DRAM की तुलना में सघन है, और इसके बारे में जानकारी लेना उपयोगी है) अधिक मामलों में यह उपयोगी है कि RAM के बोटलोड हो)। एक बहुत-तकनीकी लेख (या बेहतर सामान के लिए Google) के लिए zdnet.com/article/the-non-volatile-memory-revolution देखें । Intel Skylake इसके clflushऔर clflushoptनिर्देशों के साथ इसका समर्थन करता है ।
पीटर कॉर्ड्स

1
आप पहले से 96 स्लॉट्स में 12TiB RAM तक सिस्टम खरीद सकते हैं ( उदाहरण के लिए Tyan का फोर-सॉकेट HPC सिस्टम ), इसलिए 64TiB पांच साल से कम की हो सकती है। और कुछ लोग उन्हें खरीदते हैं और उन्हें उस रैम के साथ फिट करते हैं ...
स्टीफन किट

@StephenKitt हम्म, यह ठीक है क्योंकि DIMM की क्षमता 3 साल के करीब दोगुनी हो जाती है itt
derobert

यह पता चला है कि आप वास्तव में 64 टीबी रैम के साथ सिस्टम खरीद सकते हैं।
स्टीफन किट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.