没有合适的资源?快使用搜索试试~ 我知道了~
第十三章 Li nux 启动系统操作系统的启动过程既让人好奇,又让人费解。我们知道,没有操作系统的计算机是无法使用的,那么是谁把操作系统装入到内存,是操作系统自
资源详情
资源评论
资源推荐
– 477 –
第十三章 Linux 启动系统
操作系统的启动过程既让人好奇,又让人费解。我们知道,没有操作系统的计算机是无
法使用的,那么是谁把操作系统装入到内存,是操作系统自己吗?这显然是一个先有鸡还是
先有蛋的问题,幸好,固化在 ROM(PC 机)中的 BIOS 帮了大忙,可以说,BIOS 是整个启动
过程的先锋。实际上,尽管一台计算机的启动过程仅仅是昙花一现,但它并不简单。本章将
讨论基于 i386 平台的操作系统的启动过程,其相关的保护模式的知识请参见第二章。
13.1 初始化流程
每一个操作系统都要有自己的初始化程序,Linux 也不例外。那么,怎样初始化?我们
首先看一下初始化的流程。
加电或复位
BIOS
的启动
Boot Loader
操作系统
初始化
图 13.1 初始化流程
图 13.1 中的加电或复位这一项代表操作者按下电源开关或复位按钮那一瞬间计算机完
成的工作。BIOS 的启动是紧跟其后的基于硬件的操作,它的主要作用就是完成硬件的初始化,
稍后还要对 BIOS 进行详细的描述。BIOS 启动完成后,Boot Loader 将读操作系统代码,然后
由操作系统来完成初始化剩下的所有工作。
深入分析
Linux
内核源代码
– 478 –
13.1.1 系统加电或复位
当一台装有 Intel 386 CPU 的计算机系统的电源开关或复位按钮被按下时,通常所说的
冷启动过程就开始了。中央处理器进入复位状态,它将内存中所有的数据清零,并对内存进
行校验,如果没有错误,CS 寄存器中将置入 FFFF[0],IP 寄存器中将置入 0000[0],其实,
这个 CS:IP 组合指向的是 BIOS 的入口,它将作为处理器运行的第一条指令。系统就是通过这
个方法进入 BIOS 启动过程的。
13.1.2 BIOS 启动
BIOS 的全名是基本输入输出系统(Basic Input Output System)。它的主要任务是提
供 CPU 所需的启动指令。刚才提到了,计算机进入复位状态后,内存被自动清零,CPU 此时
是无法获得指令的。计算机的设计者们当然考虑到了这一点,因此,他们预先编好了供系统
启动使用的启动程序,把它们存放在 ROM 中,并安排它到一个固定的位置,即 FFFF:0000,
CPU 就从 BIOS 中获得了启动所需的指令集。该指令集除了完成硬件的启动过程以外,还要将
软盘或硬盘上的有关启动的系统软件调入内存。
让我们看一看 BIOS 中启动程序的主要任务:首先是上电自检(POST Power-On Self
Test),然后是对系统内的硬件设备进行监测和连接,并把测试所得的数据存放到 BIOS 数据
区,以便操作系统在启动时或启动后使用,最后,BIOS 将从软盘或硬盘上读入 Boot Loader,
到底是从软盘还是从硬盘启动要看 BIOS 的设置,如果是从硬盘启动,BIOS 将读入该盘的零
柱面零磁道上的 1 扇区(MBR),这个扇区上就存放着 Boot Loader,该扇区的最后一个字存
放着系统标志,如果该标志的值为 AA55,BIOS 在完成硬件监测后会把控制权交给 Boot
Loader。
除了启动程序以外,BIOS 还提供一组中断以便对硬件设备的访问。我们知道,当键盘上
的某一键被按下时,CPU 就会产生一个中断并把这个键的信息读入,在操作系统没有被装入
以前(如 Linux 的 Bootsect.S 还没有被读入)或操作系统没有专门提供另外的中断响应程序
的情况下,中断的响应程序就是由 BIOS 提供的。
这里介绍一个具体的 BIOS 系统,它的上电自检(POST)程序包含 14 个项目,具体内容
如表 13.1 所示,执行过 POST 后,该系统将调入硬盘上的 Boot Loader。
表 13.1 POST 程序包含的 14 个项目
序号 相应内容 序号 相应内容
1 CPU 处理器内部寄存器测试 8 键盘复位和测试
2 32K RAM 存储器测试 9 键盘复位和测试
3 DMA 控制器测试 10 附加 RAM 存储器测试
4 32K RAM 存储器测试 11 其他包含在系统中的 BIOS 测试
5 CRT 视频接口测试 12 软盘设备测试
6 8259 中断控制器测试 13 硬盘设备测试
第十三章
Linux
启动系统
– 479 –
7 8253 定时器测试 14 打印机接口和串行接口测试
BIOS 中的中断程序、BIOS 数据区中的信息这里就不作详细介绍了,如果你想进一步了
解,请查阅相关资料,在本章后面的内容中,只会对所要涉及到的部分 BIOS 内容进行详细解
释。
13.1.3 Boot Loader
Boot Loader 通常是一段汇编代码,存放在 MBR 中,它的主要作用就是将系统启动代码
读入内存,有关这方面的内容相当复杂,这里请你先记住它的功能,至于详细情况,比如,
怎样把系统读入,后面将会介绍。
13.1.4 操作系统的初始化
这部分实际上是初始化的关键。Boot Loader 将控制权交给操作系统的初始化代码后,
操作系统所要完成的存储管理、设备管理、文件管理、进程管理等任务的初始化必须马上进
行,以便进入用户态。其实不管是单任务的 DOS 操作系统还是这里介绍的多任务 Linux 操作
系统,当启动过程完成以后,系统都进入用户态,等待用户的操作命令。而 Linux 要到达这
个状态是相当复杂的一件工作,这一章主要就是围绕这部分内容写而。
13.2 初始化的任务
13.2.1 处理器对初始化的影响
每个操作系统都是基于计算机的硬件设备的,不管它的设计,实现,还是特性,都要依
赖于一定的硬件。所有的硬件中,中央处理器(CPU)对它的影响最大。我们知道,Linux 是
一个可以运行于多个不同平台的操作系统,但这并不意味着它可以抛开不同种类计算机的硬
件特性。事实上,Linux 是靠在不同机器上运行不同的代码来实现跨平台特性的。Linux 巧妙
地把与设备相关的代码按照设备型号分类安排,以便在编译时把对应的部分编入内核。如果
你看过了在/usr/sur/arch 目录下组织的源文件,就会发现,所有 Intel 386 相关的代码在
一个子目录下,而与 spark 相关的代码在另一个子目录下。代码在编译时会得到关于平台的
信息,根据这个信息,编译器决定到底包含哪一段代码。
以上这些是为了说明一点,即操作系统必须支持硬件设备特别是 CPU 的特性,反过来说,
硬件设备也决定操作系统的特性。
具有代表性的 Intel 80386 处理器大家一定不会陌生,它支持多任务并发执行,它的结
构和机能完全是为此设计的。根据对 80386 保护模式的了解(详见第二章),我们可以看出,
操作系统根据 80386 提供的机制,对计算机的资源(主存储器空间、执行时间及外围设备)
进行分配和保护。通过把这些资源分配给系统中的各个任务,并对资源进行保护,是所有的
深入分析
Linux
内核源代码
– 480 –
任务得以有效的运行直至完成。80386 的存储管理及保护机制,保护(系统中的)每一个任
务不被另外的任务破坏。例如,操作系统通过使用存储管理机制,保证分配给不同任务的存
储区互不重叠(共享存储区域除外);通过使用保护机制,保证系统中任何一个用户任务都
不能访问分配给操作系统的存储区域。
请注意,80386 提供保护机制,也提供段页式的两层内存管理,但在操作系统初始化之
前,它却运行于一个既不支持保护机制,也不支持页机制的实模式下的。在这个模式下,根
本没法实现多任务并发处理,所以,在一个要求实现多任务并发处理的操作系统的初始化程
序中,就必须加入使 80386 进入保护模式的代码。这就是处理器对启动任务影响的一个例子。
13.2.2 其他硬件设备对处理器的影响
除了处理器以外,许多硬件设备也对初始化产生影响,刚才介绍的 BIOS 就在很大程度
上影响初始化的步骤。另外,每加入一种新的硬件设备,为了它能被正常使用,你必须在操
作系统中对它进行配置(PC 机的标准配置设备除外)。你或许要提到 Windows 的即插即用技
术,事实上,即插即用设备是由操作系统自动完成配置的,而不是不需要配置,所以,如果
你编制的是 Windows 的初始化程序,那么你需要在你的代码中加入支持自动配置即插即用设
备的代码。
硬件对初始化的影响并不仅仅局限于这些方面,由于硬件在计算机系统中的中心地位,
它对初始化的的影响是从始至终的。
13.3 Linux 的 Boot Loader
从这里开始,我们将对 Linux 的启动过程进程分析。首先要介绍的是 Boot Loader,因
为 Boot Loader 比较复杂,并且与启动密不可分。但是要想了解 Boot Loader 的内在机制,
必须从了解磁盘结构开始。
13.3.1 软盘的结构
软盘是由一个引导扇区,一个管理块(比如说 MS 的 FAT 或 EXT2 的 inode)和一个基本
数据区的形式组织在一起的。由于管理块是与特定文件系统相关的,我们也可以把它归为数
据区的一部分,软盘的结构如图 13.2 所示。
如果你想了解有关 inode 或数据区的相关知识,请参看第八章和第九章。在这里,我们
主要关心的是引导扇区。
引导扇区中存放着用于启动的代码,以及一些有关特定文件系统的信息,在它的最后,
存放着一个启动标志,如果它是 0xAA55,代表这个引导扇区是可用于启动的。
MS-DOS 的引导记录及记录内各个项目的偏移如图 13.3 所示,Linux 引导记录跟它大体
一致,只是没有磁盘参数表。
剩余22页未读,继续阅读
张盛锋
- 粉丝: 25
- 资源: 297
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0