Cache
主存中的块如何放到Cache的哪个位置?
- 空位随意放:全相联映射
- 对号入座:直接映射
- 按号分组,组内随机放:组相联映射
对于1,Cache满了以后应该如何处理;对于2、3,对应位置被占用应该如何处理?
- 随机算法
- 先进先出算法
- 近期最少使用算法
- 最不经常使用算法
在修改Cache中的内容后,如何保存主存中相应内容的一致性?
- 命中
- 全写法
- 写回法
- 不命中
- 写分配法
- 非写分配法
Cache的地址映射方式
cache块:是cache与主存之间传送数据的基本单位
cache中存放内容:标记项+数据
cache的数据块大小称为行,用
L
i
L_i
Li表示,其中
i
=
1
,
…
,
m
−
1
i=1,\dots,m-1
i=1,…,m−1,共有
m
=
2
r
m=2^r
m=2r行
主存的数据块大小称为块,用
B
j
B_j
Bj表示,其中
j
=
1
,
…
,
n
−
1
j=1,\dots,n-1
j=1,…,n−1,共有
n
=
2
s
n=2^s
n=2s块
块与行是等长的,每个单位由
2
w
2^w
2w个连续的字组成
字是每个CPU访问存储器的时候可以存取的最小单位
- 全相联映射
主存的地址长度: s + w s+w s+w
寻址单元数: 2 s + w 2^{s+w} 2s+w
块 大 小 = 行 大 小 = 2 w 块大小=行大小=2^w 块大小=行大小=2w个字
主存的块数: 2 s 2^s 2s - 直接映射方式
主存的地址长度: s + w s+w s+w
寻址单元数: 2 s + w 2^{s+w} 2s+w
块 大 小 = 行 大 小 = 2 w 块大小=行大小=2^w 块大小=行大小=2w个字
主存的块数: 2 s 2^s 2s
cache的行数: m = 2 r m=2^r m=2r
标记行数: ( s − r ) (s-r) (s−r)
主 存 区 内 块 号 = c a c h e 行 号 主存区内块号=cache行号 主存区内块号=cache行号 - 组相联映射方式
就是对直接映射方式中的cache行数进行处理
具体实现可以参考下图
优点 | 缺点 | |
---|---|---|
全相联映射方式 | 将内存中的内容随意的放到cache当中 | 高速比较器电路难以设计和实现只适用于小容量cache使用 |
直接映射方式 | 将某一块映射到cache中的时候,是保持了它和它附近块的相邻的顺序 硬件简单成本低、地址速度变化快 | 每个主存块只有一个固定的行位置可存放 如果发生连续访问,可能会进行频繁的换进换出,降低cache的效率 |
组相联映射方式 | 电路简单、投资较佳 | 存放位置和命中率较优 |
替换算法
-
随机算法(RAND)
随机的确定替换的cache块。实现简单,但是没有依据程序访问的局部性原理,故而命中率可能较低
-
先进先出算法(FIFO)
选择最早调入的进行替换。实现较为简单,但是也没有依据程序访问的局部性原理,可能会把一些需要经常使用的cache块也作为最早使用的给替换掉
-
近期最少使用算法(LRU)
依据程序访问的局部性原理选择近期内长久没有访问过的存储行作为替换的行,平均命中率要比FIFO高,是堆栈类算法
LRU算法对每行设置一个计数器,cache每命中一次,命中行计数器清零,而其他各个行的计数器均加1,需要替换掉 时候比较各个特定的行的计数值,将计数值最大的行换出
-
最不经常使用算法(LFU)
将一段时间内的被访问次数最少的存储行换出,每行也设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的计数行加1,需要替换的时候比较各个特定行的计数值,将计数值最小的行弹出
cache的写操作
由于cache的内容只是主存部分的副本,故而其应该和主存保持一致,对于如何和主存内容保持一致,可以选取以下三种策略
- 写回法
- 全写法
- 写一次法
写回法
当CPU命中cache的时候,只修改cache中的内容,而不立即写回主存;只有当此行被换出的时候才写回主存
这种方法使得cache在CPU-主存之间读/写两个方面都起到了高速缓存的作用
使用这种方法的时候,每个cache必须配置一个修改位,来反应此行是否被CPU修改过
若CPU写cache未命中,为了包含欲写字的主存块在cache中分配一行,将这一整块复制到cache中进行修改,主存的写修改同一留到换出时进行
优点:此举减少了主存访问的次数
缺点:存在着不一致性的隐患
全写法
当写cache命中的时候,cache与主存同时发生写修改,较好的维护了cache与主存内容的一致性。
当cache未命中的时候,只能直接向主存中写入,但是此时是否将修改过主存取到cache中,有两种选择
- WTWA法:取主存到cache块,并为它分配一个行位置
- WTNWA法:不取主存块到cache中
优点:写cache与写主存同步进行,cache中每行无需设置一个修改位以及相应的逻辑判断
缺点:cache对CPU向主存的写操作无高速缓冲功能,降低了cache的功能
写一次法
写一次发是基于写回法并结合全写法的写策略:在写命中与写未命中的处理方法和写回法基本相同,只在第一次写命中的时候要同时写入主存