第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
14. 分层驱动程序接口 (Layered Driver Interface, LDI)
设备运行的平台可提供直接内存访问 (direct memory access, DMA) 或直接虚拟内存访问 (direct virtual memory access, DVMA)。
在支持 DMA 的平台上,系统会为设备提供物理地址以执行传送。在此情况下,DMA 对象的传送实际上会包含许多在物理上不连续的传送。例如,当应用程序传送跨越若干连续虚拟页(但这些虚拟页映射到物理上不连续的页)的缓冲区时。要处理不连续的内存,用于这些平台的设备通常需要具有特定种类的分散/集中 DMA 功能。通常,x86 系统会为直接内存传送提供物理地址。
在支持 DVMA 的平台上,系统会为设备提供虚拟地址以执行传送。在此情况下,基础平台提供的内存管理单元 (memory management unit, MMU) 会将对这些虚拟地址的设备访问转换为正确的物理地址。设备会与可映射到不连续物理页的连续虚拟映像之间来回进行传送。在这些平台上运行的设备无需分散/集中 DMA 功能。通常,SPARC 平台会为直接内存传送提供虚拟地址。