मुझे समझ में कठिनाई हो रही है कि एक साधारण बूट लोडर कैसे काम करता है। बूट लोडर के बारे में मैं बात कर रहा हूं एमआईटी कोर्स "ऑपरेटिंग सिस्टम इंजीनियरिंग" से एक है।बूटलोडर - संरक्षित मोड में स्विचिंग प्रोसेसर
सबसे पहले, मैं आपको विधानसभा कोड का एक टुकड़ा BIOS कार्यान्वित दिखाते हैं:
[f000:fec3] 0xffec3: lidtw %cs:0x7908
[f000:fec9] 0xffec9: lgdtw %cs:0x7948
[f000:fecf] 0xffecf: mov %cr0,%eax
[f000:fed2] 0xffed2: or $0x1,%eax
[f000:fed6] 0xffed6: mov %eax,%cr0
[f000:fed9] 0xffed9: ljmpl $0x8,$0xffee1
यह दिखता से, इस कोड को बाधा मेज और वर्णनकर्ता तालिका सेट और फिर सुरक्षित मोड चालू हो जाती है ।
- हम BIOS में संरक्षित मोड में क्यों जाते हैं? वास्तविक मोड में नहीं बूटलोडर रन चाहिए (Btw - कारण है कि यह असली मोड में चलाने की आवश्यकता है?)
- मैं खोज की, लेकिन कहीं भी नहीं मिला वास्तव में कैसे ljmpl अनुदेश काम करता है, और अंतर है के बीच यह और ljmp और नियमित jmp - I कोई सराहना करेगा अगर कोई सही दिशा में इंगित करेगा।
- हम कूद क्यों करते हैं? इस निर्देश का उद्देश्य क्या है?
बूट लोडर कोड के लिए आगे बढ़ते -
# Switch from real to protected mode, using a bootstrap GDT
# and segment translation that makes virtual addresses
# identical to their physical addresses, so that the
# effective memory map does not change during the switch.
lgdt gdtdesc
movl %cr0, %eax
orl $CR0_PE_ON, %eax
movl %eax, %cr0
# Jump to next instruction, but in 32-bit code segment.
# Switches processor into 32-bit mode.
ljmp $PROT_MODE_CSEG, $protcseg
- इसमें कहा गया है कि प्रोसेसर वास्तविक मोड में है - लेकिन हम अभी सुरक्षित मोड है कि BIOS स्विच देखा ... मैं उलझन में हूं - यह कैसे हो सकता है?
- हम 32 बिट मोड पर कैसे स्विच करते हैं? एलजेएम निर्देश के कारण प्रोसेसर को जादुई रूप से 32 बिट मोड में जाने का कारण बनता है?
और एक और बात यह है कि मुझे समझ नहीं आता - जब मैं gdb साथ बूटलोडर के निष्पादन को ट्रैक मैं देख रहा हूँ निम्नलिखित अनुदेश निष्पादित किया जा रहा है (जो बूटलोडर कोड से LJMP अनुदेश है):
ljmp $0x8,$0x7c32
लेकिन जब मैं .asm फ़ाइल में देखा मैंने देखा कि निम्नलिखित:
ljmp $0xb866,$0x87c32
पूरी तरह से यहाँ खो - कैसे अनुदेश .asm फ़ाइल में लिखा आओ और अनुदेश निष्पादित अलग हैं? मेरे पास एक छिद्र है जिसे इसे संरक्षित मोड से करना है और यह पते का अनुवाद कैसे करता है लेकिन मुझे वास्तव में यह नहीं मिलता है।
मैं किसी भी मदद की सराहना करता हूं!
बहुत व्यापक रूप से बंद करने के लिए वोटिंग: एक में बहुत से प्रश्न। –