在这一节中,我们将描述Linux 内核的基本体系结构、内部组件和各组件的主要功能,给读者提供对Linux 内核中最主要部分概貌性的介绍。以下描述的每个部件都为网络操作提供了相应服务,可以帮助理解Linux网络体系结构的实现。
图1-1给出了Linux内核的主要组件,Linux内核可以划分为5个组件部分,每个部分的功能定义都非常明确,各组件又为内核的其他组件提供相应的服务。这种划分可以从内核的源码树形结构中看到,在内核源码根目录下每个组件都有自己的目录和子树。
图1-1 Linux内核组件
各组件的主要功能介绍如下。
负责创建、结束进程,管理内核的活动,如软件中断、tasklet等,管理进程间通信,如消息(message)、管道(pipe)等,实现进程调度(schedule)。进程调度是进程管理的重要任务,它处理所有活动的、等待被执行的和被阻塞(blocking)的进程调度,使所有应用和进程合理地共享处理器的运行时间。
内存是系统最主要的资源之一,计算机的性能在很大程度上与其所配备的内存有关。Linux内核内存管理的主要功能就是给进程分配地址空间,该地址空间只允许本进程自己访问。
在Linux操作系统中,文件系统是整个系统的中枢。Linux与其他操作系统不同,几乎所有的操作都基于文件系统接口的处理,如设备驱动程序可以按文件方式访问设备,通过/proc文件系统可以访问Linux内核的数据和参数,这两个功能在调试时非常有效。
在所有的操作系统中,设备驱动程序都是硬件的抽象,通过它可以访问硬件。Linux可以用模块(模块)的方式实现设备驱动程序,提供了在系统运行时动态加载和卸载设备驱动程序的途径。
在Linux中所有的网络操作是由操作系统管理的。这是因为网络操作不能分配给某个进程完成。在处理收到的网络数据包时,数据包的接收是异步事件。接收数据包任务必须在进程处理这些数据包前先收集齐所有的网络包、标识数据,然后向上层传送,这就是为什么由内核的网络子系统负责处理数据包,而不是由某个进程和网络接口来处理。
在内核中还定义了大量的接口,目的是为了更方便地扩展内核功能,如虚拟文件系统接口(Virtual Filesystem Interface),可用于增加新的文件系统,现在Linux中能支持十多种不同的文件系统;可见Linux的开发人员定义这种接口所带来的优势。在Linux的网络体系结构中也定义了很多接口,用以支持动态增加网络协议和网络设备驱动程序。
图1-1中描述的部分组件都提供了接口以便动态向内核注册和注销新的功能,这种动态注册的功能可以很容易地以模块(module)的方式实现。图1-1中虚线中包括的部分就是Linux内核的网络子系统,也是本书要讲解的内容。