1

根据此,如果写入缓存未命中并在另一个 CPU 缓存中复制(例如共享/独占状态)。步骤是:

1. Snooping cores (with cache line copy) 将 state 设置为Invalid

2.当前缓存存储新的主存值。

为什么其中一个监听内核一开始不能将其缓存线值放在总线上?然后进入无效状态。相同的算法用于现有副本的读取未命中。谢谢你。

4

1 回答 1

1

你是绝对正确的,当你已经在你身边时从内存中获取一行是非常愚蠢的,但是这个图表描述了一致性协议的功能正确性的最低要求(即必须做什么来避免一致性错误),并且仅指示窥探数据以查找修改的行,因为这是唯一正确的副本。您所描述的是一种可能的优化,有些系统确实是这样的。

但是,请记住,当今大多数系统也使用共享缓存(L2 或 L3,有时甚至超出此范围),这通常是包容性的(关于所有内核中存在的所有行)。在这样的系统中,没有必要一直到内存,因为在另一个核心中拥有该行意味着它也在共享缓存中,并且在失效后请求核心可以从那里获取它。因此,您的建议仅适用于没有共享缓存或具有非严格包容性缓存的系统。

于 2016-09-16T12:13:30.120 回答