在 Hennessy/Patterson 所著的《计算机架构》一书中,第 5 版,第 360 页,他们描述了 MSI 协议,并写道:
如果线路处于“独占”(已修改)状态,则在从总线接收到“写入未命中”时,当前 CPU 1) 将该线路写回总线,然后 2) 进入“无效”状态。
如果该行无论如何都会被另一个 CPU 的连续写入覆盖,为什么我们需要回写该行?
这是否与每个 CPU 都应该看到相同的写入有关? (但我不明白为什么看不到其他CPU的这个特定写入是一个问题)
Here is the protocol from their book (question in green, in purple it is clear: we need to write-back in order to supply the line to requesting CPU):
在 MSI 协议中,将修改后的数据写回内存并不是严格必要的。状态图似乎还假设系统具有低成本内存访问(即使在另一个缓存中的共享状态中找到数据,数据也由内存提供)和连接到内存接口的共享总线。
然而,修改后的数据不能像共享状态那样简单地被删除,因为请求处理器可能仅修改高速缓存块的一部分(例如,仅一个字节)。块中未被请求处理器修改的任何部分必须仍然在存储器中或在请求处理器处可用(另一个处理器已经使其副本无效)。通过共享总线和低成本存储器访问,添加存储器写回与仅将数据传送到其他处理器的成本差异很小。
此外,即使在具有字大小缓存块的字寻址系统上,保持旧数据可用也允许推测性地发送写入未命中请求(如乱序执行或预取写入),而不会出现正确性问题。
(对修改状态[或作为修改超集有效]状态的每字节跟踪将允许避免某些数据通信,但代价是额外的状态位和更复杂的通信系统。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)