1. DMA技术基础概念
直接存储器存取(Direct Memory Access)是现代计算机系统中一种高效的数据传输机制。简单来说,它就像是在CPU之外设立了一个专门的"快递员",这个快递员可以直接在内存和设备之间搬运数据,不需要每次都麻烦CPU这个"大老板"亲自处理。
DMA控制器本质上是一个专用协处理器,它独立于CPU运作。当需要进行大量数据传输时(比如从硬盘读取文件到内存),DMA控制器会接管总线控制权,直接管理数据传输过程。这种机制特别适合处理以下场景:
- 高速外设与内存的数据交换(如磁盘I/O)
- 网络数据包的收发
- 音频/视频流的实时处理
- 传感器数据的批量采集
关键优势:解放CPU资源。传统PIO模式下,每个字节传输都需要CPU介入,而DMA方式下CPU只需初始化传输参数,之后就可以处理其他任务,直到传输完成中断通知。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 三种工作方式深度解析
2.1 单字节传输模式
这是最基础的DMA工作方式,每次只传输一个字节的数据。具体流程如下:
- 设备向DMA控制器发出请求(DRQ)
- DMA控制器向CPU申请总线使用权(HRQ)
- CPU完成当前总线周期后释放总线(HLDA)
- DMA控制器接管总线,发送内存地址并执行单字节传输
- 传输完成后释放总线,CPU重新获得控制权
典型应用场景:
- 低速设备的精确控制(如某些工业传感器)
- 需要严格时序控制的数据采集
- 早期计算机系统(如ISA总线时代)
性能特点:
- 总线占用时间短,适合实时性要求高的场景
- 传输效率低(每次传输都要重复申请总线)
- 对CPU性能影响较小(每次只短暂占用总线)
2.2 块传输模式(Burst Mode)
这是现代系统中最常用的DMA方式,可以一次性传输整个数据块。工作流程:
- 设备准备好数据块后发出DMA请求
- DMA控制器获得总线控制权
- 连续传输整个数据块(地址自动递增)
- 传输完成后产生中断通知CPU
- 释放总线控制权
技术细节:
- 需要预先设置:起始地址、传输长度、传输方向
- 支持地址自动递增/递减
- 现代DMA控制器通常支持链式DMA(多个块连续传输)
性能优势:
- 传输效率高(一次总线占用完成大量数据传输)
