Monday, 21 October 2013

pagereplacement

#include<stdio.h>
void lru(int pa[20],int pt[10],int n,int np);
void optimal(int pa[20],int pt[10],int n,int np);
void mfu(int pa[20],int pt[10],int n,int np);
void main()
{
    int i,n,np,pa[20],pt[10],ch;
    printf("\nEnter no. of slots in the page table: ");
    scanf("%d",&n);
    printf("\nEnter no. of pages to be accessed: ");
    scanf("%d",&np);
    printf("\nEnter the sequence in which the pages are to be accessed:\n");
    for(i=0;i<np;i++)
    {
        scanf("%d",&pa[i]);
    }   
    do
    {
        printf("\nMENU:\n1.LRU\n2.Optimal\n3.MFU\n4.Exit\n\tEnter your choice: ");
        scanf("%d",&ch);
        switch(ch)
        {
            case 1: lru(pa,pt,n,np);
                break;
            case 2: optimal(pa,pt,n,np);
                break;
            case 3: mfu(pa,pt,n,np);
                break;
            case 4: break;
            default:printf("\nWrong choice entered");
                break;
        }
    }while(ch!=4);
}
void mfu(int pa[20],int pt[10],int n,int np)
{
    int i,flag2,flag[10],j,k,cnt=0,pf=0,x;
        for(i=0;i<np;i++)
        {       
        for(j=0;j<n;j++)
            flag[j]=0;
                flag2=0;
                for(j=0;j<cnt;j++)
                {
                        if(pt[j]==pa[i])
                                flag2=1;
                }
                if(!flag2)
                {
                        if(cnt<n)
                        {
                                pt[cnt]=pa[i];
                                cnt++;
                        }
            else
            {
                for(j=0;j<n;j++)
                {
                    x=pt[j];
                    for(k=0;k<i;k++)
                    {
                        if(pa[k]==x)
                            flag[j]++;
                    }
                }
                x=0;
                                for(j=1;j<n;j++)
                                {
                                        if(flag[j]>flag[x])
                                                x=j;
                                }
                                pt[x]=pa[i];
            }
            pf++;
        }
        printf("\n\nPage Table %d:\n",i+1);
                for(j=0;j<cnt;j++)
                        printf("%d\n",pt[j]);
                printf("\nPage faults: %d\n",pf);
    }
}
void optimal(int pa[20],int pt[10],int n,int np)
{
    int i,flag2,flag[10],j,k,cnt=0,pf=0,x;
    for(i=0;i<np;i++)
    {
        flag2=0;
        for(j=0;j<cnt;j++)
        {
            if(pt[j]==pa[i])// check if page already exists in frame
                flag2=1;//no page fault   
        }
        if(!flag2)
        {
            if(cnt<n)//initially ,when frame is empty or partially empty
            {   
                pt[cnt]=pa[i];
                cnt++;
            }
            else
            {
                for(j=0;j<n;j++)
                {
                    x=pt[j];
                    for(k=i+1;k<np;k++)
                    {
                        if(pa[k]==x)
                        {
                            flag[j]=k;
                            break;
                        }
                    }
                    if(k==np)
   
                    flag[j]=np;
                }
                x=0;
                for(j=1;j<n;j++)
                {
                    if(flag[j]>flag[x])
                        x=j;
                }
                pt[x]=pa[i];               
            }       
            pf++;// page fault occurs
        }   
        printf("\n\nPage Table %d:\n",i+1);
        for(j=0;j<cnt;j++)
            printf("%d\n",pt[j]);
        printf("\nPage faults: %d\n",pf);
    }
}
void lru(int pa[20],int pt[10],int n,int np)
{
    int i,j,cnt=0,flag[10],x,k,flag2,pf=0;
    for(i=0;i<np;i++)
    {
        flag2=0;
        for(j=0;j<cnt;j++)
        {
            if(pt[j]==pa[i])
                flag2=1;   
        }
        if(!flag2)
        {
            if(cnt<n)
            {   
                pt[cnt]=pa[i];
                cnt++;
            }   
            else
            {
                for(j=0;j<n;j++)
                {
                    x=pt[j];
                    for(k=0;k<i;k++)
                    {
                        if(pa[k]==x)
                            flag[j]=k;
                    }   
                }
                x=0;
                for(j=1;j<n;j++)
                {
                    if(flag[j]<flag[x])
                        x=j;
                }
                pt[x]=pa[i];
            }
            pf++;
        }
        printf("\n\nPage Table %d:\n",i+1);
        for(j=0;j<cnt;j++)
            printf("%d\n",pt[j]);
        printf("\nPage faults: %d\n",pf);
    }   
}

No comments:

Post a Comment