根据此diagram,如果写入高速缓存未命中,则在另一个CPU高速缓存中复制(例如共享 / 独占状态)。步骤是:
1。侦听核心(使用缓存行复制)将状态设置为无效。
2. 当前缓存存储新的主内存值。
为什么其中一个侦听核心最初不能将其缓存行值放在总线上?然后转到无效状态。在现有副本的读取未命中中使用相同的算法。谢谢。
答案 0 :(得分:1)
你是完全正确的,当你已经拥有它在你旁边时从内存中取一条线是非常愚蠢的,但这个图描述了对连贯性的功能正确性的最低要求协议(即必须采取哪些措施来避免一致性错误),并且只能指示为修改后的行侦听数据,因为这是唯一正确的副本。你所描述的是一种可能的优化,有些系统的行为确实如此。
但是,请记住,现在大多数系统也使用共享缓存(L2或L3,有时甚至超过此范围),这通常是包容性的(关于所有内核中存在的所有行)。在这样的系统中,没有必要一直到存储器,因为在另一个核心中具有该线意味着它也在共享高速缓存中,并且在无效之后,请求核心可以从那里获得它。因此,您的提案仅适用于没有共享缓存的系统,或者不具有严格包容性的缓存。