1、全相联映射方式
全相联映射是指主存中任意一个块都可以映射到cache中任意一个块的方式,也就是说,当主存中的某一块需调入cache时,可根据当时cache的块占用或分配情况,选择一个块给主存块存储,所选的cache块可以是cache中的任意一个块。例如,设cache共有2^C块,主存共有2^M块,当主存的某一块j需调进cache中时,它可以存入cache的块0、块1、…、块i、…或块2^C - 1的任意一块上。如下图所示:
优点:命中率比较高,cache存储空间利用率高;
缺点:存储映射信息的相联存储器庞大,比较电路复杂,查询相联存储器时,每次都要与全部内容比较,速度低,成本高,因而只适合于小容量的cache之用,应用少。
2、直接相联映射方式
直接相联映射方式是指主存的某块j只能映射到满足如下特定关系的cache块i中:
i=j mod 2^C
上图中,主存的第0、2^C、2^(C+1)、…块只能映射到cache的第0块,主存的第1、2^C+1、2^(C+1)+1、…块只能映射到cache的第1块,……,主存的第2^C-1、2^(C+1)-1、…2^M-1块只能映射到cache的第2^C-1块。即:对2^C求余后余数相同的主存块对应cache中同一个块。如下图所示:
优点:比较电路最简单,地址映射方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。
缺点:cache块冲突率较高,余数相同的主存块无法同时进入cache,从而降低了cache的利用率。由于主存的每一块只能映射到cache的一个特定块上,当主存的某块需调入cache时,如果对应的cache特定块已被占用,而cache中的其它块即使空闲,主存的块也只能通过替换的方式调入特定块的位置,不能放置到其它块的位置上,替换操作频繁,命中率比较低。
3、组相联映射方式
组相联映射方式下,将cache分成2^u组,每组包含2^v块。主存的块与cache的组之间采用直接相联映射,而与组内的各块则采用全相联映射。也就是说,主存的某块只能映射到cache的特定组中的任意一块。主存的某块j与cache的组k之间满足如下关系:k=j mod 2^u
设主存共有2^s×2^u块(即M=s+u),则它们的映射关系如下图所示:
图中,主存的块0、2^u、2^(u+1)、…、[2^(s-1)]2^u可以映射到cache的第0组的任意一块,主存的块1、2^u+1、2^(u+1)+1、…、[2^(s-1)]2^u+1可以映射到cache的第1组的任意一块,……,主存的块2^u-1、2^(u+1)-1、…、2^M-1可以映射到cache的第2^u-1组的任意一块。
优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。
缺点:实现难度和造价要比直接映射方式高。