你是否曾经对操作系统的启动,执行感到疑惑?今天我们就来了解一下操作系统的启动过程。理解启动过程对系统配置和启动相关问题的解决是非常重要的。
系统启动主要是两个阶段,引导和启动。当电源接通后开始引导,结束于内核初始化完成和系统父进程的成功运行直至进入可操作阶段
* BIOS加电自检
* 内核引导
* 启动init/systemd
* 系统初始化
BIOS自检
和所有操作系统一样linux 启动进程的命令,当电源接通时电脑开始执行BIOS程序用于检验硬件基本功能是否正常如果post失败电脑将不能使用,引导过程就会在此中断。如果自检确认硬件基本功能正常,就会产生一个中断并指向接入的可引导设备的引导扇区,包含有效的引导记录的第一个引导扇区会被加载到内存中,控制权也将从引导扇区转移到此段代码。
内核引导
一阶段:当自检完成后会在磁盘查找引导记录,通常位于MBR,加载它找到的一个引导记录到内存中并执行此代码。它是一个512字节的映像linux 启动进程的命令,其中包含程序代码和一个小分区表。前面446个字节是主引导加载程序包含了可执行程序和错误消息文本,后面64个字节是分区表。主引导程序的目的是查找并加载次引导加载程序,通过在分区表中查找一个活动分区来实现功能,当找到之后会将活动分区的引导记录从这个设备中读入RAM并执行它。
Grub2:第二版引导加载程序,也是内核引导程序,能够用来引导不同版本的Linux和其他开源的系统,这个阶段的任务是加载Linux内核和可选的初始RAM磁盘。加载之后grub就可以在请求时显示可用内核列表,在/etc/grub.conf中进行定义,我们可以选择内核并且可已对内核参数进行修改。
内核:当内核映像加载到内存中linux 发邮件,内核阶段就开始了。它是一个自解压的压缩映像,在内核映像前是一个例程,它实现少量硬件设置并对内核映像包含的内核进行解压放入高端内存中,并启动init/systemd进程。
引导选择内核
启动init/system
当内核加载完成后启动第一个程序,也是所有进程的爸爸(父进程)。负责将Linux主机带到一个用户可操作的状态systemd 较init 程序丰富,可以管理系统的许多方面,包括挂载文件系统管理系统服务等。
系统初始化
Linux允许为不同场合分配不同的开机启动程序,称为”运行级别“。根据运行级别确定要运行的程序
运行级别:
0:系统停机状态,所以默认级别不能设置为0否则系统不能正常启动
1:单用户状态linux系统iso下载,root权限用于系统维护
2:多用户状态,但是没有nfs文件系统
3:多用户状态,只能控制台登录
4:系统未用
5:图形化多用户状态
6:系统正常关闭并重新启动
确定运行级别后,系统会执行相关脚本以及加载相关系统服务,当操作完成后系统便启动完成。