问题 问答题

有一矩阵:int A[50][50]按先行后列次序存放在一个虚存系统中,采用LRU淘汰算法,一个进程有3页内存空间,每页可以存放100个整数变量。其中第1页存放程序,且假定程序已经在内存中。
程序1和程序2如下:
程序1:
FOR (i:=1;i<=50;i++)
FOR (j:=1;j<=50;j++)
A[i][j]:=0;
程序2:
FOR (j:=1;J<=50;J++)
FOR (i:=1;i<=50;i++)
A[i][j]:=0;
分别就程序1和2的执行过程计算缺页次数。

答案

参考答案:首先画出数组的存放顺序如下所示(为讨论简单,页号从第1页开始,不影响页故障的计算),共50*50个变量,每页存放100个,共占50×50/100=25页。再根据程序的循环特点得出页面的访问轨迹。由题意,程序1的访问轨迹为:
A[1,1]、A[1,2]、A[1,3]、…、A[1,50]
A[2,1]、A[2,2]、A[2,3]、…、A[2,50]
A[50,1]、A[50,2]、A[50,3]、…、A[50,50]
根据变量访问规律可知访问串为:
1、…、1、2、…、2、3、…、3、4、…、4、…、25、…、25
因为连续的相同页号只发生一次页故障,可以将访问串简化为如下情况:
1、2、3、4、…、25
然后可根据题意要求采用LRU算法计算页故障数。但实际上,对于不存在非连续的相同页号的访问串,无论采用什么算法及给出多少主存块,对于页故障数的计算都没有影响,答案都是访问串中不同页号的个数,所以结果是发生了25次页故障。
再看程序2:数组的存放顺序不变,变量的访问轨迹为:
A[1,1]、A[2,1]、…、A[50,1]
A[1,2]、A[2,2]、…、A[50,2]
A[1,50]、A[2,50]、…、A[50,50]
可得页面访问轨迹为:
1、1、2、2、3、3、4、4、…、25、25、1、1、2、2、3、3、…、25、25…
将连续相同的页号合并,得如下访问串:
1、2、…、25、1、2、…、25、…、1、2、…、25
共50个重复出现的访问串。同样的道理,无论采用何种算法及多少主存块,页故障数均为25×50=1250次。

单项选择题
单项选择题