lfu
#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);
}