关于DMA的几个小问题

1.DMA传之前是否需要把cache更新到内存。

It depends。大部分X86支持DMA当主存跟Cache不一致时,DMA直接从Cache里面去数据,那就不需要cache flush了。但有些hardware不支持DMA从cache取数据,这时候就有必要在DMA之前flush cache到主存了。不过在windows下,cache flush的操作其实不需要driver来关心,当driver调用OS的API去做DMA的时候,OS已经帮我们做好了cache跟memory之间的coherence了。

2. DMA有哪些类型。

可以分为Packet Based, Common-Buffer, Hybrid三种。Packet Based其实就是Driver配置好DMA的基本参数,主动让Device做DMA。Common-Buffer,就是开一块内存跟Device共享,Device自己定时poll这块Memory,发现Memory的数据变化,Device自己开始DMA,需要Driver维护好这块common buffer。Hybrid的就是,有Common-Buffer,但是存放的不是数据,而是一些Descriptor Entry,Device poll这些Descriptoy entry,来开始DMA。

原文地址:https://www.cnblogs.com/zzSoftware/p/2888899.html