Linux系统的典型引导过程主要由6个不同的阶段组成:
1、加载并初始化内核;
2、检测和配置设备;
3、创建内核线程;
4、操作员干预(仅现手工引导);
5、执行系统启动脚本;
6、进入多用户模式。
1、初始化内核
在初始化内核之前,机器首先加载存放在磁盘开头512字节的第一个引导程序MBR(Master Boot Record,主引导记录),然后由MBR决定加载磁盘哪个分区的第二个引导程序(引导加载程序,boot loader,一般为LILO或是GRUB)最后再由这个引导程序把Linux内核载入内存。内存的一般路径为/vmlinuz或者/boot/vmlinuz。
内核在内存启动之后会检测内存可用大小。内核的一些数据结构按静态方式分配其内存量,因此,当内核启动时会为自己划分出一块固定大小的内存空间,其他进程不能使用。
2、检测和配置设备
当内核开始执行时,它的第一批任务之一就是检查机器的环境以确定机器有什么硬件。如果在内核配置期间提供的设备信息不够明确,那么内核会通过探测设备总线和向适当的驱动程序寻求信息来尝试确定它所需的其他信息。那么没有检测到设备的驱动程序或者那么没有相应探测的驱动程序将被禁用。
3、内核线程
一旦完成基本的初始化任务,内核就在用户空间创建几个“自发”(因为它们不是通过系统正规的fork机制所创建的)的进程:init(一定是进程1)和几个内存和内核处理进程,如:kjournald,ksawp,kreclaimd,khupd,
ksoftirqd。在这些进程中,只有init是真正完整的用户进程,其他进程实际上都是内核的组成部分。创建完自发进程后,内核在引导阶段的任务就结束了。不过处理基本操作(比如接受登录)的进程还都没创建,而且大多数Linux守护进程也都没启动,这些任务都是init进程来负责的(有些情况是间接)。
4、操作员干预(仅限手工引导)
如果系统以单用户模式进行引导,那么在init启动时,内核所给出的命令行标志(就是“single”这个单词)会通知init实际要引导的是单用户模式。在许多单用户模式下,文件系统的根目录是按只读方式安装的。如果/tmp是根文件系统的一部分,那么许多要使用临时文件的命令(如vi)都不能执行。为了能在单用户模式下交互操作,必须先把根文件系统以读写方式重新安装:
# mount -o rw,remount /
5、执行启动脚本
Linux启动脚本其实就是普通的shell脚本,由init根据一定的算法来选择并运行它们。
6、多用户运行
在初始化脚本运行过之后,系统就是完全运行的系统了。不过现在用户还不能登录进来,为了在某个特定终端(包括控制台)上接受用户登录,必须有一个getty进程监听终端或者控制台。init直接生成这些getty进程,完成引导过程。init进程还负责生成图形登录系统,例如xdm或gdm。
阅读(1433) | 评论(0) | 转发(0) |