Friday 26 October 2012

page repalcement


/* Page Replacement */

#include<stdio.h>
#include<conio.h>
#define frame_size 3
int search(int frame[],int what)
{
    int i;
    for(i=0;i<frame_size;i++)
    {
    if(what==frame[i])
        return i;
    }
    return -1;

}

int compare(int count[])
{
    int i,max,index;
    max=count[0];
    index=0;
    for(i=1;i<frame_size;i++)
    {
        if(count[i]>max)
        {
            max=count[i];
            index=i;
        }
    }
    return index;
}
int fifo(int page[],int page_size)
{
    int i,j,frame[10],flag,pf,num;
    for(i=0;i<frame_size;i++)
    {
        frame[i]=-1;

    }
    num=0;
    j=0;
    pf=0;
    flag=0;

    while(num<page_size)
    {
        if(search(frame,page[num])!=-1)
            flag=0;
        else
        {
            frame[j]=page[num];
            pf++;
            j=(j+1)%frame_size;
            flag=1;
        }

        if(flag)
        {
            printf("\nPage fault occured");
         }

        for(i=0;i<frame_size;i++)
        {
            if(frame[i]==-1)
                printf("\nFrame [%d] : ",i);
            else
                printf("\nFrame [%d] : %d",i,frame[i]);
        }

            num++;
            printf("\n\n");
         }

    printf("Total no. of pages : %d",pf);


return 0;
}


int lru(int page[],int page_size)
{
    int i,j,frame[frame_size],count[frame_size],flag,pf,num,index;
    for(i=0;i<frame_size;i++)
    {
        frame[i]=-1;
        count[i]=0;

    }
    num=0;
    j=0;
    pf=0;
    flag=0;

    while(num<page_size)
    {
        if(index=search(frame,page[num])!=-1)
        {
            count[index]=0;
            flag=0;
        }
        else
        {
            index=compare(count);
            frame[index]=page[num];
            count[index]=0;
            pf++;
            flag=1;
        }


for(i=0;i<frame_size;i++)

{
    if(i!=index)
            count[i]++;
}

        if(flag)
        {
            printf("\nPage fault occured");
         }

        for(i=0;i<frame_size;i++)
        {
            if(frame[i]==-1)
                printf("\nFrame [%d] : ",i);
            else
                printf("\nFrame [%d] : %d",i,frame[i]);
        }

            num++;
            printf("\n\n");
         }

    printf("Total no. of pages : %d",pf);


return 0;
}



int opt(int page[],int page_size)
{
    int i,j,frame[frame_size],count[frame_size],flag,pf,num,index;
    for(i=0;i<frame_size;i++)
    {
        frame[i]=-1;

    }
    num=0;
    j=0;
    pf=0;
    flag=0;

    while(num<page_size)
    {
        if(search(frame,page[num])!=-1)
        {
            flag=0;
        }
        else
        {


            for(i=0;i<frame_size;i++)
            {
                count[i]=0;
            }
            for(i=0;i<frame_size;i++)
            {
            for(j=num;j<page_size;j++)
            {
                if(frame[i]==page[j])
                {
                    break;
                }
                else
                    count[i]++;
            }
            }



            index=compare(count);
            frame[index]=page[num];
            count[index]=0;
            pf++;
            flag=1;
        }



        if(flag)
        {
            printf("\nPage fault occured");
         }

        for(i=0;i<frame_size;i++)
        {
            if(frame[i]==-1)
                printf("\nFrame [%d] : ",i);
            else
                printf("\nFrame [%d] : %d",i,frame[i]);
        }

            num++;
            printf("\n\n");
         }

    printf("Total no. of pages : %d",pf);


return 0;
}





int main()
{
    int ch,i;
    int page[30],size;
    printf("\nEnter no. of pages : ");
    scanf("%d",&size);
    printf("\nEnter %d pages : \n",size);
    for(i=0;i<size;i++)
    {
    scanf("%d",&page[i]);
    }
    do
    {
        printf("\n\n *** Menu ***");
        printf("\n1) FIFO");
        printf("\n2) LRU");
        printf("\n3) OPT");
        printf("\nEnter your choice : ");
        scanf("%d",&ch);
        switch(ch)
        {
        case 1:
            fifo(page,size);
            break;
           case 2:
            lru(page,size);
            break;
        case 3:
            opt(page,size);
            break;
         default:
            printf("Invalid choice");
        }
    }while(1);
    getch();
}



No comments:

Post a Comment