Chinaunix
标题:
多级也表如何节省存储空间
[打印本页]
作者:
diandianlianyi
时间:
2011-01-11 11:12
标题:
多级也表如何节省存储空间
在谈到多级页表的优势的时候,很多地方都是这么说的:32位地址空间的分页系统,如果页面大小为4KB,则每个进程可达1M个页,假设每个页表项占用4个字节,这样每个进程仅仅页表项就占用了4MB连续的内存空间。
问题一:为什么是连续的内存空间?不连续难道不可以吗?若果页表是通过数组实现的,可以把整个页表放在磁盘,仅仅调入一部分项到内存,其他的需要时再调度。
问题二:多级页表怎么节省存储空间的?如果是2级页表,32位地址分为10,,10,12,3部分。则,页目录表1024项,每个小页表也是1024项,实际的存储空间是1024*4k(所有小页表大小)+4k(页目录大小),变大了!!!!!!
作者:
kouu
时间:
2011-01-11 12:26
问题一:页表是拿给CPU读的,CPU就规定了页表必须在内存中。如果硬要把页表放到磁盘上会怎样?CPU不能直接访问磁盘,需要通过内核提供的驱动程序来访问。那么驱动程序肯定需要用到内存,但是页表可能还在磁盘上,没有页表内存没法访问……
问题二:如果所有地址空间都有映射,那么页表级数越多,越浪费内存。但是,一般情况下有多少地址空间会被映射呢?看看你系统上的程序,占用几十兆内存的程序就已经比较猛了吧~ 那么,假设大多数地址空间是没有映射的。一级页表不管你映不映射,所有表项都必须存在;多级页表呢?如果第一级里面,某一个入口没有映射,那么这个入口下面的第二级、第三级页表就都不需要了。
作者:
diandianlianyi
时间:
2011-01-11 13:30
回复
2#
kouu
问题是,为什么一级页表时,所有的页表项就必须都存在?
作者:
amarant
时间:
2011-01-11 14:06
lz标题都打错了~ 页表就是一个大数组一样,如果只存在一部分,那么以后要扩展怎么办?
作者:
cluter
时间:
2011-01-11 22:06
回复
3#
diandianlianyi
页表不在,你程序怎么影射啊?
2级页表是这样的
1级页表必须在内存,这样2级页表就可以动态分配啦,所以当程序运行时,不会有太多的页表在内存中。
作者:
tempname2
时间:
2011-01-11 23:29
不连续存放,或者把部分页表放到硬盘。。。。。CPU有的只是一个页表首地址而已,它要怎么知道那地址之后的一段内存哪些是页表哪些不是页表呢?
作者:
accessory
时间:
2011-01-12 05:28
页表放在硬盘之后,访问的时候会发生PAGE FAULT. 这个时候,要访问的地址是知道的。只不过那个地址上的内容在硬盘里,OS把其中的内容再加载回MEMORY就可以继续访问了。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2