मैं एक छोटे ओएस पर काम कर रहा हूं जो प्रत्येक प्रक्रिया के लिए एक अलग स्थानीय वर्णनकर्ता तालिका का उपयोग करेगा। मैं समझता हूं कि मुझे अपने जीडीटी से एलडीटी सेगमेंट लोड करने के लिए lldt
निर्देश का उपयोग करने की आवश्यकता होगी। मेरे पास पहले से ही मेरा कर्नेल एक वैध जीडीटी के साथ संरक्षित मोड में चल रहा है, लेकिन मैं यह नहीं समझ सकता कि मेरे एलडीटी के लिए जीडीटी प्रविष्टि कैसा दिखना चाहिए। मैं समझता हूं कि इसका मूल पता मेरे एलडीटी को इंगित करना चाहिए, लेकिन मुझे नहीं पता कि विशेषाधिकार स्तर और अन्य गुण क्या होना चाहिए। यहाँ एनएएसएम कोड है कि मेरे GDT में LDT प्रविष्टि का प्रतिनिधित्व करता है:एलएलडीटी का उपयोग करके और इसके लिए जीडीटी को कॉन्फ़िगर करना
localTable equ $-gdt ; GDT entry #5 (selector 20h)
dw 0x1FF ; limit to 64 descriptors
dw 0x8000 ; base address
db 0x0
db 0x89 ; probably incorrect...
db 0x1f ; possibly incorrect...
db 0x0
आप एनएएसएम वाक्य रचना से परिचित नहीं हैं, तो यह तालिका प्रविष्टि, 0x8000 का आधार पते और 511 की एक सीमा (512 बाइट्स कुल या 64 प्रविष्टियां)। मैंने i486 प्रोग्रामर के संदर्भ पुस्तिका में जीडीटी और एलडीटी के बारे में अनुभाग पढ़ा है, लेकिन मैं पूरी तरह से समझ नहीं पा रहा हूं कि मेरी जीडीटी प्रविष्टि कैसा दिखना चाहिए।
वैसे भी, मैं तो जैसे LDT लोड:
mov ax, 0x20
lldt ax
इस कोड को एक सामान्य संरक्षण गलती (मैं एक अवरोध के साथ संभाल) उत्पन्न करने के लिए प्रोसेसर का कारण बनता है। मैं दो चीजों को जानना चाहता हूं:
1) क्या मैंने जीडीटी में अपने एलडीटी का सही वर्णन किया? यदि नहीं, तो क्या बदलने की जरूरत है? 2) LLDT
निर्देश विफल हो सकता है क्योंकि मेरे एलडीटी में अमान्य चयनकर्ता हैं? मैंने एलएलडीटी निर्देशक spec पढ़ा, और ऐसा लगता है कि यह एलडीटी की स्मृति भी नहीं पढ़ता है, लेकिन मैं बस यह सुनिश्चित करना चाहता हूं कि एलएलडीटी विफल नहीं हो रहा है क्योंकि मेरे पास मेरे एलडीटी के डेटा में एक टाइपो है।