操作系统 是如何启动的,这可能一直困扰着我们。本文将详细讲解 Linux 系统的启动过程,这将有助于大家加深入了解操作系统。
Linux 系统启动分为如下三个阶段:
- BIOS 阶段
- Boot Loader 阶段
- Kernel 阶段
图.1 Linux 系统启动流程图
1] BIOS 阶段
- 当主机通电后,首先会调用 BIOS 程序以验证主机所有硬件是否工作正常
- 硬件验证功能是通过执行开机自检(POST)来完成的
- 硬件测试通过后,BIOS 会检查硬件中的主引导记录(MBR),以检查是否指明了启动加载程序(Boot Loader)的位置
图.2 Linux 系统启动流程 BIOS阶段
2] Boot Loader 阶段
如果系统安装了操作系统,则会安装相应的 Boot Loader 程序。
两种常见的 Boot Loader 程序为:
- LILO(Linux Loader)
- GRUB(Grand Unified Boot Loader)
- Boot Loader 将向用户显示一个菜单条目,每个条目对应不同的操作系统
- 然后,Boot Loader 根据菜单项内容引导操作系统启动
- 如果选择启动 Linux 系统,则 Boot Loader 会将 Kernel 程序解压到内存中
- 之后,Kernel 程序会显示创建 initrd(初始 Ramdisk)
- Kernel 将 initrd 用作内存中的临时文件系统
- initrd 包含一些工具和内核模块,它们将继续操作引导过程,这包括挂载临时虚拟根文件系统
- 一些 Linux 系统使用 initramfs 来代替 initrd,它与initrd的功能相同
- 成功之后,将运行 linuxrc,它是一个可执行文件,用于探测大容量存储硬件并找到合适的内核模块来驱动它们
- 这个过程是 Kernel 挂载真正的根文件系统所必须的
图.3 Linux 系统启动流程 Boot Loader 阶段
3] Kernel 阶段
- 在 Kernel 阶段,Kernel根据 linuxrc 的结果来挂载真正的文件系统
- 实际根文件系统指的是”/”,Linux 系统的所有其它文件系统均存在于根系统之下
- 之后,Kernel 程序将启动 init 进程,并将此进程标识符(PID)设置为1,因为它是内核启动的第一个后台守护进程,所有其它后台守护进程都是由 init 进程生成的
- 之后,init 进程根据不同运行级别,配置和加载其它系统守护进程,
- 全部后台进程都启动完成后,Linux 系统也就启动成功了