chap2.2_loader加载器
加载器
- boot.bin文件,16位汇编文件,引导扇区,系统的入口
- loader.bin文件,16位汇编文件,loader文件,负责从16位实模式进入32位保护模式,并且加载32位ELF格式文件 loader.bin。
- loaderELF.bin文件,32位ELF文件,使用C语言实现,运行在32位保护模式下。
loader.bin位于引导的第1.5阶段。
loaderELF.bin位于引导的第2阶段。
两个称为loader加载器
按照正常的逻辑,BIOS载入执行引导扇区后,主引导记录就应该去查询并执行内核文件了。
但是存在着下面几个问题:
没有文件系统,就算磁盘有内核的内容,引导代码也不知道应该从哪里加载内核内容执行。
主引导记录只有512KB,没有办法做更多的操作
因此需要二阶段的引导,流程如下:
主引导记录继续加载执行一段的第二阶段引导程序,而这段内容可能占据几个扇区。
第二阶引导程序会构建文件系统,然后根据文件系统查找和执行内核。
第二阶引导程序我们称之为loader。加载器。
读取加载器
磁盘的1扇区为mbr扇区 ,我们规定其后面2-32扇区为loader内容的扇区。流程如下:
BIOS加载执行引导扇区。
引导扇区访问磁盘,并读取磁盘的2-62扇区。
复制磁盘的2-62扇区到内存的0x90000位置,并执行。
1. loader文件的位置
1)内存分配
在boot引导完成后,当前系统的内存分配如下:
内存 0x7c00-0x7dff :引导扇区
内存 0x8000-N : 读取的磁盘内容 ( 其中的 0xc200-0xc3ff 是loader文件)
2)loader在内存的位置
在前面的引导程序里面已经将磁盘的10个柱面加载到了内存单元的0x8000处。而在ima文件中程序的起始位置(也就是引导扇区)在磁盘中的位置是 0x4200。
同样在内存也是从 0x8000 往后的 0x4200 位置。
所以loader的内容在内存单元的开始位置为:0x8000+0x4200=0xc200位置。
说明:
整个磁盘文件包括引导扇区512+磁盘文件sys。loader在sys文件的0x4200位置,引导扇区在此之后。