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

Memory 如何在页面目录条目中正确设置权限?,memory,x86,intel,paging,osdev,Memory,X86,Intel,Paging,Osdev,首先:这个问题是关于IA-32(x86)体系结构的 我有一个关于遗留(非PSE、非PAE)分页的问题。在传统分页中,我们有一个包含1024个条目的页面目录,每个条目指向一个页面表。每个页表包含1024个条目(这些是页),每个条目指向一个4096字节对齐的物理地址 同时,每个页面目录条目和页面表条目都有一些标志,并且它们都有一个“U”标志(位#2):如果设置了该标志,则用户(ring3)和管理员(ring0)都可以访问该页面;但是,如果未设置此标志,则只有主管(ring0)可以访问它。此标志通常称

首先:这个问题是关于IA-32(x86)体系结构的

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

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

问题:如果我想在同一个页面表中同时包含ring0和ring3页面,我应该怎么做?我可以使用适当的权限设置页面表中的条目,但是相应的页面目录条目应该指定什么权限

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


此页表由第一个页目录条目指向。但该页面目录条目的“用户/主管位”应清除(仅主管)或设置(用户和主管)?区别是什么?

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

此行为在中定义

4.11.4将两种页面表格级别的保护结合起来

对于任何一个页面,其页面目录条目的保护属性(第一级 页面表格)可能与其页面表格条目(二级页面表格)不同。 处理器在其页面目录和 页面表条目。表4-3显示了当WP标志清除时,保护属性的可能组合提供的保护

表4-3如下所示:

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