0% found this document useful (0 votes)
19 views

Lab 13

la

Uploaded by

hammadalamgir778
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views

Lab 13

la

Uploaded by

hammadalamgir778
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

Name: Muhammad Hammad Alamgir

Enrollment: 01-135222-053
Class: BS IT (4B)

Q) implement the memory management alogithm LRU,FiFO,NRU using c/c++ in linux


environment?

FIFO
Code
#include <stdio.h>

#include <stdbool.h>

#define FRAME_SIZE 3

bool pageExists(int page, int frame[], int frameSize) {

for (int i = 0; i < frameSize; i++) {

if (frame[i] == page) {

return true;

return false;

void displayFrame(int frame[], int frameSize) {

printf("[");

for (int i = 0; i < frameSize; i++) {

if (frame[i] == -1) {

printf(" - ");

} else {
printf(" %d ", frame[i]);

printf("]\n");

void fifo(int pages[], int numPages) {

int frame[FRAME_SIZE];

int frameIndex = 0;

int pageFaults = 0;

for (int i = 0; i < FRAME_SIZE; i++) {

frame[i] = -1;

for (int i = 0; i < numPages; i++) {

if (!pageExists(pages[i], frame, FRAME_SIZE)) {

pageFaults++;

frame[frameIndex] = pages[i];

frameIndex = (frameIndex + 1) % FRAME_SIZE;

printf("Page Fault #%d: Page %d -> ", pageFaults, pages[i]);

displayFrame(frame, FRAME_SIZE);

} else {

printf("Page Hit: Page %d\n", pages[i]);

printf("Total Page Faults: %d\n", pageFaults);


}

int main() {

int pages[] = {1, 3, 0, 3, 5, 6, 3};

int numPages = sizeof(pages) / sizeof(pages[0]);

printf("FIFO Page Replacement Algorithm\n");

fifo(pages, numPages);

return 0;

OUTPUT
LRU
CODE

#include <stdio.h>

#include <stdbool.h>

#define FRAME_SIZE 3

int pageExists(int page, int frame[], int frameSize) {

for (int i = 0; i < frameSize; i++) {

if (frame[i] == page) {

return i;

return -1;

void displayFrame(int frame[], int frameSize) {

printf("[");

for (int i = 0; i < frameSize; i++) {

if (frame[i] == -1) {

printf(" - ");
} else {

printf(" %d ", frame[i]);

printf("]\n");

void lru(int pages[], int numPages) {

int frame[FRAME_SIZE];

int lastUsed[FRAME_SIZE];

int pageFaults = 0;

int time = 0;

for (int i = 0; i < FRAME_SIZE; i++) {

frame[i] = -1;

lastUsed[i] = -1;

for (int i = 0; i < numPages; i++) {

int pageIndex = pageExists(pages[i], frame, FRAME_SIZE);

if (pageIndex == -1) {

pageFaults++;

int lruIndex = 0;

for (int j = 1; j < FRAME_SIZE; j++) {

if (lastUsed[j] < lastUsed[lruIndex]) {

lruIndex = j;

}
frame[lruIndex] = pages[i];

lastUsed[lruIndex] = time;

printf("Page Fault #%d: Page %d -> ", pageFaults, pages[i]);

displayFrame(frame, FRAME_SIZE);

} else {

lastUsed[pageIndex] = time;

printf("Page Hit: Page %d\n", pages[i]);

time++;

printf("Total Page Faults: %d\n", pageFaults);

int main() {

int pages[] = {1, 3, 0, 3, 5, 6, 3};

int numPages = sizeof(pages) / sizeof(pages[0]);

printf("LRU Page Replacement Algorithm\n");

lru(pages, numPages);

return 0;
}

OUTPUT

Q3: NRU Page Fault

#include <stdio.h>

#include <stdlib.h>
// Constants for page states

#define NOT_ACCESSED_NOT_MODIFIED 0

#define NOT_ACCESSED_MODIFIED 1

#define ACCESSED_NOT_MODIFIED 2

#define ACCESSED_MODIFIED 3

// Structure to represent a page

typedef struct {

int page_number;

int reference_bit; // To indicate whether the page has been referenced recently

int modified_bit; // To indicate whether the page has been modified

} Page;

// Function to simulate page faults using the NRU algorithm

int nru_page_fault(Page *page_table, int num_pages) {

int i;

int candidate_index = -1;

int class[4] = {0}; // To count the number of pages in each class

// Classify pages based on their reference and modified bits

for (i = 0; i < num_pages; i++) {

int page_class = (page_table[i].reference_bit << 1) | page_table[i].modified_bit;

class[page_class]++;

// Choose a page from the lowest non-empty class


for (i = 0; i < 4; i++) {

if (class[i] > 0) {

candidate_index = i;

break;

// Randomly choose a page from the selected class

while (1) {

int random_index = rand() % num_pages;

int page_class = (page_table[random_index].reference_bit << 1) |


page_table[random_index].modified_bit;

if (page_class == candidate_index)

return random_index; // Page to replace found

int main() {

// Example: Page table with 10 pages

int num_pages = 10;

Page page_table[num_pages];

// Initialize page table

for (int i = 0; i < num_pages; i++) {

page_table[i].page_number = i;

page_table[i].reference_bit = 0;
page_table[i].modified_bit = 0;

// Simulate page faults

int page_to_replace = nru_page_fault(page_table, num_pages);

printf("Page to replace: %d\n", page_to_replace);

return 0;

You might also like