1、Cache简介
Cache的出现因素:首先,是由于CPU的速度和性能以及发展速度很快但主存速度较低且价格高,第二就是程序执行的局部性特点。因此,将速度比较快而容量有限的SRAM构成Cache,目的在于尽可能发挥CPU的高速度。
在计算机的存储系统体系中,cache是访问速度最快的层次。而就是因为cache总是比主RAM 存储器速度快,所以我们使用cache存储CPU频繁访问的 RAM 位置的内容及这些数据项的存储地址。当CPU引用存储器中的某地址时,cache首先检查是否存有该地址。如果存有,则将数据返回CPU;如果没有,则进行常规的主存访问。
也就是说,cache中有的内容,主存中都有;cache中没有的内容,主存中还有。
所以,cache的功能:提高CPU数据输入输出的速率,调和CPU速度与内存存取速度之间巨大的差异。
2、cache命中率及相关问题
如果以h代表对cache访问命中率,那么cache命中率计算为:
h=(Cache命中次数÷存储器请求次数)×100%
同时,(1-h)就表示失效率。
就目前设计良好的处理器而言,Cache的未命中率能减小到百分之几,其未命中率依赖多个Cache参数,如Cache的容量,块的大小,映象方式,替换策略以及程序执行中地址流的分布情况等等。
一般来说,Cache容量越大则命中率越高, 当容量达到一定程度后,容量的增加命中率的改善并不大;Cache块容量加大, 命中率也明显增加,但增加到一定值之后反而出现命中率下降的现象;直接映象法命中率比较低,全相联方式命中率比较高,在组相联方式中,组数分得越多,则命中率下降。
3、cache的读写过程
cache的读写过程有三种:
● 写直达:当要写cache时,数据同时协会主存储器,也称为写通。
● 写回:CPU修改cache某一行后,相应的数据并不立即写入主存储器单元。而是当该行被从cache中淘汰时,才把数据写回到主存储器中。
● 标记法:对cache中每一个数据设置一个有效位。
4、cache与主存映射关系
在CPU工作时,应从Cache存储器中读到主存地址,这就需要将主存地址转换成Cache存储器的地址。
方式是将主存与cache的存储空间划分为若干大小相同页(或称为块)。例如主存1GB,划分为2048页,每页512KB;cache容量8MB,划分为16页,每页512KB。注意主存和cache页的大小要相同。
(1)直接映射
对于直相联来说,每组的第0页只能进入cache中的第0页,每组的第1页只能进入cache中的第1页...如此对应,并且Cache中每块只能存放一个,例如cache中块0不能存在两个主存中的块0,即如果1区0块存进Cache中的0块了,那么其他区的0块就没办法往Cache中存入了。
直接映射Cache是一种简单的解决方法,但如果程序同时用到对应于Cache同一行的两个主存块,那么就会发生冲突,冲突的结果是导致Cache行的频繁变换。这种由直接映射导致的Cache存储器中的软件冲突称为颠簸(thrashing)问题。
确定是否命中:确定要比较的块号,然后查看区表存储器中的区号是否和主存中的区号相等,相等则命中,否则不命中。
● 优点:地址映象方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。
● 缺点:替换操作频繁,命中率比较低。
(2)全相联映射
在全相联中就比较随意了,主存和cache都分页,主存中的页可以随意映射到cache中的页面,没有任何规则。
● 优点:命中率比较高,Cache存储空间利用率高。
● 缺点:访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而应用少。
(3)组相联映射
组相联是直接相联和全相联的折中,主存中先分区,然后在每区中分组;对cache中分组,主存中每区的分组只能对应进入cache中的分组,比如主存中n区的第0组只能进入cache中的第0组;主存中n区的第1组只能进入cache中的第1组。但是组号对应之后,组中页号映射到cache中组号的时候就没有规则了,采用全相联,可以任意映射。 即从主存的组到Cache的组之间采用直接映象方式;在两个对应的组内部采用全相联映象方式。
这种方式,可以根据组号确定区号,然后根据主存给的组号确定块表中的组号是否和Cache中的组号相等,相等继续比较,组内的块号(遍历全部块号看是否存在),以此来确定是否命中。
● 优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。
● 缺点:实现难度和造价要比直接映象方式高。