linux启动过程

上一篇 / 下一篇  2007-11-28 12:51:29 / 个人分类:Linux

引导系统

当用户打开机器的电源,BIOS开机自检,按BIOS中设置的启动设备(假设是硬盘)启动。首先,计算机的BIOS读取硬盘上的头几个扇区。这些扇区包含一个非常小的程序,名为“主引导记录(Master Boot Record)”,或简称为“MBR”。MBR已经存储了Linux内核在硬盘上的位置,因此利用它将内核装入内存,然后启动它。这里假设使用grub引导程序,grub列出机器上存在的操作系统,根据用户的选择决定用户要引导的系统,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权,然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程

装入内核

这里使用了几个汇编程序来引导Linux,主要完成以下工作:将系统参数(包括内存、磁盘等,由BIOS返回)拷贝到特别内存中,以便以后这些参数被保护模式下的代码来读取,检测和设置显示器和显示模式,并把解压后的内核放到内存中,创建第一个核心线程init来进行一些外设初始化的工作的,包括完成外设及其驱动程序的加载和初始化。并完成文件系统初始化和root文件系统的安装。

运行init

当内核装入结束时,它启动一个名为init的程序(进程)。init的进程号是1,从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序,。init程序需要读取配置文件/etc/inittabinittab是一个不可执行的文本文件,它有若干行指令所组成。在Redhat系统中,inittab的内容大概如下所示:

# Default runlevel. The runlevels used by RHS are:

id:3:initdefault:

# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

# 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 powerd installed and your

# UPS connected and working correctly. 

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5

#x:5:respawn:/etc/X11/gdm

x:5:respawn:/usr/bin/gdm

#prefdm -nodaemon

在上面的配置文件中有这么一行:

si::sysinit:/etc/rc.d/rc.sysinit

它调用执行了/etc/rc.d/rc.sysinitrc.sysinit是每一个运行级别都要首先运行的重要脚本。它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行的任务。

rc.sysinit执行后,将返回init继续其它的动作,通常接下来会执行到/etc/rc.d/rc程序。以运行级别3为例,init将执行配置文件inittab中的以下这行:

l3:3:wait:/etc/rc.d/rc 3

这一行表示以3为参数运行/etc/rc.d/rc/etc/rc.d/rc是一个Shell脚本,它接受3作为参数,去执行/etc/rc.d/rc3.d/目录下的所有的rc启动脚本。对于以以S开头的启动脚本,将以start参数来运行。而如果发现存在相应的脚本也存在K打头的链接,而且已经处于运行态了(/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。

这些守护进程启动完成了,rc程序也就执行完了,然后又将返回init继续下一步。这时基本系统环境已经设置好了,各种守护进程也已经启动了。init启动mingetty/getty,并打开6个终端供用户登录系统。在inittab文件中如下所示:

# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty651Testing软件测试网3A3O#X!| MNa5l3t


TAG: Linux

 

评分:0

我来说两句

Open Toolbar