题12

题目

Q:假设某个进程分配有 4 个页框, 每个页框大小为 128 个字 (一个整数占一个字)。
进程的代码段正好可以存放在一页中, 而且总是占用 0 号页框。
数据会在其他 3 个页框中换进或换出。数组 为按行优先存储,则执行该进程会发生( )次缺页中断。

int X[64][64]
for (int j = 0; j < 64; j++)
for (int i = 0; i < 64; i++)
X[i][j] = 0;

A. 32 B. 1024 C. 2048 D. 其他都不对

分析

A:我做错的原因在于,没有理解到他这个数组是怎么、以及什么时候放进去页里面的

C
数组大小为 ,一个页框可以存放两行数据。
当访问 时,发生第一次缺页中断,此时调入前两行数据,之后访问 ,不发生缺页中断,因为已被调入内存;
当访问 时,又发生缺页中断;
同理,访问 时不发生缺页中断。
不难发现,每访问两个元素就发生一次缺页中断,共有 个元素,因此共发生 2048 次缺页中断。