MIT 6.828 Assignment:Boot xv6

启动!


MIT 6.828 Operating System Engineering

CPU上电时执行的第一条指令是jump存储在ROM中的指令。BIOS将把存储在硬盘第一扇区中的512字节引导扇区加载到物理地址0x7c00到0x7dff的内存中。接下来,是时候执行引导加载程序代码(从实模式切换到保护模式)并进入内核

先在0x7c00处切断点,看看在执行boot loader之前,寄存器和堆栈的状况。可以看到%eip存储CPU要读取指令的地址,段寄存器%ss为0,也就是处于实模式下

当要正式进入boot loader(即boot main)之前,查看寄存器和堆栈的情况。栈顶寄存器%esp初始化为正确的0x7c00,段寄存器%ss也表示此时处于保护模式下

再单步运行一步,发现将%esp的值(也就是返回地址)推入堆栈。所有准备工作做好,就要正式进入boot main

其实做到这步,能理顺整个流程,其实这个assignment也就完成了。在回头看看一开始的要求

第一步:找到内核的入口点_start

第二步,在该入口点切断点,并查看相关寄存器堆栈内容