![进程的页表什么时候加载到内存中?](https://linux22.com/image/90785/%E8%BF%9B%E7%A8%8B%E7%9A%84%E9%A1%B5%E8%A1%A8%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E5%8A%A0%E8%BD%BD%E5%88%B0%E5%86%85%E5%AD%98%E4%B8%AD%EF%BC%9F.png)
我想知道操作系统何时将特定进程的页表加载到主内存中?是在流程安排好的时候吗?操作系统是否能够直接将进程页表加载到主内存中?
我有一个想法,除非处理器生成与页面相对应的页面错误,否则没有任何内容会进入主内存。这同样适用于页表吗?或者是我的观念不正确。
PS:如果答案可以针对基于 Linux 的系统,我们将不胜感激。
答案1
由于您没有提及特定的操作系统和处理器,因此我将从理论上回答这个问题。这适用于大多数类 UNIX 系统,但可能存在细微差别。
如果进程在内存中有任何页面,则页表需要位于(内核)内存中。页表需要可供进程运行,当选择该进程运行时,必须激活页表。在某些机器上,正在运行的进程的整个页表实际上作为进程激活的一部分加载到硬件中。在其他系统上,页表保留在内存中,并且指向它的指针被加载到硬件寄存器中。
但是,如果一个进程被完全换出并且不再分配任何实际内存,则实际上根本不需要页表。当页面开始调入以运行程序时,可以重建相关的页表。有些系统不进行这种优化,而是在内核空间中为每个进程保留一个活动页表。
但是,以上都是概括性的,具体细节差异很大。 RTSL 了解更多详细信息。
答案2
在 UNIX 上,MMU 的页表条目是在 MMU 描述符故障命中后从“页故障”加载的。
特别是,您提到的“页表”通常不存在。内核中有地址空间描述,MMU 描述符错误通常会导致创建 PTE(页表项),并从内核空间分配相关 RAM。
MMU 中的 PTE 是有限资源,这一事实导致了自动加载 MMU 的创建。对于这样的 MMU,PTE 之前的备份存储可能看起来像“页表”。