Intel 实模式和保护模式

Intel的保护模式在32位CPU中引入,通过特权级(0-3)确保程序安全运行。CPL表示当前代码的特权级,RPL是请求权限级,DPL是段的特权级。非一致性代码段只允许同一级别间访问,而一致性代码段可被同级或低级代码调用。如果权限不匹配,系统将抛出异常,防止非法内存访问导致的系统崩溃。
摘要由CSDN通过智能技术生成

如果一个程序已经给他分配了他的代码段,数据段,堆栈段,这个是执行到一条指令,突然要访问,另一个程序的的地址,这个时候对于其他程序来说就是不安全的,或者说他这个时候去访问操作系统的地址,程序之间不能胡乱访问,如果操作系统的内存被更改了,有可能整台计算机都会崩溃。所以这个时候就需要提供一种机制保证,Intel 提供了一种模式就是保护模式。

注意:保护模式是在设计32位CPU时提出的。并不是16CPU支持的。

Intel 为保护模式提供了如下实现:

  1. 特权级

特权级分为 0 - 3 个级别,0 是最高级别,依次变低,而Linux内核也只是用 0 和 3 两种状态。
RPL:程序对段访问的请求权限,意思是当前进程想要的请求权限

CPL:是一种特殊的RPL,当前正在执行的代码所处的特权级

DPL:代码本身真正的特权级

  1. 段检查:

怎么对这三个值进行比较是否满足权限可以访问呢?

而这里是需要注意一个
Noncon forming Code Segment:非一致性代码段

Conforming Code Segment:一致代码段

数据段一定是非一致性代码段。

一般段都是非一致性代码段,需要被校验。

非一致性代码的规则如下:

只能在同一级别间相互访问

假设 CPL = 3,RPL = 3 ,DPL = 2

DPL 为目标可访问的权限码。CPL 当前程序的权限码,RPL 当前程序请求的权限码。

CPL 和 RPL 中取得最大值,然后和DPL进行比较,当前不相同,则抛出异常。

假设 CPL = 2,RPL = 2,DPL = 2

CPL 和 RPL 中取得最大值,然后和DPL进行比较,当前相同,则允许访问。

一致性代码的规则如下:

允许被同等级或低等级代码调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值