13.2. 引导问题

启动电脑及启动和引导操作系统构成了一个有趣的两难境地。 按照定义在操作系统被启动之前计算机是无法完成任何任务的,包括运行磁盘上的程序。 如果计算机在没有操作系统的情况下不能运行来自于磁盘上的程序而操作系统又是放在磁盘上的, 那操作系统是如何启动的呢?

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

在 x86 硬件体系中,基本输入/输出系统 (BIOS) 负责加载操作系统, 为了做到这一点,BIOS 在磁盘上寻找主引导记录 (MBR),而 MBR 必须在放置的磁盘的特定位置。BIOS 有足够的能力来读入和运行 MBR, 且假使地认为 MBR 能完成加载操作系统的剩余任务, MBR可能需要BIOS的帮助。

在MBR中的代码通常被提为引导管理器, 尤其是与用户交互的那类。这一类引导器通常有更多代码位于磁盘第一 轨道或在操作系统的文件系统中。 (引导管理器有时也被称为boot loader, 但是FreeBSD对后面的引导阶段才使用这个术语。) 流行的引导管理器包括boot0(亦称Boot Easy,标准的 FreeBSD 引导管理器)、 GrubGAG,以及 LILO。 (只有boot0能装得进MBR。)

如果您只安装了一个操作系统,那么一个标准的 MBR 就足够了。 这个 MBR 先在磁盘上搜索可引导的(亦称“活动的”)分区, 然后运行分区上的代码以加载操作系统的其它部分。 MBR由fdisk(8)安装,是一个缺省的MBR。相关文件为 /boot/mbr

如果您在磁盘上安装了多个操作系统那么您可以安装一个不同的 引导管理器,它能显示一张操作系统的列表,您能从中选择启动哪个。 这样的两种引导器将在下一小节中讨论。

启动系统的剩余部分被分为三个阶段。第一阶段由 MBR 执行,它只是使计算机进入特定的状态然后执行第二阶段。 第二阶段稍微干得多一些。第三阶段完成加载操作系统的任务。 工作被分为三个阶段是因为 PC 标准对第一第二阶段执行的程序的大小有所限制。 把这些任务连在一起使得 FreeBSD 可以提供更大伸缩性的加载器 (loader)。

然后内核启动,它开始探测设备并初始化它们。 一旦内核引导进程完成任务,内核将控制权交给用户进程 init(8), 它确认磁盘是否处于可用状态。init(8) 然后开始用户级资源配置: 加载文件系统启动网卡,及粗略地启动所有 FreeBSD 系统加载时经常运行的进程。

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

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <[email protected]>.

关于本文档的问题请发信联系 <[email protected]>.