哈工大计算机组成原理第四章下——>缓存Cache(更新中。。)

发布于:2022-10-15 ⋅ 阅读:(366) ⋅ 点赞:(0)

哈工大计算机组成原理课程
b站
mooc
大纲:
在这里插入图片描述

存储器下

缓存

概述

由于CPU和主存的速度差异,避免CPU“空等”现象

程序访问的局部性原理

  • 时间局部性:当前正在使用的数据和指令,在不久的将来还会被使用
  • 空间局部性:当前正在使用的数据和指令,不久的将来,它相邻的是数据和指令也会被使用到

1. Cache的工作原理

  1. 编址
  • 主存——缓存是以块为单位进行存储传输的,主存共分成了M块,Cache共分成了C块,其中C << M,两种块的大小相同,块内地址不变化
  • 主存每个块内有b位块内地址,B个存储字,Cache块内的地址和主存是一样的,B是块长
  • Cache块的标记对应主存中相应的块号
    在这里插入图片描述
  1. 命中和不命中
    在这里插入图片描述

  2. 命中率
    在这里插入图片描述

  3. Cache——主存的效率

    效率的最大值是当h=1是,e=1
    最小值是当h=0时,,e=tc/tm
    在这里插入图片描述
    只有当访问Cache的同时也在访问主存,得到的平均时间才是上式

当要先访问Cache,没有找到时再去主存里找,这样得到的平均时间是:htc+(1-h)(tm+tc),Cache没有时,要到主存里找,已经过了访问Cache的tc时间,所以访问主存时间一定有tc,不需要乘命中率,化简之后是tc+(1-h)*tm

2. Cache的基本结构

在这里插入图片描述

3. Cache的读写操作

读操作:
在这里插入图片描述

写操作:
涉及Cache与主存的一致性问题
在这里插入图片描述

4. Cache的改进

  • 增加Cache的级数:片载Cache、片外Cache
  • 统一缓存和分立缓存:指令Cache、数据Cache

Cache——主存的地址映射

  • 直接相联映射
  • 全相联映射
  • 组相联映射

1. 直接相联映射

  • Cache共有2c个块,主存有2m个块,将主存块分成若干区,每个区块数和Cache块数相同。

  • Cache的字块0对应主存中每一区的第0块,字块1对应每一区的第一块,但是Cache块中只能存放这些块中的一个

  • 主存地址由三部分组成:主存字块标记+Cache字块地址+块内地址
    主存字块标记:主存的哪一个区
    Cache字块地址:组中的哪一个块

  • 不知道Cache块中放的到底是哪个区的,所以要在Cache块添加标记,标记就是区号

  • CPU向主存传输地址,先根据Cache字块地址查看Cache中有没有这么块,有的话再将这个Cache块的区号标记和地址中的主存字块标记作比较

  • 缺点:字块0只能存放每个区的第0块,利用率低

  • Cache块i = 主存块j mod C
    在这里插入图片描述

2. 全相联映射

  • 与直接相联映射恰好相反,没有划分区,它是Cache的每个块都可以存放主存的每个块
  • Cache块的标记就是主存的字块标记,需要将主存地址的字块标记和Cache标记一一比较看是否命中
  • Cache利用率高但结构比较复杂,需要比较的位数也多
    在这里插入图片描述

3. 组相联映射

  • Cache块被分成若干组,每组有两块(2/4/8块均可)

  • 主存分区,每个区大小和Cache的组数相等

  • 映射时主存每个区的第0块可以放在第0组的任意一个位置

  • 和直接相联映射相比,一个块有多个位置,一个位置被占用,其他位置为空时也可以继续使用

  • 和全相联相比,要确定某个主存块是否被调入到Cache中,只需要知道这个块在所在区的块号,这个块号等于Cache的组号,再到这个组中查看组内哪个块的标记与区号一致即可,有两个比较器同时进行比较,只要有一个命中即可

  • 主存块j对Q取模就是第几组,i=j mod Q,j可以映射到第i组的任意一块

  • 距离CPU近的Cache可以采用直接相联映射,远的采用全相联
    在这里插入图片描述

替换算法

  1. 先进先出(FIFO)算法:存在问题就是先出去的可能就是经常使用的
  2. 近期最少使用(LRU)算法

小结:
直接:不灵活
全相联:成本高
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告


今日签到

点亮在社区的每一天
去签到