当前位置:编程学习 > C/C++ >>

求模拟页面置换算法,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++课程设计之电话薄的设计

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,