#include<stdio.h>
int main()
{
int f,r;
int flag1,flag2,flag3,i,j,k,pos,max,fault=0;
printf("Enter frame size : ");
scanf("%d",&f);
printf("Enter ref_str length : ");
scanf("%d",&r);
int fr[f],ref_str[r],temp[f];
printf("Enter page reference string : ");
for(i=0;i<r;i++)
scanf("%d",&ref_str[i]);
printf("\n\n");
for(i=0;i<f;i++)
fr[i]=temp[i]=-1;
for(i=0;i<r;i++)
{
flag1=flag2=0;
for(j=0;j<f;j++)
{
if(fr[j]==ref_str[i])
{
flag1=flag2=1;
printf("page %d hit\n",ref_str[i]);
break;
}
}
if(flag1==0)
{
for(j=0;j<f;j++)
{
if(fr[j]==-1)
{
fault++;
fr[j]=ref_str[i];
flag2=1;
printf("page %d fault\n",ref_str[i]);
break;
}
}
}
if(flag2==0)
{
flag3=0;
for(j=0;j<f;j++)
{
temp[j]=-1;
for(k=i+1;k<r;k++)
{
if(fr[j]==ref_str[k])
{
temp[j]=k;
break;
}
}
}
for(j=0;j<f;j++)
{
if(temp[j]==-1)
{
pos=j;
flag3=1;
break;
}
}
if(flag3==0)
{
max=temp[0];
pos=0;
for(j=1;j<f;j++)
{
if(temp[j]>max)
{
max=temp[j];
pos=j;
}
}
}
fr[pos]=ref_str[i];
printf("page %d fault\n",ref_str[i]);
fault++;
}
printf("Current frame status : ");
for(j=0;j<f;j++)
printf("%d ",fr[j]);
puts("\n\n");
}
printf("\n\nTotal Page fault = %d", fault);
return 0;
}
Comments
Post a Comment