计算机体系结构中的直接内存访问 (DMA)

2025年3月24日 | 阅读12分钟

什么是 DMA?

Direct Memory Access (DMA)

直接内存访问 (DMA) 是计算机系统中的一项功能或方法,它允许某些硬件组件在无需每次数据传输都请求中央处理单元 (CPU) 的情况下访问系统主内存 (RAM)。DMA 通常用于提高外围设备和内存之间的数据传输效率。

DMA 的功能

直接内存访问控制器的基本工作是能够在不持续需要 CPU 参与的情况下,实现外围设备与系统主内存 (RAM) 之间高效直接的数据传输。DMA 控制器的主要职责如下:

Direct Memory Access (DMA)
  1. 数据传输管理:DMA 控制器负责管理外围设备(如硬盘、网卡或 GPU)与系统内存之间的数据传输。它们可以代表这些设备从内存读取数据或写入数据。
  2. 数据方向控制:DMA 控制器可以设计用于控制数据传输的方向,是从外围设备到内存(读取)还是从内存到外围设备(写入)。
  3. 地址生成:DMA 控制器为数据传输活动生成内存地址。它们可以设置为自动递增或递减内存地址,从而适用于块传输。
  4. 数据块管理:DMA 控制器可以以块(而不是单独的字节或字)的形式传输数据。这提高了效率,因为更大的传输所需的控制信号更少。
  5. 优先级:一些 DMA 控制器支持优先级设置,允许在 DMA 控制器资源竞争时,某些设备或通道优先于其他设备。
  6. 错误处理:为了在传输过程中保持数据完整性,DMA 控制器可能包含错误检测和处理技术。它们可以通知 CPU 发生故障,以便采取必要措施。
  7. 通道管理:DMA 控制器可能包含多个通道或请求线,每个通道都与不同的外围设备相关联。它们负责将这些通道分配给需要 DMA 传输的设备。
  8. 中断生成:数据传输完成后,DMA 控制器可以产生中断通知 CPU,使其能够执行任何传输后活动或处理错误情况。
  9. 总线仲裁:在具有多个 DMA 兼容设备的系统中,DMA 控制器可以执行总线仲裁,以确保竞争设备公平地访问系统总线。
  10. 缓冲:一些 DMA 控制器可能包含用于在传输期间临时存储数据的缓冲区,这有助于平滑外围设备和内存之间数据传输速度的波动。
  11. 周期窃取:在 DMA 功能有限的系统中,DMA 控制器可以以周期窃取模式运行,短暂地控制总线,并在外围设备和内存之间传输少量数据。

DMA 的主要目的是通过将数据传输职责从 CPU 转移出去来提高整体系统速度和效率。DMA 通过允许外围设备直接访问内存来节省 CPU 开销,确保数据传输以硬件支持的最高可行速度进行。这对于涉及大量数据的操作尤其如此,例如磁盘 I/O、网络连接和多媒体处理。

DMA 如何工作?

让我们更详细地解释直接内存访问 (DMA) 的工作原理。

Direct Memory Access (DMA)
  • 初始化:过程始于 CPU 配置 DMA 控制器。CPU 向 DMA 控制器提供关键的数据传输信息,例如源和目标内存地址、要传输的字节数以及传输方向。
  • 外围设备请求:当外围设备(如网卡、磁盘控制器或声卡)需要读取或写入内存时,它会向 DMA 控制器发送请求。
  • 授权:如果 CPU 授予权限(通常通过握手机制或验证优先级设置),DMA 控制器将获得系统总线的控制权。
  • 数据传输:在获得系统总线控制权后,DMA 控制器开始在外围设备和内存之间传输数据。根据操作和设置,它可以以块或流的形式传输数据。
  • 并行操作:重要的是要注意,在数据传输过程中,CPU 可以继续执行其他指令和操作。这种并行过程提高了系统效率,因为 CPU 不会被传输本身占用。
  • 完成通知:数据传输完成后,DMA 控制器会通知请求的外围设备操作已完成。它还可以发出中断通知 CPU,告知传输完成或可能存在任何问题。
  • 总线释放:完成数据传输后,DMA 控制器将释放系统总线的控制权,使 CPU 和其他设备可以按需使用。

