在上一篇译文中说明了x86内存映射,在实时模式下,要做的工作还真不少,为了让操作系统放在内存开始运行起来时多么辛苦啊!下面将从整体上把握设计思想。
这里主要从内存分布的角度来看这些程序。
第一是BIOS,上电后cpu的IP指针指向BIOS内存区,开始执行BIOS程序。BIOS主要做的工作是
BIOS的中断向量在实时模式要保护号,里面有很多功能可以调用。BIOS会从盘中引导系统,如果找到
第一个扇区是0xaa55的盘,就把它加载到内存里,放在07c00h处。磁盘里面我们一般把bootloader
第一段的程序的可执行文件放在这里512B的空间,其功能是加载第二阶段的bootloader到内存中,这
里放在实时模式下的free memory里面的090100h。然后跳转执行第二阶段的bootloader程序。第二
阶段的bootloader现在可以开始真正的使命,就是加载磁盘里的内核镜像到内存里面,然后开启保护
模式。这里的内核放在了free
memory区,地址设为08000h的地方。然后转入保护模式,把eip指向
内核区的代码。内核要做的就是在保护模式下工作了。
说了一大段,总结就是:
1,BIOS加载磁盘第一扇区代码到07c00h
2,第一扇区代码加载bootloader2到090100h
3,bootloader2加载kernel到08000h,并切换到保护模式
4,执行08000h的代码。。。。
整个过程都在实时模式的1M空间内惊醒,可以使用BIOS的中断例程。在第3过程后内核代码使用的寄存器,地址线什么的都要
放大到32位了,也就真正的进入线性区为4G的模式。其寻址模式不再是简单的CS:IP了,而是引入了段描述符进行寻址。
时间: 2024-10-13 13:35:18