सबसे पहले, एक 32 बिट सिस्टम में 0xffffffff
( 4'294'967'295
) रैम के एक भौतिक स्थान को एक्सेस करने के लिए रैखिक पते हैं।
कर्नेल इन पतों को उपयोगकर्ता और कर्नेल स्थान में विभाजित करता है।
उपयोगकर्ता स्थान (उच्च मेमोरी) उपयोगकर्ता द्वारा पहुँचा जा सकता है और, यदि आवश्यक हो, तो कर्नेल द्वारा भी।
हेक्स और डिक नोटेशन में पता सीमा:
0x00000000 - 0xbfffffff
0 - 3'221'225'471
कर्नेल स्पेस (कम मेमोरी) को केवल कर्नेल द्वारा एक्सेस किया जा सकता है।
हेक्स और डिक नोटेशन में पता सीमा:
0xc0000000 - 0xffffffff
3'221'225'472 - 4'294'967'295
ऐशे ही:
0x00000000 0xc0000000 0xffffffff
| | |
+------------------------+----------+
| User | Kernel |
| space | space |
+------------------------+----------+
इस प्रकार, आपके द्वारा देखे गए मेमोरी लेआउट dmesg
कर्नेल स्पेस में रैखिक पतों की मैपिंग से मेल खाते हैं।
सबसे पहले, .text, .data और .init सीक्वेंस जो कर्नेल के अपने पेज टेबल की आरंभीकरण प्रदान करते हैं (रैखिक को भौतिक पतों में अनुवाद करते हैं)।
.text : 0xc0400000 - 0xc071ae6a (3179 kB)
वह श्रेणी जहाँ कर्नेल कोड रहता है।
.data : 0xc071ae6a - 0xc08feb78 (1935 kB)
वह श्रेणी जहाँ कर्नेल डेटा खंड रहते हैं।
.init : 0xc0906000 - 0xc0973000 ( 436 kB)
वह श्रेणी जहाँ कर्नेल के प्रारंभिक पृष्ठ टेबल रहते हैं।
(और कुछ गतिशील डेटा संरचनाओं के लिए एक और 128 kB।)
यह न्यूनतम पता स्थान केवल रैम में कर्नेल को स्थापित करने और इसकी मुख्य डेटा संरचनाओं को प्रारंभ करने के लिए पर्याप्त बड़ा है।
उनका उपयोग किया गया आकार कोष्ठक के अंदर दिखाया गया है, उदाहरण के लिए कर्नेल कोड:
0xc071ae6a - 0xc0400000 = 31AE6A
दशमलव संकेतन में, वह 3'255'914
(3179 kB) है।
दूसरा, प्रारंभ के बाद कर्नेल स्थान का उपयोग
lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB)
कमेम श्रेणी का उपयोग कर्नेल द्वारा सीधे भौतिक पतों तक पहुंचने के लिए किया जा सकता है।
यह पूर्ण 1 जीबी नहीं है, क्योंकि कर्नेल को हमेशा गैर-स्थिर मेमोरी आवंटन और फिक्स-मैपेड रैखिक पते को लागू करने के लिए कम से कम 128 एमबी रैखिक पते की आवश्यकता होती है।
vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB)
वर्चुअल मेमोरी आबंटन एक अनियंत्रित योजना के आधार पर पृष्ठ फ़्रेम आवंटित कर सकता है। इस स्कीमा का मुख्य लाभ बाहरी विखंडन से बचने के लिए है, इसका उपयोग स्वैप क्षेत्रों, कर्नेल मॉड्यूल या बफ़र्स के कुछ I / O उपकरणों के आवंटन के लिए किया जाता है।
pkmap : 0xff800000 - 0xffa00000 (2048 kB)
स्थायी कर्नेल मैपिंग कर्नेल को कर्नेल पता स्थान में उच्च-स्मृति पृष्ठ फ़्रेम के लंबे समय तक चलने वाले मैपिंग को स्थापित करने की अनुमति देता है। जब एक HighMEM पृष्ठ को kmap () का उपयोग करके मैप किया जाता है, तो वर्चुअल पते यहां से असाइन किए जाते हैं।
fixmap : 0xffc57000 - 0xfffff000 (3744 kB)
ये फिक्स-मैपेड रैखिक पते हैं जो रैम में किसी भी भौतिक पते को संदर्भित कर सकते हैं, न कि पिछले 1 जीबी जैसे कि कम-से-कम पते। फिक्स-मैप किए गए रैखिक पते उनके लोयम और pkmap सहयोगियों की तुलना में थोड़ा अधिक कुशल हैं। नियत मानचित्रण के लिए असाइन किए गए समर्पित पेज टेबल डिस्क्रिप्टर हैं, और kmap_atomic का उपयोग करके HIGHMEM पृष्ठों की मैपिंग यहां से आवंटित की गई है।
यदि आप खरगोश के छेद में गहरा गोता लगाना चाहते हैं:
लिनक्स कर्नेल को समझना