CentOS系统启动流程(二)

来源:互联网 发布:淘宝上卖符咒 编辑:程序博客网 时间:2024/05/16 08:19

一、系统启动流程
1、POST加电自检

    ROM:CMOS(Complementary Metal Oxide Semiconductor),互补金属氧化物半导体,是组成CMOS数字集成电路的基本单元。    通过BIOS程序检测硬件设备是否正常工作。

2、BOOT sequence 引导加载次序

    按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到的设备。

3、BootLoader 引导加载器
(1)作用

    提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权转交给kernel。

(2)组成

          |-- MBR                446bitsBootLoader|--分区表               64bits          |--标识符(55AA)        2bits

(3)grub
(a)组成结构
这里写图片描述
(2)stage2功能:
(a)提供菜单、并提交互式接口

e:编辑模式,用于编辑菜单c:命令模式,交互式接口

(b)加载用户选择的内核或操作系统

允许传递参数给内核,可隐藏菜单

(c)为菜单提供了保护机制

为编辑菜单进行认证,为启用内核或操作系统进行认证

4、Kernel
(1)操作系统第一加载根时只读方式挂载,而不是可读可写挂载,避免内核启动时被修改。
(2)自身初始化:探测可识别的硬件设备;
(3)加载硬件驱动程序:这里就利用到了我们之间说的initramdisk文件,起到一个桥梁作用。
(4)运行用户空间中的第一个应用程序/sbin/init
(5)运行/etc/inittab文件

(a)每一行定义一种action以及与之对应的process

格式:id:runlevel:action:process runlevel运行级别:    0:关闭    1:单用户模式    2:多用户模式,会启动网络功能,不会启动网络文件系统,维护模式    3:多用户模式,正常模式,文本界面    4:预留级别    5:多用户模式,正常模式,图形界面action类别:    wait:切换此级别运行一次    respawn:此process终止,重新启动    initdefault:设定默认运行级别;    sysinit:完成系统初始化,此处一般为/etc/rc.d/rc.sysinit文件    默认级别为3或5级别。

(6)运行系统初始化脚本

(1)设置主机名(2)设置欢迎信息(3)激活udev和selinux(4)挂载/etc/fstab文件中定义的文件系统(5)检测根文件系统,并以读写方式重新挂载根文件系统(6)设置系统时钟(7)激活swap设备(8)根据/etc/sysctl.conf文件设置内核参数(9)激活lvm及sofaware raid 设备(10)加载额外设备的驱动程序(11)清理操作

(7)启动或关闭服务
(a)在/etc/rc.d目录下有指定运行级别启用或关闭的文件。rc0目录下的文件意味着读取/etc/rc.d/rc0.d下面的文件

K*: stop运行次序,数字越小,越先运行;数字越小的服务,通常为依赖到别的服务;S*: start运行次序,数字越小,越先运行;数字越小的服务,通常为被依赖到别的服务;文件中三个 “-” 分别为 “默认级别,对S开头的文件有效” “S开头文件的运行次序” “K开头的运行次序”。

(b)在运行级别/etc/rc.d/rc{2,3,4,5}.d目录下有一个特殊文件S99local,这个文件是脚本。此文件是一个连接文件

/etc/rc.d/rc3.d/S99.local-->/etc/rc.d/rc.local-->/etc/rc.local

正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个脚本,而是指向了/etc/rc.d/rc.local脚本中;因此,如果不便或不需要写为服务脚本防止/etc/rc.d/init.d/目录下,且又想开机自动运行的命令,可直接防止与/etc/rc.d/rc.local文件中。

(8)运行/usr/sbin/mingetty启动终端

小结
POST–>boot sequence(BIOS)–>bootloader(MBR)–>Kernel(initramdisk)–>rootfs–>/sbin/init(运行第一个服务进程)–>/etc/init(定义系统初始化文件,并定义系统启动级别)–>/etc/rc.d/sysint (系统初始化脚本,完成系统初始化)–>/etc/rc.d/rc#.d/(开启或关闭需要的服务)–>/etc/mingetty(设置终端)–>完成