组成原理
2023-43
已知计算机 M 字长为 32 位,按字节编址,采用请求调页策略的虚拟存储管理方式,虚拟地址为 32 位,页大小为 4 KB;数据 Cache 采用 4 路组相联映射方式,数据区大小为 8KB,主存块大小为 32B。现有 C 语言程序段如下:
int a[24][64];
/* …… */
for (i = 0; i < 24; i++)
for (j = 0; j < 64; j++)
a[i][j] = 10;已知二维数组 a 按行优先存放,在虚拟地址空间中分配的起始地址为 0042 2000H,sizeof(int) = 4,假定在 M 上执行上述程序段之前数组 a 不在主存,且在该程序段执行过程中不会发生页面置换。请回答下列问题。
1)数组 a 分布在几个页面中?对于数组 a 的访问,会发生几次缺页异常?页故障地址各是什么?
2)不考虑变量 i 和 j,该程序段的数据访问是否具有时间局部性?为什么?
3)计算机 M 的虚拟地址(A31~A0)中哪几位用作块内地址?哪几位用作 Cache 组号?a[1][0]的虚拟地址是多少?其所在主存块对应的 Cache 组号是多少?
4)数组 a 占用多少主存块?假设上述程序段执行过程中数组 a 的访问不会和其他数据发生 Cache 访问冲突,则数组 a 的 Cache 命中率是多少?若将循环中 i 和 j 的次序按如下方式调换:
for (j = 0; j < 64; j++)
for (i = 0; i < 24; i++)
a[i][j] = 10;则数组 a 的 Cache 命中率又是多少?
答案
解答
1)数组 a 分布在几个页面中?对于数组 a 的访问,会发生几次缺页异常?页故障地址各是什么?
- 页面数:2 个页面(页面大小 4KB,数组总大小 6144 字节)。
- 缺页异常次数:2 次(每个页面首次访问时缺页)。
- 页故障地址:00422000H(访问 a[0][0] 时)和 00423000H(访问 a[16][0] 时)。
2)不考虑变量 i 和 j,该程序段的数据访问是否具有时间局部性?为什么?
- 不具有时间局部性。因为数组 a 的每个元素只被访问一次,没有重复访问。
3)计算机 M 的虚拟地址(A31~A0)中哪几位用作块内地址?哪几位用作 Cache 组号?a[1][0] 的虚拟地址是多少?其所在主存块对应的 Cache 组号是多少?
- 块内地址:A4~A0(低 5 位,主存块大小 32B)。
- Cache 组号:A10~A5(共 6 位,Cache 组数 64)。
- a[1][0] 虚拟地址:00422100H。
- Cache 组号:8(由 A10~A5 决定,001000₂ = 8₁₀)。
4)数组 a 占用多少主存块?假设上述程序段执行过程中数组 a 的访问不会和其他数据发生 Cache 访问冲突,则数组 a 的 Cache 命中率是多少?若将循环中 i 和 j 的次序调换,则数组 a 的 Cache 命中率又是多少?
- 主存块数:192 块(总大小 6144B,块大小 32B)。
- 按行优先访问命中率:87.5%(总访问 1536 次,Cache 缺失 192 次)。
- 按列优先访问命中率:87.5%(同样缺页 192 次)。