CentOS系统启动流程

来源:互联网 发布:dnf剑宗二觉数据 编辑:程序博客网 时间:2024/06/04 18:07

一、内核控制之前
  1、post加电自检
  2、BIOS启动引导阶段
  2、GRUB启动引导阶段
二、内核控制之后
  1、内核阶段
  2、init初始化阶段

流程图展示

这里写图片描述

相关知识

BIOS是什么???

理解
  BIOS是集成在主板上的一个ROM芯片。当电脑的电源打开,BIOS就会由主板上的闪存(flash memory)运行。BIOS会把自己从闪存中,解压缩到系统的主存;并且从那边开始运行。
作用
  进行硬件设备是否存在的检查。现代的BIOS可以让用户选择由哪个设备引导电脑,如光盘驱动器、硬盘、软盘、USB U盘等等。

ramdisk是什么???

理解
  通过使用软件将RAM模拟当做硬盘来使用的一种技术。RAM读写速度要优于硬盘。

原因
  内核初始化时,需要挂载根文件系统,根文件系统也有不同的文件系统的可能,不同的文件系统也需要不同的文件系统模块,逻辑上,应该把这些可能的根文件系统的驱动都编译进内核,但是这样就违背了内核的精神。所以一般来说驱动/模块都驻留在根文件系统本身上/lib/modules/xxx。现在要挂载根文件系统却需要根文件系统上的模块文件。所以就有了ramdisk

作用实现
  不是系统自己提供的,而是根据系统安装时,根据实际的环境动态生成的,其实现需要程序来实现。把所有可能需要的驱动/模块都放在ramdisk上,首先,让内核将ramdisk当作根文件系统来安装,然后再用这个根文件系统上的驱动来安装真正的根文件系统。

post加电自检

执行者和对象
  由BIOS执行,是BIOS的功能的一个主要部分,主要是对计算机的硬件设备进行检查

实现过程

ROM部分

  保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等内外设硬件情况的检测。

RAM部分

  保存计算机对各项硬件设备参数的设定。

作用
  POST加电自检查看各硬件设备是否存在且实现硬件的初始化后,进行BIOS的启动引导阶段。

BIOS启动引导阶段

作用

  选择引导设备,然后系统读取引导设备的MBR中的数据

实现过程

BOOT Sequence引导加载次序

  选择从哪个设备上加载操作系统,例如光盘或者硬盘或者网络中,这些设备本身是有引导程序bootloader的。第一个有引导程序的设备即为本次启动要用到的设备。

读取MBR

  1)446bytes : 存放着bootloader程序,即现今使用的grub程序。因为446bytes数据比较小,所以,将grub程序分成了三个阶段
  2)64bytes :fat, 存放磁盘分区表
  3)2bytes : 55AA,是bootloader是否有效的标识

启动GRUB程序

  grub程序根据grub的三个阶段执行

  1)stage1 : 作用是寻找磁盘分区表上的第二阶段
  2)stage1.5 :主要作用是为stage1提供可读取stage2的文件系统
  3)stage2 :主要作用是用来存放内核、ramdisk等

GRUB启动引导阶段
  1)stage1 :系统根据BIOS上的设置读取到MBR分区的前446bytes,然后自动识别到其中的bootloader即grub程序,接下来将控制权转交给grub程序;
  **2)stage1.5 :**stage2在磁盘分区之上,因此stage1中的grub程序读取时需要有磁盘分区之上文件系统的文件系统驱动,stage1.2就是用来提供一个基本的文件按系统的驱动的;
  3)stage2 : 位于磁盘分区/boot之上,提供了诸如内核、ramdisk等,当grub程序读取到此阶段内容时,给用户提供一个交互式接口的菜单选项,把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核

内核阶段

作用

1)探测自身可以识别到的硬件设备 - - - - - 内核主要和硬件“打交道“
2)加载硬件驱动程序,硬件驱动程序可能在内核中存在,或者借助于ramdisk加载驱动 - - - - - 内核控制如网卡、声卡等设备硬件,需要有硬件驱动程序才能控制
3)以只读方式挂载根文件系统 - - - - - linux一切皆文件
4)运行用户空间的第一个应用程序:/sbin/init。接下来将控制权转交给init程序。内核阶段结束,init初始化开始

init初始化阶段
当init程序启动时,系统会读取配置文件/etc/inittab

/etc/inittab文件内容
  1、此文件每行定义一类级别,和此级别下的一种action以 及与之对应的process。
  id:runlevels:action:process
  1)id :一个任务的标识符
  2)runlevels : 在哪些级别启动此任务;#,###,也可以为空,表示所有级别;
  3)action : 在什么条件下启动此任务;
  4)sysinit : 设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本;

作用实现

设置默认运行级别

  读取/etc/inittab文件中的第一行,例如 id:3:initdefault:指定运行级别

运行系统初始化脚本,完成系统初始化

  读取第二行,一般为 si::sysinit:/etc/rc.d/rc.sysinit,并读取/etc/rc.d/rc.sysinit文件。/etc/rc.d/rc.sysinit 文件里面定义了例如读取硬盘分区文件/etc/fstab激活交换分区、激活IO设备等

关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务

  读取第三行,并读取对应文件,例如
   l0:0:wait:/etc/rc.d/rc 0
   l1:1:wait:/etc/rc.d/rc 1
   …………
   l6:6:wait:/etc/rc.d/rc 6

  解释:
    1、rc 0 表示读取/etc/rc.d/rc0.d/目录下面的所有文件,且都是链接文件
    2、目录里面的文件要么以K开头,要么以S开头
    3、读取顺序是先读取K*文件,给其传递stop参数,再读取S*文件,给其传递start参数
    4、关闭对应级别下要关闭的服务,启动对应级别下要启动的服务

设置登录终端,打印终端提示符

至此,系统启动流程完毕

原创粉丝点击