参照 Linux内核修炼之道.pdf
(1)系统调用接口。
为了与用户应用程序进行交互,内核提供了一组系统调用接口,通过这组接口,应用程序可以访问系统硬件和各种操作系统资源。
系统调用接口层在用户应用程序和内核之间添加了一个中间层,形象地说,它扮演了一个函数调用多路复用和多路分解器的角色。
(2)进程管理。
进程管理负责创建和销毁进程,并处理它们之间的互相联系(进程间通信),同时负责安排调度它们去分享 CPU。 进程管理部分实现了一个进程世界的抽象,这个进程世界类似于我们的人类世界,只不过我们人类世界里的个体是人,而在进程世界里则是一个一个的进程,人与人之间通过书信、手机、网络等进行交互,而各个进程之间则是通过不同方式的进程间通信,我们所有人都在分享同一个地球,而所有进程都在分享一个或多个 CPU。
(3)内存管理。
在进程世界里,内存是重要的资源之一,就好比我们的土地。因此,管理内存的策略与方式是决定系统性能的一个关键因素。 内核的内存管理部分根据不同的需要,提供了包括 malloc/free 在内的许多简单或者复杂的接口,并为每个进程都提供了一个虚拟的地址空间,基本上实现虚拟内存对进程的按需分配。
(4)虚拟文件系统。
虚拟文件系统为用户空间提供了文件系统接口,同时又为各个具体的文件系统提供了通用的接口抽象。在 VFS 上面,是对诸如 open、close、read 和 write 之类函数的
一个通用 API 抽象,在 VFS 下面则是具体的文件系统,它们定义了上层函数的实现方式。 通过虚拟文件系统,我们可以利用标准的 Linux 文件系统调用对不同介质上的不
同文件系统进行操作。应该说,VFS 是内核在各种具体的文件系统上建立的一个抽象层,它提供了一个通用的文件系统模型,而该模型囊括了我们所能想到的所有文件系
统的行为。
(5)网络功能。
网络子系统处理数据包的收集、标识、分发,路由和地址的解析等所有网络有关的操作。socket 层是网络子系统的标准 API,它为各种网络协议提供了一个用户接口。
(6)设备驱动程序。
操作系统的目的是为用户提供一种方便访问硬件的途径,因此,几乎每一个系统操作最终都会映射到物理的硬件设备上。除了 CPU、内存等有限的几个对象,所有设
备的访问控制操作都要由相关的代码来完成,这些代码就是所谓的设备驱动程序。
(7)依赖体系结构的代码。
前面讲到,部分内核代码是体系相关的,./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分,其中包含了对应各种特定体系结构的子目录。比如,对于一
个典型的桌面系统来说,使用的是 i386 目录。 每个特定体系结构对应的子目录又包含了很多下级子目录,分别关注内核中的一个特定方面,比如引导、内核、内存管理等。
联系客服