直接内存访问 (DMA):功能、作和应用

9月 16 2025
来源: DiGi-Electronics
浏览: 5919

直接内存访问 (DMA) 是一种使计算机能够更有效地传输数据的方法。DMA 控制器不是 CPU 处理每次传输,而是直接在内存和设备之间发送数据。这样可以节省时间,降低功耗,并允许 CPU 专注于其他任务。

Direct Memory Access (DMA): Features, Operation, and Applications

直接内存访问概述

直接内存访问 (DMA) 是计算机用来更有效地移动数据的方法。CPU 负责监督将信息从计算机内部的一个位置发送到另一个位置。这需要时间,并且会让 CPU 忙于小任务。

使用 DMA,系统中称为 DMA 控制器的特殊部分接管了这项工作。它允许设备直接从计算机内存发送或接收数据,而无需让 CPU 处理每一步。在传输过程中,CPU 可以自由地继续处理其他任务。

这种设置使系统运行更流畅,因为 CPU 不会因不断的数据移动而减慢速度。它还有助于节省电量并提高计算机的整体性能。

直接内存访问功能

高速数据传输

DMA 允许快速传输大型数据块,无需 CPU 参与,从而提高吞吐量。

CPU卸载

CPU 从重复的数据移动任务中解放出来,可用于计算。

减少中断开销

与编程I/O相比,DMA最大限度地减少了中断次数,从而降低了系统开销。

直接内存

外设可以直接从内存读取或写入内存,从而避免额外的 CPU 介导的副本。

多通道支持

现代 DMA 控制器支持多个独立通道,支持并发传输。

突发传输能力

DMA 支持突发模式,以一个连续的流传输数据块以提高效率。

优先权和仲裁

DMA 控制器使用优先级来决定哪个通道可以访问内存总线。

传输模式

根据系统需求支持单次、块式、突发式和基于需求的传输等不同模式。

与多总线的兼容性

可与各种系统总线配合使用,实现灵活集成。

错误检测与处理

许多 DMA 系统包括奇偶校验或纠错功能,以确保数据完整性。

内存到内存传输

一些 DMA 控制器支持将数据从一个内存位置直接复制到另一个内存位置,而无需 CPU 干预。

逐步 DMA作

步骤会发生什么?信号/行动
1设备请求 DMA 服务。DRQ(DMA 请求)行已激活
2DMA 控制器请求控制系统总线。BR(巴士请求)
3CPU 暂时将总线释放到 DMA 控制器。BG(巴士补助金)
4DMA 控制器设置要传输的内存地址和字数(数据单元)。地址和计数寄存器
5数据直接在 I/O 设备和 RAM 之间传输,绕过 CPU。直接转账
6完成后,DMA 控制器会通知 CPU。INTR(中断)

DMA控制器及其连接

DMA Controller and Its Connections

主要部分是CPU、内存、DMA控制器和输入/输出(I/O)设备。DMA 控制器监督内存和 I/O 设备之间的数据移动,而无需 CPU 完成所有工作。

当 I/O 设备需要发送或接收数据时,它会向 DMA 控制器发送请求。然后,控制器请求 CPU 允许使用系统总线,这是计算机内部数据的主要途径。一旦 CPU 允许,DMA 控制器就会控制并直接在内存和 I/O 设备之间传输数据。传输完成后,它会通知 CPU 作业已完成。

该图还显示了携带信息的不同线。地址线(灰色)决定数据的去向,数据线(绿色)携带实际信息,控制线(橙色)管理流程。DMA 总线将多个 I/O 设备连接到控制器。此设置有助于系统更顺畅地处理数据,并使 CPU 能够腾出时间用于其他任务。

DMA传输模式及其差异

模式运作方式速度CPU 影响
连拍模式以一个连续的顺序传输整个数据块非常高CPU 停止,直到传输结束
自行车偷窃每个总线周期传输一个字,与 CPU 周期交错CPU 略有变慢,但没有停止
透明模式仅当 CPU 空闲或未使用总线时传输CPU 不间断运行

DMA 主要样式

总线母带处理(第一方 DMA)

在总线主控中,设备本身暂时承担系统总线控制器的角色。这意味着它可以直接读取或写入内存,而无需持续的 CPU 监督。由于设备管理自己的传输,因此该过程非常快速和高效。PCIe GPU、NVMe 驱动器和网卡等现代高性能组件经常使用这种方法。在这些传输过程中,CPU 大部分是空闲的,这提高了整体系统性能。

