2012-11-17 46 views
4

我知道一般情况下,CPU可以以两种模式之一运行: 高级权限模式,在该模式下可以访问硬件中的“安全”区域,以及低级权限模式在访问其余的cpu函数时使用。特权级别的实现

我也明白,有某种形式的保护机制强制只有操作系统可以在处理器上运行,而处于高级特权模式(有时称为环0),并且当任何用户空间进程正在运行的处理器处于低级特权模式(环3)。

我的问题是这样的: cpu如何区分运行在ring 0模式下的OS进程和运行在ring 3上的用户空间进程?那里有什么机制确保用户级别的流程永远不会获得0级特权级别?

+1

http://stackoverflow.com/questions/13185300/where-is-the-mode-bit 检查出来 – Fingolfin

回答

4

这是依赖于处理器,但我会与x86。

CPU不理解进程的想法。这是切换当前正在运行的代码的操作系统抽象。 CPU了解运行代码所处页面的权限

在寻呼操作系统中,OS代码存在于页表中标记为超级用户的页面中,而用户模式代码在页面中标记为用户模式表。当CPU访问任何内存位置(在本例中为当前通过EIP的指令)时,CPU会执行虚拟内存查找。查找完成后,CPU查看页表,并能够检查管理员/用户模式标志并以此方式解释当前指令。

+0

我实际上对CPU本身管理在特权级别之间切换的方式更感兴趣。也就是说,在某些时候,CPU必须以用户模式级别运行(环3),然后,需要完成一些需要环0权限的事情。当这个新命令被加载导致当前CPU的特权级别(CPL)改变时,会发生什么过程? – crimsonsky2005

+0

好,值得肯定的是,这是一件非常复杂的事情。你想知道实际电路中会发生什么吗?因为那样我就帮不了你。 – Linuxios

0

INT指令自动更改CPU的标志/状态/状态寄存器,以便执行特权指令。 CPU的环形/特权级别由CPU内的标志/状态/状态寄存器指示。特权指令与状态寄存器的某些位进行“与”运算。