FIFO页面置换淘汰算法

  • 格式:doc
  • 大小:16.00 KB
  • 文档页数:3

#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <malloc.h>
#define maxsize 4
typedef int datatype;
//顺序队列结构体的定义
typedef struct
{
datatype data[maxsize];
int front;
int rear;
}SeqQueue;
//构造一个空的顺序队列
SeqQueue *InitQueue()
{
SeqQueue *p;
p=(SeqQueue *)malloc(sizeof(SeqQueue));
p->front=p->rear=0;
return p;
}
int number=0;//缺页计数
//入队
int EnQueue(SeqQueue *p,datatype x)
{
number++;
cout<<"缺页计数"<<number<<endl;
p->data[p->rear]=x;
p->rear=(p->rear+1)%maxsize;
}
//出队
void DeQueue(SeqQueue *p)
{
int x;
x=p->data[p->front];
cout<<"页面"<<x<<"被淘汰!"<<endl;
p->front=(p->front+1)%maxsize;
}
//输出顺序队列的内容
void display(SeqQueue *p)
{
int x,s;
s=p->front;
cout<<"内存块中的页面情况为"<<endl;
while(s!=p->rear)
{
x=p->data[s];
cout<<x;
s=(s+1)%maxsize;
}
}
int justif(SeqQueue *p,datatype x)
{ int tem,s;
s=p->front;
while(s!=p->rear)
{tem=p->data[s];
if(tem==x)
{cout<<"数已在内存块中,请输入下一个数" <<endl;
return false;}
s=(s+1)%maxsize;}
return true;
}
main ()
{ SeqQueue *Q;
int i,total=0;
int x;
float f;
Q=InitQueue();
for(i=0;i<maxsize-1;i++)
{cin>>x;
total++;
EnQueue(Q,x);
}
display(Q);
while(1)
{ cout<<endl<<"请输入下一个要进入的页面(输入0时结束)" <<endl;
cin>>x;
if(!x) break;
total++;
if(justif(Q,x))
{DeQueue(Q);
EnQueue(Q,x);
}
display(Q);
}
cout<<endl<<"页面总数为"<<total<<endl;
cout<<"缺页计数为"<<number<<endl;
f=((float) number/(float) total)*100;
cout<<"缺页中断率f="<< number<<"/"<<total<<"="<<f<<"%"<<endl; }。