从按下PC的POWER开始到用户看到登陆界面发生了什么?
 
概括的说:初始化BIOS--》载入启动加载器--》载入内核--》启动init服务
 
1.初始化BIOS
BIOS在所有OS的作用都大同小异
1.1 检测外围设备是否正常可被识别 //目的在于之后将这些外围设备信息提供给OS,所谓的加电自检(POST)
1.2 寻找启动磁盘 //BIOS会按照bios选单里定义的顺序去寻找可能存放OS的boot disk
 
2.载入启动加载器(boot loader)
BIOS要开始找OS了,但是去×××?
2.1 磁盘的第一个扇区(512字节),这个扇区就是主引导记录(MBR) 啦,找找有没OS,没有进行2.2
2.2 上面如果没找到,到磁盘中标记为启动分区(boot partition)的第一个扇区找OS
但是很悲剧,不管是在MBR还是boot partition找到的第一个扇区,都只有前446字节来给你存OS,OS没那么小的,所以写个小程序来告诉BIOS:我的OS不在这里啦,而是放在其他的某个位置,这个小程序就是GRUB了
 
3.载入内核(kernel)
BIOS按照GRUB的描述去找到了kernel,把kernel启动了,然后kernel活跃了起来:
3.1 向BIOS接手所有外围设备信息
3.2 使用编译在内核镜像文件中的静态驱动程序来仅驱动必要的硬件设备
3.3 以只读方式来挂载根文件系统 //目的在于安装适当的内核模块以便驱动其他的硬件设备以及启动存储在根文件系统上的init服务,至于ro挂载是因为系统还不稳定
3.4 启动init服务 //去×××init服务 顺序:/sbin/init -->/etc/init -->/bin/init --> /bin/sh 如果都失败 kernel panic not syncing:attempted to kill init!  如果顺利找到init,就让他负责后续初始化系统环境的任务了。
 
4.启动init服务 //启动init的目的是为了初始化系统环境
4.1 查看 /etc/inittab 文件 //该文件规定了必须执行RC脚本和runlevel等等信息
4.2 /etc/rc.d/rc.sysinit   //建立基本环境 如:udev selinux 内核参数 系统时间 键盘 swap hostname 检查并重新挂载所有FS为rw 初始化硬件设备 启动软RAID、LVM、quota 卸载/initrd  初始化串行端口设备 清除过期的锁定文件 重设磁盘参数
4.3 /etc/rc.d/rc   //建立runlevel环境 按/etc/rc.d/rcX.d(X为runlevel) 定义的顺序去一个个 kill 和 start 服务
4.4 /etc/rc.d/rc.local   //最后一个RC脚本,可以用来自定义你需要系统启动后做的事
4.5 /sbin/mingetty   //建立用户接口,启用6个vty 在inittab 定义了12个console,默认1-6可以登入CLI,X使用tty7登入
至此,你看到登陆的画面后,RHEL已经跑完了所有启动流程。