保护模式下的存储管理

发布时间 2023-09-30 20:16:54作者: Euler0525

分段

段描述符

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。

分页