最近的OS课程(借鉴自MIT6.828)学习了PC boot的过程,自己也动手完成了6.828的lab1,对启动流程有了一定认识。
环境:jos,QEMU为lab的实验环境。
CPU加电后,先进入预先写好的BIOS程序执行,首先执行:
[f000:fff0] 0xffff0: ljmp $0xf000,$0xe05b
f000:fff0是这条语句的地址,必须注意:BIOS下,处于i8086模式,即系统的实际内存只有1MB,lab中的注释描述如下:
+------------------+ <- 0xFFFFFFFF (4GB)
| 32-bit |
| memory mapped |
| devices |
| |
/\/\/\/\/\/\/\/\/\/\
/\/\/\/\/\/\/\/\/\/\
| |
| Unused |
| |
+------------------+ <- depends on amount of RAM
| |
| |
| Extended Memory |
| |
| |
+------------------+ <- 0x00100000 (1MB)
| BIOS ROM |
+------------------+ <- 0x000F0000