为什么要设立高速缓冲存储器 (Cache)?
Cache是介于CPU和主存之间的小容量存储器,存取速度比主存快。它能高速地向CPU提供指令和数据,加快程序的执行速度。它是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。
不过计算机本身是不知道自己是这样的执行,它只知道用
Cache工作原理
在计算机中,我们访问的速度快有个重要的原因,就是引入了cache
他提前,把主存的内容下载好,然后让我们快速访问,通常cache会比主存小很多
Cache与主存之间的数据交换是以块为单位
所为块,我们把主存和cache里面,我们分成一个一个的小房间,也就是块,这样你需要什么我们可以直接找到房间号,去拿出我们要的东西
Cache的基本概念
- 命中 hit: CPU访问数据在cache中(上层存储器)
- 缺失 miss: CPU访问数据不在cache中
- 块 block: cache与主存交换最小单位
块大小多少合适??? 实现预读 - 行/槽 Line/Slot:标记、标志位、数据块容器
有效位、查找标记、脏标志位、置换标志、数据块副本 - Cold Cache、Warm Cache
Cache的性能参数
如果考到以下的例题那就是送分题
Cache的命中率
增加cache的目的,就是在性能上使主存的平均访问时间尽可能接近Cache的访问时间。因此,Cache的命中率应接近于1。由于程序访问的局部性,这是可能的。在一个程序执行期间,设Nc表示Cache完成存取的总次数,Nm表示主存完成存取的总次数,h定义为命中率(Hit Ratio),则有
平均访问时间(等效访问时间)ta
若tc表示命中时的Cache访问时间,tm表示未命中时的主存访问时间,1-h表示为缺失率(Miss Ratio),则Cache/主存系统的平均访问时间ta为:
访问效率
设立Cache/主存系统的目标,是以较小的硬件代价,使系统的平均访问时间ta越接近tc越好。设r=tm/tc表示主存慢于Cache的倍数,e表示访问效率,则有:
由上式可以看出,为提高访问效率,命中率h越接近1越好,r值以5---10为宜,不宜太大。
命中率h与程序的行为、Cache的容量、组织方式、块的大小有关。
Cache读、写流程与关键技术
- CPU给出主存地址(块地址,块内地址)
- 主存块地址为关键字进行查找
- 如相符表示副本在cache中,命中,访问cache
- 否则数据缺失,访问主存
将数据所在块副本调入cache(块交换---局部性)
载入副本过程可能引起替换
更新查找表,记录当前数据块地址
cache缺失时系统等待数据调入
- CPU给出主存地址
- 主存块地址为关键字进行查找
相符则表示命中,数据副本在cache中
缺失根据写分配策略决定是否将该主存地址对应数据块调入 - 写入数据到cache
- 根据写策略决定是否写入主存
CPU cache基本组织方式
- CPU cache由较快的SRAM构成
- cache与主存均分为固定大小的数据块,以块为单位交换数据
- 相联存储器存放查找表
表项:(有效位,调入cache的主存块地址,cache块地址)
容量 = cache块数 * 表项大小 - CPU给出的块地址与查找表中某单元相同且有效位为1表示命中
全相联:硬件多路并发比较可以提升查找速度
下图是块与块内地址
重点
全相联
查找表和缓存副本一体(CPU片内缓存)
存放cache行
有效位,主存块地址,数据块副本,标志位(Dirty bit),置换标记
存储容量= cache行大小 × 行数
查找表和缓存副本分离(片内查找表,片外缓存)
存放查找信息
有效位,主存块地址, cache块地址,标志位(Dirty bit),置换标记
存储容量=查找表表项大小 × 行数
解释:根据上图,我们看到1F转换为二进制,就是000011111,至于为什么一共是9位,这是因为主存块的大小2的9次方
直接相连
cache容量 = 行大小 × 行数
=(标志位+标记位+数据块+置换标记) × 行数
标记位=区地址
标志位(有效标志位,脏数据位)
无相联存储器,一个比较器
组相连
SRAM
存放数据副本
多个相联存储器共享一个多路比较器
相对于全相联 多路比较器复杂度低
查找表表项内容(valid位,标记,dirty位,置换标记位)
相联存储器总容量
cache行数*(1+标记宽度+1+置换标记位)
片外缓存如果查找表在CPU内部?
查找表中必须增加cache行地址? why
例题
对于初学的难题
这道题的难点
1.脑子对字和字节要转换过来
2.对于倍数,2进制的运算,要理解清楚