概述
对操作系统的启动过程一直是比较模糊,想想大概经历检查硬件,加载操作系统,加载
用户环境等几个过程,但实际上要复杂一些。毕竟我们只是了解和掌握启动过程,而不是去
对启动过程进行设计和编码,所以下面的介绍相对比较简单,也点到为止。如果有想深入学
习的同学,可以针对某个或某几个部分刨根问题,编码调试。
下面以Debian Linux的启动加载为例,简单介绍一下操作系统的启动。
经历的过程如下:
开机自检(POST)---->执行基本输入输出(BIOS)---->加载系统分区表数据(MBR开
始的512字节)---->加载引导程序(grub之类)---->加载Linux内核----->系统环境初始化-----
------->用户环境初始化
开机自检(POST)
这部分没有什么多余的东西,计算机连上电源用户按下启动按钮后,计算机自己检测CPU,
内存,硬盘等硬件设备是否处在可用状态。如果可以使用,继续下一步的工作,即将运行权
交给BIOS,否则利用峰鸣器报警。这也是修理电脑的专家根据蜂鸣器报警声判断系统那里有
问题的依据。
执行基本输入输出(BIOS)
BIOS(Basic Input Output System)基本输入输出程序。该程序完成最基本的硬件位置
处理,设置硬中断等。然后将MBR最开始的程序调入到CPU上运行,运行权进而交给MBR。
MBR加载
MBR(Master boot record),是启动磁盘最开始的512字节,这里包含了分区信息和一
个引导程序。分区信息记载了磁盘的分区情况,引导程序即是我们比较熟悉的Grub,LiLo等,
用来指引从什么位置加载内核程序。
引导程序加载Grub(GRand Unified Bootloader)
Grub在配置的时候指定在什么分区的什么位置加载内核,Grub2以前的版本中grub都是
有两个或者多个加载过程的,会去加载stage1,stage1_5,stage2文件,这些文件都在
/boot/grub目录下。之所以会有这些文件,是因为在加载的早期,一次只能加载512字节,太
多文件的话,只能分批加载。
现在,在Grub2中已经找不到这个文件了,加载和引导的过程会另外介绍。
内核加载过程
由于在Grub中记录了内核的具体位置,在Grub运行完毕后,就开始加载内核,运行权限随
之交给内核。
内核接过运行权限,开始探测系统的硬件,加载硬件对应的驱动(有些以模块运行的驱动,
是需要挂载文件系统才能加载),然后挂载文件系统,从文件系统中读取数据。
这个过程的如下:
内核探测硬件------>加载驱动(initrd)------>挂载根文件系统------>rootfs(/sbin/init)
系统初始化工作
最后运行权交给了/sbin/init程序,开始跑初始化的脚本内容。(待续)