美文网首页
MESI 缓存一致性协议

MESI 缓存一致性协议

作者: 七月_JulyFY | 来源:发表于2019-08-24 00:48 被阅读0次

CPU 读取存储器数据过程

CPU 要取寄存器XX的值,只需要一步:直接读取

CPU 要取 L1 cache的某个值,需要1-3步(或者更多):把 cache 行锁住,把某个数据拿来,解锁,如果没锁住就慢了

CPU 要取 L2 cache 的某个值,先要到 L1 cache 里取,L1 当中不存在,在 L2 里,L2 开始加锁,加锁以后,把L2里的数据复制到L1,再执行读L1的过程,上面的3步,再解锁

CPU 取 L3 cache的也是一样,只不过先由 L3 复制到 L2,从 L2 复制到 L1,从 L1 到 CPU

CPU 取内存则最复杂:通知内存控制器占用总线带宽,通知内存加锁,发起内存读请求,等待回应,回应数据保存到 L3(如果没有就到 L2),再从 L3/2到L1,再从 L1 到 CPU,之后解除总线锁定

1. 当 CPU1 从主内存中取共享变量 X=2 时,通过上述 CPU读取数据的过程将数据读取到 CPU 缓存 L1 中,此时只有 CPU1 缓存行得到共享变量X,X 的状态则为 E,CPU1 的缓存行会时刻的监听嗅探 bus总线

2. 当 CPU2 也从主内存中取共享变量 X=2 时,CPU1 的缓存行会嗅探到CP2 对共享变量X 的操作,此时 CPU1 和 CPU2 的缓存行中 X 的状态会变成 S

3. 当 CPU1 对 X 进行+1 操作时,寄存器将 L1 cache 的数据读取,并对 X+1 ,将 X=3 赋值给缓存行 L1 cache,L1 cache 的 X =3 通知 L2 cache,L2 cache 再通知 L3 cache ,最终 CPU 缓存上的 X 都是 3,然后 X=3 将会写到 主内存中,这个回写的过程,CPU1 的 X 状态 会变成 M ,而 CPU2 的缓存行通过 bus 总线嗅探到 主内存X 变量的值改变了,此时 CPU2 的 X 状态就会变成 I ,即该缓存行无效。

4. CPU1 缓存行 X 的值回写到主内存后,CPU1 缓存行的 X 状态又会变成 E

以上为个人理解

相关文章

  • 缓存一致性协议

    锁缓存行有一套协议叫做缓存一致性协议。缓存一致性协议有MSI、MESI、MOSI、Synapse、Firefly以...

  • JVM-003-MESI

    MESI 一、缓存一致性协议   缓存一致性协议有很多,不同的厂商使用的缓存一致性协议是不同的,其中intel使用...

  • 内存模型和原子操作笔记

    1. 缓存一致性协议 缓存一致性协议MESI可以保证,在所有的脏缓存段被回写后,任意缓存级别的所有缓存段中的内容,...

  • 2020-03-24

    上集说到基于MESI缓存一致性协议的Java内存模型JMM,在MESI基础上,为了提升效率,允许指令重排序,但是引...

  • 程序员,请善待内存(三)--- JMM

    上集说到基于MESI缓存一致性协议的Java内存模型JMM,在MESI基础上,为了提升效率,允许指令重排序,但是引...

  • Java多线程21 JMM与Lock

    II. 缓存一致性MESI协议中的缓存状态 状态含义监听任务M 被修改Modified因为缓存行刚被修改,数据应是...

  • Java多线程系列(一)--硬件基础

    本文主要介绍与多线程编程紧密相关的硬件基础知识。内容涉及: 高速缓存 缓存一致性协议--MESI协议 写缓冲器和无...

  • volatile关键字

    volatile的作用: 保证线程可见性MESI缓存一致性协议 禁止指令重排序(CPU)DCL(Double Ch...

  • volatile线程可见性,但不能保证操作原子性

    volatile特性 保证线程可见性 MESI缓存一致性协议 禁止指令重排序 volatile线程可见性,但不能保...

  • CPU cache结构和缓存一致性(MESI协议)

    【并发编程】CPU cache结构和缓存一致性(MESI协议) - 厚积薄发者,轻舟万重山 - CSDN博客 一、...

网友评论

      本文标题:MESI 缓存一致性协议

      本文链接:https://www.haomeiwen.com/subject/xodzsctx.html