分段
段描述符
32位模式下,\(2^{32}bits=4GB\),起始地址用\(32bits\)表示,偏移用\(20bits\)表示,一页大小是\(4KB\),\(2^{20}\times 2^{12} = 2^{32}\),表示内存空间的某个位置最少用\(52bits\),实际上用\(64bits\),段基地址32位+限长20位+访问权限8位+属性4位。
- P:存在位:=1表示装入内存,=0表示未装入内存
- DPL:描述特权级,范围0~3
- S:描述符类型位,=1为代码段、数据段或堆栈段,=0为系统段
- E:可执行位,区分代码段和数据段,=1为代码段,=0为数据段或堆栈段
……
那么段描述符放在哪里?GDT/LDT.
特殊寄存器
GDTR
全局描述符表寄存器,共48位,高32位为基地址,低16位是GDT的限长(使用LGDT指令将GDT的起始位置装入GDTR)
LDTR
局部描述符表寄存器,共16位,指出LDT描述符在GDT中的索引。每个任务有一个LDT
IDTR
中断描述符表寄存器
控制寄存器CR0~CR3
调试寄存器DR0~DR7
测试寄存器TR6~TR7
CS
16位,与实模式下不同
- 15~3:索引
- 2:全局或局部,分别对应GDT和LDT
- 1~0:特权级,范围0-3
描述符表
GDT
全局描述符表用来定义全局存储器空间,有且只有一个。
IDT
每个任务有一个LDT。