第1题
(14分)某机器字长为32位的计算机M,采用请求调页存储管理。虚拟地址32位,页面大小4KB。Cache采用4路组相联映射,内存块大小为32B,Cache数据区大小为8KB。二维数组int a[24][64]按行优先存储,数组的起始虚拟地址为0042 2000H。数组a的数据初始时未调入内存,按如下方式访问数组a:
for (int i=0;i<24; i++)
for (int j=0;j<64; j++)
a[i][j]=10;
(1)数组a分为几个页面存储?访问数组a 缺页几次?页故障地址各是什么?
(2)不考虑对变量i,j的访问,访问数组 a 的过程是否具有时间局部性?为什么?
(3)在计算机M的32位地址中,块内地址是哪几位? Cache组号是哪几位?数组元素a[1][0]的虚拟地址是什么?对应的Cache组号是什么?
(4)数组a总共占多少块?访问a的Cache 命中率是多少?若采用如下方式访问数组a,则命中率又是多少?
for (int j=0;j<64;j++)
for (int i=0; i<24; i++)
a[i][j]=10;
[参考答案]
(1)数组a分为2个页面存储。(1分)
访问数组 a 缺页2次 (1分)
页故障地址分别是0042 2000H、0042 3000H。 (1+1分)
(2)没有时间局部性。(1分)
时间局部性是指,程序在一段时间内,访问同一个数据多次。对于数组a,每个元素仅被访问一次,因此不具有时间局部性。 (2分)
(3)32位地址结构如下: tag标记21bit + 组号6bt +块内地址5bit。若用A31-A0 表示32位地址,则
块内地址是A4~A0(1分)
Cache组号是A10~A5 (1分)
可[1][0]的虚拟地址是0042 2100H (1分)
对应的Cache组号是8(1分)
(4)数组 a 总共占192块 (1分)
访同a的Cache命中率是 7/8=87.5% (1分)若按列访问数组 a,Cache命中率同样是 87.5% (1分)