2023 组成原理 虚拟页式管理cache概念 解答题
第 43 题

已知计算机 M 字长为 32 位,按字节编址,采用请求调页策略的虚拟存储管理方式,虚拟地址为 32 位,页面大小为 4KB;数据 Cache 采用 4 路组相联映射,数据区大小为 8KB,主存块大小为 32B。现有 C 语言程序段如下:

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 命中率又是多少?

虚拟页式管理 cache概念

[tag_link]

1)数组 a 分布在 2 个页面中。缺页异常次数为 2。两个页故障地址分别是 0042 2000H、0042 3000H。

2)该程序段的数据访问没有时间局部性。因为每个数组元素仅访问 1 次。

3)虚拟地址中低 5 位 (A4A0) 用作块内地址;低 11 位虚拟地址中高 6 位 (A10A5) 用作 Cache组号。a[1][0]的虚拟地址为 0042 2000H+1×64×4+0×4=0042 2100H。a[1][0]所在主存块对应的 Cache 组号为 001000B=8。

4)数组 a 占 24×64×4B/32B=192 个主存块。每个主存块存放 32B/4B=8 个数组元素,访问数组 a 的 Cache 命中率为 (8-1)/8=87.5%。8 行数组元素占 8×64×4B/32B=64 个主存块,分别映射到 64 个 Cache 组的某 Cache 行,数组 a 共有 24 行,因此每个 Cache 组中只有 24/8=3 个 Cache行存放数组 a 中的数据,而每个 Cache 组有 4 行,因而不会发生替换,访问数组 a 的 Cache 命中率为 7/8=87.5%。