您的位置:首页 > 运维架构 > Linux

LINUX系统启动流程(个人理解总结,错误欢迎指出)

2013-03-30 22:51 543 查看
系统启动流程:

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开头的文件)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  启动流程