2010-09-29 22 views
4

例如,如果我写入特定的内存位置(例如:DMA传输),它在缓存中的效果如何?系统如何确保内存和缓存之间的一致性

+0

我想说这取决于系统,最好是让它保持系统。通常,您在应用程序中写入的内存是虚拟内存,这是系统对其认为应该使用的任何内存的抽象。 – 2010-09-29 03:25:40

回答

1

缓存是一个CPU功能;如果通过CPU写入内存,缓存将被更新并保持一致。

如果您以某种其他方式写入内存(例如,如您所建议的DMA传输),您将需要(可能)事先刷新缓存,然后告诉CPU缓存无效。你如何做到这一点取决于你的系统 - 例如见x86的INVDWBINVD

两个很好的文章,在高速缓存一致性和DMA读是Understanding CachingUsing DMA(两者均由詹姆斯Bottomley的,发表在Linux Journal上;在问题117,2004年1月“DMA”的问题121,2004年5月的“缓存”)。

+0

非常感谢你为这些文章。他们看起来非常好。另外还有一篇关于内存映射IO和PCI的文章? – brett 2010-09-29 04:36:24

0

需要注意的一件事情:INVBD和WBVD指令是privlidged指令,因此您无法直接从用户空间运行它们。