Linux启动流程分析

简介: Linux启动流程分析

Linux启动流程分析


一、Linux启动流程图

二、硬件启动流程

2.1、POST

       Linux开机加电后,系统开始开机自检,该过程主要对计算机各种硬件设备进行检测,如CPU、内存、主板、硬盘、CMOS芯片等。主要完成检测硬件能否满足运行的基本条件,叫做“硬件自检(Power-OnSelf-Test)”,简称POST。

       如果出现致命故障则停机,并且由于初始化过程还没完成,所以不会出现任何提示信号。

       如果出现一般故障则会发出声音等提示信号,等待故障清除;若未出现故障,加电自检完成。

       当打开计算机电源,计算机会首先加载基本输入输出系统(Basic Input Output System )。BIOS程序一般被存放在主板ROM(只读存储芯片)之中、即使在关机或掉电以后该程序也不会丢失。

2.2、BIOS

       硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。这是,BIOS需要知道,“下一阶段的启动程序”具体存放在哪个设备里(磁盘,光盘,移动硬盘等)。也就是说,BIOS需要有一个外部存储设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做“启动顺序”(Boot Sequence)

       BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PNP特性等等。在此之后,计算机就知道应该去读取哪个硬件设备了。

2.3、MBR

       主引导记录(MBR,Master Boot Record)是计算机开机以后访问硬盘时所必须要读取的第一个扇区,位于硬盘的第0柱面第0磁道第一扇区,大小为512字节。

       主引导程序的任务就是查找并且加载处在硬盘分区上的次引导程序。通过分区表查找活动分区,并将处在活动分区的次引导加载程序读取到内存里面运行。

       MBR的BootLoader中安装有GRUB程序的一部分,因为BootLoader只有446Bytes,容量太小,所以只安装了GRUB中一个小的程序在里面,用于加载剩余的GRUB程序。

三、GRUB

       在Linux资料中,被俗称GRUB的就是Boot Loader,GRUB是GRand Unified Bootloader的缩写,MBR的前446字节存放的就是GRUB程序的一部分,它是一个多重操作系统启动管理器,用来引导不同系统,GRUB是目前Linux环境中最流行的启动管理器。

       GRUB程序的作用是,可以在系统中选择性地引导不同的OS,实际上就是加载引导不同的内核镜像,当内核挂载成功之后就将控制权交给内核程序。

3.1、Stage1阶段

       Stage1可以理解为已写入MBR的BootLoader中的小程序部分。因为MBR空间有限,所以MBR当中安装最小程序。其主要作用是装载Stage2,即加载剩余的GRUB程序。

3.2、Stage1.5阶段

       Stage1.5是MBR后面的分区,并不处在MBR中。它是Stage1和Stage2的桥梁,能够识别启动分区文件系统,GRUB访问/boot分区grub目录下的Stage2文件,将Stage2载入内存并执行。

3.3、Stage2阶段

       Stage2运行后,开始解析GRUB的配置文件/boot分区下/grub/grub.conf。然后显示操作系统启动菜单,加载内核镜像到内存,通过/boot/initrd开头文件建立虚拟RAM DISK虚拟内存文件系统(initrd),最后将控制权转交给内核程序。

四、内核Kernel引导阶段

       依靠Stage2阶段在内存中创建的虚拟文件系统,从中调用虚拟根文件系统中的init程序,进而加载驱动模块来初始化系统中的各设备,并做相关配置,其中包括CPU、I/O、存储设备等。

       当所需的驱动程序加载完后,会根据grub.conf配置文件中“root=XXX”部分所指定的内容创建一个根设备,然后将根文件系统以只读的方式挂载,并切换到真正的根文件系统上,同时调用系统进程的/sbin/init程序,进入系统初始化阶段。

五、系统初始化阶段

       这一步是通过/sbin/init,init程序准备软件运行环境,启动系统服务。

5.1、init进程/程序

       init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init进程启动后查找的第1个配置文件 硬件资源是“/etc/inittab”,这个文件控制 init 的行动。一般 init 会首先指定启动等级

5.2、设定Inittab运行等级

       内核加载完毕,会启动Linux操作系统第一个守护进程init,然后通过该进程读取/etc/inittab文件,/etc/inittab文件的作用是设定Linux的运行等级,Linux常见运行级别如下:

               运行级别0(关机):系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

               运行级别1(单用户root):单用户工作状态,root权限,用于系统维护,禁止远程登陆

               运行级别2:多用户状态(没有NFS)

               运行级别3(命令行):完全的多用户状态(有NFS),登陆后进入控制台命令行模式

               运行级别4(保留):系统未使用,保留

               运行级别5(图形):X11控制台,登陆后进入图形GUI模式

               运行级别6(重启):系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。

       默认级别:3,5。

       切换级别:init #

       查看级别:runlevel ; who -r

