linux内核注释-第4章系统初始化
- 桑蚕
-
260 次阅读
-
326 次下载
- 共 10 页(0.15 M)
-
2022-05-02 22:37:51
点此付费下载 ¥ 2 知币
无需注册也可下载,点击付费按钮在弹框页面选择 "扫码直接下载”
在线预览效果若不佳,推荐下载后阅读 建议在PC浏览器扫码下载
文档简介(最多显示3000字):
第4章系统初始化-34-第第4章章系统初始化系统初始化当你想要运行程序时,你需要把程序的文件名敲入shell――或者更为流行的,在如GNOME或者KDE等之类桌面环境中点击相应的图标――这样就能将其装载进内核并运行。但是,首先必须有其它的软件来装载并运行内核;这通常是诸如LOADLIN或者LILO之类的内核引导程序。更进一步,我们还需要其它的软件来装载运行内核引导程序――称之“内核引导程序的引导程序”――而且看起来似乎运行内核引导程序的引导程序也需要内核引导程序的引导程序的引导程序,等等,这个过程是无限的。这个无限循环的过程必然最终在某个地方终止,这就是硬件。因此,在最低的层次上,启动系统的第一步是从硬件中获得帮助。该硬件总是运行一些短小的内置程序――软件,但是这些软件是被固化在只读存储器中,存储在已知地址中。因此,在这种情况下就不需要软件引导程序了――它能够运行更大更复杂的程序,直到内核自身装载成功为止。按照这种方式,系统自己的引导过程(bootstrap)会引发系统的启动,当然这只是术语“系统引导(booting)”的一个比喻。虽然不同体系结构的引导过程的具体细节差异很大,但是它们的原则都基本相同。前面的工作都完成以后,内核就已经成功装载了。随后内核可以初始化自身以及系统的其它部分。本章首先将简单介绍基于x86PC机的典型自启动方式,接着回顾一下每一步工作在什么时机发生,最后我们还要介绍的是内核的相应部分。引导引导PC机机本节简要介绍x86PC是如何引导的。本节的目的不是让你精通PC是怎样引导的――这超出了本书的范围――而是向你展示特定体系结构一般的引导方式,为下文中的内核初始化进行铺垫。首先,机器中的每个CPU都要自行初始化,接着可能要用几分之一秒的时间来执行自测试。在多处理器的系统中,这个过程会更复杂些――但是实际上也并不多。在双处理器的Pentium系统中,一个CPU总是作为主CPU存在,另外一个CPU则是辅CPU。主CPU执行启动过程中的剩余工作,随后内核才会激活辅CPU。在多处理器的PentiumPro系统中,CPU必须根据Intel定义的算法“抢夺标志”――来动态决定由哪个CPU启动系统。取得标志的CPU启动系统,随后内核激活其它的CPU。无论是哪种情况,启动程序的剩余部分只与一个CPU有关。这样,在随后的一段时间内,我们可以认为该系统中只有一个CPU是可用的,而不考虑其它的CPU,或者说这些CPU被暂时隐藏了。另一方面,内核还需要明确的激活所有其它的CPU――这一点你可以在本章后续部分看到。接下来,CPU从0xfffffff0单元中取得指令并执行,这个地址非常接近于32位CPU的最后可用的地址。因为大多数PC都没有4GB的RAM,所以通常在这个地址上并没有实际内存的。内存硬件可以虚拟使用它。对那些确实有4GB内存的机器来说,它们也只是仅仅损失了供BIOS使用的顶端地址空间末尾的少量内存(实际上BIOS在这里只保留了64K的空间――这种损失在4GB的机器中是可以忽略的)。该地址单元中存储的指令是一条跳转指令,这条指令跳转到基本输入输出(BIOS)代码的首部。BIOS内置在主板中,它主要负责控制系统的启动。请注意CPU实际上并不真正关心BIOS是否存在,这样就使得在诸如用户定制的嵌入系统之类的非PC体系结构的计算
评论
发表评论