为什么每个进程有一个页表

use*_*553 10 operating-system os161

起初我以为整个系统只有一个页面表.但是每个进程实际上有一个页表?有多个页表而不是一个页表有什么意义.

我正在实现os161的一部分

Ale*_*nze 13

页表通常具有固定数量的条目,因此仅描述整个虚拟地址空间的一部分.这就是为什么你需要多个覆盖整个地址空间的原因.现在,在许多操作系统中,进程具有单独的(换句话说,不与其他人共享)虚拟地址空间,这有助于保护进程彼此之间的连接.这是拥有多个页表的另一个原因.

  • 阿列克谢·伏龙芝,这有部分错误。我同意,页表有固定数量的条目。但是,我不同意,页表实际上描述了进程的整个虚拟地址空间。我的意思是,对于进程的每个页面,其页表中都有一个条目。正如@marski所说,拥有多个页表的原因是每个进程都有自己的虚拟地址空间。进程 P1 的页 N 可能没有与进程 P2 的页 N 映射到物理内存中的同一帧。由于每个进程都有一个特定的映射,因此每个进程都有一个特定的页表。 (2认同)

小智 7

页表将虚拟页地址转换为物理页地址。由于每个进程都有自己的虚拟地址空间,并且通常将相同的虚拟地址映射到不同的物理地址,因此需要单独的页表。奇怪的是,多个进程可能会将不同的虚拟地址映射到同一物理内存。这可用于实现共享库或进程间通信。