Centos系统启动流程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos系统启动流程相关的知识,希望对你有一定的参考价值。
Centos系统启动流程
启动流程: POST --> BootSequence(Bios) --> Bootloader (MBR) ->kernel (ramdisk) --> rootfs (switch_root) --> /sbin/init (/etc/inittab,/etc/init/*.conf, /usr/lib/systemd/system/)--> 默认运行级别、系统初始化、关闭及启动服务、启动终端(图形终端)
图解:
第一步首先加电自检,计算机本身不会执行程序,由此它会载入一段程序,它会在开机时自动实现将某个RAM中的程序映射到cpu可以寻址的地址空间中去,并且可以让cpu可以执行其中的指令,而这些指令是完成系统检测的,检测完成之后,当所有的硬件或基本的核心硬件没有问题的话就进行BIOS。
(2)BIOS
根据BIOS中所设定的程序启动流程去找与其对应设备上的MBR,按照引导次序执行(Boot Sequence),根据引导次序逐个查找对应的存储设备上的MBR,若MBR存在,则读取MBR上的BootLoader,BootLoader是一段程序,早期的MBR总共512字节,但它留给BootLoader空间大小是446字节,在BootLoader当中配置了所有引导的操作系统的内核的位置,因此BIOS在载入内存以后,当它实现将控制流程或控制权限转交给BootLoader以后,BootLoader就接收了整个系统的控制权限,而后根据用户的选择,去读取相应操作系统的内核。
grub: GRand Unified Bootloader
grub 0.x: grub legacy
grub 1.x: grub2 grub legacy:
stage1: mbr
stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;
stage2:磁盘分区(/boot/grub/)配置文件:/boot/grub/grub.conf <-- /etc/grub.confstage2及内核等通常放置于一个基本磁盘分区;
/boot/grub/grub.conf:
(3)第三步:将内核装载进内核中合适的位置,解压缩并完成内核初始化,BootLoader会把控制权限转交给内核。
(4)第四步:如果内核访问根文件系统的设备需要用到某个驱动程序,而内核中也没有,就需要到根文件中去找这个驱动程序,但这文件系统本身又没有挂载,因此要想访问根文件系统得先找到驱动,要访问驱动得先找到根文件系统,这就出现了一个难题,这时就要借助于initrd,为内核提供访问真正的根文件系统所需要的基本驱动程序。因此initrd是一个辅助性的、过渡性的中间层。它能够实现将kernel与真正的根文件系统连接起来,当连接完成之后它就没有任何意义了。
Linux Kernel:
CentOS启动流程:POST--> Bootloader(BIOS, MBR) --> Kernel(initrd) --> rootfs -->switch_root --> /sbin/init
内核设计体系:单内核、微内核
Linux:单内核设计,但充分借鉴了微内核体系的设计的优点;为内核引入了模块化机制;
内核的组成部分:
kernel:内核核心,一般为bzImage,通常位于/boot目录,名称为vmlinuz-VERSION-release;
kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/
(5)第五步:执行init进程,而init程序本身的配置文件是/etc/inittab(而在Centos 6上init不在是传统的init,而是upstart,而upstart的配置文件在/etc/inittab和/etc/init/.*conf下的所有文件
1. 根据boot loader的设置加载Kernel 会主动调用init进程,而init会取得run-level信息
2. init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络、时区等)
3. init执行run-level的各个服务的启动(script方式)
4. init执行/etc/rc.d/rc.local文件
5. init执行终端机模拟程序mingetty来启动login进程,最后就等待用户登录
字符界面:
图形界面:
以上是关于Centos系统启动流程的主要内容,如果未能解决你的问题,请参考以下文章