1、高速缓存的工作原理
字 :存放在存储单元中的二进制代码组合,一个字可以表示一个数据,可以表示一个指令,可以表示一个字符串。字是内存中存储单元的最小单位
字块 :连续的字,一组字(字块包含了多个字)。存储在连续的存储单元中,从而被看做是一个单元的一组字
主存与字以及字块的关系如下图
内存寻址的过程 :对于字的寻址,字的地址可以包括两个部分
- 字块的部分,用来指示当前寻址的字属于哪个字块的
- 字的部分,用来寻找字块里面哪一个字是这个地址所指定的字
求主存字块和字块内有多少个字的方法 :
例题:
2、高速缓存的替换策略
高速缓存内部的存储结构与缓存非常类似,也是有字和字块的概念,但是主存的容量是远大于高速缓存的,也就是说主存的字块数是远大于缓存的字块数的。同时缓存里面存储的数据是主存的复制(缓存的每一个数据都是来源于主存的)。
高速缓存大小的计算
CPU取数据的几种情况:
- CPU需要的数据在缓存里面,直接取就好了
- CPU需要的数据不在缓存里面就要去主存中拿
CPU从高速缓存取数据成功几率的量化指标 :高速缓存命中率、高速缓存访问效率
命中率
命中率是衡量缓存的重要性能指标
理论上CPU每次都能从高速缓存取数据的时候,命中率为1
访问效率
访问率也是衡量缓存的性能指标
访问效率e 的计算公式如下图:
求访问效率、命中率的例子:
根据上图中求得的命中率,代入公式可以求得访问效率为91.7% ,如下图:
平均访问时间如下:
高速缓存的替换策略
高速缓存的替换时机 :当cpu访问高速缓存发现没有需要的数据时,就需要去主存中载入所需数据,然后替换到高速缓存中去。
高速缓存替换策略主要有下列几种:
- 随机算法
- 先进先出算法(FIFO)
- 最不经常使用算法(LFU)
- 最近最少使用算法(LRU)
随机算法 :
每一次需要替换的时候,随机选取高速缓存里面的位置,然后把相关内容替换掉
先进先出算法(FIFO) :
把高速缓存看做一个先进先出的队列
优先替换最先进入队列的字块
最不经常使用算法(LFU) :
优先淘汰使用次数最少的字块
因为需要淘汰使用次数最少的字块,所以需要额外的空间记录字块的使用频率
最近最少使用算法(LRU) :
优先淘汰一段时间内没有使用的字块
有多重实现方法,一般使用双向链表实现
把当前访问节点置于链表头部,需要淘汰的时候直接把链表的尾部节点淘汰掉就可以了
原文作者:极致Linux内核
原文地址:https://zhuanlan.zhihu.com/p/577826842(版权归原文作者所有,侵权联系删除) |