参考学习平台大学慕课:https://www.icourse163.org/learn/HIT-309001
1 概述
为什么计算机需要高速存储器?
(1)避免CPU“空等”现象;
(2)CPU和主存(DRAM)的速度差异。
试解释程序访问的局部性原理。
时间局部性原理:当前正在使用的指令和数据,在不久的将来,还会被使用到;故应该将它们放到Cache中存储起来。
空间局部性原理:当前正在使用的指令和数据,在不久的将来,相邻的指令和数据也会被使用到,故应该将其相邻的指令和数据放到Cache保存起来。
这样当前正在使用的指令和数据和其相邻的指令和数据都将被放到Cache当中,这样Cache和主存之间数据交换的单位是块。
另外需注意的是,主存与缓存按块存储,块的大小相同,块内地址相同。
试解释Cache的中的命中与未命中、命中率、主存系统的效率等重要概念。
命中:主存块调入缓存,主存块和缓存块建立了对应关系;
用标记记录与某缓存块建立了对应关系的 主存块号。
未命中:主存块未调入缓存,主存块与缓存块未建立对应关系。
命中率:CPU 欲访问的信息在 Cache 中的 比率;
命中率与Cache的容量与块长有关。(⭐️)
一般每块可取4~8个字。
访问效率e与命中率有关:
e的最小值是tc/tm;最大值是1。
试解释Cache的基本结构。
CPU要访问主存,通过地址总线获取主存的块号和块内地址,由于Cache和主存之间是以块为单位进行传输的,因此主存中的块内地址可以直接传到Cache中。然后块号通过主存Cache地址映射变换机构,确认是否命中。
若命中,则形成Cache的块号;否则查找Cache中是否还有空间进行装入。
若有空间,则访问主存,把主存块装入Cache中;否则启动Cache替换机构,根据替换算法决定Cache当中哪一个块要从Cache中退出(退出的块写回主存或直接作废),并且把主存的块要用的块写入到Cache中。换言之,当新的主存块需要调入缓存中,而它的可用位置又被占用时,需根据替换算法解决调入问题。
上述过程中,地址映射和变换这一概念也相当重要,地址映射实际上给出了一个规则:主存当中的一个块如果要放到Cache当中的话,它可以被放到Cache中的哪一个块。主存的块号或地址转换成Cache的块号或地址。简而言之,将主存地址映射到缓存中定位称为地址映射,将主存地址变换成缓存地址称为地址变换。
试解释Cache的读操作和写操作。
读:
写:
写操作要解决Cache和主存的一致性:
-
写直达法(Write – through)
写操作时数据既写入Cache又写入主存
优点:写操作时间就是访问主存的时间,Cache块退出时,不需要对主存执行写操作,更新策略比较容易实现
缺点:会造成一块Cache块的频繁访问。 -
写回法(Write – back):
写操作时只把数据写入 Cache 而不写入主存,当 Cache 数据被替换出去时才写回主存
优点:写操作时间就是访问 Cache 的时间。
缺点:Cache块退出时,被替换的块需写回主存,增加了Cache 的复杂性。
2 Cache-主存的地址映射
2.1 直接映射
定义:主存当中任意一个给定的块,只能装载到Cache指定的块当中。
每个缓存块 i 可以和 若干个 主存块 对应
每个主存块 j 只能和一个 缓存块 对应
将Cache存储体当作一个尺子,来度量主存储体。
这样的地址映射的标记位分为:区号位(t)+字块位©+字块内地址(b)。
2.2 全相联映射
定义:主存 中的 任一块 可以映射到 缓存 中的 任一块
这样的地址映射的标记位分为:主存字块标记位(m)+字块内地址。
2.3 组相联映射
某一主存块 j 按模 Q 映射到 缓存 的第i组中的 任一块
如果组相联中全部的组变为一组,则组相联映射变为了全相联映射;如果组相联映射中每一组中的两个字块变为了一个,则组相联变为了直接相联。
靠近CPU的Cache要求高速的,可以采用路数比较少的组相联或者直接相联的方式;中间的Cache可以组相联的方式,如两路组相联、四路组相联、八路组相联等;距离CPU较远的Cache可以采用全相联的方式,因为对速度没有那么高的要求。
小结:
直接 | 某一 主存块 只能固定 映射到 某一 缓存块\ |
---|---|
全相联 | 某一 主存块 能 映射到 任一 缓存块 |
组相联 | 某一 主存块 只能 映射到 某一 缓存 组 中的 任一块 |
3 替换算法
3.1 先进先出 ( FIFO )算法
最先放入的块一共最先被替换出去。
这种方法不能很好地体现程序局部性原理。
3.2 近期最少使用( LRU)算法
我们希望替换出去的块恰好是CPU近期最少使用块,因此这种算法能很好地体现程序的局部性原理。