系统启动流程
系统的启动时一项非常复杂的过程,内核需要检测硬件并加载驱动程序,接着调用相关程序为系统运行准备好环境。下面以centos6为例,说明系统的启动过程。
1 post
当我们按下开机的电源后,主板上的芯片组会首先向CPU发出一个指令,CPU就会跳转到BIOS中的启动代码位置; BIOS首先要检测关键设备(如内存、显卡等)是否正常,这个过程就称为POST(加电后自检)。
2 boot sequence(BIOS)
引导次序:按次序找引导设备,第一个有引导程序的设备,即为启动所用到的设备。
3 MBR(Bootloader)
MBR(Mater Boot Record),即主引导记录,其位置在硬盘第一个扇区的前512字节。。它由三个部分组成,主引导程序(Bootloader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA),其结构图如下所示:
现在常用的Bootloader程序为GRUB,GRUB(Grand Unified Bootloader)是由GNU组织所推行的;CentOS 5和CentOS 6上使用的版本为Grub 0.97。
GRUB是位于/boot下的一个目录,其里面的内容如下图:
从上图中可以看到stage1、 *_stage1_5和stage2这三类文件,它们分别表示GRUB引导时的三个阶段。stage1执行Bootloader。grub目录中存在许多以stage1_5结尾的文件,这些文件都是stage1_5阶段功能的文件,里面存放着文件系统的格式,其作用是连接stage1和stage2的一个通道。stage2阶段会读取grub.conf配置文件中设置信息来完成系统的引导,加载内核
4 加载内核及initrd
当stage2被载入内存执行时,它首先会去解析grub的配置文件/boot/grub/grub.conf,然后加载内核镜像到内存中,并将控制权转交给内核,而内核会立即初始化系统中各设备并做相关的配置工作。
关于Linux的设备驱动程序的加载,有一部分驱动程序直接被编译进内核镜像中,另一部分驱动程序则是以模块的形式放在initrd(ramdisk)中。Initrd称为虚拟文件系统,它是激活系统所必须加载的文件系统。当kernel被载入到内存后,需要加载相应驱动程来识别文件系统,这时initrd就充当了临时的系统被挂载到rootfs上,其作用就是协助kernel来加载驱动程序。initrd加载各种存储介质相关的设备驱动程序。当所需的驱动程序加载完后,会创建一个根设备,然后将根文件系统rootfs以只读的方式挂载。这一步结束后,释放未使用的内存,转换到真正的根文件系统上面去,同时运行/sbin/init程序,执行系统的1号进程。此后系统的控制权就全权交给/sbin/init进程了。
5 init进程
/sbin/init进程是系统其他所有进程的父进程,当它接管了系统的控制权先之后,它首先会去读取/etc/inittab文件来执行相应的脚本进行系统初始化, inittab内有个重要的选项就是运行级别runlevel,init进程会读取/etc/inittab中定义的运行级别,做相应的配置。runlevel有0-6共7个级别,分别是:
0-halt关机
1-single user mode 单用户维护模式
2-multi-user,without NFS 无网络功能的文本模式
3-full-muliti-user mode 完整的文本模式
4-unused 系统保留,未使用
5-X11 启动图形界面
6-reboot 重启
装有图形界面时一般默认级别为5,未装图形界面默认为3
6 利用/etc/rc.d/rc.sysint初始化
1、设定主机名:读取/etc/sysconfig/network文件中的HOSTNAME参数,并以之设定主机名;
2、打印文本欢迎信息;
3、激活SElinux和udev;
4、挂载/etc/fstab文件中定义的文件系统;
5、激活swap;
6、检测根文件系统,并以读写方式重新挂载;
7、设置系统时钟;
8、根据/etc/sysctl.conf的文件设置设置内核参数;
9、激活LVM和RAID设备;
10、加载额外设备的驱动程序;
11、清理工作。
7 init执行选定的runlevel级别的相关服务的启动
当/etc/rc.d/rc.sysinit执行完后,系统就可以顺利工作了,只是还需要启动系统所需要的各种服务,这样主机才可以提供相关的网络和主机功能,完成了系统所有的启动任务后,linux会启动终端或X-Window来等待用户登录,至此,系统就启动完毕了。
本文出自 “linux” 博客,请务必保留此出处http://yong1205.blog.51cto.com/10404369/1699803
原文地址:http://yong1205.blog.51cto.com/10404369/1699803