在使用页表的操作系统中,页表是空的吗?

问题描述

在研究影子分页机制时,我了解到一个影子页表开始时为空,只有在来宾 VM 访问内存时才会被填充的情况。这让我想到了传统的页表。当操作系统正在运行并且页表变空时(也许当页表的进程终止时),我认为该页表作为空闲内存页被释放。

在正常操作中,有没有出现空页表甚至空页目录表的情况?我能想到的三种情况是:

  1. 当操作系统启动时 - 但我的理解是像 Linux 这样的现代操作系统以实模式启动,然后切换到分页模式,在此期间,我可以想象进程 1 获得自己的页表,其中包含内核映射等。这是正确的吗?

  2. 如果页表中的最后一个有效条目随后被取消映射或换出 - 但我也读到无效条目可用于存储交换地址,因此不确定。

  3. 一个新进程产生时——虽然我认为类似于 1),一个新进程是通过内核映射和链接库映射启动的,所以它在启动时已经有了一个小页表。

更新:我了解到,即使在它开始为“空”的影子页表中,它仍然有一些到管理程序内存的映射,因此即使这样页表也不是真正的空。

解决方法

空页表毫无意义,所以我会说

如果你的意思是一个特定的表,那么把它留空是浪费内存。如果你有一个空的页表,你可以释放它,并在指向页表的地方告诉CPU没有页表。例如,如果一个 1 级页表是空的,你可以在 2 级页表中放置一个条目,而不是在 2 级页表中指向它,表示“没有 1 级页表这个地址”。

如果您的意思是整个页表集 - 那么根本没有页 - CPU 不能在没有页表的情况下运行任何指令(除非分页被关闭),所以这仍然是一个否。 CPU 会出现三重故障 (x86) 并重新启动。