Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363006
  • 博文数量: 38
  • 博客积分: 1935
  • 博客等级: 上尉
  • 技术积分: 724
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-23 16:34
文章存档

2010年(4)

2009年(33)

2008年(1)

分类:

2009-05-03 18:23:02

  x86 的 protected 模式是构建在段机制上,实质上 protected 模式应称为 segmentation protected 模式。整个 protected 模式的核心是 Privilege(权限),众多机制都是围绕 privilege 这个核心元素来构建。


3.1、 保护的意图
  在久远的 real 模式下的 dos 平台,还是那种“硬件为软件服务,软件服从硬件”,现今的 processor 与 软件的之间的的关系已经由传统的关系变为互相依靠而又互相影响。
  软件服务硬件的时候,又反过来影响硬件的设计。硬件为软件提供平台的时候,又反过来受软件设计的影响不断完善硬件。在 dos 单任务的系统无所谓保护不保护。在多任务系统出现后,processor 同时运行多个任务时那么就需要为每个任务的正确运行提供一种保障措施。保证每个任务的数据是安全的。 processor 就要提供这么一个保护的借施。
  随着软件日益复杂及庞大。processor 不断完善自身提供更强大的功能。一个典型的例子是:NX (不可执行)页出现从硬件层面上解决了系统软件防止数据区不可执行的功能。以及 processor 的 virtualzation 虚拟化技术的出现,从硬件层提供了支持。


3.2、 保护着什么 ?
  protected 的核心目的保护些什么?这是值得思考的问题,其实就是保护数据。让属于自己权限范围的数据不被他人非法地使用或修改。这些数据是任务的执行代码或任务的堆栈数据等。
  系统软件划分几个层次的数据,将这些数据隔离起来。系统软件核心数据不受用户软件的干扰和破坏,从而增强系统的壮健性,也是主要目的。每个用户软件的数据也可被隔离互不干扰。



3.3、 怎样保护 ?
  前面提过 x86 保护核心是 privilege,x86 processor 定义了 4 个 privilege level(权限级别)从 level0 ~ level3,代表最高权限级别的 0 级到最低权限的 3 级。0 级可访问所有硬件资源,3 级访问有限的硬件资源。

3.3.1、 如何对数据进行隔离 ?
  x86 提供的机制是:对每一个被隔离的数据区进行属性定义,即通过每个数据区进行定义他们的属性,包括它们的位置、长度大小、被访问的权限等属性。定义每个数据区的不同的属性从而将它们互相隔离。
  这种属性的定义是通过 descriptor(描述符)数据结构进行定义的。代码区域对应的是 code segment descriptors,而数据区域则对应 data segment descriptors。
  实际上,descriptor 有两种性质:一种是直接对数据区进行属性定义,如上述的代码段和数据段。这种 descriptor 直接定义了数据区的位置、段长度、段相关的访问权限以及数据段的其他属性。另一种则是描述一种间接访问措施,这种间接访问措旋是通过另一个被称为 gate(门)的数据结构来实现的。


3.3.2、 数据区访问权限的审查
  为每个数据区域定义 descriptor 时,根据需要定义这些数据区域的访问权限。系统软件核心部件总是拥有最高级别的权限,用户软件则总是拥最低级别的权限。
  保证用户级别代码不能访问系统级别代码或数据的通过审查它们的权限级别,经过审查通过后才能访问。一个简单的原则是低权限不能访问属于最高权限级别的数据。level 3 只能访问属于 level 3 级别的数据,level 2 可以访问属于 level 2 级别和属于 level 3 级别的数据。
  

3.3.3、 数据区的访问途径
  所有数据访问都是基址+偏移,这个基址在 descriptor 的定义。对于直接访问方式偏移值是程序逻辑中指出。对于间接访问方式基址和偏移值都是间接数据层中指出。
 
 
 
 
 
 
:)
阅读(979) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~