1.1 概述
一、产生原因
- 为避免CPU空等的现象
- CPU与主存(DRAM)的速度差异剪刀差越来越大
- 依据程序局部性原理
二、Cache的工作原理
1、主存和缓存的编址
- C<<M
- 若把主存或者Cache,如果把主存或者Cache分成若干块,则cpu给出内存的地址可分为两部分,一部分是块内偏移地址,位数决定块的大小,若一个块包含16个字节,且内存编址单位是字节,则块内地址部分就是4位,剩余部分就是主存的块的编号。
- Cache也分为块内地址和缓存块号两部分
Cache的标记部分实际上标记了主存块和Cache块之间的对应关系,如果一个主存块调入到Cache当中,可讲主存块号写到标记当中。cpu要从cache中访问这个数据,要先确定要访问的块号是不是已经被送到Cache当中,拿给出地址的主存块号与标记进行比较,若正好相等,并且Cache是有效的,则这个块里面就保存了在内存里的信息可以直接从Cache访问数据,速度大大加快
2、命中与未命中
缓存共有C块 主存共有M块 主存中只有部分块被放入了缓存当中
- 命中 在cpu要访问主存时,要访问的块已经放进了缓存当中,CPU可以从缓存中取到相应的数据和指令
- 未命中 要访问的块没有被放入缓存中,cpu只能从主存中获取数据
若命中,主存和缓存块之间就建立了对应关系,某一个主存块装入到了某一个缓存块当中,这个对应关系就可以用标记进行表示,如果没有调入那么就没有建立这种对应关系。在标记记录当中记录了与某缓存块建立对应关系的主存块号
3、命中率
- CPU预访问的信息在Cache的比率 命中率和Cashe的容量与块长有关
- 一般每块可取4-8个字
- 块长取一个存取周期内从主存调出的信息长度
- CRAY_1 16体交叉 块长取16个存储字
- IBM 370/168 4体交叉 块长取4个存储字
4、主存系统的效率
效率e与命中率有关
访问Cache的时间/平均访问时间
设Cache命中率为h,访问Cache的时间为,访问主存的时间为,则
三、Cache的基本结果
四、Cache的读写操作
读操作
写操作 Cache和主存的一致性
1、写直达法
- 写操作时数据集写入Cache又写入主存
- 写操作时间就是访问主存的时间,Cache块退出时,不需要对主存执行写操作,更新策略比较容易实现
2、写回法
- 写操作时只把数据写入Cache而不写回主存,当Cache数据呗替换出去时才写回主存
五、Cache的改进
- 增加Cache的级数
- 统一缓存和分立缓存
1.2 Cache-主存的地址映射
一、直接映射
主存当中任意一个给定的块只能映射到指定的cache块当中
拿Cache存储体作为一个尺子度量主存存储体,将主存储器划分成若干个与cache存储体相等的区,每个区当中包含字块数与Cache相同,每个区中的字块编号时可以从0开始,任何一个区的第0块只能放到cache的第0块。
如果cpu给出一个地址,我们分成三部分,区号、块号、块内偏移地址。要对比区号与标记是否相同,则为命中
二、全相联映射
Cache利用率变高,只要Cache中还有空闲字块就可以调入,但是速度慢
三、组相联映射
先把Cache分成块,Cache块被分成组。
主存储器进行分区,每个区的大小与Cache的组数相同。每个区的字块0可以被放入cache的第0组任意位置
1.3 替换算法
一、先进先出算法
二、近期最少使用算法
2.1 辅助存储器