分类:
2007-07-02 10:34:38
1。开机自检
在刚开机时,根据X386CUP的特性,代码段(CS,CODE SEGMENT)寄存器的值为全1,指令计数器(IP,INSTRUCTION POINTER)的值为全0,既CS=FFFF、IP=0000。这时CPU根据CS和IP 的值执行FFFF0H处的指令。由于FFFF0H已经到了基本内存的高地址顶端,所以,FFFF0H处的指令一般总是一个JMP指令,以便CPU能够跳到比较低的地址去执行那里的代码,这个地址通常是ROM BIOS 的入口地址。接着,ROM BIOS 进行开机自检,如检查内存,键盘等。在自检过程中,ROM BIOS会在上位内存(UMB,UPPERMEMORY BLOCK)中进行扫描,侃侃是否存在合法的设备控制卡ROM BIOS(如:SCSI卡上的ROM),如果有,就执行其中的一些初始化代码。最后,ROM BIOS 读取磁盘上的第一个扇区并将这个扇区的内存装入内存。
2。预引导
假定硬盘是系统的启动磁盘。硬盘的第一扇区称为主引导记录(MBR, MASTER BOOTRECORD)。MBR 的长度为512字节。可分为两部分:第一部分为引导(PRE-BOOT)区,占了446个字节;第二部分为分区表(PARTITION PABLE),共有66个字节,记录硬盘的分区信息。预引导区的作用之一是找到标记为活动(ACTIVE)的分区,并将活动分区的引导区读入内存。
如果用软盘启动计算机,ROM BIOS 读入的是软盘的引导区,既软盘的第一个扇区。
3。核心映像装入
在LINUX系统中,人们通常把LILO(LINUX LOADER)放在MBR或某个分区的超级块(SUPERBLOCK)中。假定LILO在MBR中,读取MBR后,LILO就会被首先执行。此时,屏幕上出现“BOOT:”字样,接下来的工作是装入LINUX核心映像。如果LILO安装在某个分区的超级块中,通常还会有一个管理开机的程序,这个管理开机的程序负责读取LILO,进而进行核心映像的装入工作。
4。核心启动
核心装入完毕后,CPU的控制权就交给了核心启动代码。此时,核心首先进行硬件的检测和设备驱动程序的初始化,然后运行INIT。INIT 是LINUX核心启动的第一个用户进程,其进程号为1,是系统其它用户进程的祖先。
5。系统初始化
INIT进程负责进行一系列系统初始化程序和脚本文件,/ETC/INITTAB中包含了INIT所做的所有工作。
6。等待用户登录
系统初始化完毕后,INIT 切换到多用户模式,并为每一个虚拟控制台和川行终端启动一个GETTY进程。GETTY进程负责接受和检验用户的登录要求。
至此,LINUX系统的启动工作全部完成。不同核心版本的LINUX 的启动过程有一定的差异,不同发行版本的LINUX 的启动也可能稍有不同,但基本过程是类似的。另外,在“BOOT:”后,利用“LINUX SINGLE”命令可以迫使LINUX进入单用户模式,除不要求用户登录和不启动虚拟终端以外,启动过程的其它部分也基本类似。
|