cpu cache和MESI

本文探讨了CPUCache的三级缓存结构及其解决CPU与内存速度不匹配的作用,详细解析了MESI协议如何通过Modify、Exclusive、Shared、Invalid四种状态确保多CPU环境下缓存数据的一致性。

cpu cache现在是三级缓存结构,cache的意义:cpu频率较高,内存处理慢,cache的出现是为了解决cpu和内存之间速度不匹配的问题

缓存一致性:mesi协议可以使cpu缓存达成一致性

cache line是cache与内存数据交换的最小单位,根据操作系统一般是32byte或64byte。在mesi协议中,状态可以是四种,地址是cache line中映射的内存地址,数据则是从内存中读取的数据

mesi状态介绍: modify:当前cpu cache拥有最新的数据(cache line),其他cpu拥有失效数据以当前cpu的数据为准 exclusive:当前cpu有数据,其他cpu中没有数据,当前cpu的数据和主寸中数据一致 shared:当前CPU和其他CPU中都有共同数据,并且和主存中的数据一致 invalid:当前CPU中的数据失效,数据应该从主存中获取,其他CPU中可能有数据也可能无数据,当前CPU中的数据和主存被认为是不一致的

对于invalid,mesi协议中采取的是写失效

MESI协议为了保证多个CPU cache中共享数据的一致性,定义了cache line的四种状态,而CPU对cache的4种操作可能会产生不一致状态,因此cache控制器监听到本地操作和远程操作的时候,需要对地址一致的cache line状态做出一定的修改,从而保证数据在多个cache之间流转的一致性。

### MESI缓存一致性协议概述 MESI是一种四状态的缓存一致性协议,用于管理多个处理器之间的缓存行状态,防止数据不一致或丢失的情况发生[^2]。该协议通过定义四种不同的状态来确保当某个处理器修改了一个缓存块的内容时,其他处理器能够及时获取最新的数据。 #### 协议中的四个状态 - **M (Modified)**: 表明当前缓存拥有唯一的副本,并且这个副本已经被修改过。这意味着主内存中的对应位置的数据已经不是最新版本。 - **E (Exclusive)**: 当前缓存独占此缓存行的一个干净副本(未被修改),即只有这一个缓存持有这份数据,但是还没有对其进行任何更改操作。 - **S (Shared)**: 多个缓存可能共享同一个缓存行的不同副本。这些副本都是干净的,没有任何一方对其进行了写入操作。 - **I (Invalid)**: 缓存行无效,表示该地址空间内的数据不再存在于本地缓存中,如果要访问,则需重新加载自内存或其他有效的缓存节点。 #### 工作流程示例 假设在一个多核环境中存在两个核心AB: 1. 如果A读取某变量X并将其放入自己的L1缓存里,在此时它处于`E`状态; 2. 接着另一个CPU B也请求读取相同的变量X,那么两者都会进入`S`状态; 3. 若之后A决定更新变量X,则会先发送消息给所有其他的CPU使其将它们各自的拷贝标记为失效(`I`),然后自己转到`M`状态完成实际的写入动作。 这种机制有效地减少了不必要的总线通信量以及潜在的竞争条件问题,从而提高了系统的整体性能效率。 ```cpp // 假设有一个全局整型变量g_var由不同线程并发访问 int g_var; void thread_a() { // A尝试读取g_var... } void thread_b() { // B同样想要读取g_var... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值