简述缓存一致性 MESI

缓存一致性:保证数据在高速缓存区与主内存中数据的一致性,保证不同处理的读和写的安全。 

高速缓存的总结构 :

缓存条目的结构:

tag存放数据的内存地址
data存放数据(副本)
flag存放各个的状态

缓存条目的 flag的 MESI 的 状态信息:

M(修改)

存在tag相同,但是flag 仅仅只有唯一的一个,数据与主内存不相同。(占据拥有权)从写中我们可以得知

(M 状态的获得是在我们进行写操作之后就会有这个 状态,当其他的处理器一旦修改数据 就会导致 这个M状态被改变)

E   (占据)仅仅唯一存在一个tag,与主内存一致。(占据拥有权)
S (共享)

存在tag相同,与主内存一致。

(在我们进行数据读的时候就会有这么一个状态)

I  (无效)数据与初始化状态相同

处理器的读流程:

        读,会先去自己的高速缓存区中进行读取,若读取到的情况下,判断他的flag的状态,若状态喂 M,E,S 就直接读取自己缓存区的信息,否则发 Read 信息到总线中去读取我们想要信息的数据。然后其他处理器亦或是主内存收到这样的消息就会进行回复,待我们收到回复的时候,会将其数据存入缓存行中,并将其状态更新为 S。

处理器的写流程:

        会根据我们想要写的内存地址,先去自己的高速缓存区中进行寻找。(情况一、二、三)                                                             

(1)我们所找到的缓存条目的状态为E,M 就带表当前拥有它的操作权,我们就可以直接对他进行操作,待操作完毕把状态更改为 M   

(2)我们找到的缓存条目不为 E,M 就会先送一个 invalid的信息出去总线,通知其他处理器,拥有此内存地址的直接更改为 无效。待主存,或处理器回复 Read Sponsor  就会更改为E,然后再将数据进行更新到缓存行中,把数据条目状态更改为 M。           

 (3)我们找到的缓存条目为 I 就会先送一个Read invalid的信息出去总线,通知其他处理器,拥有此内存地址的直接更改为 无效。待主存,或处理器回复 Read Sponsor  就会更改为E,然后再将数据进行更新到缓存行中,把数据条目状态更改为 M。

 

虽然这些对于我们编写代码好像又没有起到什么作用,毕竟这些已经帮我们处理完毕了,但是了解清晰了,总还是好的。毕竟知其然,知其所以然,方为最佳。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值