页表中SUP位的含义

The meaning of SUP bit in page tables

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

"if the SUP is set then only a process in kernel mode can access that page. Versus if it is not set then a process in user mode can access it."

我觉得这个说法令人困惑,因为内核模式下的进程可以是用户程序所在的进程 运行 或内核程序(用户进程与系统进程)。那么该声明指的是什么?还是只要进程当前在内核模式下执行?

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

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

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

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

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

当您对英特尔 CPU 的工作有任何疑问时,请参考 Manuals,而不是任何随机的互联网页面1.

第 4.6 节中描述了寻呼访问权限。


CPU区分一个地址和一个访问(到一个地址)的权限,每个权限是user-modesupervisor-mode(其中 supervisor-mode 旨在获得更多特权)。

访问模式

Every access to a linear address is either a supervisor-mode access or a user-mode access. For all instruction fetches and most data accesses, this distinction is determined by the current privilege level (CPL): accesses made while CPL < 3 are supervisor-mode accesses, while accesses made while CPL = 3 are user-mode accesses.
Some operations implicitly access system data structures with linear addresses; the resulting accesses to those data structures are supervisor-mode accesses regardless of CPL.
[...]
All these accesses are called implicit supervisor-mode accesses regardless of CPL. Other accesses made while CPL < 3 are called explicit supervisor-mode accesses.

所以当一个程序访问一个内存位置时,它的CPL决定了访问模式,用户程序运行在CPL = 3,因此它们只执行用户模式访问。
内核改为执行主管模式访问,因为它 运行s 在 CPL = 0.

地址模式

Access rights are also controlled by the mode of a linear address as specified by the paging-structure entries controlling the translation of the linear address. If the U/S flag (bit 2) is 0 in AT LEAST ONE of the paging-structure entries, the address is a supervisor-mode address. Otherwise, the address is a user-mode address.

SUP位,正式名称为U/S,然后决定一个地址的模式。
因为它也出现在 PDE 中(不仅在 PTE 中),所以我们的想法是采用更严格的设置,因此在任何级别的一个条目中设置 U/S足以使地址成为管理员模式地址。

访问权限

管理员模式地址用户模式访问总是被禁止的,尝试时会产生异常。

访问相同模式地址2和访问较低模式地址3通常是允许的,它们不相等4 虽然有多种标志改变 CPU5 的行为。

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


1包括这个
2用户模式访问用户模式地址,管理员模式访问管理员模式地址。
3 管理员模式访问用户模式地址。
4 管理员访问可以写入只读页面。
5 例如,CR0.WP 标志禁用对只读页面的写访问以供主管访问,NXE 位禁用从设置了 XD 的页面获取。