版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、合肥学院计算机科学与技术系实验报告2014 2015 学年第 一 学期课程操作系统原理实验名称用先进先出(FIFO)页面调度算法处理缺页中断学生姓名陈信耀、夏威胡飞、宋俊专业班级12级软件工程指导教师屠 菁2014 年 12 月1实验目的 熟悉、掌握先进先出FIFO算法,并实现用先进先出FIFO算法页面调度算法处理缺页中断. 理解基于先进先出FIFO的内存管理调度算法,更好的掌握算法的思想,结合实验理解算法更直观,深刻具体。通过对先进先出FIFO的调度算法的模拟实验可以清楚的了解内存管理是如何调度的,以及加深对内存管理的了解。 2实验内容 算法思想:该算法总是淘汰最先进入内存的页面,既选择内存
2、中驻留时间最久的页面予以淘汰。该算法实现简单,只需要把一个进程已调入内存的页面,按照先后测序链接成一个队列,并设置一个指针,使他总是指向最老的页面。编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写JSP页面对所作工作进行显示,并进行相关测试。假定主存的每块长度为128个字节;现有一个共七页的作业,其中第0页至第3页已经装入主存,其余三页尚未装入主存;该作业的页表如表1-1所示:表1-1 初始页表015011118012219013311021400225002360121
3、该作业的初始操作序列如表1-2所示:表1-2 初始操作序列表操作页号单元号操作页号单元号+070移位4053+150+5023215存1037存321取2078取056+4001640存6084运行设计的地址转换程序,显示或打印运行结果。3实验步骤 任务分析 当硬件发出“缺页中断”后,引出操作系统来处理这个中断事件。如果主存中已没有空闲块,则用FIFO页面调度算法把作业中最先进入主存的一页调出,存放在外存上,然后把要访问的页装入该块。调入和装入后都要修改页表中对应页的标志,然后进行地址转换。InitialiseAction类完成了对页表信息和初始操作信息的初始化,OperateAction类完
4、成了对缺页中断的判断、处理以及后来的地址转换。本次实验的模拟算法流程图如图1-1所示: 开始 取一条指令得到该指令要访问的页号(lPageNum) 查页表页标志是否为1? YN 输出页号 形成绝对地址是否为“存”指令? replacedPage=pkNreplacedPage页的修改标志是否为1? YN置lPageNum页修改标志为1 输出绝对地址 Y输出淘汰页号是否有后继指令? 输出调入页号NPk=lPageNum,k=(k+1)mod m Y 修改页表 取下一条指令结束图1-1 模拟算法流程图概要设计:首先定义三个bean类用于封装页表信息、操作序列信息和需要显示的信息,这三个bean类分
5、别是PageInfoBean类、OperateInfoBean类以及ShowInfoBean类,然后定义两个action类,一个action类InitialiseAction用于初始化页表信息和操作序列信息(即为他们赋上初值),另一个action类OperateAction用于模拟发出缺页中断、处理缺页中断以及转换地址等。详细设计:本次模拟程序我们共定义了五个类和两个JSP页面,分别介绍如下:PageInfoBean类中的先是申明相关属性的范围,然后生成了每个属性的get和set方法(此处省略)以供后续调用。public class PageInfoBean /封装页面信息private lo
6、ng pageNum; /页号private int flag; /标志private long block; /块号private int modify; /修改标志private long location; /在磁盘中位置OperateInfoBean类中也是先申明了相关属性,然后生成了各自属性的get和set方法(此处省略)以供后续调用。public class OperateInfoBean /封装指令序列private String operate; /操作private int pageNum; /页号private long unitNum; /单元号ShowInfoBean类
7、中申明了相关属性(即显示的内容),以及生成了它的get和set方法(此处省略)以供后续调用。public class ShowInfoBean /封装最后显示的信息private String operate; /操作private int pageNum; /页号private int flag; /标志private long block; /块号private int modify; /修改标志private String locationOne; /绝对地址private String pageChange; /页号改变方向 private long location; /在磁盘中位置
8、private int arrayValue;InitialiseAction类只负责将页表信息和操作序列表进行初始化即可,无其他功能。OperateAction类中先是初始化需要用到的各类,然后定义相关变量,然后利用for()循环逐步对操作序列表进行操作,每次查序列表时先是获得待操作的页号,再到页表中获取对应页号的标志位,然后使用if()语句对标志位进行判断,当标志位为0时,说明该页不在主存,则,发出缺页中断,利用先入先出算法(FIFO)淘汰最先进入主存的页,然后调入需要装载进主存的页,分别获取需要显示的信息并封装在ShowInfoBean类中,将页表中淘汰的页号改为0,装入的页号改为1,块
9、号改为-1以及修改标志置为0;如何最后计算转换地址,并对判断操作是否为“存”是的话,将修改标志置为1,然后判断标志是否为0,进行页号转换的输出和绝对地址的输出形式,最后将所以的信息放入List()集合,返回list集合。编写JSP页面显示初始化的页表和操作序列信息,以及模拟缺页中断程序执行后的结果信息。程序的输入如图1-2和图1-3所示:图1-2 页表初始信息图1-3 操作序列初始信息程序的输出如图1-4所示:图1-4 模拟缺页中断输出4实验总结 本次实验是通过模拟FIFO(先进先出)调度算法处理缺页中断,主要思想是先把进程调入页面,按次序链接成一个队列,并设置指针一直指向最先进入主存的页面。
10、然后将该页面调出,调入输入的页面。通过对先进先出FIFO算法的模拟实现,加深了对内存管理调度的理解,理解了其如何分配内存的过程,本程序较简单但在实现过程中遇到很多问题,一开始总是出错,程序无法运行,通过调试后在运行过程中每发生缺页中断就发生错误无法继续运行。这次的程序是我们几个同学一起研究探讨出来的,在设计的过程中也出现了一些分歧,最后采用了谁最优最简的标准。为以后团队工作也算是一个基础。5. 附录程序源代码PageInfoBean 类package .hfuu.pagebean;public class PageInfoBean /封装页面信息private long pageN
11、um; /页号private int flag; /标志private long block; /块号private int modify; /修改标志private long location; /在磁盘中位置public long getPageNum() return pageNum;public void setPageNum(long pageNum) this.pageNum = pageNum;public int getFlag() return flag;public void setFlag(int flag) this.flag = flag;public long ge
12、tBlock() return block;public void setBlock(long block) this.block = block;public int getModify() return modify;public void setModify(int modify) this.modify = modify;public long getLocation() return location;public void setLocation(long location) this.location = location;OperateInfoBean 类package cn.
13、edu.hfuu.pagebean;public class OperateInfoBean /封装指令序列private String operate; /操作private int pageNum; /页号private long unitNum; /单元号public int getPageNum() return pageNum;public void setPageNum(int pageNum) this.pageNum = pageNum;public String getOperate() return operate;public void setOperate(String
14、 operate) this.operate = operate;public long getUnitNum() return unitNum;public void setUnitNum(long unitNum) this.unitNum = unitNum;ShowInfoBean 类package .hfuu.pagebean;public class ShowInfoBean /封装最后显示的信息private String operate; /操作private int pageNum; /页号private int flag; /标志private long blo
15、ck; /块号private int modify; /修改标志private String locationOne; /绝对地址private String pageChange; /页号改变方向 private long location; /在磁盘中位置private int arrayValue;public int getArrayValue() return arrayValue;public void setArrayValue(int arrayValue) this.arrayValue = arrayValue;public String getLocationOne()
16、return locationOne;public void setLocationOne(String locationOne) this.locationOne = locationOne;public String getOperate() return operate;public void setOperate(String operate) this.operate = operate;public int getPageNum() return pageNum;public void setPageNum(int pageNum) this.pageNum = pageNum;p
17、ublic int getFlag() return flag;public void setFlag(int flag) this.flag = flag;public long getBlock() return block;public void setBlock(long block) this.block = block;public int getModify() return modify;public void setModify(int modify) this.modify = modify;public String getPageChange() return page
18、Change;public void setPageChange(String pageChange) this.pageChange = pageChange;public long getLocation() return location;public void setLocation(long location) this.location = location;InitialiseAction 类package .hfuu.pageaction;import java.util.ArrayList;import java.util.List;import .h
19、fuu.pagebean.OperateInfoBean;import .hfuu.pagebean.PageInfoBean;public class InitialiseAction /初始化并封装页表信息public List pageStart()List listPage = new ArrayList();PageInfoBean pageInfoBean0 = new PageInfoBean();PageInfoBean pageInfoBean1 = new PageInfoBean();PageInfoBean pageInfoBean2 = new PageI
20、nfoBean();PageInfoBean pageInfoBean3 = new PageInfoBean();PageInfoBean pageInfoBean4 = new PageInfoBean();PageInfoBean pageInfoBean5 = new PageInfoBean();PageInfoBean pageInfoBean6 = new PageInfoBean();listPage.add(pageInfoBean0);listPage.add(pageInfoBean1);listPage.add(pageInfoBean2);listPage.add(p
21、ageInfoBean3);listPage.add(pageInfoBean4);listPage.add(pageInfoBean5);listPage.add(pageInfoBean6);listPage.get(0).setPageNum(0);listPage.get(0).setFlag(1);listPage.get(0).setBlock(5);listPage.get(0).setModify(0);listPage.get(0).setLocation(11);listPage.get(1).setPageNum(1);listPage.get(1).setFlag(1)
22、;listPage.get(1).setBlock(8);listPage.get(1).setModify(0);listPage.get(1).setLocation(12);listPage.get(2).setPageNum(2);listPage.get(2).setFlag(1);listPage.get(2).setBlock(9);listPage.get(2).setModify(0);listPage.get(2).setLocation(13);listPage.get(3).setPageNum(3);listPage.get(3).setFlag(1);listPag
23、e.get(3).setBlock(1);listPage.get(3).setModify(0);listPage.get(3).setLocation(21);listPage.get(4).setPageNum(4);listPage.get(4).setFlag(0);listPage.get(4).setBlock(-1);listPage.get(4).setModify(0);listPage.get(4).setLocation(22);listPage.get(5).setPageNum(5);listPage.get(5).setFlag(0);listPage.get(5
24、).setBlock(-1);listPage.get(5).setModify(0);listPage.get(5).setLocation(23);listPage.get(6).setPageNum(6);listPage.get(6).setFlag(0);listPage.get(6).setBlock(-1);listPage.get(6).setModify(0);listPage.get(6).setLocation(121);return listPage;public List operateStart()/初始化并封装操作信息List listOperate = new
25、ArrayList();OperateInfoBean operateInfoBean0 = new OperateInfoBean();OperateInfoBean operateInfoBean1 = new OperateInfoBean();OperateInfoBean operateInfoBean2 = new OperateInfoBean();OperateInfoBean operateInfoBean3 = new OperateInfoBean();OperateInfoBean operateInfoBean4 = new OperateInfoBean();Ope
26、rateInfoBean operateInfoBean5 = new OperateInfoBean();OperateInfoBean operateInfoBean6 = new OperateInfoBean();OperateInfoBean operateInfoBean7 = new OperateInfoBean();OperateInfoBean operateInfoBean8 = new OperateInfoBean();OperateInfoBean operateInfoBean9 = new OperateInfoBean();OperateInfoBean op
27、erateInfoBean10 = new OperateInfoBean();OperateInfoBean operateInfoBean11 = new OperateInfoBean();listOperate.add(operateInfoBean0);listOperate.add(operateInfoBean1);listOperate.add(operateInfoBean2);listOperate.add(operateInfoBean3);listOperate.add(operateInfoBean4);listOperate.add(operateInfoBean5
28、);listOperate.add(operateInfoBean6);listOperate.add(operateInfoBean7);listOperate.add(operateInfoBean8);listOperate.add(operateInfoBean9);listOperate.add(operateInfoBean10);listOperate.add(operateInfoBean11);listOperate.get(0).setOperate(+);listOperate.get(0).setPageNum(0);listOperate.get(0).setUnit
29、Num(70);listOperate.get(1).setOperate(+);listOperate.get(1).setPageNum(1);listOperate.get(1).setUnitNum(50);listOperate.get(2).setOperate(*);listOperate.get(2).setPageNum(2);listOperate.get(2).setUnitNum(15);listOperate.get(3).setOperate(存);listOperate.get(3).setPageNum(3);listOperate.get(3).setUnit
30、Num(21);listOperate.get(4).setOperate(取);listOperate.get(4).setPageNum(0);listOperate.get(4).setUnitNum(56);listOperate.get(5).setOperate(-);listOperate.get(5).setPageNum(6);listOperate.get(5).setUnitNum(40);listOperate.get(6).setOperate(移位);listOperate.get(6).setPageNum(4);listOperate.get(6).setUni
31、tNum(53);listOperate.get(7).setOperate(+);listOperate.get(7).setPageNum(0);listOperate.get(7).setUnitNum(23);listOperate.get(8).setOperate(存);listOperate.get(8).setPageNum(1);listOperate.get(8).setUnitNum(37);listOperate.get(9).setOperate(取);listOperate.get(9).setPageNum(2);listOperate.get(9).setUni
32、tNum(78);listOperate.get(10).setOperate(+);listOperate.get(10).setPageNum(4);listOperate.get(10).setUnitNum(001);listOperate.get(11).setOperate(存);listOperate.get(11).setPageNum(6);listOperate.get(11).setUnitNum(84);return listOperate;package .hfuu.pageaction;import java.util.ArrayList;import java.util.List;import .hfuu.pagebean.OperateInfoBean;import .hfuu.pagebean.PageInfoBean;import .hfuu.pagebean.ShowInfoBean;public class OperateAction /采用先入先出模拟缺页中断处理public List showInfo() InitialiseAction initialiseAction = new InitialiseAction
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 池河中心小学试卷及答案
- 2026四年级数学下册 图形运动的易错纠正
- 2026六年级数学下册 比例思维方法
- 供应商评价制度
- 粮食专业知识试题及答案
- 人才体系搭建人才发展制度
- 施工分包安全奖惩制度
- 学校宿舍管理奖惩制度
- 工程计划管理奖惩制度
- 患者服务部奖惩制度范本
- 2026年安徽省公务员考试招录7195名备考题库及1套完整答案详解
- 恶性间皮瘤2025年CSCO诊疗指南
- 2026年通辽职业学院单招职业技能考试题库附答案
- 数控车床操作工安全操作规程作业指导书
- 2026年中考英语专题复习:10个常考话题作文+范文(全国用)
- 广场舞大赛协议书
- 指尖血糖监测操作课件
- 2026年企业职业健康工作计划及方案
- 篮球双手传接球课件
- 2026年江苏农林职业技术学院单招职业适应性测试题库附答案详解
- ICU患者谵妄的评估
评论
0/150
提交评论