Segmentation
Intoduction
Segmentation is a Memory Management technique in which memory is divided into variable sized chunks which can be allocated to processes. Each chunk is called a segment.
A table stores the information about all such segments and is called Global Descriptor Table (GDT).
A GDT entry is called Global Descriptor. It comprise of :
Logical Address to Linear Address
To translate a logical address into a linear address, the processor does the following:
Uses the offset in the segment selector to locate the segment descriptor for the segment in
the GDT or LDT and reads it into the processor. (This step is needed only when a new
segment selector is loaded into a segment register.)
Examines the segment descriptor to check the access rights and range of the segment to
insure that the segment is accessible and that the offset is within the limits of the segment.
Adds the base address of the segment from the segment descriptor to the offset to form a
linear address.
If paging is not used, the processor maps the linear address directly to a physical address (that
is, the linear address goes out on the processor’s address bus). If the linear address space is
paged, a second level of address translation is used to translate the linear address into a physical
address.
Segment Selector
A segment selector is a 16-bit identifier for a segment. It does not point directly
to the segment, but instead points to the segment descriptor that defines the segment. A segment selector contains the following items:
- Index
- (Bits 3 through 15). Selects one of 8192 descriptors in the GDT or LDT. The
processor multiplies the index value by 8 (the number of bytes in a segment
descriptor) and adds the result to the base address of the GDT or LDT (from
the GDTR or LDTR register, respectively).
TI (table indicator) flag
- (Bit 2). Specifies the descriptor table to use: clearing this flag selects the GDT;
setting this flag selects the current LDT.