Files
2026-05-14 08:02:24 +05:30

96 lines
3.0 KiB
C

#include <stdio.h>
// ── 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;
}