动图方式,理解 CPU 缓存一致性协议!

网友投稿 818 2022-05-29

大家好,我是小林。

用动图的方式,理解 CPU 缓存一致性协议!

我之前写过 CPU 缓存一致性 MESI 协议:10 张图打开 CPU 缓存一致性的大门。

然后期间挺多人对 MESI 协议的转换有疑问,其实我在文章中把 MESI 协议状态切换的各个过程都总结成了一个表格,可能内容太多,很多小伙伴没有仔细看。

就在昨天,我发现个可以「在线体验 MESI 协议状态转换」过程的网站,地址如下:

https://www.scss.tcd.ie/Jeremy.Jones/VivioJS/caches/MESIHelp.htm

我先给大家复习下 MESI 协议,然后再跟大家讲一些这个网站怎么用。

MESI 协议

Modified,已修改

Exclusive,独占

Shared,共享

Invalidated,已失效

网站体验

第一部分,内存。显示内存地址和数据;

第二部分,CPU 缓存。显示 CPU 缓存的变量数据和 MESI 协议状态,因为我现在还没开始操作,所以显示的是空白。

第三部分,CPU 操作。共有三个 CPU,每个 CPU 都有各自的 Cache,CPU 操作分别「读」和「写」,这部分是我们手动操作的部分。

数据总线(Data Bus):在CPU与内存之间来回传送需要处理或是需要储存的数据。

地址总线(Adress Bus),用来指定在内存之中储存的数据的地址。

shared,这个我也不知道是什么总线,网上没搜到资料,网站上最细那条总线就是这个名字,作用是控制 Cache 的数据状态。

点击 CPU2 的 read a0 操作;

CPU2 会向地址总线,发送读取 a0 变量的数据的请求,此时该请求不仅会被内存收到,也会被其他 CPU 核心收到。

CPU1 从地址总线得知,CPU2 发起的读取地址存在于 CPU1 Cache 里,于是 CPU1 Cache 里数据的状态会从 E(独占)变更为 S(共享);

内存收到 CPU2 发起的读取 a0 数据的请求后,就会通过数据总线将数据传递给 CPU2;

最后数据会写到 CPU2 Cache 里,且状态是 S(共享)。

缓存

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:es (二)
下一篇:【转载】【华为云数据库服务】资料汇总
相关文章