#include // ── PAGING ──────────────────────────────────────────────────────────────── void paging() { int page_size, num_pages; printf("\n--- PAGING ---\n"); printf("Enter page size: "); scanf("%d", &page_size); printf("Enter number of pages: "); scanf("%d", &num_pages); int page_table[num_pages]; printf("Enter frame number for each page:\n"); for (int i = 0; i < num_pages; i++) { printf(" Page %d -> Frame: ", i); scanf("%d", &page_table[i]); } int logical; printf("Enter logical address: "); scanf("%d", &logical); int page = logical / page_size; // which page int offset = logical % page_size; // offset within page if (page >= num_pages) { printf("Invalid! Page %d does not exist.\n", page); return; } int frame = page_table[page]; int physical = frame * page_size + offset; printf("\nPage Number : %d\n", page); printf("Offset : %d\n", offset); printf("Frame Number: %d\n", frame); printf("Physical Address: %d\n", physical); } // ── SEGMENTATION ────────────────────────────────────────────────────────── void segmentation() { int num_seg; printf("\n--- SEGMENTATION ---\n"); printf("Enter number of segments: "); scanf("%d", &num_seg); int base[num_seg], limit[num_seg]; printf("Enter base and limit for each segment:\n"); for (int i = 0; i < num_seg; i++) { printf(" Segment %d -> Base: ", i); scanf("%d", &base[i]); printf(" Segment %d -> Limit: ", i); scanf("%d", &limit[i]); } int seg, offset; printf("Enter segment number: "); scanf("%d", &seg); printf("Enter offset: "); scanf("%d", &offset); if (seg >= num_seg) { printf("Invalid! Segment %d does not exist.\n", seg); return; } if (offset >= limit[seg]) { printf("Segmentation Fault! Offset %d exceeds limit %d.\n", offset, limit[seg]); return; } int physical = base[seg] + offset; printf("\nSegment Base : %d\n", base[seg]); printf("Segment Limit : %d\n", limit[seg]); printf("Offset : %d\n", offset); printf("Physical Address: %d\n", physical); } // ── MAIN ────────────────────────────────────────────────────────────────── int main() { int ch; while (1) { printf("\n1. Paging"); printf("\n2. Segmentation"); printf("\n3. Exit"); printf("\nEnter choice: "); scanf("%d", &ch); if (ch == 1) paging(); else if (ch == 2) segmentation(); else if (ch == 3) break; else printf("Invalid choice\n"); } return 0; }