参考:《计算机组成原理》(第五版) 白中英等著
准备工作:
①cache与主存之间的数据交换是以“块”为单位进行的。一个“块”中包含若干个“字”,字长由实际情况确定。
习惯上,cache中的“块”称“行”,主存中称“块”。cache的“行”与主存的“块”存储容量相同。
②相联存储表(CAM)是一种按内容寻址的存储器。下面所提到的标记(tag)存于该存储器中。
③cache中的标记tag与cache的“行”一一对应的。如果某一块主存数据块拷贝到cache中的某一行,该cache行就会形成相应的标记tag。
三种地址映射方式:①全相联映射方式、②直接映射方式、③组相联映射方式
①全相联映射方式:
理念:主存中的一块可以拷贝到cache中的任意一行。
通俗理解:对于主存中的数据块可以拷贝到cache中的哪一行不做硬性规定。
主存地址格式:主存块号+块内偏移地址
cache地址格式: cache行号+行内偏移地址
cache标记tag:主存块号
映射过程(地址变换过程):
CPU提供一内存地址给cache,cache中的“控制逻辑”将“主存地址格式”中的“主存块号”与cache中所有行的标记tag进行同时比较。
如果存在相同的,即表示“命中”,根据“块内偏移地址”找到相应的字。
如果不存在相同的,即表示“未命中”,那么将会到主存中寻找。
优点:该映射方式下,块冲突的概率低,cache利用率高。
缺点:硬件控制复杂,尤其是用于比较“主存块号”与tag时的比较器电路难于设计与实现。
适用情况:小容量的cache
②直接映射方式:
理念:一个主存块只能拷贝到cache的一个特定行位置去。
通俗理解:相当于将主存空间按cache的大小(行数)进行分区(说“分组”也可以),主存分区(组)后,每区(组)中的数据块数目与cache的行数一致。
将每一区(组)的数据块在区(组)内重新进行编号。使区(组)内各块只能映射到与它区(组)内编号相同的cache行去。
举例:假设现有主存-cache体系。cache共4行,主存共16块。cache的4行编号分别为L0~L3,主存的16块编号分别为B0~B15。如下图所示:
a、首先将主存按照cache的大小进行分区(组):16/4=4(组),即将主存分为4组,编号分别为G0~G3,这样每组中拥有与cache行数相同的数据块。
b、对每组内的数据块进行“组内重新编号”,即B0变为G0的b0,B1变为G0的b1,B2变为G0的b2,B3变为G0的b3;B4变为G1中的b0,B5变为G1中的b1,B6变为G1中的b2,B7变为G1中的b3。依次类推。
c、这样,组内编号为b0的主存块如果需要拷贝至cache,只能放置到L0;b1只能拷贝到L1;b2只能拷贝到L2;b3只能拷贝到L3。如上图所示,相同颜色的说明可以进行拷贝。
主存地址格式:主存组号+组内块号+块内偏移地址
cache地址格式:cache行号+行内偏移地址
cache标记tag:映射到该行的主存块的主存地址的“组号”
映射过程(地址变换过程):
CPU提供一内存地址给cache,相关的逻辑根据内存地址中的“组内块号”确定该主存块如果发生拷贝会被拷贝到哪一行;
然后,将内存地址中的“主存组号”与上步确定的cache行的标记tag进行比较,如果存在相同的即“命中”,如果不存在相同的即“未命中”。
优点:硬件简单,容易实现,成本低。
缺点:发生块冲突的概率较大,导致cache的命中率、效率下降。
适用情况:大容量的cache,更多的行数可以减小冲突发生的机会。
③组相联映射方式:
理念:是直接映射方式与全相联映射方式的折衷方案,适度地兼顾了二者的优点又避免二者的缺点。
将cache的空间分为若干组,主存块与cache组之间直接映射,而组内各块之间全相联映射。
关键:cache的分组数=主存每一组的块数
相关概念:
v路组相联cache:说明该cache采用组相联映射方式且cache的每组有v行。v一般取值较小,典型的有2、4、8、16。
举例:假设有主存-cache体系,cache共4行,主存共16块。cache的4行编号为:L0~L3,主存的16块编号为B0~B15。采用2路组相联映射。如下图所示:
a、cache共4行,采用2路组相联映射,即将cache分为2组G0~G1,每组2行。
b、cache的分组数=主存每一组的块数,即将主存分为8组g0~g7,每组2块。
c、主存组内进行重新编号b0、b1,如上图所示
d、凡是组内编号为b0的主存块,可以拷贝至cache的G0组,至于是2行中的哪一行,是随机的无硬性规定的。依次类推,组内编号b1的主存块可以拷贝至G1组
主存地址格式:主存组号+组内块号+块内偏移地址
cache地址格式:cache组号+组内行号+行内偏移地址
cache标记tag:组号
映射过程(地址变换过程):
CPU提供一内存地址给cache,相关逻辑根据地址中的“组内块号”部分确定主存块如果发生拷贝将会被放置到cache的哪一组中;
然后,将地址中的“主存组号”与上步所确定的那一组中所有行的tag同时进行比较,如果存在相同的即“命中”,如果不存在相同的即为“未命中”。
该映射方式实现较为容易,块冲突概率比直接映射方式低,命中率介于直接映射方式与全相联映射方式之间。被普遍采用。