22.1.1 Linux启动的基本步骤
要完整讲述Linux的启动过程,需要追溯到按下电源开关的那一刻。PC引导的第一步是执行存储在ROM(只读存储器)中代码,这种引导代码通常被称为BIOS(基本输入输出系统,Basic Input/Ouput System)。BIOS知道和引导有关的硬件设备的信息,包括磁盘、键盘、串行口、并行口等,并根据设置选择从哪一个设备引导。
确定引导设备后(通常是第一块硬盘),计算机就尝试加载该设备开头512个字节的信息,包含这512个字节的段被称作MBR(Master Boot Record,主引导记录)。MBR的主要任务是告诉计算机从什么地方加载下一个引导程序,“下一个”引导程序被称为“引导加载器(Boot Loader)”。引导加载器负责加载操作系统的内核,Grub和LILO就是Linux上最著名的两个引导加载器。
接下来发生的事情就随操作系统的不同而不同了。对于Linux而言,基本的引导步骤包括以下几个阶段。
(1)加载并初始化Linux内核。
(2)配置硬件设备。
(3)内核创建自发进程。
(4)由用户决定是否进入手工引导模式。
(5)(由init进程)执行系统启动脚本。
(6)进入多用户模式。
可见,Linux内核总是第一个被加载的东西。内核执行包括硬件检测在内的一切基础操作,然后创建几个进程。这些内核级别的进程被称做“自发”进程。本章(或许也是整个系统)最重要的init进程就是在这个阶段创建的。
事情到这里还没有完。内核创建的进程只能执行最基本的硬件操作和调度,而那些执行用户级操作的进程(诸如接受登录)还没有创建。这些任务最后都被内核“下放”给init进程来完成,因此,init进程是系统上除了几个内核自发进程之外所有进程的祖先。