如下程序在页式虚存系统中执行,程序代码位于虚拟空间 0 页,A 为 128×128 的数组,在虚空间以行为主序存放,每页存放 128 个数组元素。工作集大小为 2 个页框(开始时程序代码已在内存,占 1 个页框),用 LRU 算法,下面两种对 A 初始化的程序引起的页故障数分别为( )。
A. 128×128, 128 B. 128, 128×128 C. 64, 64×64 D. 64×64, 64
[tag_link]
正确答案:A
在页式虚存系统中,数组 A 为 128×128,以行为主序存放,每页存放 128 个元素,因此每行对应一个虚拟页,共占用 128 页(假设从第 1 页开始)。 工作集大小为 2 个页框,开始时程序代码(位于第 0 页)已占 1 个页框,故仅剩 1 个页框用于数据页。 采用 LRU 替换��法,数据页框只能容纳一页数据。
对于程序 1(列优先初始化):外层循环遍历列 j,内层循环遍历行 i。 访问顺序为 A[1][1], A[2][1], …, A[128][1], A[1][2], A[2][2], …, A[128][2], …, A[1][128], A[2][128], …, A[128][128]。 每次访问的元素属于不同行(即不同页),由于只有 1 个数据页框,每次访问新页时都会发生页故障并替换当前页。 即使同一页后续会被再次访问,但两次访问之间间隔了其他 127 页的访问,该页已被替换出内存,因此每次访问都会引发页故障。 总访问次数为 128×128,故页故障数为 128×128。
对于程序 2(行优先初始化):外层循环遍历行 i,内层循环遍历列 j。 访问顺序为 A[1][1], A[1][2], …, A[1][128], A[2][1], A[2][2], …, A[2][128], …, A[128][1], A[128][2], …, A[128][128]。 每行元素位于同一页,访问某行时,第一次访问该页发生页故障,随后访问该行其他元素时页已在内存,无故障。 处理下一行时,新页替换旧页,再次发生页故障。 因此,每行仅一次页故障,共 128 行,故页故障数为 128。
综上,程序 1 页故障数为 128×128,程序 2 页故障数为 128,对应选项 A。