Linux启动流程分析_linux 启动分析

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、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

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

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

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

三、GRUB

        在Linux资料中被俗称GRUB的就是Boot LoaderGRUB是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/initinit程序准备软件运行环境启动系统服务。

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否则不能正常启动。

        默认级别35。

        切换级别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的时候了你已经可以用自己的帐号登入系统了。

 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux