(4) 磁盘上,在磁盘上的存放地址以及已装入主存的页和作业依次执行的指令序列都同
第一题中(4)所示。于是增加了“修改标志”后的初始页表为:
页号 标志 主存块号 修改标志 在磁盘上的位置
0 1 2 3 4 5 6 1 1 1 1 0 0 0 5 0 8 0 9 0 1 0 0 0 0 011 012 013 021 022 023 121
按依次执行的指令序列,运行你所设计的程序,显示或打印每次调出和装入的页号,以及执行了最后一条指令后的数组P的值。
(5) 为了检查程序的正确性,可再任意确定一组指令序列,运行设计的程序,核对执行
的结果。
开始 取一条指令 取指令中访问的页号→L 查页表 是 该页标志=1? 形成绝对地址 是 是存指令? 置L页修改标志为“1” 否 输出绝对地址 否 有后继指令? 结束 是 取下一条指令 输出“out j” j页修改标志为1 (接下页) (接上页)
输出“in L”
否(产生缺页中断) 模拟硬件 地址转换 模拟FIFO j:=P[k] 页面调度 P[k]:=L, k:=(k+1) mod m 修改页表
图6-2 FIFO页面调度模拟算法
第三题:用最近最少用(LRU)页面调度算法处理缺页中断。 [提示]
(1) 在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操作系统来处理这个中断
事件。如果主存中已经没有空闲块,则可用LRU页面调度算法把该作业中最先进入主存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。调出和装入后都要修改页表页表中对应页的标志。
(2) LRU页面调度算法总是淘汰该作业中距现在最久没有访问过的那一页,因此可以用一个
数组来表示该作业已在主存的页面。数组中的第一个元素总是指出当前刚访问的页号,因此最久没被访问的页总是由最后一个元素指出。如果主存中只有四块空闲块且执行第一题提示(4)假设的指令序列,采用LRU页面调度算法,那麽在主存中的页面变化情况如下:
3 2 1 0 0 3 2 1 6 0 3 2 4 6 0 3 5 4 6 0 1 5 4 6 2 1 5 4 4 3 1 5 6 4 2 1
(3) 编制一个LRU页面调度程序,为了提高系统效率,如果应淘汰的页在执行中没有修改
过,则可不必把该页调出。参看第二题中提示(3)。模拟调度算法不实际启动输出一页和装入一页的程序,而用输出调出的页号和装入的页号来代替。把第一题中的程序稍作 改动,与本题集合起来,LRU页面调度模拟算法如图6-3。
(4) 按第一题中提示(4)的要求,建立一张初始页表,表中为每一页增加“修改标志”位(参
考第二题中提示(4))。然后按依次执行的指令序列,运行你所设计的程序,显示或打印每次调出和装入的页号,以及执行了最后一条指令后的数组中的值。
(5) 为了检查程序的正确性,可再任意确定一组指令序列,运行设计的程序,核对执行的结
果。 开始 取一条指令 取指令中访问的页号→L 查页表 是 该页标志=1? 否(产生缺页中断) 形成绝对地址 是 是存指令? 置L页修改标志为“1” 否 输出绝对地址 否 有后继指令? 是 取下一条指令 结束 模拟硬件 地址转换 模拟LRU j:=被淘汰的页号 页面调度 (接下页) (接上页) j页修改标志为1 输出“out j”
输出“in L” 调整数组,j退出数组,L→数组第一个元素中 修改页表 图6-3 LRU页面调度算法
四、实验报告
(1) (第一题必做,第二题和第三题任选其一)。