Segmentation

PHOTO EMBED

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