《操作系统课程设计(LRU算法)完整版 内含代码.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计(LRU算法)完整版 内含代码.docx(8页珍藏版)》请在优知文库上搜索。
1、操作系统课程设计1.RU页面调度算法学号:姓名:学院:专业:班级:指导教师:日期:目录一、实验题目错误!未定义书签。二、课程设计的目的1三、设计内容1四、设计要求1五、设计思想1六、主要数据构造及其说明1七、硬件支持2八、源程序文件2九、程序运行结果6十、实验体会7一实验题目1.RU页面调度算法二课程设计的目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的时机。1.进一步稳固和复习操作系统的根基知识。2 .培养学生构造化程序、模块化程序设计的方法和能力。3 .提高学生调试程序的技巧和软件设计的能力。4
2、 .提高学生分析问题、解决问题以及综合利用C语言进展程序设计的能力。三设计内容程序应模拟实现LRU算法思想,对n个页面实现模拟调度。四设计要求1 .不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它局部也进展必要的注释。2 .对系统进展功能模块分析、画出总流程图和各模块流程图。3 .用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。4 .通过命令行相应选项能直接进入某个相应菜单项选择项的功能模块。5 .所有程序需调试通过。五设计思想最近最久未使用(LRU)页调度算法是选择最近最久未使用的页面予以淘汰。算法赋予每个页面一
3、个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当所要访问的页面在内存块中时,就不淘汰页面,否那么,淘汰页面中时间最长的,即淘汰最近最久未使用的页面。六主要数据构造及其t二IniTC)I程序执行是稳定的,高效的。在LRU算法中,要找出最近最久未使用的页面的话,就必须设置有关的声一次访问这些记录项,叶面都Lru(ai,b)必须更新这些记录项。这个记录项在此程序中为:typedefstructpage(intnum;/*记录页面号*/inttime;/*记录调入内存时间*/Page;/页面逻辑构造,构造为方便算法实现设计如此,显然要花费较大的系统开销(包括时间和空间上的),这也是实际系统
4、中不采用LRU算法的直接原因,但由于其页面置换的优越性,实际系统中常使用LRU的近似算法。七硬件支持为了了解一个进程在内存中的各个页面各有多少时间未被进程访问,以及若何快速的知道哪一页是最近最久未使用的页面,须有两类硬件之一的支持:存放器或栈。存放器:为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位存放器。栈:可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从战中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底那么是最近最久未使用页面的页面号。八源程序文件#include#include#include# de
5、fineM3物理块数# defineN10页面数# defineMyprintflprintf(,t*ttnnn)/表格控制# defineMyrintf2Printf(”*力n”);/rtypedefstructpageintnum;/*记录页面号*/inttime;/*记录调入内存时间*/Page;/页面逻辑构造,构造为方便算法实现设计PagebM;/内存单元数intcMN;/暂保存内存当前的状态:缓冲区intqueue100;/记录调入队列intK;/调入队列计数变量/初始化内存单元、缓冲区voidInit(Page*b,intcMN)(intizj;for(i=0;iN;i+)(bi.
6、num=-l;bi.time=N-i-l;for(i=0;iM;i+)for(j=0;jN;j+)cij=-l;/取得在内存中停留最久的页面,默认状态下为最早调入的页面intGetMax(Page*b)(inti;intmax=-l;inttag=0;for(i=0;imax)(max=bi.time;tag=i;returntag;/判断页面是否己在内存中intEquation(intfold,Page*b)(inti;for(i=0;i=0)(bvaltime=O;for(i=0;iM;i+)if(i!=val)bi.time+;else(queue+K=fold;/记录调入页面val=G
7、etMax(b);bval.num=fold;bval.time=O;for(i=0;iM;i+)if(i!=val)bi.time+;/主程序voidmain()(StartzK=-I;intizj;intaN;Myprintfl;printf(nttt欢迎使用LRU页面调度算法nn);Myprintfl;Print(”请输入所要访问的各个页面号:n”);for(i=0;iN;i+)scanf(,%d,zai);Init(b,c);/调用for(i=0;iN;i+)(1.ru(ai,b);c0i=ai;记录当前的内存单元中的页面for(j=0;jM;j+)cji=bj.num;结果输出Pri
8、ntf(内存状态为:n);Myrintf2;for(j=0;jN;j+)printf(%2d,zaj);printf(In);Myrintf2;for(i=0;iM;i+)(for(j=0;jN;j+)(if(cij=-1)printf(%2c32);elseprintf(%2d,zcij);printf(In);Myprintf2;printf(n调入队列为:”);for(i=0;iK+l;i+)printf(%3dqueuei);printf(n缺页次数为:%dnj%16.6fnzK+lz(float)(K+1)N);Printf(n是否继续!ty?n);chary;if(getch()=
9、y)(system(,cls);printf(,n);gotostart;elseprintf(,n);Printf(程序完毕n”);九程序运行结果c*C:Docu三entsandSettingsAd*inistratorffiDebugvf.exe欢迎使用LRU页面调度算法请输入所要访问的各个页面号:3665324563存状态为:3:6:6:5:3:214:5:6:5:3:3:3:3:3:3:3:5:5:5!6:6:6:6:2:2:2!6:6!i:5:5:5:4:4:4:4列入队列为:3652456统里次数后7缺页率:0.700000是否继续,y?十实验体会通过本次课程设计,对LRU页面调度算法有了更深入的理解和掌握,进一步的稳固和复习了操作系统中关于LRU页面调度算法的知识,进一步的了解了构造化、模块化程序设计的方法,提高了编写和调试程序的技巧,谢谢教师的细心指导。