一致代码段和非一致代码段

在存储段描述符中,属性区域的TYPE由位0-3组成。位3称为E位,E=1,表示此描述符用于描述代码段。位2称为C位,位C=1,表示对应的代码段是一致代码段;位C=0,表示对应的代码段不是一致代码段.
所谓的“一致代码段”,目的是为了共享,比如该一致代码段的特权级是2,那么即使是特权级是3的代码,也可以访问该一致代码。也就是允许低权限 的代码访问 高权限的代码,而成功访问之后,当前的特权级并不是目标代码的特权级,而是原来代码的特权级,也就是说,跳转之后,CPL不变。要注意的是,一致代码段的 DPL的定义,它定义的是允许访问改一致代码段的最高权限,也就是说,如果一个权限比一致代码段中DPL的权限还要高的话,是不允许访问该一致代码段的。
总结:一致代码段的DPL规定了成功访问它的最高权限,高于这个权限的代码不能成功访问它。成功访问一致代码段后,CPL并不会改变,还是保持为原来的权限。这样的设置主要是为了共享,比如一些函数库之类的,而不用受到权限的限制.
对于非一致代码段,要求CPL=DPL,RPL<=CPL(DPL).
对于非一致代码段,只允许同特权级的转移
原因:
1.低特权级下不能调用高特权级的代码,即保护高特权级的代码.
2.高特权级下不能调用低特权级的代码,为了避免低特权级代码获得高特权级从而能执行某些系统指令.
1.
一致代码段的转移,转移后的CPL不变
对于非一致代码段的转移与通过调用门转移,转移后的CPL就是段的DPL.
2.
而给其他段寄存器赋值(除CS以外)时,赋值后该寄存器的RPL就是选择子的RPL.
DPL是存储段的允许访问特权级,CPL是CPU的当前特权级,代表当前程序的特权级。RPL是选择子的请求访问特权级。对非一致代码段,要求 代表当前程 序特权级CPL必须等于存储段的允许访问特权级DPL,也就是说,对于非一致代码段,程序只能访问相同特权级的存储段。选择子的请求访问 特权级RPL必须高于存储段的允许访问特权级DPL。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值