0

我想知道为什么我们需要在操作系统中使用分层页表来处理每个进程的页表,使用 CPU 中的 PTBR 和 PTLR 寄存器(通常存储在 PCB 中)。
感谢 PTLR,我可以检查当前进程的页表大小限制,因此它的页表将只包含其地址内存空间的条目(不会像系统地址内存空间那么大)。
如果一个进程的虚拟地址空间不是稀疏的(它的虚拟页码是 0、1、2,...),我将有一个最多包含一些 K 条目的进程页表:它的总大小最多为几个 MB ,我认为使用简单的连续数组会更好。
那么,为什么很多真正的解决方案(即x86 和x64)都是基于多级页表(或Hashed Page Tables)的呢?

谢谢。

4

1 回答 1

0

因为稀疏的虚拟地址空间是好的。稀疏地址空间允许操作系统崩溃一个追逐(一些)野指针的程序,它使预链接的共享库变得实用,也许最有用的是,它允许你的堆栈从内存和堆的“顶部”末端增长从“底”端。您当然可以将页表索引定义为有符号整数,这样您就可以只用一个简单的数组来实现后一个功能。

另外,想想“内存过度使用”分配——当你 malloc 几 GB 时,操作系统可能会说,“当然,很好!”,知道大多数要求几 GB 的程序结果只使用了其中的一小部分。使用一个不必要的大的简单数组来支持这样的事情可能会遇到问题。

于 2011-08-16T22:36:45.330 回答