目录
一:概述
本文深入探讨 Linux 内存管理子系统,重点介绍对设备驱动程序编写者有用的技术。许多类型的驱动程序编程都需要对虚拟内存子系统的工作原理有一定的了解;当我们编写一些更复杂、对性能要求更高的驱动时,本文所涉及的内容就会派上用场。虚拟内存子系统也是 Linux 核心内核中非常有趣的一部分,因此值得一看。本文内容分为三节:
第一节涉及 mmap 系统调用的实现,该调用允许将设备内存直接映射到用户进程的地址空间。将设备内存直接映射到用户进程的地址空间。虽然并非所有设备并都需要 mmap 支持,但对于某些设备,映射设备内存可以显著提高性能。
第二节我们将讨论直接从内核态访问用户态内存页面的问题,需要这种功能的驱动程序相对较少;在一般情况下,内核会自动执行这种映射,而驱动程序不会感知到这一点。不过,了解如何将用户空间内存映射到内核(使用 get_user_pages)还是很有用的。
第三节我们讨论直接内存访问(DMA)I/O 操作,它为外部设备提供了直接访问系统内存的能力。