计算机开机主要做了两件事:1、读入操作系统并开始运行;2、初始化并记录硬件参数。
一、进入并读取引导扇区:
(1)、x86开机时CPU处于实模式(与保护模式对应,实模式的寻址CS:IP,就是CS<<4+IP)。
(2)、开机时,CS=0Xffff;IP=0x0000 硬件设计时决定。
(3)、得到寻址0Xfff0(ROM BIOS映射区(Basic In Out System) )。
(4)、检查RAM,键盘,显示器,磁盘等硬件
(5)、将磁盘0磁道0扇区读入0x7c00(引导扇区)
(6)、设置cs=0x07c0,IP=0x0000。寻址至0x7c00,进入引导扇区执行。
二、在引导区的代码是bootsect.s,执行其中的代码:
(1)、设置cs=0x900,IP=0x0000处。
(2)、读入0磁道1,2,3,4扇区,即setup的4个扇区。同时显示开机界面。
三、执行setup扇区中的代码setup.s:
(1)、获取内存和扩展内存的大小、光标位置、显卡参数、根设备号;
(2)、把整个操作系统的的数据移到0x0000地址处
(3)、进入保护模式,初始化gdt表(就是一个数组,里面是一些特定的地址,内容硬件规定),启动32位寻址方式,cs作为选择子,是gdt表的下标,根据查询gdt表格的结果+ip作为寻址的结果。
(4)、进入head.s。
四、执行head.s :
(1) main函数进栈
(2) 设置页表。
(3) main函数执行,初始化鼠标、键盘、内存使用情况……..
五、读入os代码到0地址,初始化重要的硬件参数