Segmentation
Thu Jun 06 2024 01:04:34 GMT+0000 (Coordinated Universal Time)
Saved by
@login
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SEGMENTS 5
#define MEMORY_SIZE 1024 // Total size of physical memory
typedef struct {
int base;
int limit;
} Segment;
Segment segment_table[MAX_SEGMENTS];
int memory[MEMORY_SIZE];
int main() {
// Initialize segments (base and limit for each segment)
segment_table[0] = (Segment){.base = 0, .limit = 100};
segment_table[1] = (Segment){.base = 100, .limit = 200};
segment_table[2] = (Segment){.base = 300, .limit = 150};
segment_table[3] = (Segment){.base = 450, .limit = 250};
segment_table[4] = (Segment){.base = 700, .limit = 150};
// Display segment table
printf("Segment Table:\n");
for (int i = 0; i < MAX_SEGMENTS; i++) {
printf("Segment %d: Base = %d, Limit = %d\n", i, segment_table[i].base, segment_table[i].limit);
}
// Accessing memory
int segment_number, offset;
printf("Enter segment number to access (0-%d): ", MAX_SEGMENTS - 1);
scanf("%d", &segment_number);
printf("Enter offset within segment: ");
scanf("%d", &offset);
if (segment_number < 0 || segment_number >= MAX_SEGMENTS || offset < 0 || offset >= segment_table[segment_number].limit) {
printf("Invalid segment number or offset!\n");
} else {
int physical_address = segment_table[segment_number].base + offset;
printf("Segment number %d with offset %d maps to physical address %d\n", segment_number, offset, physical_address);
}
return 0;
}
content_copyCOPY
Comments