Fedora12 Linux启动过程

来源:互联网 发布:mysql增删改查 面试 编辑:程序博客网 时间:2024/05/01 15:30

1.       加载BIOS

BIOSBasic Input Output System),是固化到计算机内主板上一个ROM芯片上的程序。保存CPU相关信息、设备启动顺序信息、硬盘信息、内存信息等等。

打开计算机电源第一项工作即加载BIOS,进行POSTPower On Self Test自检),对硬件进行检测;第二步进行本地设备的枚举和初始化。

2.       读取MBR         

MBRMaster Boot Record),位于硬盘第0磁道第一扇区,大小512字节,存放预启动信息、分区表信息。

要引导一个操作系统,BIOS运行时会按照CMOS的设置定义的顺序,搜索处于活动状态可以引导的设备。通常Linux都从硬盘上引导,而MBR中包含主引导加载程序。当MBR被加载到RAM以后,BIOS将控制权交给MBR

查看MBR内容,可以使用以下语句:

# dd if=/dev/sda of=mbr.bin bs=512 count=1

# od -ax mbr.bin | tail -n 10

      001000=0d512 Byte512B为一个扇区的大小。aa55MBR结束标志。

1.       运行Boot Loader

Grub引导程序不能由仅有512BMBR完整表示,因此MBR引导程序开始加载第二阶段的引导程序,然后读取/boot/grub/menu.lst组织文件里的数据,menu.lst中列出了所有可用的操作系统和启动参数,grub按照配置信息来启动不同的操作系统。

2.       加载内核

Linux不能直接加载内核,需要首先加载initrd文件。

initrdinitial RAM disk),初始RAM磁盘,是在系统引导过程中挂载的一个临时根文件系统。文件中包含各种可执行程序和驱动程序,与内核绑定并作为内核引导过程的一部分进行加载,然后再将initrd卸载释放内存。

根据grub设定的内核映像所在路径,系统读取内核映像,并进行解压缩操作。系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。在start_kernal()的最后调用init()函数,进入下一步设定运行等级。

3.       用户层init依据inittab文件来设定运行等级

init进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名、检查和安装磁盘及文件系统、启动系统日志、配置网络接口并启动网络和邮件服务,启动打印服务等。Linuxinit进程的主要任务是按照inittab文件所提供的信息创建进程,由于进行系统初始化的那些进程都由init创建,所以init进程也称为系统初始化进程。

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。

其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:

0:关机

1:单用户模式

2:无网络支持的多用户模式

3:有网络支持的多用户模式

4:保留,未使用

5:有网络支持有X-Window支持的多用户模式

6:重新引导系统,即重启

4.       Init进程执行rc.sysinit

在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。

5.       执行不同运行级别的脚本程序

根据运行级别的不同,系统会运行rc0.drc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

6.       执行etc/rc.d/rc.local程序

让用户在初始化完成之后,登录之前个性化设置启动的东西。

7.       建立终端,Mingetty启动操作系统的登录。

8.       登录Shell,建立用户与操作系统的交互。 

1:简化步骤:

机器上电->BIOS启动->MBR引导->GRUB引导->initrd-> linux内核->各种服务->系统login

2:用cat /etc/inittab查看inittab中的内容时,显示如下图:

不像网上广泛出现的后面有si::sysinit:/etc/rc.d/rc.sysinit等内容,我的理解为fedora12版本没有将后面的进程加入到inittab中。

                                                                                                                                                        Shelley

 

 

 

 

 

原创粉丝点击