Memory Segmentation
Segment Different method of defining memory segments as compared to 8086. User’s program can not access any processor's address space merely by asking. In 80386, a program can not access an area of memory unless that area has been  described  to it. Segment violation  if try to access 80386 processor does not enforce segment boundaries and alignment, as it did in 8086. Systems  programmer defines  what each segment will be.
Segment …cntd…. Segment definition includes Its starting address Its length Its intended use Other attributes Segment length is variable form 1 byte to 4 GB.  Base address defines actual address  so sixteen byte alignment is no longer required
Segment Segments are Areas of memory Defined by the programmer Used for different purposes, such as code, data and stack Segments are not All the same size. Necessarily paragraph aligned Limited to 64KB
Segment Descriptors A special structure used to describe a segment. Exactly one descriptor must be defined for each segment. U can define virtually any number of segment descriptors. Ability to define segment descriptors carries considerable power and responsibility for system security.
A segment Descriptor Describes a segment Must be created for every segemnt Is created by the programmer Determines a segment’s base address Determines a segment’s size Determines a segment's use Determines a segment’s use Determines a segment’s privilege level
Segment Descriptors field Base Address of segment (0-FFFFFFFF) Length  of segment (0-FFFFFFFF) Segment Type Privilege Level Miscellaneous
Segment Descriptor format
Segment types 000=Data, read only  001=Data, read/write 010=Stack, read only 011=stack read/write 100=code, execute only 101=code, execute/read 110=code, execute only, conforming 111=code, execute/read, conforming
Segments can be defined in eight basic types Executable code segments with or without data read permission Executable code segments with or without privilege protection Data segments with or without write permission Stack segments with or without write permission
Descriptor Table Group arrangement of descriptors is known as a descriptor table . Order is not important. Max size of table=64 Kb, so can have only one descriptor or as many as 8192.
Descriptors are stored in three tables: Global Descriptor table(GDT) Maintains a list of most segement May contains special “System descriptors” Interrupt Descriptor Table (IDT) Maintains a list of interrupt service routine Local Descriptor Table (LDT) Is optional Extends range of GDT Is allocated to each task when multitasking is enabled
After u have placed each descriptor in a descriptor table, you need to inform the processor U can place theses tables anywhere in the processor’s address space and u need not keep them together.  To allow processor to locate the GDT, IDT and current LDT, u load three special purpose registers, GDTR, IDTR,LDTR resply.
GDTR,IDTR,LDTR contains Base address of table Limit
Segment Selectors Once the descriptors are defined , how does the processor make use of them? Any 16 bit value that u write into a segment register is called a selector, because it selects a segment descriptor from a descriptor table. 15  2  1  0  INDEX  RPL TI
80386 segment registers 80386 has 6 segment registers One for current code segment(CS) One for current stack segment (SS) Four for general data segments (DS, ES,FS,GS) Segment registers select segment descriptors: Thirteen bits select descriptors One bit selects descriptor table Two bits privilege checking
Loading Segment Selectors Any given selector value selects one and only one descriptor When loading segment selector ,the 80386 check that The selector index is within the descriptor table limit The selector references the correct descriptor table The descriptor is of correct type The selector uses  the correct privilege level
GDT GDT 0 GDT 1 GDT 2 GDTR Offset Index 2  1  0 TI RPL
SEGMENTATION Addressing  GDT Prog GDT Main Memory Index 2  1  0 TI RPL GD 0 GD 1 GD 2 GDTR Offset
Addressing  GDT GD 0 GD 1 GD 2 Main Memory Base Address Seg Limit Attrib Index 3  2  1  0 TI RPL GDTR Offset
GD 0 GD 1 GD 2 GDTR Index 2  1  0 TI RPL GDT Base Address Seg Limit Attrib + Offset
Local Descriptor Tables(LDT’s) LDT’s act like extension to GDT Are assigned to individual tasks when task switching is done. While running, any program can assess descriptors from GDT and LDT The way in which the processor locates LDT’s is much different, however.
Descriptor LDT Descriptor Descriptor Descriptor Data Descriptor Descriptor GDT LDT GDTR LDTR 1 DS ESI
Local Descriptor table Hold segment descriptors May be used in addition to the global descriptor table Are defined by special “system descriptor” in GDT. May be larger or smaller than GDT. May not be define other LDTs

Memory mgmt 80386

  • 1.
  • 2.
    Segment Different methodof defining memory segments as compared to 8086. User’s program can not access any processor's address space merely by asking. In 80386, a program can not access an area of memory unless that area has been described to it. Segment violation if try to access 80386 processor does not enforce segment boundaries and alignment, as it did in 8086. Systems programmer defines what each segment will be.
  • 3.
    Segment …cntd…. Segmentdefinition includes Its starting address Its length Its intended use Other attributes Segment length is variable form 1 byte to 4 GB. Base address defines actual address so sixteen byte alignment is no longer required
  • 4.
    Segment Segments areAreas of memory Defined by the programmer Used for different purposes, such as code, data and stack Segments are not All the same size. Necessarily paragraph aligned Limited to 64KB
  • 5.
    Segment Descriptors Aspecial structure used to describe a segment. Exactly one descriptor must be defined for each segment. U can define virtually any number of segment descriptors. Ability to define segment descriptors carries considerable power and responsibility for system security.
  • 6.
    A segment DescriptorDescribes a segment Must be created for every segemnt Is created by the programmer Determines a segment’s base address Determines a segment’s size Determines a segment's use Determines a segment’s use Determines a segment’s privilege level
  • 7.
    Segment Descriptors fieldBase Address of segment (0-FFFFFFFF) Length of segment (0-FFFFFFFF) Segment Type Privilege Level Miscellaneous
  • 8.
  • 9.
    Segment types 000=Data,read only 001=Data, read/write 010=Stack, read only 011=stack read/write 100=code, execute only 101=code, execute/read 110=code, execute only, conforming 111=code, execute/read, conforming
  • 10.
    Segments can bedefined in eight basic types Executable code segments with or without data read permission Executable code segments with or without privilege protection Data segments with or without write permission Stack segments with or without write permission
  • 11.
    Descriptor Table Grouparrangement of descriptors is known as a descriptor table . Order is not important. Max size of table=64 Kb, so can have only one descriptor or as many as 8192.
  • 12.
    Descriptors are storedin three tables: Global Descriptor table(GDT) Maintains a list of most segement May contains special “System descriptors” Interrupt Descriptor Table (IDT) Maintains a list of interrupt service routine Local Descriptor Table (LDT) Is optional Extends range of GDT Is allocated to each task when multitasking is enabled
  • 13.
    After u haveplaced each descriptor in a descriptor table, you need to inform the processor U can place theses tables anywhere in the processor’s address space and u need not keep them together. To allow processor to locate the GDT, IDT and current LDT, u load three special purpose registers, GDTR, IDTR,LDTR resply.
  • 14.
    GDTR,IDTR,LDTR contains Baseaddress of table Limit
  • 15.
    Segment Selectors Oncethe descriptors are defined , how does the processor make use of them? Any 16 bit value that u write into a segment register is called a selector, because it selects a segment descriptor from a descriptor table. 15 2 1 0 INDEX RPL TI
  • 16.
    80386 segment registers80386 has 6 segment registers One for current code segment(CS) One for current stack segment (SS) Four for general data segments (DS, ES,FS,GS) Segment registers select segment descriptors: Thirteen bits select descriptors One bit selects descriptor table Two bits privilege checking
  • 17.
    Loading Segment SelectorsAny given selector value selects one and only one descriptor When loading segment selector ,the 80386 check that The selector index is within the descriptor table limit The selector references the correct descriptor table The descriptor is of correct type The selector uses the correct privilege level
  • 18.
    GDT GDT 0GDT 1 GDT 2 GDTR Offset Index 2 1 0 TI RPL
  • 19.
    SEGMENTATION Addressing GDT Prog GDT Main Memory Index 2 1 0 TI RPL GD 0 GD 1 GD 2 GDTR Offset
  • 20.
    Addressing GDTGD 0 GD 1 GD 2 Main Memory Base Address Seg Limit Attrib Index 3 2 1 0 TI RPL GDTR Offset
  • 21.
    GD 0 GD1 GD 2 GDTR Index 2 1 0 TI RPL GDT Base Address Seg Limit Attrib + Offset
  • 22.
    Local Descriptor Tables(LDT’s)LDT’s act like extension to GDT Are assigned to individual tasks when task switching is done. While running, any program can assess descriptors from GDT and LDT The way in which the processor locates LDT’s is much different, however.
  • 23.
    Descriptor LDT DescriptorDescriptor Descriptor Data Descriptor Descriptor GDT LDT GDTR LDTR 1 DS ESI
  • 24.
    Local Descriptor tableHold segment descriptors May be used in addition to the global descriptor table Are defined by special “system descriptor” in GDT. May be larger or smaller than GDT. May not be define other LDTs