OneCompiler

lru

97

#include <stdio.h>

int numberOfRef = 0;
int ref[20];
int numberOfFrame = 0;
int frame[20];
int table[20][20];
int pageFault = 0;

int main(void)
{
void accept(void);
void lru(void);
void display(void);

accept();
lru();
display();

return(0);

}

void accept(void)
{
int i = 0;
int r = 0;

printf("How Many References You Have : ");
scanf("%d",&numberOfRef);

for(r = 0; r < numberOfRef;r++)
{
	printf("Enter The Page Reference : ");
	scanf("%d",&ref[r]);
}

printf("How Many Frames : ");
scanf("%d",&numberOfFrame);

for(i = 0; i < numberOfFrame;i++)
{
	frame[i] = -1;
}

}

void lru(void)
{
int search(int,int *);
int getPos(int);

int i = 0;
int pos = 0;
int r = 0;
int found = 0;

for(r = 0; r < numberOfRef ; r++)
{
	found = search(ref[r],frame);

	if(found == -1)
	{
		pageFault++;

		pos = getPos(r);
		frame[pos] = ref[r];
		
		// copying frames into table 

		for(i = 0; i < numberOfFrame;i++)
		{
			table[i][r] = frame[i];
		}
	}
	else
	{
		for(i = 0; i < numberOfFrame;i++)
		{
			table[i][r] = frame[i];
		}			
	}
}

}

int search(int pno,int *frame)
{
int i;

for(i = 0; i < numberOfFrame;i++)
{
	if(frame[i] == pno)
	{
		return(i);
	}
}

return(-1);

}

int getPos(int r)
{
int cnt,tpos,i,k,tframe[20];

for(i = 0; i < numberOfFrame;i++)
{
	if(frame[i] == -1)
	{
		return(i);
	}		

	tframe[i] = frame[i];
}

cnt = 0;

for(k = r-1 ; k >= 0 ; k--)
{
	tpos = search(ref[k],frame);

	if(tpos != -1)
	{
		cnt++;

		tframe[tpos] = -1;

		if(cnt == numberOfFrame)
		{
			return(tpos);
		}
	}
}

}

void display(void)
{
int i,r;

printf("Refereence String : \n");

for(r = 0; r < numberOfRef;r++)
{
	printf("%2d ",ref[r]);
}

printf("\n");

printf("------------------------------------------------------------\n");

for(i =0; i < numberOfFrame;i++)
{
	for(r = 0; r < numberOfRef;r++)
	{
		printf("%2d ",table[i][r]);
	}

	printf("\n");
}

printf("\n\n number of Page Fault : %d\n",pageFault);

}