CentOS 启动过程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/transformer_WSZ/article/details/88629183

POST(Power on self test)

加电自检:主板在接通电源后,系统首先由POST程序来对内部各个设备进行检查,主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。

BOOT Sequence

当自检通过后,便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器,如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例,BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节),然后执行里面的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行。

MBR(Main Boot Record)

确定引导介质后便开始从介质中装载引导程序如grub2,这个是一个微小程序,我们知道MBR引导记录大小为512字节,其中前446个字节就是Bootloader,主要用来引导用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统控制权移交给内核。

加载内核

  1. 探测可识别到的所有硬件设备。
  2. 加载硬件驱动程序。
  3. 以只读方式挂载根文件系统。kernel在内存中加载时,为了模拟系统环境,会生成一个ramdisk文件,来进行下一步操作,等到加载到真正的根文件系统时,就会退出ramdisk,切换到真正的根文件系统中去。
  4. 运行用户空间的第一个应用 /sbin/init

/sbin/init 初始化系统

sbin/init 进程是系统其他所有进程的父进程,当它接管了系统的控制权之后,它首先会去读取 /etc/inittab 文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等。主要包括以下工作:

  1. 执行系统初始化脚本( /etc/rc.d/rc.sysinit ),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统。

  2. 执行 /etc/rc.d/rc*.d 下的脚本文件。这些文件定义了服务启动的顺序是先K后S,而且都是指向 /etc/rc.d/init.d/ 下相应文件的软链接。rc.sysinit 通过分析 /etc/inittab 文件来确定系统的启动级别,然后才去执行 /etc/rc.d/rc*.d 下的文件。

  3. 执行用户自定义引导程序 /etc/rc.d/rc.local。一般来说,自定义的程序只需要将命令放在rc.local里面就可以了,这个shell脚本就是保留给用户自定义启动内容的。

  4. 完成了系统所有的启动任务后,Linux会启动终端或X-Window来等待用户登录。tty1,tty2,tty3…这表示在运行等级1,2,3,4的时候,都会执行 /sbin/mingetty ,而且执行了6个,所以linux会有6个纯文本终端,mingetty就是启动终端的命令。除了这6个之外还会执行 /etc/X11/prefdm-nodaemon 这个主要启动X-Window。


至此,系统已经启动完毕!


参考自:

猜你喜欢

转载自blog.csdn.net/transformer_WSZ/article/details/88629183