FIFO算法实验报告材料.doc
word实 验 报 告 课程名称学生所在系部年级专业、班级学生 学号任课教师实验成绩一、 实验题目:先进先出FIFO页面置换算法和最近最久未使用LRU置换算法程序设计二、 实验目的:通过对FIFO,LRU算法的模拟,进一步理解进程的根本概念,加深对进程运行状态和进程调度过程、调度算法的理解。三、 实验设备与环境:1. 硬件设备:PC机一台2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C C+Java 等编程语言环境。四、 实验内容与要求:1用C语言编程实现对FIFO,LRU算法的模拟。2每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:五、实验方法内容1. 算法流程图开始检查内存是否有空闲块选择最先进入的页面置换读入访问页面信息存入页面输出置换出的页面序号完毕未读完已读完有无2. 主要的常量变量char a;int m=4,n=12,i,y12=1,2,3,4,1,2,5,1,2,3,4,5;主要模块void FIFO(void);void LRU(void);void Xunhuan()void main()四代码#include"stdio.h"#include"stdlib.h"#include"time.h"void FIFO(void);void LRU(void);char a;int m=4,n=12,i,y12=1,2,3,4,1,2,5,1,2,3,4,5; /*m为物理块数,n为要访问的页面数*/typedef struct page int num; int time;Page;Page x10;int GetMax(page *x) int i; int max=-1; int tag=0; for(i=0;i<m;i+) if(xi.time>max) max=xi.time; tag=i; return tag;void Xunhuan() printf("Please select 1:FIFO算法n 2:LRU算法n"); scanf("%s",&a); printf("物理块数:4n"); /scanf("%d",&m); for(i=0;i<m;i+) xi.num=-1; printf("所要访问的页面数:12n"); /scanf("%d",&n); /srand(time(NULL); printf("所要访问的页面号序列为:"); for(i=0;i<n;i+) printf("%d ",yi); printf("n"); printf("页面置换步骤如下:n"); switch(a) case '1':FIFO();break; case '2':LRU(); break; void main() char a; Xunhuan(); while(1) printf("Continue or Exit:C/Anykey:n"); scanf("%s",&a); if(a='c'|a='C') Xunhuan(); else break; exit(0);void FIFO(void) int i,j,u; for(i=0;i<m;i+) xi.time=0; x0.num=y0; x0.time=1; printf(" %d n",x0.num); for(i=1;i<n;i+) u=0; for(j=0;j<m;j+) if(xj.num=yi) u=1; break; if(u!=1&&xm-1.num!=-1) j=GetMax(x); xj.num=yi; xj.time=0; if(u!=1&&xm-1.num=-1) for(j=0;j<m;j+) if(xj.num=-1) xj.num=yi; break; for(j=0;j<m;j+) if(xj.num!=-1) xj.time+; for(j=0;j<m;j+) if(xj.num=-1) printf("%2c ",32); else printf("%2d ",xj.num); printf("n"); void LRU() int i,j,u; for(i=0;i<m;i+) xi.time=0; x0.num=y0; x0.time=1; printf(" %d n",x0.num); for(i=1;i<n;i+) u=0; for(j=0;j<m;j+) if(xj.num=yi) xj.time=0; u=1; break; if(u!=1&&xm-1.num!=-1) j=GetMax(x); xj.num=yi; xj.time=0; if(u!=1&&xm-1.num=-1) for(j=0;j<m;j+) if(xj.num=-1) xj.num=yi; break; for(j=0;j<m;j+) if(xj.num!=-1) xj.time+; for(j=0;j<m;j+) if(xj.num=-1) printf("%2c ",32); else printf("%2d ",xj.num); printf("n"); 五、 实验结果1. 执行结果2. 结果分析由结果可以看出,使用FIFO算法,总是淘汰最先进入内存的页面,即即选择在内存中驻留时间最久的页面予以淘汰。使用LRU算法如此是选择最近最久未使用的页面予以淘汰。七、实验总结这次实验让我深刻理解了FIFO和LRU算法。由于FIFO所依据的条件是各个页面存入的时间,而页面调入的先后并不能反映页面的使用情况,所以FIFO算法的性能较差。LRU算法相对较好。通过这个实验我体会到了编程的思路流程,结构流程图的作用。一个程序如果一开始计划的好,结构设计完善,才可能顺利进展。教 师 评 价评定项目ABCD评定项目ABCD算法正确界面美观,布局合理程序结构合理操作熟练语法、语义正确解析完整实验结果正确文字流畅报告规X题解正确其他:评价教师签名:年 月 日9 / 9