OneCompiler

lfu

115

#include <stdio.h>

int numberOfRef = 0;
int ref[20];
int numberOfFrame = 0;
int frame[20];
int table[20][20];
int pageFault = 0;
int count[20] = { 0 };
int main(void)
{
void accept(void);
void lfu(void);
void display(void);

accept();
lfu();
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 lfu(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);

}

void getCount(int r)
{
int i = 0,pos = 0;

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

	if (pos != -1)
	{
		count[pos]++;
	}

}

}

int getMin(int *arr)
{
int i = 0;
int min = arr[0];

for (i = 0; i < numberOfFrame; i++)
{
	if (arr[i] < min)
	{
		min = arr[i];
	}
}

return(min);

}

int getPos(int r)
{
void getCount(int r);
int getMin(int *);

int cnt, tpos, i, k, tframe[20],min,pos;

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

	tframe[i] = frame[i];
}

getCount(r);
min = getMin(count);

for (i = 0; i < numberOfFrame; i++)
{
	if (count[i] != min)
	{
		tframe[i] = -1;
	}
}

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

	if (tpos != -1)
	{
		pos = tpos;
		tframe[tpos] = -1;
	}
}

return(pos);

}

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);

}