段式管理用以将逻辑地址转化为线性地址。一个逻辑地址由一个16位的段选择子和一个32位的偏移量组成。
|
Index |
TI |
RPL |
- 其中,Index有13位,为访问段描述符数组项的下标;TI只有1位,为0表示使用GDT,1表示使用LDT;RPL有2位,用以表示当前进程的特权级别。
- 2、段描述符
- 每个段的属性在内存中由一个8字节的段描述符表示,段描述符存放在全局描述符表(GDT)或者局部描述符表(LDT)中,其地址和体积分别保存在GDTR和LDTR寄存器中。段描述符的结构如下:
|
Base24-Base31 |
G |
D/B |
L |
AVL |
Limit16-Limit19 | |||
|
P |
DPL |
S |
Type |
Base16-Base23 | ||||
|
Base0-Base15 | ||||||||
|
Limit0-Limit15 | ||||||||
- 其中,Base为32位的段基(线性)地址;Limit为20位的段长度;G只有1位,为0表示段长度以字节为单位,1表示段长度以4KB为单位;D/B只有1位,为0表示为16位段,1表示为32位段;L只有1位,未使用;AVL只有1位,供系统软件使用(Linux从未使用该位);P只有1位,表示该段内容是否在内存中(Linux从不将整个段替换出内存,故该位恒为1);DPL有2位,表示访问该段所需要的特权级别;S只有1位,为0表示段为存放关键数据的系统段,1表示段为普通段;Type有4位,定义了段类型和访问权限。
- 在linux系统中,主要包括代码段描述符、数据段描述符(包含栈段)、任务状态段(TSS,Type字段值为9或11)描述符和局部描述符表(LDT,Type字段值为2)描述符四种段描述符。其中,前两者可以被包含在GDT或LDT中,TSSD和LDTD为系统关键段,仅能包含在GDT中。
0
