收藏 分销(赏)

实验三-模拟操作系统的页面置换.doc

上传人:精**** 文档编号:2243604 上传时间:2024-05-23 格式:DOC 页数:24 大小:853.04KB
下载 相关 举报
实验三-模拟操作系统的页面置换.doc_第1页
第1页 / 共24页
实验三-模拟操作系统的页面置换.doc_第2页
第2页 / 共24页
实验三-模拟操作系统的页面置换.doc_第3页
第3页 / 共24页
实验三-模拟操作系统的页面置换.doc_第4页
第4页 / 共24页
实验三-模拟操作系统的页面置换.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、实验三 模拟操作系统的页面置换 作者: 日期:2 个人收集整理 勿做商业用途院 系:计 算 机 学 院实验课程: 操作系统实验项目:模拟操作系统的页面置换指导老师: 陈红英老师 开课时间:2011 2012年度第 2学期专 业:网络工程班 级:10级学 生:yuth学 号:华南师范大学教务处一、综合设计实验题目 模拟操作系统的页面置换1、 采用一种熟悉的语言,如 C、PASCAL 或C+ 等,编制程序,最好关键代码采用C/C+ ,界面设计可采用其它自己喜欢的语言。 2、 模拟操作系统采用OPT、FIFO 和LRU算法进行页面置换的过程。 3、 设程序中地址范围为0 到32767 ,采用随机数生

2、成256 个指令地址,满足50的地址是顺序执行,25%向前跳,25% 向后跳。为满足上述条件,可采取下列方法:设d0=10000,第 n个指令地址为dn,第 n+1 个指令地址为dn+1 ,n的取值范围为0 到255。每次生成一个 1 到1024范围内的随机数a,如果a落在1 到512 范围内,则dn+1 =dn+1。如果a落在513 到768范围内,则设置dn+1 为1 到dn范围内一个随机数。如果a落在769 到1024范围内,则设置dn+1 为dn到32767 范围内一个随机数。 例如:srand(); 初始化一个随机函数. a0 10*rand()/32767255+1;a1=10*r

