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


Answers:


111

作为一名业余操作系统作者,我发现由于分页(现代保护模型的重要组成部分)仅具有特权(0,1,2环)和非特权的概念,因此大大降低了对环1和2的好处。

英特尔打算将环1和环2设置为操作系统将设备驱动程序置于该级别,因此它们具有特权,但与内核代码的其余部分有所区别。

环1和2具有“大部分”特权。他们可以访问主管页面,但是如果尝试使用特权指令,它们仍会像环3一样使用GPF。因此,对于英特尔计划的驱动程序来说,这不是一个坏地方...

也就是说,它们确实在某些设计中有用。实际上,并非总是直接通过OS。例如,VirtualBox虚拟机)将来宾内核代码放入环1。我还可以确定某些操作系统确实使用了它们,但我暂时不认为这是一种流行的设计。


28
哪位VirtualBox使用环1?那真是太棒了!! 非常感谢您提供的信息,这是一个很好的答案!+1
user541686

10
OS / 2将Ring 2广泛用于I / O代码。这就是为什么很难进行虚拟化的原因。
kinokijuf 2014年

来自superuser.com/questions/1402537/…:“环1中运行环0代码会导致很多其他指令错误,因为不允许环1执行任何特权指令,而来宾的环0包含很多特权指令。在这些故障中,VMM必须介入并仿真代码以实现所需的行为。在这种情况下,仿真数千个此类故障非常昂贵,严重损害了虚拟客户的性能。”
达斯汀·奥普雷

24

从OS设计的角度来看,具有多个特权环是x86的怪异-大多数其他CPU仅具有两种模式(管理者和用户)。这样,将OS设计为需要多种特权模式将立即阻止将其移植到任何其他CPU。此外,许多现代虚拟化程序包无法正确模拟0和3以外的特权级别,这使得使用这些级别的OS更加难以测试。


7

根据Wikipedia在Ring Security上的页面,环1和2用于驱动程序(环1),客户机操作系统(环1)和I / O特权代码(环2),系统管理程序位于-1/0(取决于系统管理程序)不是我之前所说的1。

但是,多余的两个环从没有真正帮助过,因此很少使用。TBH,大多数使用环1和2的代码已将它们从其原始用途(例如虚拟机管理程序)中半改了用途。如今,大多数Windows代码似乎都将系统视为只有两个级别(内核和用户),这可能是由于与进入和离开内核土地相关的开销所致。


1
我想你错过了-某个地方。您确定管理程序使用环1吗?
2011年

呵呵,没想到,应该是-1中的超级管理程序,而应该是1中的来宾OS,将会很快更新
Necrolis 2011年

4
Windows仅使用两个环,因为它被设计为在只有两个的其他处理器(现已失效)上运行。
大卫,

在我看来,切换模式几乎没有任何开销。据我了解,只有硬件可以为cpu分配更多特权(例如,发生IO完成的中断)。如果这种特权切换发生在硬件中,我怀疑切换振铃是很重要的。我认为Windows,Linux或MacOS仅使用两个最极端的环,因为架构师将中间环保留用于os托管虚拟化之类的事情。
Nate Symer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.