文档介绍:#include ""
#include "" //使用setw()时用到的头文件
#include ""
#include ""
#define Max 30 //某进程调入内存中的最大页面数
#define Size 10 //系统为某进程分配的最大物理块数
void Init(int Block[],int m) //初始化物理块
{ int i;
for(i=0;i<m;i++)
{
Block[i]=-1;
}
}
void creat(int Page[],int n) //输入页面串引用号
{ int i;
for(i=0;i<n;i++)
{
cin>>Page[i];
}
}
void zuijia(int Page[],int Block[],int n,int m)
{//max_stay:比较当前内存中页面驻留的最久时间,count:统计页面置换次数
//get:某物理块是否等待驻入新页面(-1:否)
//flag:标记当前序号页面是否已驻入内存(-1:否)
//block_num:驻留内存时间最长的页面所在的物理块序号
//time[]标记对应序号的物理块中页面驻留时间
int i,j,max_stay=0,count=0;
int get=-1,flag=-1,block_num=-1;
int time[Size];
float p=0;
for(i=0;i<m;i++) //初始化time[]
{ time[i]=0;
}
for(i=0;i<n;i++)
{
max_stay=0;
for(j=0;j<m;j++) //有空闲物理块时,页面直接驻入内存空闲块
{ if(Block[j]==-1)
{
get=j; //物理块j即将(/等待)驻入新页面
break;
}
}
for(j=0;j<m;j++) //查找序号相同的页面
{ if(Block[j]==Page[i])//物理块j中页面与当前期望调入内存的页面相同
{
flag=j;
break;
}
}
for(j=0;j<m;j++) //找到驻留内存时间最久的页面置换出
{
for(int x=i+1;x<n;x++)
{
if(Block[j]==Page[x])
{
time[j]=x;
break;
}
else {
time[j]=n;
}
}
}
for(j=0;j<m;j++)
{
if(time[j]>max_stay)
{
max_stay=time[j];
}
}
for(j=0;j<m;j++)
{
if(time[j]==max_stay)
block_num=j; //block_num标记当前序号物理块中页面驻留时间最久
}
if(flag==-1) //不存在相同页面
{ if(get!=-1) //物理块即将(/等待)驻入新页面
{
cout