一篇无意从网络上找到的文章,原地址已不祥,发现写得很精彩。

当你开启电脑时,它发生了什么?

一台没有软件运行的电脑只是一堆发热的电子器件。当计算机起电启动开始的第一件 事情就是运行一个叫做“操作系统”的特殊程序。操作系统的作用就是帮助其他的程序能够 的控制和访问计算机硬件。

装入操作系统的步骤叫作引导(booting)。(从严格意义上说,引导和自我检查的 处理步骤叫做“自检”)。您的计算机知道如何去引导,因为在其具体的操作方法已经 集成在一块称做 BIOS(或者叫基本输入输出系统)的芯片中了。

BIOS 芯片告诉计算机查看一个合适的地方引导系统,通常这个地方在编号最小的磁盘 上(引导盘)。一个称做引导器的程序(在 Linux 下通常是 Grub 或者是 LILO)会被装入 内存,并且启动。引导器的作用就是装入真正的操作系统。

接下来引导器会寻找一个内核,并将它装入内存后运行它。当你启动 Linux 的时候, LILO 会在系统屏幕上打印出一些小点,这说明它正在装入内核。(每一个点的意思就是已经 引导读取了磁盘上所指向内核的簇)。

(你可能会感到困惑,为什么 BIOS 不会直接引导系统,而舍直求曲的分成两个步骤呢? 事实上 BIOS 不是非常的智能,甚至可以说是有点木讷。因此 Linux 内核会在引导以后不再 使用它。这是因为这个程序是为有八字节限制的 PC 而写的,并且 BIOS 容量也有限制。 所以可能在引导的时候不能读取磁盘的後余的扇区。与此相比,引导程序却可以允许你引导磁盘上不只一个操作系统。(虽然它可以引导其他的 UNIX 系统,但是通常不会这么 做。)

当内核启动以后,它会自动检查和初始化硬件,并且准备运行程序。它通过一些 I/O 端口、特殊的总线查找硬件,而非一般的内存地址。这是因为这些总线通常它们会有控制卡监听并执行相应的命令。内核检查硬件不是随机的,它有一套内建的机制去处理它:哪里去寻找硬件,怎样控制正常使用的硬件等等。这个步骤称为自动检查(autoprobing)。

在内核自检的时候你会从屏幕上看到很多的信息,这是内核正在通过上述的 I/O 端口自动检查硬件,指出你的机器上有哪些可用的硬件并组织好它们。Linux 非常擅长于做 这些事情,这个功能相对来说比一些其他的 UNIX 系统要好,和 DOS 或者 Windows 来说要 好的多。事实上,许多 Linux 老用户会认为内核并不需要那么智能的检查硬件(即使这样可以容易安装系统),这是因为他们有一个非常好的理由让那些吹毛求丝的用户跳出的无聊的 自由代码实验。

但是内核完全载入并且运行完毕并不是引导的结束;这仅仅是第一个阶段(有时被称做 运行级别一,run level 1)。在运行完运行级别一以后,内核回将控制权转交给一个 叫做 init 的程序,它将启动一些用户进程。

Init 进程所做的第一件事情就检查你磁盘的完整性。磁盘文件系统是一个非常重要的; 如果它们因为硬件问题或者是突然断电,那就有一个非常好的理由在 UNIX 系统引导前 检查并且修复它们。我们会等会详细的讨论文件系统为什么会损坏。

Init 接下来的事情就是启动一些精灵进程(daemon),比如打印控制控制系统、邮件 ***、或者是一个 WWW 服务器。精灵进程会在后台(background)运行,监视指定所要做的 事情。这些特殊的程序经常会相互处理所需要的请求,避免冲突。它们之所以是精灵进程, 是因为它们容易写成一个程序集合用来应答和处理所有需要的服务,而非为了一个同样的请求又去启动另外一个新的进程。精灵程序所生成的每一个进程将处理一个任务并且同时运行,而不影响别的进程。在每个系统上运行的精灵程序是不同的,但是通常都有一个打印监视进程 (一个控制你打印机的精灵进程)。

下一步就是为用户准备了。Init 开启一个名叫 getty 的进程监视你的控制台(console)(也许是一个拨号接
入的端口)。这个程序会在你的终端提供一个登陆符让您登陆系统。当所有的精 灵进程和 getty 进程在每个终端启动完毕,我们就处在了运行级别二(run level 2)。这时,在 这个级别下你可以登陆并且运行程序了。

但是事情并没有完,下一步就时开启一些别的有用的程序,比如网络和其他的一些服务。 当这些全部完成以后,我们所处在的是级别三运行模式(run level 3),并且这时系统就 完全可以使用了。