页面置换算法

#include<iostream>
using namespace std;


int Process[100];           //页面队列
int Memory[3];            //块数
int OPTQueue[100];           //OPT算法的队列
int FIFOQueue[100];           //FIFO算法队列
int LRUQueue[100];           //LRU算法队列
int time[100];            //设置的一个时间标志,FIFO算法时判断哪个是最先进来的
int flag[100];            //设置一个标志,LUR算法判断哪个是最近最久未使用的
int ProcessNum;            //页面数
//OPT算法找到最长未使用的
int longest(int start)
{
 int i,s;
 int zero=0,one=0,two=0;
 int temp,max;
 for(i=start+1;i<ProcessNum;i++)
 {
  if(Memory[0]!=OPTQueue[i])
  zero++;
  if(Memory[0]==OPTQueue[i])
  break;
 }
 for(i=start+1;i<ProcessNum;i++)
 {
  if(Memory[1]!=OPTQueue[i])
  one++;
  if(Memory[1]==OPTQueue[i])
  break;
 }
 for(i=start+1;i<ProcessNum;i++)
 {
  if(Memory[2]!=OPTQueue[i])
  two++;
  if(Memory[2]==OPTQueue[i])
  break;
 }
 temp=(one>two)?one:two;
 max=(temp>zero)?temp:zero;
 if(max==zero)
 s=0;
 if(max==one)
 s=1;
 if(max==two)
 s=2;
 return  s;
}
//OPT算法
void OPT()
{
 int i,j,k;
 int num=3;
 for(i=0;i<ProcessNum;i++)
 {
  OPTQueue[i]=Process[i];
 }
 for(i=0;i<3;i++)
 {
  Memory[i]=OPTQueue[i];
 }
 for(i=3;i<ProcessNum;i++)
 {
  for(j=0;j<3;j++)
  {
  if(Memory[j]==OPTQueue[i])
  break;
  }
  if(j==3)
  {
   k=longest(i);
   Memory[k]=OPTQueue[i];
   num++;
  }
 }
 cout<<"缺页次数:"<<num<<endl;
 float str;
 str=(float)num/ProcessNum;
 cout<<"缺页率="<<str*100<<"%"<<endl;
}


//FIFO算法找到最早进来的那个
int MaxTime()
{
 int  i;
 if(time[0]<time[1] && time[0]<time[2])
 i=0;
 if(time[1]<time[0] && time[1]<time[2])
 i=1;
 if(time[2]<time[1] && time[2]<time[0])
 i=2;
 return   i;
}
//FIFO算法
void FIFO()
{
 int i,j,k;
 int num=3;
 for(i=0;i<ProcessNum;i++)
 {
  FIFOQueue[i]=Process[i];
 }
 for(i=0;i<3;i++)
 {
  Memory[i]=FIFOQueue[i];
  time[i]=i;
 }
 for(i=3;i<ProcessNum;i++)
 {
  for(j=0;j<3;j++)
  {
  if(Memory[j]==FIFOQueue[i])
  break;
 }
 if(j==3)
 {
 k=MaxTime();
 time[k]=i;
  Memory[k]=FIFOQueue[i];
 num++;
 }
}
cout<<"缺页次数:"<<num<<endl;
float str;
str=(float)num/ProcessNum;
cout<<"缺页率="<<str*100<<"%"<<endl;
}


//LRU算法找到最近最久未使用的
int MinFlag()
{
 int  i;
 if(flag[0]<flag[1] && flag[0]<flag[2])
 i=0;
 if(flag[1]<flag[0] && flag[1]<flag[2])
 i=1;
 if(flag[2]<flag[1] && flag[2]<flag[0])
 i=2;
 return  i;
}


//LRU算法
void LRU()
{
 int i,j,k;
 int num=3;
 for(i=0;i<ProcessNum;i++)
 {
  LRUQueue[i]=Process[i];
 }
 for(i=0;i<3;i++)
 {
  Memory[i]=LRUQueue[i];
  flag[i]=i;
 }
 for(i=3;i<ProcessNum;i++)
 {
 for(j=0;j<3;j++)
 {
  if(Memory[j]==LRUQueue[i])
  {
   flag[j]=i;
   break;
  }
 }
 if(j==3)
 {
  k=MinFlag();
  flag[k]=i;
   Memory[k]=LRUQueue[i];
  num++;
  }
 }
 cout<<"缺页次数:"<<num<<endl;
 float str;
 str=(float)num/ProcessNum;
 cout<<"缺页率="<<str*100<<"%"<<endl;
}


void main()
{
int i;

cout<<"-------------------页面置换算法-------------------------"<<endl;
    cout<<"请输入进程数:"<<endl;
cin>>ProcessNum;
    cout<<"请输入每个进程的页面号:"<<endl;
for(i=0;i<ProcessNum;i++)
cin>>Process[i];
    cout<<"------------------OPT最佳置换算法-----------------------"<<endl;
OPT();
    cout<<"---------------FIFO先进先出页面置换算法--------------"<<endl;
FIFO();
    cout<<"---------------LRU最近最久未使用置换算法-------------"<<endl;
LRU();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙在江湖aa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值