- 高速缓存的工作原理
- 高速缓存的替换策略
高速缓存的工作原理
字:存放在一个存储单元中的二进制代码组合
字块:存储在连续的存储单元中而被看作是一个单元的一组字
- 一个字有32位
- 一个字块共B个字
- 主存共M个字块
B*M = 主存总字数
B*M*32 = 主存总容量(bits)
字的地址包含 前m位指定字块的地址 后b位指字在字块中的地址
2^m = M 2^b = B
例子:
假设主存用户空间容量为4G,字块大小为4M,字长为32位,则对于字地址中的块地址m和块内地址b的位数,至少应该是多少?
4 G = 4096 M
字块数 4096 / 4 = 1024
字块地址m log2 1024 = 10
块内字数 4 M / 32 bit = 1048576
块内地址b log2 1048576 = 20
m >= 10 b >= 20
- 存储的逻辑结构类似
- 缓存的容量较小
- 缓存的速度更快
- 一个字有32位
- 一个字块共B个字
- 缓存共C个字块
命中率
- CPU需要的数据在缓存里
- CPU需要的数据不在缓存里
- 不在缓存的数据需要去主存拿
命中率是衡量缓存的重要性能指标
理论上CPU每次都从高速缓存取数据的时候,命中率为1
访问主存次数:Nm
访问Cache次数:Nc
访问效率:e
访问主存时间:tm
访问缓存时间:tc
访问Cache—主存系统平均时间:ta
例子:
假设CPU在执行某段程序时,共访问了Cache命中2000次,访问主存50次,已知Cache的存取时间为50ns,主存的存取时间为200ns,求Cache-主存系统的命中率、访问效率和平均访问时间。
命中率 h = 2000/(2000 + 50)= 0.97
访问效率 e = 50 /(0.97 * 50 + (1 - 0.97) * 200) = 91.7%
平均访问时间 ta = 0.97 * 50 + (1 - 0.97) * 200 = 54.5ns
高速缓存的替换策略
需要性能良好的缓存替换策略
- 随机算法
- 先进先出算法(FIFO)
- 最不经常使用算法(LFU)
- 最近最少使用算法(LRU)
先进先出算法(FIFO)
- 把高速缓存看做是一个先进先出的队列
- 优先替换最先进入队列的字块
最不经常使用算法(LFU)
- 优先淘汰最不经常使用的字块
- 需要额外的空间记录字块的使用频率
最近最少使用算法 (LRU)
- 优先淘汰一段时间内没有使用的字块
- 有多种实现方法,一般使用双向链表
- 把当前访问节点置于链表前面(保证链表头部节点是最近使用的)
例子:
缓存4个字块,()表示使用的字块, []表示淘汰的字块