现在的位置: 首页 > 综合 > 正文

linux启动流程概述

2013年10月07日 ⁄ 综合 ⁄ 共 1774字 ⁄ 字号 评论关闭

参考:《鸟哥的linux私房菜》

1、BIOS阶段

主板上的BIOS为块flash或EEPROM程序,他会从主板上的CMOS硬件资讯,这些硬件资讯是可以通过BIOS程序修改。、、

BIOS进行启动自我测试(Power-on self test,POST),然后开始运行硬件侦测的初始化,并配置PnP装置,之后定义出可启动装置。即

根据BIOS中设置的启动目标装置(硬盘还是U盘还是光盘),进入阶段2

2、boot loader阶段

读取并运行配置的第一个启动装置中MBR去的的Boot loader(即grub,spfdisk等程序),由于每个文件系统(filesystem和分割槽并不等价,参见鸟哥的linxu私房菜)第一个扇区为启动扇区(boot sector)(512bytes),而启动扇区中包含MBR(446bytes)和分割表(partition table)(64byte),由于MBR大小的限制,例如grub
的配置文件就只能放在MBR之外的地方了。

boot loader转移控制权给kernel

3、kernel阶段

核心解压缩到主存当中,并开始测试与驱动各个周边装置,而不一定会使用IBISO侦测到的硬件资讯。

/boot分区的挂载是通过BIOS实现,当控制权交给boot loader,由于kernel在/boot分区中,可以直接挂载,但kernel需要动态加载核心模块(可以理解为驱动程序),而核心某块一般在/目录中,而/目录的分区还没有挂载,但此时核心是没法识别硬盘的,这就需要虚拟文件系统(Inital RAM Disk,initrd)来帮助加载核心模块。

而虚拟文件系统同样是位于/boot,是透过BIOS加载的,等解压缩到内存中,会模拟根目录,并提供一只可运行的程序来加载核心模块。

4、init程序阶段

linux核心初始化各种硬件以后,linux计入保护模式(protected mode)加载操作系统,然后初始化各种核心数据结构像i-node和文件表(file tables)等,这个进程PID为0

它创建init进程(PID为1),即执行/sbin/init程序(一只可执行程序),

init的处理流程的配置在/etc/inittab文件中(不过在Fedora15中性的启动方式systemd启动被使用,不再使用下面的/etc/inittab文件,关于systemd参考这里)

关于/etc/inittab文件的配置参见

鸟哥的linux私房菜,该文件配置了是否默认runlevel,以及该级别需要运行哪些程序,以及图形终端是否打开,tty情况等。

runlevel(来自鸟哥的linux私房菜):

  • 0 - halt (系统直接关机)
  • 1 - single user mode (单人维护模式,用在系统出问题时的维护)
  • 2 - Multi-user, without NFS (类似底下的 runlevel 3,但无 NFS 服务)
  • 3 - Full multi-user mode (完整含有网络功能的纯文字模式)
  • 4 - unused (系统保留功能)
  • 5 - X11 (与 runlevel 3 类似,但加载使用 X Window)
  • 6 - reboot (重新启动)

  • init 的处理流程

事实上 /etc/inittab 的配置也有点类似 shell script 啦,因为该文件内容的配置也是一行一行的从上往下处理的, 因此我们可以知道 CentOS 的 init 依据 inittab 配置的处理流程会是:

  1. 先取得 runlevel 亦即默认运行等级的相关等级 (以鸟哥的测试机为例,为 5 号);
  2. 使用 /etc/rc.d/rc.sysinit 进行系统初始化
  3. 由於 runlevel 是 5 ,因此只进行『l5:5:wait:/etc/rc.d/rc 5』,其他行则略过
  4. 配置好 [ctrl]+[alt]+[del] 这组的组合键功能
  5. 配置不断电系统的 pf, pr 两种机制;
  6. 启动 mingetty 的六个终端机 (tty1 ~ tty6)
  7. 最终以 /etc/X11/perfdm -nodaemon 启动图形介面啦
这里每个过程更进一步的细节,请参考鸟哥的linux私房菜

5、登录过程

在login提示符下,按下<Enter>,gettry进程创建一个子进程(名字是你输入的登录名),提示输入密码并验证。如果正确,则该子进程再创建一个子进程(它将转变成你的登录shell);如果验证失败,该子进程终止,控制权重新回到getty.

抱歉!评论已关闭.