关注优麒麟,更多干货等着你!
systemd 文章续集来啦,上期我们介绍了 systemd 的基本概念 ,本期就为大家详细讲解 systemd 相关的运行逻辑,希望能对研究系统资源优化的优客有所帮助。
systemd 时代的开机启动流程
在 systemd 作为系统的 init 程序的时代下,Linux 系统的启动流程可以大致分为 6 个阶段:BIOS 自检阶段、GRUB 引导阶段、kernel 内核加载阶段、initrd 虚拟根文件系统阶段、systemd 初始化阶段、终端登录阶段。每个阶段都各司其职,为下一个阶段的进行做铺垫,相互联系,缺一不可。接下来对每个阶段做一下介绍:
1
BIOS 自检阶段
从我们启动计算机从按下电源键开始,计算机开始通电,然后系统就开始加载主板内存上的第一段代码:BIOS,系统进入 BIOS 自检阶段。
BIOS 为基本输入输出系统,全称 Basic Input Output System,它烧录在主板的内存上,其中的内容只能读不能改,如果要进行更改只能重新烧录到主板的内存上。BIOS 在开机阶段最主要的功能为上电自检,它会对主板上接入的硬件设备一个个进行检查,例如检查 CPU、主板、内存、软硬盘系统、键盘、光驱等等硬件是否接入正常,有无故障,当某一些主要的硬件(例如 CPU、内存等)出现问题时,BIOS 就会报错,无法继续启动系统。我们在启动电脑时听到的滴滴的声音就是 BIOS 蜂鸣器发出的声音,当硬件出问题的时候就可以听到它蜂鸣器响两到三声报错,系统就无法进行下一步的启动。
BIOS 检查完所有硬件状态并状态无误的时候,就会按照设置的启动顺序去找相应的启动盘,然后引导系统进入相应的启动盘继续启动系统。有过刷机经验的朋友应该知道在系统启动时按 F12 或者 delete 键就会进入 BIOS 界面,然后就会去选择相应的启动盘进行刷机,启动盘可以是装机 U 盘、光驱,也可以是已经装了系统的磁盘等等,BIOS 可以设置默认的启动顺序,例如:可以设置 U 盘为第一启动项,开机启动时 BIOS 就会引导系统去找 U 盘对应的硬件接口,当找不到 U 盘时,BIOS 会继续尝试第二启动项,当选择好了启动项时,系统进入相应的启动盘,并开始执行启动盘中第一块磁盘第一个扇区的代码,至此 BIOS 自检阶段结束。
2
GRUB 引导阶段
GRUB 是 GRand Unified Bootloader 的缩写,它是一个多重操作系统的管理器,存放在第一个磁盘的第一个扇区的主引导扇区里面,如果你的电脑里面装了多个系统,例如 Linux 系统和 Windows 系统,那么你可以通过 GRUB 来移动光标选择自己想要进入的系统,选择好系统以后 GRUB 就会根据系统分区表里找到对应系统所在的磁盘分区,加载相应的 grub.cfg 配置文件,通过配置文件,加载 /boot 分区的文件系统驱动,然后在文件系统中找到系统内核,把内核加载进来并启动,最后把系统的控制权交给内核,至此 GRUB 引导阶段结束。
GRUB 除了引导系统这一主要功能外,还可以通过 grub.cfg 配置文件来实现其他的一些功能。grub.cfg 配置文件存放在 /boot/grub/目录下,配置文件中,Linux 参数表示系统启动时对应加载的内核,当系统里存放了多个内核、或者在你电脑上重新修改编译了新的内核的时候,可以配置此项来选择相应的内核进行加载;quiet 参数类似于 loglevel 参数,用来配置日志启动的等级;splash 参数用来配置相应的启动动画等等。
3
Kernel 内核加载阶段
在讲解内核的启动之前,先简单介绍一下 Linux 内核。Linux 内核是一种宏内核,运行在单一地址空间的单一的程序,把系统的进程线程管理、内存管理、文件系统、驱动管理、网络管理等一些基本功能集