#include
void main()
{
int m,i=0,j=0,j0,min,n=0,s,page,k=0,A[100],B[100],C[100],count=0;
printf("请输入页框(物理块) 数:");
scanf("%d",&m);
printf("请输入页面顺序(以-999结束):\n");
scanf("%d",&page);
while(page!=-999)
{
A[i]=page;
i++;n++;
scanf("%d",&page);
}
printf("\n---------------最近最久未被使用(LRU)页面置换算法--------------------------------\n"); printf("\t页面顺序\t 内存块\t \t是否缺页(Y/N)\n");
i=0;
while(i
{
printf("\t%d\t\t",A[i]); /* 一若内存块B[]未满, 直接将页面A[]装入,C[]为所对应B[]的出现位*/ if(i
{
B[j]=A[i];i++;
C[j]=i;
j++;
for(j0=0;j0
printf("%3d",B[j0]);
printf("\t\tY\n");
count++;
}
/* 二. 若内存块B 已满, 分两种情况*/
else
{
for(j=0;j
{
if(A[i]!=B[j])k++;
else
break;
}
//1.原内存块B 无此页面, 找C 值最小(即最近最久未使用), 换出页面A//
if(k==m)
{
min=C[0];
s=0;
for(j0=0;j0
{
if(C[j0]
{
min=C[j0];
s=j0;
}
}
B[s]=A[i];i++;
C[s]=i;
j++;
for(j0=0;j0
printf("%3d",B[j0]);
printf("\t\tY\n");
count++;
}
//2.原内存块B 有此页面, 改变B 所对应的C 所出现的位置, 再读下一页面//
else
{
i++;C[k]=i;
printf("\n");
}
k=0;
}
}
printf("\n---------- 缺页中断数为%d 总页数为%d 缺页率为%.2f --------------------\n\n",count,i,(float)count/i); }
#include
void main()
{
int m,i=0,j=0,j0,min,n=0,s,page,k=0,A[100],B[100],C[100],count=0;
printf("请输入页框(物理块) 数:");
scanf("%d",&m);
printf("请输入页面顺序(以-999结束):\n");
scanf("%d",&page);
while(page!=-999)
{
A[i]=page;
i++;n++;
scanf("%d",&page);
}
printf("\n---------------最近最久未被使用(LRU)页面置换算法--------------------------------\n"); printf("\t页面顺序\t 内存块\t \t是否缺页(Y/N)\n");
i=0;
while(i
{
printf("\t%d\t\t",A[i]); /* 一若内存块B[]未满, 直接将页面A[]装入,C[]为所对应B[]的出现位*/ if(i
{
B[j]=A[i];i++;
C[j]=i;
j++;
for(j0=0;j0
printf("%3d",B[j0]);
printf("\t\tY\n");
count++;
}
/* 二. 若内存块B 已满, 分两种情况*/
else
{
for(j=0;j
{
if(A[i]!=B[j])k++;
else
break;
}
//1.原内存块B 无此页面, 找C 值最小(即最近最久未使用), 换出页面A//
if(k==m)
{
min=C[0];
s=0;
for(j0=0;j0
{
if(C[j0]
{
min=C[j0];
s=j0;
}
}
B[s]=A[i];i++;
C[s]=i;
j++;
for(j0=0;j0
printf("%3d",B[j0]);
printf("\t\tY\n");
count++;
}
//2.原内存块B 有此页面, 改变B 所对应的C 所出现的位置, 再读下一页面//
else
{
i++;C[k]=i;
printf("\n");
}
k=0;
}
}
printf("\n---------- 缺页中断数为%d 总页数为%d 缺页率为%.2f --------------------\n\n",count,i,(float)count/i); }