【问题标题】:MESI protocol snoop implementation issueMESI 协议 snoop 实现问题
【发布时间】:2019-02-09 18:44:20
【问题描述】:

我有一个 MESI 协议问题。假设我有两个核心(核心 1 和 2),每个核心都有自己的二级缓存。当两个内核具有相同的数据并且缓存线处于状态 S 时,这意味着它们都具有干净且相同的数据。在 t=0 时,核心 1 写入缓存行,核心 1 将切换到 M(已修改),核心 2 最终将处于 I(无效)状态。在物理世界中,此交易需要时间才能完成。假设缓存 2 需要 5 秒才能知道缓存 1 更新了缓存行。

假设在 t=2,核心 2 写入相同的缓存行并切换到 M 状态。来自核心 2 的写入操作将在 t=7 (2+5) 时通知核心 1。然后核心 2 需要在 t=5 时使缓存 2 无效,而核心 1 在 t=7 时使该行无效。现在两条线都失效了,核心1和核心2写入的数据丢失了。这显然不遵循协议。我的逻辑有什么问题以及如何防止这种废话?

【问题讨论】:

    标签: caching mesi amba


    【解决方案1】:

    两个核心必须相互同意才能更新。您可以通过 snoopy 或基于目录的协议来执行此操作。因此,在您的示例中,缓存无法更改其状态,而是请求更改。然后赢得仲裁的一方将更改为已修改,而另一方则无效。

    These slides 似乎总结得很好。您想查看幻灯片 20 之后的 snoopy 协议作为示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-24
      • 2015-01-23
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多