首页 > 代码库 > 从BIOS到内核的过程分析

从BIOS到内核的过程分析

在上一篇译文中说明了x86内存映射,在实时模式下,要做的工作还真不少,为了让操作系统放在内存开始运行起来时多么辛苦啊!下面将从整体上把握设计思想。

这里主要从内存分布的角度来看这些程序。

第一是BIOS,上电后cpu的IP指针指向BIOS内存区,开始执行BIOS程序。BIOS主要做的工作是

  • POST(Power On Self Test,上电自检)
  • 创建中断向量、设置寄存器
  • 软盘硬盘的开始扇区读取引导记录(MBR

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了,而是引入了段描述符进行寻址。


从BIOS到内核的过程分析