操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx

上传人:b****6 文档编号:18862595 上传时间:2023-01-01 格式:DOCX 页数:10 大小:48.38KB
下载 相关 举报
操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx_第1页
第1页 / 共10页
操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx_第2页
第2页 / 共10页
操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx_第3页
第3页 / 共10页
操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx_第4页
第4页 / 共10页
操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx

《操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

操作系统课程设计LRU算法完整版内含代码Word格式文档下载.docx

2.培养学生结构化程序、模块化程序设计的方法和能力。

3.提高学生调试程序的技巧和软件设计的能力。

4.提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。

三设计内容

程序应模拟实现LRU算法思想,对n个页面实现模拟调度。

四设计要求

1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。

对程序其它部分也进行必要的注释。

2.对系统进行功能模块分析、画出总流程图和各模块流程图。

3.用户界面要求使用方便、简洁明了、美观大方、格式统一。

所有功能可以反复使用,最好使用菜单。

4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。

5.所有程序需调试通过。

五设计思想

最近最久未使用(LRU)页调度算法是选择最近最久未使用的页面予以淘汰。

算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当所要访问的页面在内存块中时,就不淘汰页面,否则,淘汰页面中时间最长的,即淘汰最近最久未使用的页面。

y

n

算法流程图

六主要数据结构及其说明

程序执行是稳定的,高效的。

在LRU算法中,要找出最近最久未使用的页面的话,就必须设置有关的访问记录项,且每一次访问这些记录项,叶面都必须更新这些记录项。

这个记录项在此程序中为:

typedefstructpage

{

intnum;

/*记录页面号*/

inttime;

/*记录调入内存时间*/

}Page;

//页面逻辑结构,结构为方便算法实现设计

如此,显然要花费较大的系统开销(包括时间和空间上的),这也是实际系统中不采用LRU算法的直接原因,但由于其页面置换的优越性,实际系统中常使用LRU的近似算法。

七硬件支持

为了了解一个进程在内存中的各个页面各有多少时间未被进程访问,以及如何快速的知道哪一页是最近最久未使用的页面,须有两类硬件之一的支持:

寄存器或栈。

寄存器:

为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器。

栈:

可利用一个特殊的栈来保存当前使用的各个页面的页面号。

每当进程访问某页面时,便将该页面的页面号从战中移出,将它压入栈顶。

因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。

八源程序文件

#include<

stdio.h>

conio.h>

stdlib.h>

#defineM3//物理块数

#defineN10//页面数

#defineMyprintf1

printf("

\t************************\t\t\n\n"

);

//表格控制

#defineMyprintf2

******************************\n\n"

typedefstructpage

{

intnum;

}Page;

Pageb[M];

//内存单元数

intc[M][N];

//暂保存内存当前的状态:

缓冲区

intqueue[100];

//记录调入队列

intK;

//调入队列计数变量

//初始化内存单元、缓冲区

voidInit(Page*b,intc[M][N])

inti,j;

for(i=0;

i<

N;

i++)

b[i].num=-1;

b[i].time=N-i-1;

}

M;

for(j=0;

j<

j++)

c[i][j]=-1;

}

//取得在内存中停留最久的页面,默认状态下为最早调入的页面

intGetMax(Page*b)

inti;

intmax=-1;

inttag=0;

if(b[i].time>

max)

max=b[i].time;

tag=i;

returntag;

//判断页面是否已在内存中

intEquation(intfold,Page*b)

{

if(fold==b[i].num)

returni;

}

return-1;

//LRU核心部分

voidLru(intfold,Page*b)

{

inti;

intval;

val=Equation(fold,b);

if(val>

=0)

b[val].time=0;

if(i!

=val)

b[i].time++;

else

{

queue[++K]=fold;

//记录调入页面

val=GetMax(b);

b[val].num=fold;

//主程序

voidmain()

start:

K=-1;

inti,j;

inta[N];

Myprintf1;

\n\t\t\t欢迎使用LRU页面调度算法\n\n"

Myprintf1;

请输入所要访问的各个页面号:

\n"

for(i=0;

scanf("

%d"

&

a[i]);

Init(b,c);

//调用

Lru(a[i],b);

c[0][i]=a[i];

//记录当前的内存单元中的页面

c[j][i]=b[j].num;

//结果输出

printf("

内存状态为:

Myprintf2;

|%2d"

a[j]);

|\n"

for(j=0;

{

if(c[i][j]==-1)

|%2c"

32);

c[i][j]);

}

\n调入队列为:

"

K+1;

%3d"

queue[i]);

\n缺页次数为:

%6d\n缺页率:

%16.6f"

K+1,(float)(K+1)/N);

\n是否继续!

\ty?

chary;

if(getch()=='

y'

system("

cls"

gotostart;

程序结束\n"

九程序运行结果

十实验体会

通过本次课程设计,对LRU页面调度算法有了更深入的理解和掌握,进一步的巩固和复习了操作系统中关于LRU页面调度算法的知识,进一步的了解了结构化、模块化程序设计的方法,提高了编写和调试程序的技巧,谢谢老师的细心指导。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1