秋招结束,lZ打算将两个月的学习总结一下,故开始用博客记录一路的学习内容。《鸟哥的Linux私房菜》学习总结。
Linux系统启动过程分析
简单地说,整个开机流程到操作系统之前经过的步骤:
按下电源——BIOS自检——MBR——引导加载程序(Boot Loader)——启动内核文件——初始化系统
1、基本输入输出系统BIOS(Basic Input Output System)
BIOS是一组固化到计算机主板上的一个ROM芯片上的程序,开机主动执行的程序,会认识第一个可开机的设备。
1)BIOS首先对系统硬件进行检测(上电自检),自检过程为:
加电——CPU——ROM——BIOS——System clock——DMA——RAM——IRQ——显卡等
2)BIOS调用设备自身ROM中的初始化代码,对设备进行初始化。
3)BIOS根据COMS中设置的启动顺序,依次启动。当启动设备是硬盘时,BIOS把系统控制权交给硬盘MBR中的bootloader。
(CMOS是记录各项硬件参数且嵌入到主板上面的存储器)
2、主引导记录MBR(Master Boot Record)
磁盘的第一个扇区主要记录了两个重要的信息,分别是主引导分区和分区表。
MBR结构图:
446B | BootLoader(主引导程序) |
64B | 分区表DPT |
2B | 有效标志 |
大多数Linux系统用grub作为Bootloader(引导程序),grub可以引导多种操作系统,识别磁盘文件系统的格式,通过/boot/grub/grub.conf文件来配置信息。
grub引导分为stage1和stage2两个阶段:
1)stage1的代码保存在MBR中的前446B,BIOS将stage1载入内存并跳转执行,stage1的任务仅将硬盘0头0道2扇区读入内存。
2)stage2读取/boot/grub/grub.conf文件,决定如何加载内核。
3、引导加载程序(Boot Loader)
一支可读取内核文件来执行的软件,它的主要任务:
1)提供菜单:用户可以选择不同的开机选项,这也是多重引导的重要功能。
2)载入内核文件:直接指向可开机的程序区段来开始操作系统
3)转交其他loader:将引导加载功能转交给其他loader负责
4、启动内核文件(Kernel)
stage2被载入内存执行,解析grub.conf文件,然后加载内核镜像到内存中,并将控制权转交给内核,
内核初始化系统中的各设备并做相应配置工作。