#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);
}
}
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