计算机的高速缓存
高速缓存的工作原理
高速缓存的构成和内存的构成原理是一样的
即,由字和字块构成
字:是指存放在一个存储单元中的二进制代码组合
字块:用来放字的东西,存储在连续的存储单元中而被看作是一个单元的一组字,即字块是由字构成,存放字的东西
如图(主存示意图):一个字块由多个字构成,而且有如右图的规则,注意,不是说一个字的位数一定是32位,上面的三个前提只是假设
下图为一个字地址的示意图
如图,一个字的地址由两部分组成,CPU进行寻址的话则需要通过前m位先找到字所在字块的地址,然后找到对应的字块,然后再通过后b位找到字在字块中的地址
下面是关于字的运算规则
因为前m位是指定块的地址的,即所有块中的此块的地址,所以2m=M,而后面的b是指定此字在块中所有字中此字的地址的,所以2b=B
例题:
注意很重要一点:我们所说的32位或者64位指的都是比特位(bit),即25=32bit,26=64bit
- 求块地址m位数,即用来指定此字所在块在所有块中的地址的那一部分
先求出内存中的总块数,然后2m=总块数 - 求块内地址b的位数,即指定此字在块中的地址那一部分
先求出块内总位数,即比特位数(bit)
然后公式2b=总比特位
如图:
CPU跟缓存交互的效率
下图为CPU和缓存和主存的关系交互图
有上图这三个规则
因为缓存快,主存慢,所以一般我们把常用的数据都优先加载到缓存中
命中率:
然后我们可以通过命中率这一个名词来衡量CPU从高速缓存取数据成功的概率
如下图,为命中率的计算方法
Cache就是高速缓存,h代表命中率
访问效率和访问Cache—主存系统的平均时间
h还是我们的命中率
例题:
- 肯定先求命中率
- 然后求访问效率
- 平均访问时间
高速缓存的替换策略
原因:
为了加快CPU加载数据的速度,我们需要尽可能的让CPU从高速缓存中读取数据,因为高速缓存容量小,所以我们可以让CPU需要的数据先从主存加载到高速缓存,然后再让CPU从高速缓存中读取数据
什么是高速缓存的替换
替换策略就用在高速缓存容量满了,但还是需要从主存读取数据的时候,此时就需要去除掉一点高速缓存中的数据,如下图:
有如下四中策略:
- 随机算法
即随机选取去掉高速缓存中的一个数据,用来替换从内存读取到的数据 - 先进先出算法(FIFO)
如图:
即先进入高速缓存的数据拍在前面,然后从内存中读取新数据了,就把最先进入的数据即最前面的数据给去掉,然后让读取到的数据拍在最后面 - 最不经常使用算法(LFU)
他最主要是两点:
原理如图:
读取到缓存中使用次数最少的数据,并把它替换为要读取进来的数据 - 最近最少使用算法
要点:
原理:
即我们把读取到缓存中的数据存入链表,新读入或者新使用的数据放在链表头部
即,当我们用到缓存中的某一数据的时候,这个数据会从原先他在链表中的位置移动到链表头部,而且当我们从主存中新读取到的数据也会放在链表头
然后缓存存放满了的话就从链表尾去除数据来腾出空间,然后新读取的数据还是会放在链表头