假定主存地址为32位,按字节编址,指令Cache和数据

假定主存地址为32位,按字节编址,指令Cache和数据Cache与主存之间均采用8路组相联映射方式,直写(WriteThrough)写策略和LRU替换算法,主存块大小为64B,数据区容量各为32KB。开始时Cache均为空。请回答下列问题。1)Cache每一行中标记(Tag)、LRU位各占几位?是否有修改位?

2)有如下C语言程序段:

   for (k = 0; k< 1024;k++) 

   s[k] = 2 *s[k];

   若数组s及其变量k均为int型,int型数据占4B,变量k分配在寄存器中,数组s在主存中的起始地址为008000C0H,则该程序段执行过程中,访问数组s的数据Cache     缺失次数为多少?

3)若CPU最先开始的访问操作是读取主存单元00010003H中的指令,简要说明从Cache

中访问该指令的过程,包括Cache缺失处理过程。


1)主存块大小为64B=26字节,所以主存地址低6位为块内地址,Cache组数为32KB/(64Bx8)=64=26,故主存地址中间6位为Cache组号,主存地址中高32-6-6=20位为标记,采用8路组相联映射,故每行中的LRU位占3位,采用直写方式,故没有修改位。

2)0080 00C0H= 0000 0000 1000 0000 0000 0000 1100 0000B,主存地址的低6位为块内地址,为全0,故s位于一个主存块的开始处,占1024x4B/64B=64个主存块;在执行程序段的过程中,每个主存块中的64B/4B=16个数组元素依次读、写1次,因而对每个主存块,总是第一次访问缺失,此时会将整个主存块调入Cache,之后每次都命中。综上,数组s的数据Cache访问缺失次数为64次。

3)0001 0003H=0000 0000 0000 0001 0000 000000 000011B,根据主存地址划分可知,组

索引为0,故该地址所在主存块被映射到指令Cache的第0组;因为Cache初始为空,所有Cache行的有效位均为0,所以Cache访问缺失。此时,将该主存块取出后存入指令Cache的第0组的任意一行,并将主存地址高20位(00010H)填入该行标记字段,设置有效位,修改LRU位,最后根据块内地址000011B从该行中取出相应的内容。

答案
暂无答案

题目信息

题号:6925
题型:简答题
难度:普通