CPL字段何时以及如何变化?

时间:2016-09-01 18:52:48

标签: linux-kernel x86 cpu

处理器在CPL字段中维护当前权限级别。我想知道CPL字段从3变为0时的所有可能情况,反之亦然。例如,当用户进程调用系统调用时,CPL字段可能会从3更改为0。

此外,请尝试详细说明在更改CPL字段之前内核/ CPU内部的内容。

注意:我已经阅读了几篇文章,解释了如何使用CPL,RPL和DPL来强制执行保护。我无法理解CPL何时以及如何改变。

1 个答案:

答案 0 :(得分:2)

这是一个非常深入的问题。答案取决于您正在查看的内核。通常,CPL仅在上下文切换期间(可能是从内核到用户空间的初始切换)和系统调用期间发生变化。

内核需要在全局描述符表中设置用户模式(CPL 3)段。然后将段选择器(CS,DS,ES,FS,GS)设置为CPL = 3段值。

这是一个很好的参考:http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection/

另请参阅英特尔手册。 https://www-ssl.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html(特别是第3A卷,第5-7页是您正在寻找的)