内存管理——描述符表(分为GDT和LDT。GDT为整个软硬件系统服务,由操作系统定义,管理所有用户程序。)虽然操作系统定义,但是描述表的定义必须建立在硬件基础上(GDT可以被放在内存的任何位置),按照此方式,能够寻找到对应的内存地址,
分段和分页 都需要类似的需找内存地址的硬件基础
分段
分页
段描述符表是一个段描述符数组。最多可容纳8192(2^16 / 8)个8字节的描述符。分为GDT和LDT。GDT为整个软硬件系统服务,由操作系统定义,管理所有用户程序。
# 进入保护模式之前必须先定义GDT表。由于是在实模式下定义,因此GDT在0x0~0xFFFFF之间,可以进入保护模式后重新定义。
# GDTR保存了GDT表的起始地址和GDT的界限值。
# 如果有多个LDT,GDT中必须拥有所有LDT的段描述符。
GDT(百度百科)
全局描述表(GDT Global Descriptor Table):在保护模式下一个重要的数据结构。
中文名
全局描述表
外文名
Global Descriptor Table
GDT可以被放在内存的任何位置,那么当程序员通过段寄存器来引用一个段描述符时,CPU必须知道GDT的入口,也就是基地址放在哪里,所以Intel的设计者们提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此寄存器,从此以后,CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了。
GDT是保护模式所必须的数据结构,也是唯一的--不应该,也不可能有多个(这个数据结构表有且就有一个,但是表格的内容可以有很多项的,2^13=8192个描述符)。另外,正象它的名字(Global Descriptor Table)所揭示的,它是全局可见的,对任何一个任务而言都是这样。
除了GDT之外,IA-32还允许程序员构建与GDT类似的数据结构,它们被称作LDT(Local Descriptor Table),但与GDT不同的是,LDT在系统中可以存在多个,并且从LDT的名字可以得知,LDT不是全局可见的,它们只对引用它们的任务可见,每个任务最多可以拥有一个LDT。另外,每一个LDT自身作为一个段存在,它们的段描述符被放在GDT中。
参考资料
Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals
-----------------------------------
内存管理——描述符表
https://blog.51cto.com/u_15127559/4415562