页表条目属性之一是SUP位。 我在几份文件中读到:
"如果设置了SUP,那么只有内核模式的进程才能访问该页面。如果未设置,则用户模式下的进程可以访问它。"
我发现这个陈述令人困惑,因为内核模式中的进程可以是运行用户程序的进程,也可以是内核程序(用户进程与系统进程)。声明中指的是哪个?或者它是否只要进程当前在内核模式下执行?
如果此语句也涉及用户程序正在运行的进程(用户进程),那么我们已经知道只有当进程切换到内核模式时才能进行内存访问,那么就没有必要拥有SUP位。
我的猜测是SUP位意味着该页面只能由系统进程访问(不包括在内核模式下运行的用户进程),但我不确定因为我不知道如何内核代码存储在内存中,如果它被分页以及如何。
答案 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(以及许多其他内核)将内核页面锁定在内存中,并且不将它们交换到磁盘,但它们仍然被分页。