Operating system 每个流程页面的分层表格:为什么不';我们不使用简单的线性阵列吗?

Operating system 每个流程页面的分层表格:为什么不';我们不使用简单的线性阵列吗?,operating-system,x86,paging,hierarchical,Operating System,X86,Paging,Hierarchical,我想知道为什么我们需要在操作系统中使用PTBR和PTLR寄存器(通常存储在PCB中)来处理每个进程的分层页表 由于PTLR,我可以检查当前进程的页表大小限制,因此它的页表将只包含其地址内存空间的条目(不会像系统地址内存空间那样大) 如果一个进程的虚拟地址空间不是稀疏的(它的虚拟页码是0,1,2,…),我将有一个最多包含K个条目的进程页表:总的来说,它的大小将最多为几MB,我认为最好使用一个简单的连续数组 那么,为什么许多真正的解决方案(即x86和x64)都基于多级页表(或散列页表)? 谢谢。因为

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


谢谢。

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

另外,想想“内存过度使用”分配——当你将内存分配到几GB时,操作系统可能会说,“当然,很好!”,因为知道大多数需要几GB的程序最终只使用了其中的一小部分。如果使用一个不太大的简单数组来支持这样的东西,您可能会遇到问题