首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-06-25 
一个操作系统的页面置换的问题。急!!我想实现FIFO置换算法,我感觉代码没什么问题,但是当我输入样例时,就会

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


}





热点排行