Home -- Michael's Blog :: Just Do IT -- Manuals

12.2. 引导问题

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

This problem parallels one in the book The Adventures of Baron Munchausen. A character had fallen part way down a manhole, and pulled himself out by grabbing his bootstraps, and lifting. 在以前,计算机术语bootstrap 指加载操作系统的机制,简称 ``booting''.

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

如果你只安装了一个操作系统,那么一个标准的MBR就足够了 . 这个MBR先在磁盘上搜索可引导的分区 , 然后运行分区上的代码以加载操作系统的其它部分 .

如果你在磁盘上安装了多个操作系统那么你可以安装一个不同的MBR ,它能显示一张操作 系统的列表,你能从中选择启动哪个. FreeBSD 自带了一个这样的MBR, 其它的操作系统厂商亦 提供可选的MBR.

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

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

Michael's Blog :: Just Do IT -- manuals