操作系统课程设计LRU算法完整版内含代码Word文件下载.docx
- 文档编号:19931013
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:10
- 大小:52.34KB
操作系统课程设计LRU算法完整版内含代码Word文件下载.docx
《操作系统课程设计LRU算法完整版内含代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计LRU算法完整版内含代码Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
一、实验题目
1
二、课程设计的目的
三、设计内容
四、设计要求
五、设计思想
六、主要数据结构及其说明
2
七、硬件支持
3
八、源程序文件
九、程序运行结果
7
十、实验体会
8
一实验题目
二课程设计的目的
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既
动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解
决实际问题的机会。
1.进一步巩固和复习操作系统的基础知识。
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"
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)
{
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;
inta[N];
Myprintf1;
\n\t\t\t欢迎使用LRU页面调度算法\n\n"
请输入所要访问的各个页面号:
\n"
scanf("
%d"
&
a[i]);
Init(b,c);
//调用
Lru(a[i],b);
c[0][i]=a[i];
//记录当前的内存单元中的页面
c[j][i]=b[j].num;
//结果输出
内存状态为:
Myprintf2;
|%2d"
a[j]);
|\n"
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页面调度算法的知识,进一步的了解了结构化、模块化程序设计的方法,提高了编写和调试程序的技巧,谢谢老师的细心指导。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统课程设计LRU算法完整版 内含代码 操作系统 课程设计 LRU 算法 完整版 内含 代码