5.4 高速缓存存储器

发布时间 2023-07-18 16:23:10作者: C~A

考虑这样一个计算机系统,其中每个存储器地址有m位,形成2的m次方个不同地址,这样一个机器的告诉缓存被组织成一个有S=2的s次方个高速缓存组的数组。每个组包含E个高速缓存行,每个行是由B=2的b次方字节的数据块组成的,一个有效位指明这个行是否包含有意义的信息,还有t个标记位,唯一标识存储在这个高速缓存行中的块。

参数S和B将m个地址位分为了三个字段。A中s个组索引位是一个到S个组的数组的索引。第一个组是组0,第二个组是组1,依此类推。组索引位被解释为一个无符号整数,它告诉我们这个字必须存储在哪个组中。一旦我们知道了这个字必须放在哪个组中,A中的t个标记位就告诉我们这个组中的哪一行包含这个字(如果有的话)。当且仅当设置了有效位并且该行的标记位与地址A中的标记位相匹配时,组中的这一行才包含这个字。一旦我们在由组索引标识的组中定位了由标号所标识的行,那么6个块偏移位给出了在B个字节的数据块中的字偏移。

 直接映射高速缓存

每个组只有一行的高速缓存称为直接映射高速缓存。高速缓存确定一个请求是否命中,然后取出被请求的字的过程分为三步,组选择,行匹配,字抽取。

组选择

 在这一步中,高速缓存从w的地址中间抽取出s个组索引位。这些位被解释成一个对应

于一个组号的无符号整数。换句话来说,如果我们把高速缓存看成是一个关于组的一维数

组,那么这些组索引位就是一个到这个数组的索引。图6-28展示了直接映射高速缓存的组选

择是如何工作的。在这个例子中,组索引位被解释为一个选择组1的整数索引。

行匹配

在上一步中我们已经选择了某个组i,接下来的一步就要确定是否有字w的一个副本存储在组i包含的一个高速缓存行中。在直接映射高速缓存中这很容易,而且很快,这是因为每个组只有一行。当且仅当设置了有效位,而且高速缓存行中的标记与w的地址中的标记相匹配时,这一行中包含w的一个副本。展示了直接映射高速缓存中行匹配是如何工作的。在这个例子中,选中的组中只有一个高速缓存行。这个行的有效位设置了,所以我们知道标记和块中的位是有意义的。因为这个高速缓存行中的标记位与地址中的标记位相匹配,所以我们知道我们想要的那个字的一个副本确实存储在这个行中。换句话说,我们得到一个缓存命中。另一方面,如果有效位没有设置,或者标记不相匹配,那么我们就得到一个缓存不命中。

字选择

根据块偏移位确定了所需要的字在块中的开始位。

组相联高速缓存

可以看到,直接映射高速缓存很容易出现冲突不命中的情况,因为每个组只有一行。组相联高速缓存(set associative cache)放松了这条限制,所以每个组都保存有多于一个的高速缓存行。一个1<E<C/B的高速缓存通常称为E路组相联高速缓存。

全相联高速缓存

全相联高速缓存是由一个包含所有高速缓存行的组组成的。