Linux基础--系统启动流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础--系统启动流程相关的知识,希望对你有一定的参考价值。

基本上Linux的启动过程如图所示,不同版本之间可能有一些细微的差别,后面再做介绍,但总体上就是这样一个流程。

技术分享


  • 从机器上电开始,首先直接将ROM芯片中的Bios程序加载到内存中运行。BIOS程序首先进行POST(Power On Self Test),即硬件自检,自检通过则按照BIOS中Boot Sequence中定义启动顺序去找相应设备上的0号扇区,尝试寻找其中的BootLoader程序。

  • 如果找到了BootLoader程序则将其加载到内存中,将系统控制权交给BootLoader。而BootLoader则会根据其配置文件进行工作,加载内核和伪根文件系统至内存中,同时告诉内核启动时哪个程序作为系统初始化程序。

  • 这个时候BootLoader也完成了它的使命,将系统控制权交给内核。内核首先使用伪根文件系统,加载其中的真正的根文件系统的驱动程序。

  • 内核以只读方式挂载真正的根文件系统,防止误操作损坏真正的根文件系统。

  • 切换至真正的根文件系统,并以读写方式重新挂载根文件系统。

  • 启动系统初始化程序,之后的启动工作全部交由系统初始化程序完成,内核退居幕后。只有在需要使用核心系统调用时,才交由内核完成。


这里有几点需要注意的:

1. UEFI作为新一代的标准规范,很好地适应的现代计算机的发展趋势,正在慢慢普及,未来会取代BIOS,但它们的作用本质上是一样的。

2. BootLoader是用来引导操作系统的程序,存在于磁盘0号扇区MBR(主引导记录,512字节)的前446字节中。

  1. 其实这样描述也不准确,因为446字节的空间对于一个完备的现代操作系统引导程序来说实在是有限,所以现在的BootLoader一般都分为N段式,不过第一段还是存在于这446字节内的。

  2. MBR由于其空间限制,也难以适应现代计算机标配大容量硬盘的趋势,会逐渐被GPT所取代。不过GPT考虑了兼容性,仍然保留了MBR的那块空间没有改变。

  3. BootLoader程序有很多。常见有windows的NTLoder,不过它只能用来引导windows;还有LILO,这是早期Linux中非常流行的引导程序;以及现在多数发行版Linux上使用GRUB,它有两个版本:一个是0.x,叫做legacy Grub;另一个是1.x,叫做Grub2,并不是在原来版本上改进来的,而是完全重写的。

3. 伪根文件系统的主要作用是提供真正根文件系统所需的驱动程序。在CentOS-5中的伪根文件系统使用的是ramdisk来实现的,即将一部分内存当做磁盘来用,这存在一个双缓存的问题。因为磁盘在跟内存交换数据时,因为磁盘速率远低于内存,所以磁盘上会划出一部分区域作为缓存,提高IO效率。但ramdisk中如果再划出缓存区域就会使得速度变慢而不是变快了。因此到CentOS-6后就改为了ramfs机制,即在一部分内存中建立文件系统。


4. 最后是系统初始化程序,在CentOS-5中是sysvinit,在CentOS-6中是upstart,在CentOS-7中是systemd。这部分内容就不写了,还是直接看IBM文档库中的权威文章吧。

浅析 Linux 初始化 init 系统,第 1 部分: sysvinit

浅析 Linux 初始化 init 系统,第 2 部分: UpStart

浅析 Linux 初始化 init 系统,第 3 部分: Systemd

本文出自 “knfprex3a29” 博客,请务必保留此出处http://knfprex3a29.blog.51cto.com/9761463/1757215

以上是关于Linux基础--系统启动流程的主要内容,如果未能解决你的问题,请参考以下文章

linux基础-附件1 linux系统启动流程

Linux之Centos系统的启动流程

Python学习之路——Linux基础之系统启动流程

linux基础学习第十九天-系统启动流程(cenots6)以及配置系统服务(chkconfig)

centos系列的启动流程及基础知识点

CentOS系统启动流程