#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int m=4;
while(m<=8){
int n=30;
int a[n],i,j,q,men[m]={0},table[m][n],k=0,s,b[m]={ 0 };
char state,f[n];
srand(int(time(0)));
printf("内存容量为:%d\n",m);
printf("页面访问序列\n");
s=rand()%30+1;
for(i=0;i<n;i+=4)
{
a[i]=s+1;
a[i+1]=a[i]*rand()/33000+1;
a[i+2]=a[i+1]+1;
a[i+3]=(a[i+2]+1)*rand()/33000+28-a[i+2];
s=rand()%30+1;
}
for(i=0;i<n;i+=4){
printf("%-5d%-5d%-5d%-5d",a[i],a[i+1],a[i+2],a[i+3]);
}
getchar();
printf("\n");
#include<stdlib.h>
#include<time.h>
int main(){
int m=4;
while(m<=8){
int n=30;
int a[n],i,j,q,men[m]={0},table[m][n],k=0,s,b[m]={ 0 };
char state,f[n];
srand(int(time(0)));
printf("内存容量为:%d\n",m);
printf("页面访问序列\n");
s=rand()%30+1;
for(i=0;i<n;i+=4)
{
a[i]=s+1;
a[i+1]=a[i]*rand()/33000+1;
a[i+2]=a[i+1]+1;
a[i+3]=(a[i+2]+1)*rand()/33000+28-a[i+2];
s=rand()%30+1;
}
for(i=0;i<n;i+=4){
printf("%-5d%-5d%-5d%-5d",a[i],a[i+1],a[i+2],a[i+3]);
}
getchar();
printf("\n");
for(i=0;i<n;i++){
q=0;
while((a[i]!=men[q])&&(q!=m))
q++;
if(q==m) state=' ';
else {
state='^';
k++;
}
if(state==' '){
for(j=m-1;j>0;j--)
men[j]=men[j-1];
men[0]=a[i];
}
for(j=0;j<m;j++)
table[j][i]=men[j];
f[i]=state;
}
printf("FIFO输出结果为下表(0代表为空,^代表命中):\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf("%3d",table[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
printf("%3c",f[i]);
printf("\n");
float t=k/30.0;
printf("命中率为:%f\n",t);
getchar();
k=0;
for(i=0;i<n;i++){
q=0;
while((a[i]!=b[q])&&(q!=m))
q++;
if(q==m) state=' ';
else {
state='^';
k++;
}
for(j=q;j>0;j--)
b[j]=b[j-1];
b[0]=a[i];
for(j=0;j<m;j++)
table[j][i]=b[j];
f[i]=state;
}
printf("LRU输出结果为下表(0代表为空,^代表命中):\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf("%3d",table[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
printf("%3c",f[i]);
printf("\n");
t=k/30.0;
printf("命中率为:%f\n",t);
m++;
getchar();
}
for(i=0;i<n;i++){
q=0;
while((a[i]!=b[q])&&(q!=m))
q++;
if(q==m) state=' ';
else {
state='^';
k++;
}
for(j=q;j>0;j--)
b[j]=b[j-1];
b[0]=a[i];
for(j=0;j<m;j++)
table[j][i]=b[j];
f[i]=state;
}
printf("LRU输出结果为下表(0代表为空,^代表命中):\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf("%3d",table[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
printf("%3c",f[i]);
printf("\n");
t=k/30.0;
printf("命中率为:%f\n",t);
m++;
getchar();
}
}