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組的任意一塊。
優點:塊的衝突概率比較低,塊的利用率大幅度提高,塊失效率明顯降低。
缺點:實現難度和造價要比直接映射方式高。