特权级保护

特权级

也就是描述符中的DPL(实模式与保护模式

作用:

在进行内存访问时(保护模式下的内存访问),用于控制操作或者限制访问性,其实也就是满足了特权级的转换规则,才允许操作,不然就是不合法的内存访问。

概述:

特权级分为4级:

特权级级别通常归属的对象
0操作系统
1系统服务程序
2系统服务程序
3普通用户程序

P.S.就是因为分 了4个级,因此描述符中需要2bit来表示
当然这也只是大概的分类,没有硬性要求,如果不想使用特权级机制,可以把所有段描述符的特权级都设为0

分类:

DPL:段描述符自身的特权级
CPL:当前特权级(当前执行的代码所属的特权级)
RPL:请求特权级,就是发生内存访问时(保护模式下的内存访问),访问之前的代码段的特权级为请求特权级

例子:
有两个段描述符A、B,它们分别都具有自己的DPL,A的DPL是0,B的特权级3,当前正在执行的段为A,因此CPL为0,然后A访问B,访问之后,现在正在执行的代码段为B,因此CPL变为3,而现在RPL为0.

特权级检查规则(保护机制)

1.将控制直接转移到非依从的代码段,要求当前特权级(CPL)和请求特权级(RPL)都等于目标代码段描述符的DPL

在数值上表示为:
CPL = 目标代码段描述符的DPL
RPL = 目标代码段描述符的DPL

2.将控制直接转移到依从的代码段,要求CPL和RPL都低于或者等于目标代码段描述符的DPL

在数值上为:
CPL >= 目标代码段描述符的DPL
RPL >= 目标代码段描述符的DPL

3.高特权级别的程序可以访问低特权级别的数据段,但低特权级别的不能访问高特权级别的数据段

在数值上为:
CPL <= 目标代码段描述符的DPL
RPL <= 目标代码段描述符的DPL

4.任何时候,栈段的特权级别必须和CPL相同

在数值上为:
CPL = 目标代码段描述符的DPL
RPL = 目标代码段描述符的DPL

特权级之间的访问方法

1.同级之间可以相互访问

直接可以相互访问

2.低级访问高级

2.1将高特权级的代码段定义为依从的(实模式与保护模式):

要求:CPL必须低于或者等于目标代码段描述符的DPL。
特点:依从的代码段不是在它的DPL上运行,而是在调用者的DPL上运行

2.2使用调用门:

使用方法:使用jmp far或者call far
特点:

1.jmp far:不改变CPL
2.call far:CPL会提升到目标代码段的DPL

要求:当前特权级CPL必须低于或者等于目标代码段描述符的特权级DPL

3.高级访问低级(代码段)

使用调用门:

使用方法:使用jmp far或者call far
特点:

1.jmp far:不改变CPL
2.call far:CPL会提升到目标代码段的DPL

要求:当前特权级CPL和请求特权级RPL都必须高于或者等于目标代码段描述符的特权级DPL

在数值上:
CPL >= 目标代码段描述符的DPL
RPL >= 目标代码段描述符的DPL

总结

其实,特权级也就和read、write属性的作用差不多,内存访问之前,检测访问是否合法,然后该怎样就怎样做。
本质上,都是用来加强分段机制的安全性。
++++++++++++++++++++++++++++++++++++++++++++++

更新:

看到上面的特权级的介绍就感觉挺麻烦的,对的!是非常非常麻烦,当使用特权级机制后,代码比没有用特权级机制,要复杂好多好多。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值