13.2. 引导问题

启动计算机并开始运行操作系统是一个有趣的两难问题。 按照定义, 在操作系统启动之前, 计算机是不知道如何完成任何一项任务的, 显然, 这也包括运行存放在磁盘上的程序。 既然计算机在没有操作系统的情况下不能运行来自磁盘的程序, 而操作系统程序又保存在磁盘上, 那么操作系统本身又应该如何开始呢?

The Adventures of Baron Munchausen 这本书中有一个和这个过程类似的故事。 一个人掉到了下水管道里, 然后靠着拉自己的靴襻 (bootstrap) 克服重重困难爬了出来。 在早期文献中, 多以术语 bootstrap 来指代操作系统的加载机制, 如今它逐渐被简写为 booting

在 x86 硬件体系中, 基本输入/输出系统 (BIOS) 负责加载操作系统。 为了做到这一点, BIOS 会在磁盘上一处特别的位置查找寻找主引导记录 Master Boot Record (MBR)。 系统的 BIOS 具备足够的能力加载并运行 MBR, 而后者则负责在 BIOS 的帮助下完成余下的加载操作系统的任务。

MBR 中具备与用户进行交互能力的那些代码, 通常也被称作 引导管理器。 这类引导程序通常需要用到保存在磁盘开始部分的 磁道 中, 或是在一些其他操作系统中位于文件系统中的一些文件中的代码。 有时, 引导管理器也会称为 引导加载器, 并与后者混为一谈, 但在 FreeBSD 中, 后者专指后面的引导阶段。 常见的引导管理器包括 boot0 (亦称 Boot Easy, 这是 FreeBSD 预设的引导管理器)、 GrubGAG, 以及 LILO。 其中, 只有 boot0 小到可以直接装得进 MBR

如果只安装一个操作系统, 那么标准的 PC MBR 就够用了。 这个 MBR 会在磁盘上查找第一个可引导的 (active, 亦称“活动的”) 分区, 然后运行分区中的代码来加载操作系统的其它部分。 在缺省情况下, fdisk(8) 安装的就是这个基于 /boot/mbrMBR

如果使用了多个操作系统, 则可以安装一个能列出安装的操作系统列表, 并允许您从其中挑选引导哪一个操作系统的其它引导管理器。 后面的小节中将讨论两种这样的引导管理器。

FreeBSD 的引导过程余下的部分可以分为三个阶段。 第一阶段由 MBR 负责, 其任务仅限于让计算机进入特定的状态, 并开始执行第二阶段。 第二阶段可以完成一些在第三阶段开始之前需要完成, 但更为复杂的任务。 第三阶段则是完成加载操作系统的任务。 将工作分为三个阶段的原因是 PC 标准对第一和第二阶段执行的程序的尺寸有所限制。 环环相扣地相继执行这些任务, 使 FreeBSD 能够提供更为灵活强大的引导加载器程序。

接下来内核开始运行, 并开始探测并初始化设备以供系统使用。 一旦内核完成了引导任务, 内核便将控制权交给用户进程 init(8), 它确认磁盘是否处于可用状态。 接下来, init(8) 开始配置用户级资源: 挂载文件系统、 配置网卡以便进行网络通讯, 并根据配置开始运行在 FreeBSD 系统在启动时所需要的进程。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.