然后,我们再来看“独占”和“共享”这两个状态。这就是 MESI 协议的精华所在了。无论是独占状态还是共享状态,缓存里面的数据都是“干净”的。这个“干净”,自然对应的是前面所说的“脏”的,也就是说,这个时候,Cache
Block 里面的数据和主内存里面的数据是一致的。那么“独占”和“共享”这两个状态的差别在哪里呢?这个差别就在于,在独占状态下,对应的 Cache Line 只加载到了当前 CPU 核所拥有的 Cache 里。
其他的 CPU 核,并没有加载对应的数据到自己的 Cache 里。这个时候,如果要向独占的 Cache Block 写入数据,我们可以自由地写入数据,而不需要告知其他 CPU 核。在独占状态下的数据,如果收到了一个来自于总线的读取对应缓存的请求,它就会变成共享状态。这个共享状态是因为,这个时候,另外一个 CPU 核心,也把对应的 Cache Block,从内存里面加载到了自己的 Cache 里来。而在共享状态下,因为同样的数据在多个 CPU 核心的 Cache 里都有。
所以,当我们想要更新 Cache 里面的数据的时候,不能直接修改,而是要先向所有的其他 CPU 核心广播一个请求,要求先把其他 CPU 核心里面的 Cache,都变成无效的状态,然后再更新当前 Cache 里面的数据。这个广播操作,一般叫作 RFO(Request For Ownership),也就是获取当前对应 Cache Block 数据的所有权。
电脑常见英文词汇
persistence 永续性 持久性
pixel 图素、像素 像素
placement delete ref. C++ Primer 3e, 15.8.2
placement new ref. C++ Primer 3e, 15.8.2
platform 平台 平台
pointer 指标 指针
址位器(和址叁器 reference 形成对映,满好)
poll 轮询 轮询
polymorphism 多型 多态
pop up 冒起式、弹出式 弹出式
port 埠 端口
postfix 後置式、後序式 後置式