zoukankan      html  css  js  c++  java
  • 计算机操作系统(七)---缓存

    存储器层次结构

    存储器层次_thumb[2]

    图五

     

    如何从内存中拿地址时先去判断缓冲是否存在   

            我们首先要了解一下cache的操作流程,见下图. 

    cache 造作过程 

            假如在主存中拿数据的时候有个映射就可以判断是否存在缓冲,这个映射有三种方式

    • 直接
    • 全相联
    • 组相联

    cache 造作过程

    图一

    缓冲映射关系方式

    图二

            这三种方式如何理解呢?如下图,假如我们知道一个主存地址,一部分可以映射到Cache ,一部分是主存储器的位置,直接映射指的是每个主存地址对应Cache 的一个地址.缺点就是新的总是会替换掉久的,但是容易实现,命中时间短.

    直接映射

    图三

    全相联

    图四

    组相联

    图五

            图四图五分别是全相联和组相联映射,全相联是哪个地址都可以放,到时查找的时候再一个个匹配,可以知道这种方式速度比较慢,

    组相联映射则结合以上两种方式,分组后再随意放,组称为一个set .

    Cache 命中与不命中几个名词概念

           可以有公式验算得出: 要提高平均访问速度,必须提高命中率.

    cache名字概念

    图六

    关联度

            注意看图中的结论.

    关联度7

    图七

    标记位关联度

    图八

    Cache写策略

          写命中指的是我需要的那个block已经在cache里面了,那么由于我更新值,所以目的就是更新cache 更新 block .write through 就是同时写 cache 和主存单元,当时由于这样子操作太慢了,所以可以使用一种叫 写缓冲的(write buffer ),见图十,write back 是所有操作都在cache 中进行,同时锁住主存中的地址不给访问,让我操作完成后再回写给内存中.

    cache写策略

    图九

    writebuffer

    图十

           而写不命中指的是我需要写的内存地址,在cache 并没有,一下总结来自参考文章,

    1.CPU读Cache时:

    ●若hit,则CPU直接从Cache中读取数据即可。

    ●若miss,有两种处理方式:

       >Read through,即直接从内存中读取数据;

       >Read allocate,先把数据读取到Cache中,再从Cache中读数据。

    2.CPU写Cache时:

    ●若hit,有两种处理方式:

        >Write through:把数据同时写到Cache和内存中;

        >Write back:先把数据写到Cache中,再通过flush方式写入到内存中。

    ●若miss,有两种处理方式:

        >Write allocate:先把要写的数据载入到Cache中,写Cache,然后再通过flush方式写入到内存中;

        >No write allocate:直接把要写的数据写入到内存中。

    Cache 数目

    cache数目

    问题一

    答: 因为是为了流水线的执行,所以分开了指令cache 和 数据cache

    问题二

    答: 因为 L1要是不命中的话后面还有2和3.

    问题三

    答: 因为L2 既后续的Cache空间相比1大,而已,可以使用联合cache

    问题四

    答案:蓝色字

  • 相关阅读:
    matlab的变量判断是字符还是数字
    《误杀2》影评
    木心诗选
    Matlab查找一个元素在向量或矩阵中的位置
    数据什么时候需要做中心化和标准化处理?
    The Elements of Statistical Learning
    matlab如何将一个矩阵的任意两行或两列交换
    三次多项式和三次样条曲线的区别
    redis如何设置密码
    阿里云LAMP 环境
  • 原文地址:https://www.cnblogs.com/Benjious/p/10041257.html
Copyright © 2011-2022 走看看