关于 linux内存4G分成3G+1G的问题
差的很多资料都拿主存为160M举例子,但是还有许多不明白啊?
原帖的意思是内核逻辑地址为3G~3G+160M 虚拟地址是3G+160M多一点(vmstart)~vmend
问题1:这160M都给内核了,用户空间怎么办?不能是混着用吧?
问题2:如果我的内存是4G的,3G给用户1G给内核,虚拟地址就应该在4G+了,这也超出unsigned long的长度了,也就是说即使用vmalloc()申请出来内存也没法表示了,
由此推理如果就算你有4G内存操作系统用不了那么多,4G内存完全是浪费,那么操作系统最大能支持多少呢?win7貌似是只有2.96G可用。
求高手!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
LINUX将虚拟地址空间定为0到4G,该系统将4G的空间分成两个部分,高1G供内核使用,称为内核空间,低3G供用户使用,称为用户空间。
注意了,这个是逻辑地址,逻辑地址到物理地址的转变通过一定的算法来实现,哥们不要弄混了!
坛子里有相关的帖子谈论过,搜索下
回复 3# amarant
= =! 大概叫什么名字?可以简略的说一下吗我的问题吗?
回复 2# 2007robot
我没有弄混啊,前面不有个160M的问题么,确实有很多帖子是那么说的,很有值得探讨啊
差的很多资料都拿主存为160M举例子,但是还有许多不明白啊?
原帖的意思是内核逻辑地址为3G~3G+160M 虚拟地址是3G+160M多一点(vmstart)~vmend
问题1:这160M都给内核了,用户空间怎么办?不能是混着用吧?
内核只是有这个映射,并没有拥有这些页框。
问题2:如果我的内存是4G的,3G给用户1G给内核,虚拟地址就应该在4G+了,这也超出unsigned long的长度了,也就是说即使用vmalloc()申请出来内存也没法表示了,
没搞清楚你这个算法,每个进程都有自己的3G空间,内核的1G大家公用。内核的1G还区分为低端和高端。高端可以非线性映射。
由此推理如果就算你有4G内存操作系统用不了那么多,4G内存完全是浪费,那么操作系统最大能支持多少呢?win7貌似是只有2.96G可用。
4G是正常情况下可以支持的。但是物理内存要超过了4G,那就要启动PAE支持,也可支持多达64G的空间。
第一个问题你还可以参见这个帖子:
http://bbs.chinaunix.net/thread-1925077-1-3.html
http://bbs.chinaunix.net/thread-2083672-1-1.html
32位操作系统支持4G物理内存,但很多CPU把外设寄存器也映射到物理地址空间里了,所以实际上能使用的物理内存肯定是小于4G的。
至于第一个问题,我以前也纠结了很久,看6楼的链接。
从程序员的观点来讲,应该是接触不到物理内存这一级的,一般的内存概念,都是面向操作系统的,这些地址都是假的,要怎么用,要怎么分,都由操作系统来决定。这就是整个游戏规则,至于操作系统如何把这个内存映射到物理内存上去。那一般是OS的开发人员的事情了。
= =7楼跟9楼 是什么关系??太巧了 大家点一下7楼的帖子就知道了,猿粪啊