晚上的时候,一哥们拿一个网上down的程序虚拟存储实验的程序,给我看。好简单的程序,只是没有什么注释,懒看。我这才明白,原来程序不加注释可以打击盗版啊 呵呵
话又说过来了,我的程序(包含FIFO LRU 改进型的CLOCK)加起来就有300行,硬是压缩也有个200+行,学习啊。。。
我是用纯数组写的,之间一个指针没有用到,或许这就是原因所在吧。
反正也不知道源代码的出处何在,好了,保存到我的仓库吧。嘿嘿
=================================================================
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define  ap  12
#define  pp 3
int page[ap] = {0}; //{2,3,2,1,5,2,4,5,3,2,5,2};
int pagecon[pp];
void total()
{
 int i;
    time_t t;
   * srand((unsigned) time(&t));
 for(i=0;i<ap;i++)
 {
  page[i]=(int)(8.0*rand()/(RAND_MAX+1.0) + 1);
  printf("%d ",page[i]);
 }
 printf("\n");
}
void FIFO()
{
 int count = 0;
 int bb[pp],*p=bb,array[ap][pp];
 int i,j,k,t;
 k=0,t=0;
 for(i=0;i<pp;i++)
  bb[i]=pagecon[i];
 for(i=0;i<ap;i++)
 {
  for(j=0;j<pp;j++)
   if(*(p+j)==page[i]) {
    break;}
   if(j==pp)
   {k=k%pp;
   *(p+k)=page[i];
   count++;
   k++;
   for(j=0;j<pp;j++)array[t][j]=*(p+j);
   t++;
   }
 } 
 for(i=0;i<pp;i++)
 {
  for(j=0;j<t;j++)
   printf("%d ",array[j][i]);
        printf("\n"); 
 }
 printf("页面置换次数为:%d\n",count-pp);
}
void LRU()
{
 int bb[pp],*p=bb,array[ap][pp];
 int i,j,k,t,num,m;
 int count = 0;
 k=0,m=0;
 for(i=0;i<pp;i++)
  bb[i]=pagecon[i];
 for(i=0;i<ap;i++)
 {
  num=i;
  for(j=0;j<pp;j++)
   if(*(p+j)==page[i])break;
   if(j==pp)
   {
    for(j=0;j<pp;j++)
    {for(k=i;k>=0;k--)
    if(*(p+j)==page[k]){if(num>k){num=k;t=j;}
    break;
    }
    if(k==-1){num=k;t=j;break;}
    }
    *(p+t)=page[i];
    count++;
    for(j=0;j<pp;j++)array[m][j]=*(p+j);m++;
   }
 }
 
 for(i=0;i<pp;i++)
 { for(j=0;j<m;j++)printf("%d ",array[j][i]);
 printf("\n");
 }
 printf("页面置换次数为:%d\n",count-pp);
}

int main()
{
    printf("产生随机序列如下:\n");
   // total();
    printf("先进先出(FIFO)页面置换算法 \n");
    FIFO();
 printf("最近最久lru\n");
    LRU();
    system("PAUSE");
    return 0; 
}