Skip to content

Instantly share code, notes, and snippets.

@hasinur1997
Created August 1, 2018 17:08
Show Gist options
  • Save hasinur1997/7f5785605c938ba83d6e70f2d318676a to your computer and use it in GitHub Desktop.
Save hasinur1997/7f5785605c938ba83d6e70f2d318676a to your computer and use it in GitHub Desktop.

LRU (Least Recent Used) page replacement algorithm

#include<stdio.h>

int findLRU(int temp[], int n){
	int i, pos = 0, minimum = temp[0];
	
	for(i = 1; i<n; i++){
		if(temp[i] < minimum){
			minimum = temp[i];
			pos = i;
		}
	}
	
	return pos;
}

int main(){
	int frames[100], 
	page_table[3], 
	temp[10], 
	page_size = 3, frame_size = 20,
	i, j, k, 
	flag1, flag2,
	pos = 0, counter = 0,
	foults = 0;
	
	
	printf("Enter page size:\n");
	scanf("%d", &page_size);
	
	printf("Enter frame size:\n");
	scanf("%d", &frame_size);
	
	printf("Enter frame values:\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 Frame
		for(j=0; j<page_size; j++){
			if(page_table[j] == frames[i]){
				counter++;
				temp[j] = counter;
				flag1 = flag2 = 1; 
				break;	
			} 
		}	
		
		
		
		// Insert Frame 
		if(flag1 == 0){
			for(j=0; j<page_size; j++){
				if(page_table[j] == -1){
					page_table[j] = frames[i];
					counter++;
					temp[j] = counter;
					flag2 = 1;
					break;
				}
			}
		}
		
		// Replace the frame
		if(flag2 == 0){
			int minmum = temp[0];
			pos = findLRU(temp, page_size);
			counter++;
			foults++;
			page_table[pos] = frames[i];
			temp[pos] = counter;
		}
		
		printf("\n");
		for(j=0; j<page_size; j++){
			printf("%d\t", page_table[j]);
		}
	}

	printf("Page faults = %d", foults);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment