#include <stdio.h> #include <stdlib.h> #define PAGE_SIZE 256 // Size of a page #define FRAME_SIZE 256 // Size of a frame #define NUM_PAGES 16 // Number of pages #define NUM_FRAMES 8 // Number of frames int main() { int page_table[NUM_PAGES]; int memory[NUM_FRAMES * FRAME_SIZE]; // Initialize page table with invalid frame number (-1) for (int i = 0; i < NUM_PAGES; i++) { page_table[i] = -1; } // Load pages into frames for (int i = 0; i < NUM_PAGES; i++) { page_table[i] = i % NUM_FRAMES; // Simple mapping for demonstration printf("Page %d is loaded into Frame %d\n", i, page_table[i]); } // Accessing memory int logical_address; printf("Enter logical address to access (0-%d): ", NUM_PAGES * PAGE_SIZE - 1); scanf("%d", &logical_address); int page_number = logical_address / PAGE_SIZE; int offset = logical_address % PAGE_SIZE; int frame_number = page_table[page_number]; if (frame_number == -1) { printf("Page fault!\n"); } else { int physical_address = frame_number * FRAME_SIZE + offset; printf("Logical address %d maps to physical address %d\n", logical_address, physical_address); } return 0; }