LRU页面调度算法实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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())

{

相关文档
最新文档