保护方式简介(3)
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:67 来源:未知
本文章共5055字,分4页,当前第3页,快速翻页:
| | 函数。在80386上,每个任务都有自己的段表及页表。当处理器进行切换并执行新的任务时,这种任务切换的一个重要部分,就是为新任务切换任务的转换表。为了使操作系统与所有的应用程序相隔离,可以把操作系统存储在一个单一的任务中。然而,我们即将看到,在一个任务内操作的保护机制,更适合于保护操作系统,使其不被应用程序破坏。这种机制,使操作系统由所有任务共享,并且可在每一任务中对其进行访问,而且仍然保护了操作系统,使其不被应用程序破坏。这种保护操作系统的方法,是把操作系统存储在虚拟地址空间的一个公共区域,然后,再使每一任务按此区域分配一个同样的虚拟地址空间,并进行同样的虚拟--物理地址映射。各个任务公用的这部分虚拟地址空间,被称为全局地址空间。 逆风编程精品 仅由一个任务占有的虚拟地址空间部分,即不被任何其它任务共享的虚拟地址部分,称为局部地址空间。局部地址空间包含的代码和数据,是任务私有的,需要与系统中的其它任务相隔离。 再每个任务中有不同的局部地址空间。因此,两个不同的任务中,对同一虚拟地址的访问,实际上转换为不同的物理地址。这就使操作系统对每个任务的存储器,可以赋予相同的虚拟地址,仍然保证任务的隔离。另一方面,对全局地址空间中同一虚拟地址的访问,在所有任务中都转换为同样的物理地址,从而支持公共的代码及数据的共享,例如对操作系统的共享。 2.同一任务内的保护 在一个任务之内,定义有四种执行特权级别,用于限制对任务中的段进行访问。按照包含在段中的数据的重要性和代码的可信程度,给段指定特权级别。把最高的特权级别分配给最重要的数据段和最可信任的代码段。具有最高特权级别的数据,只能由最可信任的代码访问。给不重要的数据段和一般代码段分配较低的特权级别。具有最低特权级别的数据,可被具有任何特权级别的代码访问。 特权级别用数字0、1、2和3表示,数字0表示最高特权级别,而数字3表示最低特权级别,即数字较大的级别具有较低的特权。为了避免模糊和混淆,在比较特权级别时,不使用“大于”或“小于”这样的术语,而使用“里面”或“内层”这样的术语表示较高特权级,级别的数字较小;使用“外面”或“外层”这样的术语表示较低特权级别,级别的数字较大。0级为最内层的特权级别,3级为最外层的特权级别,按这样的表示方法,四种特权级的层次关系如下图(图中右边的数字为特权级)所示。
 每一特权级都有各自独立的程序堆栈,以避免与共享栈区有关的保护问题。当一个程序从一个特权级切换到另一个特权级执行时,程序使用的堆栈,从原特权级的栈段改变为新特权级的栈段。对于堆栈段寄存器 SS来说,描述符特权级(DPL)必须等于当前代码段的特权级(CPL)。从一个特权级切换到另一特权级的方法将在控制转移方法一文中描述。 每个存储器段都与一个特权级别相联系。特权级别限制是指,只有足够级别的程序,才可对相应的段进行访问。在任何时候,一个任务总是在四个特权级之一下运行,任务在特定时刻的特权级称为当前特权级 (Current Privilege level),标记为CPL,即当前运行程序的特权级。每当一个程序试图访问一个段时,就把CPL与要访问的段的特权级进行比较,以决定是否允许这一访问。对给定CPL执行的程序,允许访问同一级别或外层级别的数据段。如上图所示,CodeK可访问同级的数据段DataK,也可访问外层的DataOS、 DataAP1及DataAP2等。如果试图访问内层级别的数据段则是非法的,并引起异常。如上图所示,CodeOS可访问同级的DataOS,也可访问外层的DataAP1和DataAP2等,但不能访问内层的DataK。 虽然应用程序都在最外层,但由于各个不同的应用程序存储在不同的虚拟地址空间中,所以各应用程序被隔离保护。如上图所示,最外层的CodeAP1只能访问DataAP1,不可能访问同级的另一应用程序的DataAP2;同样,CodeAP2只能访问DataAP2,不可能访问DataAP1。 本文章更多内容:<<上一页 - 1 - 2 - 3 - 4 - 下一页>> |
 本文章所属分类: 首页
→ 汇编技术
|
文章搜索
热门文章
推荐文章
最新文章
|