分级保护域,经常被叫作保护环,又称环型保护、CPU环,简称Rings。这是一种用来在发生故障时保护数据和功能和避免恶意操作的设计方式。
简介电脑操作系统提供不同的资源访问级别。在计算机体系结构中,Rings是由两个或更多的特权态组成。在一些硬件或者微代码级别上提供不同特权态模式的CPU架构上,保护环通常都是硬件强制的。Rings是从最高特权级(通常被叫作0级)到最低特权级(通常对应最大的数字)排列的。在大多数操作系统中,Ring 0拥有最高特权,并且可以和最多的硬件直接交互(比如CPU,内存)。
Rings之间的特殊门是被提供用来允许外层Ring在预定义的方式内访问内层Ring的资源用的,内层Ring可以随便使用外层Ring的资源。正确使用Rings间的门可以阻止某个Ring或者特权级的程序故意滥用其他程序的资源,提升安全性。例如,某个间谍软件作为一个在Ring 3运行的用户程序,它在不通知用户的时候打开摄像头应该会被阻止,因为访问硬件需要使用被驱动程序保留的Ring 1的方法。浏览器一类在高Ring级别运行的程序必须请求权限才能访问网络,也就是受低Ring级别限制的资源。1
实现多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的一部分。2
监控模式计算机术语中,监控模式是一个可以通过运行在系统级的软件代码变更的硬件标志。系统级任务或线程会在它们运行时设置这个标志,而用户空间应用程序不会。这个标志决定程序是否能否执行一些诸如修改关于各种描述符表的寄存器,或禁止中断一类的机器码。监控模式下的程序应该永远不会挂掉,因为他们一挂掉整个系统就崩溃了。
在某些处理器上监控模式能够执行的所有指令,包括特权指令,也能访问到不同的地址空间,存储器管理硬件和其他外围设备,操作系统通常运行在该模式。1
系统管理模式最近Intel和AMD的CPU都提供了能使hypervisor控制Ring 0的硬件访问的x86虚拟化指令集。虽然他们互不兼容,但是他们都创建了一个叫Ring -1的新Ring,所以客户机操作系统可以直接运行在Ring 0上而不影响其他客户机或者宿主系统。2
本词条内容贡献者为:
李嘉骞 - 博士 - 同济大学