zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    iOS 十六进制字符串 "#FFFF00" 转换成颜色对象
    iOS toast 的连续显示
    文件管理
    pod 常用命令
    键盘事件
    iOS 添加阴影
    渐变色
    Ubuntu安装flameshot截图工具
    Ubuntu安装酸酸乳客户端
    Ubuntu安装网易云音乐
  • 原文地址:https://www.cnblogs.com/binyue-sunmk/p/14049105.html
Copyright © 2011-2022 走看看