🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:操作系统,本专栏为讲解各操作系统的历史脉络,以及各性能对比,以及内部工作机制,方便开发选择 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

DMA(Direct Memory Access,直接内存访问) 是一种允许硬件子系统直接读写系统内存的技术,无需中央处理器(CPU)的介入。可以把它想象成一个“专业的快递员”,能够自主地在内存和设备之间搬运数据,而不需要“老板”(CPU)亲自处理每一个包裹。
对比维度 | 传统CPU传输 | DMA传输 |
|---|---|---|
CPU参与度 | 全程参与,每个字节都需要CPU处理 | 只需初始设置,传输过程不参与 |
传输速度 | 较慢(受CPU指令周期限制) | 较快(硬件直接传输,无指令开销) |
CPU占用率 | 高(传输期间CPU无法处理其他任务) | 低(CPU可同时执行其他计算任务) |
系统效率 | 低(串行处理,数据传输阻塞计算) | 高(并行处理,计算与传输同时进行) |
适用场景 | 小量、零星数据传输 | 大量、连续、高速数据传输 |
传统CPU传输流程:
┌─────────┐ 读取指令 ┌─────────┐ 读取数据 ┌─────────┐
│ 设备 │ ────────────> │ CPU │ ────────────> │ 内存 │
└─────────┘ └─────────┘ └─────────┘
传输完成通知 │ │ 写入指令
└───────────────┘
DMA传输流程:
┌─────────┐ ┌─────────┐
│ 设备 │ ──────────────────────────> │ 内存 │
└─────────┘ 直接传输 └─────────┘
↑ ↑
│ │
┌─────┐ 控制信号 ┌─────┐
│DMA │<────────────────────────>│CPU │
│控制器│ (仅初始设置) │ │
└─────┘ └─────┘DMA工作三阶段:
应用领域 | 具体场景 | 无DMA的问题 | 使用DMA的收益 |
|---|---|---|---|
存储系统 | 文件复制/备份 | CPU占用率>80%,系统卡顿 | CPU占用<10%,可正常使用其他应用 |
多媒体 | 音频录制与播放 | 音频断断续续,有杂音 | 流畅播放,音质稳定 |
网络通信 | 大文件下载 | 下载时网页都无法打开 | 下载同时可游戏、视频 |
工业控制 | 传感器数据采集 | 数据丢失,控制延迟 | 实时采集,精确控制 |
科学计算 | 高速数据采集卡 | 采样率受限,数据不连续 | 实现高速连续采集 |
想象一家咖啡店:
无DMA(传统CPU传输):
有DMA(DMA传输):
DMA是现代计算机系统中的“隐形英雄”,它通过卸载CPU的数据搬运工作,实现了计算与传输的并行化,大幅提升系统整体性能。从日常的U盘拷贝到专业的视频编辑,从智能手机到超级计算机,DMA技术无处不在,是构建高效计算系统的基石技术之一。
简单记忆:DMA = Don’t Micromanage All(不要事必躬亲),让专业硬件做专业的事,CPU专注核心计算!