-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpagereplacement.c
134 lines (127 loc) · 2.73 KB
/
pagereplacement.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
123
124
125
126
127
128
129
130
131
132
133
134
#include<stdio.h>
#include<stdlib.h>
int n,f,i,j,k,p,fault=0,flag;
void fifo(int[],int,int[],int);
void lru(int[],int,int[],int);
void lfu(int[],int,int[],int);
int main()
{
printf("Enter the number of pages:");
scanf("%d",&n);
printf("Enter the number of frames:");
scanf("%d",&f);
int pages[n],realframes[f];
printf("Enter the page Sequence\n");
for(i=0;i<n;i++)
{
scanf("%d",&pages[i]);
}
for(j=0;j<f;j++)
{
realframes[j]=-1;
}
lru(pages,n,realframes,f);
}
void printframe(int frames[],int f)
{
int i;
for(i=0;i<f;i++)
{
printf("%d",frames[i]);
}
printf("\n");
}
void lru(int pages[],int n,int realframes[],int f)
{
int min;
int frames[f],recent[f];
for(j=0;j<f;j++)
{
frames[j]=realframes[j]; //coping real frames and recent to zero
recent[j]=0;
}
fault=0;
k=1;
for(i=0;i<n;i++) // page loop
{
p=pages[i];
flag=1;
for(j=0;j<f;j++) // frame loop
{
if(p==realframes[j]) // hit/fault check
{
//hit occursss
flag=0;
recent[j]=k;
k++;
break;
}
}
if(flag==1)
{ //fault occurs
fault++;
min=0;
for(j=0;j<f;j++) // finding minimum
{
if(recent[j]<recent[min])
{
min=j;
}
}
frames[min]=p;
recent[min]=k;
k++;
printframe(frames,f);
}
else
{
printframe(frames,f);
}
}
printf("Page Fault =%d",fault);
}
void lfu(int pages[],int n,int realframes[],int f)
{
int min;
int frames[f],freq[f];
for(j=0;j<f;j++)
{
frames[j]=realframes[j]; // intialing freq with zero
freq[j]=0; //frames=realframes
}
fault=0;
for(i=0;i<n;i++) //page loop
{
p=pages[i];
flag=1;
for(j=0;j<f;j++) //frame loop
{
if(p==frames[j]) //hit/fault check;
{
flag=0;
freq[j]++;
break;
}
}
if(flag==1)
{
fault++;
min=0;
for(j=0;j<f;j++)
{
if(freq[j]<freq[min])
{
min=j;
}
}
frames[min]=p;
freq[min]=1;
printframe(frames,f);
}
else
{
printframe(frames,f);
}
}
printf("Page Fault=%d",fault);
}