Cache 缓存一致性

就硬件而言,CPU、芯片、处理器、内存、总线、磁盘等等,构成了一台电脑,当电脑运行一个程序的时候,需要从磁盘读到主内存,主内存再到缓存,最后交由CPU执行。

随着现在的多核处理器的发展,运算的速度是越来越快,但是在运算的同时,也要遇到缓存一致性的问题,简单来说,多核处理器,每个核上有个多个处理器,每个处理器上又有着Cache高速缓存,C0,C1,C2, 从主内存当中读取一个变量,如果C0更改了这个变量,C1,C2,不能及时的去更新当前的值,就会使用一开始从主内存读取的变量进行运算,结果就会导致脏数据。因此,出现了MESI缓存一致性进行控制

目前处理器基本上都遵循这个协议,先大概解释下MESI,

状态描述
M(modified)这行数据有效,数据被修改了,和内存中的数据不一致,数据只存在本Cache中
E(Exclusive)这行数据有效,数据和内存中的数据一致,数据只存在云本Cache中
S(share)

这行数据有效,数据和内存中的数据一致,数据存在很多的

Cache中

I(Invalid)在很多的Cache中,这行数据无效

 

M (modified) 和 E (Exclusive) 状态的Cache line,数据是独有的,不同点在于M状态的数据是dirty的(和内存不一致),E状态的数据是clean的(内存一致).

S (Shared) 状态的Cache line,数据和其他的Cache共享。只有clean的数据才能被多个Cache共享

I (Invalid)表示这个Cache line无效。

E 状态示例如下:

只有C0访问变量x,它的Cache line状态为E(Exclusive)

S 状态示例如下:

3个Core都访问变量x,它们对应的Cache line为S (Shared)的状态

M状态和 I 的状态示例如下:

 

Core0修改了x的值之后,这个Cache line变成了M(modified)状态,其他Core对应的Cacheline变成了I(Invalid)状态

在MESI协议中,每个Cache的Cache控制器不仅知道自己的读写操作,而且也监听到(snoop)其他Cache的读写操作。每个Cache line所处的状态根据本该和其他核的读写操作在4个状态间进行迁移

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值