多级也表如何节省存储空间

在谈到多级页表的优势的时候,很多地方都是这么说的:32位地址空间的分页系统,如果页面大小为4KB,则每个进程可达1M个页,假设每个页表项占用4个字节,这样每个进程仅仅页表项就占用了4MB连续的内存空间。
问题一:为什么是连续的内存空间?不连续难道不可以吗?若果页表是通过数组实现的,可以把整个页表放在磁盘,仅仅调入一部分项到内存,其他的需要时再调度。
问题二:多级页表怎么节省存储空间的?如果是2级页表,32位地址分为10,,10,12,3部分。则,页目录表1024项,每个小页表也是1024项,实际的存储空间是1024*4k(所有小页表大小)+4k(页目录大小),变大了!!!!!!

作者: diandianlianyi   发布时间: 2011-01-11

问题一:页表是拿给CPU读的,CPU就规定了页表必须在内存中。如果硬要把页表放到磁盘上会怎样?CPU不能直接访问磁盘,需要通过内核提供的驱动程序来访问。那么驱动程序肯定需要用到内存,但是页表可能还在磁盘上,没有页表内存没法访问……

问题二:如果所有地址空间都有映射,那么页表级数越多,越浪费内存。但是,一般情况下有多少地址空间会被映射呢?看看你系统上的程序,占用几十兆内存的程序就已经比较猛了吧~ 那么,假设大多数地址空间是没有映射的。一级页表不管你映不映射,所有表项都必须存在;多级页表呢?如果第一级里面,某一个入口没有映射,那么这个入口下面的第二级、第三级页表就都不需要了。

作者: kouu   发布时间: 2011-01-11

回复 kouu


    问题是,为什么一级页表时,所有的页表项就必须都存在?

作者: diandianlianyi   发布时间: 2011-01-11

lz标题都打错了~ 页表就是一个大数组一样,如果只存在一部分,那么以后要扩展怎么办?

作者: amarant   发布时间: 2011-01-11