【问题标题】:how does a system ensure coherence between memory and cache系统如何确保内存和缓存之间的一致性
【发布时间】:2010-09-29 03:11:18
【问题描述】:

例如,如果我写入特定的内存位置(例如:DMA 传输),它在我的缓存中会受到怎样的影响?

【问题讨论】:

  • 我会说这取决于系统,最好由系统决定。通常你在应用程序中写入的内存是虚拟内存,它是系统对它认为你应该使用的任何类型内存的抽象。

标签: c caching x86


【解决方案1】:

缓存是 CPU 的一项功能;如果通过 CPU 写入内存,缓存会更新并保持一致。

如果您以其他方式写入内存(例如,按照您的建议进行 DMA 传输),您将需要(可能)事先刷新缓存,然后告诉 CPU 缓存无效。如何执行此操作取决于您的系统 - 例如,对于 x86,请参阅 INVDWBINVD

关于缓存一致性和 DMA 的两篇好文章是 Understanding CachingUsing DMA(均由 James Bottomley 撰写,发表于 Linux Journal;“缓存”在 2004 年 1 月的第 117 期和 5 月的第 121 期中的“DMA” 2004)。

【讨论】:

  • 非常感谢您提供这些文章。他们看起来真的很好。还有一篇关于内存映射 IO 和 PCI 的文章吗?
【解决方案2】:

需要注意的一点:INVBD 和 WBVD 指令是特权指令,因此您不能直接从用户空间运行它们。

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多