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专注核心计算!

相关推荐
贝塔实验室6 小时前
如何使用Altium Designer进行项目编译及验证
单片机·嵌入式硬件·mcu·射频工程·基带工程·嵌入式实时数据库·精益工程
点灯小铭8 小时前
基于单片机的智能门控制系统设计与故障报警实现
单片机·嵌入式硬件·mongodb·毕业设计·课程设计·期末大作业
努力小周8 小时前
基于STM32的智能台灯系统设计与实现
stm32·单片机·嵌入式硬件·c#·毕业设计·毕设·javaee
LCG米9 小时前
从零搭建智能家居网关:基于瑞萨RA4L1 MCU与Home Assistant
单片机·嵌入式硬件·智能家居
小龙报9 小时前
【嵌入式51单片机】51 单片机中断入门到精通:中断类型、寄存器操作、优先级配置与实战代码
c语言·驱动开发·单片机·嵌入式硬件·物联网·mongodb·51单片机
小李做物联网9 小时前
【物联网毕设】76.1单片机stm32菊类智能养护物联网嵌入式项目程序系统开发
stm32·单片机·嵌入式硬件·物联网
天天爱吃肉821811 小时前
庖丁解牛:从两张核心电路图,透视新能源汽车的“动脉”与“毛细血管”
python·嵌入式硬件·汽车
勤劳的进取家11 小时前
论文阅读:农业喷雾无人机避障技术综述
论文阅读·嵌入式硬件·神经网络·计算机视觉·无人机
小柯博客11 小时前
从零开始打造 OpenSTLinux 6.6 Yocto 系统 - STM32MP2(基于STM32CubeMX)(五)
stm32·单片机·嵌入式硬件