缓存+写缓冲区+无效化队列 == 缓存一致性协议+内存屏障
缓存+写缓冲区+无效化队列 == 缓存一致性协议+内存屏障
参考
Java多线程编程实战指南-核心篇 第11章前4节
计算机科学基础知识(一):The Memory Hierarchy
硬件
缓存+写缓冲区+无效化队列
指令
内存屏障指令
阶段
缓存 == 缓存一致性协议
缓存+写缓冲区+无效化队列 == 缓存一致性协议+内存屏障
MESI将缓存条目的状态划分为Modified,Exclusive,Shared,Invalid4种。并在此基础上定义了一组消息,用于协调各个处理器的读写内存操作。
无效态(Invalid) 此缓存行内容无效(空行)
共享态(Shared)此缓存行内容同于主存,并且其他处理器上的缓存也可能包含内存地址对应的副本数据。
独占态(Exclusive)此缓存行内容同于主存,并且这个内存地址的数据不存在与其他处理器缓存中。
修改态(Modified)此缓存行内容已被修改,不同于主存。
-
处理器在读写操作时向总线发送特定的消息
-
处理器嗅探总线中其他处理器发送的消息并回复。
缓存条目结构
缓存条目组成:tag+flag(缓存行状态标志)+data block(缓存行)
缓存条目地址:如0x00-0xFF,同内存地址一样连续的。
缓存条目地址对应存储单元位数:tag的位数+flag的位数+缓存行的位数
内存地址位数:32位。
内存地址对应存储单元位数:8位(4GB内存)
缓存行是缓存与cpu交换数据的单位。因为tag和flag的存在,缓存行的位数小于缓存条目的位数。