3、and()/32767a0语句可用来产生a0与a1中的随机数。或采用以下方式:(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成: A:50的指令是顺序执行的 B:25的指令是均匀分布在前地址部分 C:25的指令是均匀分布在后地址部分 具体的实施方法是: A:在0,319的指令地址之间随机选取一起点m B:顺序执行一条指令,即执行地址为m+1的指令 C:在前地址0,m+1中随机选取一条指令并执行,该指令的地址为m D:顺序执行一条指令,其地址为m+1 E:在后地址m+2,3 19中随机选取一条指令并执行 F:重复步骤AE,直到320次指令 (2)将指令序列变换为页地址流

4、 设:页面大小为1K; 用户内存容量4页到32页; 用户虚存容量为32K。 在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为: 第 0 条第 9 条指令为第0页(对应虚存地址为0,9) 第10条第19条指令为第1页(对应虚存地址为10,19) 第310条-第319条指令为第31页(对应虚存地址为310,319) 按以上方式,用户指令可组成32页。 4、 页面大小的取值范围为1K,2K,4K,8K,16K 。按照页面大小将指令地址转化为页号。对于相邻相同的页号,合并为一个。 5、 分配给程序的内存块数取值范围为1 块,2 块,直到程序的页面数。 6、 分别采用O

5、PT、FIFO 和LRU算法对页号序列进行调度,计算出对应的缺页中断率。 7、 打印出页面大小、分配给程序的内存块数、算法名、对应的缺页中断率。 8、 分析页面大小和分配给程序的内存块数对缺页中断率的影响。分析不同的页面置换算法的调度性能。 二、中文摘要 这次实验是模拟操作系统的页面置换,分别用先进先出算FIFO、最近最久未使用算法LRU和最佳淘汰算法OPT等三种置换算法来管理管理内存块,并打印出页面大小、分配给程序的内存块数、算法名、对应的缺页中断率。最后对不同算法的调度性能.三、关键词 页面置换 FIFO LRU OPT四、前言本实验的目的及要求1、掌握操作系统的页面置换过程,加深理解页式

6、虚拟存储器的实现原理。 2、掌握用随机数生成满足一定条件的指令地址流的方法。 3、掌握页面置换的模拟方法。 五、实验设计 (一)、需求分析1、 用一种熟悉的语言,如C、PASCAL或C+等,编制程序。2、 分别采用OPT、FIFO和LRU算法对页号序列进行调度。(二)、设计流程1、 根据实验目标,明确实验的具体任务;2、 编写程序实现页面置换;3、 运行程序,调试;4、 记录并分析实验结果.(二)、关键技术根据实验要求,使得50的指令地址是顺序执行,25%向前跳,25 向后跳。可采取下列方法:设d0=10000,第 n个指令地址为dn,第 n+1 个指令地址为dn+1 ,n的取值范围为0 到2

7、55。每次生成一个 1 到1024范围内的随机数a,如果a落在1 到512 范围内,则dn+1 =dn+1.如果a落在513 到768范围内,则设置dn+1 为1 到dn范围内一个随机数。如果a落在769 到1024范围内,则设置dn+1 为dn到32767 范围内一个随机数。开一个数组address来记录指令地址,另一个数组pagenum记录指令地址转换后所在的页,这样就得到原始程序的页面访问序列.然后将相邻相同的页号合并。(三)详细设计 1、设计算法流程图2、数据结构/程序类,指明程序地址范围和指令数class Programpublic:int AddressSize; /(0Addre

8、ssSize) int StructureNum; /指令数public:Program(int m,int i)AddressSize=m;StructureNum=i; ;/内存块节点类class PhysicsPageNode public:int have; /是否有页面占领该内存块,1代表没有,1代表有int Page_Num; /第几页占领该内存块int Elapsed_Time; /内存块的存在时间PhysicsPageNode *next; public:PhysicsPageNode()have=-1;Elapsed_Time=0; /刚生成时内存块的存在时间为0next =

9、 NULL;/模拟操作系统的页面置换类class PageReplacement private:int *address; /存储所有指令的地址 int *pagenum; /存储所有指令地址所在的页float instr_sum; /指令数public:int pagesize; /页面大小(字节)int mem_sum; /程序获得的内存块数public:void transform(Program p); /分析程序p,得到指令页面序列,初始化有关成员PhysicsPageNode getphysage(PhysicsPageNode pp,int pn); /检查指定页是否已在内存块

10、中PhysicsPageNode getfreepage(PhysicsPageNode pp); /检查是否有空的内存块PhysicsPageNode* getlongelapsed(PhysicsPageNode pp); /获得最长时间没访问的内存块 void FIFO(); /先进先出算法 void LRU(); /最近最久未使用算法 void OPT(); /最佳淘汰算法;六、实验实现(一)、实验主要硬件软件环境 32位PC机,VC+6.0(二)、主要功能模块分析1、获得页号序列模块分析程序指令,获得页面序列。Dn为地址,D0=10000;Dn的地址获取方法:循环随机一个数a1,10

11、24;落在1512,Dn=D(n-1)+1,513768,Dn 为1D(n-1)的随机数.如果a落在769-1024,Dn为D(n-1)到所分析程序地址大小(32767)。然后根据页面大小,将各指令地址化为页面号。最后将相邻相同的页号合并。/*分析程序,功能:得到指令页面序列。入口参数:一个程序类,指明程序地址范围和指令数。*/void PageReplacement:transform(Program p)Sleep(10);srand(time(0));int a,q,r;/初始化instr_sum=p.StructureNum; address = new int instr_sum;

12、/存储所有指令的地址 pagenum = new int instr_sum;cout”原程序页面链:endl;address0=10000; /指令起始地址pagenum0=address0/pagesize; /指令地址所在的页coutpagenum0ends;for(int i=1;iinstr_sum;i+) a = 1 + rand()%1024;if(a=512) /顺序执行addressi=addressi-1+1;else if(a=768) /向前跳addressi=1 + rand()(addressi-1);else if(a=1024) /向后跳addressi = a

13、ddressi-1 + rand()%(p。AddressSizeaddressi1);/求得指令所在的页q=addressi/pagesize;r=addressipagesize; if(r)pagenumi=q;else pagenumi=q1;coutpagenumiends; /输出指令所在的页面coutendlendl;/将相邻相同的页号合并int *newpagenum = new int instr_sum; newpagenum0=pagenum0;cout将相邻相同的页号合并为一个后的页面链”endl; int j=0; for(i=1;iinstr_sum;i+)if(n

14、ewpagenumj != pagenumi)j+;newpagenumj=pagenumi; instr_sum = j+1; /新的页面访问串的访问数(j为下标,所以加一) cout新的页面访问串的访问数=”instr_sumendl;for(i=0;iinstr_sum;i+) pagenumi = newpagenumi; coutpagenumiends; /输出指令所在的页面coutPage_Num=pn;ppn-Elapsed_Time=1; else /获取空闲页失败.置换存在时间最大的页面ppn=getlongelapsed(head);ppnPage_Num=pn;ppn-

15、Elapsed_Time=1;else /载入的页在内存页中。 /什么也不发生/将在内存中的页存在时间+1PhysicsPageNode copp=head; while(copp!=NULL)coppElapsed_Time+;copp=copp-next;/输出算法,页面大小,缺页中断率等。cout页面大小=pagesize” 内存块数=”mem_sum FIFO 缺页中断率=;cout。precision(2); /输出小数点后两位coutbreaktimes/instr_sumendl;3、LRU模块最近最久未使用页面置换算法(LRU)LRU在固定时间内将各个内存页的存在时间复位,增加

16、计数器counter,每到30将所有内存页存在时间复位。并且每使用一次内存页,将是把存在时间减3个单位,这样存在时间最大的就是最久未使用的.void PageReplacement:LRU() float breaktimes=0;int i,pn;/生成内存页空间PhysicsPageNode head=new PhysicsPageNode();PhysicsPageNode p=head,*ppn; for(i=1;imem_sum;i+)PhysicsPageNode *np=new PhysicsPageNode();p-next=np;p=np;int counter=0; /计数

17、器for(i=0;i30)counter=0; /计数器归零PhysicsPageNode q=head;/内存页存在时间复位while(q!=NULL)qElapsed_Time=1;q=qnext;pn=pagenumi; /需要载入的页号ppn=getphysage(head,pn); / 是否存在内存页if(ppn=NULL)/ 载入的页不在内存页中/缺页中断次数+1breaktimes+;/获取空闲页面ppn=getfreepage(head);if(ppn!=NULL) /获取成功ppn-Page_Num=pn;ppn-Elapsed_Time=1; else /获取空闲页失败/存

18、在时间最大的为最久未使用.因为每使用一次是减3个单位的存在时间。 ppn=getlongelapsed(head); ppnPage_Num=pn;ppnElapsed_Time=1;else /载入的页在内存页中. ppnElapsed_Time=ppnElapsed_Time-3;/输出算法,页面大小,缺页中断率等。cout页面大小=”pagesize 内存块数=mem_sum LRU 缺页中断率=”;cout.precision(2); /输出小数点后两位coutbreaktimes/instr_sumnext=np;p=np;for(i=0;iElapsed_Time=1;temp=t

19、emp-next;/下面预读未来页面并计数for(;((nextpageendread)&(nextpageElapsed_Time3;ppn=getlongelapsed(head);ppn-Page_Num=pn;ppn-Elapsed_Time=1;else /载入的页在内存页中. /在OPT中无需变化。 /输出算法,页面大小,缺页中断率等。cout页面大小=pagesize” 内存块数=”mem_sum OPT 缺页中断率=”;cout.precision(2); /输出小数点后两位coutPage_Num = pn)return tmp; /找到对应的页并返回elsetmp=tmp-

20、next;return NULL; /没找到,返回NULL/检查是否有空的内存块PhysicsPageNode PageReplacement::getfreepage(PhysicsPageNode* pp)PhysicsPageNode *tmp=pp;while(tmp!=NULL)if(tmp-have = -1)tmp-have=1;return tmp; /找到空的内存块并返回elsetmp=tmpnext;return NULL; /没找到,返回NULL/查找存在时间最长的内存块并返回PhysicsPageNode* PageReplacement:getlongelapsed(

21、PhysicsPageNode* pp)PhysicsPageNode tmp=pp,*t=pp;while(tmp!=NULL)if(tmp-Elapsed_Time t-Elapsed_Time)t=tmp;tmp=tmp-next;return t;七、结果及结果分析 (一)测试数据1、程序中地址范围0 327672、页面大小(k)1K,2K,4K,8K,16K3、分配给程序的内存块数1 块,2 块直到程序的页面数. 4、算法OPT、FIFO 和LRU (二)测试结果记录分析以上的实验结果可知:1、一般情况下,当页面大小一定时,分配给程序的内存块数越多,缺页中断率的越小;当分配给程序的内

22、存块数一定时,页面大小越大,缺页中断率越小.2、当供应的内存块数达到所需最大时,缺页中断率最低。这时FIFO,LRU和OPT三种算法得到的缺页中断率一样.3、一般情况下,OPT的性能最优,LRU缺页中断率低于FIFO。八、实验总结通过这次实验,我掌握了OPT、LRU和FIFO等三种算法的工作原理和进一步掌握操作系统的页面置换过程,并强化了编程解决实际问题的能力。调试过程中发现无论哪个算法得到的缺页中断率都一样,费了一些功夫后发现原来是忘了标志已被使用的内存块,导致每次在内存块中找不到对应的页号时就会将第一个内存块的页号覆盖掉.正是因为这一小错误导致大量的时间花费在调试上.看来细节问题总是得注意的。九、参考文献计算机操作系统教程张尧学 等,清华大学出版社,2006年。24

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 操作系统相关

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服