CPU缓存一致性协议MESI小记

本文深入解析MESI协议,探讨其如何解决多CPU环境下高速缓存数据一致性问题,介绍写缓存器与时效队列的作用,以及内存屏障的概念,帮助读者理解缓存一致性机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚学完MESI协议,把自己的理解记录一下,方便以后复习。

我总结的有点乱,看这位大牛写得,讲的特别清楚:
传送门:CPU缓存一致性协议MESI

1.首先cpu的处理速度已经远大于I/O的速度,所以需要对cpu增加高速缓存,以减少对内存的依赖,但是这会导致各个cpu中的高速缓存数据不一致

2.为了解决不一致的状态,我们就规定了MESI协议,已解决各个CPU中的高速缓存数据不一致的问题。

3.MESI协议其实就是对高速缓存中的数据规定了四种状态,某一个缓存通过对同一个地址的数据进行本地读写、远程读写的时候通过各个高速缓存对该变量的状态进行更变以保证数据一致

4.但是这种状态更换是需要时间的,而且cpu对该缓存中的变量进行改变状态时需要等待其他cpu中的高速缓存进行应答,这种等待是一种阻塞的状态,其等待时间远远大于对数据进行修改的时间,导致cpu性能大幅度降低。

5.为了解决这种阻塞的情况,我们引入了写缓存器,如果一个cpu对该高速缓存的变量进行修改时,会将该变量写入写缓存器中,然后让写缓存器来等待其他的高速缓存的应答,这时候cpu就可以去处理其他的指令。

6.但是这种处理有一个最大的问题就是写处理器不会保证他什么时候完成,这就引发了一种情况"内存重排",就像对一个cpu发出了指令1、指令2,但是其他的cpu可能看到这个cpu处理的顺序是指令2、指令1,(一个数据实在独享状态,一个数据是再无效状态,cpu1中先执行无效状态的数据再执行独享状态的数据,但是独享状态的数据可能先执行完,而cpub中是先读取cpua中E状态的数据再读取I状态的数据,但是这是后I状态的数据其实再cpuA中的写缓存器中还没有执行完,导致了数据不一致的情况)

7.这时候为了解决这种情况,又对每个cpu增加了一个时效队列,以及引入了内存屏障的概念,写屏障:对一个数据进行写入之后要求cpu先处理完写缓存器中的指令,读屏障:要求对一个数据进行读取的时候先执行完时效队列中的所有指令

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值