Linux启动过程概述

目录
  1. 1. 内核级别启动过程
  2. 2. 用户空间启动过程
    1. 2.1 System V init
    2. 2.2 Upstart
    3. 2.3 Systemd

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/http://andyyoung01.16mb.com/

了解Linux系统如何启动对于理解Linux如何运转是非常有帮助的,本文就来了解一下Linux的启动过程。

1. 内核级别启动过程

先借用一个启动的流程图:
“kernel_boot”
上图的大致过程如下:

  1. 通电后,寄存器reset,CPU跳转到BIOS(Basic Input/Output System)代码处开始执行
  2. BIOS进行POST(Power-On Self-Test, 硬件自检),初始化硬件
  3. BIOS查找引导设备
  4. BIOS引导程序读取位于该设备第一个扇区(512bytes)的主引导记录(MBR,Master boot record)到内存中,加载并将控制权转交给bootloader,加载kernel
  5. kernel自身初始化
  6. 挂载Rootfs
  7. 启动userspace程序(可以是init,upstart或systemd)

随着计算机软硬件的发展,传统的PC BIOS的局限性显现出来,于是其替代产品Unified Extensible Firmware Interface(UEFI)便开发出来。GPT的分区格式也是UEFI标准的一部分。通过UEFI搭配GPT进行启动的过程与传统BIOS搭配MBR是有区别的。详细信息可以参考鸟哥BIOS与UEFI开机检测程序

2. 用户空间启动过程

在内核级别启动过程的最后(上图的最后一步),kernel会初始化一个pid为1的init进程,它根据配置文件启动其它进程。在不同的Linux发行版当中,主要有三个不同的init的实现,分别为:

  • System V init
  • Upstart
  • Systemd

下面分别来看一下各个不同实现的启动过程。

2.1 System V init

“Classic SysV init启动过程”

2.2 Upstart

“Upstart init启动过程”

2.3 Systemd

Systmed init启动过程”

本篇对于Linux的启动过程进行了一个概略。首先从硬件部分来看,分为两种:一种是传统的BIOS搭配MBR方式,另一种是较新的UEFI搭配GPT方式。其次,在进入用户空间后,根据不同的init实现方式,分为System V init,Upstart以及Systemd等。各个方式的详细信息请参考相关文档。