求模拟页面置换算法,c++
简单易懂,带注释!
简单易懂,带注释!
答案:只有一个先进先出(fifo)的!#include<iostream.h>
int choose; //选择置换方法
int PageOrder[100]; //页面走向
int Order=0; //页面计数
int MaxPage; //页面总数
int MaxPhy; //物理块总数
int count; //命中次数struct PageTable //页表结构体
{
int PageNomber;
int PhyNomber;
int Sta; //状态位
int Visit; //访问位
int Change; //改变位
};struct PageTable p[10];//最多同时进入10个页表
void main()
{
void Init();
void Fifo();
void Lru();
Init();
cout<<"请选择置换方法"<<endl<<"1、FIFO 2、LRU"<<endl;
cin>>choose;
if(choose==1)
{
cout<<"物理块变化过程:"<<endl;
Fifo();
cout<<endl;
cout<<"命中次数:"<<count<<endl;}
else
Lru();
}void Init()
{
cout<<"请输入页表长度";
cin>>MaxPage;
for(int i=1;i<=MaxPage;i++)
{
p[i].PageNomber=i;
p[i].PhyNomber=0;
p[i].Change=0;
p[i].Sta=0;
p[i].Visit=0;
}
cout<<endl<<"请输入物理块数";
cin>>MaxPhy;
cout<<"请输入页面走向以0结束"<<endl;
int j=0;
PageOrder[0]=1;
while(PageOrder[j]!=0)
{
j++;
Order++;
cin>>PageOrder[j];
if(j>99)
{
cout<<"超过最大数量,请重新输入,以0结束!";
continue;
}
}
}void Fifo()
{
int Max(struct PageTable M[]);
struct PageTable i[10];//模拟物理块
for(int j=0;j<MaxPhy;j++)
{
i[j].PageNomber=0;
i[j].Visit=0;
}
int b=0;//标志位,标记物理块已满
for(int k=1;k<Order;k++)
{
if(b==1)//物理块满,进行页面置换
{
int a=0;//标志位,是否命中
for(int m=0;m<MaxPhy;m++)//判断命中
{
if(i[m].PageNomber==PageOrder[k])
{
a=1;
count++;
cout<<"命中"<<" ";
break;
}
}
if(a==1)continue;//命中继续循环
int Ma=Max(i);//未命中,选择时间最长的物理块进行置换
cout<<"替换"<<Ma<<" ";
i[Ma]=p[PageOrder[k]];
for(int l=0;l<MaxPhy;l++)
i[l].Visit++;
continue;
}
for(j=0;j<MaxPhy;j++)//页面写入空物理块
{
if(i[j].PageNomber==0)
{
i[j]=p[PageOrder[k]];
cout<<"进入"<<" ";
for(int l=0;l<=j;l++)
i[l].Visit++;
if(j==MaxPhy-1)
b=b+1;
break;
}
}
}
}void Lru()
{}
int Max(struct PageTable M[])//返回最大值
{
int temp,Max=0;
temp=M[0].Visit;
for(int j=1;j<MaxPhy;j++)
{
if(temp<M[j].Visit)
{
temp=M[j].Visit;
Max=j;
}
}
return(Max);
}
上一个:那种C++编译软件和Win7兼容?
下一个:c++课程设计之电话薄的设计