一个操作系统的实现--关于CPL、RPL、DPL
作者:网络转载 发布时间:[ 2013/8/21 9:57:32 ] 推荐标签:
保护模式中重要的一个思想是通过分级把代码隔离了起来,不同的代码在不同的级别 ,使大多数情况下都只和同级代码发生关系。 Intel 的80286以上的cpu可以识?4个特权级(或特权层) ,0级到3级。数值越大特权越小。一般用把系统内核放在0级,系统的其他服务程序位于1、2级,3级则是应用软件。一般情况下代码都在自己的级别下做自己 的工作,同一级别之间可以相互访问,而一般是不允许不同级别的代码间随意访问的。但有时候不同级别的程序之间一定要访问,比如系统的接口函数等,必须能够 使得应用程序能够随意调用。于是Intel将代码分为:
1.非一致码:受到隔离的代码,只能在同一级别间相互访问
2.一致码:不受到隔离的是,允许被同等级或低等级代码调用
至于这部分我们下回再详细说,这里主要搞清楚RPL、DPL、CPL之间的关系。
Intel设置DPL、RPL、CPL以实现分级和权限检查。
DPL:描述符特权(Descriptor Privilege Level)
存 储在描述符中的权限位,用于描述代码的所属的特权等级,也是代码本身真正的特权级。一个程序可以使用多个段(Data,Code,Stack)也可以只 用一个code段等。正常的情况下,当程序的环境建立好后,段描述符都不需要改变——当然DPL也不需要改变,因此每个段的DPL值是固定。
RPL:请求特权级RPL(Request Privilege Level)
RPL保存在选择子的低两位。 RPL 说明的是进程对段访问的请求权限,意思是当前进程想要的请求权限。 RPL 的 值 由程序员自己来自由的设置,并不一定RPL>=CPL,但是当RPL<CPL时,实际起作用的是CPL了,因为访问时的特权检查是判 断:EPL=max(RPL,CPL)<=DPL是否成立,所以RPL可以看成是每次访问时的附加限制,RPL=0时附加限制小,RPL=3时附 加限制大。所以你不要想通过来随便设置一个rpl来访问一个比cpl更内层的段。
因为你不可能得到比自己更高的权限,你申请的权限一定要比你实际权限低才能通过CPU的审查,才能对你放行。所以实际上RPL的作用是程序员可以把自己的程序降级运行——有些时候为了更好的安全性,程序可以在适当的时机把自身降低权限(RPL设成更大的值)。
网上许多人都说在问rpl的作用,我也很晕。Intel的手册中对RPL的作用只是这样做的简短解释的:
The RPL can be used to insure that privileged code does not access a segment on behalf of an application program unless the program itself has access privileges for that segment.
后来找到了一些资料对这段话进行了扩充和举例,我才明白一些:
对于特权级高的进程RPL是作用是防止自己不小心访问到一些资料段。比方说,如果进程A的CPL=0,它知道它的委托进程B的DPL=3,也知道数据段C的DPL=2,而这数据段是不能让CPL>2的进程访问的。
那么如果你是进程A的程序员根本不需要RPL的帮助,也不会试图让进程A访问数据段C的数据, 因为这样做只会浪费时间。当然如果你一定要访问数据段C的数据然后把数据传给委托进程B,这是你的选择,你真的可以这样做,但后果自负。只是有时候要访 问的数据段我们不知道它的DPL是怎么,也不知道能不能让进程B访问,其中的一个解决方法是把委托进程B的DPL以RPL的方法告诉数据段C让它决定接受或不接受。(我想应该是通过程序把B的DPL装入到A的选择子中,然后再由A去访问数据段C)
CPL:当前任务特权(Current Privilege Level)
表 示当前正在执行的代码所处的特权级。CPL保存在CS中的低两位,是针对CS而言的。当选择子成功装入CS寄存器后,相应的选择子中的RPL变成了 CPL。因为它的位置变了,已经被装入到CS寄存器中了,所表达的意思也发生了变——原来的要求等级已经得到了满足,是当前自己的等级。
选择子可以有许多个,因此RPL也有许多个。而CPL不同了,正在执行的代码在某一时刻只有这个值的代表程序的CPL.
另外特别要求CS与SS的特权级必须保持一致。对于装入DS、ES、FS、GS的选择子INTEL没有给它们起什么特殊的名称,我也不知道应该叫它们什么,也许可以仍然称它为RPL。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11