有一个程序要把100×100的数组的初值置为“0’’,现在假定有两个主存块可以用来存放数组信息,主存块的大小为可以存放200个数组元素,数组中的元素按行编址。两个主存块的初始状态都是空,若程序编制如下:
(1)VarA:Array[1..100]ofArray[1..100]ofInteger;
forj:=1to100do
fori:=1to100do
A[i,j]:=0;
(2)VarA:Array[1..100]ofArray[1..100]ofInteger;
fori:=1to100do
forj:=1to100do
A[i,j]:=0;
当采用LRU页面调度算法时(1)、(2)两个程序各会产生多少次缺页中断?
本题中数组大小1 00×1 00,每个主存块大小可以容纳200个数组元素,数组元素按行编址,所以每个主存块可以存放两行数组,即: A[i,1]、A[i,2]、A [ i,3]、A [i,4]、...、A[i,1 00]、 A[i+1,1]、A[i+1,2]、A[i+1,3]、A[i+1,4]、...、A[i+1,100]。 当装入两个页面之后,初始状态下主存中具有的数组元素是 A[1,1]、 A [ 1,2 ]、 A[1,3]、 A[1,4]、...、 A[1,100]、 A[2,1]、A[2,2 ]、A[2,3]、 A[2,4]、...、A[2,1 00]、 A[3,1]、A[3,2]、A[3,3]、 A[3,4]、...、A[3,1 00]、 A[4,1]、A E4,2]、A [4,3]、 A[4,4]、...、A [4,1 00] 采用LRU即最近最少用调度算法,对题干中两种程序出现的缺页中断情况分别如下: (1)数组访问顺序是 A[ 1,1]、A] 2,1]、A[3,1]、 A[4,1]、...、A[100,1]、 A[1,2]、 A[2,2]、 A [3,2]、 A[4,2]、...、 A[100,2]、 A[ 1,100]、A [2,100]、A[3,100]、A[4,100]、...、A[100,100] 在第1遍i循环(内循环)中,访问A[6,1]、A[9,1]、...、A [ 97,1]时,将各产生一次缺页中断,即产生2 4次缺页中断; 在第2遍i循环(内循环)中,访问A[1,2]、A[ 5,2] 、A [9,2] 、...、A[97,2]时,将各产生一次缺页中断,即产生2 5次缺页中断; 依次类推,在第m遍i循环(内循环)中,访问A[1,m]、A[5,m]、A[9,m]、...、A [97,m]时,将各产生一次缺页中断,即产生2 5次缺页中断,其中m=2,3,...,100。 综上所述,采用程序(1)访问数组时,将产生2 4+2 5*9 9=24 9 9次缺页中断。 (2)数组访问顺序是 A[1,1]、 A[1,2]、 A[1,3]、 A[1,4]、...、 A[1,100]、 A[2,1]、 A[2,2]、 A[3,3]、 A[2,4]、...、 A[2,100]、 A[100,1]、 A[1 00,2]、 A[100,3]、 A[100,4]、...、 A[100,100] 在第1遍j循环(内循环)中,访问A[1,1]、A[1,2]、...、A[1,100]并不产生缺页中断;在第2,3,4遍j循环中,访问A[m,1]、A[m,2]、...、A[m,100],也不产生缺页中断,其中m=2,3,4;在第5遍j循环中,访问A[5,1]时产生一次缺页中断,此后,访问A[5,2]、A[5,3]、…、A[5,100]时不产生缺页中断,并且,在第6、7、8遍j循环中也不产生缺页中断;依次类推,在第m*4+1(m=1,2…24)遍j循环中,访问A[m,1]时,将各产生一次缺页中断,即产生24次缺页中断。 综上所述,采用程序(2)访问数组时,将产生24次缺页中断。