内容来自实验楼
启动顺序
Linux 启动过程主要包括以下 4 个步骤:
1.BIOS 自检:计算机加电后,系统将自动读取 BIOS 中的硬件信息(如:显卡、内存、主板、CPU 等)。然后查找启动设备并设置优先级。接着系统开始自检(POST,power on selftest),若有问题会给出提示信息,没有问题就启动执行硬件初始化,并设置 PnP (Plug-and-Play,即插即用)设备。最后启动驻留在硬盘主引导记录 MBR (MasterBoot Record,主引导分区)中的引导程序 GRUB 或 lilo。
2.GRUB/lilo 引导启动程序:用户通过 GRUB 或 lilo 引导加载程序启动 Linux 系统。引导程序只是将控制权交给内核,此时操作系统并未装入内存。其中,ubuntu 默认 GRUB 为引导加载程序。
3.装载 Linux 内核:最初的引导过程完成后,引导程序开始加载 Linux 内核。ubuntu 的 Linux 内核在 /boot 目录下。
4.系统初始化:Ubuntu 采用的是基于事件的启动管理器 —— Upstart,主要包括 3 个程序(init、telinit、runlevel)和相应配置文件目录(/etc/init、/etc/rcN.d、/etc/init.d)组成。系统内核首先会启动 init 进程,读取并运行 /etc/init 目录下的启动配置文件,init 启动任务时会读取默认的运行等级(runlevel),然后将结果传递给 upstart 的下一个组件 telinit 中。telinit 通过比较当前 runlevel 与将要进入的 runlevel 之间运行服务的不同,关闭不需要的服务项,启动目前未运行的服务,从而实现系统状态的转换。
初始化阶段完成后,系统就可以准备接受用户登录。
bios :接管主板所有自检工作,掌握系统的启动,部件之间的兼容和程序管理等多项任务。连接软件与硬件设备的“桥梁”。
boot loader :grub 实际上是一个 boot loader,开机管理程序可以指定使用哪个核心文件来开机,并实际载入核心(kernel)到内存当中解压缩与执行, 此时核心就能够开始在内存内活动,并侦测所有硬件信息与载入适当的驱动程序来使整部主机开始运行。
init 进程:系统开始的第一个工作,它是其他所有进程的父进程,一直处在运行状态,并且进程 id 号永远是第一个。作用是读取初始化脚本,完成系统相关管理任务。