Facebook Badge

Thursday, October 21, 2010

Page Replacement Policy: Least Recently Used (LRU)

import java.util.*;

class LRUExp
{

public static int min(int[] x)
{
int min=x[0],i,pos=0;
for(i=1;i<x.length;i++)
if(min>x[i])
{
min=x[i];
pos=i;
}

return pos;
}
public static boolean contains(int[]a,int x)
{
for(int i=0;i<a.length;i++)
if(a[i]==x)
return true;
return false;
}

public static void main(String args[])
{
Scanner src=new Scanner(System.in);

int count[]=new int[4];
int a[]=new int[16];
int b[]=new int[4];
int m=0,i;
System.out.print("Enter 16 elements:");
for(i=0;i<16;i++)
a[i]=src.nextInt();
int f=1; //counter used like timing unit.
int g=0;

for(i=0;i<4;i++)
{
b[i]=a[i];
count[i]=f++;
}

for(int j=0;j<16;j++)
{
g=0;
for(i=0;i<4;i++)
if(b[i]==a[j]) //Page already presnt in RAM
{
System.out.print("\nNo page fault\n");
count[i]=f++;
g=0;
break;
}
else
g=1;
if(g==1) // Page fault
{
System.out.print("\nPage fault\n");
m=min(count);
System.out.print("\nPage "+b[m]+" replaced by "+a[j]+"\n");
//m is INDEX of element which is least recently used
b[m]=a[j];
count[m]=f++;
}
}
}
}

Page Replacement Policy : First In First Out (FIFO)

/**
* @(#)PageRep.java
*
*
* @author
* @version 1.00 2010/10/3
*/

import java.util.*;

class Queue
{
int a[];
int front,rear;

public Queue(int n)
{
front=rear=-1;
a=new int [n];
for(int i=0;i<a.length;i++)
a[i]=-1;
}

public void insert(int x)
{
if(rear==a.length-1)
System.out.print("Queue overflow");
else
{
rear++;
a[rear]=x;
if(front==-1)
front=0;
}
}

public int delete()
{
if(front==-1)
{
//System.out.print("Queue underflow");
}

else
{
//System.out.print("Element deleted is "+a[front]);
}
return(a[front++]);
}

public void display()
{
int i;
if(front==-1)
System.out.println("\n********Queue empty**********");
else
for(i=front;i<=rear;i++)
System.out.print(a[i]+" ");
}

public void destroy()
{
System.out.println("\n***********Queue is destroyed***********");
front=rear-1;
}
public boolean isFull()
{
if(rear==a.length-1)
return true;
else
return false;
}
public boolean contains(int ele)
{
for(int i=0;i<a.length;i++)
if(a[i]==ele)
return true;

return false;
}
public boolean isEmpty()
{
if(front==-1)
return true;
else
return false;
}

}


class PageRep
{

public static void main(String[] args)
{
int ram[]=new int[4];
int n=0;
int age[]=new int[4];
int use[]=new int[4];
int p=0,x=0,ch=0;
int count=0;

Scanner src=new Scanner(System.in);
Queue q=new Queue(4);
do
{
System.out.print("Enter page request :");
p=src.nextInt();
if(count<ram.length && !q.contains(p))
ram[count++]=p;

if(!q.isFull()&&!q.contains(p))
{
q.insert(p);

}
if(q.isFull() && !q.contains(p))
{
System.out.print("\n\nRAM is full.. Replacement Algorithm needed..\n\n");
if(!q.isEmpty()) x=q.delete();
System.out.print("\nPage removed is :"+x);
for(int i=0;i<ram.length;i++)
if(ram[i]==x)
ram[i]=p;
}
System.out.print("\nRam contains following pages..\n");
for(int i=0;i<count;i++)
System.out.print(ram[i]+" ");
System.out.print("\nDo u want to continue: 1/0: ");
ch=src.nextInt();
}while(ch!=0);

}


}

Java Implementation of Non Restoring Division

import java.util.*;

class ResDiv
{

static int a[]={0,0,0,0,0},q[]=new int[4],b[]=new int[5],b2c[]=new int[5];

public static void comp()
{
int i=4;
do
{
b2c[i]=b[i];
i--;
}while(b[i+1]!=1);
while(i>=0)
{
b2c[i]=(b[i]+1)%2;
i--;
}
System.out.print("\n\tB's complement:");
for(i=0;i< 5;i++)
System.out.print(b2c[i]);
System.out.print("\n");
}


public static void nonresdiv()
{
shiftleft();
if(a[0]==0)
a_minus_b();
else
a_plus_b();
q[3]=(a[0]+1)%2;
}

public static void shiftleft()
{
int i;
for(i=0;i< 4;i++)
a[i]=a[i+1];
a[4]=q[0];
for(i=0;i< 3;i++)
q[i]=q[i+1];
}

public static void a_minus_b()
{
int i,carry=0,sum=0;
for(i=4;i>=0;i--)
{
sum=(a[i]+b2c[i]+carry);
a[i]=sum%2;
carry=sum/2;
}
}

public static void a_plus_b()
{
int i,carry=0,sum=0;
for(i=4;i>=0;i--)
{
sum=(a[i]+b[i]+carry);
a[i]=sum%2;
carry=sum/2;
}
}


public static void main(String args[])
{
Scanner src=new Scanner(System.in);
int i,j,k;
System.out.print("Enter dividend in binary form\t: ");
for(i=0;i< 4;i++)
q[i]=src.nextInt();;
System.out.print("Enter divisor in binary form\t: ");
for(i=0;i< 5;i++)
b[i]=src.nextInt();
comp();
System.out.print("\n\t[A]\t[M]\n");
for(i=0;i< 4;i++)
{
nonresdiv();
System.out.print("\t");
for(j=0;j< 5;j++)
System.out.print(a[j]);
System.out.print("\t");
for(k=0;k< 4;k++)
System.out.print(q[k]);
System.out.print("\n");
}
if(a[0]==1)
a_plus_b();
System.out.print("\t");
for(j=0;j< 5;j++)
System.out.print(a[j]);
System.out.print("\t");
for(k=0;k< 4;k++)
System.out.print(q[k]);
System.out.print("\n");
System.out.print("\n\tThe Quotient Is\t: ");
for(k=0;k< 4;k++)
System.out.print(q[k]);
System.out.print("\n\tThe Remainder Is\t: ");
for(j=0;j< 5;j++)
System.out.print(a[j]);
}
}