什么是缓存一致性?缓存一致性MESI协议

cpu缓存

一级缓存:每刻cpu核心有两个一级缓存,分别是L1P(progame程序)和L1D(data数据),分别用作程序的缓存和数据的缓存
二级缓存:核心级别的缓存,每颗核心独占的缓存
三级缓存:cpu级别的缓存,cpu中各个核心共用的缓存


缓存结构图:
在这里插入图片描述

缓存读取顺序

首先,cpu需要数据会先去一级缓存里找,找不到就去二级缓存,在不找到就去三级缓存,三级缓存再没有的话,就通过内存读取。

缓存不一致性问题

因为是多核心CPU,所以现在出现一个问题,因为cpu不仅读数据,还会写数据。
如果L3中存在一个变量variableA,此时variableA的值是0,core1要对variableA进行计算,但是此期间core2对variableA进行了+1操作,这就会导致core1的计算结果不准确。
甚至如果variableA对core2没有用了,core2删除了variableA这个变量,但是core1需要这个变量,那么程序就会出错。

MESI协议就可以解决上面出现的问题。


MESI协议

首先看每个字母代表的意思:

  • M(modifield)修改的:表示这个数据被某个核心修改了。
  • E(exclusive)独占的:表示此数据被单个核心独占,其他cpu要用则拷贝一份。
  • S(shared)共享的:表示这个数据是多个核心共享的。
  • I(invalid)失效的:表示此数据不可用,如果要用,则创建或者去其他核心的缓存位置找。


缓存的作用:

核心中的缓存,不仅要知道自己核心的操作,还要监听其他核心的操作。


当core1需要变量variableA,variableA在不同状态下的情况:
  • (modifield)修改:当核心缓存监听到其他核心修改了variableA,则variableA变成失效态。
  • (exclusive)独占的:自己核心的缓存–>直接用;其他核心的缓存–>拷贝一份到自己核心的缓存再用。
  • (shared)共享:多核心共用的,直接读写即可。
  • (invalid)失效:variableA失效了,不可用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值