在DMA情况下高速缓存一致性问题(Cache coherence issues in a DMA c

2019-09-16 13:05发布

假设CPU在位置x + 50修改值并且不进行冲洗回到主存储器(回写)。

同时,从设备x到x + 100启动一个DMA读取请求。

在这种情况下,如何将CPU被通知回冲脏缓存行?

Answer 1:

该DMA电路往往与主存储器直接运行而不涉及CPU(这是主要的想法,从执行I / O可以在硬件其他地方,从而完成节省CPU周期释放CPU)。 所以,你可能确实遇到高速缓存一致性的问题 。 微软建议使用DMA冲洗时,I / O缓冲区 。

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



Answer 2:

还有我能想到的三种方法:

  1. 该存储器被标记为未缓存的,
  2. DMA控制器坐标与高速缓存控制器,
  3. 操作系统保证这不会发生,例如确保工艺的CPU部分不运行。

这取决于硬件和操作系统的能力。

确保进程不运行是不是一个多任务操作系统过于怪异,如DMA由一个进程所拥有的内存可能是由过程做一个系统调用,例如写触发。 这个过程可以去安排,和其他进程中运行,直到DMA完成。

这可能是过多的约束,以等待I / O设备来完成的,所以DMA控制器可能会从工艺来复制地址空间到辅助缓冲器中。

所以,如果你有这个地方已经发生的情况下,请简要说明的例子,你已经运行测试。



文章来源: Cache coherence issues in a DMA context