问答题 假定主存地址为32位,按字节编址,指令Cache和数据Cache与主存之间均采用8路组相联映射方式、直写(Write Through)写策略和LRU替换算法,主存块大小为64B,数据区容量各为32KB,开始时Cache均为空。请回答下列问题:
问答题 Cache每一行中标记(Tag)、LRU位各占几位?是否有修改位?
【正确答案】主存块大小为64B=26字节,故主存地址低6位为块内地址,Cache组数为32KB/(64B×8)=64=26,故主存地址中间6位为Cache组号,主存地址中高32-6-6=20位为标记,采用8路组相联映射,故每行中LRU位占3位,采用直写方式,故没有修改位。
【答案解析】
问答题 有如下C语言程序段:[*]若数组s及其变量k均为int型,int型数据占4B,变量k分配在寄存器中,数组s在主存中的起始地址为0080 00COH,则该程序段执行过程中,访问数组s的数据Cache缺失次数为多少?
【正确答案】因为数组s的起始地址最后6位全为0,故s位于一个主存块开始处,占1024×4B/64B=64个主存块;执行程序段过程中,每个主存块中的64B/4B=16个数组元素依次读、写1次,因而对于每个主存块,总是第一次访问缺失,以后每次命中。综上,数组s的数据Cache访问缺失次数为64次。
【答案解析】
问答题 若CPU最先开始的访问操作是读取主存单元0001 0003H中的指令,简要说明从Cache中访问该指令的过程,包括Cache缺失处理过程。
【正确答案】0001 0003H=0000 0000 0000 0001 0000 000000 000011B,根据主存地址划分可知,组索引为0,故该地址所在主存块被映射到指令Cache第0组;因为Cache初始为空,所有Cache行的有效位均为0,所以Cache访问缺失。此时,将该主存块取出后存人指令Cache第0组的任意一行,并将主存地址高20位(00010H)填入该行标记字段,设置有效位,修改LRU位,最后根据块内地址000011B从该行中取出相应内容。
【答案解析】