系统启动流程:
POST-->BIOS(Boot Sequence)--> BootLoader(MBR)--> Kernel(initrd,initramfs)--> init (/etc/inittab)
1、家电自检:POST(PowerOnSelfTest)
先载入一段程序,系统刚刚启动时,能自动将某段rom中的程序映射到cpu可以寻址到的空间中去,并且让cpu可以执行其中的指令。这些指令是为了完成系统检测的。如果系统的基本硬件,核心硬件没有问题的话,将进入下一步骤。
注:BIOS:系统首先由POST(PowerOnSelfTest,上电自检)程序来对内部各个设备进行检查;自检后,就首先按照系统CMOS设置中保存的启动顺序搜寻软硬盘驱动器及CD—ROM、网络服务器等有效地启动驱动器,读入操作系统引导记录,然后将系统控制权交给引导记录,并由引导记录来完成系统的顺利启动。
2、BIOS
根据BIOS中所设定的系统启用流程去找对应设备的上的MBR,我们将这个启动次序叫做(Boot Sequence)
3、MRB(BootLoader)
根据以上面的引导次序去逐个的找对应的存储设备上的MBR,如果MBR存在的话,则会去读取MBR中的BootLoader,BootLoader是一段程序,在其中配置了所要引导的操作系统的内核的位子,因此,BIOS被载入内存以后,然后其将控制权限交给BootLoader以后,BootLoader就接收了整个系统的控制权限,因此其就根据用户的选择去读取相应操作系统的内核,将内核装载进内存中合适的位子,解压缩并完成内核初始化以后,接下来BootLoader会将控制权限转交给内核。
注:
硬盘主引导记录MBR(MasterBootRecord):位于硬盘0磁道0柱面1扇区,该扇区共512bytes,其中MBR占446bytes ;MBR所做的唯一的事情就是装载第二引导装载程序。
分区表DPT(Disk Partition Table)占64bytes;
硬盘有效标志(Magic Number)占2bytes;
4、Kernel(initrd,initramfs)
内核初始化:
注:内核:模块化设计,大部分设备模块是在需要时加载驱动,并且大部分模块的驱动放置于根分区上。
硬件探测
装载驱动
--驱动可能在内核中 也可能在initrd中。红帽5中叫做initrd,红帽6中叫做initramfs.其中存储着内核所依赖的额外的驱动,比如ext3,也就是根文件系统。比如一些驱动在根文件系统中,但是内核中没有装载读取根文件系统的驱动,那么就是initrd的作用了,它首先给内核提供基本驱动去读取根文件系统。等内核丰满以后,在逐渐失去其作用。
挂载根文件系统
启动用户控件中的第一个进程init
5、执行init(/etc/inittab)
注:在红帽6中,init程序变为了upstart,其为项名称,为了兼容名字依然为init,它的配置文件在/etc/inittab与/etc/init/*.conf
inittab配置文件的设定
设定默认运行级别
系统初始化脚本(/etc/rc.d/rc/sysinit)
运行指定级别的服务脚本
/etc/rc.d/init.d/都链接到/etc/rc.d/rc#.d
init.d中的脚本都是连接的,连接的名字比较独特
K* S* 表示执行次序--数字越小越先被执行
checkconfig帮助创建这些链接
如3级别下启动,先运行rc3.d里面的以K98*开头的服务,然后其会去rc.d/init.d里面通过checkconfig来找脚本中98启动级别的脚本来运行。如果脚本中有'. /etc/rc.d/init.d/functions'来读取functions中的格式--定义显示ok fauled格式
注:
rcN;表示用rc脚本去运行rcN.d目录下的脚本;rc脚本就是去执行所需级别脚本的功能脚本;
目录下的文件均为脚本链接文件,指向/etc/rc.d/rcN.d/目录,并且命名时以S或K开头,后面跟上
0-99的数字;S代表启动时执行;K代表关闭时执行;01-99代表启动或关闭的级别(数字越小越优先)
初始化结束前执行最后一个文件:/etc/rc.d/rc.local,系统会读取该脚本中的所有命令并执行一遍;但是该脚本只在启动时执行一次,系统关闭时不能执行,所以不要为了实现开机启动而将某些服务写入这个脚本,那样会造成服务关机时的非正常关闭。
完成后设定ctrl alt delete的意义以及突然断电怎么办,电源恢复怎么办
启动虚拟终端
启动图形终端--运行级别5情况下
/etc/rc.d/rc.sysinit:系统初始化--更高级化(后续服务可以由它完成)
注:内核挂载根文件系统的时候是只读方式挂载的,防止发生意外
检测,并以读写方式重新挂载根文件系统;
设定主机名;
检测并挂载/etc/fstab中的其他文件系统;
启用swap分区;
初始化外围硬件设备的驱动:如网卡驱动,显卡等
根据/etc/sysctl.conf设定内核参数;
激活udev和selinux;
激活LVMhe RAID设备;
清理过期锁和PID文件;
装载键映射:如键盘上的每一个键的功能
所以第5步可以理解为:先读取inittab中的运行级别,然后系统跑到rc.d中去找相应的运行级别的文件如rc3.d,然后通过rc3.d中S98*开头的文件(里面K开头的可以为很多个一起去找)去rc.d/init.d中,通过checkconfig定义在脚本中的运行级别的文件来读取脚本并按照次序运行(如‘checkconfig 35 98 01’ 其中3 5 为运行级别'rc3.d为3级别',98对应rc3.d中S98开头的文件)。