【发布时间】:2010-09-29 03:11:18
【问题描述】:
例如,如果我写入特定的内存位置(例如:DMA 传输),它在我的缓存中会受到怎样的影响?
【问题讨论】:
-
我会说这取决于系统,最好由系统决定。通常你在应用程序中写入的内存是虚拟内存,它是系统对它认为你应该使用的任何类型内存的抽象。
例如,如果我写入特定的内存位置(例如:DMA 传输),它在我的缓存中会受到怎样的影响?
【问题讨论】:
缓存是 CPU 的一项功能;如果通过 CPU 写入内存,缓存会更新并保持一致。
如果您以其他方式写入内存(例如,按照您的建议进行 DMA 传输),您将需要(可能)事先刷新缓存,然后告诉 CPU 缓存无效。如何执行此操作取决于您的系统 - 例如,对于 x86,请参阅 INVD 和 WBINVD。
关于缓存一致性和 DMA 的两篇好文章是 Understanding Caching 和 Using DMA(均由 James Bottomley 撰写,发表于 Linux Journal;“缓存”在 2004 年 1 月的第 117 期和 5 月的第 121 期中的“DMA” 2004)。
【讨论】:
需要注意的一点:INVBD 和 WBVD 指令是特权指令,因此您不能直接从用户空间运行它们。
【讨论】: