保护模式

Published: by Creative Commons Licence

看了《操作系统真象还原》中关于保护模式的部分,故此做一下笔记,以做备忘。

段描述符格式:

   descriptor

  • 0 ~15位:段界限的0~15位
  • 16~31位:段基址的0~15位
  • 32~39位:段基址的16~23位
  • 40~43位:type字段,由S字段决定其中各位的含义
  • 44~44位:S字段,0表示系统段(各种门,例如调用门,任务门),1表示数据段(代码,数据)
  • 45~46位:DPL字段,表示特权级,0最高特权级,3最低特权级
  • 47~47位:P字段,表示是否在内存中,0不在,1在
  • 48~51位:段界限16~19位
  • 52~52位:AVL字段
  • 53~53位:L字段,0表示32位代码段,1表示64位代码段
  • 54~54位:D/B字段,对于代码段表示操作数大小,0表示16位,1表示32位,对于栈段表示栈指针和栈地址上限,0表示sp,上限是0xffff,1表示esp,上限是0xffffffff
  • 55~55位:G字段,表示段界限的单位,0表示1字节,1表示4KB
  • 56~63位:段基址24~31位

段界限20位由段选择符的0~15,48~51位组成,段界限实际大小=(段界限+1)*段界 限单位-1。
段基址32位由段选择符的16~39,56~63位组成

type字段

   descriptor_type

更正:上图中对于非系统段的type有错误:W,E反了

   descriptor_type

段选择子

   descriptor_type

  • 0~1位:RPL,请求特权级
  • 2~2位:TI,0表示在GDT中,1表示在LDT中
  • 3~15位:index,表示在GDT或LDT中位置下标