DMA 的优势

直接内存访问 (DMA) 在计算机系统中具有多种优势,尤其是在数据传输任务方面。DMA 具有以下几个主要优势:

Direct Memory Access (DMA)
  • 减少 CPU 开销:DMA 的关键优势之一是它减少了 CPU 在数据传输活动中的参与。CPU 可以将这些过程委托给 DMA 控制器,从而腾出时间处理更重要的任务。这种 CPU 开销的减少可以更有效地利用 CPU 的处理能力。
  • 提高系统性能:DMA 可以通过将数据传输活动从 CPU 卸载来提高系统性能。CPU 可以自由地执行更复杂的、对时间敏感的任务,从而使系统运行得更快、响应更灵敏。
  • 更快的 数据传输:DMA 可以以接近硬件支持的最高速度在内存和外围设备之间传输数据。这意味着数据可以快速有效地传输,从而提高系统的总体数据传输速率。
  • 高效的资源利用:DMA 允许多个外围设备同时访问内存,而无需 CPU 介入。这种对系统资源的有效利用确保了多个设备可以并行运行,减少了内存访问拥塞。
  • 简化的数据流:DMA 控制器擅长以块或流的形式处理数据流。这种简化的数据传输方法可以减少延迟并消除瓶颈。
  • 并行操作:DMA 支持并行操作。CPU 可以在数据传输过程中执行其他指令和操作。这种并行处理提高了系统效率。
  • 支持大批量数据传输:DMA 在涉及大量数据的场景中非常有用,例如磁盘 I/O、网络连接和多媒体处理。它确保这些数据传输能够快速进行,而不会给 CPU 带来过重负担。
  • 降低延迟:DMA 控制器可以快速响应外围设备的请求,从而降低数据传输延迟。这对于实时和高性能应用程序尤其关键。
  • 错误处理:为了在传输过程中保持数据完整性,许多 DMA 控制器包含错误检测和修复技术。它们可以通知 CPU 发生故障,以便采取必要措施。
  • 中断生成:数据传输完成后,DMA 控制器可以产生中断通知 CPU。这使得 CPU 能够执行传输后任务或响应潜在问题。

总之,DMA 提供了多项优势,可提高系统效率、加快数据传输速度并更好地利用系统资源。它是现代计算机系统中优化数据传输活动的基本机制。

DMA 的缺点

虽然直接内存访问 (DMA) 具有多项优势,但需要注意以下缺点和限制:

Direct Memory Access (DMA)
  • 复杂性:DMA 控制器及其配置可能很复杂。正确设置 DMA 并确保设备兼容性可能需要专业知识和仔细规划。
  • 硬件支持:DMA 功能依赖于硬件支持。并非所有设备或系统都具备 DMA 功能,并且在某些情况下,其实现可能不如预期有效。
  • 资源争用:在多个设备争夺 DMA 访问权限的系统中,可能会发生资源争用。这种冲突可能导致延迟,并可能损害数据传输效率。
  • 数据损坏风险:不正确设置或处理的 DMA 传输可能导致数据损坏。数据完整性需要仔细编程和错误管理。
  • 中断处理:虽然 DMA 可能减少 CPU 在数据传输中的参与,但它也可能带来新的挑战:控制 DMA 相关中断。这需要更多的 CPU 处理,并可能影响整体系统性能。
  • 灵活性有限:DMA 控制器在管理数据流的能力方面可能受到限制。有些可能不支持特定的传输模式,或者可能限制可以使用 DMA 的设备类型。
  • 安全问题:如果保护不当,DMA 可能被用于恶意目的。例如,DMA 攻击可用于从内存中检索敏感信息。
  • 兼容性问题:在使用旧硬件或专用设备时,DMA 兼容性可能成为一个问题。较旧的 DMA 标准可能不被较新的系统完全支持,确保兼容性可能很困难。
  • 调试复杂性:DMA 传输的调试可能比调试 CPU 绑定任务更困难,因为它们需要更底层的硬件交互。
  • 小传输的开销:对非常小的数据传输使用 DMA 可能比节省的开销更大。在某些情况下,CPU 可能更有效地执行该功能。
  • 编程复杂:DMA 编程可能很复杂,需要仔细控制内存位置、数据大小和传输模式。DMA 编程错误可能导致系统不稳定。
  • CPU 访问延迟:当 DMA 控制器控制系统总线时,CPU 在访问内存时可能会遇到一些延迟。这种延迟可能会影响系统的响应能力。