第三方DMA(基于控制器)

在此模型中,中央 DMA 控制器负责代表多个设备处理数据传输。每个设备将其请求发送到控制器,然后控制器控制总线以移动数据。这种方法是早期计算机系统的标准,并且在硬件必须保持简单且经济高效的嵌入式微控制器中仍然很常见。它比总线母带处理慢,因为所有设备共享同一个控制器,这会带来等待时间和开销。

散射聚集 DMA

在许多情况下,内存中的数据不会存储在一条直线上。它可以分成不同的地方。分散-收集 DMA 可以一次移动所有这些数据,即使它是分散的。

DMA 控制器保留每条数据所在位置的列表。然后,它按照该列表收集碎片并将它们作为单个块转移。

分散聚集 DMA 的好处

• 移动分散的数据,无需额外步骤。

• 需要更少的 CPU 信号。

• 使数据传输更快、更顺畅。

• 通过避免额外的副本来节省内存空间。

DMA 和缓存同步

DMA 直接在设备和内存之间移动数据,而 CPU 通常使用自己的缓存。因此,CPU 和 DMA 有时可以看到同一数据的不同版本。这是一个问题,因为如果 CPU 缓存仍有旧数据,则设备所做的更改可能会被忽略。如果 CPU 的缓存中只有新数据,则设备可能会从内存中读取过时的值。它通过以下方式固定:

• CPU 可以在设备读取之前刷新缓存,因此内存具有最新的数据。

• CPU 可以在设备写入后使缓存失效,因此它会从内存中加载更新的数据。

• 现代处理器使用缓存一致性 DMA,它会自动处理此问题。

IOMMU 在 DMA 安全中的作用

特征功能好处
地址映射将设备 DMA 请求转换为有效的内存地址防止意外或有害的数据损坏
隔离将每个设备限制在其分配的内存区域保护系统免受故障或恶意设备的侵害
64 位支持将寻址扩展到 32 位限制之外支持具有大内存需求的现代设备

安全问题:DMA 攻击和保护

安全风险

• 通过未经授权的 DMA 访问窃取数据。

• 恶意软件注入系统内存。

• 霹雳邪恶女仆对笔记本电脑的攻击。

2 保护

• 启用 IOMMU / VT-d / AMD-Vi。

• 使用内核 DMA 保护 (Windows)。

• 禁用未使用的外部端口。

• 使用安全核心 PC 和 BIOS/UEFI 限制。

DMA 的不同应用

磁盘和存储传输

DMA 允许硬盘驱动器、SSD 和光驱将大块数据直接移动到内存中,而不会给 CPU 带来负担。

网络接口

网卡使用 DMA 快速传输传入和传出数据包,从而在不降低处理器速度的情况下实现高速通信。

音频和视频处理

声卡、图形处理器和视频捕获设备依靠 DMA 以最小的延迟处理连续数据流。

嵌入式系统

微控制器使用 DMA 来卸载重复的数据移动(如 ADC 读数或 UART 缓冲区),从而释放 CPU 周期用于控制任务。

图形渲染

GPU 应用 DMA 进行纹理加载和帧缓冲区更新,支持游戏和视觉应用程序中的平滑渲染。

结论

直接内存访问 (DMA) 通过直接在内存和设备之间移动数据来提高计算机效率,而无需依赖 CPU。这减少了延迟,降低了功耗,并允许在存储、网络和图形等任务中更流畅地运行。凭借内置的错误处理和安全功能,DMA 仍然是快速高效数据传输的可靠方法。

常见问题 [FAQ]

DMA 与编程 I/O 有何不同?

DMA 使用控制器传输数据,而编程 I/O 每次传输都依赖于 CPU。

DMA 如何节省电量?

它将 CPU 从持续传输中解放出来,使其能够更频繁地进入低功耗状态。

DMA可以访问哪些内存?

DMA 可以访问系统 RAM、视频内存、缓冲区内存,有时还可以在内存区域之间复制数据。

DMA 可以同时处理多个设备吗?

是的,DMA 控制器使用优先级和仲裁来决定哪个设备首先传输。

DMA 的主要限制是什么?

它对于小型传输效率低下,并且如果没有适当的同步,可能会导致缓存不一致。

为什么 DMA 在实际系统中很重要?

它提供快速、低延迟的数据传输,因此 CPU 可以专注于时间紧迫的任务。