-
Notifications
You must be signed in to change notification settings - Fork 4
/
lfu_pr.c
122 lines (102 loc) · 2.04 KB
/
lfu_pr.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include<stdio.h>
struct frame
{
int PN;
int T;
int F;
}F[10];
int P[50],A,f;
void lfu(int);
int isFound(int,int);
void increment(int);
int oldest(int);
int lessfreq(int);
int main()
{
int i,j,k,n;
printf("\nEnter the number of refernce string : ");
scanf("%d",&n);
printf("\nEnter the number of frames : ");
scanf("%d",&f);
printf("\nEnter the refernce string : ");
for(i=0;i<n;i++)
scanf("%d",&P[i]);
lfu(n);
}
void lfu(int n)
{
int i,j,k=0,count=0,pf=0;
printf("\n\nLFU REPLACEMENT\n");
printf("------------------\n");
for(i=0;i<n;i++)
{
if(isFound(P[i],count))
{
F[A].F++;
increment(count);
printf("\n%d -> \n",P[i]);
continue;
}
else
{
if(count<f)
{
F[k].PN=P[i];
F[k].F++;
k++;
count++;
}
else
{
j=lessfreq(count);
F[j].PN=P[i];
F[j].T=0;
F[j].F=1;
}
pf++;
increment(count);
}
printf("\n");
printf("%d -> ",P[i]);
for(int x=0;x<count;x++)
printf("%d ",F[x].PN);
printf("\n");
}
printf("\nPage Faults : %d\n",pf);
}
int isFound(int p,int count)
{
for(int i=0;i<count;i++)
{
if(F[i].PN == p)
{
A=i;
return 1;
}
}
return 0;
}
void increment(int count)
{
for(int i=0;i<count;i++)
F[i].T=F[i].T + 1;
}
int lessfreq(int count)
{
int less=0;
for(int i=0;i<count;i++)
{
if(F[less].F > F[i].F)
less=i;
}
int old=less;
for(int i=0;i<count;i++)
{
if(F[i].F==F[less].F)
{
if(F[old].T < F[i].T)
old=i;
}
}
return old;
}