【问题标题】:Why one page table per process为什么每个进程一个页表
【发布时间】:2023-03-10 06:27:01
【问题描述】:

一开始我以为整个系统只有一个页表。但实际上每个进程只有一个页表?拥有多个页表而不是一个页表有什么意义。

我正在实现os161的一部分

【问题讨论】:

  • 只有一个内核页表(包括页目录),但每个进程都需要一个单独的页表才能寻址虚拟空间。

标签: operating-system os161


【解决方案1】:

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

【讨论】:

  • 这也是一个很好的解释:en.wikipedia.org/wiki/Virtual_memory#Page_tables
  • 顺便说一句,页表是进程/任务上下文的一部分,当你切换进程/任务时,页表也需要切换。
  • Alexey Frunze,这部分是错误的。我同意,页表有固定数量的条目。但是,我不同意,页表实际上描述了一个进程的整个虚拟地址空间。我的意思是,对于流程的每一页,您在其页表中都有一个条目。正如@marski 所说,拥有多个页表的原因是每个进程都有自己的虚拟地址空间。进程 P1 的页面 N 可能与进程 P2 的页面 N 没有映射到物理内存中的同一帧。由于每个进程都有一个特定的映射,因此每个进程都有一个特定的页表。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 2019-12-22
    • 1970-01-01
    • 2011-09-13
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多