Page Replacement Algorithms

, by Engineer's Vision

//Page Replacement Algorithms =LRU Page Replacement & Optimal Page Replacement


#include<stdio.h>

int rs[50],n,i,j,no_f,frame[10];

void get()
{
    printf("\nEnter the length of string=");
    scanf("%d",&n);

    printf("\nEnter refrence String=");

    for(i=0;i<n;i++)
        scanf("%d",&rs[i]);

    printf("\nEnter no of frame=");
    scanf("%d",&no_f);
}

void lru()
{
    int hit=0,fault=0;
    for(i=0;i<no_f;i++)
        frame[i]=-1;

    printf("\n*****Least Recently Used*******");
    printf("\nRefernce String=");
    for(i=0;i<n;i++)
        printf(" %d",rs[i]);

    for(i=0;i<n;i++)
    {
        for(j=0;j<no_f;j++)
        {
            if(rs[i]==frame[j])
            {
                hit++;
                printf("\nPage Hit");
                break;
            }
        }

        if(j==no_f)
        {
            fault++;
            for(j=0;j<no_f;j++)
            {
                if(frame[j]==-1)
                {
                    frame[j]=rs[i];
                    break;
                }
            }

            if(j==no_f)
            {
                int used[10]={0},least;

                for(int k=0;k<no_f;k++)
                for(j=i-1;j>0;j--)
                {
                    if(rs[j]==frame[k])
                        break;

                    used[k]++;
                }

                int max=0;
                for(j=0;j<no_f;j++)
                    if(max<used[j])
                    {
                        max=used[j];
                        least=j;
                    }

                frame[least]=rs[i];
            }

                printf("\nPage Fault Frame=");
            for(j=0;j<no_f;j++)
                printf(" %d",frame[j]);
        }

    }

    printf("\nHit=%d Fault=%d",hit,fault);
}

void opt()
{
    int hit=0,fault=0;
    for(i=0;i<no_f;i++)
        frame[i]=-1;

    printf("\n*******Optimal Page Replacement*******");
    printf("\nRefernce String=");
    for(i=0;i<n;i++)
        printf(" %d",rs[i]);

    for(i=0;i<n;i++)
    {
        for(j=0;j<no_f;j++)
        {
            if(rs[i]==frame[j])
            {
                hit++;
                break;
            }
        }

        if(j==no_f)
        {
            fault++;
            for(j=0;j<no_f;j++)
            {
                if(frame[j]==-1)
                {
                    frame[j]=rs[i];
                    break;
                }
            }

            if(j==no_f)
            {
                int used[10]={0},least;

                for(int k=0;k<no_f;k++)
                for(j=i+1;j<n;j++)
                {
                    if(rs[j]==frame[k])
                        break;

                    used[k]++;
                }

                int max=0;
                for(j=0;j<no_f;j++)
                    if(max<used[j])
                    {
                        max=used[j];
                        least=j;
                    }

                frame[least]=rs[i];
            }

                printf("\nFrame=");
            for(j=0;j<no_f;j++)
                printf(" %d",frame[j]);
        }

    }

    printf("\nHit=%d Fault=%d",hit,fault);
}


int main()
{

    get();
    lru();
    opt();
    return 0;
}

0 comments: