DMA详解:让数据传输“甩掉”CPU的搬运工

🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习

🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发

❄️作者主页:一个平凡而乐于分享的小比特的个人主页

✨收录专栏:操作系统,本专栏为记录项目中用到的知识点,以及一些硬件常识总结

欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

DMA详解:让数据传输"甩掉"CPU的搬运工

一、什么是DMA?

DMA(Direct Memory Access,直接内存访问) 是一种允许硬件子系统直接读写系统内存的技术,无需中央处理器(CPU)的介入。可以把它想象成一个"专业的快递员",能够自主地在内存和设备之间搬运数据,而不需要"老板"(CPU)亲自处理每一个包裹。

传统传输 vs DMA传输对比

对比维度 传统CPU传输 DMA传输
CPU参与度 全程参与,每个字节都需要CPU处理 只需初始设置,传输过程不参与
传输速度 较慢(受CPU指令周期限制) 较快(硬件直接传输,无指令开销)
CPU占用率 高(传输期间CPU无法处理其他任务) 低(CPU可同时执行其他计算任务)
系统效率 低(串行处理,数据传输阻塞计算) 高(并行处理,计算与传输同时进行)
适用场景 小量、零星数据传输 大量、连续、高速数据传输

二、DMA工作原理图解

复制代码
传统CPU传输流程:
┌─────────┐    读取指令    ┌─────────┐    读取数据    ┌─────────┐
│  设备   │ ────────────> │   CPU   │ ────────────> │  内存   │
└─────────┘              └─────────┘              └─────────┘
      传输完成通知 │              │ 写入指令
                  └───────────────┘

DMA传输流程:
┌─────────┐                            ┌─────────┐
│  设备   │ ──────────────────────────> │  内存   │
└─────────┘       直接传输              └─────────┘
        ↑                                ↑
        │                                │
    ┌─────┐         控制信号         ┌─────┐
    │DMA  │<────────────────────────>│CPU  │
    │控制器│      (仅初始设置)       │     │
    └─────┘                          └─────┘

DMA工作三阶段:

  1. 初始化阶段:CPU设置DMA控制器(源地址、目标地址、传输长度)
  2. 传输阶段:DMA控制器自主完成数据传输,CPU可执行其他任务
  3. 完成阶段:DMA传输完成后,通过中断通知CPU

三、什么时候使用DMA?

1. 高速外设数据传输

  • 场景示例:从固态硬盘(SSD)加载大型游戏文件
  • 为何需要DMA:SSD读取速度可达3-5GB/s,若用CPU逐字节搬运,会导致系统完全卡顿
  • 实际效果:游戏加载时,CPU仍能处理音频、输入响应等任务

2. 实时音视频处理

  • 场景示例:网络视频会议
  • 数据流:摄像头采集 → 内存 → 编码压缩 → 网络发送
  • DMA作用:摄像头数据通过DMA直接存入内存,不占用CPU资源,确保视频流畅不卡顿

3. 网络数据包处理

  • 场景示例:千兆/万兆网络数据传输
  • 传统方式问题:1Gbps网络每秒产生约80万个数据包,CPU处理每个包需要数百条指令
  • DMA方案:网卡通过DMA直接将数据包放入内存,CPU批量处理,效率提升数十倍

4. 图形渲染与显示

  • 场景示例:4K视频播放
  • 数据量:4K@60fps ≈ 12Gbps 原始数据
  • DMA应用:GPU通过DMA直接从内存获取纹理和帧数据,CPU仅负责解码控制

四、DMA使用场景详细对比表

应用领域 具体场景 无DMA的问题 使用DMA的收益
存储系统 文件复制/备份 CPU占用率>80%,系统卡顿 CPU占用<10%,可正常使用其他应用
多媒体 音频录制与播放 音频断断续续,有杂音 流畅播放,音质稳定
网络通信 大文件下载 下载时网页都无法打开 下载同时可游戏、视频
工业控制 传感器数据采集 数据丢失,控制延迟 实时采集,精确控制
科学计算 高速数据采集卡 采样率受限,数据不连续 实现高速连续采集

