页面置换算法模拟程序-附代码
%
目录
1.问题的提出...................................................... 错误!未定义书签。
关于页面置换算法模拟程序问题的产生................................. 错误!未定义书签。
任务分析.......................................................... 错误!未定义书签。2.需求分析........................................................ 错误!未定义书签。3.方案设计........................................................ 错误!未定义书签。4.总体设计........................................................ 错误!未定义书签。
程序N-S图....................................................... 错误!未定义书签。
。
主要的函数....................................................... 错误!未定义书签。
主要流程图及代码.................................................. 错误!未定义书签。
FIFO(先进先出)................................................ 错误!未定义书签。
LRU(最近最久未使用)........................................... 错误!未定义书签。
OPT(最佳置换算法)............................................. 错误!未定义书签。
实现结果.......................................................... 错误!未定义书签。5.程序测试........................................................ 错误!未定义书签。
设计测试数据...................................................... 错误!未定义书签。
、
测试结果及分析.................................................... 错误!未定义书签。…
摘要
随着计算机的普及人们的物质生活得到了极大的满足,人们在精神生活方面同样也需要提高,所以越来越多的人进行着各种各样的学习。操作系统是计算机教学中最重要的环节之一,也是计算机专业学生的一门重要的专业课程。操作系统质量的好坏,直接影响整个计算机系统的性能和用户对计算机的使用。一个精心设计的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果.
本课程设计是学生学习完《操作系统教程》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
熟悉页面置换算法及其实现,引入计算机系统性能评价方法的概念。
|
,
;
关键词:编制页面置换算法模拟程序、打印页面、FIFO页面算法、LRU页面置换算法、OPT页面置换算法。
引言
1.问题的提出
关于页面置换算法模拟程序问题的产生
在各种存储器管理方式中,有一个共同的特点,即它们都要求将一个作业全部装入内存方能运行,但是有两种情况:(1)有的作业很大,不能全部装入内存,致使作业无法运行;(2)有大量作业要求运行,但内存容量不足以容纳所有这些作业。而虚拟内存技术正式从逻辑上扩充内存容量,将会解决以上两个问题。
从内存中调出一页程序或数据送磁盘的对换区中,通常,把选择换出的页面的算法称为页面置换算法(Page-Replacement Algorithms)。进而页面置换算法模拟程序能客观的将其工作原理展现在我们面前。
任务分析
首先,定义宏变量,设置所占最大内存长度。编辑以时间为种子,初始化随即发生器。进行相关页面输入程序的编写以及页面的打印。尔后,寻找最近最近最久未使用的页面、记录当前内存块中页面离下次使用间隔长度等相关程序的代码编写。最后,进行)FIFO 、LRU、 OPT三种算法的编写。
2.需求分析
1.用随机数方法产生页面走向,页面走向长度为L。
2.根据页面走向,分别采用FIFO和LRU算法进行页面置换,统计缺页率;
为简化操作,在淘汰一页时,只将该页在页表中抹去,而不再判断它是否
被改写过,也不将它写回到辅存。
3.假定可用内存块和页表长度 (作业的页面数)分别为m和k,初始时,作
业页面都不在内存。
随机数产生程序:
int i,j;
j=time(NULL);um=rand( )%10+1;ime=0;
cout<
}
上述随机数发生函数产生的随机数为~,稍另变化就可得到0~n1之间的随机数。
程序开始时,应对变量Seed (实型)赋初值。
根据页面置换算法的理论操作及要求,首先要进行页面长度的确定,定义结构体用以储存数据,进行主界面代码及FIFO、LRU、OPT页面置换算法代码的编写。
3.方案设计
首先,定义宏变量,设置所占最大内存长度。编辑以时间为种子,初始化随即发生器。进行相关页面输入程序的编写以及页面的打印。
其次,寻找最近最近最久未使用的页面、记录当前内存块中页面离下次使用间隔长度等相关程序的代码编写。
最后,进行FIFO 、LRU、 OPT三种算法的编写。.
程序运行平台
VC++
具体操作如下:在VC++的环境下准备用时钟函数调用库函数(#include <>)、取时钟时间并存入t调用库函数(t=time(NULL))、用时间t初始化随机数发生器调用库函数(srand(t)返回一个1~10之间的随机数(x=rand( )%10+1)。编写三种算法。
4.总体设计
程序N-S图
程序开始
输入选择项(进行判断)
页面存在进入下一部操作此项不存
在
输入要输出的结果
输出结果
主要的函数
Input(int m,Pro p[L])(打印页面走向状态);
void print(Pro *page1)(打印当前的页面);
int Search(int e,Pro *page1 )(寻找内存块中与e相同的块号);
int Max(Pro *page1)(寻找最近最长未使用的页面);
int Count(Pro *page1,int i,int t,Pro p[L])(记录当前内存块中页面离下次使用间隔长度);
int main()(主函数);
.随机数发生器
{
int temp=0,s;
for(t=0;t cout< print(page); i++; } } } cout<<"缺页次数:"< } 实现结果 程序在运行的情况下,进入主界面输入菜单,如图3-3所示: 输入14: 图4-5 输入14后的输出图 输入25: 图5-6输入数据25后输出图 输入数据18: 图5-7 输入数据18后的输出图 输入数据: 图5-8输出图 选1,进入FIFO页面置换: 图5-9 FIFO的输出图选2,进入LRU页面置换: 图5-10 LRU的输出图输入3,进入OPT页面置换: 图5-11 OPT的输出图5.程序测试 设计测试数据 A 14 25 18 ;2 6 4 ; B 1 C 2 D 3 测试结果及分析 1)测试A结果及分析 进入主菜单后输入14、25,显示输入不满足要求。输入18 显示相关信息;输入2 、6不满足要求,输入4 显示出相关信息。 2)测试结果及分析 显示出FIFO页面置换算法的缺页信息及缺页率。 3)测试C结果及分析 显示出LRU页面置换算法的缺页信息及缺页率。 4)测试D结果及分析 显示出OPT页面置换算法的缺页信息及缺页率 结论 通过这次课程设计,不仅让我了解了页面置换算法,开始我一味的进行调试,急切的想侥幸调试出来,但由于没有进行深入的考虑,我调试了很久都没没有成功,我仔细的分析题目,分析材料,在原由的基础上我进行了改正,我最后还是调试成功了,还是经过了一翻努力,这次操作系统实习,不仅让我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握。通过努力,三个页面置换算法程序都已经完成,此时此刻,我心里多了些成就感。 虽然自己所做的很少也不够完善,但毕竟也是努力的结果。主要有以下几点收获: 1.通过对上网和看书查阅相关资料,使自己对VC ++语言的基本框架有新的 了解,加深了对可视化程序的认识。 2.在使用VC++语言来实现功能时,不像以往用的其他语言,它比较简练, 更容易理解,实用性很强。 3.先进先出页面置换和LRU以及OPT算法各有特点,但是实践起来却很大, 使自己对页面置换算法有了新的认识。 一周半的课程设计就要结束了,不但对专业知识有了更深的理解,更使的自己认识到实践的重要性,理论、实践相结合才能达到很好的学习效果,特别是程序语言的学习。 致谢 本次课程设计能顺利完成,感谢学校的大力支持,感谢数学与计算机学院为我们提供实练的机会,感谢老师的细心教导。 此次的课程设计收获很多,虽然经过了一段漫长而又痛苦的过程,但是自己还是完成了,这是与自己的努力是分不开的,但是自己在调试过程当中遇到的一些问题,自己仍然不懂,是在同学、老师的帮助下完成的,在这里还要再次对他们的付出表示崇高的敬意。 参考文献 《面向对象程序设计与VisualC++教程》陈天华编著 《C程序设计(第三版)》谭浩强编著 《C++入门经典》 《面向对象程序设计与C++实现》刘晋萍编著 《计算机操作系统教程》徐甲同等编著 《操作系统》罗宇等编著 《操作系统实验教程》张丽芬, 刘利雄, 王全玉编著《计算机操作系统》梁红兵、哲风屏、汤子瀛编著《操作系统教程》陈向群、杨芙清编著 代码: #include<> #include <> #include <> #include <> #define L 20um=rand( )%10+1;ime=0; cout< } cout< return m; } void print(Pro *page1)um<<" "; cout< } int Search(int e,Pro *page1 )um)return i;ime,i=0; while(i i++; } for( i=0;i } i=0; cout<<"1:FIFO页面置换"< cout<<"2:LRU页面置换"< cout<<"3:OPT页面置换"< cout<<"按其它键结束程序;"< cin>>c; system("cls"); if(c==1)um,page)>=0) um<<" "; um cout<<"不缺页"< i++; um=p[i].num; um<<" "; print(page); um,page); if(t>=0)ime=0;ime++;um<<" "; cout<<"不缺页"< } else um=p[i].num; ime=0; um<<" "; print(page); for(a=0;a if(a!=t)page[a].time++; um,page)>=0)um<<" "; cout<<"不缺页"< i++; } elseum==0)a++;um==0&&q>t)q=t;um=p[i].num; n++; cout< print(page); i++; } else { int temp=0,s; for(t=0;t n++; cout< print(page); i++; } } } cout<<"缺页次数:"< } }while(c==1||c==2||c==3); return 0; } `