一个操作系统的页面置换的问题。急!!
我想实现FIFO置换算法,我感觉代码没什么问题,但是当我输入样例时,就会出现问题:
缺页次数总是跟实际匹配不上,错误在图片上。
图中红的地开始出错。
#include<stdio.h>
int pagenum=0;
main()
{
int Tarray[2][20]; /*0代表没有内容*/
int y,x,i,k;
int total; /*要访问的页面总数*/
int num;
int tem;
int lacknumber;
int seque[20]; /*缺页的总数*/
int j;
int kk;
int flag;
lacknumber=0;
for(i=0; i<20; i++)
seque[i]=0;
j=0;
kk=0;
flag=0;
for(y=0; y<2; y++)
for(x=0; x<20; x++)
{
Tarray[y][x]=-1;
}
printf("输入内存块的个数:\n");
scanf("%d",&pagenum);
total=0;
printf("输入页面的访问序列:\n(输入-1结束)\n");
for (i=0; i<20; i++)
{
scanf("%d",&num);
if(num!=-1)
{
seque[i]=num;
total++;
}
else
{
seque[i]=num;
break;
}
}
printf("总的页面数为: %d\n",total); /*总的页面数*/
for(i=0; i<pagenum; i++) /*刚开始置换前pagenum个空页面*/
{
if(i<pagenum)
{
Tarray[0][i]=seque[i];
printf("页面 %d 进入内存\n",seque[i]);
printf(" 当前页序:\n");
for(j=0; j<pagenum; j++)
{
printf("%d ",Tarray[0][j]);
}
printf("\n");
printf("(-1 表示内存空余!)");
}
printf("\n");
}
for(i=pagenum; i<total; i++)
{
for(k=0; k<pagenum; k++)
{
if(Tarray[0][k]==seque[i])
{
flag=1;
break;
}
}
printf("\n");
if(flag==1)
{
printf("页面 %d 进入\n",seque[i]) ;
printf("\n");
printf("当前页面:\n");
for(j=0; j<pagenum; j++)
{
printf("%d ",Tarray[0][j]);
}
}
printf("\n");
if(flag==0)
{
tem=Tarray[0][kk];
Tarray[0][kk]=seque[i];
printf("页面 %d 进入内存\n",seque[i]);
printf("\n");
printf("页面 %d 被置换\n",tem);
printf("当前页序为:");
for(j=0; j<pagenum; j++)
{
printf("%d ",Tarray[0][j]);
}
printf("\n");
kk++;
lacknumber++; /*缺页数*/
if(kk==pagenum)
{
kk=0;
}
}
}
lacknumber=pagenum+lacknumber;
printf("总缺页数为:%d",lacknumber);
printf("缺页率=%d/%d=%3.1f",lacknumber,total,(lacknumber*1.0)/(total*1.0));
getch();
}