计算机中的 DMA是什么技术

什么是DMA?

DMA 的全称是 直接内存访问 。它是一种允许计算机中的外部设备 (如硬盘、网卡、声卡、显卡等)不通过中央处理器(CPU) ,直接与内存(RAM) 进行数据读写操作的技术。

你可以把它想象成一个"数据搬运专员"。在没有DMA的情况下,CPU需要亲自处理所有数据的搬运工作,这就像公司CEO亲自去楼下搬打印纸一样,非常浪费其核心能力。

为什么需要DMA?(解决的问题)

在没有DMA的传统程序控制I/O(PIO) 模式下,数据传送的过程是这样的:

  1. 外部设备(如硬盘)准备好数据。
  2. 设备向CPU发出中断请求。
  3. CPU暂停当前的工作。
  4. CPU执行一小段程序(驱动程序),将数据从设备接口的缓冲区一个字节(或一个字)一个字节地读入CPU的寄存器。
  5. CPU再将寄存器中的数据写入内存。
  6. CPU恢复之前被中断的工作。

这个过程存在两个主要问题:

  1. CPU被严重占用:在整个数据搬运过程中,CPU必须全程参与,无法处理其他更重要的计算任务,导致效率低下。
  2. 速度不匹配:高速的CPU需要等待慢速的I/O设备,造成计算资源的巨大浪费。

DMA是如何工作的?

DMA通过一个专门的硬件控制器------DMA控制器(DMAC)------来解决上述问题。其工作流程大致如下:

  1. 发起请求:当设备(如硬盘)需要传输数据时,CPU先对DMA控制器进行初始化设置,告诉它:

    • 数据的源地址(如设备缓冲区地址)
    • 数据的目标地址(内存中的某个位置)
    • 要传输的数据量是多少
  2. 接管总线:设置完成后,CPU就去忙别的任务了。当设备准备好数据后,它会向DMA控制器发送一个请求(DREQ)。

  3. 申请控制权 :DMA控制器接收到请求后,会向CPU发出一个总线占用请求(HOLD),申请接管系统总线的控制权。

  4. 授权与传输 :CPU完成当前总线周期后,会释放总线控制权,并回应一个总线认可(HLDA) 信号。此时,DMA控制器正式接管系统总线。

  5. 直接传输 :DMA控制器开始直接在内存I/O设备之间搬运数据,完全绕开了CPU。

  6. 完成与中断 :当预定数量的数据全部传输完毕后,DMA控制器会向CPU发出一个中断信号(IRQ),通知CPU:"任务已完成"。

  7. 交还控制权:DMA控制器释放总线控制权,CPU重新接管总线。

在整个数据传输过程中,CPU只在开始(初始化)和结束(处理中断)时参与,中间的核心传输阶段完全解放了出来。

DMA的优点

  1. 大幅提升系统效率:解放了CPU,使其可以专注于计算任务,而不是简单的数据搬运,显著提高了整个系统的吞吐量和并行处理能力。
  2. 降低延迟:减少了数据传递的中间环节,加快了数据传输速度。
  3. 降低功耗:CPU不需要频繁地为I/O操作保持活跃状态。

DMA的应用场景

几乎所有需要大量数据传输的现代计算机部件都会使用DMA技术:

  • 磁盘驱动:从硬盘读写文件。
  • 网络适配器:发送和接收网络数据包。
  • 图形卡:将纹理和数据传输到显存。
  • 声卡:播放和录制音频流。
  • 内存之间:甚至在内存的不同区域之间拷贝大量数据(如某些操作系统操作)。

简单来说,DMA就是一个专门负责"搬数据"的协处理器。它让CPU从繁琐的低级I/O操作中解脱出来,去做它最擅长的计算工作,从而极大地提升了计算机的整体性能和效率。这是现代计算机架构中一项至关重要且基础的技术。

相关推荐
张小潇1 天前
AOSP15 Input专题InputManager源码分析
android·操作系统
Rockbean1 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩1 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
崔小汤呀2 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应2 天前
vi编辑器使用
linux·后端·操作系统
何中应2 天前
Linux进程无法被kill
linux·后端·操作系统
何中应2 天前
rm-rf /命令操作介绍
linux·后端·操作系统
何中应2 天前
Linux常用命令
linux·操作系统
葛立国2 天前
从 / 和 /dev 说起:Linux 文件系统与挂载点一文理清
linux
海天鹰2 天前
【免费】PHP主机=域名+解析+主机
服务器