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

相关推荐
清风6666667 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
azwsm8 小时前
电路元器件和GPIO控制器
单片机·嵌入式硬件
kebidaixu11 小时前
FreeRTOS 移植到 STM32F407VETX 记录(一)
stm32·单片机·嵌入式硬件
CSDN官方博客12 小时前
「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令
嵌入式硬件·物联网·embedding
点灯小铭12 小时前
基于单片机的数码管定时插座设计与定时开关功能实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
云栖梦泽13 小时前
玩转RK3506SDK
linux·嵌入式硬件
数智工坊14 小时前
机器人四大主控板系统分层选型指南:树莓派、ESP32、STM32与Arduino的能力边界与实战定位
stm32·嵌入式硬件·机器人
进击的小头15 小时前
第8篇:IGBT 从零到精通:核心原理、关键参数、选型指南与工业级应用要点
经验分享·嵌入式硬件·学习
点灯小铭15 小时前
基于单片机的多模式智能洗衣机设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
项目題供诗15 小时前
STM32-AD单通道&AD多通道(十九)
stm32·单片机·嵌入式硬件