2012-09-23 15 views
5

मैं बोवेट और सेसाटी द्वारा "लिनक्स कर्नेल को समझना" पुस्तक के माध्यम से पढ़ रहा हूं। दूसरे अध्याय में, "लिनक्स में पेजिंग" के तहत लेखक का उल्लेख है कि पेज आर्किटेक्चर के साथ पृष्ठ मध्य और ऊपरी निर्देशिकाएं कैसे समाप्त की जाती हैं, जिनके पास पीएई सक्षम नहीं है। मुझे लेखक का क्या मतलब है इसके बाद मुझे परेशानी हो रही है।लिनक्स कर्नेल मेमोरी प्रबंधन पेजिंग स्तर

वे अपने उपचार में ढीले हो गए हैं और पूरी तरह सहज ज्ञान नहीं बनाते हैं।

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

क्या कोई इसे और अधिक सुखद तरीके से समझा सकता है?

+0

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

+0

हां। पीएई के बिना प्रोसेसर पर, एमएमयू केवल निम्न दो टेबल की अपेक्षा करता है, लेकिन कर्नेल सभी चार की अपेक्षा करता है, इसलिए ऊपरी दो को सिर्फ एक प्रविष्टि के साथ बनाया जाना चाहिए। सुनिश्चित करें कि आप अपनी टिप्पणी को उत्तर के रूप में जोड़ सकते हैं जब आप कर सकते हैं। – ughoavgfhw

+0

मुझे लगता है कि मेरी व्याख्या में छेद लिनक्सियोस ने मुझे स्पष्ट रूप से समझाया। तो मैं उसका जवाब सही के रूप में चिह्नित करूंगा। – subramanian

उत्तर

2

अच्छा, मुझे लगता है कि इसका मतलब यह है कि कर्नेल हमेशा पृष्ठ सारणी के 4 स्तरों का उपयोग करता है, जो सामान्य 32 बिट, पीएई और लंबे मोड दोनों को समायोजित कर सकता है। मुझे लगता है कि उद्धरण में उनका क्या मतलब है कि पीएम 4 एल और पीडीटी सिर्फ एक प्रविष्टि की लंबाई पर सेट हैं जो सिर्फ अगले एक को इंगित करता है। तो इसका मतलब है कि सामान्य 32 बिट में, तो आप इस मिल:

       /-> Page table 
PM4L -> PDT -> Page Directory --> Page table 
           \-> Page table 

लेकिन पीएई में, आप इस:

PM4L -> 512 PDTs -> 512 Page Directories -> 1024 Page tables 
:

PM4L -> PDT -> 512 Page Directories -> 1024 Page tables 

और लांग मोड में, तो आप इस मिल

लेकिन 4 स्तरों की हमेशा वजह से, शेष कर्नेल में 32 बिट्स, पीएई और लम्बे मोड में एक एकीकृत इंटरफ़ेस है।

+0

आह! अब मैं देखता हूं कि मैं कहां उलझन में था। किताब इस तरह की व्याख्या करने लगती थी कि मध्य 2 टेबल निष्क्रिय थे। यह बिल्कुल समझ में नहीं आता है। आपका जवाब धन्यवाद स्पष्ट करता है! – subramanian

0

फिलहाल मैं एक ही पुस्तक पढ़ रहा हूं और मैं एक नया सवाल नहीं पूछना चाहता क्योंकि यह वास्तव में मेरी समस्या का समाधान करता है। क्यों दस्ता और PMD "सफाया" कर रहे हैं, लेकिन यह दो तालिकाओं में से किसी एक है

PML4 (Linux: PGD) -> PDPT (Linux: PUD) -> PD (Linux: PMD) -> PT 

पाठ कहा जाता है कि दो स्तरों के लिए पर्याप्त हैं और वह यह है कि:
टेबल के सामान्य अनुक्रम निम्नलिखित है एक की लंबाई और अनुक्रम के सही क्रम में रखा जाता है।
मेरी समझ में इसका मतलब है कि पीएमएल 4 (पीजीडी) पीडी (पीएमडी) से मेल खाता है और इसमें पीटी को प्रत्यक्ष पॉइंटर्स होते हैं। तो पीयूडी और पीएमडी "छोड़ दिया" हैं। लेकिन मेरी समझ मूल प्रश्न के सही उत्तर के अनुरूप नहीं है।
और 32-बिट अनुप्रयोग सिस्कोल करता है और 64-बिट कर्नेल मोड में स्विच करता है तो ऐसा पता कैसे हल किया जाता है? इस मामले में एमएमयू चार परतों की अपेक्षा करता है और दो नहीं।
यह स्पष्ट है कि मेरी समझ में कुछ गड़बड़ है क्योंकि चीजें इस तरह काम नहीं कर सकती हैं। उम्मीद है कि कोई चीजों को साफ़ कर सकता है।

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