Intel80386手册——6.3段级保护

Intel80386手册——6.3段级保护

主要包括五个方面:

  • 类型检查
  • 界限检查
  • 寻址范围约束
  • 子程序入口点约束
  • 指令集约束

段时保护的单元,段描述符中存储着保护机制参数

6.3.1描述符存储保护机制参数

程序将选择子装入寄存器时,处理器不仅加载段的基址部分,而且也把保护参数装入段寄存器。每个段寄存器有一个不可见的部分用来存放基址、界限、类型和特权级。

作用:对于以后的保护检查,不必浪费时钟周期从内存去加载这些信息。

1572154970401

6.3.1.1类型检查——TYPE字段

  1. 特定段寄存器所能加载的段描述符有限制,如
    • CS寄存器只能加载可执行段的描述符
    • SS寄存器只能加载可执行的数据段描述符
  2. 特定段所能进行的指令操作有限制,如
    • 数据段:可写位没有置位,则任何指令不可写入数据
    • 可执行段:不允许任何指令写入数据;若可读位没有置位,则任何指令不可读取数据

6.3.1.2界限检查

根据段描述符推算出段的可寻址范围,防止程序在访问一个段时超出段的范围。如,下标出界,非法指针运算。

6.3.1.3特权级

当某个段的一个子程序要访问一个段时,处理器会自动的把一个要访问某个段的子程序的特权级和CPL或者更多的特权级相比。这种比较是在当一个描述符被加载到一个段寄存器时执行的。比较的标准在访问数据时和控制转移时是分别不同的。(见6.3.2,6.3.3)

6.3.2 访问数据约束

寻址一个操作数时,处理器必须将选择子加载至段寄存器中,此时执行特权级的检查。

涉及:

  • CPL
  • 选择子的RPL
  • 目标段的DPL

条件:DPL>=RPL,CPL

即程序只能访问

总结:当任务的CPL改变时,可寻址范围也会改变,CPL=0时,任何特权级的数据段都是可寻址的。

作用:保护操作系统的内部表不被应用程序所读取或更改。

猜你喜欢

转载自www.cnblogs.com/Ivan-Luo/p/11747858.html