页表中SUP位的含义

时间:2016-08-31 09:44:29

标签: process kernel x86-64 paging page-tables

页表条目属性之一是SUP位。 我在几份文件中读到:

  

"如果设置了SUP,那么只有内核模式的进程才能访问该页面。如果未设置,则用户模式下的进程可以访问它。"

我发现这个陈述令人困惑,因为内核模式中的进程可以是运行用户程序的进程,也可以是内核程序(用户进程与系统进程)。声明中指的是哪个?或者它是否只要进程当前在内核模式下执行?

如果此语句也涉及用户程序正在运行的进程(用户进程),那么我们已经知道只有当进程切换到内核模式时才能进行内存访问,那么就没有必要拥有SUP位。

我的猜测是SUP位意味着该页面只能由系统进程访问(不包括在内核模式下运行的用户进程),但我不确定因为我不知道如何内核代码存储在内存中,如果它被分页以及如何。

2 个答案:

答案 0 :(得分:2)

如果您对英特尔CPU的工作有任何疑问,请咨询Manuals,而不是任何随机网页 1

分页访问权限在第4.6节中描述。​​

CPU区分地址访问(到地址)的权限,每个权限都是用户模式主管模式(其中主管模式旨在获得更多特权)。

访问模式

  

对线性地址的每次访问都是管理员模式访问用户模式访问。对于所有指令   提取和大多数数据访问,这种区别由当前权限级别(CPL)决定:进行访问   而CPL< 3是管理员模式访问,而CPL = 3时访问是用户模式访问。
  一些操作隐式访问具有线性地址的系统数据结构;由此产生的访问权限   数据结构是管理员模式访问,无论CPL   [...]
  所有这些访问都称为隐式管理程序模式   访问,无论CPL如何。 CPL时进行的其他访问< 3被称为显式管理员模式访问

因此,当程序访问内存位置时,其CPL确定访问模式,用户程序以CPL = 3运行,因此它们仅执行用户模式访问。
内核代替执行超级用户模式访问,因为它在CPL = 0时运行。

地址模式

  

访问权限也由寻呼结构条目指定的线性地址模式控制   控制线性地址的转换。 如果U / S标志(第2位)在至少一个寻呼结构中为0   条目,地址是主管模式地址。否则,地址为用户模式地址

SUP 位,正式名称为 U / S ,然后确定地址的模式。
由于它也存在于PDE中(不仅仅出现在PTE上),因此我们的想法是采用限制性更强的设置,因此在任何级别的一个条目中设置的 U / S 就足以使地址成为可能。主管模式。

访问权限

始终禁止用户模式访问主管模式地址,并在尝试时生成异常。

通常允许访问相同模式地址 2 和较低模式地址 3 ,但它们不等于 4 有各种各样的标志改变了CPU 5 的行为。

这个想法是,管理员模式访问可以做任何他们想做的事情,并减少开发者可用的表面攻击,有一些机制可以降低访问权限。

1 包括这一个。
2 用户模式访问用户模式地址,管理员模式访问管理员模式地址。
3 超级用户模式访问用户模式地址 4 主管访问可以写入只读页面 5 例如, CR0.WP 标志禁止对只读页面进行超级用户访问的写访问, NXE 位禁止从带有<的页面获取< em> XD 设置。

答案 1 :(得分:0)

只是检查CPU是否处于ring0状态。 CPU并不真正了解进程:无论你如何进入ring 0,只是CPU正在执行内核代码。 (即可以运行特权指令)。

有关详细信息,请参阅玛格丽特更详细的答案。

是的,即使在内核中,所有对内存的访问都是通过将其映射到虚拟地址来实现的。内核不会临时禁用分页以访问特定的物理地址。请注意,Linux(以及许多其他内核)将内核页面锁定在内存中,并且不将它们交换到磁盘,但它们仍然被分页。