新手学堂:Linux操作系统的开机流程分析
首先加载BIOS的硬件信息,众所周知BIOS即Basic Input/Output Setup的意思,每次你按下开机键,计算机首先就会加载BIOS的信息,开机时按del键可以进入BIOS进行设置,比如最常用的就是设置从硬盘启动还是从光驱启动或其他,相信装过操作系统的人都知道这个。当然BIOS里面还有相当多的信息,比如硬盘大小,电压等。
如果BIOS是设置从硬盘启动的话,那么读完BIOS后会先去读取第一个开机硬盘的头一个扇区,就是MBR,估计有人听过,即master boot record.引导程序如grub,lilo都装在这里。为什么要读取这些信息呢?想想你机器里装的多系统,如果没有引导程序,机器就不知道他该启动哪个系统,引导程序的作用正是提供几个操作系统的选项,然后各个选项都指向了操作系统的启动地址。
机器从引导程序找到了linux内核后,就要开始载入linux内核了,linux系统的内核基本上安装在/boot下,引导程序就会找到boot下的内核,并加载。
加载完毕后,内核执行/sbin/init程序,而这个程序会根据/etc/inittab文件里的信息选择登入模式,一共有7种模式,分别以0——6数字表示。基本上我们用的linux装有图形界面的是用模式5.
知道了登入模式后,就要开始读取主机信息了,linux首先读取/etc/rc.d/rc.sysinit,其中包括PATH路径和一些LINUX操作系统最基本的信息。
接下来就要开始加载各个模块了,系统从/etc/modules.conf读入模块相关信息
/sbin/init程序开始执行run-level中的各个脚本了,刚开始已经选择了等如模式0——6,则就会执行/etc/rc.d/rc*.d里的脚本了。进入/etc/rc.d/rc5.d文件夹,ls -l查看,会发现这里都是指向rc.d/init.d里面脚本的链接。由于各个登入模式都有不同的脚本启动,而所有启动的脚本都是来自于init.d里。rc*.d里的脚本名要么是K开头,要么是S开头,K表示kill,S表示start,S和K后面的数字代表启动的优先级,越小越优先。
到这里差不多已经完成了开机的大部分任务,接着/sbin/init就要开始执行执行linux的个人化设定。这些个设定都保存在/etc/rc.d/rc.local里
本文作者: