Segment Selector: 16-bit field ==> segment identifier ━┓
┣━ Logical Address
offset: 32-bit field ━┛
Segment Selectors ┏━━ index: 13-bit, segment descriptor entry index in GDT/LDT
(stored in ┃ TI (Table Indicator) : TI=0, Segment Descriptor is in GDT;
Segmentation ━━┫ TI=1, Segment Descriptor is in LDT
registers) ┃ RPL(Requestor Privilege Level): 2-bit, specifies the CPL when this
┗━━ segment selector is loaded into cs register
RPL field may also be used to selectively weaken the processor privilege level when accessing data segments.
┏━━ cs: Code Segment. containing program instructions
Segmentation Registers ┃ ss: stack segment, containing current program stack
(6) ==> ━━┫ ds: data segment, containing static and external data
only to hold ┃
Segment Selectors ┗━━ es, fs, gs: general purpose, arbitrary segments
cs register: includes a 2-bit field that specifies CPL (current privilege level).
Segment Descriptor(8-byte): describes segment characteristics, storing in LDT or GDT.
┏━━ Base: 32-bit segment linear address
Segment Descriptor ━┫ Limit: 20-bit segment length in byte
┗━━ Other: G, S , Type, DPL…
DPL(Descriptor privilege level): 2-bit field.
minimal CPU privilege level requested for accessing the segment.
DPL=0: segment is accessible only when CPL=0, Kernel Mode
DPL=3: segment is accessible with every CPL value
1 GDT ==> gdtr processor register
1 LDT for each process ==> ldtr processor register
since a Segment Descriptor is 8 bytes long, it’s address is obtained by
GDT/LDT base address + index*8
e.g.
GDT is at 0x00020000 (stored in gdtr register),
index specified by Segment Selector is 2,
Segment Descriptor is at: 0x00020000 + (2*8), or 0x00020010.