Thursday, November 25, 2010

FIFO PAGE REPLACEMENT ALG



/*FIFO*/
#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 the string: ");
scanf("%d",&sl);
printf("enter the string: ");
for(i=0;i<sl;i++)
scanf("%d",&str[i]);
printf("enter the no.of frmae sizes\n");
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 ",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=sl;
 if(chk==1&&pfr[i]<pfr[j])
 printf("\nanomoly occured between frame sizes %d %d\n",fs[i],fs[j]);
 }
}
}
float placement(int fs)
{
 int i,j,p;
 int f[10],t[10];
 int par[10][20];
 int pf=0;
 float pfr;
 for(i=0;i<fs;i++)
 {
  f[i]=-1;
  t[i]=0;
 }
 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)
 p=greater(t,fs);
 f[p]=str[i];
 t[p]=0;
 pf++;
 for(j=0;j<fs&&j<=i;j++)
 t[j]++;
 for(j=0;j<fs;j++)
 par[j][pf-1]=f[j];
 }
for(i=0;i<fs;i++)
{
 for(j=0;j<pf;j++)
 printf("%5d",par[i][j]);
 printf("\n");
 pfr=((float)pf/sl)*100;
 printf("no.of page faults %d\n",pf);
 printf("page faults rate :%0.3f\n",pfr);
return pfr;
}
}

int greater(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