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

Difference Between a Direct-Mapped Cache and Fully Associative Cache

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

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

但这就是我所知道的。

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

Direct-Mapped Cache 更简单(只需要一个比较器和一个多路复用器),因此更便宜且运行速度更快。给定任何地址,很容易识别缓存中的单个条目,它可能在哪里。当两个不同的地址对应于缓存中的一个条目时,使用 DM 缓存的一个主要缺点称为 冲突未命中 。即使缓存很大并且包含很多陈旧的条目,它也不能简单地驱逐它们,因为缓存中的位置是由地址预先确定的。

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

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

甚至 L1i 和 L1d 缓存都更大,需要采用组合方法:缓存分为多个组,每个组由 "ways" 组成。集合是直接映射的,并且在其自身内部是完全关联的。 "ways"的数量通常很少,例如Intel Nehalem CPU中有4路(L1i)、8路(L1d、L2)和16路(L3)组。 N-way set associative cache 几乎解决了时间局部性的问题,并且在实践中使用起来并不复杂。

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

本课程还有 2015 年版 freely available on youtube

在这种类型的缓存中,直接映射缓存每组一行,这意味着第一行中的 ex 位于另一行 B 中,依此类推,但在完全关联的缓存中,只有一组并且所有随机坐着我们不知道 A 座和 B 座在哪一行希望你理解如果不参考 RE BRYANT 程序员前瞻性