Linux启动过程分为2种,init方式和systeamd方式。
先说init启动过程:
1.首先,启动电源。
2.启动POST(Power on self test),加电自检程序,检查主板硬件上有无短路等等,如果正常,会“滴”的响一声,这是很多人熟知的开机“滴”声。(上面那篇文章没写到。)
3.然后处理器会在系统存储中找到BIOS(Basic Input Output System)。
(注:BIOS一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序。)
4.BIOS找到第一个引导设备。(一般是硬盘 ,装系统的时候可能是USB可能是CD,装过系统的童鞋知道可以进BIOS设置启动顺序。 )
5.查找硬盘的的主引导记录MBR(Master Boot Record),磁盘的第一扇区第一磁道,并将其加载到内存中,以后的启动过程就由MBR程序引导。前面是BIOS在引导。
(注:MBR描述了逻辑分区的信息,包含文件系统以及组织方式。此外,MBR还包含计算机在启动的第二阶段加载操作系统的可执行代码或连接每个分区的引导记录VBR。)
6.MBR初始化引导程序(Grub或LILO,前者居多,用Grub为例)Grub。
7.Grub程序加载内核kernel。
8.内核kernel会去查找/sbin下的init程序,并且执行该程序。init便是Linux的父进程,是所有进程的父进程,PID为1。
9.init读取/etc/inttab,确定此次运行的级别runlevel。
10.init读取/etc/fstab,根据文件信息挂载分区。
11.init读取/etc/init.d,开启对应启动级别(第9步确认)的脚本和服务。
12.进入Shell(这是第11步启动出来的。)
至此,开机成功!
我们再来说说systemd方式启动:
1.前面7步与init方式相同。
8.内核kernel将加载systemd作为引导管理程序。(使用systemd还是init取决于Grub里的配置。)
9.加载default.target,实际上default.target是指向graphical.target的软链接,文件的内容是需要加载的target文件。
10.启动multi-user.target,为多用户设定系统环境,开起防火墙服务。
11.加载basic.target,开启普通服务特别是图形服务。(它通过/etc/systemd/system/basic.target.wants目录来决定哪些服务会被启动)
12.加载sysinit.targe,开启重要服务,例如挂载等。
13.加载local-fs.target,来处理底层核心服务。
14.进入Shell(这是第11步启动出来的。)
至此,开机成功!
本文出自 “sevenot” 博客,请务必保留此出处http://sevenot.blog.51cto.com/12398291/1945490
原文:http://sevenot.blog.51cto.com/12398291/1945490