《操作系统管理---虚拟存储器-实验报告-代码(共8页).doc》由会员分享,可在线阅读,更多相关《操作系统管理---虚拟存储器-实验报告-代码(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上淮海工学院计算机工程学院实验报告书课程名: 操作系统原理 题 目: 虚拟存储器 班 级: 学 号: 姓 名: 评语:成绩: 指导教师: 批阅时间: 年 月 日专心-专注-专业一、目的与要求(一)目的由于超大规模集成电器电路()技术的发展,使存贮器的容量不断扩大,价格大幅度下降。但从应用角度看,存贮器的容量和成本总会受到一定的限制。所以,提高存贮器的使用效率始终是操作系统研究的重要课题之一,虚拟存贮器技术是用来扩大主存容量的一种重要的方法。 本实习要求学生独立地用高级语言编写几个常用的存贮器分配算法,并能设计一个存贮管理的模拟程序,能对各种算法进行分析比较,评测其性能优
2、劣,从而加深对这些算法的了解。(二)要求为了比较真实地模拟存贮器管理,可预先生成一个大致符合实际情况的指令地址流。然后,通过模拟这样一种指令序列的执行来计算和分析比较各种算法的访问命中率。二、示例题目 本示例给出采用页式分配存贮器管理方案,并通过分析、计算不同页面淘汰算法情况下的访问命中率来比较各种算法的优劣,另外也考虑改变页面尺寸大小和实际存贮器容量对计算结果的影响,从而可为选择好的算法、合适的页面尺寸和存贮器实际容量提供依据。 本程序是按下述原则生成指令序列的: ()的指令是顺序执行的。 ()的指令是均匀分布在前地址部分。 ()的指令是均匀分布在后地址部分。 示例中选用最佳淘汰算法(OPT
3、)和最近最少使用页面淘汰算法()计算页面命中率。公式为: 页面失败次数 命中率 页地址流长度 假定虚拟存贮容量为,页面尺寸从到,实存容量从页到页。.算法与框图()最佳淘汰算法()。这是一种理想的算法,可用来作为衡量其他算法优劣的依据,在实际系统中是难以实现的,因为它必须先知道指令的全部地址流。由于本示例中已生成了全部地址流,故可计算最佳命中率。 该算法的准则是淘汰已满页表中以后不再访问或是最迟访问的页。这就要求将页表中的页逐个与后继指令访问的所有页比较,如后继指令不再访问此页,则把此页淘汰,不然得找出后继指令中最迟访问的页面予以淘汰。可见最佳淘汰算法要化费较长的运算时间。()最近最少使用页面淘
4、汰算法()。这是一种经常使用的方法,有各种不同的实施方案,这里是采用的是不断调整页表链的方法,即总是淘汰页表链链首的页,而把新访问的页插入链尾。如果当前调用页已在页表内,则把它再次调整到链尾。这样就能保证最近使用的页,总是处于靠近链尾部分,而不常使用的页就移到链首,逐个被淘汰,在页表较大时,调整页表链的代价也是不小的。 三、实验步骤与源程序#include iostream#include stdio.h#include stdlib.husing namespace std;#define Max 30/某进程调入内存中的最大页面数#define Size 10/系统为某进程分配的最大物理块
5、数void Init(int Block,int m)/初始化物理块int i;for(i=0;im;i+)Blocki=-1;void creat(int Page,int n)/输入页面串引用号int i;for(i=0;iPagei;void Init1(int Block1,int m1)int i;for(i=0;im1;i+)Block1i=-1;void creat1(int Page,int n1)int i;for(i=0;in1;i+)Pagei;void LRU(int Page,int Block1,int n1,int m1)int i,j,max_stay=0,co
6、unt=0;int get=-1,flag=-1,block_num=-1;int timeSize;for(i=0;im1;i+)/初始化timetimei=0;for(i=0;in1;i+)for(j=0;jm1;j+)/有空闲物理块时,页面直接驻入内存空闲块if(Block1j=-1)get=j;/物理块j即将(/等待)驻入新页面break;for(j=0;jm1;j+)/查找序号相同的页面 if(Block1j=Pagei)/物理块j中页面与当前期望调入内存的页面相同 timej=0;flag=j;break;for(j=0;jmax_stay) max_stay=timej;bloc
7、k_num=j; /block_num标记当前序号物理块中页面驻留时间最久if(flag=-1)/不存在相同页面if(get!=-1)/物理块即将(/等待)驻入新页面Block1get=Pagei;/存入页面timeget=0;/当前物理块重新计时for(j=0;j=get;j+)/已驻入页面的驻留时间加1timej+;get=-1;else/页面调度置换,序号block_num的物理块是驻留时间最久的Block1block_num=Pagei;timeblock_num=0;for(j=0;jSize;j+)timej+;block_num=-1;max_stay=0;count+;else
8、/待调入页面与序号flag的物理块中页面相同for(j=0;jm1;j+)timej+;flag=-1;for(j=0;jm1;j+)/输出物理块中的页面驻入情况cout Block1j;coutm1)count=count+m1;cout缺页中断次数为:countendl;void FIFO(int Page,int Block,int n,int m)int i,j,max_stay=0,count=0;int get=-1,flag=-1,block_num=-1;int timeSize;for(i=0;im;i+)timei=0;for(i=0;in;i+)for(j=0;jm;j+
9、)if(Blockj=-1)get=j;break;for(j=0;jm;j+)if(Blockj=Pagei)flag=j;break;for(j=0;jmax_stay)max_stay=timej;block_num=j;if(flag=-1)if(get!=-1)Blockget=Pagei;timeget=0;for(j=0;j=get;j+)timej+;get=-1;elseBlockblock_num=Pagei;timeblock_num=0;for(j=0;jSize;j+)timej+;block_num=-1;max_stay=0;count+;elsefor(j=0;
10、jm;j+)timej+;flag=-1;for(j=0;jm;j+)cout Blockj;coutm)count=count+m;cout缺页中断次数为:countendl;void menu()cout-1.LRU页面置换算法-endl;cout-2.FIFO 页面置换算法-endl;cout-3.退出-endl;cout-默认:-1表示物理块空闲-endl;cout请选择算法endl;void main()int n,m,PageMax,BlockSize,n1,m1,Block1Size; char t; coutendl请输入系统为进程分配的物理块数mm; m1=m;Init(Bl
11、ock,m);Init1(Block1,m1);cout请输入总页面数nn;n1=n;coutt; switch(t) case 1:LRU(Page,Block1,n1,m1); continue; case 2:FIFO(Page,Block,n,m); continue; case 3:exit(0);四、测试数据与实验结果 图1 输入要分配的物理块数、页面总数、页面序列号图2 LRU算法的实现图3 FIFO算法的实现五、结果分析与实验体会页面置换算法理解比较容易,这次根据学号要求实现的是LRU和FIFO算法的实现。其实这两种算法的程序编写比较容易,虽然不全是自己编写的,一部分是参考的网上的例题,但是通过对每一语句的理解,自己弄懂了整个程序的执行原理。但是,在编写过程中自己还是遇到了一些问题。最大的一个问题就是两个算法的正确实现,在程序的编写时,两个程序是分开进行编写的,分别执行起来没有什么问题,但是把两个程序融合在一起后,却出现了问题,即在执行完成一个算法后再执行另外一个算法时,开始的数据是紧接着上次算法结果的数据进行实验的。这个问题困扰了我好长时间,直到现在还没有很好的解决掉,程序只能分别执行一次,如果再进行执行的话,就会出现问题。自己的编程技术不好,程序编的也很繁琐,但是基本的要求已经实现了,希望这次的实验是自己动手的一个开始,自己应该更加努力,再接再厉。
限制150内