【答案解析】将CPU要顺序访问的4个数的地址写成二进制,可以发现:
20124H=0010 0000 0001 0010 0100B,组号为1,是第2组的块,根据题中阵列内容的图可知,现在Cache内有这个块,第1次访问命中,实际访问的Cache地址为0124H。
58100H=0101 1000 0001 0000 0000B,组号为1,是第2组的块,根据题中阵列内容的图可知,现在Cache内有这个块,第2次访问命中,实际访问的Cache地址为0100H。
60140H=0110 0000 0001 0100 0000B,组号为1,是第2组的块,但Cactle中无此块,第3次访问不命中,根据LRU算法,替换掉第0块位置上的块,变化后的地址阵列如下图。
|
0
|
01100(二进制)
|
|
1
|
01011(二进制)
|
60138H=0110 0000 0001 0011 1000B,组号为1,是第2组的块,与上一个地址处于同一个块,此时这个快已调入Cache中,所以第4次访问命中,实际访问的Cache地址为0138H。第4个数访问结束时,地址阵列的内容与刚才相同。
注意:就论坛上对于组相联映射的理解存在一些误区,这里就来解释一下,很多同学自己捏造出来了一个组内块号的概念,觉得Cache地址或者主存地址中会存在一个组内块号,同学们经常问如果没有这个组内块号,怎么能在一个组内定位到想要的块的信息?首先这里我们重新回顾一下组相联的概念,组相联映射实际上是一种组与组间采用直接映射而组内采用全相联映射的映射方式,组间直接映射大多数人都不会有什么疑问,而组相联映射在组内又是怎么找块的呢?既然刚才说了,组内是采用全相联的映射方式,我们不妨再回顾一下全相联映射中查找目标块的方法,即用给定的主存地址的标记号与所有的Cache块中的标记位进行比较,直到找到一样的。组相联映射也是把这个标记号与组内所有块的标记号进行比较来查找块的位置的,当现在比较这块的标记号和主存地址中的标记号相同时,即代表这块就是要找的内容。当然,因为一般组内块数比较少,可以设立多个比较器进行同时比较,这样可以加快比较的速度。