操作系统实习写的最后一个程序------页面置换(FIFO、LRU)

#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");

  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();
 
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值