Chinaunix

标题: 内核模块最多只能管理1G的内存吗? [打印本页]

作者: wLiu2007    时间: 2014-08-28 21:08
标题: 内核模块最多只能管理1G的内存吗?
请教个问题,对于32位系统,地址空间是4G,内核地址空间是1G;是不是意味着在内核module里面最多只能申请不超过1G的内存了,再多了没有对应的虚拟地址来管理了?
对于物理内存是4G的系统,内核最多只能用到1G,剩下的3G只能留给用户进程去用?
虽然内核只有1G的地址空间,但是可以利用3G+896~4G的这段地址空间映射到物理内存上的任何一个位置;
作者: super皮波    时间: 2014-08-29 00:58
内核中直接映射的部分是3g~3g+896m,还有高端内存,这部分内核都是可以用的,所以最多也就不到1g,还要除去内核已经占用的代码段数据段

用户空间在申请空间的时候,优先是从物理地址896M以上取,因为这部分物理地址在内核空间中无法直接使用
作者: humjb_1983    时间: 2014-08-29 08:40
需要区分清楚虚拟地址空间和物理内存的区别,1G和3G是指虚拟地址空间的划分。。
作者: Tinnal    时间: 2014-08-29 08:54
这个问题之前有就人问过,只要拿一个窗口的虚拟地址,不断的映射不同的物理内存区域,就能把物理内存都访问到。
作者: wLiu2007    时间: 2014-08-29 10:34
回复 4# Tinnal

拿一个窗口的虚拟地址,不断的映射不同的物理内存区域,就能把物理内存都访问到。

也就是我说的 利用3G+896M~4G的这段地址空间映射到物理内存上的任何一个位置;

这种方法在一个时间点上,内核最多也只能拥有1G的内存,比如我开发的程序全部是基于内核态开发的,程序本来就需要很多内存,可能会超过1G,那怎么搞?

如果内核内存需求大于1G的话,就只能调整PAGE_OFFSET了吧,比如让用户空间2G地址空间,内核空间2G地址空间
作者: super皮波    时间: 2014-08-29 10:57
回复 5# wLiu2007
我看书上说的就两种配置  一种是 1G/3G  另外一种是1.25G/2.75G的模式,这里好像不是简单的改下PAGE_OFFSET的问题吧

   
作者: Tinnal    时间: 2014-08-29 22:20
回复 5# wLiu2007


是的,内核本来就不打算自已用这么多内存,内核都用这么多,应用用什么?不过你要是什么都在内核态做,你可以调整。不过还是建议你不要什么都在内核做,这样可靠性会非常差,调试能力也大打折扣。

   
作者: Tinnal    时间: 2014-08-29 22:21
回复 6# super皮波


  改PAGE_OFFSET是可以的。
作者: super皮波    时间: 2014-08-29 23:23
回复 8# Tinnal
就直接改这个值就完了?
作者: Tinnal    时间: 2014-08-30 20:32
回复 9# super皮波

嗯。

   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2