第1题
(本题 12 分)现有 C 语言程序 P 的部分代码如图所示。假定运行程序 P 的计算机 M 字长为 32 位,按字节编址,数据 Cache 的数据区大小为 32KB,采用 8 路组相联映射方式,主存块大小为 64B,Cache 的命中时间为 2 个时钟周期,缺失损失为 200 个时钟周期;采用页式虚拟存储管理方式,页大小为 4KB。数组 d 的起始虚拟地址 VA₃₁~VA₀为 01800020H。请回答下列问题:
(1)主存地址中 Cache 组号字段和块内地址字段分别占几位?虚拟地址中哪些位可作为 Cache 索引?(3 分)
(2)d [100] 的虚拟地址为多少?d [100] 所在主存块对应的 Cache 组号是多少?(2 分)
(3)假定执行 for 语句时对应代码已在 Cache,变量 i 和 x 已装入寄存器,数组 d 已调入主存但不在 Cache,则 d [0] 在其所在主存块内的偏移量是多少(用十六进制表示)?for 语句执行过程中,访问数组 d 的 Cache 缺失率和数组元素的平均访问时间分别是多少(Cache 缺失率的计算结果要求用百分比表示,保留两位小数)?(5 分)
(4)数组 d 分布在几个页中?若执行 for 语句时对应代码已在主存,但数组 d 还未调入主存,则执行 for 语句过程中,访问数组 d 所引起的缺页次数是多少?(2 分)
参考答案:
(1)Cache 组号字段占 6 位;块内地址字段占 6 位。虚拟地址中 VA₁₁~VA₆可作为 Cache 索引。
(2)d [100] 的虚拟地址为 018001B0H;Cache 组号是 000110B=6。
(3)d [0] 在其所在主存块内的偏移量为 20H;共发生 129 次 Cache 缺失,访问总次数为 2048×2=4096,Cache 缺失率为 129/4096≈3.15%;数组元素的平均访问时间约为 2+3.15%×200=8.3 个时钟周期。
(4)数组 d 分布在 3 页中;访问数组 d 所引起的缺页次数是 3。