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。每一个段寄存器可以缓 存一个段描述符。