您的位置:首页 > 运维架构 > Linux

CPL, 门DPL, 描述符DPL 的关系

2017-10-26 23:21 323 查看
1. CPL要通过门(中断门,陷阱门,任务门,调用门)访问一个GDT中的描述符,必须有如下关系:

CPL <= DPL (门): 当前运行级不能低于门,如果是外部中断或CPU异常会免去这一判断

CPL >= DPL (描述符):门只能是用于保持或提升运行级别,因此GDT的描述符中的DPL均为0。如果有提升,则需要进行堆栈切换,如下:

  运行级别不变的堆栈值:

  eflag

  cs

  eip

  error code

  运行级别改变的堆栈值:

  ss

  esp

  eflag

  cs

  eip

  error code

2. 各个门的DPL解释:

中断门: 用于硬件中断,DPL为0,不允许用户态直接使用int指令访问,硬件中断免去这一判断,因此可以在用户态响应中断,见set_intr_gate

DPL0陷阱门: 用于CPU异常,DPL为0,不允许用户态直接使用int指令访问,硬件中断免去这一判断,因此可以在用户产生CPU异常,见set_trap_gate

DPL3陷阱门: 用于系统调用,DPL为3,允许用户态直接使用int指令访问,这样才能通过int80访问系统调用,只有80号向量属于此门,见set_system_gate

调用门: DPL为3,允许用户态访问,和LDT一起使用,用于特殊场景,见set_call_gate
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Kernel linux DPL CPL GDT