分级保护域

在计算机科学中, 分级保护域（hierarchical protection domains）,，经常被叫作保护环（Protection Rings），又称环型保护（Rings Protection）、CPU环（CPU Rings），简称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 R2（还有之前版本的Windows）只用了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的EMM386 3.xx可以可选地在Ring 1运行某些模块。OpenVMS使用内核模式、管理模式、监督模式和用户模式四种模式（为了递减特权）。

## 监控模式

计算机术语中，监控模式是一个可以通过运行在系统级的软件代码变更的硬件标志。系统级任务或线程会在它们运行时设置这个标志，而用户空间应用程序不会。这个标志决定程序是否能否执行一些诸如修改关于各种描述符表的寄存器，或禁止中断一类的机器码。监控模式下的程序应该永远不会挂掉，因为他们一挂掉整个系统就崩溃了。

在某些处理器上监控模式能够执行的所有指令，包括特权指令，也能访问到不同的地址空间，存储器管理硬件和其他外围设备，操作系统通常运行在该模式。

## x86虚拟化

Intel和AMD的CPU都提供了能使hypervisor存取Ring 0硬件的x86虚拟化指令集。x86虚拟化创建了一个叫Ring -1的Ring，所以虚拟机操作系统可以直接运行在Ring 0上而不影响其他虚拟机或者宿主系统。

## 参见

- 系统调用
- 保护模式 (80286系列以及之后的x86兼容CPU)
- I/O Privilege Level (x86 CPU上的IOPL)
- Current Privilege Level (x86 CPU上的CPL0, CPL1, CPL2, CPL3)
- 系统管理模式 (SMM)
- x86虚拟化

## 延伸阅读

- David T. Rogers: A FRAMEWORK FOR DYNAMIC SUBVERSION Thesis, June 2003 (pdf)
- Glossary of Multics acronyms and terms: Ring
- William J. Caelli: "Trusted Systems" in an Age of NIIP: Lessons from the Past for the Future. 2002 (pdf)
- Haruna R. Isa, William R. Shockley, Cynthia E. Irvine: A Multi-threading Architecture for Multilevel Secure Transaction Processing 1999 (pdf)
- Ivan Kelly: Report Porting MINIX to Xen 2006
- Paul Barham, Boris Dragovic, Keir Fraser, Steven Hand, Tim Harris, Alex Ho, Rolf Neugebauer, Ian Pratt, Andrew Warfield: Xen and the Art of Virtualization 2003 (pdf)
- Marcus Peinado, Yuqun Chen, Paul England, and John Manferdelli: NGSCB: A Trusted Open System (pdf)
- Michael D. Schroeder, Jerome H. Saltzer: A Hardware Architecture for Implementing Protection Rings 1972
- Intel Architecture Software Developer's Manual Volume 3: System Programming (Order Number 243192) Chapter 4 Protection; section 4.5 Privilege levels. (pdf)
- Tzi-cker Chiueh, Ganesh Venkitachalam, Prashant Pradhan: Integrating segmentation and paging protection for safe, efficient and transparent software extensions 1999 Chapter 3: Protection hardware features in Intel X86 architecture; section 3.1 Protection checks. (pdf)
- Takahiro Shinagawa, Kenji Kono, Takashi Masuda: Exploiting Segmentation Mechanism for Protecting Against Malicious Mobile Code 2000 chapter 3 Implementation; section 3.2.1 Ring Protection (pdf)
- Boebert, William Earl and R. Kain. A Practical Alternative to Hierarchical Integrity Policies. Proceedings of the 8th National Computer Security Conference, 1985.
- Gorine, Andrei and Krivolapov, Alexander. Kernel Mode Databases: A DBMS technology for high-performance applications , Dr. Dobb's Journal, May, 2008.