如何正确设置页目录项的权限?

ker*_*ros 2 memory paging x86 intel osdev

首先:这个问题是关于IA-32(x86)架构的。

我有一个关于旧版(非 PSE、非 PAE)寻呼的问题。在传统分页中,我们有一个包含 1024 个条目的页目录,每个条目都指向一个页表。每个页表包含 1024 个条目(这些是页),每个条目都指向一个 4096 字节对齐的物理地址。

同时,每个页目录项和页表项都保存一些标志,并且它们都有一个“U”标志(位#2):如果设置了该标志,则该页可以由用户(ring3)和用户(ring3)访问。主管(ring0);但是,如果未设置此标志,则只有管理程序 (ring0) 可以访问它。该标志通常称为“用户/管理员位”。

问题:如果我想让ring0和ring3页都在同一个页表中,该怎么办?我可以为页表中的条目设置适当的权限,但是相应的页目录条目应该指定什么权限呢?

例如:我设置了第一个页表(虚拟地址范围:0x00000000 - 0x003FFFFF)来映射物理地址范围0x00000000 - 0x003FFFFF(这涵盖了4兆字节)。第一个兆字节 (0x00000000 - 0x000FFFFF) 只能由管理员 (ring0) 访问,因此,“用户/管理员位”被清除。以下 3 MB (0x00100000 - 0x003FFFFF) 应可由用户 (ring3) 和管理员 (ring0) 访问,因此,设置“用户/管理员位”。

该页表由第一个页目录项指向。但是该页目录条目的“用户/管理员位”应该被清除(仅管理员)还是设置(用户和管理员)?有什么不同?

Mic*_*tch 5

CPU 将使用页目录项 (PDE) 或页表项 (PTE) 中最严格的权限。如果 PDE 具有管理员权限,则无论各个 PTE 使用什么,它下面的所有页表都将具有管理员权限。如果 PDE 具有用户权限级别,则 PTE 的保护级别决定最终权限级别。

\n

此行为在Intel\xc2\xae 64 和 IA-32 架构软件开发人员\xe2\x80\x99s 手册第 3A 卷中定义。

\n
\n

4.11.4 两级页表的组合保护

\n

对于任何一个页,其页目录项(一级页表)的保护属性可能与其页表项(二级页表)的保护属性不同。\n处理器检查页的保护情况它的页目录和页表条目。表 4-3 显示了当 WP 标志清零时,可能的保护属性组合提供的保护。

\n
\n

表 4-3 如下:

\n

在此输入图像描述

\n

问题的答案:如果您希望在特定 PDE 下混合具有用户和主管权限的页面,则将 PDE 设置为用户权限并相应地设置 PTE(用户或主管)。

\n