CentOS 6 开机流程——Linux由kernel和rootfs组成。kernel负责进程管理、内存管理、网络管理、驱动程序、文件系统、安全等;rootfs由程序和glibc组成,完善操作系统的功能。同时Linux内核的特点是模块化,通过对模块装载卸载可以对内核功能自定义。Linux内核镜像文件:/boot/vmlinuz-2.6.32-696.el6.x86_64
整体的流程
BIOS/开机自检
MBR引导(Boot Loader)
启动内核
启动第一个进程init
一、BIOS/开机自检
1.1 微控制器
系统想要启动必须先加载BIOS,按下电源键时,给微控制器下达一条复位指令,各寄存器复位,最后下达一条跳转指令,跳转到BIOS的ROM,使得硬件去读取主板上的BIOS程序,在这之前都是由硬件来完成,之后硬件就会把控制权交给BIOS;
1.2 BIOS->POST
随后BIOS程序加载CMOS(可读写的RAM芯片,保存BIOS设置硬件参数的数据)的信息,借CMOS取得主机的各项硬件配置;
取得硬件配置的信息之后,BIOS进行加电自检(Power-on self Test,POST)过程,检测计算机各种硬件信息,如果发现硬件错误则会报错(发出声音警告);
之后BIOS对硬件进行初始化
BIOS将自己复制到物理内存中继续执行,开始按顺序搜寻可引导存储设备,决定存储设备的顺序(即定义第一个可引导的磁盘,当然是在有两个磁盘的前提),接下来就会读取磁盘的内容,但是要读取磁盘文件必须要有文件系统,这对BIOS挂载文件系统来说是不可能,因此需要一个不依赖文件系统的方法使得BIOS读取磁盘内容,这种方法就是引入MBR。最后BIOS通过INT 13硬件中断功能读取第一个可引导的存储设备的MBR(0磁道0扇区)中的boot loader。将MBR加载到物理内存中执行。小tip:判断可引导磁盘就是判断每个磁盘前512字节结尾是否存在55AA,有就是可引导,没有就继续检查下一个磁盘。
MBR载入内存后,BIOS将控制权转交给MBR(准确的说应该是MBR中的boot loader),然后MBR接管任务开始执行。
二、MBR引导(Boot Loader)
载入了第一个可引导的存储设备的MBR后,MBR中的boot loader就要读取所在磁盘的操作系统核心文件(即后面所说的内核)了。
2.1 boot loader
但是呢还存在一些问题,不同操作系统的文件系统格式不同?还有我们知道一个磁盘可以安装多个操作系统,boot loader怎么能够做到引导的就是我们想要的操作系统呢?这么多不同的功能单靠一个446字节的boot loader是远远不够的。因此必须弄一个相对应的程序来处理各自对应的操作系统核心文件,这个程序就是操作系统的loader(注意不是MBR中的boot loader),这样一来boot loader只需要将控制权交给对应操作系统的loader,让它负责去启动操作系统就行了。
这里有张图能更好地解释boot loader的作用:
解读上图内容,我们知道一个硬盘的每个分区的第一个扇区叫做boot sector,这个扇区存放的就是操作系统的loader,所以我们常说一个分区只能安装一个操作系统,如上图,第一个分区的boot sector存放着windows的loader,第二个分区放着Linux的loader,第三个第四个由于没有安装操作系统所以空着。至于MBR的boot loader是干嘛呢, boot loader有三个功能:提供选单,读取内核文件,转交给其他loader ,
提供选单就是给用户提供一张选项单,让用户选择进入哪个操作系统;
读取内核文件,我们知道系统会有一个默认启动的操作系统,这个操作系统的loader在所在分区的boot sector有一份,除此之外,也会将这个默认启动的操作系统的loader复制一份到MBR的boot loader中,这样一来MBR就会直接读取boot loader中的loader了,然后就是启动默认的操作系统;
转交个其他的loader,当用户选择其他操作系统启动的时候,boot loader会将控制权转交给对应的loader,让它负责操作系统的启动。