Linux 内核主要由 5 个模块构成,它们分别是:
进程调度模块 用来负责控制进程对 CPU 资源的使用。所采取的调度策略是各进程能够公平合理地访问 CPU,同时保证内核能及时地执行硬件操作。
内存管理模块 用于确保所有进程能够安全地共享机器主内存区,同时,内存管理模块还支持虚拟内存管理方式,使得 Linux 支持进程使用比实际内存空间更多的内存容量。并可以利用文件系统把暂时不用的内存数据块会被交换到外部存储设备上去,当需要时再交换回来。
文件系统模块 用于支持对外部设备的驱动和存储。虚拟文件系统模块通过向所有的外部存储设备提供一个通用的文件接口,隐藏了各种硬件设备的不同细节。从而提供并支持与其它操作系统兼容的多种文件系统格式。
进程间通信模块 子系统用于支持多种进程间的信息交换方式。
网络接口模块 提供对多种网络通信标准的访问并支持许多网络硬件。
这几个模块之间的依赖关系见图 2-3 所示。其中的连线代表它们之间的依赖关系,虚线和虚框部分表示 Linux 0.11 中还未实现的部分(从 Linux 0.95 版才开始逐步实现虚拟文件系统,而网络接口的支持到 0.96 版才有)。
由图可以看出,所有的模块都与进程调度模块存在依赖关系。因为它们都需要依靠进程调度程序来挂起(暂停)或重新运行它们的进程。
通常,一个模块会在等待硬件操作期间被挂起,而在操作完成后才可继续运行。例如,
当一个进程试图将一数据块写到软盘上去时,软盘驱动程序就可能在启动软盘旋转期间将该进程置为挂起等待状态,而在软盘进入到正常转速后再使得该进程能继续运行。
另外 3 个模块也是由于类似的原因而与进程调度模块存在依赖关系。其它几个依赖关系有些不太明显,但同样也很重要。
进程调度子系统需要使用内存管理器来调整一特定进程所使用的物理内存空间。
进程间通信子系统则需要依靠内存管理器来支持共享内存通信机制。这种通信机制允许两个进程访问内存的同一个区域以进行进程间信息的交换。
虚拟文件系统也会使用网络接口来支持网络文件系统(NFS),同样也能使用内存管理子系统来提供内存虚拟盘(ramdisk)设备。
而内存管理子系统也会使用文件系统来支持内存数据块的交换操作。
若从单内核模式结构模型出发,我们还可以根据 Linux 0.11 内核源代码的结构将内核主要模块绘制
成图 2-4 所示的框图结构。
其中内核级中的几个方框,除了硬件控制方框以外,其它粗线方框分别对应内核源代码的目录组织
结构。
除了这些图中已经给出的依赖关系以外,所有这些模块还会依赖于内核中的通用资源。这些资源包
括内核所有子系统都会调用的内存分配和收回函数、打印警告或出错信息函数以及一些系统调试函数。
Linux-0.11文件系统介绍