DMA(Direct Memory Access):直接内存访问一、传统CPU存取数据CPU不直接存取外设的原因主要有两点:
速度差异:CPU的处理速度远高于外设,无法直接同步。格式多样性:外设数据格式种类繁多,需要转换才能被CPU处理。传统CPU获取数据的步骤如下:
加载外设数据到内存:外设数据首先被加载到内存中,因为内存的速度最接近CPU。检查Cache:CPU检查Cache是否有需要的数据。 如果命中,直接返回数据。如果未命中,从内存获取数据(这里暂时不考虑MMU)。返回数据:将数据返回给CPU。二、认识DMA1、什么是DMADMA(Direct Memory Access)即直接存储器访问,通过内部控制器实现内存和外设之间的数据传输。DMA的引入使得CPU可以专注于内存数据的处理,而数据的搬运工作由DMA硬件完成。
开始传输时刻:DMA向CPU申请总线周期的占用时间。结束传输时刻:DMA向CPU发送中断请求,请求CPU处理数据。2、DMA的工作模式、数据传输方式、寻址模式工作模式:
直接模式:DMA直接从源地址到目的地址传输数据。FIFO模式:数据累计存储在FIFO缓冲器中,达到阈值后一次性发送。数据传输方式:
单字传送:每次传输一个字或字节,传输后归还总线控制权。块传送:连续占用多个总线周期进行批量传送。寻址模式:
增量寻址:发送完数据后,继续发送下一个地址的数据。非增量寻址:需要软件配置下一个数据的地址。3、为什么要使用DMA减轻CPU负担:将固定任务交给DMA,提高系统效率。提高吞吐率:DMA具备高效操作能力,提升IO效率。三、DMA数据传输1、准备阶段
DMA控制器初始化:
配置DMA内存缓冲区的首地址。配置DMA传输方向。配置DMA交换量。 接口初始化:
I/O设备的寻址信息。2、传输请求
3、数据传送
DMA控制器向总线发送读/写命令,向I/O接口发响应信号,数据交互由内存和设备接口完成。4、善后处理
DMA控制器在传输结束时向CPU发送中断,CPU重新接管总线控制权。四、DMA保证与内存中数据一致性方法一、使用缓存一致性协议硬件机制:如MESI协议,确保CPU缓存和内存数据一致性。缓存刷新和无效操作:软件可以触发缓存操作以确保数据一致性。二、使用同步机制中断和轮询:DMA传输完成后通过中断或轮询进行数据一致性检查。信号量和互斥锁:在多处理器或多线程环境中使用同步机制。三、数据校验和错误检测校验和计算:在传输前后计算校验和,确保数据完整性。错误检测和纠正码(ECC):支持ECC的系统可以检测并纠正数据错误。四、合理的内存管理和访问控制内存保护:通过设置内存访问权限,限制DMA访问。内存分配和释放:合理管理内存,避免数据不一致和内存泄漏。通过以上方法,DMA可以有效地保证数据在内存中的一致性,提高系统的整体性能和可靠性。