最近一直在看0.12版本的内核,一直想实现一个简单的多任务内核,发现还真得先了解linux操作系统的启动过程。
1.BIOS
开机程序被写入ROM当中,计算机通电之后的第一件事就是读取它。
这块芯片里的程序叫做基本输入输出系统,简称BIOS
1.1硬件自检
检查计算机硬件能否满足运行的基本条件,这叫做硬件自检
1.2启动顺序
硬件自检完成之后,BIOS就把控制权转交给下一阶段的启动程序。
这时,BIOS需要知道,”下一阶段的启动程序“具体放在那里。也就是说,BIOS需要有一个外部存储设备的排序,排在最前面的设备就是优先转交控制权的设备,这中排序叫做启动排序。
2.主引导记录
BIOS按照启动顺序,把控制权转交给排在第一位的存储设备,这是计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55AA表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权转交给启动顺序下一个设备,这前512个字节,就叫做主引导记录(MBR)
3.硬盘启动
4.操作系统
控制权转交给操作系统后,操作系统的内核首先被载入
要注意的几点:
1)BIOS是通过INT 13中断来读取MBR的
2)BIOS会加载MBR到内存的0x7C00处:PC机在加电,ROM BIOS自检之后,引导扇区由BIOS加载到0x7C00处,然后将自己移动到内存0x90000处
总结:PC电源打开之后,80x86结构的CPU将自动进入实模式,并从地址0xFFF0开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址。PC的BIOS将执行某些系统的检测(硬件自检),并在物理地址0处开始初始化中断向量。此后,它将启动设备的第一个扇区(引导扇区,512B)读入内存绝对地址0x7c00处,并跳转到这个地方执行。
参考文章:
http://www.ruanyifeng.com/blog/2013/02/booting.html
Linux操作系统的启动