实验报告课程名称学生所在系部年级专业、班级学生姓名学号任课教师实验成绩软件工程系制一、实验题目:先进先出(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()四.代码#includestdio.h#includestdlib.h#includetime.hvoidFIFO(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;im;i++){if(x[i].timemax){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;im;i++){x[i].num=-1;}printf(所要访问的页面数:12\n);//scanf(%d,&n);//srand(time(NULL));printf(所要访问的页面号序列为:);for(i=0;in;i++)printf(%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;im;i++)x[i].time=0;x[0].num=y[0];x[0].time=1;printf(%d\n,x[0].num);for(i=1;in;i++){u=0;for(j=0;jm;j++)if(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;jm;j++){if(x[j].num==-1){x[j].num=y[i];break;}}}for(j=0;jm;j++)if(x[j].num!=-1)x[j].time++;for(j=0;jm;j++)if(x[j].num==-1)printf(%2c,32);elseprintf(%2d,x[j].num);printf(\n);}}voidLRU(){inti,j,u;for(i=0;im;i++)x[i].time=0;x[0].num=y[0];x[0].time=1;printf(%d\n,x[0].num);for(i=1;in;i++){u=0;for(j=0;jm;j++)if(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;jm;j++){if(x[j].num==-1){x[j].num=y[i];break;}}}for(j=0;jm;j++)if(x[j].num!=-1)x[j].time++;for(j=0;jm;j++)if(x[j].num==-1)printf(%2c,32);elseprintf(%2d,x[j].num);printf(\n);}}五、实验结果1.执行结果2.结果分析由结果可以看出,使用FIFO算法,总是淘汰最先进入内存的页面,即即选择在内存中驻留时间最久的页面予以淘汰。使用LRU算法则是选择最近最久未使用的页面予以淘汰。七、实验总结这次实验让我深刻理解了FIFO和LRU算法。由于FIFO所依据的条件是各个页面存入的时间,而页面调入的先后并不能反映页面的使用情况,所以FIFO算法的性能较差。LRU算法相对较好。通过这个实验我体会到了编程的思路流程,结构流程图的作用。一个程序如果一开始计划的好,结构设计完善,才可能顺利进行。教师评价评定项目ABCD评定项目ABCD算法正确界面美观,布局合理程序结构合理操作熟练语法、语义正确解析完整实验结果正确文字流畅报告规范题解正确其他:评价教师签名:年月日