主存与 Cache 的地址映射 CPU 对存储器的访问,通常是一次读写一个字单元
当 CPU 访Cache 不命中时,需将存储在主存中的字单元连同其后若干个字一同调入Cache 中,之所以这样做,是为了使其后的访存能在 Cache 中命中
因此,主存和 Cache 之间一次交换的数据单位应该是一个数据块
数据块的大小是固定的,由若干个字组成,且主存和 Cache 的数据块大小是相同的
从 Cache-主存层次实现的目标看,一方面既要使 CPU 的访存速度接近于访 Cache 的速度,另一方面为用户程序提供的运行空间应保持为主存容量大小的存储空间
在采用 Cache-主存层次的系统中,Cache 对用户程序而言是透明的,也就是说,用户程序可以不需要知道 Cache 的存在
因此,CPU 每次访存时,依然和未使用 Cache 的情况一样,给出的是一个主存地址
但在 Cache-主存层次中,CPU 首先访问的是 Cache,并不是主存
为此,需要一种机制将 CPU 的访主存地址转换成访 Cache 地址
而主存地址与 Cache 地址之间的转换是与主存块与 Cache 块之间的映射关系紧密联系的,也就是说,当 CPU 访 Cache 未命中时,需要将欲访问的字所在主存中的块调入 Cache 中,按什么样的策略调入,直接影响到主存地址与 Cache 地址的对应关系,这也就是本小节要解决的主存与 Cache 的地址映射问题
主要有三种地址映射方式,分别为全相联映射、直接相联映射和组相联映射
全相联映射 全相联映射是指主存中任一块都可以映射到Cache 中任一块的方式,也就是说,当主存中的一块需调入 Cache 时,可根据当时 Cache 的块占用或分配情况,选择一个块给主存块存储,所选的 Cache 块可以是 Cache 中的任意一块
例如,设 Cache 共有2C块,