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");
}
转载于:https://blog.51cto.com/592669550/1161833