操作系统页面置换C语言.doc
文本预览下载声明
#includestdio.h
#includestdlib.h
#includewindows.h
void Print(int bc[],int blockCount)
{
int i;
for(i=0;iblockCount;i++)
{
printf(%d ,bc[i]);
}
printf(\n);
}
Travel(int bc[],int blockCount,int x)
{
int is_found=0;
int i;
for(i=0;iblockCount;i++)
{
if(bc[i]==x)
{
is_found=1;
break;
}
}
return is_found;
}
void FIFO(int pc[],int bc[],int pageCount,int blockCount)
{
int i;
printf(0:FIFO置换算法\n);
if(pageCount=blockCount)
{
printf(缺页次数为0\n);
printf(缺页率为0\n);
}
else
{
int noPage=0;
int p=0;
for(i=0;ipageCount;i++)
{
//printf(引用页:%d\n,pc[i]);
if(!Travel(bc,blockCount,pc[i]))
{
if(iblockCount)
{
bc[i]=pc[i];
}
else
{
if(p==blockCount)
{
p=0;
}
bc[p]=pc[i];
p++;
}
noPage++;
//printf(物理块情况:\n);
//Print(bc,blockCount);
}
//printf(\n);
}
printf(FIFO缺页次数为:%d\n,noPage);
printf(FIFO缺页率为:%.2f%%\n,(float)noPage/pageCount*100);
}
}
int FoundMaxNum(int a[],int n)
{
int k,j,i;
k=a[0];
j=0;
for (i=0;in;i++)
{
if(a[i]=k)
{
k=a[i];
j=i;
}
}
return j;
}
void LRU(int pc[],int bc[],int pageCount,int blockCount)
{
printf(1:LRU置换算法\n);
if(pageCount=blockCount)
{
printf(缺页次数为0\n);
printf(缺页率为0\n);
}
else
{
int noPage=0;
int i,j,m,p,k;
int bc1[100];
for(i=0;iblockCount;i++)
{
bc1[i]=0;
}
for(i=0;ipageCount;i++)
{
// printf(引用页:%d\n,pc[i]);
if(!Travel(bc,blockCount,pc[i]))
{
if(iblockCount)
{
bc[i]=pc[i];
for(p=0;p=i;p++)
{
bc1[p]++;
}
}
else
{
for(j=0;jblockCount;j++)
{
bc1[j]++;
}
k=FoundMaxNum(bc1,blockCount);
bc[k]=pc[i];
bc1[k]=1;
}
noPage++;
//printf(物理快情况:\n);
//Print(bc,blockCount);
}
else
if(Travel(bc,blockCount,pc[i]))
{
if(iblockCount)
{
for(j=0;j=i;j++)
{
显示全部