Linux启动进程
描述Linux系统启动的整个过程
Linux启动进程是启动Linux时执行的一个复杂的初始化过程。它在很多方面类似于BSD系统和别的类Unix系统的启动过程。[1][2]
启动Linux系统涉及到很多阶段,包括硬件初始化(如BIOS或UEFI)、执行启动程序(如GRUB、SYSLINUX)、加载和启动Linux内核镜像,执行init(如Systemd)和执行守护进程。
概述
- BIOS/UEFI针对实际的硬件平台执行硬件初始化任务。
- 由启动程序加载initrd/initramfs,并由启动程序加载Linux核心。
- 内核将配置系统功能,譬如配置硬件,称为start_kernel(),这会执行大部分系统配置(中断、内存管理、设备和驱动程序初始化等)。然后它分别启动内存管理进程、init进程等在用户空间执行的进程。
- Init有特定的运行级别(System V)或目标(Systemd),每个运行级别或目标都是由特定的一组服务(守护进程)组成。
- 一个典型的桌面环境从X显示管理器开始初始化,X显示管理器显示登录画面,成功登录后由X显示管理器启动桌面环境(如GNOME、KDE)。
关机时,init会结束所有用户空间进程。init随后终止,内核自行关闭。
启动加载程序阶段
x86和x86-64平台由BIOS或UEFI固件初始化硬件,并由BIOS/UEFI加载启动程序。由启动程序加载Linux核心和initrd。常见的启动程序有:
内核阶段
Linux内核处理所有操作系统进程,如内存管理、任务调度、I/O、进程间通信和系统总体控制。这分为两个阶段 :
首先,内核被加载到内存中,并且建立了一些基本的功能,如基本内存管理。
内核会查找并执行init进程。
initramfs
initramfs自Linux内核的2.5.46版本开始加入这个概念,initramfs取代了initrd。早期用户空间的典型用途是检测需要哪些设备驱动程序来加载主用户空间文件系统,并从临时文件系统加载它们。[3]
init进程
init是Linux的根进程。进程号为1,它是所有进程的父进程。现时绝大多数Linux发行版都采用Systemd。
System V init
Upstart init
Systemd init
参考资料
- ^ Linux 引导过程内幕. www.ibm.com. 2006-07-26 [2017-06-29]. (原始内容存档于2016-09-13) (中文(中国大陆)).
- ^ 13.3. 引导管理器和各引导阶段. www.freebsd.org. [2017-06-29]. (原始内容存档于2020-11-23).
- ^ About initramfs. www.linuxfromscratch.org. [2017-06-29]. (原始内容存档于2021-01-26).