FIFO算法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称
学生所在系部
年级
专业、班级
学生姓名
学号
任课教师
实验成绩
软件工程系制
一、实验题目:
先进先出(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,y[12]={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,y[12]={1,2,3,4,1,2,5,1,2,3,4,5}; /*m为物理块数,n为要访问的页面数*/
typedef struct page{
int num;
int time;
}Page;
Page x[10];
int GetMax(page *x)
{
int i;
int max=-1;
int tag=0;
for(i=0;i { if(x[i].time>max) { max=x[i].time; tag=i; } } return tag; } void Xunhuan() { printf("Please select 1:FIFO算法\n 2: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;i printf("%d ",y[i]); 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 x[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;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;j { if(x[j].num==-1) {x[j].num=y[i]; break;} } } for(j=0;j if(x[j].num!=-1) x[j].time++; for(j=0;j if(x[j].num==-1) printf("%2c ",32); else