驱动开发中的DMA是什么

DMA是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。 使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来, 从而大大提高系统的吞吐率。 DMA通常与硬件体系结构, 特别是外设的总线技术密切相关。

DMA方式的数据传输由DMA控制器(DMAC) 控制, 在传输期间, CPU可以并发地执行其他任务。当DMA结束后, DMAC通过中断通知CPU数据传输已经结束, 然后由CPU执行相应的中断服务程序进行后处理。

DMA与Cache一致性

Cache和DMA本身似乎是两个毫不相关的事物。 Cache被用作CPU针对内存的缓存, 利用程序的空间局部性和时间局部性原理, 达到较高的命中率, 从而避免CPU每次都必须要与相对慢速的内存交互数据来提高数据的访问速率。 DMA可以作为内存与外设之间传输数据的方式, 在这种传输方式之下, 数据并不需要经过CPU中转。

假设DMA针对内存的目的地址与Cache缓存的对象没有重叠区域 , DMA和Cache之间将相安无事。 但是, 如果DMA的目的地址与Cache所缓存的内存地址访问有重叠, 经过DMA操作, 与Cache缓存对应的内存中的数据已经被修改, 而CPU本身并不知道, 它仍然认为Cache中的数据就是内存中的数据, 那在以后访问Cache映射的内存时, 它仍然使用陈旧的Cache数据。 这样就会发生Cache与内存之间数据"不一致性"的错误。

相关推荐
沫璃染墨2 天前
《从零入门Linux系统篇(五十八):线程篇·十一——线程安全与死锁详解:从可重入到多锁管理》
linux·服务器·开发语言·c++·驱动开发·安全·架构
ebiobiz2 天前
Zig 工具链编译 STM32 开发指南
驱动开发·stm32·嵌入式硬件
sukalot2 天前
Windows 驱动实例分析系列:libwdi 驱动分析 - 应用篇(一)
windows·驱动开发
Carl_奕然2 天前
【智能体】Loop 的四种设计模式之:Event-Driven Loop(2026 最新版)
人工智能·驱动开发·python·设计模式
gwf2162 天前
Completion Queue(CQ)与中断处理:轮询、中断聚合与错误码 —— 面向AI集群的驱动级深度剖析
驱动开发·性能调优·pcie·rdma·ai集群·中断聚合·cq
kakakahahahaha3 天前
Windows鼠标失灵排查:Ctrl Alt Delete、Mouse Keys、USB控制器与驱动修复
windows·驱动开发·电脑·笔记本电脑·软件需求
傲世仙尊3 天前
TCP报头全解-序号确认应答与可靠性是一个准数
驱动开发·网络协议·tcp/ip
sukalot4 天前
Windows 驱动实例分析系列:libwdi 驱动分析 - libwdi 篇(五)
windows·驱动开发
沫璃染墨4 天前
《从零入门Linux系统篇(五十六):线程篇·九——生产者消费者模型:从条件变量到BlockingQueue实现》
linux·服务器·c++·驱动开发·设计模式·架构·系统架构
傲世仙尊4 天前
UDP底层与守护进程化-报头结构体skbuff指针移动与自成会话
驱动开发·网络协议·udp