linux系统启动的过程 :

linux系统启动时到底发生了什么_文件系统

如下图演示了系统启动时所经历的步骤:

linux系统启动时到底发生了什么_加载_02

第一步:BOIS自检

该过程主要功能是完成硬件的初始化,包括显示器、键盘以及主存储器(内存),如果这步有问题的话,你的PC是开不了机的,说明你需要好好检查下你的硬件设备了。

BOIS软件存储在主板上的ROM芯片上,在此之后,引导过程的其余部分完全由操作系统控制。

linux系统启动时到底发生了什么_加载_03

第二步:引导加载程序

一旦BOIS自检完成,系统控制由BOIS转变为引导加载程序。引导加载程序通常存储在系统中的一个硬盘上,或者引导扇区上(对于传统的BOIS系统/MBR系统)。在此阶段,机器不能访问任何大型存储设别。对于日期、时间和最重要的外设的信息是从CMOS中加载的。

对于Linux中的引导加载程序,最常见的是GRUB(for GRand Unified Boot loader)和ISOLINUX(for booting from removable media)。大多数Linux引导加载程序可以提供一个用户界面,用于选择引导Linux的其他选项,甚至可能安装其他的操作系统。在引导Linux时,引导加载程序负责加载内核映像和初始化RAM(其中包含启动系统所需)的一些关键文件和设备驱动程序)到内存中。

linux系统启动时到底发生了什么_文件系统_04


引导加载程序包括两个不同的阶段:

第一阶段:

对于使用BOIS/MBR方法的系统,引导加载程序常驻在硬盘的第一个扇区中,也叫主引导记录(MBR),其中MBR的大小为512字节。在这个阶段,引导加载程序检查分区表并找到一个可引导的分区,一旦找到该分区,它就会搜索第二个阶段引导加载程序。例如:GRUB,并将其加载到内存中。

第二阶段:

引导加载程序驻留在/boot下,接着出现一个闪屏,它允许我们选择启动那个操作系统。在选择操作系统后,引导加载程序将所选操作系统的内核加载到内存中。

引导加载程序所选的内核映像,并将控制权给它。由于内核是被压缩过的,所以首要任务就是先进行内核解压。在此之后,检查和分析系统硬件并初始化内核中内置的硬件设备驱动程序。

linux系统启动时到底发生了什么_文件系统_05

第三步:

引导加载程序将内核和一个初始的基于RAM的文件系统(initramfs)加载到内存中,这样它就可以直接被内核使用了。

当内核加载到RAM中时,它会立即初始化和配置计算机的内存,并配置与系统相关的所有硬件,包括处理器、输入/输出子系统、存储设备等。同时内核还加载了一些必要的用户空间应用程序。

linux系统启动时到底发生了什么_文件系统_06

第四步:初始化RAM磁盘

initramfs文件系统映像包含程序和二进制文件,这些需要挂载到合适的根文件系统,提供内核功能所需的文件系统和设备驱动程序为大容量存储控制器与udev设备负责找出它们运行需要的设备,定位正常工作所需的驱动程序,并加载它们。在找到根文件系统之后,检查错误并挂载。

mount程序指示文件系统准备好使用的操作系统,并将其与文件系统的总体层次结构中的特定点关联起来。如果成功了,就会从RAM中清除initramfs,并执行根文件系统(/sbin/init)上的init程序。

init程序处理安装和转向最终的实际根文件系统。如果在访问大规模存储设备之前需要特殊的硬件驱动程序,那么它们必须在initramfs映像中。

linux系统启动时到底发生了什么_初始化_07

第五步:/sbin/init 和服务

一旦内核建部署到硬件并且挂载到根文件系统,内核就会运行/sbin/init程序。接着进入初始化过程,然后启动其他进程来让系统运行。

除了启动系统之外,init还负责保持系统的运行和彻底关闭系统。它充当了所有非内核进程的“最后的管理者”,在必要时清理它们,并在用户登录和退出时重新启动用户登录服务。

linux系统启动时到底发生了什么_文件系统_08

第六步:登陆

在引导过程结束后,init启动文本模式的登录提示(由一个名为getty的程序完成),接着输入你的用户名和密码,最终获得一个shell。

一般情况下,默认的shell是bash,但是还有其他的shell供你使用。shell打印一个文本提示符,这表示shell已经准备好接受命令,在用户输入命令并按下【Enter】之后,命令将会执行,执行结束后将显示另一个提示符。

linux系统启动时到底发生了什么_文件系统_09

第七步:X Window系统

通常,在Linux桌面系统中,X Window System作为引导过程的最后一步被加载。

linux系统启动时到底发生了什么_文件系统_10