Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3646062
  • 博文数量: 880
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6155
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(880)

文章存档

2022年(5)

2021年(60)

2020年(175)

2019年(207)

2018年(210)

2017年(142)

2016年(81)

分类: LINUX

2020-04-27 11:18:01

Linux操作系统的启动过程

Linux操作系统的启动过程一般分为四个阶段:

    BIOS启动引导阶段;
    GRUB启动引导阶段;
    内核阶段;
    init初始化阶段。

BIOS启动引导阶段

系统上电开机后,主板BIOS运行POST(Power on self test)代码,检测系统外围一些设备(如:CPU、内存、显卡、I/O、键盘鼠标等),当设备检测通过后,系统开始启动自举程序,根据在BIOS中设置的启动顺序搜索启动驱动器(比如硬盘、光驱、网络服务器等),并获取第一个启动设备的代号,读取第一个启动设备的MBR的引导加载程序(即lilo、grub、spfdisk等)的启动信息,从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理。至此进入GRUB启动引导阶段。

GRUB启动引导阶段

主要操作是装载stage1,装载stage1.5,装载stage2。

然后读取/boot/grub.conf文件显示启动菜单,装载所选的kernel和initrd文件到内存中。

BIOS通过下面两种方法之一来传递引导记录:

    将控制权传递给initial program loader(IPL),该程序安装在磁盘主引导记录(MBR)中。  
    将控制权传递给initial program loader(IPL),该程序安装在磁盘分区的启动引导扇区中。

上面两种方法比较后,无论上面的哪种情况中,IPL都是MBR的一部分,都需要MBR的参与。

IPL是GRUB阶段的第一个部分(stage1),他的作用就是定位和装载GRUB的第二个部分(stage2);因为stage1没有文件系统识别能力,所以具有文件系统识别能力的stage1.5成为stage1和stage2之间连接的桥梁,这样GRUB才有能力去访问/boot分区/boot/grub目录下的 stage2文件,将stage2载入内存并执行。

stage2对启动系统起关键作用,该部分提供了GRUB启动菜单和交互式的GRUB的shell。

启动菜单在启动时候通过/boot/grub/grub.conf文件所定义的内容生成。

在启动菜单中选择了kernel之后,GRUB会负责解压和装载kernel image并且将initrd装载到内存中,最后GRUB初始化kernel启动代码,完成之后后续的引导权,被移交给kernel。

内核阶段

操作系统的核心是放在文件系统中的,要想正确加载核心就必须提前识别文件系统。

要想加载linux的核心就必须能识别linux的文件系统,核心文件一般会放在/boot/vmlinuz。

在系统启动的控制权移交给kernel后,Kernel会立即初始化系统中各设备并做相关配置工作,其中包括CPU、I/O、存储设备等。

配置过程中进行设备驱动加载的时候,一部分设备的驱动编入Linux Kernel中,Kernel会调用这部分驱动初始化相关设备;另外有一部分设备驱动并没有编入Kernel,而是作为模块形式放在initrd中。

initrd是一种基于内存的文件系统,启动过程中,系统在访问真正的根文件系统时,会先访问initrd文件系统。

将initrd中的内容打开来看,会发现有bin、dev、etc、lib、proc、sys、sysroot、init等文件(包含目录)。

initrd中的内容释放到rootfs(根文件系统)中后,Kernel会执行其中的init文件。

这个时候内核的控制权移交给init文件处理。

驱动加载后,会创建一个根设备,然后将根文件系统以只读的方式挂载。

这步结束后释放未使用内存并执行switch root,转换到真正的根上面去,同时运行/sbin/init程序,开启系统的1号进程,此后系统启动的控制权移交给 init 进程。

Init初始化阶段

在核心加载完成之后,系统就准备好了,等待程序的执行。整个linux系统中,第一个执行的程序就是“/sbin/init”。

具体步骤如下:

执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,到此系统基本算运行起来了;通过读取配置文件/etc/inittab确定启动后进入的运行级别,在选定运行级别后进入相应的“/etc/rc.d/rcX.d”目录中运行相应的服务内容,该目录下的内容全部都是以S或K开头的链接文件,这些链接文件都链接到“/etc/rc.d/init.d”目录下的各种shell脚本,通过执行这些shell脚本,完成了系统所有的启动任务,linux会启动终端或X-Window来等待用户登录。

Linux系统启动流程图及其相关文件

系统执行流程图


————————————————
版权声明:本文为CSDN博主「温其如玉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiangsgyx/java/article/details/83883949
阅读(686) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~