perfbook Appendix C 章节的翻译,感觉这本书讲内存屏障讲的非常好,以下只是该章节部分英文翻译,想深入理解的可以看看书。
MESI state
M(modify) : CPU拥有该cache line,这个cache line内包含最新的数据,这个cache负责最终写回内存或者传递数据到其他cpu cache
E(exclusiv) : 和modify状态相似,唯一的区别是没有被该CPU修改,和内存中的保持一致.这个CPU可以store data不需要和其他CPU交流
S(Shared) : read only, 至少还有一个CPU的cache有它的相同,和内存的数据也相同
I(invalidate) : empty, it hold no data
MESI protocol 消息类型
Read:
Read消息包含被读cache line的物理地址
Read Response:
回复read消息,内存和其他CPU cache都可以提供该回复消息
如果一个cache line的状态是Modify,这个cache必须提供read response
Invalidate;
包含被无效cache line的物理地址,其他cpu caches 必须移除相应数据并给出响应
Invalidate Acknowledge
收到Invalidate的CPU 必须响应该类型消息
Read Invalidate:
包含被读cache line的物理地址,同时告诉其他cpu cache 无效数据
它是read he invalidate的结合,必须收到read respond 和 incalidate acknowledge回复.
Writeback:
写回内存
该消息允许高速缓存根据需要弹出处于“修改”状态的行,以便为其他数据腾出空间。
MESI 状态转换表:
解释:
a(M–>E)
一个cache line 被写回内存,并且该CPU还保留cache line在自己的cache中,未来还有权限修改它.
这个转换需要Writeback消息
b(E–>M)
CPU写一个状态已经是exclusive的cache line
这个转换不需要接受或者发送消息
c(M–>I)
CPU收到它已经修改的某一cache line的read invalidate消息, CPU必须无效他的本地copy,
并发送read respond和invalidate ackknowledge
d(I–>M)
CPU对在他自己的cache上不存在的内存做一个原子的read-modify-write操作,
发送read invalidate
等待接收相对应的respond
e(S–>M)
CPU对在他自己