LRU页面调度算法实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LRU页调度算法实现
学院计算机科学与技术专业计算机科学与技术学号
学生姓名
指导教师姓名
2014年3月15日
一、设计目的、内容与要求
(一)目的:
操作系统课程设计是计算机专业重要的教学环节,为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
(1)进一步巩固和复习操作系统的基础知识。
(2)培养学生结构化程序、模块化程序设计的方法和能力。
(3)提高学生调试程序的技巧和软件设计的能力。
(4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。(二)内容:
程序应模拟实现LRU算法思想,对n个页面实现模拟调度。
(三)要求:
1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要
注释清楚。对程序其它部分也进行必要的注释。
2.对系统进行功能模块分析、画出总流程图和各模块流程图。
3.用户界面要求方便、简洁明了、美丽大方、格式统一。所有功能可以反复使
用,最好使用菜单。
4.通过命令相应选项能直接进入某个相应菜单选项的功能模块。
所有程序需调试通过。
二、算法的基本思想
LRU是Least Recently Used 近期最少使用算法。
内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,Oracle会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
什么是LRU算法?LRU是Least Recently Used的缩写,即最少使用页面置换算法,是为虚拟页式存储管理服务的。关于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的重要方向。而内存的虚拟存储管理,是现在最通用,最成功的方式——在内存有限的情况下,扩展一部分外存作为虚拟内存,真正的内存只存储当前运行时所用得到信息。这无疑极大地扩充了内存的功能,极大地提高了计算机的并发度。虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。
程序中用到了if,switch选择语句,和for循环语句进行编程。
If语句基本格式为:
If (表达式)
语句1
else
语句2
Switch语句基本格式为:
Switch (表达式)
{
case 常量表达式1;
语句序列1
case 常量表达式2;
语句序列2 }
三、主要功能模块流程图(1)主菜单流程图:
Init;
I=0
I Y Printf(“%d”,Fuzhu[i];) I ++ N Printf(“\n”) (2)main函数流程图: 开始 进入主菜单 是否输入为“1” 自定义块数和 进程数Y 是否输入为“4” 是否输入为“2” 是否输入为“3” N 显示进程数和 块数 Y 进入LRU 算法Y 退出 Y N 结束 N N (3)LRU 程序流程图: 开始 页数是否已 满? 该页是否在物 理块中 更新时间找到最久的页面, 更新时间,置换 退出LRU算法 结束 Y Y N N (4)自定义函数流程图: Init; I=0 I Pages[i]=rand()%100; I ++ Y Getchar90; N 四、系统测试 (1)显示主菜单: (2)选择1: (3)选择3: (4)选择1: (4)输入要修改块的: 五、结论 通过这两周的课设,我不仅复习了C语言的相关知识,还对操作系统有了进一步的理解和掌握。实验中,通过LRU(最近最久未使用)算法实现了页面调度模拟实验。LRU与其他几种调度算法在原理上既有区别又有联系。要想充分掌握LRU算法,也要会使用其他几种算法。 虽然在程序设计中,出现了一些错误,但是经过同学的帮助和辅导老师的细心指导,我已经将错误纠正了。使程序达到预想的结果,能够实现简单的页面调度。通过此次实验,我发现自己在编程方面还有许多不足的地方,以后要多加动手编写,提高自己的编程能力。 最后感谢同学的帮助和辅导老师的悉心指导,使我顺利完成此次实验。六、源程序 #include #include #include #define Maxsize 50 void Xiugaikuaishu(); void Inition(); void Zidingyi(); void ShowCustomer(); void ShowResult(); void ShowNot(); void LRU(); int menu_select(); //菜单函数 int pageNum = 0; int pages[Maxsize];//存储页号 int Fuzhu[Maxsize];//辅助数组 int Time[Maxsize];//记录页在内存中的时间int physicalblock;//记录物理块数 int Fz;//辅助变量 int main() { for(;;) { switch(menu_select()) {