Intel 实模式和保护模式

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

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

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

  1. 特权级

Intel 实模式和保护模式_第1张图片

Intel 实模式和保护模式_第2张图片

Intel 实模式和保护模式_第3张图片

Intel 实模式和保护模式_第4张图片

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

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

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

  1. 段检查:

Intel 实模式和保护模式_第5张图片

Intel 实模式和保护模式_第6张图片

Intel 实模式和保护模式_第7张图片

Intel 实模式和保护模式_第8张图片

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

而这里是需要注意一个
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进行比较,当前相同,则允许访问。

一致性代码的规则如下:

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

你可能感兴趣的:(Intel,手册阅读,软件工程)