首页 习题正文

44.(10分)假定主存地址为32位,按字节编址,指令Cac

44.(10分)假定主存地址为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最先开始的访问操作是读取主存单元0001003H中的指令,简要说明从Cache 中访问该指令的过程,包括 Cache 缺失处理过程。



【参考答案及解析】
(1)主存块大小为64B=26字节,故主存地址低6位为块内地址,Cache组数为32KB/64B×8)= 64=26,故主存地址中间6位为 Cache 组号,主存地址中高 32-6-6=20位为标记,采用8 路组相联映射,故每行中 LRU位占3位,采用直写方式,故没有修改位。 (2)因为数组s的起始地址最后6位全为0,故s位干一个主存块开始处,占1024×4B/64B=64个主存块;执行程序段过程中,每个主存块中的 64B/4B=16个数组元素依次读、写1次,因而对于母个主存块,总是第一次访问缺失,以后每次命中。综上,数组 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从该行中取出相应内容。

正在整理中,欢迎在文下评论区提供答案解析,谢谢!
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接:https://scpro.cn/v/6c33478ad3d440ee.html