CPU Privilege Rings: Why rings 1 and 2 aren't used?

A couple of questions regarding the x86 CPU privilege rings:

  • Why aren't rings 1 and 2 used by most operating systems? Is it just to maintain code compatibility with other architectures, or is there a better reason?

  • Are there any operating systems which actually use those rings? Or are they completely unused?

40731 次浏览

作为一个业余操作系统编写者,我发现由于分页(现代保护模型的主要组成部分)只有特权(环0,1,2)和非特权的概念,环1和环2的好处大大减少。

Intel 使用环1和环2的目的是为了让操作系统将设备驱动程序放在那个级别,因此它们具有特权,但是在某种程度上与其他内核代码相分离。

环1和环2在某种程度上是“大部分”特权的。他们可以访问主管页面,但是如果他们尝试使用特权指令,他们仍然像环3一样 GPF。所以对于驾驶员来说,这并不像英特尔计划的那样是个坏地方。

也就是说,它们在一些设计中确实有用。事实上,并不总是直接由操作系统。例如,VirtualBox(一个 虚拟机)将来宾内核代码放在环1中。我也确信一些操作系统确实使用了它们,我只是不认为这是一个流行的设计目前。

从操作系统设计的角度来看,拥有多个特权环是 x86的一个奇特之处——大多数其他 CPU 只有两种模式(管理员和用户)。因此,设计一个需要多个特权模式的操作系统将立即阻止它被移植到任何其他 CPU。此外,许多现代虚拟化包不能正确地模拟0和3以外的特权级别,这使得使用这些级别的操作系统更难测试。

根据维基百科关于 Ring 安全公司的页面,环1和环2用于驱动程序(环1)、客户操作系统(环1)和 i/o 特权代码(环2) ,虚拟机监控程序位于 -1/0(取决于 hypervisor) ,而不是我之前说的1。

然而,额外的两个环从来没有真正帮助,因此变得很少使用。TBH,大多数使用环1和环2的代码从最初的使用(比如虚拟机监控程序)开始就进行了半重用。如今,大多数 windows 代码似乎将系统视为只有两个级别(内核和用户) ,这可能是由于进入和离开内核的开销造成的。