当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式Web访问时的内存丢失问题


    由于嵌入式技术的发展,嵌入式Web服务器软件越来越大,对硬件的要求也相应地提高,但在工业现场的底层控制中,一般嵌入式系统的硬件配置都不是很高,导致了软件和硬件的冲突。本文就是对实际应用过程中,偶尔出现的Web页面访问出错问题进行深入的研究。


1 嵌入式Web在系统中的应用
    多支点触发系统包括以下几个模块:控制台模块、网络触发源模块、被触发设备模块。其中,网络触发源和被触发设备都是挂载在总线上的,通过现场总线可以将系统各个节点相互连接起来以方便管理。嵌入式web就是应用于网络触发源模块中,它负责控制台和被触发设备之间的通信。控制台通过浏览器访问网络触发源,在Web页面上完成相应控制操作后,由网络触发源把操作命令发送到总线上,被触发设备从总线上接收到命令后,完成相应操作。在网络触发源模块中,Web服务器采用的是Boa,嵌入式操作系统采用的是uClinux,处理器采用的是Sam-sung公司的S3C44BO。多支点触发系统结构如图1所示。

2 Boa的运行流程及出现的问题
    Boa是单任务的http服务器,源码开放,性能高。与传统的Web服务器不同,它并不对每个进入服务器的连接开辟新的进程,所有活动的http连接都在内部进行处理,而只为每个CGI连接启动新进程。在已进行的测试中,Boa服务器比其他的Web服务器要快,所以它应用在嵌入式系统中是具有良好前景的。图2是Boa基本的运行流程。[!--empirenews.page--]
    在Boa运行过程中,用户请求初始Lo-gin页面时,系统能正常响应操作。当用户输入正确的Login信息,要实现页面跳转时,PC机上的浏览器里面不能正确浏览,提示错误:“502 bad gate-way The CGI was notCGI/1.1 compliant”。由于运行的是CGI程序,通过调试和查看错误日志,发现系统停留在步骤⑤~⑦间。在排除CGI程序错误后,通过串口调试终端打印出的错误信息发现:在执行CGI程序时,内核申请内存时出错,提示申请的内存块不能得到,即内存丢失。


3 系统内存丢失分析
3.1 uClinux的内存管理
    uClinux不能使用处理器的虚拟内存管理技术,它仍然采用存储器的分页管理。系统启动时对存储器分页,加载应用程序对程序分页加载。由于没有MMU管理,所以uClinux采用实存储器管理。uClinux系统对内存的访问是直接的(它对地址的访问不经MMU,而是直接送到地址线上输出),所有程序访问的地址是物理地址。那些比物理内存还大的程序将无法执行。[!--empirenews.page--]
    uClinux将整个物理内存划分成为4 KB的页面。由数据结构page管理,有多少页面就有多少page结构,它们又作为元素组成数组men_map[]。物理页面可作为进程代码、数据和堆栈的一部分,还可存储装入的文件,也可作缓冲区。
    uClinux用标准Linux内核变型BuddySystem机制管理空闲物理页面。
3.2 内存丢失原因
    由于uClinux提供了跟普通Linux一样的内存分配器,普通Linux中缺省的内存分配器是使用“2的幂”的分配方法,这样可以快速找到符合要求的内存区域。在系统开发过程初期,采用的就是“2的幂”的分配方法。如果一个应用程序要求(X)KB内存空间进行装载,则实际使用占用的内存空间大小为Y=2m(Y≥X)。试想一个65 KB应用程序,如果按照“2的幂”的分配方法,就必须分配128 KB(2的7次方)的内存空间,这样就有63 KB的内存空间不能被利用上。这对于小内存的嵌入式系统来说是相当大的浪费。
    多支点触发系统运行时,嵌入式操作系统uClinux使用“2的幂”的内存分配方法,大多数情况下都能正常工作。但在不断反复测试中,偶尔会出现上述页面出错问题。错误的原因是不能获得足够的内存加载程序。通过调试终端,用free命令查看系统内存分配情况如表1所列。

    由表1可以看出,空闲的内存空间还有1560 KB,而应用程序所需的内存空间为400多KB,但是内核认为并没有足够的内存空间用来加载程序。例如一个系统内存大小为1 MB,有400KB的空闲内存,为了装载一个应用程序需要分配100 KB的空间。大家可能觉得这个需要肯定能得到满足,然而,由于uClinux必须给应用程序分配连续内存空间的特性,所以必须有100KB连续的内存空间才能满足这个需要。而当系统内存分配如图3所示时,最大的连续内存块的大小只有80 KB,这样是没有办法分配给这个应用程序的。这就是系统中页面访问出错的问题所在,虽然有足够的空闲内存空间,但是没有应用程序所需的连续内存空间。

    这就是内存丢失问题。虽然系统会显示大量的可用内存,但是应用程序却不能得到。

[!--empirenews.page--]
4 内存丢失问题的解决
    由于系统的内存管理默认采用“2的幂”的分配方法,这就造成了内存空间的巨大浪费,当某些应用程序要申请较大的连续空间时,却不能满足。为了解决这个问题,专门为uClinux内核设计了可选的内存分配器。不同的内核版本,这个可选的内存分配器不同,一般是page_alloc2和kmalloc2。
    page_alloc2能解决缺省的分配方法造成的浪费问题。虽然它也是使用“2的幂”的分配方法,但它是按页(每页4 096B,即4 KB)分配的,分配的内存大小如果已经满足了要求,则只是将当前的一页分配出去,其他的就不再分配。还是一个65 KB的应用程序,如果使用这种方法,就只是分配68 KB(≥65 KB,且为整页)即可,这样就能节省60 KB的空间。
    page_alloc2还采取了一些避免内存碎片的方法。它将所有的两页(8 KB)或更少的内存需求从空闲内存开始部分向上分配,所有大的内存需求从剩余内存的末尾部分开始向下分配。这样防止了网络缓存等的临时分配,避免了内存碎片的出现。同时,它支持一次申请超过1 MB的内存空间,这对一些大的应用程序是很好的支持。采用此方法后,在系统运行过程中,并未出现过页面访问出错问题。通过free命令查看内存分配如表2所列。

结 语
    在嵌入式系统应用日益广泛的情况下,本文结合嵌入式Web在多支点触发系统中的应用,介绍了Web访问出现的问题以及它的解决方法。在实际应用中,新的内存分配方法能让系统稳定地工作,但是从表2可以发现:采用“page_alloc2‘’的内存分配方法时,系统的Cache较小,这就造成了页面访问有一定的延时。而“2的幂”的分配方法,系统的Cache较大,访问速度较快。从这个对比得知,在反应时间要求不是很高的情况下,“page_alloc2”的内存分配方法更适合小内存的嵌入式系统;而“2的幂”的分配方法更合适那些内存足够大的嵌入式系统。系统开发者可以根据实际情况采用不同的方案。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