Linux 内核由几个重要的部分组成:进程管理、内存管理、硬件设备驱动程序、文件系统驱动程序、网络管理以及其他各种组件。图 2-1 展示了其中的一部分。
内核中最重要的部分(没有它们任何东西都无法工作)可能是内存管理和进程管理。内存管理负责为进程、内核的各个部分以及缓冲区缓存分配内存区域和交换空间区域。进程管理创建进程,并通过切换处理器上的活动进程来实现多任务处理。
在最底层,内核包含每种它支持的硬件的硬件设备驱动程序。由于世界上存在各种不同的硬件,因此硬件设备驱动程序的数量很大。通常有很多其他方面相似的硬件,它们在如何被软件控制方面有所不同。相似之处使得可以拥有支持类似操作的通用驱动程序类;该类中的每个成员都具有与内核其余部分相同的接口,但在实现这些操作时需要执行的操作有所不同。例如,所有磁盘驱动程序对于内核的其余部分看起来都一样,也就是说,它们都具有诸如“初始化驱动器”、“读取扇区 N”和“写入扇区 N”之类的操作。
内核本身提供的一些软件服务也具有类似的属性,因此可以抽象成类。例如,各种网络协议已被抽象成一个编程接口,即 BSD socket 库。另一个例子是虚拟文件系统 (VFS) 层,它将文件系统操作从其实现中抽象出来。每种文件系统类型都提供了每个文件系统操作的实现。当某些实体尝试使用文件系统时,请求会通过 VFS,VFS 会将请求路由到正确的文件系统驱动程序。
关于内核内部结构的更深入讨论可以在 http://www.tldp.org/LDP/lki/index.html 找到。该文档是为 2.4 内核编写的。当我找到 2.6 内核的文档时,我将在此处列出。