LRU页面调度算法实现Word格式.docx
- 文档编号:19919478
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:15
- 大小:196.60KB
LRU页面调度算法实现Word格式.docx
《LRU页面调度算法实现Word格式.docx》由会员分享,可在线阅读,更多相关《LRU页面调度算法实现Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
4.通过命令相应选项能直接进入某个相应菜单选项的功能模块。
所有程序需调试通过。
二、算法的基本思想
LRU是LeastRecentlyUsed近期最少使用算法。
内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,Oracle会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
什么是LRU算法?
LRU是LeastRecentlyUsed的缩写,即最少使用页面置换算法,是为虚拟页式存储管理服务的。
关于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的重要方向。
而内存的虚拟存储管理,是现在最通用,最成功的方式——在内存有限的情况下,扩展一部分外存作为虚拟内存,真正的内存只存储当前运行时所用得到信息。
这无疑极大地扩充了内存的功能,极大地提高了计算机的并发度。
虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。
程序中用到了if,switch选择语句,和for循环语句进行编程。
If语句基本格式为:
If(表达式)
语句1
else
语句2
Switch语句基本格式为:
Switch(表达式)
{
case常量表达式1;
语句序列1
case常量表达式2;
语句序列2
}
三、主要功能模块流程图
(1)主菜单流程图:
(2)main函数流程图:
(3)LRU程序流程图:
(4)自定义函数流程图:
四、系统测试
(1)显示主菜单:
(2)选择1:
(3)选择3:
(4)选择1:
(4)输入要修改块的:
五、结论
通过这两周的课设,我不仅复习了C语言的相关知识,还对操作系统有了进一步的理解和掌握。
实验中,通过LRU(最近最久未使用)算法实现了页面调度模拟实验。
LRU与其他几种调度算法在原理上既有区别又有联系。
要想充分掌握LRU算法,也要会使用其他几种算法。
虽然在程序设计中,出现了一些错误,但是经过同学的帮助和辅导老师的细心指导,我已经将错误纠正了。
使程序达到预想的结果,能够实现简单的页面调度。
通过此次实验,我发现自己在编程方面还有许多不足的地方,以后要多加动手编写,提高自己的编程能力。
最后感谢同学的帮助和辅导老师的悉心指导,使我顺利完成此次实验。
六、源程序
#include<
stdio.h>
stdlib.h>
time.h>
#defineMaxsize50
voidXiugaikuaishu();
voidInition();
voidZidingyi();
voidShowCustomer();
voidShowResult();
voidShowNot();
voidLRU();
intmenu_select();
//菜单函数
intpageNum=0;
intpages[Maxsize];
//存储页号
intFuzhu[Maxsize];
//辅助数组
intTime[Maxsize];
//记录页在内存中的时间
intphysicalblock;
//记录物理块数
intFz;
//辅助变量
intmain()
for(;
;
)
{
switch(menu_select())
{
case1:
Zidingyi();
break;
case2:
ShowCustomer();
case3:
LRU();
case4:
exit(0);
}
}
return0;
}
intmenu_select()
{
intn;
printf("
***************欢迎进入主界面*****************\n"
);
*请求页式存储管理中LRU算法的实现*\n"
**\n"
*1.自定义进程数和块数*\n"
*2.显示用户自定义*\n"
*3.LRU算法*\n"
*4.EXIT*\n"
**********************************************\n"
do
printf("
\n输入你的选择(1~4):
"
scanf("
%d"
&
n);
}while(n<
1||n>
4);
return(n);
}
voidZidingyi()
inti;
system("
cls"
页式储存管理-LRU算法\n"
--------------自定义进程数和块数--------------\n"
请输入进程数:
scanf("
pageNum);
getchar();
请输入块数:
physicalblock);
请依次输入页号引用串(中间用空格隔开):
for(i=0;
i<
pageNum;
i++)
pages[i]);
voidLRU()
inti,j;
intReplacePages=0;
//记录置换次数
***********************************************\n"
------------------LRU算法结果显示--------------\n"
\n"
ShowNot();
for(i=Fz;
pageNum;
intkey=0;
for(j=0;
j<
physicalblock;
j++)//判断该页是否在物理块中
{
if(Fuzhu[j]==pages[i])
{
key=1;
//该页在内存中
Time[j]=i;
//更新时间
break;
}
}
if(key==0)//若该页不在内存中
ReplacePages++;
//缺页次数加1
intmin=Time[0];
intflag=0;
for(j=1;
j++)
if(min>
Time[j])
{
min=Time[j];
//找到最久的页面
flag=j;
}
Time[flag]=i;
//记录时间
Fuzhu[flag]=pages[i];
ShowResult();
页面总数为:
%d\n"
pageNum);
置换次数为:
ReplacePages);
doublere1=((double)ReplacePages)/((double)pageNum);
置换率为:
%.2lf\n"
re1);
命中率为:
1-re1);
缺页次数为:
%d\n"
ReplacePages+physicalblock);
doublere2=((double)(ReplacePages+physicalblock))/((double)pageNum);
缺页率为:
re2);
-----------按1修改块数,按2返回主菜单----------\n"
\n"
Yes--1,No--2\n"
intla;
la);
if(la==1)
Xiugaikuaishu();
else
********************************************\n"
--------------------------------------------\n"
system("
voidShowResult()//显示每次换页后的结果
%d"
Fuzhu[i]);
voidXiugaikuaishu()
*************************************************\n"
--------------请输入需要修改块的数目-------------\n"
inta;
a);
physicalblock=a;
//显示自定义页面信息
voidShowCustomer()//显示用户自定义的进程数和块数
**************************************************\n"
----------------------显示------------------------\n"
进程数为:
%d\n"
页号分别为:
"
%d"
pages[i]);
可用物理块数为:
physicalblock);
****************************************************\n"
----------------按任意键可返回主菜单----------------\n"
voidShowNot()//显示一定不用换页的部分
Fz=physicalblock;
inti,j,k=0,key=0;
Fz;
intflag=0;
=i-1;
if(Fuzhu[j]==pages[i])
flag=1;
Fz=Fz+1;
key++;
if(flag==0)
Time[k]=i;
Fuzhu[k]=pages[i];
k++;
for(j=0;
=i-key;
printf("
Fuzhu[j]);
printf("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LRU 页面 调度 算法 实现