如何在页面目录条目中正确设置权限?

How to properly set privileges in page directory entries?

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

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

同时,每个页面目录条目和页面 table 条目都包含一些标志,并且它们都有一个 'U' 标志(位 #2):如果设置了此标志,则用户(ring3)和主管(ring0)都可以访问页面;但是,如果未设置此标志,则只有主管 (ring0) 可以访问它。此标志通常称为 "User/Supervisor bit".

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

例如:我将第一页table(虚拟地址范围:0x00000000 - 0x003FFFFF)设置为映射物理地址范围0x00000000 - 0x003FFFFF(这包括4兆字节)。第一个兆字节 (0x00000000 - 0x000FFFFF) 应该只能由主管 (ring0) 访问,因此,"User/Supervisor bit" 被清除。用户 (ring3) 和主管 (ring0) 都应该可以访问以下三兆字节 (0x00100000 - 0x003FFFFF),因此设置了 "User/Supervisor bit"。

第一页目录条目指向此页 table。但是应该清除该页面目录条目的 "User/Supervisor bit" (仅主管)或设置(用户和主管)?有什么区别?

CPU 将在页面目录条目 (PDE) 或页面 Table 条目 (PTE) 中使用最严格的权限。如果一个 PDE 有主管权限,那么它下面的所有页表都将有主管权限,不管单独的 PTE 使用什么。如果 PDE 具有用户权限级别,则 PTE 的保护级别决定最终权限级别。

此行为在 Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A 中定义。

4.11.4 Combining Protection of Both Levels of Page Tables

For any one page, the protection attributes of its page-directory entry (first-level page table) may differ from those of its page-table entry (second-level page table). The processor checks the protection for a page in both its page-directory and the page-table entries. Table 4-3 shows the protection provided by the possible combinations of protection attributes when the WP flag is clear.

Table 4-3 显示为:

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