您的位置:首页 > 运维架构 > Linux

小c学Linux(11)--开机系统启动流程

2018-04-01 15:41 453 查看
计算机开机后,是怎么一步一步的初始化,然后将系统启动起来,提供一个界面然我们能够操作应用程序,或者是操作shell跟内核进行交互呢?

POST(Power On Self Test)

post加电自检:

计算机任何操作都是由CPU执行指令完成的

而CPU是一堆硬件,想让它跑起来进行自检,得给他指令,这个指令在ROM

CPU必须能够找到存放在ROM中的指令

谁给CPU一个指令:“去ROM中某某位置加载开机自检指令“呢?

CPU生产商生产时就指定了这个去ROM的特定位置找开机自检的指令

ROM生产商根据CPU默认设置的特定地址,默认在生产ROM时给此特定位置存储开机自检指令

所以,整个POST加电自检过程就是:
计算机开机一通电,就自寻ROM特定位置加载开机自检指令,而后对电脑硬件设备进行自检。


BIOS(Basic Input Output System)

基本输入输出系统bios,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。如果磁盘分区1,2,3,4分别有1,2,3,4个操作系统,默认加载磁盘1,2,3,4的bootloader.如果1坏了,则必须调整为2,1,3,4让2为第一个boot sequence。

MBR(Main Boot Record)

主引导记录mbr,是位于磁盘最前边的一段引导(Loader)代码,磁盘的第0扇区。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。

当加电自检完成后,就要加载内核了,加载内核了再由内核完成整个操作系统的加载。

从哪儿找内核?从外部设备,比如硬盘。

硬盘是设备,貌似要驱动

但是驱动硬件设备是靠内核完成的呢,我们还没有加载内核,怎么驱动硬盘设备?

所以,硬盘不需要内核驱动,硬盘在硬件平台上就能够被找到,能够直接访问

直接读取硬盘的第0扇区上的主引导记录MBR

446: bootloader 一段引导程序

64:分区表

2:5A

内核以文件的形式存储在某个分区上,bootloader必须能够正确加载它

内核以文件的形式存储在分区上,那该分区必须有文件系统,但是操作系统还没启动,bootloader怎么识别这个文件系统

bootloader在系统装到磁盘上时就能够识别vmlinuz所在分区

通过BIOS里的boot sequence启动顺序可以正确加载我们想要的内核

任何程序都必须放在内存中执行,内核文件必须存储在基本磁盘分区,不能存储在
4000
raid或lvm上,因为bootloader只能识别基本磁盘分区

这时候,bootloader能够把内核加载到内存了,内核能够自解压,加载到内存之前进行压缩,加载之后进行解压。

bootloader完成任务后,后面交由内核继续完成操作系统的初始化

/sbin/init

操作系统初始化的操作进程,
/etc/inittab 和 /etc/init/*.conf
是其配置文件

要执行/sbin/init,内核必须要识别/根分区,找到/sbin目录

这时候内核要依靠initrd这个文件系统来完成。它是什么东西?它把硬盘模拟成了磁盘,包含了/根、/bin、/sbin等分区,是在安装操作系统时指定和内核vmlinuz一起存储在基本分区上的。

内核通过initrd能够将/根分区正确挂载到硬盘上

最后通过执行/sbin/init配置系统初始化环境

最后总结整个操作系统的启动过程就是:POST->BIOS->MBR->kernel->/sbin/init
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: