免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5387 | 回复: 12
打印 上一主题 下一主题

[内存管理] 嵌入式linux对物理内存管理的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-28 20:42 |只看该作者 |倒序浏览
本帖最后由 tempnamett 于 2012-07-28 20:45 编辑

看到一款soc的sdk对内存的管理,不是很了解细节,先描述下表象:
1,物理内存8G以上,但只分配给linux768MB,而剩余的内存,可由linux产生的一些进程进行使用。(没有详细分析过代码,不保证描述的正确)
2,这里的比较疑惑的是:剩余内存对与linux系统完全是屏蔽的,linux上的进程要想使用,需要通过一些特殊的模块将物理内核mmap出来(以前遇到过类似的东西,空出一段内存,做多核通信用),这样的话是否需要对该段内存进行相关的配置,页表的映射后才能像linux下内存一样使用呢,还是有其他的方法?

而且如果是linux下进程想使用这段内存也不能完全按照linux的内存分配机制进行了,那这些sdk构建这样的内存管理,岂不是要对linux做很大的修改了。


论坛徽章:
0
2 [报告]
发表于 2012-07-29 07:02 |只看该作者
tempnamett 发表于 2012-07-28 20:42
看到一款soc的sdk对内存的管理,不是很了解细节,先描述下表象:
1,物理内存8G以上,但只分配给linux768MB,而剩余的内存,可由linux产生的一些进程进行使用。(没有详细分析过代码,不保证描述的正确)
2,这里的比较疑惑的是:剩余内存对与linux系统完全是屏蔽的,linux上的进程要想使用,需要通过一些特殊的模块将物理内核mmap出来(以前遇到过类似的东西,空出一段内存,做多核通信用),这样的话是否需要对该段内存进行相关的配置,页表的映射后才能像linux下内存一样使用呢,还是有其他的方法?

而且如果是linux下进程想使用这段内存也不能完全按照linux的内存分配机制进行了,那这些sdk构建这样的内存管理,岂不是要对linux做很大的修改了。

物理内存8G以上,我还没有遇到过这种情况呢。{:3_196:}

但根据你描述的情况,并没有超出Linux管理物理内存的范畴呀。你的描述,我并没有完全理解,试着逐条分析一下吧。

1.只分配给Linux768MB是什么意思?我的理解是:初始化的时候,线性映射到内核了768MB。这是正常的,如果在uboot传参给Kernel的时候,不指定vmalloc参数,默认VMALLOC_START_VMALLOC_END的大小是240MB,另外4G一下的高端16MB用作其他。这样刚好是3G~3G+768MB 用作线性映射。(这个X86提到的896MB是不同的)

2.物理内核mmap是什么意思?我的理解是:剩余的(8GB-768MB)用作动态映射到Kernel中的3G+768MB~3G+768MB+240MB

论坛徽章:
0
3 [报告]
发表于 2012-07-29 14:53 |只看该作者
本帖最后由 tempnamett 于 2012-07-29 14:57 编辑

回复 2# omycle


物理内存8G以上,我还没有遇到过这种情况呢。

但根据你描述的情况,并没有超出Linux管理物理内存的范畴呀。你的描述,我并没有完全理解,试着逐条分析一下吧。

1.只分配给Linux768MB是什么意思?我的理解是:初始化的时候,线性映射到内核了768MB。这是正常的,如果在uboot传参给Kernel的时候,不指定vmalloc参数,默认VMALLOC_START_VMALLOC_END的大小是240MB,另外4G一下的高端16MB用作其他。这样刚好是3G~3G+768MB 用作线性映射。(这个X86提到的896MB是不同的)
=======================================================================
初始化的时候,应该是只是映射了768,kernel初始化过程中有打印。“VMALLOC_START_VMALLOC_END的大小是240MB”
这个指的什么,高端映射吗?有个问题,如果按照你的说法,通过free等命令查看内存,内存大小会显示为多少???


2.物理内核mmap是什么意思?我的理解是:剩余的(8GB-768MB)用作动态映射到Kernel中的
=======================================================================
就是通过ioremap() 将初始化没有映射的内存,建立映射,就像有些时候映射一些控制器的寄存器地址段。

我的想法是这样的,不管是初始化时映射,还是后面动态映射,linux系统都会看到该内存,free等查询命令会显示当前使
用内存情况

另:64位cpu

论坛徽章:
0
4 [报告]
发表于 2012-07-29 22:41 |只看该作者
本帖最后由 omycle 于 2012-07-29 22:43 编辑

回复 3# tempnamett


    free指的是物理内存,与虚拟地址无关

我对64位CPU不太了解,不好意思。

论坛徽章:
0
5 [报告]
发表于 2012-07-30 16:47 |只看该作者
回复 1# tempnamett


    贴原文,8G只给不到一个G的空间?然后剩下的最终linux还是能用的,本身已然矛盾了啊?而且这个配额还刚好是768?严重怀疑你对SOC的文档理解有误,摘相关的贴出来吧。

论坛徽章:
0
6 [报告]
发表于 2012-07-30 19:04 |只看该作者
回复 5# 灌水菜鸟


   不是手册上的,是我从板子运行情况猜的。你可以这样理解,一块有8g物理内存的板子,但通过free命令只能看到768mb,并且剩下的内存一定用到了,这种情况大概是如何实现的?

论坛徽章:
0
7 [报告]
发表于 2012-07-30 21:02 |只看该作者
回复 6# tempnamett

从哪里看到物理内存8G的信息?

另外,CPU确认是64位?如果是64位,从free命令中看到的内存总量不应该是768MB

论坛徽章:
0
8 [报告]
发表于 2012-07-30 22:06 |只看该作者
硬件就是8g的,而且这是款成熟的产品,剩余的内存一定用到,要不768mb的内存,跑这么大的流量就nb了,呵呵。64位的,但free的确是700多mb,而且在kernel启动时打印了这么一条信息,大概意思:linux使用了8g内存的768mb。(中文大意)回复 7# omycle


   

论坛徽章:
0
9 [报告]
发表于 2012-07-31 00:01 |只看该作者
你可以想象下集成显卡, 未被内核管理的内存显卡驱动也可以用. 不通过内核而是硬件内存管理接口

论坛徽章:
0
10 [报告]
发表于 2012-07-31 09:10 |只看该作者
回复 8# tempnamett


    如果方便,把boot log信息贴出来看看呗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP