Linux启动过程

引言

对于电脑电源键被按后,经过一系列控制台文本的打印,然后就进入了我们的操作系统界面。而且同一个电脑,可以安装不同的操作系统(如windows、linux)。它会自动帮你启动到你的操作系统。以linux为例,它的启动过程如下:
在这里插入图片描述
其中执行BIOS、执行boot是所有计算机的通用过程。特别是执行BIOS与执行boot的第一阶段的代码细节在各厂商有差异,一旦出厂终身不变;初始化Kernel、启动init进程是属于Linux特有的,其他操作系统与之有大体相似的过程。

1 执行BIOS

BIOS(Basic Input/Output System),又叫基本输入输出系统,它存储于ROM上。当电脑上电后,首先执行一系列自检(包括检查cpu、内存和其他硬件),然后加载BIOS代码到内存。BIOS代码虽然很小,但是能够读取磁盘的扇区、输出控制台字符到显示器等基本的IO操作。最后BIOS会按照设置的启动顺序去查找带有有效MBR的磁盘,一旦找到便会把这个磁盘的MBR的Bootloader程序加载到内存。
MBR(Master Boot Record),又称主引导记录,MBR存储于磁盘的第一个扇区,大小为512个字节,其中,446字节用于存储BootLoader程序,64字节用于存储分区表信息,最后2个字节用于MBR的有效性检查。

2 执行Boot

Linux 发行版本使用的引导加载器主要有三种:GRUB、GRUB2 和 LILO。其中GRUB2是最常用的引导程序。
GRUB2的引导过程分为三个步骤:

阶段一

BIOS加载MBR的BootLoader程序只有446个字节。不可能非常智能,更不能存储文件系统的驱动程序。它任然还是通过BIOS程序裸读扇区的方式去加载阶段二的程序到内存。

阶段二

阶段二的程序是在MBR到第一个分区之间的扇区。共有62 个 扇区,每个512个字节,即31744字节。这个阶段存储的程序为core.img,这个程序足够容纳一些通用的文件系统驱动程序,如标准的 EXT 和其它的 Linux 文件系统 等。也就是说阶段三的程序可以放在core.img包含的驱动程序可以访问的文件系统中(如EXT),然后由core.img去加载。

阶段三

这个阶段为真正的内核引导程序。所有的文件都已存放于 /boot/grub2目录及其几个子目录之下,/boot目录的必须是阶段二的驱动可以访问的文件系统。/boot/grub2目录下主要有initrd.img文件和vmlinuz符号链接。vmlinuz是压缩了的内核镜像;initrd是一个虚拟的内存根文件系统。
由于系统刚刚启动,还没有挂载根文件系统、也没有读根文件系统的驱动程序,但是内核又不得不依赖根文件系统的一些文件,这是一个先有鸡还是先有蛋的问题。于是就做一个最小的虚拟内存根文件系统initrd,当加载了内核映像到内存后,再挂载initrd为根,initrd中包含真正的根文件系统的驱动程序和内核需要的一些其他文件。

3 初始化Kernel

经过执行boot过程,成功地加载了kernel镜像代码到内存。然后就跳转到kernel的汇编入口函数,正式由kernel接管。经过简单的汇编指令,最终会执行到start_kernel函数。
在start_kernel会执行内核的系列初始化,其中挂载真正的根分区、创建内核线程和启动1号用户进程也是这个时候。最终执行流脱变为空闲进程(即0号进程)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值