c语言编写页面置换算法OPT FIFO LRU的模拟程序。
源代码:
#include <stdio.h>
#define number 20
#define block 3
int opt(int a[])
{
int i,j,zero=0,one=0,two=0,q=0;
int b[block];
for(i=0;i<block;i++)
{
b[i]=-1;
}
for(i=0;i<number;i++)
{
if(i<3)
{
printf("缺页:%d\n",a[i]);
q++;
for(j=0;j<block;j++)
{
if(b[j]==-1)
{
b[j]=a[i];
break;
}
}
}
else
{
if(b[0]!=a[i]&&b[1]!=a[i]&&b[2]!=a[i])
{
printf("缺页:%d\n",a[i]);
q++;
for(int t=i+1;t<number;t++)
{
if(b[0]==a[t])
zero=1;
else if(b[1]==a[t])
one=1;
else if(b[2]==a[t])
two=1;
if(zero==1&&one==1&&two==0)
{
b[2]=a[i];
break;
}
else if(zero==1&&one==0&&two==1)
{
b[1]=a[i];
break;
}
else if(zero==0&&one==1&&two==1)
{
b[0]=a[i];
break;
}
}
}
else
printf("%d不缺页。\n",a[i]);
}
for(int f=0;f<block;f++)
{
printf("%d\t",b[f]);
}
printf("\n");
zero=0;
one=0;
two=0;
}
return q;
}
int fifo(int a[])
{
int q=0,i;
int b[block];
for(i=0;i<block;i++)
{
b[i]=-1;
}
for(i=0;i<number;i++)
{
if(i<3)
{
printf("缺页:%d\n",a[i]);
q++;
b[2]=b[1];
b[1]=b[0];
b[0]=a[i];
}
else
{
if(b[0]!=a[i]&&b[1]!=a[i]&&b[2]!=a[i])
{
printf("缺页:%d\n",a[i]);
q++;
b[2]=b[1];
b[1]=b[0];
b[0]=a[i];
}
else
printf("%d不缺页。\n",a[i]);
}
printf("%d\t%d\t%d",b[0],b[1],b[2]);
printf("\n");
}
return q;
}
int lru(int a[])
{
int q=0,i,temp;
int b[block];
for(i=0;i<block;i++)
{
b[i]=-1;
}
for(i=0;i<number;i++)
{
if(i<3)
{
printf("缺页:%d\n",a[i]);
q++;
b[2]=b[1];
b[1]=b[0];
b[0]=a[i];
}
else
{
if(b[0]!=a[i]&&b[1]!=a[i]&&b[2]!=a[i])
{
printf("缺页;%d\n",a[i]);
q++;
b[2]=b[1];
b[1]=b[0];
b[0]=a[i];
}
else if(b[0]==a[i])
{
printf("%d不缺页,且不进行更新。\n",a[i]);
}
else if(b[1]==a[i])
{
printf("%d不缺页,但进行更新。\n",a[i]);
temp=b[1];
b[1]=b[0];
b[0]=temp;
}
else if(b[2]==a[i])
{
printf("%d不缺页,但进行更新。\n",a[i]);
temp=b[2];
b[2]=b[1];
b[1]=b[0];
b[0]=temp;
}
}
printf("%d\t%d\t%d",b[0],b[1],b[2]);
printf("\n");
}
return q;
}
int main()
{
int i,o,f,l;
int a[number];
printf("该程序默认系统为某进程分配三个物理块号,初始为空(-1)。\n");
printf("请输入20个数字。\n");
for(i=0;i<20;i++)
{
scanf("%d",&a[i]);
}
printf("opt页面置换算法:\n");
o=opt(a);
printf("缺页%d次,置换%d次。\n\n\n",o,o-3);
printf("fifo页面置换算法:\n");
f=fifo(a);
printf("缺页%d次,置换%d次。\n\n\n",f,f-3);
printf("lru页面置换算法:\n");
l=lru(a);
printf("缺页%d次,置换%d次。\n",l,l-3);
return 0;
}
运行结果截图: