一、加载操作系统内核程序
1.引导程序(bootsect)
对于操作系统,设计者必须把最开始执行的程序“定位”在启动扇区(软盘中的0盘面0磁道1扇区)。对于BIOS而言,接到启动操作系统的命令后,从启动扇区把代码加载到0x07C00(BOOTSEG位置)。BIOS已经把bootsect载入内存,bootsect作用为将第二批第三批的程序陆续加载到内存。
2.setup
bootsect对内存规划的参数:
SETUPLEN 要加载到setup程序的扇区数
SETUPSEG 被加载的位置
BOOTSEG 启动扇区被BIOS加载的位置
INITSEG 启动扇区将要移动到的新位置
SYSSEG 内核被加载的位置
ENDSEG 内核的末尾位置
1.将bootsect复制到新地方,通过指令 jmpi go,INITSEG在跳转之后的新位置接着执行后面的指令。通过CS寄存器的值把数据段寄存器DS,附加段寄存器ES,栈基址寄存器SS设置成与代码段寄存器CS相同的位置,并设置栈顶指针sp的偏移地址。
2.bootsect将setup程序加载到内存中:借助BIOS提供的int 0x13中断向量所指向的中断服务程序(磁盘服务程序),使用0x13中断时,需要事先将扇区和加载的内存位置信息传递给服务程序,setup程序紧挨着bottsect尾端
3.加载system模块
通过0x13中断,将第三批程序——系统模块载入内存,然后检测根设备,把根设备号保存在root_dev中。
二、实模式向保护模式的转换(32位)
1.关中断并将system移动到内存地址起始位置0x00000
setup程序将位于0x10000的内核程序拷贝至内存起始位置0x00000,该动作将BIOS中断向量表和BIOS数据区完全覆盖。