页表的大小和可用的物理地址



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

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

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

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

提前感谢您的帮助。

理论上,

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

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

(内核页面

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

最新更新