假设CPU在位置x + 50修改值并且不进行冲洗回到主存储器(回写)。
同时,从设备x到x + 100启动一个DMA读取请求。
在这种情况下,如何将CPU被通知回冲脏缓存行?
假设CPU在位置x + 50修改值并且不进行冲洗回到主存储器(回写)。
同时,从设备x到x + 100启动一个DMA读取请求。
在这种情况下,如何将CPU被通知回冲脏缓存行?
该DMA电路往往与主存储器直接运行而不涉及CPU(这是主要的想法,从执行I / O可以在硬件其他地方,从而完成节省CPU周期释放CPU)。 所以,你可能确实遇到高速缓存一致性的问题 。 微软建议使用DMA冲洗时,I / O缓冲区 。
但是,一些系统做支持CPU和DMA电路之间的高速缓存一致性协议,就像在多处理器系统中的CPU之间。 最终的答案取决于实际的硬件。
还有我能想到的三种方法:
这取决于硬件和操作系统的能力。
确保进程不运行是不是一个多任务操作系统过于怪异,如DMA由一个进程所拥有的内存可能是由过程做一个系统调用,例如写触发。 这个过程可以去安排,和其他进程中运行,直到DMA完成。
这可能是过多的约束,以等待I / O设备来完成的,所以DMA控制器可能会从工艺来复制地址空间到辅助缓冲器中。
所以,如果你有这个地方已经发生的情况下,请简要说明的例子,你已经运行测试。