1

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

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

我觉得这句话令人困惑,因为内核模式下的进程可以是用户程序正在运行的进程,也可以是内核程序(用户进程与系统进程)。那么该声明指的是哪个?或者只要进程当前在内核模式下执行,两者都是?

如果这个语句也指用户程序正在运行的进程(用户进程),那么我们已经知道只有在进程切换到内核模式时才能进行内存访问,那么就不需要SUP位了。

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

4

2 回答 2

2

如果您对 Intel CPU 的工作有任何疑问,请查阅手册,而不是任何随机的互联网页面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位禁用从设置了XD的页面获取。

于 2016-08-31T14:15:38.610 回答
0

这只是检查 CPU 是否在 ring0 中。CPU 并不真正了解进程:您如何进入 ring 0 并不重要,只是 CPU 当前正在执行内核代码。(即可以运行特权指令)。

有关完整详细信息,请参阅 Margaret 的更详细答案。

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

于 2016-08-31T10:36:43.623 回答