当CS寄存器的CPL值等于0时,x86 CPU是否处于内核模式?

时间:2019-04-04 02:05:50

标签: x86 operating-system kernel-mode

CS寄存器的最后两位包含当前特权级别(CPL),该特权级别可以包含值0123

如果CPL的值为0,是否表示CPU处于内核模式(因此可以执行所有操作)?还是为了使CPU进入内核模式还必须执行其他操作?

2 个答案:

答案 0 :(得分:2)

是的,CPL = 0表示内核/主管模式。但是,在实模式下,CPL也为0,但未反映在CS中。同样,在虚拟8086模式下,CPL为3,而不反映在CS中。

有些相关,您也可以通过使用SMSW指令检查CR0的位0(返回CR0的低16位)来检查保护模式。在虚拟8086模式下,该位将设置为1,因为CPU只能通过保护模式到达该位置(您可以将前者视为后者的子模式)。

答案 1 :(得分:1)

CPL值为0称为内核模式。顺便说一下,将小于3的CPL值称为主管模式,将3的CPL值称为用户模式。

ENCLU指令(Intel SGX指令集的一部分)只能在用户模式下执行。我知道这是唯一只能在用户模式下执行的指令。如果CPL <3,则执行ENCLU会导致无效的操作码异常。

在某些方面,超级用户模式代码可以阻止自己执行,但仍然允许用户模式代码执行它们

  • 如果设置了CR4.SMEP,则如果超级用户模式代码试图从“用户”页面获取指令,则会发生页面错误。
  • 如果设置了CR4.SMAP,则在超级用户模式代码尝试从“用户”页面访问数据时,将发生页面错误。

值得注意的是,性能事件选择寄存器包含称为用户模式标志和操作系统模式标志的标志。在这种情况下,“用户”模式包括特权级别1、2和3,而“操作系统”模式包括特权级别0。