1、操作系统课程设计完整版内含代码操作系统课程设计LRU页面调度算法学 号:姓 名:学 院:专 业:班 级:指导老师:日 期:一、 实验题目 1二、 课程设计的目的 1三、 设计内容 1四、 设计要求 1五、 设计思想 1六、 主要数据结构及其说明 2七、 硬件支持 3八、 源程序文件 3九、 程序运行结果 6十、实验体会 7一实验题目LRU 页面调度算法二课程设计的目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既 动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解 决实际问题的机会。1.进一步巩固和复习操作系统的基础知识。2.培养学生结构化程序、模块化程序设计的
2、方法和能力。3.提高学生调试程序的技巧和软件设计的能力。4.提高学生分析问题、解决问题以及综合利用 C语言进行程序设计的能力。三设计内容程序应模拟实现LRU算法思想,对n个页面实现模拟调度。四设计要求1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。2.对系统进行功能模块分析、画出总流程图和各模块流程图。3.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。4 .通过命令行相应选项能直接进入某个相应菜单选项的功能模块。5.所有程序需调试通过。五设计思想最近最久未使用(LRU页调度算法是选择最近
3、最久未使用的页面予以淘汰。 算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经 历的时间,当所要访问的页面在内存块中时,就不淘汰页面,否则,淘汰页 面中时间最长的,即淘汰最近最久未使用的页面。输入页面号算法流程图六主要数据结构及其说明程序执行是稳定的,高效的。在LRU算法中,要找出最近最久未使用的页面 的话,就必须设置有关的访问记录项, 且每一次访问这些记录项,叶面都必 须更新这些记录项。这个记录项在此程序中为:typedef struct pageint num;/* 记录页面号*/int time;/* 记录调入内存时间*/Page;页面逻辑结构,结构为方便算法实现设计如此
4、,显然要花费较大的系统开销(包括时间和空间上的),这也是实际系 统中不采用LRU算法的直接原因,但由于其页面置换的优越性,实际系统中 常使用LRU的近似算法。七硬件支持为了了解一个进程在内存中的各个页面各有多少时间未被进程访问, 以及如何快速的知道哪一页是最近最久未使用的页面,须有两类硬件之一的支持: 寄存器或栈。寄存器:为了记录某进程在内存中各页的使用情况, 须为每个在内存中的页 面配置一个移位寄存器。栈:可利用一个特殊的栈来保存当前使用的各个页面的页面号。 每当进程访问某页面时,便将该页面的页面号从战中移出,将它压入栈顶。因此,栈顶 始终是最新被访问页面的编号,而栈底则是最近最久未使用页面
5、的页面号。八源程序文件#i nclude #in clude#in clude#defi ne M 3 / 物理块数#defi ne N 10 / 页面数#defi ne Mypri ntf1typedef struct pageint num;/* 记录页面号*/int time;/* 记录调入内存时间*/Page;页面逻辑结构,结构为方便算法实现设计Page bM; 内存单元数in t cMN;/ 暂保存内存当前的状态:缓冲区int queue100; 记录调入队列int K; 调入队列计数变量/初始化内存单元、缓冲区 void In it(Page *b,i nt cMN) int i,
6、j;for(i=0;iN;i+)bi. num=-1;bi.time=N-i-1;for(i=0;iM;i+)for(j=0;jN;j+) cij=-1;/取得在内存中停留最久的页面,默认状态下为最早调入的页面int GetMax(Page *b)int i;int max=-1;int tag=0;for(i=0;imax)max=bi.time;tag=i;return tag;/判断页面是否已在内存中int Equatio n(i nt fold,Page *b)int i;for(i=0;i=0) bval.time=0;for(i=0;iM;i+) if(i!=val) bi.tim
7、e+;else记录调入页面 queue+K=fold; val=GetMax(b); bval. num=fold; bval.time=0;for(i=0;iM;i+) if(i!=val) bi.time+;/主程序void main()start:K=-1;int i,j;int aN;Mypri ntf1;printf(nttt 欢迎使用LRU页面调度算法nn);Mypri ntf1;printf( 请输入所要访问的各个页面号:n);for(i=0;iN;i+)scan f(%d,&ai);In it(b,c); / 调用for(i=0;iN;i+)Lru(ai,b);c0i=ai;/
8、 记录当前的内存单元中的页面 for(j=0;jM;j+) cji=bj. num;/ 结果输出printf( 内存状态为:n);Mypri ntf2;for(j=0;jN;j+)prin tf(|%2d,aj);prin tf(|n);Mypri ntf2;for(i=0;iM;i+)for(j=0;jN;j+)if(cij=-1)prin tf(|%2c,32);elseprin tf(|%2d,cij);prin tf(|n);Mypri ntf2;prin tf(n 调入队列为:);for(i=0;iK+1;i+)prin tf(%3d,queuei);printf(n 缺页次数为:6
9、dn 缺页率:%16.6f,K+1,(float)(K+1)/N);printf(n 是否继续!t y?);char y;if(getch()=y)system(cls);prin tf(n);goto start;elseprin tf(n);printf( 程序结束 n);九程序运行结果小 *C:Docu*ents and SettingsAdBinistratorXMlfilXDebugXvi-. exe欢迎使甬wu贝面调度算法请输入所要访问的各个贡面号:3532456内存状态为:I 3 I 6 I 6 I 5 I 3 I 2I 41 5I 6I 5I ! 3! 3 ! 3 ! 3 ! 3 ! 3 ! 3 ! 5 ! 5 ! 5 !I I6I6I6I6I2I2!2|6I6I! ! ! ! 5! 5! 5! 4! 4! 4! 4!十实验体会通过本次课程设计,对LRU页面调度算法有了更深入的理解和掌握, 进一步 的巩固和复习了操作系统中关于 LRU页面调度算法的知识,进一步的了解了结构化、模块化程序设计的方法,提高了编写和调试程序的技巧,谢谢老师的细心指导
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1