zoukankan      html  css  js  c++  java
  • 图解CPU缓存一致性问题

      产生背景

        CPU的读取速度比内存的快,一个快一个慢,就会有矛盾,就会有人想要解决这个矛盾,所以就提出多级缓存来解决,如下图所示。     

                   

         L1级缓存:分为数据域和程序域。

         L2级缓存:二级缓存。

         L3级缓存:所有CPU共用。

         容量逐级越来越大,读取速度逐级降低。

         这里会产生什么问题呢,比如一个数据:x=3;

        

            现在X=3,存在多份,所以就存在了数据一致性。

      解决方案

        缓存一致性原则:MESI。

        Modified: 已修改的

          缓存行是dirty,与主存的值不同。如果有别的CPU内核想要读主存这块数据,该缓存行必须回写到主存,状态变成S。

        Exclusive:独占的

          缓存行只在当前缓存中,且是干净的。缓存数据等于主数据的,当别的缓存读取它的时候,状态为共享。当前写数据,变成已修改状态。

        Shared: 共享的

          缓存行也存在其他缓存且是干净的,缓存可以在任何时刻被抛弃。

        Invalid:失效的

          缓存行是失效的

        上面四个状态,可以考虑在缓存行里面用两个Bit来实现即可。

        上面四个缓存行的相容状态,如下图:

        

         当前缓存被标记成M,其他CPU上的缓存都要变成失效状态。

         所以现在的有一种机制就是:你的缓存控制器,除了要管缓存的读写之外,还要监听到其他CPU对缓存的值修改。

        

                   MESI协议转换图

        

               

     

      

           

                 

              

        

        

        

    终极目标:世界大同
  • 相关阅读:
    网站页面布局的实现
    谈谈我对MVC的View层实现的理解
    浅谈.htaccess文件--避免滥用.htaccess文件
    magento新增商品属性以及将属性加入Flat table
    MySQL JOIN | 联结
    Linux常用命令
    Laravel Model查询结果的3种存储格式内存占用对比
    Laravel配置Route调用artisan
    研究微信红包分配算法之Golang版
    解决IDEA提示Untrusted Server's certificate 证书不可用( Server's certificate is not trusted )
  • 原文地址:https://www.cnblogs.com/gdouzz/p/14355462.html
Copyright © 2011-2022 走看看