分层每进程页表:为什么我们不使用简单的线性数组?

时间:2011-07-18 14:51:45

标签: operating-system x86 paging hierarchical

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

感谢。

1 个答案:

答案 0 :(得分:0)

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

另外,想想“内存过量使用”分配 - 当你操作操作系统可能会说几千兆字节时,“确定,没问题!”,知道大多数要求几千兆字节的程序只使用其中的一小部分。使用一个不必要的大型简单数组,你可能会遇到支持这类问题的问题。