#include<stdio.h>
int main() {
int frames[100],
page_table[10],
temp[10],
frame_size,
page_size,
i, j, k,
pos, max,
flag1, flag2, flag3,
faults = 0;
printf("Enter page size:\n");
scanf("%d", &page_size);
printf("Enter frame size:\n");
scanf("%d", &frame_size);
printf("Enter frame value:\n");
for(i=0; i<frame_size; ++i){
scanf("%d", &frames[i]);
}
for(j=0; j<page_size; ++j){
page_table[j] = -1;
}
for(i=0; i<frame_size; ++i){
flag1 = flag2 = 0;
// Check Existing Page
for(j=1; j<page_size; ++j){
if(page_table[j] == frames[i]){
flag1 = flag2 = 1;
break;
}
}
// Insert Page
if(flag1 == 0){
for(j=0; j<page_size; ++j){
if(page_table[j] == -1){
page_table[j] = frames[i];
faults++;
flag2 = 1;
break;
}
}
}
// Replace the page
if(flag2 == 0){
flag3 =0;
for(j = 0; j < page_size; ++j){
temp[j] = -1;
for(k = i + 1; k < page_size; ++k){
if(page_table[j] == frames[k]){
temp[j] = k;
break;
}
}
}
for(j = 0; j < page_size; ++j){
if(temp[j] == -1){
pos = j;
flag3 = 1;
break;
}
}
if(flag3 ==0){
max = temp[0];
pos = 0;
for(j = 1; j < page_size; ++j){
if(temp[j] > max){
max = temp[j];
pos = j;
}
}
}
page_table[pos] = frames[i];
faults++;
}
printf("\n");
for(j=0; j<page_size; ++j){
printf("%d\t", page_table[j]);
}
}
printf("\n Total page faults: %d", faults);
return 0;
}
Last active
July 31, 2018 08:37
-
-
Save hasinur1997/116b0b13bf7a2a2c4c737549b8f35c3d to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment