上一期介绍的是计算机硬件,这期看一下将这些硬件组装在一起后它是如何启动的。
先来个引子:当我们按下电源键到屏幕显示出操作界面的过程中究竟发生了什么呢?很多人可能会说这不就是启动了操作系统嘛。呵,这不是完整的过程。如果不能大概描述它的启动过程,我觉得这篇文章是为你准备的。
在我们按下机箱上的电源键后,电源向主板进行供电,主板上的部件都处于 power on 的状态。接着初始化 BIOS 系统。BIOS 系统是一个位于主板的程序,它可以控制硬件以及硬件设置(例如是否开启虚拟化、磁盘设备启动顺序等)。
BIOS 系统一般会烧录在一个不会因为掉电而丢失数据的 ROM 里面,一般来说主板出厂自带 BIOS。
上图就是比较常见的 BIOS 界面,现在比较好的主板已经不是这种风格。我现在用的这台机子的 BIOS 系统类似于如下这种:
这种 BIOS 也被称为 UEFI BIOS,它与之前的 BIOS 最大区别是支持鼠标操作,画面比较友好。UEFI BIOS 是古老 BIOS 的继承与延伸,它们的关系类似于 Windows XP 与 Windows 7。古老的 BIOS 常见于笔记本以及年代比较久远的 PC。
BIOS 初始化后,CPU 即读取 BIOS 中的内容。在 X86 类型的 CPU 加电后,CPU 即会读取物理地址 0xFFFF0,而这个地址即对应着 BIOS 的区域。
BIOS 的工作相当简单,主要的工作就是执行主机自检(POST),然后查找操作系统存在在哪个磁盘上,将操作系统载入。BIOS 在查找各磁盘 的操作系统时,主要是查找磁盘上的第一个扇区(0面0磁道1扇区),每个扇区是 512 字节,如果这是一个引导扇区,那么就将它载入0x7C00 的内存地址上,然后跳转到此地址上执行。如果此不是一个引导扇区,就继续查找下一个磁盘,看其上面是否存在引导扇区。如果所有的磁盘上都不存在引导扇区,则在屏幕上打印出一条出错信息。
引导扇区只有一扇区即 512 字节大,因此它的主要目的是把操作系统的内核读进内存,然后跳转到操作系统内核处开始执行。从编写操作系统角度来说,前面的 CPU 上电及 BIOS 的工作都不是操作系统能控制的,而从引导扇区开始,就完完全全可由操作系统来控制了,因此,编写引导扇区也是编写操作系统必要的工作之一。从 BIOS 跳入引导扇区后,计算机系统引导工作就算完成,而怎样把操作系统内核读进内存然后再安排一条跳转指令跳到内核处执行就是操作系统开发人员的工作了。
所以,计算机的启动过程是:
按下电源键
主板加电,启动 BIOS
BIOS 启动自检,并查找各个磁盘上的引导信息
执行引导扇区程序,启动操作系统
操作系统从 BIOS 接管计算机并启动
操作系统启动完成,计算机启动完成。