mad*_*mma 11 memory caching memory-management
我不太明白两个缓存之间的主要区别,我想知道是否有人可以帮助我?
我知道,使用完全关联的缓存,地址可以存储在标记数组中的任何行上,而直接映射的缓存只能在一行上有一个地址.
但这就是我所知道的.
Max*_*xim 18
总之,你基本上已经回答了你的问题.这是组织缓存的两种不同方式(另一种是n路组关联,它结合了两者,并且最常用于现实世界的CPU).
直接映射缓存更简单(只需要一个比较器和一个多路复用器),因此更便宜且工作更快.给定任何地址,很容易识别缓存中的单个条目,它可以在哪里.当两个不同的地址对应于缓存中的一个条目时,使用DM缓存时的主要缺点称为冲突未命中.即使缓存很大并且包含许多陈旧条目,它也不能简单地逐出这些条目,因为缓存中的位置是由地址预先确定的.
完全关联缓存要复杂得多,它允许将地址存储到任何条目中.这是有代价的.为了检查特定地址是否在缓存中,它必须比较所有当前条目(标记是准确的).除了为了保持时间局部性,它必须有驱逐政策.通常实现近似LRU(最近最少使用),但它还在方案中增加了额外的比较器和晶体管,当然也消耗了一些时间.
完全关联的缓存对于小缓存是实用的(例如,某些Intel处理器上的TLB缓存完全关联)但这些缓存很小,非常小.我们最多只讨论几十个条目.
甚至L1i和L1d缓存也更大,需要一种组合方法:缓存分为几组,每组由"方式"组成.集合是直接映射的,并且在其自身内是完全关联的."路径"的数量通常很小,例如在Intel Nehalem CPU中有4路(L1i),8路(L1d,L2)和16路(L3)设置.N路组关联缓存几乎解决了时间局部性的问题,而不是在实践中使用的复杂问题.
我强烈推荐加州大学伯克利分校的2011年"计算机科学61C"课程,可在YouTube上免费获得.除了其他内容之外,它还包含3个关于内存层次结构和缓存实现的讲座.