五、深入理解:咖啡店比喻

想象一家咖啡店:

无DMA(传统CPU传输):

  • 顾客(设备)点单 → 服务员(CPU)记录 → 服务员走到吧台 → 告诉咖啡师 → 等待制作 → 端给顾客
  • 问题:一个服务员只能服务一桌,其他顾客需长时间等待

有DMA(DMA传输):

  • 顾客(设备)点单 → 传菜员(DMA控制器)记录并传递 → 服务员(CPU)只需初始安排传菜员
  • 优势:服务员可同时服务多桌,处理复杂需求;传菜员专注送单,效率大增

六、技术实现简析

DMA控制器关键组件:

  1. 地址寄存器:存放源地址和目标地址
  2. 计数寄存器:记录待传输数据量
  3. 控制寄存器:配置传输方向、模式等
  4. 状态寄存器:显示传输状态和错误信息

DMA传输模式:

  • 单次传输:每次请求传输一个字节/字
  • 块传输:连续传输整个数据块
  • 请求传输:设备就绪时持续传输
  • 级联模式:多个DMA控制器协同工作

七、DMA的局限性与注意事项

  1. 缓存一致性问题:DMA直接访问物理内存,可能绕过CPU缓存,需特殊处理
  2. 安全问题:恶意设备可能通过DMA访问敏感内存区域
  3. 配置复杂性:需要正确设置内存地址、缓冲区对齐等参数
  4. 系统资源占用:DMA期间总线被占用,可能影响其他设备

总结

DMA是现代计算机系统中的"隐形英雄",它通过卸载 CPU的数据搬运工作,实现了计算与传输的并行化,大幅提升系统整体性能。从日常的U盘拷贝到专业的视频编辑,从智能手机到超级计算机,DMA技术无处不在,是构建高效计算系统的基石技术之一。

简单记忆 :DMA = D on't M icromanage All(不要事必躬亲),让专业硬件做专业的事,CPU专注核心计算!

相关推荐
冉卓电子19 分钟前
GD32C103RBT6 misc 内核驱动库极简解析
单片机·嵌入式硬件
yongui4783422 分钟前
MAX6675 K型热电偶温度采集程序(Keil环境)
单片机·嵌入式硬件
豆包公子25 分钟前
AUTOSAR CP XCP 移植到裸机 MCU-实践篇
单片机·嵌入式硬件
三佛科技-1341638421225 分钟前
智能暖脚按摩器方案开发,智能暖脚按摩器MCU单片机主控芯片选择 (FT60F系列8位MCU)
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
是温不嗜温1 小时前
芯茂微100V SR同步整流方案技术解析:效率+5%、温降-20°C,管脚兼容直接替代传统肖特基
嵌入式硬件·电源管理·电源芯片·ac-dc
嵌入式-老费2 小时前
esp32开发与应用(按键输入)
嵌入式硬件
追兮兮2 小时前
告别手动搭建Keil工程!MCUQuickStart一键生成STM32/GD32工程模板,打开即编译
stm32·单片机·嵌入式硬件·gd32·keil5
不会武功的火柴2 小时前
SystemVerilog语法(9)-验证基础与简单Testbench
嵌入式硬件·fpga开发·fpga·systemverilog·硬件描述语言·rtl·uvm验证
XINVRY-FPGA2 小时前
XC7Z020-2CLG484I Xilinx Zynq-7000 SoC FPGA
嵌入式硬件·fpga开发·云计算·硬件工程·fpga
XMAIPC_Robot3 小时前
RK3588 PLC AMP 核隔离配置 + RT‑Thread 实时优化 + FPGA 接口定义 + CODESYS 工程
人工智能·嵌入式硬件·深度学习·fpga开发