4.5.1 段级保护

保护机制概述  

  保护机制是可靠的多任务运行环境所必须的。它可用于保护各个任务免受相互之间的干扰。在软件开发的任何阶段都可以使用段级和页级保护来协助寻找和检测涉及问题和错误。当程序对错误内存空间执行一次非期望的引用,保护机制可以阻止这种操作并报告此类事件。

  保护机制可以被用于分段和分页机制。处理器寄存器的2个比特位定义了当前执行程序的特权级,称为当前特权级CPL(Current Privilege Level)。在分段和分页地址转换过程中,处理器将对CPL进行验证。

  通过设置控制寄存器CR0的PE标志(位0)可以让处理器工作在保护模式下,从而也就开启了分段保护机制。一旦进入保护模式,处理器中并不存在明确的控制标志来停止或启用保护机制。不过基于特权级的的保护机制部分可以通过把所有段选择符和段描述符的特权级都设置为0级来隐含的关闭。这种处理方式可以在段之间禁止特权级保护壁垒,但是其他段长度和段类型检查等保护机制仍然起作用。

  设置控制寄存器CR0的PG标志(位31)可以开启分页机制,同时也开启了分页保护机制。同样,处理器中也没有相关的标志用来在分页开启条件下禁止或开启页级保护机制。但是通过设置每个页目录项和页表项的读/写(R/W)标志和用户/超级用户(U/S)标志,我们可以禁止页级保护机制。设置这两个标志可以使得每个页面都可以被任意读写,因此实际上也就禁止了页级保护。

  对于分段保护机制,处理器使用段寄存器中的选择符(RPL和CPL)和段描述符中各个字段执行保护验证。对于分页机制,则主要利用页目录和页表项中的R/W和U/S标志来实现保护操作。

段级保护

  在保护模式下,80x86提供了段级和页级保护机制。这种保护机制根据特权级(4级段保护和2级页保护)提供了对某些段和页面的访问限制能力。例如,操作系统代码和数据要存放在比普通程序具有更高特权级的段中。此后处理器的保护机制将会限制应用程序只能按照受控制的和规定的方式访问操作系统的代码和数据。

  当使用保护机制时,每个内存引用都将受到检查以验证内存引用符合各种保护要求。因为检查操作是与地址变换并行的操作,所以处理器的性能并没有受到影响。保护检查可与分为以下几类:

* 段界限检查

* 段类型检查

* 特权级检查

* 可寻址范围限制

* 过程入口点限制

* 指令集限制

所有违反保护的操作都将导致产生一个异常。

posted @ 2014-02-08 10:56  萧瑟秋风_cyz  阅读(296)  评论(0编辑  收藏  举报