program to implement different page replacement algorithms

0

program to implement page replacement algorithm. there are different types of page replacement algorithms for an operating system. I need LRU, Optimal and FIFO now, others are appreciated too.

Answered question
1

#include<stdio.h>
#include <stdlib.h>
 int n,nf;
int in[100];
int p[50];
int hit=0;
int i,j,k;
int pg_fault_cnt=0;
 //Reference String input function
void getData()
{
    printf("Enter length of page reference sequence:\n");
    scanf("%d",&n);
    printf("Enter the page reference sequence:\n");
    for(i=0; i<n; i++)
        scanf("%d",&in[i]);
    printf("Enter no of frames:\n");
    scanf("%d",&nf);
}
 void initialize()
{
    pg_fault_cnt=0;
    for(i=0; i<nf; i++)
        p[i]=9999;
}
 int isHit(int data)
{
    hit=0;
    for(j=0; j<nf; j++)
    {
        if(p[j]==data)
        {
            hit=1;
            break;
        }
     }
    return hit;
}
/*
int getHitIndex(int data)
{
    int hit_ind=0;
    for(k=0; k<nf; k++)
    {
        if(p[k]==data)
        {
            hit_ind=k;
            break;
        }
    }
    return hit_ind;
}*/
 void display_Pages()
{
    for (k=0; k<nf; k++)
    {
        if(p[k]!=9999)
            printf(" %d",p[k]);
    }
}
//Display to  number of page fault value
void display_Page_Fault_Cnt()
{
    printf("Total no of page faults:%d\n",pg_fault_cnt);
}
 //page fault for first in first out algorithm
void fifo()
{
    initialize();
    for(i=0; i<n; i++)
    {
        printf("\nFor %d :",in[i]);
         if(isHit(in[i])==0)
        {
             for(k=0; k<nf-1; k++)
                p[k]=p[k+1];
             p[k]=in[i];
            pg_fault_cnt++;
            display_Pages();
        }
        else
            printf("No page fault");
    }
    display_Page_Fault_Cnt();
}
 //page fault for optimal page replacement algorithm
void optimal()
{
    initialize();
    int near[50];
    for(i=0; i<n; i++)
    {
         printf("\nFor %d :",in[i]);
         if(isHit(in[i])==0)
        {
             for(j=0; j<nf; j++)
            {
                int pg=p[j];
                int found=0;
                for(k=i; k<n; k++)
                {
                    if(pg==in[k])
                    {
                        near[j]=k;
                        found=1;
                        break;
                    }
                    else
                        found=0;
                }
                if(!found)
                    near[j]=9999;
            }
            int max=-9999;
            int replace_index = 0;
            for(j=0; j<nf; j++)
            {
                if(near[j]>max)
                {
                    max=near[j];
                    replace_index=j;
                }
            }
            p[replace_index]=in[i];
            pg_fault_cnt++;
             display_Pages();
        }
        else
            printf("No page fault\n");
    }
    display_Page_Fault_Cnt();
}
 //page fault for least recent used algorithm
void lru()
{
    initialize();
     int least[50];
    for(i=0; i<n; i++)
    {
         printf("\nFor %d :",in[i]);
         if(isHit(in[i])==0)
        {
             for(j=0; j<nf; j++)
            {
                int pg=p[j];
                int found=0;
                for(k=i-1; k>=0; k--)
                {
                    if(pg==in[k])
                    {
                        least[j]=k;
                        found=1;
                        break;
                    }
                    else
                        found=0;
                }
                if(!found)
                    least[j]=-9999;
            }
            int min=9999;
            int replace_index=0;
            for(j=0; j<nf; j++)
            {
                if(least[j]<min)
                {
                    min=least[j];
                    replace_index=j;
                }
            }
            p[replace_index]=in[i];
            pg_fault_cnt++;
             display_Pages();
        }
        else
            printf("No page fault!\n");
    }
    display_Page_Fault_Cnt();
}
 int main()
{
    int choice;
    while(1)
    {
        printf("\nPage Replacement Algorithms\n1.Enter data\n2.FIFO\n3.Optimal\n4.LRU\n5.Exit\nEnter your choice:\n");
        scanf("%d",&choice);
        switch(choice)
        {
            case 1:
                getData();
                break;
            case 2:
                fifo();
                break;
            case 3:
                optimal();
                break;
            case 4:
                lru();
                break;
            case 5:
                exit(5);
            default:
                return 0;
        }
    }
}

Answered question
You are viewing 1 out of 1 answers, click here to view all answers.