进程'页表是否映射到内核地址空间?

时间:2017-01-04 01:39:59

标签: windows systems-programming virtual-address-space page-tables

我正在进行Windows系统编程,并想知道我是否可以在源代码级别访问进程的页表。

以下是我对与虚拟内存相关的页面表的了解。

假设用户只是在Windows操作系统(32位)上运行一个名为“A”的进程。

首先,操作系统为A进程创建并维护4GB虚拟地址空间。

(2GB是内核地址空间,另外2GB是用户地址空间。

用户地址空间中的任何代码都无法直接访问内核地址空间。)

然后,操作系统为物理内存中的A进程创建并维护一个页表,以将虚拟内存地址映射到物理内存地址。

这是我的问题。

操作系统为A进程创建页表后,该页表是否映射到A的内核地址空间,以便用户可以从源代码间接访问页表?

或者页面表没有映射到任何A的虚拟地址空间,而只是驻留在物理内存中,因此用户无法访问页面表?

1 个答案:

答案 0 :(得分:1)

为了加快页表的操作,内核通常会使页面目录中的一个条目指向页面目录。这使得所有页表都可以在地址空间中映射和访问。但是,正如Raymond Chen指出的那样,无法从用户模式访问这些内容。没有充分的理由允许应用程序弄乱页面表。有分配(和映射)地址空间区域的API,应该使用它们。

  

您的意思是'A'进程'虚拟内存的内核地址空间中有页表条目,这些条目映射到驻留在物理内存中的实际页表。因此,只有在具有内核模式的情况下,进程才能访问这些页表条目,但进程没有它。因此,该进程毕竟无法访问其页表。是不是?

右。页面的可访问性由当前权限级别(用户vs内核),段访问权限和页面访问权限决定。系统中使用的这些特定组合不允许在用户模式下运行的代码访问内核数据,包括页面目录和页表。