本文的部分信息和理解从自:
1.墨羽老师的专栏
2.杨文博老师的主页
3.《自己动手写操作系统》 于渊老师著
4.《使用开源软件自己动手写操作系统》 杨文博老师著
开始我们先从森林的角度看一下我们所要做的是什么工作。
一般计算机的启动流程为:
1.开电源,等待供电稳定;
2.BIOS自检(POST)-,对象为内存,显卡等关键设备,由“嘀”的喇叭声表示自检结果;
3.分别查找并执行显卡等关键设备的BIOS,进行初始化;
4.检测CPU类型和工作功率;
5.测试内存容量;
6.检测标准硬件设备,如硬盘,盘驱动器和I/O接口等;
7.检测连接的即插即用设备,并为之分配中断和I/O接口等资源;
8.根据系统的硬件配置是否改变对ESCD(扩展系统配置数据)进行更新;
9.根据用户选定启动设备顺序,查找该设备的引导扇区内的引导程序;
10.移交权限,执行引导程序;
11.引导程序启动操作系统内核......
首先第一个问题:我们的要做工作是什么?我们先来分析一下上述的步骤,第10之前,整个大局的控制权在BIOS手上,它的任务核心就是为软件的执行检测所需的硬件状态,这写任务已经被厂商写到芯片里,不能修改,也就是说这之前的9步并不需要我们自己动手;而10步后面就是我们要做的。第一个任务,编写引导程序。这里有第二个问题:BIOS怎么知道我们的引导程序是什么,在哪里呢?解决这个问题的方法就是,我们和BIOS约好一个特定的地址,我们将引导程序放入这个地址空间中,待BIOS完成任务后自动到该特定空间寻找我们放入的引导程序,而这快地址就是大名鼎鼎的“引导扇区”,他必须是盘面的第一个扇区(0面0道1扇区),且空间必须为512B,并且以0xAA55h两个字节为结尾标志,这里我们所做的及时编写自己的引导程序并按照约定放到指定的地址空间。第二个任务,编写操作系统内核,这里就不存在森林的大问题了,需要执着,专注......