处理页表:为什么我们不使用简单的线性数组?
我想知道为什么我们需要在OS中使用处理每个进程页表的分层页表,使用CPU中的PTBR和PTLR寄存器(最终存储在PCB中)。
由于PTLR,我可以检查当前进程的页表大小限制,所以它的页表将只包含其地址内存空间的条目(不会像系统地址内存空间那么大)。
如果一个进程的虚拟地址空间不是稀疏的(它的虚拟页面号是0,1,2,...),我将有一个最多有K个条目的进程页表:它的总大小最多是一些MB ,我认为使用简单的连续数组会更好。
那么,为什么很多真正的解决方案(即x86和x64)都基于多级页表(或散列页表)?
谢谢。
因为稀疏的虚拟地址空间很好。 稀疏的地址空间允许操作系统崩溃追踪(某些)野指针的程序,并且它使预链接的共享库成为实用的,也许是最有用的,它允许你的堆栈从内存的“最高”端和堆一起增长从“底部”结束。 你当然可以将页表索引定义为一个有符号的整数,这将允许你用一个简单的数组来实现后一个特性。
另外,考虑“内存过量使用”分配 - 当你使用几千兆字节时,操作系统可能会说“确定,很好!”,知道大多数要求几千兆字节的程序仅使用其中的一小部分。 你可能会遇到问题,用一个简单的数组来支持这样的事情,这个数组不是很大。
链接地址: http://www.djcxy.com/p/82729.html上一篇: Process Page Tables: why don't we use simple linear array?