假设某计算机的主存地址空间大小为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初始为空,CPU依次从0号地址单元顺序访问到4344号单元,重复按此序列共访问16次。若Cache命中时间为20ns,主存存取时间为200ns,试估计CPU访存的平均时间。
【正确答案】正确答案:块大小为64B,CPU总共访问了4345个单元,4345/64=67.89,所以CPU访问的是主存前68块(第0~67块),即CPU的访问过程是对前68块连续访问16次。图5-8给出了访问过程中主存块和Cache行之间的映射关系。图5-8中列方向是Cache的16个组,行方向是每组的4行。 针对图5-8的分析:主存的第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中命中。
【答案解析】