FIFO算法实验报告.docx
《FIFO算法实验报告.docx》由会员分享,可在线阅读,更多相关《FIFO算法实验报告.docx(11页珍藏版)》请在冰点文库上搜索。
FIFO算法实验报告
实验报告
课程名称
学生所在系部
年级
专业、班级
学生
学号
任课教师
实验成绩
软件工程系制
一、实验题目:
先进先出〔FIFO〕页面置换算法和最近最久未使用〔LRU〕置换算法程序设计
二、实验目的:
通过对FIFO,LRU算法的模拟,进一步理解进程的根本概念,加深对进程运行状态和进程调度过程、调度算法的理解。
三、实验设备及环境:
1.硬件设备:
PC机一台
2.软件环境:
安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C\C++\Java等编程语言环境。
四、实验容及要求:
〔1〕用C语言编程实现对FIFO,LRU算法的模拟。
〔2〕每个用来标识进程的进程控制块PCB可用构造来描述,包括以下字段:
五、实验方法容
1.算法流程图
2.主要的常量变量
chara;
intm=4,n=12,i,y[12]={1,2,3,4,1,2,5,1,2,3,4,5};
主要模块
voidFIFO(void);
voidLRU(void);
voidXunhuan()
voidmain()
四.代码
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
voidFIFO(void);
voidLRU(void);
chara;
intm=4,n=12,i,y[12]={1,2,3,4,1,2,5,1,2,3,4,5};/*m为物理块数,n为要访问的页面数*/
typedefstructpage{
intnum;
inttime;
}Page;
Pagex[10];
intGetMax(page*x)
{
inti;
intmax=-1;
inttag=0;
for(i=0;i{
if(x[i].time>max)
{max=x[i].time;
tag=i;
}
}
returntag;
}
voidXunhuan()
{
printf("Pleaseselect1:
FIFO算法\n2:
LRU算法\n");
scanf("%s",&a);
printf("物理块数:
4\n");
//scanf("%d",&m);
for(i=0;i{
x[i].num=-1;
}
printf("所要访问的页面数:
12\n");
//scanf("%d",&n);
//srand(time(NULL));
printf("所要访问的页面号序列为:
");
for(i=0;iprintf("%d",y[i]);
printf("\n");
printf("页面置换步骤如下:
\n");
switch(a)
{
case'1':
FIFO();break;
case'2':
LRU();break;
}
}
voidmain()
{
chara;
Xunhuan();
while
(1)
{
printf("ContinueorExit:
C/Anykey:
\n");
scanf("%s",&a);
if(a=='c'||a=='C')
Xunhuan();
elsebreak;
}
exit(0);
}
voidFIFO(void)
{
inti,j,u;
for(i=0;ix[i].time=0;
x[0].num=y[0];
x[0].time=1;
printf("%d\n",x[0].num);
for(i=1;i{u=0;
for(j=0;jif(x[j].num==y[i])
{
u=1;
break;
}
if(u!
=1&&x[m-1].num!
=-1)
{
j=GetMax(x);
x[j].num=y[i];
x[j].time=0;
}
if(u!
=1&&x[m-1].num==-1)
{
for(j=0;j{
if(x[j].num==-1)
{x[j].num=y[i];
break;}
}
}
for(j=0;jif(x[j].num!
=-1)
x[j].time++;
for(j=0;jif(x[j].num==-1)
printf("%2c",32);
else
printf("%2d",x[j].num);
printf("\n");
}
}
voidLRU()
{
inti,j,u;
for(i=0;ix[i].time=0;
x[0].num=y[0];
x[0].time=1;
printf("%d\n",x[0].num);
for(i=1;i{u=0;
for(j=0;jif(x[j].num==y[i])
{
x[j].time=0;
u=1;
break;
}
if(u!
=1&&x[m-1].num!
=-1)
{
j=GetMax(x);
x[j].num=y[i];
x[j].time=0;
}
if(u!
=1&&x[m-1].num==-1)
{
for(j=0;j{
if(x[j].num==-1)
{x[j].num=y[i];
break;}
}
}
for(j=0;jif(x[j].num!
=-1)
x[j].time++;
for(j=0;jif(x[j].num==-1)
printf("%2c",32);
else
printf("%2d",x[j].num);
printf("\n");
}
}
五、实验结果
1.执行结果
2.结果分析
由结果可以看出,使用FIFO算法,总是淘汰最先进入存的页面,即即选择在存中驻留时间最久的页面予以淘汰。
使用LRU算法那么是选择最近最久未使用的页面予以淘汰。
七、实验总结
这次实验让我深刻理解了FIFO和LRU算法。
由于FIFO所依据的条件是各个页面存入的时间,而页面调入的先后并不能反映页面的使用情况,所以FIFO算法的性能较差。
LRU算法相对较好。
通过这个实验我体会到了编程的思路流程,构造流程图的作用。
一个程序如果一开场方案的好,构造设计完善,才可能顺利进展。
教师评价
评定工程
A
B
C
D
评定工程
A
B
C
D
算确
界面美观,布局合理
程序构造合理
操作熟练
语法、语义正确
解析完整
实验结果正确
文字流畅
报告规
题解正确
其他:
评价教师签名:
年月日
教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。
教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。