Thursday, April 17, 2014

Here is a simulation of Optimal Page replacement algorithm in operating system . . .Suggestions to improve the simulation are welcome :-)

Optimal.java

import java.util.Scanner;
public class Optimal
{
public static void main(String[] args)
{
System.out.println("Enter the number of Frames");
Scanner sc = new Scanner(System.in);
int F = sc.nextInt();
Page page[] = new Page[F];
for(int i=0;i<F;i++)
{
page[i] = new Page();
}
int pages[] = new int[100];
System.out.println("Enter the String References : (0 for Exit)");
int size =0;
while(true)
{
int x = sc.nextInt();
if(x==0) 
break;
pages[size++] = x;
}
// Now we check for page Fault
for(int j=0;j<size;j++)
{
boolean pageFaultOccured=true;
for(int k=0;k<F;k++)
{
if(page[k].pno == pages[j])
{
// No Page Fault
pageFaultOccured=false;
break;
}
}
if(pageFaultOccured == false)
{
System.out.println("NO PAGE FAULT :-)");
}
else
{
System.out.println("PAGE FAULT :-(");
// Check for Empty Frames and insert if any
boolean pageInserted=false;
for(int k=0;k<F;k++)
{
pageInserted=false;
if(page[k].pno == 0)
{
page[k].pno=pages[j];
System.out.println("Page Entered at Frame : "+k);
pageInserted=true;
break;
}
}
if(pageInserted==false)
{
int lf=0;
for(int k=0;k<F;k++)
{
if(page[lf].nextReferred(pages,j,size) < page[k].nextReferred(pages,j,size))
lf = k;
}
page[lf].pno = pages[j];
System.out.println("Page Entered at Frame : "+lf);
}
}
}
}
}
class Page
{
int pno;
Page()
{
this.pno = 0;
}
int nextReferred(int arr[], int curr, int size)
{
int next=0;
for(int i=curr; i<size; i++)
{
if(this.pno == arr[i])
{
next = i;
break;
}
}
if(next==0)
next=size+1;
return next;
}
}

No comments:

Post a Comment