Thursday, November 25, 2010

OPTIMAL PAGE REPLACEMENT ALG


/* Optimal */
#include<stdio.h>
int str[30],sl;
float placement(int);
main()
{
int nfs,fs[10];
int i,j,chk;
float pfr[10];
printf("enter the length of string: ");
scanf("%d",&sl);
printf("enter the string: ");
for(i=0;i<sl;i++)
scanf("%d",&str[i]);
printf("enter the no.of frames: ");
scanf("%d",&nfs);
printf("enter frame sizes: ");
for(i=0;i<nfs;i++)
scanf("%d",&fs[i]);
for(i=0;i<nfs;i++)
 {
  printf("\npage replacement for frame size: %d\n",fs[i]);
  pfr[i]=placement(fs[i]);
 }
 for(i=0;i<nfs;i++)
 for(j=0,chk=0;j<nfs;j++)
  {
    if(fs[i]>fs[j])
    chk=1;
   if(chk==1&&pfr[i]<pfr[j])
    printf("\nBELADY'S ANOMALY occurred between frame sizes %d&%d\n",fs[i],fs[j]);
  }
}

float placement(int fs)
 {
   int i,j,k,p;
  int f[10],t[10];
  int par[10][20];
  int pf=0;
  float pfr;
  for(i=0;i<fs;i++)
  f[i]=-1;
  for(i=0;i<sl;i++)
  {
    p=-1;
   for(j=0;j<fs;j++)
   if(str[i]==f[j])
    break;
   if(j!=fs)
    continue;
   for(j=0;j<fs;j++)
    if(f[j]==-1)
     {
      p=j;
      break;
     }
   if(p==-1)
    {
     for(j=i+1;j<sl;j++)
     {
      for(k=0;k<fs;k++)
      if(t[k]==0&&str[j]==f[k])
       {
         t[k]++;
        break;
       }
      if(k!=fs);
       {
        for(k=0;k<fs;k++)
        if(t[k]!=0)
        t[k]++;
       }
     }
   p=lesser(t,fs);
  }
   f[p]=str[i];
   pf++;
  for(j=0;j<fs;j++)
   par[j][pf-1]=f[j];
  }
for(i=0;i<fs;i++)
{
for(j=0;j<fs;j++)
printf("%5d",par[i][j]);
printf("\n");
}
pfr=((float)pf/sl)*100;
printf("no.of page faults=%d",pf);
printf("\npage fault rate=%0.3f\n",pfr);
return pfr;
}
int lesser(int t[10],int fs)
{
int i,j,c;
for(i=0;i<fs;i++)
{
c=0;
for(j=0;j<fs;j++)
if(t[i]<=t[j])
c++;
if(c==fs)
break;
}
return i;
}

No comments:

Post a Comment

FOLLOWERS