操作系统实验六 - 虚拟存储器实验报告 下载本文

(2) 程序中使用的数据结构及符号说明。

(3) 打印初始页表,每次调出(要调出一页时)和装入的页号,执行最后一条指令

后在主存中的页面号(即数组的值)。

思考题

如果你有兴趣的话,可把两种页面调度算法都做一下,比较两种调度算法的效率(哪种调度算法产生缺页中断的次数少);分析在什麽情况下采用哪种调度算法更有利?

五、实验答案

一、实验目的

在计算机系统中,为了提高主存利用率,往往把辅助存储器(如 磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间 总和可以超出主存的绝对地址空间。用这种办法扩充的主存储器称为 虚拟存储器。通过本实验帮助同学理解在分页式存储管理中怎样实现 虚拟存储器。

二、实验要求及实验环境

第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中 断。分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业 被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为 作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。 作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页 号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为 “1”,则表示该页已在主存,这时根据关系式“绝对地址=块号×块 长+单元号”计算出欲访问的主存单元地址。如果块长为2 的幂次, 则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而 成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这 时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把 该页信息从磁盘读出装入主存后再重新执行这条指令。设计一个“地 址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则 形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代 替一条指令的执行。当访问的页不在主存时,则输出“* 该页页号”, 表示产生了一次缺页中断。

第二题:用先进先出(FIFO)页面调度算法处理缺页中断。 在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操

作系统来处理这个中断事件。如果主存中已经没有空闲块,则可用 FIFO 页面调度算法把该作业中最先进入主存的一页调出,存放到磁 盘上,然后再把当前要访问的页装入该块。调出和装入后都要修改页 表页表中对应页的标志。

FIFO 页面调度算法总是淘汰该作业中最先进入主存的那一页, 因此可以用一个数组来表示该作业已在主存的页面。假定作业被选中 时,把开始的m 个页面装入主存,则数组的元素可定为m 个。 编制一个FIFO 页面调度程序,为了提高系统效率,如果应淘汰 的页在执行中没有修改过,则可不必把该页调出(因在磁盘上已有副 本)而直接装入一个新页将其覆盖。由于是模拟调度算法,所以,不 实际启动输出一页和装入一页的程序,而用输出调出的页号和装入的 页号来代替一次调出和装入的过程。

三、设计思想(本程序中的用到的所有数据类型的定义,主 程序的流程图及各程序模块之间的调用关系) 1.程序流程图

以下为FIFO 算法流程:

2 .逻辑设计

使用线性表保存页表。每个节点信息包括调入主存的标志,主 存块号,在磁盘上的位置,修改标志等。使用线性表保存FIFO 算法 使用的对应关系数组P,用数组模拟实现调度的队列。该队列需支持 查找,插入和删除操作(即替换操作)。 3、物理设计 全局定义如下: struct info//页表 {

bool flag; //标志 long block;//块号

long disk;//在磁盘上的位置 bool dirty;//修改标志 }pagelist[SizeOfPage]; long po;//队列标记

long P[M];

使用函数init()进行初始化,使用循环结构读入各条指令。 四、测试结果 实际运行的结果如下: 请选择题号(1/2):1

请输入指令的页号和单元号: 0 70

绝对地址=710

请输入指令的页号和单元号: 4 053 * 4

请输入指令的页号和单元号: 1 50

绝对地址=1074

请输入指令的页号和单元号: 5 023 * 5

请输入指令的页号和单元号: 2 15

绝对地址=1167

请输入指令的页号和单元号: 1 037

绝对地址=1061

请输入指令的页号和单元号: exit

请选择题号(1/2):2

请输入指令的页号、单元号,以及是否为存指令: 0 70 N 绝对地址=710

请输入指令的页号、单元号,以及是否为存指令: 4 053 N out 0 in 4

请输入指令的页号、单元号,以及是否为存指令: 1 50 N 绝对地址=1074