段内存管理概要

IA-32体系中提供了段页式内存管理机制,先分段再分页。提供页式是为了支持虚拟内存。
  • :处理器的可寻址的线性内存空间被划分成了若干个大小不同的段。一个段是线性地址空间中的一个连续的区间。段中可保存代码、数据、堆栈或者其他数据结构。段的属性信息由与之对应的段描述符描述。段描述符是一个数据结构。Intel用段描述符表来管理。段描述符表最大可达64KB。
    • 当G为0时,段以字节为单位,最大的段长为1MB。当G为1时,段以页(4kb)为单位。最大的段长为4GB。
    • DPL是段的特权级,其值在0~3之间。
    • S是系统标志,用于区分段的类别。0表示系统段,1表示用户段。
    • Type是段的类型:
      • 对于系统段。类型域由4位组成,可表示16个系统段类型之一。
      • 对于用户段。
        • 第三位为0表示数据段,此时第二位表示地址的拓展方向(0表示大扩展方向),第一位表示段是否可写。
        • 第三位为1表示代码段,此时第二位是相容标志(0表示非相容)。第一位是可读位。
        • 第0位是存取位。0表示段尚未存取过。
    • D/B标志表示有效地址和操作数长度。
    • L标志仅出现在IA-32e模式的代码段中。1表示64位模式
    • 堆栈段通常是向下扩展的、可读写的数据段。
  • 段描述符表:
    • 全局描述符表(GDT)。在系统进入保护模式前必须为其定义一个GDT。IA-32体系结构专门定义了一个GDTR寄存器来存放当前的GDT的信息。
    • 局部描述符表(LDT)是系统段,其中可以存放局部描述符,如进程自己的代码段,数据段等。IA-32体系专门提供了一个LDTR寄存器,用于保存当前使用的LDT信息。
        可以用段描述符在段描述符表中的索引来标识它,标识称作段选择符。段选择符是16位标识符。第二位是指示器(TI)表示索引所对的描述符表(0表示GDT)。第3-15位示索引,标定位置。第0、1位是请求特权级RPL。一个段选择符加上一个偏移量可以唯一地标识一个逻辑地址。逻辑地址是程序使用的地址,不是线性地址,也不是物理地址。
IA-32体系提供了6个段寄存器,即CS,SS,DS,ES,FS和GS。每一个段寄存器可以缓存一个段描述符。