分析 DMA 在特定应用程序或系统中的优缺点至关重要。在许多情况下,DMA 提供了巨大的好处;然而,仔细的研究和设计对于确保最佳性能和数据完整性至关重要。

DMA 与 RDMA

Direct Memory Access (DMA)

以下是 DMA(直接内存访问)和 RDMA(远程直接内存访问)的表格比较。

方面DMARDMA
全称直接内存访问远程直接内存访问。
基本概念在没有 CPU 干预的情况下,外围设备与系统内存之间高效的数据传输。系统之间(通常通过网络)的高效数据传输,数据直接放入内存,无需 CPU 干预。
主要用例外围设备到内存的数据传输(例如,磁盘 I/O、网卡)——系统内数据传输。高速、低延迟的系统间数据传输——用于集群和分布式计算环境。
CPU 参与度数据传输期间 CPU 参与度极低。数据直接放入内存,无需 CPU 干预。
延迟通常比 CPU 管理的传输延迟更低。极低的延迟,因为数据直接放入内存。
错误处理错误检测和处理通常需要 CPU 干预。先进的错误检测和纠正机制;用于错误处理的 CPU 干预较少。
数据传输通常用于单个计算机系统内部的数据传输。主要用于网络系统之间的数据传输。
沟通通常,在单个计算机系统内。跨网络和数据中心。
复杂度通常比 RDMA 复杂性低。需要专门的硬件和软件支持;设置和配置可能更复杂。
安全担忧对于网络上的数据传输可能安全性较低。由于硬件级别的安全功能和较少的 CPU 参与,通常更安全。
对大批量数据的支持适用于大批量系统内数据传输。非常适合高速、大批量网络数据传输。
硬件支持在具有 DMA 功能组件的各种计算机系统中常见。需要专门的网络硬件和支持(例如,支持 RDMA 的网络适配器和交换机)。
性能优势提高数据传输效率和系统性能。实现网络系统之间的高速、低延迟数据传输。

DMA 的应用

