我在阅读有关缓存一致性协议的演讲幻灯片时遇到了以下问题: 如果使用具有直写策略的缓存,哪些MESI状态是相关的?
还给出了答案:我(无效)和 S(共享未修改)。
我理解状态 M(修改独占)是不相关的,因为具有直写策略的缓存无论如何都会将更改传播到主内存。
状态 E(独家未修改)是不相关的,因为它仅在发生与替换的独占读取未命中时发出(并且与进一步的读取命中保持一致)。
有人可以解释给定的答案吗?
答案 0 :(得分:2)
正如你所提到的,M状态显然是无用的,因为你永远不会在缓存中保留修改过的数据。
至于独家国家:请记住,在某种意义上,它更强大"比共享状态,因为在WB缓存中,它保证对该行的写入不需要首先获得所有权并使其他副本无效,而是可以直接写入该行而不必离开本地缓存。换句话说,从E到M的过渡很简单,而S到M则更复杂,需要先使其他所有复制失效。
另一方面,在WT缓存中,您已经确保没有其他人持有该线路的修改版本,更重要的是 - 您不具备在您的简单过渡中获益的好处本地缓存(因为你必须在外面写数据),所以真的不需要一个独占状态 - 你从中获得它没有任何好处。事实上,你实际上可能会失去它,因为拥有一个E状态会迫使你在同一条线上的任何其他核心发送窥探(E - > S过渡),
当然,在外面写东西时,你仍然需要使所有其他副本无效,但你不需要区分E和S来告诉你它们是否存在,通常在那里' sa snoop过滤器或其他一些列表告诉你哪些核心要窥探。