F_JustWei's Studio.

Cache与主存的地址映像

字数统计: 1.3k阅读时长: 4 min
2021/04/28 Share

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 中的某一个块中。

image-20210430122426792

直接映射是最简单的地址映射方式,它的硬件简单,成本低,地址变换速度快,而且不涉及替换算法问题

但是这种方式不够灵活,Cache 的存储空间得不到充分利用,每个主存块只有一个固定位置可存放,容易产生冲突,使 Cache 效率下降,因此只适合大容量 Cache 采用。

例如,如果一个程序需要重复引用主存中第 0 块与第 16 块,最好将主存第 0 块与第 16 块同时复制到 Cache 中,但由于它们都只能复制到 Cache 的第 0 块中去,所以即使 Cache 中别的存储空间空着也不能占用,因此这两个块会不断地交替装入 Cache 中,导致命中率降低。

全相联映射

主存中的一个块可被映射进任意 Cache 的块中。

但这造成了一个问题,当寻找一个地址是否已经被放入 Cache 时,需要遍历每一个 Cache 中的每一块来寻找,这个代价很高。

就像停车位可以大家随便停一样,停的时候简单,找车的时候需要一个一个停车位的找了。

全相联映射的 Cache 如下图所示。主存中的一个块可被映射进任意 Cache 的块中。

image-20210430123927561

全相联映射方式比较灵活,主存的各块可以映射到 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 中的分组数相同,组间采用直接映射,组内采用全相联映射。

image-20210430130857103

主存中的各块与 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 是前两种方法的折中方案,适度兼顾二者的优点,尽量避免二者的缺点,因而得到普遍采用。

CATALOG
  1. 1. Cache与主存的地址映像
    1. 1.0.1. 地址映像
    2. 1.0.2. 地址映射方式
      1. 1.0.2.0.1. 直接映射
      2. 1.0.2.0.2. 全相联映射
      3. 1.0.2.0.3. 组相联映射