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).