+ -
当前位置:首页 → 问答吧 → 不知道linux x86分页设计者的意图是什么?

不知道linux x86分页设计者的意图是什么?

时间:2010-08-26

来源:互联网

本帖最后由 zhangsuozhu 于 2010-08-26 12:38 编辑

为什么内核要分配3G以上的线性地址空间。为什么不用1G以下的线性地址空间呢。

造成的后果就是内核的32位线性地址只能使用3G以上的1个G。准确的说是896M。而再想多访问,就得做麻烦的高端内存映射到未端的128M内。

如果内核直接用1G以下的线性地址并直接对应到1G以下的物理地址,那么想访问1G以上线性地址,就再分配页表对应1G以上的物理地址就行了。

为什么搞的那么麻烦呢?不理解?

作者: zhangsuozhu   发布时间: 2010-08-26

这跟映射到哪里无关,而跟内核有多大虚拟地址空间有关。因为所有的访问都是经过分页的,如果内核的虚拟地址空间定的,页表数也定了,映射到哪里都只能使用1G内存。

高端内存的产生是,一是因为内核的虚拟地址空间不够,一是因为内核要把自己严格映射到底端。如果内核也像进程那样随意映射,哪个地方的物理内存都能为之所用,但使用总量还只有1G。因为它的虚拟地址空间大小是固定的。

3:1这个比例好像是可以配置的。

作者: tempname2   发布时间: 2010-08-26

回复 tempname2


    您的意思是内核只能使用1个G的线性地址空间(逻辑地址空间)。而物理地址空间的低端1G内可能无法满足给内核1G线性的空间(即有可能这1G的物理地址空间可能被用户进程占用了一部分,内核占用一部分就用完了),为此引入高端内存的映射,让内核可以访问高于1个G的物理地址。是吗?

作者: zhangsuozhu   发布时间: 2010-08-26

可能的原因是内核有时需要访问特定位置的物理内存。然而内核前896M虚拟空间已经钉死在物理内存底端,不可能改变映射。所以留出了一段高端虚拟地址,可供任意映射。

作者: tempname2   发布时间: 2010-08-26

回复 tempname2


    嗯。我也这么认为的。

作者: zhangsuozhu   发布时间: 2010-08-26