MIT-6.828-JOS 启动过程总结
1. BIOS初始化
1.1 CPU启动后,它会先加载BIOS模块代码到内存中执行。
1.2 BIOS会初始化硬件设备,初始化初始中断描述符表,这个中断描述符表叫“初始”是因为它是供内存描述符表初始化之前使用的,内核描述符表初始化后就会被清除。
1.3 BIOS会从启动盘中读取第一块内容并加载到内存的0x7c00,之后就跳转到0x7c00出执行。到这里,BIOS使命就完成了,boot loader模块开始运行。
2. BOOT模块
2.1 首先,看一下JOS的磁盘布局:boot loader存在第一扇区,而内核代码从第二扇区开始存储。
2.2 到目前为止,处理器还处于实模式状态,所以boot loader的第一个工作就是重置数据段寄存器DS,ES,SS为0
2.3 开启A20地址线,为进入保护模式做准备
2.4 加载全局描述符表,置位CR0寄存器的PE位,通过ljmp指令正式进入保护模式
2.5 进入保护模式后,先设置数据段描述符寄存器,然后设置栈指针初始化内核栈,这里值得一提的是JOS把boot loader的这段空间复用为了栈空间。最后call 到bootmain中从磁盘加载内核代码到内存。
2.6 到这里,boot loader工作完成,控制权交给kernel,也就是上一张图片的最后一行代码。