页表大小和可用物理地址

时间:2017-05-14 16:35:43

标签: mmu virtual-address-space page-tables

让我们假设我们有4 GiB的RAM,我们使用4 kiB的页表大小,32位地址。

经过我的计算,我得到了:

  • 我们只能处理最多2 ^ 32个地址;
  • 每个页面表共有2 ^ 20个条目;
  • 总共有4 GiB / 4 kiB = 1048576页。

但我无法理解的是,如果一个页表有2 ^ 20个条目,我们已经用这个页表覆盖了所有可能的地址。 如果每个进程都有自己的页表,怎么可能?那么应该可以在多个页面表上使用相同的物理地址,这可能会导致严重的问题,或者我错过了什么?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

理论上,每个进程都可以映射所有内存,但实际上,进程地址空间中的大多数页面都没有映射,为其他进程留下了大量内存。

此外,将相同的页面映射到两个不同的地址空间不一定会导致问题。它是针对进程间通信的进程之间共享的共享库,内核页面和内存完成的。

(内核页面可以映射到每个进程,以便内核可以在任何进程的系统调用期间访问自己的页面。这些页面受到保护,因此应用程序代码无法访问它们。)