DPL,RPL,CPL之间的联系和区别是什么?RPL 和 CPL 是必须相同吗?如果相同,为什么
要釆用两个而不改用一个呢?
答:特权级是保护模式下一个重要的概念,CPL,RPL 和 DPL 是其中的核心概念,查阅
资料无数,总结如下:
简单解释:
CPL 是当前进程的权限级别(CurrentPrivilegeLevel),是当前正在执行的代码所在的
段的特权级,存在于 cs 寄存器的低两位。
RPL 说明的是进程对段访问的请求权限(RequestPrivilegeLevel),是对于段选择子而
言的,每个段选择子有自己的 RPL,它说明的是进程对段访问的请求权限,有点像函数参
数。而且 RPL 对每个段来说不是固定的,两次访问同一段时的 RPL 可以不同。RPL 可能
会削弱 CPL 的作用,例如当前 CPL=0 的进程要访问一个数据段,它把段选择符中的 RPL
设为 3,这样虽然它对该段仍然只有特权为 3 的访问权限。
DPL 存储在段描述符中,规定访问该段的权限级别(DescriptorPrivilegeLevel),每个
段的 DPL 固定。当进程访问一个段时,需要进程特权级检查,一般要求 DPL>=max{CP
L,RPL}
下面打一个比方,中国官员分为 6 级国家主席 1、总理 2、省长 3、市长 4、县长 5、乡
长 6,假设我是当前进程,级别总理(CPL=2),我去聊城市(DPL=4)考察(呵呵),我用省长
的级别(RPL=3这样也能吓死他们:-))去访问,可以吧,如果我用县长的级别,人家就不理咱
了(你看看电视上的微服私访,呵呵),明白了吧!为什么采用 RPL,是考虑到安全的问题,
就好像你明明对一个文件用有写权限,为什么用只读打开它呢,还不是为了安全!
全面解释:
RPL 是段选择子里面的 bit0 和 bit1 位组合所得的值,但这里要首先搞清楚什么是段选择
子,根据 Intel的文件(IA-32IntelRArchitectureSoftwareDeveloper'sManual,Volume3
SystemProgrammingGuide)它是一个 16Bitidentifier(原文:Asegmentselectorisa
16-bitidentifierforasegment).但Ïidentifier又是什么.identifier可以是一个变数的名字(
Anidentifierisanameforvariables),简单的说它可以就是一般意义的变数.这里Ï16-bitide
ntifierforasegment可以就是一个一般意义的 16bit 变数但同时要求对它的值解释的时候
必须跟据 Intel 定下的规则---也就是 bit0 和 bit1 位的组合值就是 RPL 等等…Ï因此在程序里
如果有需要的话你可以声明一个或者多个变数来代表这些段选择子,这样的话你的程序在
某一时刻就可以有很多段选择子,当然有那么多段选择子就有那么多 RPL.可以这样说程序
有多少个是 RPL 是你怎样看待你自己声明的变数.|
1
评论0
最新资源