CPU如何解决缓存一致性问题

CPU缓存一致性

为了提升性能,需要使得CPU读取数据尽可能从CPU Cache(高速缓存)中读取,少从内存中读取,产生何时需要将Cache中的数据写回内存的问题。
先了解高速缓存的结构:
在这里插入图片描述
高速缓存由多个Cache Line组成,每个Line包含头标志和数据块,Cache Line是从内存读取数据的基本单位。

写直达

传统的写直达将数据更新同步回更新到内存和CPU Cache,写入走之前会先判断数据是否在高速缓存中,如果不在,直接写入内存,如果不在,先写入Cache 再写入内存中,这样的方法消耗大量时间,效率低下

写回

为了解决性能问题,提出了写回的方式

  • 当发生写操作时,判断该数据是否在CPU Cache中,若不在则说明该地址存放的是别的内存地址的数据,判断该数据对应的Line中的数据是否为脏(dirty)
  • 若为脏,则将脏数据写入内存,再将当前写入数据的内存对应数据读入Cache(写入的不一定是该Line存储的全部数据,必须先获取该Line的完整数据),再将写入数据写入到该Line,将该Line标记为脏(dirty)
  • 若不为脏,将当前写入数据的内存对应数据读入Cache,再将写入数据写入到该Line,将该Line标记为脏(dirty)
  • 若写入数据在Cache中,将数据写入对应Line,标记为脏
    以下给出读和写两种写回方式流程图:
    在这里插入图片描述

多核CPU一致性

通过MESI协议实现,使用M(已修改)E(独占)S(共享)I(已失效)四种状态管理Cache Line,根据本地 CPU 的请求,或者来自其他 CPU 通过总线传输过来的请求来修改四种状态,实现写传播以及事务串行化来保证缓存一致性
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值