5.3、加载rc.sysinit

       读取完运行级别,Linux系统执行的第一个用户层文件/etc/rc.d/rc.sysinit,该文件功能包括:设定PATH运行变量、设定网络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。

5.4、加载内核模块

       读取/etc/modules.conf文件及/etc/modules.d目录下的文件来加载系统内核模块。该模块文件,可以后期添加或者修改及删除。

5.5、启动运行级别程序

       根据之前读取的运行级别,操作系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。其中以S开头表示系统即将启动的程序,如果以K开头,则代表停止该服务。S和K后紧跟的数字为启动顺序编号。

5.6、读取rc.local文件

       操作系统启动完相应服务之后,会读取执行/etc/rc.d/rc.local文件,可以将需要开机启动的任务加入到该文件末尾,系统会逐行去执行并启动相应命令。

       rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

5.7、执行/bin/login程序

       执行/bin/login程序,启动到系统登录界面,操作系统等待用户输入用户名和密码,即可登录到Shell终端,如图所示,输入用户名、密码即可登录Linux操作系统,至此Linux操作系统完整流程启动完毕

       此时系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。

相关文章
|
1月前
|
消息中间件 Unix Linux
Linux进程间通信(IPC)介绍:详细解析IPC的执行流程、状态和通信机制
Linux进程间通信(IPC)介绍:详细解析IPC的执行流程、状态和通信机制
55 1
|
1月前
|
Linux Android开发
嵌入式linux中Framebuffer 驱动程序框架分析
嵌入式linux中Framebuffer 驱动程序框架分析
27 0
|
1月前
|
监控 Shell Linux
【Shell 命令集合 网络通讯 】Linux 分析串口的状态 statserial命令 使用指南
【Shell 命令集合 网络通讯 】Linux 分析串口的状态 statserial命令 使用指南
33 0
|
23天前
|
Prometheus 监控 数据可视化
linux分析方法与技巧
【4月更文挑战第3天】在Linux环境中,进行日志分析和系统性能分析的关键方法包括:使用`cat`, `less`, `tail`查看和过滤日志,`logrotate`管理日志文件,`rsyslog`或`syslog-ng`聚合日志,以及通过`top`, `mpstat`, `pidstat`, `free`, `iostat`, `netstat`, `strace`, `sar`, `dstat`等工具监控CPU、内存、磁盘I/O和网络。对于高级分析,可利用Brendan Gregg的性能工具,以及Grafana、Prometheus等可视化工具。
19 2
linux分析方法与技巧
|
30天前
|
监控 Linux Shell
Linux 进程问题调查探秘:分析和排查频繁创建进程问题
Linux 进程问题调查探秘:分析和排查频繁创建进程问题
39 0
|
1月前
|
消息中间件 存储 网络协议
Linux IPC 进程间通讯方式的深入对比与分析和权衡
Linux IPC 进程间通讯方式的深入对比与分析和权衡
69 0
|
1月前
|
存储 监控 Linux
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
49 0
|
1月前
|
存储 算法 Linux
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
25 0
|
1月前
|
安全 Linux 开发者
分析Linux桌面操作系统的迅速增长及其未来前景
最近技术圈新闻“层出不穷”,尤其是在最近,Linux桌面操作系统的市场份额迅速增长,Linux桌面操作系统的市场份额近期呈现火速增长的趋势,这一数据虽然看似不太引人注目,但实际上却具有重要的意义,达到了历史新高。了解Linux的开发者想必都知道,历经30年的努力,Linux系统的份额才在不久前达到了3%,而如今仅用了八个月的时间就新增了1%,显示出开源操作系统正迅速升温。尽管Windows和macOS仍然主导着桌面操作系统市场,但前者的份额波动较小,后者则略有下滑。虽然Linux的表现出色,但要想取得主导地位还有一段距离,有些开发者认为这是因为缺乏一个适用于所有Linux发行版的标准化桌面界面
25 1
分析Linux桌面操作系统的迅速增长及其未来前景
|
1月前
|
Linux 编译器 Shell
Linux嵌入式系统之Linux嵌入式系统之交叉编译中gcc编译器的工作流程
Linux嵌入式系统之Linux嵌入式系统之交叉编译中gcc编译器的工作流程
18 0