分级保护域,经常被叫作保护环,又称环型保护、CPU环,简称Rings。这是一种用来在发生故障时保护数据和功能和避免恶意操作的设计方式。
基本介绍
- 中文名:分级保护域
- 领域:计算机
简介
电脑作业系统提供不同的资源访问级别。在计算机体系结构中,Rings是由两个或更多的特权态组成。在一些硬体或者微代码级别上提供不同特权态模式的CPU架构上,保护环通常都是硬体强制的。Rings是从最高特权级(通常被叫作0级)到最低特权级(通常对应最大的数字)排列的。在大多数作业系统中,Ring 0拥有最高特权,并且可以和最多的硬体直接互动(比如CPU,记忆体)。
Rings之间的特殊门是被提供用来允许外层Ring在预定义的方式内访问内层Ring的资源用的,内层Ring可以随便使用外层Ring的资源。正确使用Rings间的门可以阻止某个Ring或者特权级的程式故意滥用其他程式的资源,提升安全性。例如,某个间谍软体作为一个在Ring 3运行的用户程式,它在不通知用户的时候打开摄像头应该会被阻止,因为访问硬体需要使用被驱动程式保留的Ring 1的方法。浏览器一类在高Ring级别运行的程式必须请求许可权才能访问网路,也就是受低Ring级别限制的资源。
实现
多Rings保护机制是Multics作业系统提出的革命性概念之一,Multics是今天的Unix作业系统家族的一个高安全性的前任。 由于GE 645不支持硬体Rings, 所以Multics通过软体捕获Rings的转换。 它的继承者,Honeywell 6180,硬体实现了支持8个Rings。不过,最通用的作业系统仅用了2个Rings,即使他们运行的硬体提供了更多的特权态。例如 Windows 7 和 Windows Server 2008 (还有它们的前任) 只用了2个Rings:Ring 0 对应核心模式,Ring 3对套用户模式,原因是运行Windows早期版本的硬体只支持2个保护等级。
大部分现代CPU架构(包括很流行的Intel x86架构)中都有某种形式的保护环,但Windows NT或者Unix这类作业系统没有完全使用这个特性。相比之下OS/2使用的更多,它用了3个Rings级别:Ring 0用于核心代码和驱动程式, Ring 2用于某些需要特权的代码(例如需要I/O许可权的用户程式),Ring 3用于非特权代码(几乎所有的用户程式都在这一级别)。在DOS下,核心、驱动和应用程式都运行在Ring 3(然而。这也是保护模式驱动和DOS扩展专用的级别;实模式的作业系统没有有效的保护措施),而像EMM386这样的386记忆体管理程式运行在Ring 0。特别的,DR-DOS的EMM3863.xx可以可选地在Ring 1运行某些模组。OpenVMS使用核心模式、管理模式、监督模式和用户模式四种模式(为了递减特权)。
在Xen虚拟机被广泛使用的情况下,人们对这种设计结构又产生了新的想法。在宏核心和微核心的讨论中(尤其是在Usenet邮件列表和网上论坛中),微软的Ring 1设计结构作为他们的NGSCB和像Intel VT-x一样的固件嵌入式Hypervisors的一部分。
监控模式
计算机术语中,监控模式是一个可以通过运行在系统级的软体代码变更的硬体标誌。系统级任务或执行绪会在它们运行时设定这个标誌,而用户空间应用程式不会。这个标誌决定程式是否能否执行一些诸如修改关于各种描述符表的暂存器,或禁止中断一类的机器码。监控模式下的程式应该永远不会挂掉,因为他们一挂掉整个系统就崩溃了。
在某些处理器上监控模式能够执行的所有指令,包括特权指令,也能访问到不同的地址空间,存储器管理硬体和其他外围设备,作业系统通常运行在该模式。
系统管理模式
最近Intel和AMD的CPU都提供了能使hypervisor控制Ring 0的硬体访问的x86虚拟化指令集。虽然他们互不兼容,但是他们都创建了一个叫Ring -1的新Ring,所以客户机作业系统可以直接运行在Ring 0上而不影响其他客户机或者宿主系统。