在linux学习过程当中, 咱们绝大数时间都用来去学习命令的使用或则是服务的搭建, 由于这些操做性的东西会让咱们有一种成就感, 而不多有同窗去学习底层的一些东西, 好比说操做系统, 其实任何一门技术当你学到必定高度的时候,你就会发现,很难再往上爬, 其中一个很大的缘由就是基础知识的掌握不牢固。 写这段话,告诫本身与他人, 你可能会用你的一辈子去学习一门技术,长路漫漫, 何不从一开始就把基础打好。 linux
废话就很少说了, 下面介绍rhel6系统的启动流程.
c#
下面是centos6系统的启动流程图:centos
下面具体分析每一个步骤的过程:ide
1>.POST 加电自检学习
加电自检是BIOS 功能的一个主要部分 。负责完成对CPU 、主板、内存 、硬盘子系统、显示子系统、 串并行接口、键盘、CD-ROM 光驱等硬件状况的检测 spa
2>.选择启动项操作系统
经过BIOS, 选择系统引导的设备, 好比光盘、USB、磁盘。接口
3>.(以MBR分区的磁盘引导为例)MBR引导:进程
0磁盘0扇区的前446bytes, 存放的是bootloader引导程序。图片
446bytes显然过小了, 要想利用这446bytes作一个启动项显然有点困难, 为了解决这个问题, Linux将Boot Loader的程序运行与配置项加载分红三个阶段来运行:
stage1: 运行Boot Loader主程序, 这个程序必须被安装在启动区, 即MBR中。由于MBR空间有限, 所以在MBR当中仅安装Boot Loader的最小主程序, 并无安装Boot Loader的相关配置文件。
stage1.5: 在MBR随后的扇区中存放,主要用于与stage2所在分区的文件系统进行交互。
stage2: 经过Boot Loader加载全部配置文件及相关的坏境参数信息, 这些配置文件及相关的坏境参数都存放于磁盘分区上的/boot目录下。
4>. 通过bootloader引导程序只是将核心内核文件vmlinuz-2.6.32-642.el6.x86_64加载起来, 把系统控制权移交给内核。
5>. 加载/usr/modules下模块驱动和挂载真正的/文件系统
想要加载/文件系统, 首先要加载/分区的驱动程序,而/分区的驱动程序却在/lib/modules/中,而/lib/modules这个目录却在/下, 显然没法去加载/lib/modules中的模块程序, 这时就须要ramdisk这个虚拟的/文件系统, 这个虚拟的/文件系统是在你安装操做系统内的时候, 系统会自动检测出你的磁盘驱动,建立一个虚拟的/文件系统中去。内核启动后, 首先会将虚拟的根文件系统加载起来, 经过虚拟根文件系统,去加载/lib/modules中的模块程序。将这些模块程序加载起来后, 真正的/系统就能够挂载起来了, 这时虚拟的/文件系统ramdisk退出系统了。
6>.启动init进程读取/etc/inittab文件和/etc/init/*.conf文件
a>. 使用/etc/rc.d/rc.sysinit初始化脚本
b>. 执行/etc/rc.d/rc脚本, 会自动加载/etc/rc#.d/下的全部脚本, #号为默认级别。#号为默认级别。
c>.执行/etc/rc.d/rc.local脚本
d>.执行/bin/login程序,进入登陆状态。
rhel5的启动其实和rhel6差很少。 原理上都是这个样子的,可是仍是有稍许的不一样,好比在rhel5中,只去执行/etc/inittab的命令就OK了,而在rhel6中,将/etc/inittab分布在/etc/inittab和/etc/init.d/目录下。
rhel7的启动和rhel五、6能够说是发生了很大的变化,可是整个启动的思想仍是能够参考rhel6的启动过程。