Appearance
Linux 启动过程
Linux 启动并不复杂,可以分为几个主要步骤。以 Ubuntu 为例。
1. BIOS / UEFI 启动
计算机开机后,BIOS 或 UEFI 会进行硬件自检,检查并加载系统。在这之后,操作系统接管控制权,继续加载内核。
2. 内核引导
在 Ubuntu 系统中,内核存储在 /boot
目录下。启动时,内核从引导分区加载到内存,接管硬件控制。此时,操作系统准备开始启动。
3. init
进程
内核加载完成后,控制权转交给 init
进程,它是系统中所有其他进程的起点。Ubuntu 使用 systemd
作为初始化系统,因此 init
进程由 systemd
替代,成为 PID 1 进程。systemd
会启动所有需要的服务和守护进程。
4. 系统初始化
systemd
负责读取 /etc/systemd/system/
和 /lib/systemd/system/
目录下的单元文件(.service 文件),并根据这些文件并行启动系统服务。常见的初始化任务包括:
- 激活交换分区(swap)。
- 检查文件系统。
- 启动硬件驱动程序。
- 启动网络服务、日志服务等。
5. 运行级别(Targets)
Ubuntu 使用 systemd
的目标(targets)来替代传统的运行级别。常见的目标包括:
bash
# 在 Ubuntu 中,init 0-6 传统运行级别被 systemd targets取代。
systemctl isolate multi-user.target 进入多用户模式。
systemctl isolate graphical.target 进入图形界面模式。
systemctl reboot 重启系统。
systemctl poweroff 关闭系统。
6. 登录终端
当系统初始化完成后,Ubuntu 会启动一个或多个终端。对于图形界面模式,用户会看到图形化登录界面;对于命令行模式,用户会看到一个文本登录界面。
在命令行模式下,mingetty
程序会提供 6 个终端,允许用户登录:
tty1
到tty6
。- 用户可以使用
Ctrl + Alt + F1~F6
切换到不同的终端。
+------------------+
| Power On |
| BIOS/UEFI |
| Check Hardware |
+--------+---------+
|
v
+------------------+
| Boot Loader |
| GRUB |
| Load Kernel |
+--------+---------+
|
v
+------------------+
| Kernel |
| Ubuntu Kernel |
| Start Kernel |
+--------+---------+
|
v
+------------------+
| Init |
| systemd |
| Manage Services |
+--------+---------+
|
v
+------------------+
| Runlevel |
| multi-user |
| graphical |
| Load Services |
+--------+---------+
|
v
+------------------+
| Login |
| User Login |
| Get User Input |
+------------------+