DMA 是优化计算机系统内数据传输过程的重要工具。它在需要高效快速数据传输的各种场景中都有应用。DMA 常用于以下应用:

  • 磁盘 I/O:DMA 广泛用于从硬盘和固态硬盘等存储设备读取和写入数据。它能够加快存储控制器和内存之间的数据传输速度,减少 CPU 开销并提高 I/O 性能。
  • 网络通信:DMA 允许网络接口卡和适配器中的数据在网络接口和内存之间快速流动。这对于需要低延迟快速数据传输的网络应用程序至关重要。
  • 音频和视频处理:在多媒体应用程序中,DMA 对于流式传输和处理音频和视频数据至关重要。它确保数据及时地在内存之间传输,从而实现流畅的播放和导航。
  • 图形处理:显卡经常使用 DMA 在视频内存和系统内存之间传输图形数据。这对于复杂的 3D 图形渲染和视频播放尤其关键。
  • 数据采集:在科学和工业应用中,DMA 用于从传感器、设备或模数转换器收集数据。它确保了快速准确的数据收集。
  • RAM 磁盘:RAM 磁盘使用部分系统 RAM 来模拟硬盘。DMA 用于高效地在 RAM 磁盘和主内存之间传输数据,从而提供极快的读写速度。
  • 打印:在激光打印机和其他高速打印机中,DMA 有助于处理从 CPU 或打印队列到打印机内存或打印缓冲区的打印数据传输。
  • 基于 DMA 的数据传输模式:为了实现比传统方法更快的传输速率,许多外部存储设备(如 USB 驱动器)支持基于 DMA 的数据传输模式。
  • 实时系统:对于控制系统和机器人等关键操作,实时操作系统和应用程序依赖 DMA 来提供及时且可预测的数据流。
  • 视频捕获:在从外部源(例如摄像机、网络摄像头)录制视频时,DMA 有助于将视频帧高效地传输到内存中进行处理和存储。
  • 嵌入式系统:DMA 用于各种嵌入式系统中,以优化数据传输过程并节省 CPU 资源。
  • 数据备份:DMA 在备份和数据复制应用程序中对于在存储设备之间进行快速高效的数据传输至关重要,从而实现及时可靠的备份。
  • 高性能计算 (HPC):DMA 在超级计算和 HPC 系统中对于连接高性能计算节点并实现它们之间的数据快速传输至关重要。
  • 虚拟化:虚拟化平台使用 DMA 在虚拟机和主机系统内存之间高效传输数据,从而提高整体虚拟机性能。

DMA 是一种灵活且必不可少的技术,广泛用于现代计算机系统中,以优化数据传输效率、降低 CPU 开销并提高各种应用的系统性能。

DMA 模式

DMA(直接内存访问)有多种模式或配置,可支持各种数据传输场景。DMA 最常用的模式是:

Direct Memory Access (DMA)
  1. 块传输模式:在块传输模式下,DMA 控制器在一次连续操作中将固定大小的数据块从源移动到目标。此模式通常用于大规模数据传输,例如从存储设备或跨内存区域读取或写入数据块。
  2. 周期窃取模式:DMA 控制器可以使用周期窃取模式,暂时中断 CPU 的操作以每次传输少量数据。在单个总线周期中,它获取系统总线的控制权,传输少量数据,然后释放控制权。此模式适用于数据流较少且不间断的情况。
  3. 突发传输模式:在突发传输模式下,DMA 控制器会长时间占用系统总线,以传输比块传输模式更大的数据块。当需要更有效地传输大量数据时,使用此模式。
  4. 按需传输模式:当外围设备准备好发送数据时,它在按需传输模式下发出 DMA 请求。DMA 控制器负责数据传输并响应请求,这对于以不规则间隔运行的设备非常有用。
  5. 散列表/收集模式:散列表/收集模式是一种先进的技术,用于有效传输非连续数据。在传输过程中,DMA 控制器可以管理分布在多个内存区域中的数据,并将其合并到一个连续的块中。此模式经常用于网络和存储系统。
  6. 链式传输模式:链式传输模式允许我们提前规划一系列 DMA 传输。当一个传输完成时,DMA 控制器会自动进行链中的下一个传输,而无需任何 CPU 交互。此模式对于处理一系列数据传输过程很有用。
  7. 周期窃取突发模式:周期窃取突发模式结合了周期窃取和突发传输模式的优点。由于 DMA 控制器可以在突发之间临时暂停 CPU,因此可以以突发方式传输数据,它适用于各种数据传输应用。

这些 DMA 模式提供了优化各种应用程序和上下文数据传输效率的灵活性,可以实现外围设备和内存之间有效的数据传输管理,同时最大限度地减少 CPU 的干扰。所使用的模式取决于数据传输操作的具体需求以及所用 DMA 控制器的能力。

结论

总之,直接内存访问 (DMA) 是现代计算机系统的基本组成部分,它简化了数据传输、降低了 CPU 开销,并提高了各种应用的系统性能。其不同的模式能够应对广泛的数据传输条件,使其成为数字时代提高效率和速度不可或缺的工具。


下一主题宏处理器