1、- . 操作系统课程设计LRU页面调度算法学 号:姓 名:学 院:专 业:班 级:指导教师: 日 期:. word.zl.- .目 录一、实验题目1二、课程设计的目的1三、设计容1四、设计要求1五、设计思想1六、主要数据构造及其说明2七、硬件支持3八、源程序文件3九、程序运行结果7十、实验体会8. word.zl.- .一 实验题目 LRU页面调度算法二 课程设计的目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既 动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解 决实际问题的时机。1.进一步稳固和复习操作系统的根底知识。2. 培养学生构造化程序、模块化程序
2、设计的方法和能力。3.提高学生调试程序的技巧和软件设计的能力。4.提高学生分析问题、解决问题以及综合利用C语言进展程序设计的能力。三 设计容 程序应模拟实现LRU算法思想,对n个页面实现模拟调度。四 设计要求1不同的功能使用不同的函数实现模块化,对每个函数的功能和调用接口要注释清楚。对程序其它局部也进展必要的注释。2对系统进展功能模块分析、画出总流程图和各模块流程图。3用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。4通过命令行相应选项能直接进入某个相应菜单项选择项的功能模块。5所有程序需调试通过。五 设计思想最近最久未使用LRU页调度算法是选择最近最久
3、未使用的页面予以淘汰。算法赋予每个页面一个字段,用来记录一个页面自上次被以来所经历的时间,当所要的页面在存块中时,就不淘汰页面,否那么,淘汰页面中时间最长的,即淘汰最近最久未使用的页面。 Lru(ai,b) Init(b,c) 输入页面号 开场输出queuei 缺页次数和缺页率是否继 续? y n 完毕算法流程图六 主要数据构造及其说明程序执行是稳定的,高效的。在LRU算法中,要找出最近最久未使用的页面的话,就必须设置有关的记录项,且每一次这些记录项,叶面都必须更新这些记录项。这个记录项在此程序中为:typedef struct pageint num;/*记录页面号*/int time;/*
4、记录调入存时间*/Page;/页面逻辑构造,构造为方便算法实现设计 如此,显然要花费较大的系统开销包括时间和空间上的,这也是实际系统中不采用LRU算法的直接原因,但由于其页面置换的优越性,实际系统中常使用LRU的近似算法。七 硬件支持为了了解一个进程在存中的各个页面各有多少时间未被进程,以及如何快速的知道哪一页是最近最久未使用的页面,须有两类硬件之一的支持:存放器或栈。存放器:为了记录某进程在存中各页的使用情况,须为每个在存中的页面配置一个移位存放器。栈:可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程某页面时,便将该页面的页面号从战中移出,将它压入栈顶。因此,栈顶始终是最新被页面
5、的编号,而栈底那么是最近最久未使用页面的页面号。八 源程序文件#include#include#include #define M 3 /物理块数 #define N 10 /页面数 #define Myprintf1 printf(t*ttnn);/表格控制 #define Myprintf2 printf(*nn);/表格控制typedef struct page int num;/*记录页面号*/int time;/*记录调入存时间*/ Page;/页面逻辑构造,构造为方便算法实现设计Page bM;/存单元数int cMN;/暂保存存当前的状态:缓冲区int queue100;/记录调
6、入队列int K;/调入队列计数变量/初始化存单元、缓冲区void Init(Page *b,int cMN) int i,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 Equation(int fold,Pa
7、ge *b) int i; for(i=0;i=0) bval.time=0; for(i=0;iM;i+) if(i!=val) bi.time+; 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; Myprintf1; printf(nttt欢送使用LRU页面调度算法nn);Myprintf1; printf(请输入所要的各个页面号:n);for(
8、i=0;iN;i+)scanf(%d,&ai);Init(b,c); /调用 for(i=0;iN;i+) Lru(ai,b); c0i=ai; /记录当前的存单元中的页面 for(j=0;jM;j+) cji=bj.num; /结果输出printf(存状态为:n);Myprintf2; for(j=0;jN;j+) printf(|%2d,aj);printf(|n);Myprintf2; for(i=0;iM;i+)for(j=0;jN;j+) if(cij=-1) printf(|%2c,32); else printf(|%2d,cij); printf(|n);Myprintf2;
9、printf(n调入队列为:); for(i=0;iK+1;i+) printf(%3d,queuei); printf(n缺页次数为:%6dn缺页率:%16.6f,K+1,(float)(K+1)/N); printf(n是否继续!t y?);char y;if(getch()=y) system(cls); printf(n);goto start; else printf(n); printf(程序完毕n);九 程序运行结果十 实验体会通过本次课程设计,对LRU页面调度算法有了更深入的理解和掌握,进一步的稳固和复习了操作系统中关于LRU页面调度算法的知识,进一步的了解了构造化、模块化程序设计的方法,提高了编写和调试程序的技巧,教师的细心指导。. word.zl.