在上电的时候,BIOS将bootsect从启动设备中读入到内存绝对地址0x7C00处,并跳到bootsect中去执行,当它被执行的时候就会把自己移动到内存绝对地址0x90000处,并使用BISO中断把启动设备中后2KB字节代码(setup)读入到内存0x90200处,而内核的其他部分代码(system模块)则被读入到内存地址0x10000开始处。
随后跳到setup模块执行,它需要利用BIOS中的中断调用来获取机器的一些参数。(当BIOS初始化的时候会在物理内存开始处设置一个大小为0x400字节的中断向量表,因此需要在使用完BIOS的中断调用才能将这个区域覆盖)。接着,setup将system模块从0x10000处整块向下移动到内存绝对地址0x00000处。接下来加载中断描述符表积存器(idtr)和全局描述符表积存器(gdtr),开启A20地址线,重新设置两个中断控制芯片8259A,将硬件中断号重新设置为0x20-0x2f。最后设置CPU的控制积存器CR0(也称机器状态字),从而进入32位保护模式运行,并跳转到system模块最前面部分的head.s程序继续运行。
以上过程可以理解为bootloader的3级跳!