Optimal is the simplest technique for replacing pages in a frame. It decides when a page fault occurs then which frames are to be replaced. Create a program to counts the number of page fault occurs when an input reference string is given. Initially, all the frames contain default value as -1. The input contains integer values for a number of pages in a queue, sequence of reference strings and frame size. The output should display the reference string given, pages in frames and the total number of page faults.
Note: Text in Bold corresponds to the input
To display pages inside a frame use additional spacing ("%10d",frame) between pages.
Sample Input and Output
Enter number of pages:
9
Enter reference string:
7
0
1
2
0
3
0
4
2
Enter number of frames:
3
Page_Frames
7 -1 -1
7 0 -1
7 0 1
2 0 1
2 0 1
2 0 3
2 0 3
2 4 3
2 4 3
Total Page Fault is 6
Answer:
#include<stdio.h>
int main()
{
int pagef=0,pages,frames,i,n,m,m_interval,interval[100],found,position,p_frame=-1,flag,temp;
printf("Enter number of pages:\n");
scanf("%d",&pages);
int ref[pages];
printf("Enter reference string:\n");
for(i=0;i<pages;i++)
{
scanf("%d",&ref[i]);
}
printf("Enter number of frames:\n");
scanf("%d",&frames);
int frame[frames];
printf("Page_Frames\n");
for(i=0;i<frames;i++){
frame[i]=-1;
}
for(m=0;m<pages;m++)
{
flag=0;
for(n=0;n<frames;n++){
if(ref[m]==frame[n]){
flag=1;
break;
}
}
if(flag==0)
{
if(p_frame==frames-1){
for(n=0;n<frames;n++){
interval[n]=0;
for(temp=m+1;temp<pages;temp++){
if(frame[n]==ref[temp]){
interval[n]=interval[n]+1;
}
}
}
found=0;
for(n=0;n<frames;n++)
{
if(interval[n]==0)
{
position=n;
found=1;
break;
}
}
}
else
{
position=++p_frame;
found=1;
}
if(found==0){
m_interval=interval[0];
position=0;
for(n=0;n<frames;n++){
if(m_interval>interval[n]){
m_interval=interval[n];
position=n;
}
}
}
frame[position]=ref[m];
pagef++;
}
for(n=0;n<frames;n++)
{
printf("%10d",frame[n]);
}
printf("\n");
}
printf("Total Page Fault is %d",pagef);
}
0 Comments