问答题 假设某计算机的主存地址空间大小为64KB,采用字节编址方式。其Cache数据区容量为4KB,采用4路组相联映射方式、LRU替换和回写(write back)策略,块大小为64B,并且每块设置了1位有效位。请问:
问答题 主存地址字段如何划分?要求说明每个字段的含义、位数和在主存地址中的位置。
【正确答案】Cache的行数为4KB/64B=64;因为采用4路组相联,所以每组有4行,共16组。主存地址空间大小为64KB,故主存地址有16位,其中低6位为块内地址,中间4位为组号,高6位为标记(tag或者区号)。
【答案解析】
问答题 该Cache的总容量有多少位?
【正确答案】因为采用写回策略,所以Cache每行中要有1个修改位;因为每组有4行,所以每行有两位LRU位。此外,每行还有6位标记位,1位有效位和64B数据,共有64行,故Cache的总容量为64×(6+1+1+2+64×8)=33408位。
解析:因为Cache每组有4行,所以某一行调入之后,进行了2次或者3次替换也没有将其替换出去,那么其时间就为2(二进制表示:10)或者3(二进制表示:11),此时1位LRU位已经不能表示2或3,所以需要2位LRU位。以此类推,当Cache每组有N行,那么LRU位至少为:log2N(如果为小数,则向上取整,例如N=7,那么LRU位就需要3位)。
【答案解析】
问答题 若Cache初始为空,CPU依次从0号地址单元顺序访问到4344号单元,重复按此序列共访问16次。若Cache命中时间为20ns,主存存取时间为200ns,试估计CPU访存的平均时间。
【正确答案】块大小为64B,CPU总共访问了4345个单元,4345/64=67.89,所以CPU访问的是主存前68块(第0~67块),即CPU的访问过程是对前68块连续访问16次。下图给出了访问过程中主存块和Cache行之间的映射关系。图中列方向是Cache的16个组,行方向是每组的4行。 [*] 针对上图的分析:主存的第0~15块分别对应Cache的第0~15组,可以放在对应组的任意一行中,在此假定按顺序存放在对应组的第0行;主存的第16~31块也分别对应Cache的第0~15组,假定放在各组的第1行中;同理,主存的第32~47块分别放在Cache的第0~15组的第2行中;主存的第48~63块分别放在Cache的第0~15组的第3行中。这样,访问主存的第0~63块都没有冲突,每块都是第一次在Cache中没有找到,然后把这一块调到Cache对应组的某一行中,这样该块后面的每次访问都能在Cache中找到。因此,每一块只有第一个单元没有命中,其余63个单元都命中。主存的第64~67块分别对应Cache的第0~3组,此时,这4组的4个行都已经被主存块占满,所以这4组的每一组都要选择一个主存块从Cache中淘汰出来。因为采用LRU算法,所以将最近最少用的第0~3块分别从第0~3组的第0行中替换出来。再把第64~67块分别放到Cache的第0~3组的第0行中,每块也都是第一次在Cache中没有命中,调入后,每次都能在Cache中命中。 综上所述,第一次循环中,每一块都只有第一个单元没有命中,其余都命中。 以后的15次循环中,因为Cache第4~15组的48行中的主存块一直没有被替换过,所以只有68-48=20个行中对应主存块的第一个单元未命中,其余都命中。 总访问次数为4345×16=69520次。其中,未命中次数为68+15×20=368次。 命中率P为(69520-368)/69520=99.47%。平均访问时间=20ns+200×(1-0.9947)ns=21.06ns。
【答案解析】