有几个关于x86 CPU特权环的问题:
发布于 2011-07-16 00:23:31
作为一名业余操作系统作者,我发现由于分页(现代保护模型的主要部分)只有特权(环0,1,2)和非特权的概念,因此环1和环2的好处大大减少。
英特尔设置环1和环2的目的是让操作系统将设备驱动程序放在该级别,因此它们具有特权,但与内核代码的其余部分有所分离。
环1和环2在某种程度上是“大部分”特权的。他们可以访问管理页面,但如果他们试图使用特权指令,他们仍然会像ring 3那样使用GPF。因此,这不是一个英特尔计划的驱动程序的坏地方…
也就是说,它们确实在一些设计中有用武之地。事实上,并不总是由操作系统直接执行。例如,VirtualBox,一个Virtual Machine,将客户内核代码放在环1中。我也确定一些操作系统确实使用了它们,只是我不认为它目前是一个流行的设计。
发布于 2011-07-16 00:31:11
从操作系统设计的角度来看,拥有多个特权环是x86的一个奇怪之处--大多数其他CPU只有两种模式(管理员和用户)。因此,将操作系统设计为需要多个特权模式将立即阻止将其移植到任何其他CPU。此外,许多现代虚拟化包不能正确模拟除0和3以外的特权级别,这使得使用这些级别的OSes更难测试。
发布于 2011-07-16 00:31:33
根据维基百科在Ring Security上的页面,环1和环2用于驱动程序(环1)、客户操作系统(环1)和i/o特权代码(环2),虚拟机管理程序位于-1/0 (取决于超级管理程序),而不是我之前所说的1。
然而,额外的两个环从来没有真正的帮助,因此变得很少使用。TBH,大多数使用环1和环2的代码已经将它们从原来的用途(如虚拟机管理程序)半重新调整了用途。如今大多数windows代码似乎将系统视为只有两个级别(内核和用户),这可能是由于进入和离开内核领域的相关开销。
https://stackoverflow.com/questions/6710040
复制相似问题