mirror of
https://github.com/Manoj-HV30/sp-lab.git
synced 2026-05-16 19:35:27 +00:00
cooked 3
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user