1.开启电源
2.启动自检
3.初始化所有寄存器,其中的CS:0xF000、IP:0xFFF0
4.如果存在异常,则将异常写入EAX中。
5.检测EAX的值是否正常。如果不为0,则发生错误。
6.CPU开始执行CS:IP处代码。
注意:在64位CPU环境下,平时的工作都是在保护模式下进行的。使用的都是虚拟地址来访问内存。由内存管理单元MMU负责做地址转换(虚拟地址->物理地址)。但在开机时,虚拟地址转换所需的页目录、页表等数据都尚未加载,所以MMU暂时无法使用。因此开机时使用的都是16位寄存器。在实地址模式下运行使用的是真实物理地址(段地址x16+偏移地址),最大寻址空间为1MB。0xF000:0xFFF0表示的物理地址:0xFFFF0。即cs左移4位。2的20次方最大1MB也就是0xFFFFF。而0xFFFF0指向的就是接近末端的位置。
7.刚开机时,内存中是没有数据的。因为内存中的数据都是动态写入的,关机就会消失。所以在开机后,主板BOIS就会将自己ROM中的数据映射到内存中。
8.CPU开始执行CS:IP(0xFFFF0)处指令。而这个地址处的指令是一个jmp XXXX的跳转指令,这是一种非常好的兼容写法,方便日后的扩展改动。这样CPU就不需要进行改动,无论主板怎么更新,CPU开机第一件事就是执行0xFFFF0处指令。
9.BOIS开始对计算机进行各种检测。而此时需要注意的是,整个CPU的执行过程都是单核的,也就是其他的核心都在摸鱼。只有等操作系统加载后,才会正真发挥多核作用。
10