有一个程序要把100×100的数组置初值“0”,现假定有两个主存块可用来存放数组中的元素,每个主存块可以存放200个数组元素,数组中的元素按行编址。两个主存块的初始状态都为空,若程序编制如下: (1)Var A:array[1..100]of ar

admin2019-01-16  56

问题 有一个程序要把100×100的数组置初值“0”,现假定有两个主存块可用来存放数组中的元素,每个主存块可以存放200个数组元素,数组中的元素按行编址。两个主存块的初始状态都为空,若程序编制如下:
    (1)Var A:array[1..100]of array[1..100]of integer;
       for j:=1 to 100 do
              for i:=1 to 100 do
                    A[i,j]:=0
    (2)Vat A:array[1..100]of array[1..100]of integer;
       for i:=1 to 100 do
             for i:=1 to 100 do
                A[i,j]:=0
当采用LRU页面调度算法时,对上述两种程序编制方法各会产生多少次缺页中断?

选项

答案根据题意,主存块的大小为每块可存放200个数组元素,故作业信息也按每页200个元素来划分。现作业信息是由100×100的数组元素组成,因而共被分成50页。由于作业信息是按行编址的,故每顺序的两行元素在同一页面中,可被同时装到一个主存块中。有两个主存块可供该程序使用,因而程序被装入主存时可把开始两页(共四行元素)的信息分别装入两个主存块。那么,程序执行时若按(1)的编制方法,将对每一列中的各元素顺序清零,即对一列中的元素都清零后再对下一列的元素清零。由于开始两页已被装入主存,所以第一列的四个元素将首先被顺序清零。但当要对第一列的第五个元素清零时却发现该元素不在主存中,因而产生一次缺页中断,按LRU调度算法应淘汰最近最少使用的第一页,使腾出的主存空间可用来存放当前需访问的第三页,即装入第五、六两行元素。程序继续执行时每对两个元素初始化后都要产生一次缺页中断,因而对第一列的100个元素初始化会产生(50—2)次缺页中断。对以后的99列来说,为对每一列元素初始化都将产生50次缺页中断,故(1)的编制方法执行程序时总共会产生(50×100—2)次缺页中断。若按(2)的编制方法,将对一行的元素都清零后再对下一行的元素清零。因而,开始的两页(四行元素)信息先被初始化。当要对第五行元素初始化时将产生缺页中断,按LRU调度算法淘汰最近最少用的第一页后可把当前需访问的包含第五、六两行元素的第三页装入主存。程序继续执行时每对两行元素全部初始化后才产生一次缺页中断,因而共会产生50一2次缺页中断。 因此,程序被装入主存时可把开始两页(四行)装入所分到的主存块中。对于(1)所编制的程序执行时将按列对元素初始化,除对第一列的前四个元素初始化时不会产生缺页中断外,以后每对两个元素初始化时都要产生一次缺页中断,故缺页中断次数为50×100—2次。 对于(2)所编制的程序执行时将按行对元素初始化,除对前四行元素初始化时不会产生缺页中断外,以后每对两行元素初始化时都要产生一次缺页中断,故缺页中断次数为50—2次。

解析
转载请注明原文地址:https://jikaoti.com/ti/t3fjFFFM
0

最新回复(0)