1、CPL,DPL,RPL都位于哪里?
RPL:Request Privilege Level,请求特权级,位于段寄存器后两位
DPL:Descriptor Privilege Level,描述特权级,位于GDT/IDT中
CPL: Current Privilege Level,当前特权级,CS.RPL
2、CPL,DPL,RPL的意义?
CPL:表示处理器的当前特权级
DPL:表示受访者特权等级,可看成是访问门槛
RPL:其意义在于特权级检查,保护系统安全
CPL与DPL先PK决定处理器是否有访问数据/代码的权限,
写数据前RPL参与检查,避免对系统造成破坏。
3、CPL与DPL的PK:
按照我的理解,CPL和DPL的PK决定了用户程序是否具有访问权限
(1)对于受访者为代码段来说要求CPL==DPL,只能平级访问,如果CPL>DPL,则需要借助门结构提升处理器特权级。
(2)对于受访者为数据段而言,要求CPL<=DPL,即处理器特权级必须大于等于数据段特权级。
4、RPL?
如果一个用户程序需要获取当前内存容量大小,内存容量大小存储在内核数据段中,DPL为0,处理器需要提升特权级才能读取存放在自己的段中,因此需要提供一个数据段选择子作为调用内核例程的参数。
接下来,用户程序借助门结构进入0特权级,必须满足CPL<=DPL&&RPL<=DPL的条件,才能将内核数据写入到用户提供的缓冲区。
CPL<=DPL :对于数据段,需满足CPL权限大于等于DPL
RPL<=DPL :
RPL是用户提供的选择子,首先会被压入3特权级下的栈中,随后被复制到0特权级下的栈中,随着一起复制过去的,还有原先的CS和EIP,接下来为了防止用户程序作弊,操作系统会将用户提供的RPL修改为原先CS中的后两位,这就保证了提供的RPL与原先的CPL一致,避免可能将内核数据覆盖的情况。