计算机中的 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操作中解脱出来,去做它最擅长的计算工作,从而极大地提升了计算机的整体性能和效率。这是现代计算机架构中一项至关重要且基础的技术。

相关推荐
你好潘先生21 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
orion571 天前
Missing Semester Class1:course overview and introduction of shell
linux
用户120487221612 天前
Linux驱动编译与加载
linux·嵌入式
程序员老赵2 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
饼干哥哥2 天前
ChatGPT会员掉了,代充黑幕藏不住了
人工智能·操作系统·产品
vivo互联网技术2 天前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页
用户805533698032 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式
用户805533698032 天前
RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设
linux·github·嵌入式
小宇子2B2 天前
五、内核里的 GS / swapgs,与现代 TSS
操作系统