linux操作系统启动流程
linux操作系统启动有以下流程
(1) 加载 BIOS
计算机电源加电质检,首先加载基本输入输出系统(Basic Input Output System,BIOS),BIOS 中包含硬件 CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即用(Plug-and-Play,PNP)特性等。加载完 BIOS 信息,计算机将根据顺序进行启动。
(2) 读取 MBR
读取完 BIOS 信息,计算机将会查找 BIOS 所指定的硬盘 MBR 引导扇区,将其内容复制到 0x7c00 地址所在的物理内存中。被复制到物理内存的内容是 Boot Loader,然后进行引导。
(3) GRUB 引导
GRUB 启动引导器是计算机启动过程中运行的第一个软件程序,当计算机读取内存中的GRUB 配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。
(4) 加载 Kernel
计算机读取内存映像,并进行解压缩操作,屏幕一般会输出“Uncompressing Linux”的提示,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置在内存之中,并调用 start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux 核心环境的建立。
(5) 设定 Inittab 运行等级
内核加载完毕,会启动 Linux 操作系统第一个守护进程 init,然后通过该进程读取/etc/inittab 文件,/etc/inittab 文件的作用是设定 Linux 的运行等级,Linux 常见运行级别如下:
0:关机模式;
1:单用户模式;
2:无网络支持的多用户模式;
3:字符界面多用户模式;
4:保留,未使用模式;
5:图像界面多用户模式;
6:重新引导系统,重启模式。
(6) 加载 rc.sysinit
读取完运行级别,Linux 系统执行的第一个用户层文件/etc/rc.d/rc.sysinit,该文件功能包括:设定 PATH 运行变量、设定网络配置、启动 swap 分区、设定/proc、系统函数、配置 Selinux等。
(7) 加载内核模块
读取/etc/modules.conf 文件及/etc/modules.d 目录下的文件来加载系统内核模块。该模块文件,可以后期添加或者修改及删除。
(8) 启动运行级别程序
根据之前读取的运行级别,操作系统会运行 rc0.d 到 rc6.d 中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。其中以 S 开头表示系统即将启动的程序,如果以 K开头,则代表停止该服务。S 和 K 后紧跟的
数字为启动顺序编号。
(9) 读取 rc.local 文件
操作系统启动完相应服务之后,会读取执行/etc/rc.d/rc.local 文件,可以将需要开机启动的任务加入到该文件末尾,系统会逐行去执行并启动相应命令。
(10) 执行/bin/login 程序
执行/bin/login 程序,启动到系统登录界面,操作系统等待用户输入用户名和密码,即可登录到 Shell 终端,如图 3-7 所示,输入用户名、密码即可登录 Linux 操作系统,至此 Linux操作系统完整流程启动完毕