CPU多级缓存分析--状态MESI变化

首先介绍一下MESI是什么

M : modified  被修改的缓存行, 随时准备写入主缓存的状态

E : exclusive 独享的缓存航, 当前cpu的独享状态

S : shared     共享的缓存行

I : invalid       失效的状态

 

 当前状态             事件                                                     行为 下一个状态
I(invalid)    local  read

1.如果其他处理器中没有这份数据,本缓存从内存中取该数据,状态变为E

2.如果其他处理器中有这份数据,且缓存行状态为M,则先把缓存行中的内容写回到内存。本地cache再从内存读取数据,这时两个cache的状态都变为S

3.如果其他缓存行中有这份数据,并且其他缓存行的状态为S或E,则本地cache从内存中取数据,并且这些缓存行的状态变为S

     E或S
    local  write

1.先从内存中取数据,如果其他缓存中有这份数据,且状态为M,则先将数据更新到内存再读取(个人认为顺序是这样的,其他CPU的缓存内容更新到内存中并且被本地cache读取时,两个cache状态都变为S,然后再写时把其他CPU的状态变为I,自己的变为M)

2.如果其他缓存中有这份数据,且状态为E或S,那么其他缓存行的状态变为I

      M 
 remote  read remote read不影响本地cache的状态       I
 remote  write remote read不影响本地cache的状态       I
E(exclusive)  local  read 状态不变      E
   local  write 状态变为M      M
remote  read 数据和其他核共享,状态变为S      S
remote  write 其他CPU修改了数据,状态变为I       I
S(shared)  local  read 不影响状态      S
   local  write 其他CPU的cache状态变为I,本地cache状态变为M      M
remote  read 不影响状态      S
remote  write 本地cache状态变为I,修改内容的CPU的cache状态变为M       I
M(modified)  local  read 状态不变      M
   local  write 状态不变      M
remote  read 先把cache中的数据写到内存中,其他CPU的cache再读取,状态都变为S      S
remote  write 先把cache中的数据写到内存中,其他CPU的cache再读取并修改后,本地cache状态变为I。修改的那个cache状态变为M      I
posted @ 2020-11-27 16:58  冰月华林  阅读(197)  评论(0编辑  收藏  举报