CPU权限环:为什么不使用环1和2?

Meh*_*dad 89 cpu privileges x86

有关x86 CPU权限的几个问题:

  • 为什么大多数操作系统都没有使用环1和环2?是仅仅维护代码与其他架构的兼容性,还是有更好的理由?

  • 是否有任何操作系统实际使用这些环?或者他们完全没用?

Eva*_*ran 92

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

英特尔在第1和第2环中的意图是让操作系统将设备驱动程序置于该级别,因此它们具有特权,但与其余的内核代码有些分离.

第1和第2环在某种程度上,"大部分"都是特权.他们可以访问超级用户页面,但如果他们尝试使用特权指令,他们仍然像环3那样的GPF.因此英特尔计划对司机来说这不是一个糟糕的地方......

也就是说,它们确实在某些设计中有用.实际上,并不总是直接由OS.例如,VirtualBox是一个虚拟机,它将来宾内核代码放在第1环中.我也确信有些操作系统会使用它们,我不认为它现在是一种流行的设计.

  • wHOA VirtualBox使用ring 1 ?! 这真是太棒了!! 非常感谢您的信息,这是一个很好的答案!+1 (26认同)
  • 是的,详见http://www.virtualbox.org/manual/ch10.html#idp13729504! (17认同)
  • OS/2广泛使用环2作为I/O代码.这就是虚拟化这么难的原因. (9认同)
  • 来自 https://superuser.com/questions/1402537/why-do-virtualbox-guest-kernels-run-in-ring-1-instead-of-ring-3:“在环 1 中运行环 0 代码会导致很多问题额外的指令错误,因为环 1 不允许执行任何特权指令,而 guest 的环 0 包含大量特权指令。对于这些错误中的每一个,VMM 必须介入并模拟代码以实现所需的行为。虽然这有效,模拟数千个此类故障的成本非常高,并且会严重损害虚拟客户的性能。” (4认同)
  • **请注意,此时此答案是历史性的**。VirtualBox 在 6.1.0 版本中放弃了对软件虚拟化的支持,现在需要硬件虚拟化。 (3认同)

dus*_*uff 18

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


Nec*_*lis 5

根据维基百科(http://en.m.wikipedia.org/wiki/Ring_(computer_security)),环1和2用于驱动程序(环1),客户操作系统(环1)和i/o特权代码(环2),超级遮阳板位于-1/0(取决于超级遮阳板),而不是我之前所说的1.

然而,额外的两个戒指从来没有真正帮助,因此很少使用.TBH,大多数使用环1和2的代码都使用它们的原始用途(例如虚拟机管理程序)进行半重新调整.现在大多数Windows代码似乎将系统视为只有两个级别(内核和用户),可能是由于进入和离开内核域的相关开销

  • Windows只使用两个环,因为它被设计为在其他处理器(现已不存在)上运行,只有两个处理器. (3认同)
  • 我想你在某处错过了一个`-`。您确定管理程序使用环 1 吗? (2认同)