/* 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