linux下保护模式之CPL,RPL,DPL总结

                                                                                                        linux下保护模式之CPL,RPL,DPL总结

      先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4 个级别,0,1,2,3,数字越小特权越高。

       较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被 允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小来说明,改 为内层(高),外层(低)来讲。
       特权级有3 种:CPL,DPL 和RPL,每个都是有4 个等级。我对他们的关系理解是这样:一般来说,CPL 代表当前代码段的权限,如果它想要去访问一个段或门,首先要看看对方的权限如何,也就是检查对方的DPL,如果满足当前的权限比要访问的权限高,则有可能允许去访问,有些情况我们还要检查选择子的权限,即RPL,因为我们通过选择子:偏移量的方式去访问一个段,这算是一个访问请求动作,因此称为请求访问权限RPL(Requst Privilege Level)。当请求权限也满足条件,那么访问就被
允许了。

      CPL(Current Privilege Level)
      CPL 是当前执行的任务的特权等级,它存储在CS 和SS 的第0 位和第1 位上。(两位表示0~3 四个等级) 通常情况下,CPL 等于代码所在段的特权等级,当程序转移到不同的代码段时,处理器将改变 CPL。
      注意:在遇到一致代码段时,情况特殊,一致代码段的特点是:可以被等级相同或者更低特权级
的代码访问,当处理器访问一个与当前代码段CPL 特权级不同的一致代码段时,CPL 不会改 变。
      DPL(Descriptor Privilege Level)
      表示门或者段的特权级,存储在门或者段的描述符的DPL 字段中。正如上面说的那样,当当前代码段试图访问一个段或者门时,其DPL 将会和当前特权级CPL 以及段或门的选择子比较,根据段或者门的类型不同,DPL 的含义不同:
1.数据段的DPL:规定了访问此段的最低权限。比如一个数据段的DPL 是1,那么只有运行在CPL 为0 或1 的程序才可能访问它。为什么说可能呢?因为还有一个比较的因素是RPL。访问数据段要满足有效特权级别(上述)高于数据段的DPL.
2.非一致代码段的DPL(不使用调用门的情况):DPL 规定访问此段的特权,只有CPL 与之相等才有可能访问。
3.调用门的DPL,规定了程序或任务访问该门的最低权限。与数据段同。
4.一致代码段和通过调用门访问的非一致代码段,DPL 规定访问此段的最高权限。比如一个段的DPL 为2,那么CPL 为0 或者1 的程序都无法访问。
5. TSS 的DPL,同数据段。
       RPL(Rquest Privilege Level)
     RPL 是通过选择子的低两位来表现出来的(这么说来,CS 和SS 也是存放选择子的,同时CPL存放在CS 和SS 的低两位上,那么对CS 和SS 来说,选择子的RPL=当前段的CPL)。处理器通过检查RPL 和CPL 来确认一个访问是否合法。即提出访问的段除了有足够的特权级CPL,如果RPL 不够也是不行的(有些情况会忽略RPL 检查)。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值