直接映射缓存和完全关联缓存之间的区别

时间:2015-05-07 09:56:31

标签: caching memory memory-management

我不太明白两个缓存之间的主要区别,我想知道是否有人可以帮助我?

我知道使用完全关联的缓存,地址可以存储在标记数组中的任何行上,而直接映射的缓存只能在一行上有一个地址。

但这就是我所知道的全部。

2 个答案:

答案 0 :(得分:13)

总之,你基本上已经回答了你的问题。这是组织缓存的两种不同方式(另一种是 n-way set associative ,它结合了两者,并且最常用于现实世界的CPU)。

直接映射缓存更简单(只需要一个比较器和一个多路复用器),因此更便宜且工作更快。给定任何地址,很容易识别缓存中的单个条目,它可以在哪里。当两个不同的地址对应于缓存中的一个条目时,使用DM缓存时的主要缺点称为冲突未命中。即使缓存很大并且包含许多过时的条目,它也不能简单地逐出这些条目,因为缓存中的位置是由地址预先确定的。

完全关联缓存要复杂得多,它允许将地址存储到任何条目中。这是有代价的。为了检查特定地址是否在缓存中,它必须比较所有当前条目(标记是准确的)。除了为了保持时间局部性,它必须有驱逐政策。通常会实现近似LRU(最近最少使用的),但它也会在方案中添加额外的比较器和晶体管,当然也会花费一些时间。

完全关联的缓存对于小缓存是实用的(例如,某些Intel处理器上的TLB缓存完全关联)但这些缓存很小,非常小。我们最多只讨论几十个条目。

甚至L1i和L1d缓存也更大,需要组合方法:缓存分为几组,每组由"方式"组成。集合是直接映射的,并且在其自身内是完全关联的。 "方式"通常很小,例如在Intel Nehalem CPU中有4路(L1i),8路(L1d,L2)和16路(L3)设置。 N路组关联缓存几乎解决了时间局部性的问题,而不是在实践中使用的那么复杂。

我强烈推荐加州大学伯克利分校的2011年课程,#34;计算机科学61C",freely available on YouTube。除了其他内容之外,它还包含3个关于内存层次结构和缓存实现的讲座。

答案 1 :(得分:0)

在这种类型的缓存中直接映射缓存,每个集合有一行,这意味着第一行中的ex是坐在另一行中的B坐着等等但是在完全关联的缓存中只有一个集合而且所有都坐着随机我们不知道A座的哪一行坐着,B坐着希望你明白,如果没有参考RE BRYANT程序员前瞻性