cache缺失和关联度
直接映射缓存
这张图展示了一个关于缓存缺失和关联度的例子。通过这个例子,我们可以看到如何根据主存块号来确定缓存块的分配位置,以及在访问过程中产生的缓存缺失情况。以下是图中例子的详细解释:
表格内容说明:
- Address of memory block accessed:表示访问的主存块地址。
- Hit or miss:表示访问操作是命中(hit)还是缺失(miss)。
- Contents of cache blocks after reference:在该次访问后,缓存块中的内容。
过程分析:
-
缓存块号计算:图中提到的
Cache块号 = 主存块号 mod 4
,即通过主存块号对4取余来决定数据应存储到哪个缓存块中。 -
访问顺序及结果:
- 第一次访问地址0:缺失,将
Memory[0]
放入缓存块0。 - 第二次访问地址8:缺失,将
Memory[8]
放入缓存块0(替换掉Memory[0]
)。 - 第三次访问地址0:缺失,因为
Memory[0]
已经被替换,再次将Memory[0]
放入缓存块0。 - 第四次访问地址6:缺失,将
Memory[6]
放入缓存块2。 - 第五次访问地址8:缺失,因为
Memory[8]
不在缓存中,将其重新放入缓存块0(再次替换掉Memory[0]
)。
- 第一次访问地址0:缺失,将
-
缺失次数统计:整个过程中发生了5次缺失,因为每次访问时数据都不在缓存中(发生替换)。
总结
- 通过这个例子,我们可以理解直接映射缓存的限制:由于每个主存块只能映射到唯一的缓存块,如果不同的主存块映射到相同的缓存块,会导致频繁替换,从而增加了缺失次数。
组相联
这张图展示了一个缓存访问的例子,其中每个主存块通过 主存块号 mod 2
计算对应的缓存组号。以下是图中每一列的含义及具体的操作步骤:
图中内容的详细解释
- Address of memory block accessed:表示每次访问的主存块地址。
- Hit or miss:表示该次访问是否在缓存中命中(hit)或缺失(miss)。
- Contents of cache blocks after reference:显示该次访问后的缓存状态。这里的缓存分为
Set 0
和Set 1
,表明这是一个两路组相联缓存结构,每组有两个块。
过程分析
- 第一次访问地址0:缺失,将
Memory[0]
加入到Set 0
。 - 第二次访问地址8:缺失,将
Memory[8]
加入到Set 1
,因为8 mod 2 = 0
。 - 第三次访问地址0:命中,因为
Memory[0]
已经在Set 0
中。 - 第四次访问地址6:缺失,将
Memory[6]
加入到Set 1
,替换掉之前的Memory[8]
。 - 第五次访问地址8:缺失,因为
Memory[8]
已经被Memory[6]
替换,因此将Memory[8]
重新加载到Set 1
。
总结
- 在此过程中总共发生了 4次缺失,只有一次命中。
- 使用
主存块号 mod 2
确定缓存组号的方式,使得相同组号的不同块会互相替换,从而导致缺失增加。 - 该例子展示了在两路组相联缓存结构下,通过增加组的容量可以减少替换的发生,但仍然会发生冲突缺失(如
Memory[8]
和Memory[6]
争用Set 1
)。
这个例子说明了缓存组相联的特点:通过限制存储位置的选择,可能会导致多次替换和较高的缺失率。
全相联
这张图展示了一个缓存访问的示例,目的是说明关联度越高,缓存缺失次数越少的概念。以下是图中每一部分的详细解释:
表格各列的含义
- Address of memory block accessed:表示每次访问的主存块地址。
- Hit or miss:表示每次访问是否在缓存中命中(hit)或缺失(miss)。
- Contents of cache blocks after reference:显示了每次访问后缓存中各块的内容。这里的缓存结构包含四个块(
Block 0
到Block 3
),说明是一个四路组相联缓存结构。
访问过程分析
- 第一次访问地址 0:缺失,将
Memory[0]
加载到Block 0
。 - 第二次访问地址 8:缺失,将
Memory[8]
加载到Block 1
。 - 第三次访问地址 0:命中,因为
Memory[0]
仍在Block 0
中。 - 第四次访问地址 6:缺失,将
Memory[6]
加载到Block 2
,并且Block 0
和Block 1
的内容保持不变。 - 第五次访问地址 8:命中,因为
Memory[8]
仍在Block 1
中。
总结
- 在这个四路组相联的缓存结构中,总共发生了 3次缺失,2次命中。
- 由于关联度更高(即四路组相联),缓存可以同时存储多个不同的块,避免了不必要的替换,从而降低了缺失次数。
- 图下方的说明“关联度越高,缺失次数越少!” 正是为了说明四路组相联缓存结构在减少缓存缺失方面的优势。
关键点
- 关联度越高:可以在缓存中存储更多不同地址的数据,从而减少冲突缺失,降低整体缺失率。
- 缓存缺失次数减少:关联度高的缓存结构在多次访问相邻或重复数据时表现更优,因为减少了替换和冲突。
这一示例展示了高关联度缓存结构的优点,尤其在频繁访问不同数据块的情况下,可以显著减少缺失次数。