问答题 某机按字节编址,主存容量为1MB,采用两路组相联方式(每组仅有两块)的Cache容量为64KB,每个数据块为256B。已知访问开始前第2组(组号为1)的地址阵列内容如下表所示
0 00100(二进制)
1 01011(二进制)
问答题 分别说明主存地址中标记(Tag)、组号和块内地址三部分的位置和位数。
【正确答案】
【答案解析】按字节编址,每个数据块为256B,则块内地址为8位;主存容量为1MB,则主存地址为20位;Cache容量为64KB,Cache共有256块,采用两路组相连,所以Cache共有128组(64K÷(2×256)),则组号为7位;标记(Tag)的位数为20-7-8=5位。主存和Cache的地址格式如下图所示:
问答题 若CPU要顺序访问地址为20124H、58100H、60140H和60138H等4个主存单元。上述4个数能否直接从Cache中读取,若能,请给出实际访问的Cache地址。第4个数访问结束时,上表中的内容将如何变化。
【正确答案】
【答案解析】将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块中的标记位进行比较,直到找到一样的。组相联映射也是把这个标记号与组内所有块的标记号进行比较来查找块的位置的,当现在比较这块的标记号和主存地址中的标记号相同时,即代表这块就是要找的内容。当然,因为一般组内块数比较少,可以设立多个比较器进行同时比较,这样可以加快比较的速度。
问答题 若Cache完成存取的次数为5000次,主存完成存取的次数为200次。已知Cache存取周期为40ns,主存存取周期为160ns,求该Cache/主存系统的访问效率。(注:默认为Cache与主存同时访问)
【正确答案】
【答案解析】Cache的命中率H=Nc/(Nc+Nm)=5000/(5000+200)=5000/5200=25/26,主存慢于Cache的倍率r=Tm/Tc=160ns/40ns=4,访问效率e=1/[H+r(1-H)]=1/[25/26+4×(1-25/26)]=89.7%。[解析] 本题考查Cache与主存的映射、替换算法。在采用全相联和组相联映像方式从主存向Cache传送一个新块,而Cache中的空间已被占满时,就需要把原来存储的一块替换掉。LRU算法(最近最少使用法)是把CPU近期最少使用的块作为被替换的块。