6/recent/ticker-posts

Optimal Page Replacement 2

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.  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 total number of page faults.

Note: Text in Bold corresponds to the input 
Sample Input and Output :

Enter number of pages: 
6
Enter reference string: 
1
2
2
3
4
5

Enter number of frames: 
3

Total Page Fault is 5


Answer:

#include<stdio.h>
int main()
{
    int pages,m,n,frames,pagef=0,flag,temp,position,m_interval,p_frame=-1,interval[25],found;
    printf("Enter number of pages: \n");
    scanf("%d",&pages);
    int page[pages];
    printf("Enter reference string: \n");
    for(m=0;m<pages;m++){
        scanf("%d",&page[m]);
    }
    printf("Enter number of frames:\n");
    scanf("%d",&frames);
    int frame[frames];
    for(m=0;m<frames;m++){
        frame[m]=-1;
    }
    for(m=0;m<pages;m++)
    {
        flag=0;
        for(n=0;n<frames;n++){
            if(frame[n]==page[m]){
                flag=1;
                break;
            }
        }
        if(flag==0){
            if(p_frame==frames-1){
                for(n=0;n<frames;n++){
                    for(temp=m+1;temp<pages;temp++){
                        interval[n]=0;
                        if(frame[n]==page[temp]){
                            interval[n]=temp-m;
                            break;
                        }
                    }
                }
                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=1;n<frames;n++){
                    if(m_interval<interval[n]){
                        m_interval=interval[n];
                        position=n;
                    }
                }
            }
            frame[position]=page[m];
            pagef++;
        }
    }
    printf("Total Page Fault is %d\n",pagef);
}



Post a Comment

0 Comments