Linux启动过程简介 

分类: 系统管理   出处:iocblog整理  更新时间:2008-06-29   添加到收藏  

  许多人对linux的启动过程感到很神秘,因为所有的启动信息都在屏幕上一闪而过。其实,
   linux的启动过程并不象启动信息所显示的那样复杂,它主要分成两个阶段:
   1.启动内核。在这个阶段,内核装入内存并在初始化每个设备驱动器时打印信息。
   2.执行程序init。装入内核并初始化设备后,运行init程序。init程序处理所有程序的启动,
   包括重要系统精灵程序和其它指定在启动时装入的软件。
   下面以red hat为例简单介绍一下linux的启动过程。
   一、启动内核
   首先介绍启动内核部分。电脑启动时,bios装载mbr,然后从当前活动分区启动,lilo获得引
   导过程的控制权后,会显示lilo提示符。此时如果用户不进行任何操作,lilo将在等待制定
   时间后自动引导默认的操作系统,而如果在此期间按下tab键,则可以看到一个可引导的操作
   系统列表,选择相应的操作系统名称就能进入相应的操作系统。
   当用户选择启动linux操作系统时,lilo就会根据事先设置好的信息从root文件系统所在的分
   区读取linux映象,然后装入内核映象并将控制权交给linux内核。linux内核获得控制权后,
   以如下步骤继续引导系统:
   1. linux内核一般是压缩保存的,因此,它首先要进行自身的解压缩。内核映象前面的一些
   代码完成解压缩。
   2. 如果系统中安装有可支持特殊文本模式的、且linux可识别的svga卡,linux会提示用户
   选择适当的文本显示模式。但如果在内核的编译过程中预先设置了文本模式,则不会提示选
   择显示模式。该显示模式可通过lilo或rdev工具程序设置。
   3. 内核接下来检测其他的硬件设备,例如硬盘、软盘和网卡等,并对相应的设备驱动程序
   进行配置。这时,显示器上出现内核运行输出的一些硬件信息。
   4. 接下来,内核装载root文件系统。root文件系统的位置可在编译内核时指定,也可通过
   lilo或rdev指定。文件系统的类型可自动检测。如果由于某些原因装载失败,则内核启动
   失败,最终会终止系统。
  
   二、执行init程序
   其次介绍init程序,利用init程序可以方便地定制启动其间装入哪些程序。init的任务是
   启动新进程和退出时重新启动其它进程。例如,在大多数linux系统中,启动时最初装入
   六个虚拟的控制台进程,退出控制台窗口时,进程死亡,然后init启动新的虚拟登录控制台,
   因而总是提供六个虚拟登陆控控制台进程。
   控制init程序操作的规则存放在文件/etc/inittab中。red hat linux缺省的inittab文
   件如下:
   #
   #inittab this file describes how the init process should set up the system in a certain
   #run-level.
   #
   #
   #default runlevel.the runlevels used by rhs are:
   #0-halt(do not set initdefault to this)
   #1-single user mode
   #2-multiuser,without nfs(the same as 3,if you do not have networking)
   #3-full multiuser mode
   #4-unused
   #5-x11
   #6-reboot(do not set initdefault to this)
   #
   id:3:initdefault:
  
   #system initialization
   si::sysinit:/etc/rc.d/rc.sysinit
   10:0:wait:/etc/rc.d/rc 0
   11:1:wait:/etc/rc.d/rc 1
   12:2:wait:/etc/rc.d/rc 2
   13:3:wait:/etc/rc.d/rc 3
   14:4:wait:/etc/rc.d/rc 4
   15:5:wait:/etc/rc.d/rc 5
   16:6:wait:/etc/rc.d/rc 6
   #things to run in every runlevel
   ud:once:/sbin/update
  
   #trap ctrl-alt-delete
   ca::ctrlaltdel:/sbin/shutdown -t3 -r now
  
   #when our ups tells us power has failed,assume we have a few minutes of
   power left.schedule a
   #shutdown for 2 minutes from now.
   #this does,of course,assume you have powered installed and your ups
   connected and working
   #correctly.
   pf::powerfail:/sbin/shutdown -f -h +2 "power restored;shutdown cancelled"
  
   #run gettys in standard runlevels
   1:12345:respawn:/sbin/minggetty tty1
   2:2345:respawn:/sbin/minggetty tty2
   3:2345:respawn:/sbin/minggetty tty3
   4:2345:respawn:/sbin/minggetty tty4
   5:2345:respawn:/sbin/minggetty tty5
   6:2345:respawn:/sbin/minggetty tty6
   #run xdm in runlevel 5
  
   x:5:respawn:/usr/bin/x11/xdm -nodaemon
   linux有个运行级系统,运行级是表示系统当前状态和init应运行哪个进程并保持在这种
   系统状态中运行的数字。在inittab文件中,第一个项目指定启动时装入的缺省运行级。[www.iocblog.net 来源]
   上例中是个多用户控制台方式,运行级为3。然后,inittab文件中每个项目指定第二个
   字段的项目用哪种运行级(每个字段用冒号分开)。因此,对运行级3,下列行是相关的:
   13:3:wait:/etc/rc.d/rc 3
   1:12345:respawn:/sbin/minggetty tty1
   2:2345:respawn:/sbin/minggetty tty2
   3:2345:respawn:/sbin/minggetty tty3
   4:2345:respawn:/sbin/minggetty tty4
   5:2345:respawn:/sbin/minggetty tty5
   6:2345:respawn:/sbin/minggetty tty6
   最后六行建立linux提供的六个虚拟控制台。第一行运行启动脚本/etc/rc.d/ rc 3;
   这将运行目录/etc/
  rc.d/rc3.d中包含的所有脚本,这些脚本表示系统初始化时要启动的程序。一般来说,
  这些脚本不需要编辑或改变,是系统缺省的。
  



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。