linux启动运行过程

一、linux系统开机启动过程
1、开机自检,加载BIOS;
2、读取MRB;
3、Boot Loader Grub引导菜单;
4、加载kernel内核;
5、init进程根据inittab文件夹设定运行级别;
6、init进程执行rc.sysinit;
7、启动内核模块;
8、执行不同级别的脚本程序;
9、执行/etc/rc.d/rc.local;
10、执行/bin/login程序,启动mingetty,进入登录状态。

二、详细启动过程
1、开机自检,加载BIOS
当我们打开计算机电源时,随后听到滴的一声,自检开始,这个过程中主要是检测我们计算机硬件,如CPU、内存、主板、显卡、CMOS等设备是否正常。
2、读取MRB
· BIOS自检,首先会在一个Boot Sequence程序中搜索可以让系统启动的引导设备(例如选择硬盘还是CD-ROM启动等);
这时如果BIOS找不到引导的设备及相关程序的话,则会启动失败;如果顺序找到相关的设备硬盘,那么BIOS将把控制权移交给启动设备的MBR(master boot recard)主引导记录,大小为512字节,存放预启动信息、分区信息等。
3、Boot Loader Grub引导菜单
在MBR程序中找到其前446字节的Boot Loader,其是在操作系统内核运行前的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo、spfdisk是常见的Loader
系统读取内存的grub配置信息(一般为menu.lst或grub.lst),并依照配置信息启动不同的操作系统。
cat /etc/grub.conf或/boot/grub/grub.cfg
4、加载kernel内核
根据grub设定的内核映射所在路径,系统读取内存映像,并进行压缩操作。此时,屏幕一般都输出“Uncompressing linux”的提示。当解压缩内核完成后,屏幕输出“OK,Booting the kernel”。
系统将解压后的内核置于内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成linux核心环境的建立。linux内核建立起来,基于linux的程序可以正常运行。
start_kernel开始:
······内核完成的任务有:
硬件的特测
硬件驱动的初始化
挂载根文件系统
启动Init进程
内核的功能:进程调度、内存管理、文件系统的管理、硬件驱动、网络等。
内核自身初始化完成

5、init进程根据inittab文件夹设定运行级别
内核加载后,第一个运行的程序为/sbin/init,该文件读取/etc/inittab文件,并依旧此文件进行初始化工作。
/etc/inittab文件最主要的作用是设定linux的运行等级,其设定形式为5:initdefault,这就是表明Linux运行在等级5上,等级设定
cat /etc/inittab或/etc/init/rc-sysinit.conf
Linux的运行等级设定如下:

0:-halt  关机
1:-single user mode 单用户模式
2:-Multi-user,without NFS无网络支持的多用户模式  类似于下面的run level3
3:-Full multi-user mode 有网络支持的多用户模式
4:-unused 保留,未使用
5:-X11  有网络支持有X-Window支持的多用户模式
6:- reboot 重新引导系统,即重启

6、init进程执行rc.sysinit
在设定运行级别后,linux系统的第一个用户层文件就是*/etc/rc/d/rc/sysinit*脚本程序,它的工作包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等
7、启动内核模块
根据/etc/modules.conf文件或/etc/modules.d目录下的文件装载内核模块。
8、执行不同级别的脚本程序
根据运行级别的不同,系统根据rc0.d到rc6.d相应的脚本程序,来完成相应的初始化工作和启动的服务。
9、执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
#This script will be executed after all the other init scripts.
#You can put your own initialization stuff in here if you don’t
#want to do the full Sys V style init stuff.

rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
10、执行/bin/login程序,启动mingetty,进入登录状态。

总结:
理解操作系统开机引导和启动过程对于配置操作系统和解决相关启动问题是至关重要的。该文章陈述了 GRUB2 引导装载程序开机引导装载内核的过程和 systemd 初始化系统执行开机启动操作系统的过程。
事实上,操作系统的启动分为两个阶段:引导和启动。引导阶段开始于打开电源开关,结束于内核初始化完成和 systemd 进程成功运行。启动阶段接管了剩余工作,直到操作系统进入可操作状态。
总体来说,Linux 的开机引导和启动过程是相当容易理解,下文将分节对于不同步骤进行详细说明。
BIOS 上电自检(POST)
引导装载程序 (GRUB2)
内核初始化
启动 systemd,其是所有进程之父。

转载至:https://blog.51cto.com/mrxiong2017/2084767
https://linux.cn/article-8807-1.html

你可能感兴趣的:(c,Linux)