Skip to content

Instantly share code, notes, and snippets.

@hasinur1997
Last active July 31, 2018 08:37
Show Gist options
  • Save hasinur1997/116b0b13bf7a2a2c4c737549b8f35c3d to your computer and use it in GitHub Desktop.
Save hasinur1997/116b0b13bf7a2a2c4c737549b8f35c3d to your computer and use it in GitHub Desktop.

Optimal page replacement algorithm

#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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment