Linux启动流程分析

  当你按下开机键后,BIOS就开始进行自检,主要是检测硬件(CPU、内存等)是否完好。 

  等BIOS自检完成以后,根据BIOS中的设置(也就是设置的开机启动项),就会把系统的引导权交给相应的设备,默认是本地的硬盘。

  当引权到达本地硬盘后,首先根据硬盘第1个扇区中MBR(Master Boot Record)的设置,将系统引导权交给包含操作系统引导文件的分区,或是直接调用启动菜单(如GRUB),并把系统引导权交给GRUB。

  当系统引导权到了GRUB以后,GRUB会显示内核的版本给用户(在这个地方可以做很多设置,比如说是进入到单用户模式),如果有多个内核的版本的话,用户是可以选择的。然后就是加载相应的内核文件,并把系统引导权交给Linux内核。Linux内核是一个预先编译好的一个二进制文件,介于硬件资源和系统程序之间,负责资源的分配与调度。在RHEL 5系统中Linux内核文件是:“/boot/vmlinuz-2.6.18-8.e15”。

  当系统引导权到了Linux内核后,内核首先会将系统中的/sbin/init程序加载到内存中运行(运行中的程序称为进程),其pid为1。随后就由init进程来对系统进行一系列的初始化过程:

         首先会根据init程序的配置文件/etc/inittab的设置来执行系统初始脚本/etc/rc.d/rc.sysinit,这一过程主要是设置主机名,还有就是一些网络信息如ip等。接下来就是要根据/etc/inittab中设置的系统默认进入的系统级别,来进入到/etc/rc.d/rcX.d/目录中,并且执行相应的脚本来启动相关的服务。该目录下的服务的脚本,其实就是/etc/init.d/下部分脚本的一个链接。

        最后,启动终端/sbin/mingetty程序,开启相应的终端,来等待用户的登陆(登陆过程由/bin/login程序负责验证)。