如何解决在使用页表的操作系统中,页表是空的吗?
在研究影子分页机制时,我了解到一个影子页表开始时为空,只有在来宾 VM 访问内存时才会被填充的情况。这让我想到了传统的页表。当操作系统正在运行并且页表变空时(也许当页表的进程终止时),我认为该页表作为空闲内存页被释放。
在正常操作中,有没有出现空页表甚至空页目录表的情况?我能想到的三种情况是:
-
当操作系统启动时 - 但我的理解是像 Linux 这样的现代操作系统以实模式启动,然后切换到分页模式,在此期间,我可以想象进程 1 获得自己的页表,其中包含内核映射等。这是正确的吗?
-
如果页表中的最后一个有效条目随后被取消映射或换出 - 但我也读到无效条目可用于存储交换地址,因此不确定。
-
当一个新进程产生时——虽然我认为类似于 1),一个新进程是通过内核映射和链接库映射启动的,所以它在启动时已经有了一个小页表。
更新:我了解到,即使在它开始为“空”的影子页表中,它仍然有一些到管理程序内存的映射,因此即使这样页表也不是真正的空。
解决方法
空页表毫无意义,所以我会说不。
如果你的意思是一个特定的表,那么把它留空是浪费内存。如果你有一个空的页表,你可以释放它,并在指向页表的地方告诉CPU没有页表。例如,如果一个 1 级页表是空的,你可以在 2 级页表中放置一个条目,而不是在 2 级页表中指向它,表示“没有 1 级页表这个地址”。
如果您的意思是整个页表集 - 那么根本没有页 - CPU 不能在没有页表的情况下运行任何指令(除非分页被关闭),所以这仍然是一个否。 CPU 会出现三重故障 (x86) 并重新启动。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。