先进先出置换算法
先进先出置换算法(FIFO):是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。
算法实现代码如下(C语言),数字为随机生成。
#include <stdio.h>
#include <stdlib.h>
#define N 20
struct number{
int t;
int number;
}B[3];
int max(int t1,int t2,int t3){
int max,count;
if(t1>t2)
{
max=t1;
count=0;
}
else
{
max=t2;
count=1;
}
if(t3>max)
count=2;
return count;
}
int main(int argc, char *argv[]) {
int i,j,flag,k=0,count=1,A[N];
srand((unsigned int)time(NULL));
for(i=0;i<N;i++)
{
A[i]=rand()%9+1;
printf(" %d ",A[i]);
}
printf("\n");
B[0].number=A[0];
printf("%d ",B[0].number);
printf("\n");
for(i=1;i<=N;i++)
{
if(k==2)
break;
if(B[0].number==A[i]||B[1].number==A[i]||B[2].number==A[i])
{ if(k==0)
{printf("%d ",B[0].number);
printf("\n");
count++;
continue;
}
else if(k==1)
{ printf("%d %d ",B[0].number,B[1].number);
printf("\n");
count++;
continue;
}
}
k++;
B[k].number=A[i];
count++;
if(k==1)
{ printf("%d %d",B[0].number,B[1].number);
printf("\n");
}
else
{ printf("%d %d %d ",B[0].number,B[1].number,B[2].number);
printf("\n");
}
}
B[0].t=3;
B[1].t=2;
B[2].t=1;
for(i=count;i<N;i++)
{
if(B[0].number==A[i]||B[1].number==A[i]||B[2].number==A[i])
{
printf("%d %d %d",B[0].number,B[1].number,B[2].number);
printf("\n");
continue;
}
flag = max(B[0].t,B[1].t,B[2].t);
B[flag].number=A[i];
for(j=0;j<3;j++)
{
B[j].t++;
printf("%d ",B[j].number);
}
B[flag].t=1;
printf("%s\n","ȱ");
}
return 0;
}
小菜鸟一枚,程序可能有bug,仅供参考。