首页 百科知识 的引导过程

的引导过程

时间:2022-10-09 百科知识 版权反馈
【摘要】:系统的引导和初始化是操作系统实现控制的第一步,了解Linux系统的启动和初始化过程,对于进一步理解和掌握Linux是十分有益的。Linux系统的引导过程包含内核部分和init程序两个部分,内核部分主要完成对系统硬件的检测和初始化工作,init程序部分则主要完成系统的各项配置。确定了运行级别之后,再来当然就是需要将主机的信息读进Linux系统。

7.4 Linux的引导过程

系统的引导和初始化是操作系统实现控制的第一步,了解Linux系统的启动和初始化过程,对于进一步理解和掌握Linux是十分有益的。

Linux系统的引导过程包含内核部分和init程序两个部分,内核部分主要完成对系统硬件的检测和初始化工作,init程序部分则主要完成系统的各项配置。

Linux的引导过程大体经历以下几个阶段:

1. 加载BIOS的硬件信息。

2. 读取MBR的Boot loader(亦即是lilo,grub,spfdisk等)开机信息。

3. 加载Kernel操作系统内核信息。

4. Kernel执行init程序并取得run-level信息。

5. init执行/etc/rc.d/rc.sysinit文件。

6. 启动内核的外挂式模块(/etc/modules.conf)。

7. init执行run-level的各个脚本(Scripts)。

8. init执行/etc/rc.d/rc.local文件。

9. 执行/bin/login程序。

10.登入之后开始以Shell控管主机。

整个linux的引导过程如图7-28所示:

img70

图7-28 Linux 引导过程

下面对以上一些步骤具体加以说明:

(1)寻找BIOS加载硬件信息。

BIOS(Basic Input/Output Setup)是第一个被加载到计算机的数据,主机的CPU数据、开机顺序、硬盘大小、芯片组工作状态、PnP的开启与否、内存的频率等,这些都记录在B IOS当中,所以开机之后系统会先去寻找BIOS。

(2)读取MBR中的Boot loader。

个人计算机的系统在读完BIOS之后,会先去读取硬盘的第一个扇区MBR(master boo t record),而这个扇区主要就是记录开机的信息,Boot loader(GRUB或LILO)的记录就是在这里,所以这个时候Boot loader记录的信息就会被读出来,系统根据Boot loader中信息选择不同的系统开机,这也即是多重开机设定的地方。

(3)载入内核(Kernel)。

假设在Grub的选单中选择了Linux这个系统,然后主机进入Linux所在的硬盘之下,就开始将它的内核载入。在Linux系统下,通常开机的内核都摆在/boot目录下,因此,这个时候的Boot loader就会到/boot去寻找相关的内核。kernel名称通常就是/boot/vm linuz-xxxx的格式,目前Fedora的内核版本为2.6.19,预设内核文件就是:/boot/vmli nuz-2.6.19-16mdk,载入这个文件。

(4)内核执行init并由/etc/inittab取得系统运行级别。

内核加载之后,由内核执行的第一个程序就是/sbin/init,以启动系统的init进程。该进程是Linux系统中运行的第一个进程,其进程号(PID)始终为1,该进程将根据/etc/initab配置文件的要求执行相应的启动程序,以引导运行系统所需的其他进程,并进入指定的系统运行级别。init进程是其他进程的父进程。而Linux共有几种系统运行级别呢?如果进入Linux的/etc/inittab文件的话,应该会看到如下的信息:

[root @test /root]# vi /etc/inittab

# 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 networkin g) 多人但无网络,类似3模式,不过少了NFS服务

# 3 - Full multiuser mode 文字界面登入的多人系统

# 4 - unused 系统保留

# 5 - X11 X-Windows 图形界面登入的多人系统

# 6 - reboot (Do NOT set initdefault to this) 重新开机

#

id:3:initdefault:

上面显示的就是目前系统运行级别(run-level),共有 0~6 的运行级别,其中,我们比较常使用的是3与5。预设的系统运行级别就是最后一行所确定的『id:3:initdefault:』。

(5)init 的第一个执行内容 /etc/rc.d/rc.sysinit。

确定了运行级别之后,再来当然就是需要将主机的信息读进Linux系统。而Linux系统的第一个数据内容就是/etc/rc.d/rc.sysinit这个文件。这个文件的内容包括了设定预设路径(PATH)、设定主机名称、执行/etc/sysconfig/network 所记录的网络信息、挂载/ proc这个保存在内存当中的主机基本信息、以及其他几个Linux操作系统最基本的几个信息,即它的基本工作是:

①设定预设路径:(PATH)

②设定网络状态:系统会再去读取 /etc/sysconfig/network,并将该文件内的数据,如NETWORKING,FORWARD_IPV4,HOSTNAME,DOMAINNAME,GATEWARY,GATEWAYDEV等设定读入系统中。

③启动系统的置换空间(简单地可以看成是虚拟内存):swapping。

④检查文件系统:这个时候系统会去检查一些可能会存在的目录,例如/fsckoptions与/forcfsck及/fastboot等目录,当系统有不正常关机现象时(例如突然的断电等),那么Linux将会自动地强制去检查root的文件系统。

⑤周边设定与系统设定的参数(/proc ):/proc这个目录是记录在内存当中的,每次开机的时候就会被建置起来。它的主要功能是记录主机的一些接口设备的最新数据状况,例如网络周边设备、输入、输出周边设备等。

⑥设定Plug and Play (PNP)的一些参数数据。

⑦清除/etc/mtab。

⑧mount root及/proc文件系统:将一些数据都设定好之后,需要将数据写下来,这个时候就会将root与/proc数据给mount上文件系统。

⑨决定是否使用模块、加载模块。

10.检查文件系统:与前面相同,当前面的/fastboot检查的旗标开启之后,就会以f sck检查其他扇区。

11.挂上其他文件系统。

12.设定console字型。

13.打开quota。

14.清除不必要的文件,如lock,pid。

15.设定clock。

16.serial port初始化。

17.将开机信息经由dmesg放入/var/log/dmesg中。

如此一来,在/etc/rc.d/rc.sysinit中就已经将基本的系统设定数据都写好了,也将系统的数据完整设定。

(1)启动内核的外挂式模块(/etc/modules.conf)。

由于启动内核越来越智能化,所以可以选择使用模块的型态来进行驱动程序的加载,如果对系统找不到的模块 ( 例如早期的 via-rhine 芯片组 ) 就可以在文件/etc/module s.conf里面写入即可。

(2)init执行run-level的各个scripts:

由于不同的run-level所需要加载的模块并不相同,所以系统早就为不同的run-leve l设定了一些批次档(scripts)来做这件事,而run-level早就在前面的时候从/etc/initt ab当中取得,如果进入到/etc/rc.d的目录中的话,那么将会看到该目录下应该有8个目录和3个文件,目录rc0.d~rc6.d分别代表了各个run-level的scripts!而在这些目录中的文件都是以S及K(大写)为开头的文件,并接两位数的数字与该服务的名称所组合而成的,其中,S(start)开头的表明开机启动,K(kill)开头的表明开机不启动。数字表示启动顺序,数字越小,启动越早。

(3)init执行/etc/rc.d/rc.local该文件记录的是Linux主机个人化设定,如果需要在开机时启动某种服务的话,可以将这对应的指令加入到/etc/rc.d/rc.local,这样当系统启动时,服务就自动启动,而且以后当不需要时只需将文件中对应的指令删除即可。

前面的步骤主机都执行完之后,开机的程序就完全启动了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