In: Computer Science
Write a program that implements the FIFO, LRU, and Optimal page replacement algorithms presented in chapter 8 of your text. First generate a random page-reference string (this should be 20 entries long) where page numbers range from 0 to 9. Apply the random page-reference string to each algorithm, and record the number of page faults incurred by each algorithm. Implement the replacement algorithms so that the number of page frames goes from 1 to 7 and you must compute the page fault for each of these frame numbers. Record the number of page faults with each of these different page frames numbers and each of the different algorithms. Assume that demand paging is used. Remember to count the first time a page comes in, as this is a page fault in demand paging. Then do the same procedure, except use the following page-reference string instead of the random one: 0,7,0,1,2,0,8,9,0,3,0,4,5,6,7,0,8,9,1,2 and then lastly do it with the page-reference string: 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 The sample output has the correct solutions for LRU and FIFO but nothing for Optimal. Have separate clearly marked classes, functions, or methods for LRU, FIFO, and Optimal replacement algorithms. Also have comments within your code. Make certain to have your name, date, assignment number, and a brief description of the program at the top of your main method. Your output should be in the following format (repeated seven times, one for each number of page frames, and the set of seven repeated three times, one for each of the three page-reference strings): For x page frames, and using string page reference string nnnnnnnnnnnnnn: FIFO had ### page faults. LRU had ### page faults. Optimal had ### page faults. Where ### is the number of page faults, x is the number of page frames, and nnnnnn is the page-reference string.
LRU CODE:
#include<stdio.h>
#include<conio.h>
#define max 25
void main()
{
int frame[10],used[10],index;
int i,j,k,nf,np=0,page[max],temp;
int flag=0,pf=0;
clrscr();
printf("Enter no. of Frames:");
scanf("%d",&nf);
for(i=0;i<nf;i++)
frame[i]=-1;
printf("Enter pages (press -999 to exit):\n");
for(i=0;i<max;i++)
{
scanf("%d",&temp);
if(temp==-999) break;
page[i]=temp;
np++;
}
for(i=0;i<np;i++)
{
flag=0;
for(j=0;j<nf;j++)
{
if(frame[j]==page[i])
{
printf("\n\t");
flag=1;break;
}
}
if(flag==0)
{
for(j=0;j<nf;j++) used[j]=0;
for(j=0,temp=i-1;j<nf-1;j++,temp--)
{
for(k=0;k<nf;k++)
{
if(frame[k]==page[temp])
used[k]=1;
}
}
for(j=0;j<nf;j++)
if(used[j]==0)
index=j;
frame[index]=page[i];
printf("\nFault: ");
pf++;
}
for(k=0;k<nf;k++)
printf("%d\t",frame[k]);
}
printf("\nNumber of page faults is: %d ",pf);
getch();
}
FIFO CODE
#include<stdio.h>
int main()
{
int i,j,n,a[50],frame[10],no,k,avail,count=0;
printf("\n ENTER THE NUMBER OF PAGES:\n");
scanf("%d",&n);
printf("\n ENTER THE PAGE NUMBER :\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
printf("\n ENTER THE NUMBER OF FRAMES :");
scanf("%d",&no);
for(i=0;i<no;i++)
frame[i]= -1;
j=0;
printf("\tref string\t page frames\n");
for(i=1;i<=n;i++)
{
printf("%d\t\t",a[i]);
avail=0;
for(k=0;k<no;k++)
if(frame[k]==a[i])
avail=1;
if (avail==0)
{
frame[j]=a[i];
j=(j+1)%no;
count++;
for(k=0;k<no;k++)
printf("%d\t",frame[k]);
}
printf("\n");
}
printf("Page Fault Is %d",count);
return 0;
}
Let me know if you have any doubts or if you need anything to change. If you are satisfied with the solution, please leave a +ve feedback : ) Let me know for any help with any other questions. Thank You! ===========================================================================