#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");
}
{
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;
}