此問題與MIT課程操作系統工程(6.828)有關。
在其第一個實驗中引入了boot-loader。它表示,引導加載程序必須駐留在可引導設備的第一個扇區中,硬盤的這個扇區爲512字節。它們具有的boot-loader有兩個源文件boot.S和main.c,它們被組裝到二進制boot.out中。
據我所知,這應該是存儲在硬盤的第一個扇區(可引導扇區)中的二進制文件。但是當我使用linux命令「du -sh boot.out」來檢查它的大小時,結果是8kB。不應該是512字節。
此外,他們還給出了boot.asm,它是boot.out(ELF格式)的.text部分的反彙編。這個文件有一系列的彙編命令,它們的地址在它們的存儲位置。文件的一小部分如下所示:x86彙編語言和啓動
obj/boot/boot.out: file format elf32-i386
Disassembly of section .text:
00007c00 <start>:
.set CR0_PE_ON, 0x1 # protected mode enable flag
.globl start
start:
.code16 # Assemble for 16-bit mode
cli # Disable interrupts
7c00: fa cli
cld # String operations increment
7c01: fc cld
# Set up the important data segment registers (DS, ES, SS).
xorw %ax,%ax # Segment number zero
7c02: 31 c0 xor %eax,%eax
該文件包含512字節範圍內的地址。那麼爲什麼二進制boot.out佔用這麼多內存呢?是否只有ELF的.text部分被加載到內存中?
我還沒有看到在你的課程中使用'boot.S'文件。看看它的內容 - 是否使用BIOS例程調用從磁盤讀入'boot.out'的其餘部分? – 2015-02-05 18:28:37
我認爲boot.out是文件boot.S的二進制版本,它以ELF格式存儲在內存中。所以你說的不應該是這樣。 – sarthak 2015-02-05 18:56:05
可能彙編程序是引導程序中的第一個階段,C文件是第二階段(內核加載程序)。在經典大約8K的BSD上,這樣匹配。 – 2015-02-05 21:04:34