VivioJS MESI 帮助
https://www.scss.tcd.ie/Jeremy.Jones/VivioJS/caches/MESIHelp.htm
这个 VivioJS 动画旨在帮助您了解 MESI 缓存一致性协议。 描述了一个多处理器系统,包括 3 个带有本地缓存和主存储器的 CPU。为简单起见,主存储器包括 4 个位置 a0、a1、a2 和 a3。缓存是直接映射的,包含两个集合。偶数地址(a0 和 a2)映射到设置 0,而奇数地址(a1 和 a3)映射到设置 1。 注意:为了简化这个动画,缓存行的大小和 CPU 读/写操作的大小是相同的。但是,在写入未命中时,CPU 会读取内存,即使它会完全覆盖缓存行。这模拟了真实缓存的行为,其中缓存行的大小通常大于 CPU 读/写操作的大小。 |
||||||||||||||||||||||||||||||
单击图表激活动画,或单击此处查看全屏版本。 | ||||||||||||||||||||||||||||||
每个 CPU 都包含按钮,用于在指定的内存位置启动读取或写入事务。“CPU 写入”将递增值(最初为 1)写入“内存”。 这个想法是按下按钮,看看你是否可以跟随发生的动作和状态转换。可以通过按右上角的“无错误”按钮将错误引入动画中。看看你是否可以确定错误是什么! 地址和数据总线上的流量方向分别由蓝色和红色箭头指示。事务中涉及的缓存行和内存位置为绿色。陈旧的内存位置是灰色的。 缓存线可以处于 4 种状态之一。无效:缓存中不存在缓存行。独家:缓存行仅存在于该缓存中,并且与内存中的副本相同。MODIFIED:仅在此缓存中存在缓存行并且内存副本已过期(陈旧)。 SHARED:此缓存中的缓存行,可能还有其他缓存,所有副本与内存副本相同。对SHARED缓存线的写入是直写,而对EXCLUSIVE缓存线的写入是回写。如果高速缓存观察到它包含的地址的总线事务,它会断言共享总线线路。MESI 是一种无效缓存一致性协议。 这是缓存行的状态转换图: 尝试的示例序列 [来自 RESET]
|