#include<iostream>
using namespace std;
int pagenum=0; ///内存的页面数
int total=0; ///要访问的叶面总数
int lacknumber=0; ///缺页的总数
void main()
{
int array[1][20]; //0代表没有内容
for(int y=0;y<2;y++)
for(int x=0;x<20;x++)
{array[y][x]=-1;}
int seque[20]={0};
cout<<"请输入内存的页面数:";
cin>>pagenum;
cout<<"请输入页面的访问顺序(输入-1结束):";
for(int i=0;i<20;i++)
{
int num;
cin>>num;
if(num!=-1)
{
seque[i]=num;
total++;
}
else
{seque[i]=num;break;}
}
cout<<"总的页面数为"<<total<<endl; ///总的页面数
int j=0;
for(i=0;i<pagenum;i++) //刚开始置换前pagenum个空页面
{
if(i<pagenum)
{
array[0][i]=seque[i];
cout<<"页面"<<seque[i]<<"进入内存"<<endl;
cout<<"缺页 此时页面内容为";
for(int j=0;j<pagenum;j++)
{cout<<array[0][j]<<" ";}
cout<<"(-1代表没有内容)"<<endl;
}
cout<<endl;
}
int kk=0;
for(i=pagenum;i<total;i++)
{
int flag=0;
for(int k=0;k<pagenum;k++)
{
if(array[0][k]==seque[i])
{flag=1;break;}
}
cout<<endl;
if(flag==1)
{ cout<<"页面"<<seque[i]<<"进入内存"<<endl;
cout<<"此时页面内容为";
for(int j=0;j<pagenum;j++)
{cout<<array[0][j]<<" ";}
}
cout<<endl;
if(flag==0)
{
int tem=array[0][kk];
array[0][kk]=seque[i];
cout<<"页面"<<seque[i]<<"进入内存"<<endl;
cout<<"缺页 页面"<<tem<<"被替换"<<endl;
cout<<"此时页面内容为";
for(int j=0;j<pagenum;j++)
{cout<<array[0][j]<<" ";}
cout<<endl;
kk++;
lacknumber++; //缺页数
if(kk==pagenum)
{kk=0;}
}
}
lacknumber=pagenum+lacknumber;
cout<<"缺页率="<<lacknumber<<"/"<<total<<"="<<float(lacknumber)/float(total)<<endl;
}