Linux内核维护了多少页表?

Linux内核维护了多少页表?

内核维护一个称为页表的数据结构,其中包含
一个进程'虚拟页地址到内存中的实际页地址。

我看过一本书,上面有一句话,不知道为什么一个进程'?所以内核
一个单一的页表包含许多进程的映射,即内核没有单独存储所有进程的页表,而是存储在单个页表中?

这本书是 Brian Ward 的 How Linux Works,第 2 期,第 182 页,第 4 行。


这本书似乎有一些语法错误:

  1. 表,那个应该表那个: 没有错误。 (感谢您的评论!)
  2. 进程的映射应该进程的映射

答案1

实际情况比这要复杂一些。

首先,只有一个真的一次用于任何给定处理器核心的页表。这是因为硬件实际将虚拟地址映射到物理地址(更具体地说,MMU),并且内核仅在页表的内容必须更改时才会参与。

此外,内核还单独存储有关每个执行上下文(进程、线程或内核线程)的虚拟内存映射状态的信息。它们彼此独立存储,并且与硬件用于地址映射的页表分开。每当执行上下文发生变化时(例如,进程进行系统调用或中断处理程序被唤醒以服务中断),切换执行上下文的过程的一部分涉及从硬件页表中刷新旧条目,然后加载新条目。根据这两个上下文,这可能只涉及重新填充非常少量的条目(例如,切换同一用户空间进程的线程),或者可能需要重新加载整个表(例如,从用户进程切换到中断)处理程序)。

相关内容