Cache地址映射、替换算法、写操作策略

地址映射

地址映射变换机构是将CPU送来的主存地址转换为Cache地址。
习惯上,Cache中的“块”称“行”,主存中称“块”。
Cache的“行”与主存的“块”存储容量相同,Cache行数比主存块数少得多,因此主存中只有一部分块的信息可存放在Cache中,因此在Cache中要为加标记指明它是主存中哪一块的副本。

地址映射的方法有三种:直接映射、全相联映射、组相连映射

1.直接映射(对号入座)
相当于个位数为n的学生只能坐到讲台上的n号位置。
若用一个数学表达式来表示,则用取模来对应:
i=j mod C
i:Cache中的块号
j:主存中的块号
C:Cache的块数

上面公式表示将主存第j块内容复制到Cache的第i块中。

优点:实现简单。只需利用主存地址的某些位直接判断即可确定字块是否在Cache中。
缺点:不够灵活,Cache的存储空间得不到充分利用;冲突概率高,抖动。抖动就是某个块频繁地进行交换。比如说尾号为7的同学都要坐在7号位置,需要不断换人。
应用场合:适合大容量Cache。

2.全相联映射(空位随意放)
全相联映射允许主存中每一个字块映射到Cache的任何一行的位置上。对于主存中的数据块可以拷贝到cache中的哪一行不做硬性规定。有空位置就可以坐。

优点:Cache命中率可以提高。且减少了块的冲突率,进而提高了Cache的利用率。
缺点:tag的位数增加了,硬件控制较复杂,访问Cache时主存字块标记需要和Cache的全部标记进行比较。
应用场合:适合小容量Cache。

3.组相联映射(按号分组,组内随意放)
组相联映射是对直接映射和全相联映射进行折中的一种方式。
将cache的空间分为若干组,主存块与cache组之间直接映射,而组内各块之间全相联映射。
同理可以得到和直接映射中一样的公式:
i=j mod Q
i:Cache中的块号
j:主存中的块号
Q:Cache的组数
通俗地说,上面的公式就是主存第j块内容复制到Cache的i组中,至于是i组中的哪一块就随便了。
组相联映射实现较为容易,块冲突概率比直接映射方式低,命中率介于直接映射方式与全相联映射方式之间,被普遍采用。

替换算法

Cache满了或者位置被占了如何处理:
在这里插入图片描述

写操作策略

修改Cache中的内容后,如何保持主存中相应内容的一致性?
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LoraRae/article/details/120967640