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 块,主存共有2M块,当主存的