#include<stdio.
h>
#include<stdlib.h>
#define MAX_SEGMENTS 10
#define MAX_SEG_SIZE100
struct segment{
int base;
int limit;
};
struct SegmentTable
{
int num_segments;
struct segment segments [MAX_SEGMENTS];
};
struct SegmentTable segment_table;
void initialize_segment_table(){
segment_table.num_segments=0;
}
void add_segment(int base,int limit){
if(segment_table.num_segments<MAX_SEGMENTS){
segment_table.segments[segment_table.num_segments].base=base;
segment_table.segments[segment_table.num_segments].limit=limit;
segment_table.num_segments++;
printf("segment added successfully.\n");
}else{
printf ("segment [Link] addmore segments.\n");
}
}
int main(){
int i,logical_address,segment_number,offset;
initialize_segment_table();
add_segment(0,50);
add_segment(100,30);
logical_address=25;
segment_number=-1;
offset=-1;
for(i=0;i<segment_table.num_segments;++i){
if(logical_address
>=segment_table.segments[i].base&&logical_address<segment_table.segments[i].base+se
gment_table.segments[i].limit){
segment_number=i;
offset=logical_address-segment_table.segments[i].base;
break;
}
}
if (segment_number!=-1){
printf ("logical address%d belongs to segment %d with offset%d.\
n",logical_address,segment_number,offset);
}
else{
printf ("logical address%d does not belong to any segment.\n", logical_address);
}
return 0;
}