高速缓存与主存的三种映射方式

1、全相联映射方式

全相联映射是指主存中任意一个块都可以映射到cache中任意一个块的方式,也就是说,当主存中的某一块需调入cache时,可根据当时cache的块占用或分配情况,选择一个块给主存块存储,所选的cache块可以是cache中的任意一个块。例如,设cache共有2^C块,主存共有2^M块,当主存的某一块j需调进cache中时,它可以存入cache的块0、块1、…、块i、…或块2^C - 1的任意一块上。如下图所示:

高速缓存与主存的三种映射方式_第1张图片

优点:命中率比较高,cache存储空间利用率高;

缺点:存储映射信息的相联存储器庞大,比较电路复杂,查询相联存储器时,每次都要与全部内容比较,速度低,成本高,因而只适合于小容量的cache之用,应用少。


2、直接相联映射方式

直接相联映射方式是指主存的某块j只能映射到满足如下特定关系的cachei中:

ij mod 2^C

上图中,主存的第02^C、2^(C1)、…块只能映射到cache的第0块,主存的第12^C+12^(C1)+1、…块只能映射到cache的第1块,……,主存的第2^C-12^(C1)-1、…2^M-1块只能映射到cache的第2^C-1块。即:对2^C求余后余数相同的主存块对应cache中同一个块。如下图所示:

高速缓存与主存的三种映射方式_第2张图片

优点:比较电路最简单,地址映射方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。

缺点:cache块冲突率较高,余数相同的主存块无法同时进入cache,从而降低了cache的利用率。由于主存的每一块只能映射到cache的一个特定块上,当主存的某块需调入cache时,如果对应的cache特定块已被占用,而cache中的其它块即使空闲,主存的块也只能通过替换的方式调入特定块的位置,不能放置到其它块的位置上,替换操作频繁,命中率比较低。


3、组相联映射方式

组相联映射方式下,将cache分成2^u组,每组包含2^v块。主存的块与cache的组之间采用直接相联映射,而与组内的各块则采用全相联映射。也就是说,主存的某块只能映射到cache的特定组中的任意一块。主存的某块jcache的组k之间满足如下关系:kj mod 2^u

设主存共有2^2^u块(即Ms+u),则它们的映射关系如下图所示:

高速缓存与主存的三种映射方式_第3张图片

图中,主存的块02^u、2^(u1)、…、[2^(s-1)]2^u可以映射到cache的第0组的任意一块,主存的块12^u+12^(u1)+1、…、[2^(s-1)]2^u+1可以映射到cache的第1组的任意一块,……,主存的块2^u-12^(u1)-1、…、2^M-1可以映射到cache的第2^u-1组的任意一块。

优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。

缺点:实现难度和造价要比直接映射方式高。

你可能感兴趣的:(存储)