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

In OSes that use page tables, are page tables ever empty?

在研究影子分页机制时,我了解到一种情况,影子页面 table 开始时是空的,只有在来宾 VM 访问内存时才会被填充。这让我想到了传统的页面 tables。当 OS 为 运行 且页面 table 变为空时(可能当页面 table 的进程终止时),我认为页面 table 得到作为空闲内存页释放。

在正常操作期间是否存在空页 table 甚至空页目录 table 的情况?我能想到的三种情况是:

  1. 当 OS 启动时 - 但我的理解是像 Linux 这样的现代 OSes 以实模式启动,然后切换到分页模式,在此期间我会想象进程 1 有自己的页面 table,其中包含内核映射等。这是正确的吗?

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

  3. 当一个新进程产生时——虽然我认为类似于1),一个新进程启动了内核映射和链接库映射,所以它已经有一个小页面table 开始时。

更新:我了解到,即使在影子页面 table 开始时它是“空的”,它仍然有一些到管理程序内存的映射,所以即使那样页面 table 也不是真的很空。

没有空页 table,所以我会说 没有

如果您指的是某个特定的 table,那么将其留空会浪费内存。如果你有一个空页面table,你可以释放它,并在指向页面table的地方告诉CPU没有页面table .例如,如果一级页面 table 是空的,而不是在二级页面 table 中指向它,您可以在二级页面 table 中放置一个条目上面写着“此地址没有 1 级页面 table”。

如果您指的是整个页面集 tables - 那么根本没有页面 - CPU 不能 运行 没有页面 table 的任何说明]s(除非关闭分页)所以这仍然是一个否定。 CPU 将出现三重故障 (x86) 并重新启动。