• cache学习笔记


      在计算机存储体系中,cpu与主存乃至外存的速度相差过大,如果每次都直接从中取出数据,cpu需要耗费大量时间在读写上,为了提高利用率,分级存储系统就是为了缓解这一问题。

    但cache作为靠近cpu的一级存储器,并不能将内存做的过大。cache一般由SRAM制成,每个单位都需要6个MOS管,这就意味着cache的集成度低,而且成本更高。

      在计算机中存在着两个局部性理论:空间局部性理论指出,最近未来会用到的数据和指令,很可能和当前指令或数据存在接近的空间位置。时间局部性理论指出,最近未来会用到的数据和指令,很可能是现在正在使用的信息。基于局部性原理,我们可以将当前访问地址的附近内容装入cache,方便cpu取用。

      在使用cache时,将主存和cache均分为相等大小的小内存块。以块为单位交换数据。   例:主存4MB,相当于22位地址可达。如果以1KB为单位分配可以分为4096块。这22位地址就分为了12位块号和10位块内地址。  在执行将主存块内容搬入对应cache块时,由于主存块数量肯定多于cache块数量,有三种常见的映射方式决定它们之间要如何匹配:

      1)直接映射  直接对二者进行映射  每个cache可存放 目标主存号%cache总块数 的主存块   假如有6个主存块,3个cache块,那么1号cache块可存放1、4号主存块,2-->2、5,3-->3、6

      2)全相联映射   任意cache块可存放任意主存块

      3)组相联映射  先将cache分组, 每组内任意cache都可存放  目标主存块号%cache组数 的主存块。也就是说将直接映射的单位变成了一组cache块。

      为了拷贝数据,需要主存到cache之间的映射关系,这些映射关系被存放在映射关系表中。

    ------------

      在实际使用中,cache每块前可以加一个标记,用来记录自己存储主存块号;除了块号,还要添加一个有效位,用于标记是否用过该块。

    -------------

      在拥有了cache后,CPU访问数据的操作是这样的:首先在cache中检查是否有对应块,如果有则直接取用,此时称为命中。如果没有,还需要去访问主存。

      cache的容量有限,如果对应的cache已经被使用,但此时又有新内存需要载入,那么就需要使用到cache的替换算法

      1)随机替换 RAND

      2)先进先出   FIFO  最先被使用的cache块先被替换

      3)近期最少优先,LRU   每个cache块上加入计数器,记录该块已经有多久未被使用,每次替换时替换最久无用块。 在每次调入一个内存数据块时,新cache块计数器置零,而其他cache块计数全部+1.

      4)最不经常使用 LFU     同样有计数器,但此时计数器记录的是该块被访问的次数。调入新块时,新块的计数器置零。

    -------------

      在使用cache时,由于cache本质就是拷贝了一小部分的主存数据,所以CPU在操作时产生了一个问题:如果CPU修改了数据,那么如何保证cache和主存的数据是同步的?

    在cache的写策略中,根据是否命中,有四种策略可以使用:

      命中时

      1)写回法:CPU命中时,只修改cache的数据,此块被置换出去以后才写回内存;使用这种策略时,每块cache还要增加一个标志位标记此块是否被使用过。

      2)全写法:命中时,cache和对应主存的数据都修改;

      未命中时

      1)写分配法:先把数据调入cache块,然后修改cache的数据,一般这种方式要配合写回法使用;

      2)非写分配法:如果没有命中,直接修改主存的数据,不再调入cache。

    一般情况下,cache不止一级,各级cache间使用全写法+非写分配法,cache和主存间使用写回法+写分配法。

    -----------------

    注:cache等存储器操作不需要CPU的参与,它们对于CPU来说是完全透明的。

  • 相关阅读:
    分布式服务之CAP定理
    VUE启动报错
    码云管理项目
    推广项目之日志打印
    asp.net mvc中使用jquery H5省市县三级地区选择控件
    asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建
    asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立
    asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发
    asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作
    asp.net mvc下实现微信公众号(JsApi)支付介绍
  • 原文地址:https://www.cnblogs.com/namezhyp/p/14791169.html
Copyright © 2020-2023  润新知