मेरे कर्नेल को प्रारंभ करते समय, मेरे पास कुछ चीजें होती हैं जिन्हें होने की आवश्यकता होती है: 1) पेजिंग को सक्षम करने की आवश्यकता है, 2) भौतिक स्मृति प्रबंधक को स्मृति मानचित्र को ग्राब से पार्स करने की आवश्यकता होती है, और 3) मिश्रित स्टार्टअप कोड को उस डेटा तक पहुंचने की आवश्यकता है जिसे बाद में वहां रहने की आवश्यकता है (जैसे जीडीटी, आईडीटी, मेमोरी प्रबंधन संरचनाएं)।उच्च आधा कर्नेल प्रारंभ
इन चरणों के बीच निर्भरता मुझे पागल कर रही है। आधे से अधिक के साथ, कर्नेल अपने आभासी पते पर जुड़ा हुआ है और इसलिए जिन विकल्पों के साथ मैं आया हूं वे 1) असेंबली में पेजिंग सक्षम करते हैं, जिसमें सभी मल्टीबूट पॉइंटर्स (असेंबली में) का पालन करना शामिल होगा ताकि वे अभी भी पहुंच सकें भौतिक मेमोरी मैनेजर के लिए और बाद में उन सभी को अनैप करने के लिए, 2) स्टार्टअप कोड को अपने भौतिक पते पर लिंक करें और उसके बाद कर्नेल संरचनाओं को उनके भौतिक पते पर भी एक्सेस करने के लिए कुछ पॉइंटर मैनिपुलेशन करें, या 3) आधे से अधिक का उपयोग न करें गिरी।
संकलन समय पर भौतिक स्मृति की मात्रा को जानने के बिना भौतिक स्मृति प्रबंधक बूटस्ट्रैपिंग भी शामिल है। मुझे पूरा यकीन है कि मुझे पहले संरचनाओं को आवंटित करते समय सभी मल्टीबूट संरचनाओं से सावधानी से बचना होगा, या उन्हें पहले इस्तेमाल करना होगा और फिर उन्हें ओवरराइट करने की चिंता न करें (हालांकि मुझे अभी भी मॉड्यूल से निपटना होगा और शायद यह दृष्टिकोण मल्टीबूट टेबल को एक ज्ञात स्थान पर कॉपी करना शामिल है क्योंकि मुझे भौतिक मेमोरी मैनेजर सेट करते समय उन्हें चाहिए)।
ये समस्याएं हैं कि मैंने अभी तक एक उच्च आधा कर्नेल से बचा है। क्या इन निर्भरताओं को हल करने के लिए किसी के पास अच्छी प्रणाली है? हो सकता है कि this GDT trick पर कर्नेल दोनों को अपने लिंक किए गए/वर्चुअल एड्रेस और मल्टीबूट टेबल को उनके भौतिक पते पर एक्सेस करने के लिए, या उपरोक्त समस्याओं से बचने वाले किसी प्रकार की प्री-डिफ़ाइंड पेज टेबल का उपयोग करने के लिए कुछ भिन्नता हो, शायद पीएसई शामिल हो?
धन्यवाद! एक सवाल- प्रारंभिक ढेर (मैं अनुमान लगा रहा हूं) स्थानांतरित एमबीआई रखता है, जिसे आप इसके साथ पूरा करते समय त्याग दिया जा सकता है, लेकिन ऐसा लगता है जैसे प्रारंभिक मैपिंग के लिए पेज टेबल भी रखता है। एक बार जब आप अपनी पहली प्रक्रिया बनाते हैं तो क्या आप उन्हें भी त्याग देते हैं? – rpjohnst
@Rusky: हाँ, एमबीआई को त्याग दिया जा सकता है लेकिन मैं ऐसा नहीं करता क्योंकि यह बहुत छोटा है। मैं उस ढेर में पेज निर्देशिका और पेज टेबल नहीं रखता लेकिन कहीं कम स्मृति में (लगभग 4 केबी)। मैं उनको त्याग नहीं देता क्योंकि पहली बार चलने वाली प्रक्रिया उन्हें प्राप्त करेगी। अर्थात। मेरी पहली प्रक्रिया प्रारंभिकरण के दौरान स्थापित पता स्थान में चली जाएगी। – Job