学习操作系统原理最好的方法是自己写一个简单的操作系统。
按一下电脑上的电源按钮,电脑就启动了,不一会儿电脑屏幕上就出现了登录界面或直接进入了桌面。
这是一个很日常的场景,但有时候会有个疑问:电脑内部是如何启动的?本讲我们就简单的介绍一下。
因为本教程属于入门型,不考虑UEFI等比较新的技术。
电脑的启动过程在细节上是比较复杂的,但在大的过程上分为以下几个:
上电->BIOS->MBR(boot)->loader->kernel->交互界面(图形/命令行)
上面是一个比较经典的电脑启动过程,可以看到电脑启动过程类似接力赛,下面介绍一下接力赛的每一棒。
1. 上电
上电就是我们按了一下电脑上的电源按钮。上电后CPU会初始化,程序寄存器会指向一个固定的起始位置0xFFFF0。这个地址是BIOS程序的入口地址,CPU执行的第一条程序就从这里开始。
2. BIOS
Basic Input Output System 简称BIOS,中文译为基本输入输出系统。BIOS可以理解为一个微型操作系统,但它的功能很有限。它的主要作用是上电自检,然后加载并执行MBR里的程序。
BIOS程序存储在主板上的一块芯片里,CPU可以像访问内存条那样通过地址访问BIOS程序。但这块芯片在断电后不会丢失信息,对比内存断电后内存信息就全清零了。
BIOS上电自检主要是对电脑硬件进行检测和初始化,如果硬件有比较严重的问题,比如没发现内存条,BIOS会给出提示,并停止后续的操作。
BIOS自检完,如果硬件没有大的问题,就会去寻找启动项的MBR。这里说的启动项主要指硬盘、优盘、光盘、软盘等这些设备。安装过操作系统的朋友应该知道,在BIOS设置里有个启动项列表,可以调整启动项的顺序,在安装操作系统时我们可能会对这里进行设置。BIOS此时会根据这个启动项列表顺序读取第一个启动项的第一个扇区到内存地址0x7C00处。每个扇区有512个字节,BIOS程序会检查这512个字节中最后2个字节是否是0x55和0xAA。如果是说明这就是合法的MBR,并通过跳转指令跳转到0x7C00处执行程序。如果不是则读取下一个启动项的第一个扇区到内存地址0x7C00处,重复上面的过程。如果最后没有发现一个合法的MBR,BIOS会给出提示,并停止程序。
3. MBR
Master Boot Record 简称MBR,中文译为主引导记录,也就是启动项的第一个扇区。但并不是说启动项的第一个扇区就一定是MBR。只有启动项第一个扇区的最后2个字节是0x55和0xAA,该扇区才是MBR,该启动项才是合法的启动项。
需要注意的是一般硬盘的MBR中有分区表,而GrapeOS没有,因为GrapeOS使用的虚拟硬盘只有4MB,没必要分区。
BIOS中的程序一般在电脑出厂前就内置好了,从MBR开始及其之后的程序就该我们写了。
MBR里写的程序我们这里叫boot。因为MBR只有512个字节,boot功能有限,它主要就做一件事,就是加载并运行loader。
4. loader
loader的主要作用就是先做一些初始化工作,然后加载并运行kernel。
5. kernel
kernel是操作系统的内核,也是操作系统中最重要的部分。内核运行后会先做一些初始化工作,然后打开交互界面。
6. 交互界面
交互界面平时常见的是图形模式,但也有命令行模式,比如本教程开发环境中用的没有桌面的CentOS。
至此电脑启动完毕,用户可以用了。
如果需要可以观看本讲的视频版:https://www.bilibili.com/video/BV1UA411B7j3/
GrapeOS操作系统交流QQ群:643474045