后一页 前一页 目录

4. Linux 内核

内核干了很多工作。我认为宏观的说内核让程序合理并且高效的控制硬件。

处理器每次只能执行一条指令,但是Linux表面上看起来同是运行了很多东西。内核用快速切换任务的方式来实现这样的效果。它把处理器的能力发挥到极致,通过不断监视哪个进程可以行、那个进程在等待(比如等待硬盘读取文件、键盘输入等等)。这些内核的工作叫做调度。

如果一个程序什么也不做了,它就不必待在内存里。即使程序正在运行,也可能存在某些部分不在执行。为程序分配的内存空间以页为单位。内核跟踪哪些进程的哪些页使用最频繁。哪些不常用的页面会被移动到交换分区,当需要他们的时候,另外一个不常用的页会交换到硬盘上来给他让位。这就是虚拟内存管理。

如果你曾经编译过自己的内核,你会注意到每个设备都有很多选项。内核包括了很多特别的代码用于和多种多样的硬件沟通,并且以很规范的方式提供给应用程序。

内核还管理文件系统、进程间通信还有很多网络功能。

一旦内核被读入,它会先寻找init程序来运行。

4.1 配置

大部分内核配置在你建立它的时候已经完成,使用make menuconfig,或者make xconfig 在你内核源文件存放的地方。你可以用rdev来重新设置默认的视频模式,根文件系统,交换分区,和内存中虚拟盘的大小。包括这些参数在内的很多参数将同过lilo传给内核。你可以直接传参数给lilo或者用lilo.conf,都可以把信息传给内核。举个例子如果你想用hda3来作为你的根目录而不是用hda2,你可以键入

        LILO: linux root=/dev/hda3

如果你正在从源代码建立一个系统,你可以通过建立一个“monolithic”的内核来使过程变得很轻松。它没有模块,这样你就不用拷贝内核模块到目标系统了。

注意:内核记录器要使用System.map来确定模块生成信息。程序也要用到这些信息。当你把内核复制到目标系统时,把System.map一起拷贝过去。

4.2 练习

思考如下问题:/dev/hda3是一个用来描述硬盘的特殊文件。但是他在文件系统里面貌似和其他文件没什么区别。内核想知道在哪个分区上安装根文件系统——但这时还根本没有文件系统,它是如何读取/dev/hda3并找到要安装的分区的?

如果你还没有建立你自己的内核,阅读所有选项的帮助信息。

看看你可以把内核做的多小。你可以从错误中学到很多!

阅读“The Linux Kernel”,同时找到相应的源代码。这本书基于2.0.33版内核。已经过时了。老版本的内核相对容易理解,如果你下载了源代码,你会非常高兴的发现用c语言写的“进程”和“分页”函数。

Hack! 看看你能不能让它显示些别的信息或者做些其他事。

4.3 更多信息


后一页 前一页 目录