特权级、调用门笔记

  • DPL
    • 特权级描述符(Descriptor Privilege Level)
    • 对于数据段来说,DPL决定了访问它们所应当具备的最低特权级别。
  • CPL
    • 当前特权级(Current Privilege Level)
    • 当前处理器正在一个代码段中取指令和执行指令,这个代码段的特权级就是当前的特权级。
  • IOPL
    • I/O Privilege Level,位于EFLAGS中。
  • 运行规则
    • 非依从代码段,只能在相同DPL的段中执行。
    • 依从代码段中,若满足条件CPL >= 目标代码段描述符的DPL,则可以转移到目标代码段进行执行,但是CPL不会改变,是为"依从"。
  • 门(Gate)
    • 段描述内存段,门描述可以执行的代码。
  • 调用门(Call Gate)
    • jmp far 调用门描述符的选择子 转移到比当前特权高的代码段,但当前特权级不变。
    • call far同样转移到目标代码段,但是当前特权级提升。
  • RPL
    • 请求特权级(Requested Privilege Level)
    • 用户程序通过调用门进行特权提升之后,用RPL来判断原始请求是否有资格来进行相关操作,RPL相当于是一个通信证,这个通行证由操作系统来发放。

规则

  • 代码段
    • 直接转移到非依从
      • CPL = 目标代码段描述符的DPL && RPL = 目标代码段描述符的DPL
    • 直接转移到依从
      • CPL >= 目标代码段描述符的DPL && RPL >= 目标代码段描述符的DPL
  • 数据段
    • 高特权级别的程序可以访问低特权级别的数据段
    • CPL <= 目标数据段描述符的DPL && RPL <= 目标数据段描述符的DPL
  • 栈段
    • CPL = 目标栈段描述符的DPL && RPL = 目标栈段描述符的RPL
  • 调用门
    • call far
      • CPL <= 调用门描述符的DPL
      • RPL <= 调用门描述符的DPL
      • 对于依从和非依从的代码段
      • CPL >= 目标代码段描述符的DPL
    • jmp far
      • CPL <= 调用门描述符的DPL
      • RPL <= 调用门描述符的DPL
      • 对于依从的代码段
        • CPL >= 目标代码段描述符的DPL
      • 对于非依从的代码段
        • CPL = 目标代码段描述符的DPL
    • note:试想如果当前CPL < 目标代码段描述符的DPL,操作系统应当认为特权级别越高的代码越是可靠,所以不会允许高等级代码段转移到低等级的代码段运行。

Q&A

  • 程序在进行任务切换时特权级是怎么更改的?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值