系统的三级存储结构
缓存Cache-主存储器-辅存(磁盘存储器)
映像规则的三种分类
全相联映像
全相连:主存中的任意一块可以被放置到cache中任意一个位置。
直接联映像
主存中每块只能被放置到cache中唯一的一个位置。
主存i块可以放到cache中的j块。
j=i mod(M) M:cache的块数
组相连映像
是前两种的结合,把cache分组,每一个组对主存都是直接相连,对组内是全相连。
主存第i块映像到第k组。
k=i mod (G) G:cache组数
n路组相连
每组中有n个块(n=M/G)。n为相连度。相连度越高空间利用率越高,块冲突越低,不命中率也越低。
n | G | |
---|---|---|
全相连 | M | 1 |
直接映像 | 1 | M |
组相连 | 1<n<M | 1<G<M |
通常n<=4
替换算法
随机法
先进先出FIFO
最近最少使用LRU
使用堆栈(可以被随机访问),被访问后重新入栈,提升优先级。当需要替换时,选栈低元素。
写策略
写直达法
不只写入cache也写入主存。缺块不按写分配。
写回法
值写入cache,cache要被替换时才写入主存。(cache需要增添一个修改位),缺块按写分配。
优点 | 缺点 | |
---|---|---|
写直达法 | 一致性好 | 写停顿 |
写回法 | 速度快,存储器使用带宽低 | 比写直达法难实现 |
cache性能分析
平均访存时间
平均访存时间=命中时间+不命中率x不命中开销
降低cache不命中率
cache不命中分类
- 强制性不命中
第一次访问,该块不在cache中。 - 容量不命中
cache容量不足以放入整个块。但是又被重新访问。 - 冲突不命中
组相连或者直接映像cache中,太多块映像到同一个块中,但对应的块都要访问,产生冲突。
增大cache大小,降低容量不命中概率。
相联度增加,降低冲突不命中。
降低cache不命中开销
两级cache加速
L1块,L2容量大
平均访存时间=命中时间L1+不命中率L1x不命中开销L1
不命中开销L1=命中时间L2+不命中率L2x不命中开销L2
局部不命中与全局不命中
局部不命中率=该级的cache不命中次数/到达该级的访问次数。
全局不命中率=该级cache的不命中次数/CPU发出访存的总次数
Q.E.D.