永发信息网

IA-32基本保护机制是如何实现的

答案:2  悬赏:40  手机版
解决时间 2021-12-29 21:24
  • 提问者网友:不爱我么
  • 2021-12-29 17:17
IA-32基本保护机制是如何实现的
最佳答案
  • 五星知识达人网友:十鸦
  • 2021-12-29 18:29
1.不同任务之间的保护
通过把每个任务放置在不同的虚拟地址空间的方法来实现任务与任务的隔离,达到应用程序之间保护的目的。虚拟地址到物理地址的映射函数在每个任务中进行定义,随着任务切换,映射函数也切换。任务A的虚拟地址空间映射到物理地址空间的某个区域,而任务B的虚拟地址空间映射到物理地址空间的另外区域,彼此独立,互不相干。因此,两个不同的任务,尽管虚拟存储单元地址相同,但实际的物理存储单元地址可以不同。
每个任务各有一组独立的映射表,即具有不同的地址转换函数。在80386上,每个任务都有自己的段表及页表。当处理器进行切换并执行新的任务时,这种任务切换的一个重要部分,就是为新任务切换任务的转换表。为了使操作系统与所有的应用程序相隔离,可以把操作系统存储在一个单一的任务中。然而,我们即将看到,在一个任务内操作的保护机制,更适合于保护操作系统,使其不被应用程序破坏。这种机制,使操作系统由所有任务共享,并且可在每一任务中对其进行访问,而且仍然保护了操作系统,使其不被应用程序破坏。这种保护操作系统的方法,是把操作系统存储在虚拟地址空间的一个公共区域,然后,再使每一任务按此区域分配一个同样的虚拟地址空间,并进行同样的虚拟--物理地址映射。各个任务公用的这部分虚拟地址空间,被称为全局地址空间。
仅由一个任务占有的虚拟地址空间部分,即不被任何其它任务共享的虚拟地址部分,称为局部地址空间。局部地址空间包含的代码和数据,是任务私有的,需要与系统中的其它任务相隔离。
再每个任务中有不同的局部地址空间。因此,两个不同的任务中,对同一虚拟地址的访问,实际上转换为不同的物理地址。这就使操作系统对每 个任务的存储器,可以赋予相同的虚拟地址,仍然保证任务的隔离。另一方面,对全局地址空间中同一虚拟地址的访问,在所有任务中都转换为同样的物理地址,从而支持公共的代码及数据的共享,例如对操作系统的共享。
2.同一任务内的保护
在一个任务之内,定义有四种执行特权级别,用于限制对任务中的段进行访问。按照包含在段中的数据的重要性和代码的可信程度,给段指定特权级别。把最高的特权级别分配给最重要的数据段和最可信任的代码段。具有最高特权级别的数据,只能由最可信任的代码访问。给不重要的数据段和一般代码段分配较低的特权级别。具有最低特权级别的数据,可被具有任何特权级别的代码访问。 特权级别用数字0、1、2和3表示,数字0表示最高特权级别,而数字3表示最低特权级别,即数字较大的级别具有较低的特权。每一特权级都有各自独立的程序堆栈,以避免与共享栈区有关的保护问题。当一个程序从一个特权级切换到另一个特权级执行时,程序使用的堆栈,从原特权级的栈段改变为新特权级的栈段。对于堆栈段寄存器 SS来说,描述符特权级(DPL)必须等于当前代码段的特权级(CPL)。从一个特权级切换到另一特权级的方法将在控制转移方法一文中描述。
全部回答
  • 1楼网友:青灯有味
  • 2021-12-29 19:08
任何模式下段寄存器都是16位。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