我不太明白这两个缓存的主要区别,我想知道是否有人能帮我?
我知道,使用完全关联的缓存,地址可以存储在标记数组的任何行上,而直接映射的缓存在一行上只能有一个地址。
但我只知道这些。

最佳答案

简而言之,你基本上回答了你的问题。这是组织缓存的两种不同方法(另一种方法是n路集合关联,它结合了这两种方法,在现实世界中最常用的CPU)。
直接映射缓存更简单(只需要一个比较器和一个多路复用器),因此成本更低,工作速度更快。在给定任何地址的情况下,很容易识别缓存中的单个条目,它可以在哪里。当使用dm cache时的一个主要缺点被称为冲突未命中,即两个不同的地址对应于缓存中的一个条目。即使缓存很大并且包含许多过时的条目,它也不能简单地将它们逐出,因为缓存中的位置是由地址预先确定的。
完全关联缓存要复杂得多,它允许将地址存储到任何条目中。这是有代价的。为了检查某个特定地址是否在缓存中,它必须比较所有当前条目(标记要精确)。除此之外,为了保持时间区域性,必须有驱逐政策。通常实现了LRU的近似(最近使用的最少),但它也在方案中添加了额外的比较器和晶体管,当然会消耗一些时间。
完全关联缓存适用于小型缓存(例如,某些Intel处理器上的TLB缓存是完全关联的),但这些缓存很小,非常小。我们最多讨论几十个条目。
即使是l1i和l1d缓存也更大,需要一种组合方法:缓存被划分为多个集合,每个集合都由“方式”组成。集合是直接映射的,并且在其内部是完全关联的。“方式”的数量通常很小,例如在Intel Nehalem CPU中有4路(L1I)、8路(L1D、L2)和16路(L3)组。N路集关联缓存解决了时间局部性的问题,而不是实际应用中的复杂问题。
我强烈推荐加州大学伯克利分校(UC Berkeley)的2011课程“计算机科学61C”,freely available on YouTube。除了其他内容外,它还包含3个关于内存层次结构和缓存实现的讲座。

07-24 09:51
查看更多