DMA 上下文中的缓存一致性问题

sli*_*ter 5 c linux memory memory-management cache-control

假设CPU修改了位置x+50中的值并且没有将其刷新回主存(回写)。

同时,设备发起从 x 到 x+100 的 DMA 读取请求。

那么,如何通知CPU刷新脏缓存行呢?

Ale*_*nze 3

DMA 电路通常直接与主存储器一起工作,而不涉及 CPU(这就是主要思想,使 CPU 免于执行可以在硬件中的其他地方完成的 I/O,从而节省 CPU 周期)。因此,您确实可能会遇到缓存一致性问题。Microsoft 建议在使用 DMA 时刷新 I/O 缓冲区

但有些系统确实支持 CPU 和 DMA 电路之间的缓存一致性协议,就像多处理器系统中的 CPU 之间一样。最终答案取决于实际硬件。