2010-09-29 42 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指令,因此您無法直接從用戶空間運行它們。