计算机组成原理Cache的3种映射方式(直接映射,全相联映射,组相联映射)
一、为什么引入Cache?
答: Cache是一种高速缓冲存储器,他位于cpu和主存之间,是为了提高cpu对主存的访问速度。
为什么主存与Cache之间要进行映射?
答:前面我们知道,Cache是为了提高cpu对主存的访问速度。故cache可看做是一种介质,而这种介质是主存的替代品,而cpu只认主存的单元地址,所以我们需要把主存的地址映射到cache,这样cpu直接访问cache即相当于间接的访问主存,从而提高了cpu对主存的访问速度。
二、三种映射方式
1.直接映射
直接映射:说白了就是一对一的映射方式。前者 ‘一’ 指的是主存中的任意一块,主存中的不同分区下的块号,后者 ‘一’ 指的是cache中特定的某一个块。
直接来看下面主存与cache之间的直接映射,如下图:
从上面图形分析着手:左边的cache被分成了n行,其次右边主存部分被分成了m个区,其中每个区被分成了n块,n块和n行不是巧合,这恰好说明了cache是主存的替代品,其次我们还发现每个区中的每一块都是有规律的映射到cache中的一个特定行中。
所以在主存,区中的某一块映射到cache中的某一个特定行有如下规律
其中上面的i指的是cache中的特定行,j指的是主存区中的块号,n指的是cache中的总行数或每个主存区中的总块数。
相对应的地址格式
直接映射总结:
优点:地址映射方式简单,数据访问时只需要检查块号是否相等即可,因而能得到比较快的访问速度,硬件设备简单;
缺点;替换操作频繁,命中率比较低。
2.全相联映射
全相联映射即主存块可以映射到cache中的任意一块,即说白了就是一对多,‘一’指的是主存中的任意一块,‘多’指的是cache的每一行,即主存块可以映射到cache中的任意一块。
全相联映射总结:
优点:命中率比较高,cache存储空间利用率高;
缺点:访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而利用少。
3.组相联映射
组相联映射:说白了就是基于直接映射和全相联映射的一个比较折中的方式,即组内是全相联映射,组间是直接映射。就是一对N,‘一’指的是主存中的任意一块,‘N’ 指的是cache的每组内的块数,即主存块可以映射到cache中的任意一组的若干块。
组相联映射是直接映射和全相联映射的一个折中形式,那么必然也就存在下面俩种特殊的形式:
1、当cache中每组内的块数变为1时,这就变成了直接映射;
2、当cache中只有一组时,这就变成了全相联映射。
组相联映射相对应的主存地址格式(和直接映射方式很像,只是块号变成了组号):
组相联映射总结:
优点:块的冲突概率比较低,块的利用率大幅度提高;
缺点:实现难度和造价要比直接映射高。