0

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

经过我的计算,我得到:

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

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

非常感谢您的帮助。

4

1 回答 1

0

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

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

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

于 2017-08-07T07:29:48.623 回答