读书人

一个操作系统的页面置换的有关问题。

发布时间: 2013-06-25 23:45:41 作者: rapoo

一个操作系统的页面置换的问题。急!!
我想实现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();


}





读书人网 >C语言

热点推荐