2.1 引导
这是Linux系列文章第二篇,我们看一下linux系统是怎么引导的,相对与windows的解读,Linux还是有些不一样的地方。
2.2 init进程
这是系统的最先启动进程,在硬件引导完成将控制权交给系统内核的时候,这个进程产生。并且他的PID号总是1。
当由BIOS确定从那个硬件设备引导后,读取MBR,确定第二引导程序,这个引导程序主要作用是加载内核,执行一系列的引导过程,当检测完硬件之后,内核产生init进程,init进程创建其他守护进程的方式是调用SHELL脚本,而这些启动脚本大多数是以RC文件,比如RC0.D等,这下明白这些文件是干什么用的了把,rc是run command的简写。是操作系统发展的遗留痕迹。
2.3 引导过程
大体上分为6个阶段:
加载初始化内核;
检测硬件;
创建内核进程;
操作员干预(假如);
执行系统启动脚本;
多用户模式运行;
内核是一个二进制的镜像,位置在/boot/vmlinuz,或者/vmlinuz下,linux系统是单内核结构,所以整个内核都在内存中。内核首先要做的往往是检测硬件的情况,驱动程序由内核加载。
在内核初始化后,会有几个自发的进程被创建,他们并不是由fork来创建的,我们在ps命令中看到的一些进程名字被中括号包起来,并且PID号都比较小的,往往都是内核创建的,其实是内核的组成部分,装扮一下更像进程罢了。
列举几个:
kjournald
kswapd
kreclaimd
ksoftirqd
![](https://box.kancloud.cn/2016-05-17_573adb4f64f2f.png)
可以看到PID号都很小,在执行启动脚本之后,生成getty进程,好让用户登录进来。
引导涉及GRUP程序,这是目前很流行的引导加载程序,在多系统的时候尤为重要,不涉及了,有兴趣的可以自己查查资料。
这里面提及一下单用户模式,在linux启动的时,可以人工干预,变为单用户登录,目前我所应用的就是忘了root密码,选择这个登录去修改密码。
2.4 启动脚本
说到启动脚本,必须提及init进程,这里面涉及一个运行级的概念
0级:完全关闭系统;
1级:单用户模式;
2-5级:多用户模式;
6级:重新引导;
0级和6级,系统是不能停留在这两个级别中的,当计算机启动的时候,从0运行级,逐步提升运行等级,目前大多数Linux发行版默认是5级,这个是有init进程完成这个运行级的提示过程。
在/etc/init.d文件夹下,存放着很多守护进程的启动脚本,我们也经常从这里启动进程。不过init进程在将系统带入一个新的运行级别的时候,是通过rc0.d,rc1.d....等目录去寻找当前运行级的启动脚本。当然目录下的是符号链接,指向的还是/etc/init.d文件夹下的脚本。
未完待续。。。