组成原理
2020-44
假定主存地址为32位,按字节编址,指令Cache和数据Cache与主存之间均采用8路组相联映射方式,直写(Write Through)写策略和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在主存中的起始地址为0080 00C0H,则该程序段执行过程中,访问数组s的数据Cache缺失次数为多少?
3)若CPU最先开始的访问操作是读取主存单元0001 0003H中的指令,简要说明从Cache中访问该指令的过程,包括Cache缺失处理过程。
答案
(1)主存地址共 32 位,组索引和块内地址各占 6 位,因此标记位占 32-6-6=20 位;8 路组相联需要 3 位 LRU 信息;指令 Cache 采用直写方式,不需要修改位。
(2)64次。
(3)首先将地址00010003H分解为标记、组索引(6位,值为0)和块内偏移(6位,值为3)。根据组索引0在指令Cache中找到对应的组,比较行标记,由于Cache为空,全部无效,缺失。缺失处理:访问主存,将该地址所在的块(起始地址00010000H,大小64B)加载到Cache中。在组0中根据LRU算法选择一个行(如第一个空闲行)填充数据,设置有效位和标记。最后,根据块内偏移3从该行取出指令返回CPU。