2012-06-28 11 views
5

लिनक्स के साथ x86-64 के लिए उपयोगकर्ता वर्चुअल एड्रेस स्पेस 47 बिट लंबा है। जिसका अनिवार्य रूप से मतलब है कि लिनक्स लगभग ~ 128 टीबी वर्चुअल एड्रेस रेंज के साथ एक प्रक्रिया को मैप कर सकता है।लिनक्स x86-64 में 512GB से अधिक वर्चुअल एड्रेस रेंज का समर्थन कैसे करता है?

हालांकि, मुझे क्या भ्रमित करता है कि x86-64 आर्किटेक्चर प्रत्येक प्रक्रिया के लिए आईएसए परिभाषित 4-स्तर पदानुक्रमित पृष्ठ तालिका (रेडिक्स-पेड़ के रूप में व्यवस्थित) का समर्थन करता है। पृष्ठ तालिका की जड़ केवल 512 जीबी की वर्चुअल एड्रेस एड्रेस स्पेस को मैप कर सकती है। तो लिनक्स 512 जीबी से अधिक वर्चुअल एड्रेस रेंज का समर्थन कैसे कर सकता है? क्या यह प्रत्येक प्रक्रिया के लिए एकाधिक पेज टेबल का उपयोग करता है? यदि हां, तो प्रक्रिया के लिए सीआर 3 (x86-64 के पृष्ठ तालिका के आधार के पते को रखने के लिए रजिस्टर) को किसी भी प्रक्रिया के लिए क्या होना चाहिए? क्या मैं कुछ भूल रहा हूँ?

उत्तर

7

पृष्ठ तालिका की जड़ केवल 512 जीबी की वर्चुअल एड्रेस एड्रेस स्पेस को मैप कर सकती है। तो लिनक्स 512 जीबी से अधिक वर्चुअल एड्रेस रेंज का समर्थन कैसे कर सकता है? क्या यह प्रत्येक प्रक्रिया के लिए एकाधिक पेज टेबल का उपयोग करता है? यदि हां, तो प्रक्रिया के लिए सीआर 3 (x86-64 के पृष्ठ तालिका के आधार के पते को रखने के लिए रजिस्टर) को किसी भी प्रक्रिया के लिए क्या होना चाहिए? क्या मैं कुछ भूल रहा हूँ?

मैं तुम्हें "पृष्ठ तालिका की जड़" से क्या मतलब है पता नहीं है, लेकिन x86-64 पर पेजिंग इस तरह दिखता है:

  • पृष्ठ टेबल - पेजिंग संरचनाओं के निम्नतम स्तर। प्रत्येक में 512 8-बाइट प्रविष्टियां (पीटीई) होती है जो एक 4 कीबी पृष्ठ का वर्णन करती है, इसलिए पीटी 512 * 4 KiB = 2 MiB मेमोरी का वर्णन करता है (यह 2 एमआईबी पेज के रूप में भी काम कर सकता है, लेकिन अब इसे छोड़ दें)।
  • पृष्ठ निर्देशिका - पीटी के समान तालिका, पीटी को इंगित 512 8-बाइट प्रविष्टियां (पीडीई) युक्त; इसलिए, पीडी 512 * 2 MiB = 1 GiB मेमोरी का वर्णन करता है (यह 1 जीबीबी पृष्ठ के रूप में भी काम कर सकता है, पीटी के समान)।
  • पृष्ठ निर्देशिका पृष्ठ तालिका - पीडी के समान, लेकिन 512 8-बाइट प्रविष्टियां (पीडीपीटीई) पीडी को इंगित करती है; इसलिए, पीडीपीटीई स्मृति के 512 * 1 Gib = 512 GiB का वर्णन करता है।
  • पीएमएल 4, पेजिंग संरचनाओं का उच्चतम स्तर, तालिका है जिसमें 512 8-बाइट प्रविष्टियां (पीएमएल 4 ई) पीडीपीटी को इंगित करती है; इसलिए, पीएमएल 4 मेमोरी के 512 * 512 GiB = 256 TiB का वर्णन करता है।

मैं लिनक्स का सही स्मृति नक्शा पता नहीं, लेकिन शायद अधिक आधे (-128 TiB 0 से - 0xFFFF8000000000000xFFFFFFFFFFFFFFFF तक) कर्नेल के लिए आरक्षित है, निचले आधे (0 से 128 TiB के लिए - से 0x0000000000000000 से 0x00007FFFFFFFFFFF) उपयोगकर्ताओं के अनुप्रयोगों के लिए है। इसलिए, लिनक्स 512 गुणा वर्चुअल एड्रेस रेंज के 512 गुना का समर्थन करता है जो आप पूछ रहे हैं; यहां तक ​​कि टोरवाल्ड्स भी नहीं कहेंगे "हम पीएमएल 4 का समर्थन नहीं करेंगे"। मुझे नहीं पता कि आपको क्या भ्रमित करता है - क्या यह तथ्य है कि आप पेज टेबल मैप्स 2 एमआईबी कह रहे हैं और आपने इसे एक पृष्ठ के रूप में लिया है - 4 KiB - लेकिन अगर कुछ भी है तो मैं स्पष्टीकरण दे सकता हूं, इसके बारे में पूछें यह।

+0

स्पष्टीकरण के लिए धन्यवाद।मैंने एक स्तर और इस प्रकार भ्रम की गड़बड़ी की। अब यह स्पष्ट है। – Arka

0

आमतौर पर पता स्थान रिक्त स्थान साझा नहीं किया जाता है, जिसका अर्थ है कि शामिल पृष्ठ तालिकाएं अलग-अलग प्रक्रियाओं के बीच साझा नहीं की जाती हैं। और इसका मतलब है कि सभी 4 टेबल स्तरों पर।

बेशक, सामान्य (कर्नेल) भाग हमेशा सभी पता रिक्त स्थानों में मौजूद होता है, इसलिए, वास्तव में, कुछ साझाकरण होता है, लेकिन स्मृति केवल कर्नेल के लिए ही पहुंच योग्य होती है।

इसके अलावा, वास्तव में, प्रत्येक प्रक्रिया की अपनी पृष्ठ सारणी बहुत अधिक होती है और उनमें से किसी भी में सभी 2 पते का उपयोग करने में कोई समस्या नहीं है। कम से कम, सीपीयू के हिस्से पर कोई विशेष सीमा नहीं है, हालांकि ओएस के हिस्से में हो सकता है।

संबंधित मुद्दे