X86 CPU特权环:为什么环1和环2不是';你没用过吗?

X86 CPU特权环:为什么环1和环2不是';你没用过吗?,x86,cpu,privileges,X86,Cpu,Privileges,关于x86 CPU特权环的几个问题: 为什么大多数操作系统都不使用环1和环2?这仅仅是为了保持代码与其他体系结构的兼容性,还是有更好的理由 有没有实际使用这些环的操作系统?还是完全没有使用 作为一名操作系统爱好者,我发现由于分页(现代保护模型的主要部分)只有特权(环0,1,2)和非特权的概念,因此环1和环2的好处大大减少 英特尔拥有环1和环2的目的是让操作系统将设备驱动程序置于该级别,因此它们是有特权的,但在某种程度上与内核代码的其余部分分离 环1和环2在某种程度上是“大部分”特权。他们可以访

关于x86 CPU特权环的几个问题:

  • 为什么大多数操作系统都不使用环1和环2?这仅仅是为了保持代码与其他体系结构的兼容性,还是有更好的理由

  • 有没有实际使用这些环的操作系统?还是完全没有使用


作为一名操作系统爱好者,我发现由于分页(现代保护模型的主要部分)只有特权(环0,1,2)和非特权的概念,因此环1和环2的好处大大减少

英特尔拥有环1和环2的目的是让操作系统将设备驱动程序置于该级别,因此它们是有特权的,但在某种程度上与内核代码的其余部分分离

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


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

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

根据Wikipedia上的页面,环1和环2用于驱动程序(环1)、来宾操作系统(环1)和i/o权限代码(环2),虚拟机监控程序处于-1/0(取决于HyperVisor)状态,而不是我前面说过的1


然而,额外的两个戒指从未真正起到作用,因此很少使用。TBH,大多数使用环1和环2的代码已经从最初的用途(如虚拟机监控程序)半重新调整了它们的用途。如今,大多数windows代码似乎只将系统视为两个级别(内核和用户),这可能是由于进入和离开内核区域的开销造成的。

这可能有助于VirtualBox使用ring 1?!那真是太棒了!!非常感谢你提供的信息,这是一个很好的答案+1OS/2广泛使用环2进行I/O代码。这就是虚拟化如此困难的原因。从:“在环1中运行环0代码会导致许多额外的指令错误,因为环1不允许执行任何特权指令,而guest的环0包含大量特权指令。对于这些故障中的每一个,VMM都必须介入并模拟代码以实现所需的行为。虽然这是可行的,但是模拟数千个这样的故障是非常昂贵的,并且会严重影响虚拟化客户机的性能。“我想你错过了一个
-
。你确定虚拟机监控程序使用环1吗?呵呵,我没想,应该是-1中的hyper-visors和1中的来宾操作系统,它们将更新quickWindows只使用两个环,因为它被设计为在其他只有两个环的处理器(现在已经失效)上运行。在我看来,切换模式的开销很小。据我所知,只有硬件可以为cpu分配更多特权(比如如果发生IO完成中断)。如果这种权限切换发生在硬件中,我怀疑切换环是否很重要。我认为Windows、Linux或MacOS只使用环中最极端的两个环,因为架构师为诸如操作系统托管的虚拟化之类的东西保留了中间环。