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协议转换图

        

               

     

      

           

                 

              

        

        

        

    终极目标:世界大同
  • 相关阅读:
    mariadb配置双主多从
    mq系列rabbitmq-02集群+高可用配置
    mq系列rabbitmq-01简介,安装,api操作
    持续集成框架jenkins介绍02-持久集成git仓库+maven项目
    git仓库相关知识03-搭建远程仓库服务器
    RecyclerView瀑布流优化方案探讨
    Android实际开发bug大总结
    Android打造万能自定义阴影控件
    PagerAdapter深度解析和实践优化
    Java博客大汇总
  • 原文地址:https://www.cnblogs.com/gdouzz/p/14355462.html
Copyright © 2011-2022 走看看