Cache与主存的地址映像
Cache 和主存都被分成若干个大小相等的块,每块由若干个字节组成,主存和 Cache 的数据交换是以块为单位。
地址映像
把主存地址空间映像到 Cache 地址空间,即按某种规则把主存的块复制到 Cache 中。
地址映射方式
Cache 与主存分成大小相等若干块。
假设某台计算机主存容量为 1MB ,被分为 2048 块,每块为 512B 。
Cache 容量为 8KB,被分为 16 块,每块也是 512B 。
直接映射
主存中的一个块只能映射到 Cache 中唯一指定的块中。就如每个人的停车位是固定分配好的,可以直接找到。
直接映射的缺点:因为人多车位少,很可能几个人争用同一个车位,导致 Cache 淘汰换出频繁,需要频繁的从主存读取数据到 Cache 。
直接映射的 Cache 如下图所示。主存中的一个块只能映射到Cache的某一特定块中去。例如:
主存的第 0 块、第 16 块、第 32 块、第 48 块、……、第 2032 块等 128 块,只能映射到 Cache 的第 0 块;
主存的第 1 块、第 17 块、第 33 块、第 49 块、……、第 2033 块等 128 块,只能映射到 Cache 的第 1 块;
以此类推,主存的第 15 块、第 31 块、第 47 块、……、第 2047 块等 128 块,只能映射到 Cache 的第 15 块中。
映射完毕, Cache 总共有 16 块,主存中的每 128(2048 / 16)块,只能映射到 Cache 中的某一个块中。
直接映射是最简单的地址映射方式,它的硬件简单,成本低,地址变换速度快,而且不涉及替换算法问题。
但是这种方式不够灵活,Cache 的存储空间得不到充分利用,每个主存块只有一个固定位置可存放,容易产生冲突,使 Cache 效率下降,因此只适合大容量 Cache 采用。
例如,如果一个程序需要重复引用主存中第 0 块与第 16 块,最好将主存第 0 块与第 16 块同时复制到 Cache 中,但由于它们都只能复制到 Cache 的第 0 块中去,所以即使 Cache 中别的存储空间空着也不能占用,因此这两个块会不断地交替装入 Cache 中,导致命中率降低。
全相联映射
主存中的一个块可被映射进任意 Cache 的块中。
但这造成了一个问题,当寻找一个地址是否已经被放入 Cache 时,需要遍历每一个 Cache 中的每一块来寻找,这个代价很高。
就像停车位可以大家随便停一样,停的时候简单,找车的时候需要一个一个停车位的找了。
全相联映射的 Cache 如下图所示。主存中的一个块可被映射进任意 Cache 的块中。
全相联映射方式比较灵活,主存的各块可以映射到 Cache 的任一块中, Cache 的利用率高,块冲突概率低,只要淘汰 Cache 中的某一块,即可调入主存的任一块。
但是,由于 Cache 比较电路的设计和实现比较困难,这种方式只适合于小容量 Cache 采用。
组相联映射
Cache 和主存都分组,主存中一个组内的块数与 Cache 中的分组数相同,组间采用直接映射,组内采用全相联映射。
也就是说,将 Cache 分成 2^u^ 组,每组包含 2^v^ 块,主存块存放到哪个组是固定的,至于存到该组哪一块则是灵活的。
即主存的某块只能映射到 Cache 的特定组中的任意一块。主存的某块 b 与 Cache 的组 k 之间满足以下关系:$k= b$ % $2^u$。
例如: Cache 分为 8 组(u = 3),每组 2 块(v = 1),主存分为 128 个区,每个区 16 块。
下面这个图中间部分总共 16 块,0~15,是从主存中取了和 Cache 同样大小的,16 块分为 2 组,0~7 块是第 1 组, 8~15 块是第 2 组。
即将一个区分为了 2 组。块 0 映射到 Cache 中的组 1 ,块 1 映射组 1 ,以此类推,块 7 映射组 7 。
组相联映射的 Cache 如下图所示。Cache 和主存都分组,主存中一个组内的块数与 Cache 中的分组数相同,组间采用直接映射,组内采用全相联映射。
主存中的各块与 Cache 的组号之间有固定的映射关系,但可自由映射到对应 Cache 组中的任何一块。例如,主存中的第 0 块、第 8 块……均映射于 Cache 的第 0 组,但可映射到 Cache 第 0 组中的第 0 块或第 1 块;主存的第 1 块、第 9 块……均映射于Cache的第 1 组,但可映射到 Cache 第 1 组中的第 2 块或第 3 块。
常采用的组相联结构 Cache,每组内有 2、4、8、16 块,称为 2 路、4 路、8 路、16 路组相联 Cache。组相联结构 Cache 是前两种方法的折中方案,适度兼顾二者的优点,尽量避免二者的缺点,因而得到普遍采用。