int main()

{

int *BlockList1,*BlockList2,*BlockList3,*BlockList4,*BlockList5,*BlockList6,*PageList,*FR,*Flag,*Flag1,*Flag2;

int i = 0,M,N,p,e,m,t,r,tn,fl = 0,ta = 0,test[6] = {0,0,0,0,0,0},ff=0,flag1 = 0,flag2 = 0;

char ch;

printf("请输入物理内存块的大小(大于0):");

scanf("%d",&M);

printf("请输入虚拟内存的页面总数(大于0):");

scanf("%d",&N);

tn = N;

printf("请输入工作集的起始位置(大于等于0):");

scanf("%d",&p);

printf("请输入工作集中包含的页数(大于0):");

scanf("%d",&e);

printf("请输入工作集的移动率(小于等于虚拟内存页面):");

scanf("%d",&m);

if(m > N)

{

printf("工作集的移动率不能大于虚拟内存页面总数,请重新输入:");

scanf("%d",&m);

}

t = 0.05;

PageList = (int*)malloc(N*sizeof(int));

srand((unsigned)time(NULL));

while(flag2 == 0)

{

BlockList1 = (int*)malloc(M*sizeof(int));

BlockList2 = (int*)malloc(M*sizeof(int));

BlockList3 = (int*)malloc(M*sizeof(int));

BlockList4 = (int*)malloc(M*sizeof(int));

BlockList5 = (int*)malloc(M*sizeof(int));

BlockList6 = (int*)malloc(M*sizeof(int));

FR = (int*)malloc(M*sizeof(int));

Flag = (int*)malloc(M*sizeof(int));

Flag1 = (int*)malloc(M*sizeof(int));

Flag2 = (int*)malloc(M*sizeof(int));

printf("请输入要测试的算法个数(总的有6个算法):");

scanf("%d",&ta);

printf("请选择要测试的置换算法:\n");

printf("************************************************************\n");

printf("         1为最佳置换算法,2为随机置换算法\n");

printf("    3为先进先出置换算法,4为最近最少使用置换算法\n");

printf("       5为Clock置换算法,6为改进Clock置换算法\n");

printf("************************************************************\n");

for(i=0;i<ta;i++)

{

scanf("%d",&ff);

if(ff>6)

{

printf("题号为1到6的数,请重新输入\n");

i--;

}

test[ff-1] = 1;

}

while(flag1 == 0)

{

for(i = 0;i < m;i++)

PageList[i] = rand()%e + p;

printf("页面列表:\n");

PrintBlock(PageList,m);

if(test[0] == 1)

{

printf("\n最佳置换算法:\n");

OptimatAlgorithm(BlockList1,M,PageList,m,fl);

}

if(test[1] == 1)

{

printf("\n随机置换算法:\n");

RandomAlgorithm(BlockList2,M,PageList,m,fl);

}

if(test[2] == 1)

{

printf("\n先进先出置换算法:\n");

FIFOAlgorithm(BlockList3,M,PageList,m,fl);

}

if(test[3] == 1)

{

printf("\n最近最久未使用置换算法:\n");

LRUAlgorithm(BlockList4,M,PageList,m,fl,FR);

}

if(test[4] == 1)

{

printf("\nClock置换算法:\n");

ClockAlgorithm(BlockList5,M,PageList,m,fl,Flag);

}

if(test[5] == 1)

{

printf("\n改进Clock置换算法:\n");

ClockImproveAlgorithm(BlockList6,M,PageList,m,fl,Flag1,Flag2);

}

fl = 1;

r = rand()/(RAND_MAX+1);

if(r<t)

p = rand()%N;

else

p = (p+1)%N;

tn = tn - m;

if(tn - m <= 0)

break;

printf("是否想继续加大页面访问序列串长度:Y/N:");

getchar();

scanf("%c",&ch);

if(ch == 'N' || ch == 'n')

flag1 = 1;

}

flag1 = 0;

fl = 0;

for(i = 0;i<6;i++)

test[i] = 0;

free(BlockList1);

free(BlockList2);

free(BlockList3);

free(BlockList4);

free(BlockList5);

free(BlockList6);

free(PageList);

free(FR);

free(Flag);

free(Flag1);

free(Flag2);

printf("是否想继续测试:Y/N:");

getchar();

scanf("%c",&ch);

if(ch == 'N' || ch == 'n')

flag2 = 1;

}

system("pause");

}