一、BIOS(Basic Input/Output System)
BIOS是基本输入输出系统的简称,是连接最底层的硬件系统和软件系统的桥梁。早期BIOS存储在ROM中,后期存储于Flash Memory中,计算机通电之后,首先读取BIOS。
BIOS程序首先检查计算机的硬件是否满足运行的基本条件,称为Power-On Self-Test,简称为POST。
如果硬件出现问题则主板蜂鸣报警,若无问题则把控制权交给下一阶段的启动程序,按照CMOS中设定的启动顺序(Boot Sequence)转交控制权。
二、主引导记录(Master Boot Record,MBR)
接BIOS按照启动顺序将控制权交给排在第一位的存储设备后,计算机读取该设备的第一个扇区(512B),该扇区被称为主引导记录。主引导记录由三部分组成:
- 1-446字节 调用操作系统的机器码(Call OS);
- 447-510字节 分区表(Partition Table),将硬盘分为若干个区;
分区表的长度为64字节,分为四项每项16字节,因此一个硬盘只能有四个一级分区(主分区),每项类目如下:
(1)第1个字节:0x80表示该分区为激活分区,控制权转交给这个分区,只能有一个激活分区;
(2)第2-4个字节:主分区的第一个扇区物理位置(柱面、磁头、扇区号等);
(3)第5字节:分区类型;
(4)第6-8字节:主分区最后一个扇区的物理位置;
(5)第9-12字节:主分区第一个扇区的逻辑位置;
(6)第13-16字节:主分区的扇区总数,决定了主分区的长度; - 511-512字节 主引导记录签名(0x55和0xAA,Magic Number),如果不是这两个幻数则认为该硬盘没有被分区;
三、硬盘启动
-
卷引导记录(Volume Boot Record,VBR)
四个分区中唯一被激活分区的第一个扇区; -
扩展分区和逻辑分区
-
启动管理器
在这种情况下,计算机读取"主引导记录"前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的"启动管理器"(Boot Loader),由用户选择启动哪一个操作系统。
Linux环境中,目前最流行的启动管理器是Grub。
四、操作系统
控制权转交给操作系统后,操作系统的内核首先被载入内存。
以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。
至此,全部启动过程完成。