菜鸟笔记
提升您的技术认知

linux 系统启动过程-ag真人游戏

阅读 : 2393

按下系统的电源开关,过一会就可以看到linux的登录界面了。

你是否曾经想过,从按下电源开关到登录界面出现,这后面到底发生了什么?

linux 系统在启动过程中,首先是固件(pc 上大多是 cmos/bios)的物理检测,诸如检测系统的显卡、cpu 和硬盘等,可从系统按下电源后看到此检测信息;检测无问题,将读取硬盘的mbr(主引导记录)中的自举程序,linux 中常用的自举程序如 lilo 和grub。自举程序 grub 在系统启动期间只有一个作用,就是载入内核,内核在引导期间有两个主要的作用,一个是驱动系统硬件,另一个将启动系统进程 init;init 进程将读取其配置文件/etc/inittab 完成后续所有的引导。

整个过程基本可以分为6个步骤:post-->bios-->mbr(grub)-->kernel-->init-->runlevel。下面会详细说明每个过程的作用。

bios

bios(basic input/output system),基本输入输出系统,计算机开机的时候,细心的童鞋可能会发现这个单词。该系统存储于主板的rom芯片上,计算机在开机时,最先读取该系统,然后会有一个加电自检过程,这个过程其实就是检查cpu和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有异常就开始加载bios程序到内存当中。详细的bios功能,这边就不说了,bios主要的一个功能就是存储了磁盘的启动顺序,bios会按照启动顺序去查找第一个磁盘头的mbr信息,并加载和执行mbr中的bootloader程序,若第一个磁盘不存在mbr,则会继续查找第二个磁盘(ps:启动顺序可以在bios的界面中进行设置),一旦bootloader程序被检测并加载内存中,bios就将控制权交接给了bootloader程序。

mbr

mbr(master boot record),主引导记录,mbr存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储bootloader程序,64bytes用于存储分区表信息,最后2bytes用于mbr的有效性检查。

grub

grub(grand unified bootloader),多系统启动程序,其执行过程可分为三个步骤:

stage1:这个其实就是mbr,它的主要工作就是查找并加载第二段bootloader程序(stage2),但系统在没启动时,mbr根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1_5

stage1_5:该步骤就是为了识别文件系统

stage2:grub程序会根据/boot/grub/grub.conf文件查找kernel的信息,然后开始加载kernel程序,当kernel程序被检测并在加载到内存中,grub就将控制权交接给了kernel程序。

kernel

kernel,内核,kernel是linux系统最主要的程序,实际上,kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当grub将kernel读进内存,内存开始解压缩内核文件。讲内核启动,应该先讲下initrd这个文件,initrd(initial ram disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。因为kernel为了精简,只保留了最基本的模块,因此,kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块,当kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。

kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序。

init

init,初始化,顾名思义,该程序就是进行os初始化操作,实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的os初始化脚本,简单讲下这个脚本的任务(可以去看看实际脚本,看看都做了什么):

1、激活udev和selinux;2、根据/etc/sysctl.conf文件,来设定内核参数;3、设定系统时钟;4、装载硬盘映射;5、启用交换分区;6、设置主机名;7、根文件系统检测,并以读写方式重新挂载根文件系统;8、激活raid和lvm设备;9、启用磁盘配额;10、根据/etc/fstab,检查并挂载其他文件系统;11、清理过期的锁和pid文件

执行完后,根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。

runlevel

runlevel,运行级别,不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,linux的启动级别分为以下几种

0:关机模式

1:单一用户模式(直接以管理员身份进入)

2:多用户模式(无网络)

3:多用户模式(命令行)

4:保留

5:多用户模式(图形界面)

6:重启

网站地图