VivioJS-用于WWW的交互式可逆电子学习动画& raft 在线演示
https://www.scss.tcd.ie/Jeremy.Jones/VivioJS/caches/MESIHelp.htm
VivioJS-用于WWW的交互式可逆电子学习动画 |
MESI缓存一致性协议 |
描绘了一种多处理器系统,包括3个具有本地缓存和主存储器的CPU。为简单起见,主存储器包括4个位置a0,a1,a2和a3。缓存是直接映射的,包含两个集合。偶数地址(a0和a2)映射为0,而奇数地址(a1和a3)映射为1。 注意:为了简化此动画,高速缓存行的大小和CPU读/写操作的大小是相同的。但是,在发生写未命中时,CPU会读取内存,即使它会完全覆盖高速缓存行。这模拟了实际缓存的行为,其中缓存行的大小通常大于CPU读/写操作的大小。 |
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
每个CPU包含用于在指定的存储位置上启动读取或写入事务的按钮。“ CPU写”将增量值(最初为1)写入“内存”。 想法是按下按钮,看看您是否可以遵循发生的动作和状态转换。可以通过按右上角的“无错误”按钮将错误引入动画。看看是否可以确定错误是什么! 地址和数据总线上的通信方向分别由蓝色和红色箭头指示。事务中涉及的高速缓存行和内存位置显示为绿色。过时的内存位置被涂成灰色。 高速缓存行可以处于4种状态之一。无效:缓存行中不存在缓存行。独占性:仅存在于此缓存中的缓存行,与复制到内存中相同。修改:此缓存中仅存在缓存行,并且内存复制已过期(陈旧)。 共享:此高速缓存中的高速缓存行以及可能的其他高速缓存,所有副本与内存副本相同。对SHARED缓存行的写操作是直写的,而对EXCLUSIVE缓存行的写操作是回写的。如果高速缓存在总线事务中发现了其中包含的地址,它将声明共享总线。MESI是无效的缓存一致性协议。 这是缓存行的状态转换图: 尝试的采样顺序[来自RESET]
|
raft 在线演示:http://thesecretlivesofdata.com/raft/