CN109684232B - 一种嵌入式协议栈内存管理方法 - Google Patents
一种嵌入式协议栈内存管理方法 Download PDFInfo
- Publication number
- CN109684232B CN109684232B CN201811236436.5A CN201811236436A CN109684232B CN 109684232 B CN109684232 B CN 109684232B CN 201811236436 A CN201811236436 A CN 201811236436A CN 109684232 B CN109684232 B CN 109684232B
- Authority
- CN
- China
- Prior art keywords
- memory
- protocol stack
- service module
- service
- protocol
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Abstract
本发明涉及一种嵌入式协议栈内存管理方法,属于嵌入式设备通信优化技术领域。本发明在协议栈初始化时只提供基本数据全局内存,以保证系统能够运行;将业务所需协议栈相关内存由业务模块自身来提供,各业务模块在初始化时根据需求将自己实际使用的内存注入协议栈内,由协议栈统一进行管理调度,既能够满足协议栈接口的标准化,完全兼容原有标准Socket接口,又最大限度的精简了内存,协议栈本身占用内存在4K以内。本发明能够在保持协议栈标准化接口的基础上较好的解决了协议栈内存规模与业务需求难以适配问题,便于业务模块的扩展。
Description
技术领域
本发明涉及一种嵌入式协议栈内存管理方法,属于嵌入式设备通信优化技术领域。
背景技术
低成本嵌入式设备,往往面临内存有限的困境,而协议栈对内存的要求又是比较高的。一种典型的嵌入式设备内存分配如表1所示(系统物理内存为128K)。
表1
序号 | 功能 | 内存需求 |
1 | 操作系统 | 20K |
2 | 业务功能 | 60K |
3 | 数据存储 | 20K |
4 | 标准协议栈 | 20K以上 |
可见,留给协议栈的内存只有28K,肯定不能满足协议栈的要求,为解决这个问题,常见的有以下两种方法:一种方法为采用非标准的接口比如回调方式;另外一种是内存池技术,两种处理技术各有特点,但在特定条件下也有各自的弊端。
1)回调技术
采用回调方式,设备驱动接收到报文后直接解析报文并通过协议栈调用用户回调,减少了协议栈分层存储报文的空间。这种方式执行效率较高,内存占用少。但是该方法无法兼容标准的协议栈接口,原有基于标准协议栈接口的业务模块无法直接使用,可维护性和扩展性差,系统稳定性受到较大影响。
2)通用内存池技术
在系统初始化时根据业务需求开辟内存池,确保满足需求。接口兼容性好,原有基于标准接口的代码可以方便的移植扩展。但是该方法需要在协议栈初始化时对每个业务模块的内存占用进行准确统计,系统开发和业务开发耦合性强,不利于分层开发和业务模块的开展。
上述两种方式中,回调方式会导致量业务中间件模块无法直接移植,可维护性差;内存池管理方式不利于业务模块的灵活添加和部署。
发明内容
本发明的目的是提供一种嵌入式协议栈内存管理方法,以解决目前采用通用内存池导致的业务模块不易扩展的问题。
本发明为解决上述技术问题而提供一种嵌入式协议栈内存管理方法,该管理方法包括以下步骤:
1)在协议栈初始化时创建协议栈自身内存,以保证系统能够运行;
2)业务模块初始化时根据需求统计自身的内存占用并创建相应内存,将创建的内存地址和大小提交给协议栈,由协议栈接收业务模块注入的内存,并统一进行内存管理;
3)当有业务模块使用内存时,协议栈将注入的内存按照该业务模块所需内存进行分配。
本发明在协议栈初始化时只提供基本数据全局内存,以保证系统能够运行;将业务所需协议栈相关内存由业务模块自身来提供,各业务模块在初始化时根据需求将自己实际使用的内存注入协议栈内,由协议栈统一进行管理调度,既能够满足协议栈接口的标准化,完全兼容原有标准Socket接口,又最大限度的精简了内存,协议栈本身占用内存在4K以内。本发明能够在保持协议栈标准化接口的基础上较好的解决了协议栈内存规模与业务需求难以适配问题,便于业务模块的扩展。
进一步地,本发明还给出了具体确定业务模块所需内存大小的方式,所得到内存大小符合业务模块自身的实际需求,业务模块自身所需内存的大小由协议栈根据业务所需socket个数和报文处理性能要求计算得到。
进一步地,为保证一些重要的业务模块能够及时分配到内存,在对业务模块分配内存时按照业务模块的优先级进行分配,保证高优先级的业务模块优先分配到内存并执行。
进一步地,本发明给出了通过分配表的进行管理内存的方式,提高了管理效率,该方法还包括在协议栈初始化时,创建动态内存分配表,用于存储业务模块创建的内存信息,包括业务模块的内存需求、内存编号和内存使用状态。
进一步地,本发明给出了通过分配表的进行管理内存的方式,提高了管理效率,该方法还包括在协议栈初始化时,创建动态内存分配表,用于存储业务模块创建的内存信息,包括业务模块的内存需求、优先级、内存编号和内存使用状态。
进一步地,为提高分配效率,协议栈在对业务模块进行内存分配时,按照所述动态内存分配表进行分配。
进一步地,为了防止各业务模块内存交叉使用引发的业务崩溃问题,使内存的分配使用有序进行,所述协议栈进行的内存管理包括内存的分配、锁存和回收,当业务模块使用内存时,对其进行内存分配,并根据业务模块的应用情况进行相应内存的锁存,当业务模块不使用内存时对相应内存进行回收。
附图说明
图1是本发明的协议栈内存管理方法流程图;
图2是本发明的协议栈内存分配的流程图;
图3是本发明的协议栈内存管理的实例图。
具体实施方式
下面结合附图对本发明的具体实施方式做进一步地说明。
本发明在协议栈初始化时只提供基本数据全局内存,保证系统能够运行;业务所需协议栈相关内存由业务模块自身来提供--各个业务模块初始化时根据需求把自己实际使用的内存注入协议栈内存池管理模块,由协议栈进行统一管理调度。其过程如图1所示,具体实施步骤如下。
1.在协议栈初始化时创建协议栈自身内存,以保证系统能够运行。
对于嵌入式设备而言,其协议栈本身占用的内存都在4K以内,因此,在协议栈初始化时需要创建一个4K的内存。同时,为了方便对内存的管理,在协议栈初始化时还会创建一个动态内存分配表,用来存放业务模块内存信息。动态内存分配表包括内存需求大小、编号、优先级、状态;优先级反应业务程序的优先程度,可根据优先级对程序进行管理,保证高优先级程序能快速的分配内存并执行;内存使用状态采用引用计数标识内存的使用情况,以便于协议栈管理程序更好的调配。一般动态内存分配表的格式如表2所示。
表2
内存需求(K) | 编号 | 优先级 | 状态 | |
业务1 | X | 1 | 1 | 已激活 |
业务2 | Y | 2 | 2 | 已回收 |
……. | Z | 3 | 3 | 未使用 |
……. | A | 4 | 3 | 未使用 |
2.业务模块初始化时根据需求统计自身的内存占用并创建相应内存,将创建的内存注入到协议栈,由协议栈统一进行管理。
协议栈兼容标准的socket接口,原有软件逻辑功能可以直接移植,协议栈提供业务需求内存计算接口,该访问接口根据业务所需socket个数和报文处理性能要求,计算所需内存大小。协议栈提供业务内存注入接口,该接口把业务数据注入的内存根据业务需求进行分类,存放到不同的系统内存池内。对于注入内存不足返回系统错误,在开发阶段由用户进行调整。
业务模块初始化时,计算其需要内存为x,完成动态内存地址申请,并与协议栈进行沟通,将内存信息在动态内存分配表中进行存储,在动态内存分配表中占有编号n,内存为x的信息,如表2所示。各业务模块的内存需求小于协议栈管理的动态内存地址大小。
3.当有业务模块使用内存时,协议栈将注入的内存按照该业务模块所需内存进行分配。
协议栈统一进行内存管理调度,协议栈内存管理包括内存的分配和回收,并根据业务应用情况进行相应内存的锁存机制,避免序交叉使用引发业务崩溃。协议栈的内存管理还包括根据业务模块优先级进行管理,当业务优先级较高的程序(业务模块)申请内存时,计算内存申请量,当可用内存量不够用时,对占有内存的低优先级程序发送关闭信号,使低优先级程序退出占有内存,以提供给高优先级业务使用,保证高优先级程序能快速的分配内存并执行。内存使用的具体流程如图2所示,具体步骤如下。
当业务模块需要使用内存时,该业务模块协议栈发送内存使用申请,协议栈收到该申请后,统计可使用内存,并判断可使用内存是否满足该业务模块的需求;若满足,协议栈根据动态内存分配表激活相应内存,并置激活位,该业务模块启动并使用相应内存;当可使用内存不满足要求时,控制该业务模块进入待使用内存队列,判断该业务模块对应优先级是否大于已激活内存所对应业务模块的优先级,若大于,则检索已激活内存表,按优先级自低进行程序退出,并将退出的内存进行回收,将回收的内存增加到可使用内存中,重新判断是否满足内存使用要求,进行内存分配。
业务数据注入内存时,输入参数除了内存地址和大小,还包括socket个数、各种类型的报文的长度和对应的个数等业务元素信息。协议栈把内存地址按照这些信息进行分割并放入对应类型的内存池,便于业务进行高效访问。如104模块,需要支持4个连接(对应5个socket,包含一个监听socket),20个短帧(256字节)报文,4个长帧(1518字节)报文。把信息注入协议栈后,协议栈依次从注入内存中开辟5个socket、20个短帧、4个长帧内存池,依次完成内存的分配。
下面以某一具体的通信设备的协议栈内存为例进行说明。如图3所示,相关的业务模块包括有104协议模块、Web协议模块和Telnet协议模块等,对于各协议模块的内存管理由协议栈管理模块进行,其中各协议模块均与协议栈管理模块通信,由协议栈管理模块按照动态内存分配表进行内存的分配和回收。
本实例中嵌入式系统可用内存为128K,留给协议栈占用内存为4K,可支配内存为124K,动态内存分配表由协议栈管理模块管理,业务模块初始化时完成动态内存申请,并更新信息到内存动态分配表中,如表3所示。
协议栈初始化
协议栈负责内存的分配和回收,初始化时,协议栈内部建立动态内存分布表。
IEC104协议初始化
IEC104协议处理模块初始化时,计算其需要内存为4.2K,该模块内存注入协议栈,由协议栈内存管理模块进行管理。
web协议初始化
web协议处理模块初始化时,计算其需要内存为20K,该模块内存注入协议栈,由协议栈内存管理模块进行管理。
Telnet命令行协议初始化
Telnet命令行协议处理模块初始化时,计算其需要内存为15K,该模块内存注入协议栈,由协议栈内存管理模块进行管理。
103协议初始化
103协议处理模块初始化时,计算其需要内存为5K,该模块内存注入协议栈,由协议栈内存管理模块进行管理。
按照图2的流程进行内存的管理分配,具体过程已在前面进行了说明,这里不再赘述。
表3
内存大小(K) | 编号 | 优先级 | |
104协议 | 4.2K | 1 | 1 |
Telnet命令行协议 | 3.1K | 2 | 2 |
Web服务协议 | 20K | 3 | 3 |
103协议 | 5K | 4 | 1 |
通过上述过程可知,本发明能够满足协议栈接口的标准化,完全兼容原有标准Socket接口。又最大限度的精简了内存,协议栈本身占用内存在4K以内。业务相关内存占用都由业务数据根据自身实际需求扩展后注入协议栈内存管理引擎。在保持协议栈标准化接口的基础上较好的解决了协议栈内存规模与业务需求难以适配问题。
Claims (5)
1.一种嵌入式协议栈内存管理方法,其特征在于,该管理方法包括以下步骤:
1)在协议栈初始化时创建协议栈自身内存,以保证系统能够运行;
2)业务模块初始化时根据需求统计自身的内存占用并创建相应内存,将创建的内存地址和大小提交给协议栈,由协议栈接收业务模块注入的内存,并统一进行内存管理;
3)当有业务模块使用内存时,协议栈将注入的内存按照该业务模块所需内存进行分配;
该方法还包括在协议栈初始化时,创建动态内存分配表,用于存储业务模块创建的内存信息,包括业务模块的内存需求、内存编号和内存使用状态;
所述协议栈进行的内存管理包括内存的分配,当业务模块使用内存时,对其进行内存分配;协议栈在对业务模块进行内存分配时,按照所述动态内存分配表进行分配。
2.根据权利要求1所述的嵌入式协议栈内存管理方法,其特征在于,业务模块自身所需内存的大小由协议栈根据业务所需socket个数和报文处理性能要求计算得到。
3.根据权利要求1所述的嵌入式协议栈内存管理方法,其特征在于,在对业务模块分配内存时按照业务模块的优先级进行分配,保证高优先级的业务模块优先分配到内存并执行。
4.根据权利要求3所述的嵌入式协议栈内存管理方法,其特征在于,所述动态内存分配表还包括业务模块的优先级。
5.根据权利要求1所述的嵌入式协议栈内存管理方法,其特征在于,所述协议栈进行的内存管理还包括内存的锁存和回收,根据业务模块的应用情况进行相应内存的锁存,当业务模块不使用内存时对相应内存进行回收。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811236436.5A CN109684232B (zh) | 2018-10-23 | 2018-10-23 | 一种嵌入式协议栈内存管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811236436.5A CN109684232B (zh) | 2018-10-23 | 2018-10-23 | 一种嵌入式协议栈内存管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109684232A CN109684232A (zh) | 2019-04-26 |
CN109684232B true CN109684232B (zh) | 2021-09-14 |
Family
ID=66184542
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811236436.5A Active CN109684232B (zh) | 2018-10-23 | 2018-10-23 | 一种嵌入式协议栈内存管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109684232B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732435B (zh) * | 2019-10-29 | 2024-04-05 | 浙江宇视科技有限公司 | 内存动态分配方法、装置、电子设备及可读存储介质 |
CN113326120B (zh) * | 2020-02-29 | 2023-12-26 | 杭州迪普科技股份有限公司 | 管理内存的装置和方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006039385A1 (en) * | 2004-09-30 | 2006-04-13 | Kyocera Wireless Corp. | Memory manager for an embedded system |
CN1770125A (zh) * | 2004-11-04 | 2006-05-10 | 华为技术有限公司 | 一种分配内存的方法 |
CN101382916A (zh) * | 2007-09-06 | 2009-03-11 | 大唐移动通信设备有限公司 | 嵌入式系统内存管理的方法 |
CN101937402A (zh) * | 2010-09-08 | 2011-01-05 | 无锡中星微电子有限公司 | 内存管理方法 |
CN101968772A (zh) * | 2010-10-22 | 2011-02-09 | 烽火通信科技股份有限公司 | 嵌入式系统高效内存池的实现方法 |
CN101984417A (zh) * | 2010-11-01 | 2011-03-09 | 中兴通讯股份有限公司 | 内存管理方法及装置 |
CN102567225A (zh) * | 2011-12-28 | 2012-07-11 | 北京握奇数据系统有限公司 | 一种管理系统内存的方法及装置 |
CN103885888A (zh) * | 2014-03-05 | 2014-06-25 | 珠海全志科技股份有限公司 | 基于tlsf的嵌入式实时系统的内存管理方法、系统及装置 |
CN103997500A (zh) * | 2014-06-04 | 2014-08-20 | 西北工业大学 | 一种轻量级实时tcp/ip协议栈的实现方法 |
CN108121603A (zh) * | 2017-12-20 | 2018-06-05 | 安徽皖通邮电股份有限公司 | 一种嵌入式系统内存管理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102339234B (zh) * | 2011-07-12 | 2013-04-17 | 迈普通信技术股份有限公司 | 一种协议栈运行装置和方法 |
-
2018
- 2018-10-23 CN CN201811236436.5A patent/CN109684232B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006039385A1 (en) * | 2004-09-30 | 2006-04-13 | Kyocera Wireless Corp. | Memory manager for an embedded system |
CN1770125A (zh) * | 2004-11-04 | 2006-05-10 | 华为技术有限公司 | 一种分配内存的方法 |
CN101382916A (zh) * | 2007-09-06 | 2009-03-11 | 大唐移动通信设备有限公司 | 嵌入式系统内存管理的方法 |
CN101937402A (zh) * | 2010-09-08 | 2011-01-05 | 无锡中星微电子有限公司 | 内存管理方法 |
CN101968772A (zh) * | 2010-10-22 | 2011-02-09 | 烽火通信科技股份有限公司 | 嵌入式系统高效内存池的实现方法 |
CN101984417A (zh) * | 2010-11-01 | 2011-03-09 | 中兴通讯股份有限公司 | 内存管理方法及装置 |
CN102567225A (zh) * | 2011-12-28 | 2012-07-11 | 北京握奇数据系统有限公司 | 一种管理系统内存的方法及装置 |
CN103885888A (zh) * | 2014-03-05 | 2014-06-25 | 珠海全志科技股份有限公司 | 基于tlsf的嵌入式实时系统的内存管理方法、系统及装置 |
CN103997500A (zh) * | 2014-06-04 | 2014-08-20 | 西北工业大学 | 一种轻量级实时tcp/ip协议栈的实现方法 |
CN108121603A (zh) * | 2017-12-20 | 2018-06-05 | 安徽皖通邮电股份有限公司 | 一种嵌入式系统内存管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109684232A (zh) | 2019-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9864595B2 (en) | Software updating method, system, and device | |
CN109684232B (zh) | 一种嵌入式协议栈内存管理方法 | |
CN1323362C (zh) | 网络设备及其外围器件互连资源的分配方法 | |
CN101257406B (zh) | 网元发现方法和系统 | |
CN103607428A (zh) | 一种访问共享内存的方法和装置 | |
CN101877666B (zh) | 基于零拷贝方式的多应用程序报文接收方法和装置 | |
CN103874051A (zh) | 物联网预置资源处理方法及装置 | |
CN101808132A (zh) | 一种can总线系统中的应用层通讯方法 | |
CN108153536B (zh) | 一种动态调整ram空间的dsp在线升级方法 | |
CN103389945A (zh) | 一种内存管理的方法及装置 | |
CN101312580B (zh) | 一种直放站监控中心和直放站监控方法 | |
CN100407619C (zh) | 使用网络处理器实现端口主备切换的方法 | |
US10782914B2 (en) | Buffer systems and methods of operating the same | |
CN109857553A (zh) | 内存管理方法及装置 | |
CN101626348B (zh) | 一种实现企业融合通讯的业务支撑系统及其方法 | |
CN100466550C (zh) | 实现多业务板架构的方法、装置和系统 | |
CN101043359A (zh) | 一种实现设备单元自适应支持的方法 | |
CN101179444B (zh) | 配置生效方法、配置系统及配置网关 | |
CN114339804A (zh) | 一种服务注册方法、装置、设备及可读存储介质 | |
CN101014049B (zh) | 一种终端无线通信协议栈软件定时器管理方法 | |
CN111198915A (zh) | 一种基于公共信息模型的数据分发系统及方法 | |
CN100423492C (zh) | 一种管理信息库的处理方法 | |
CN105204888A (zh) | 硬件功能更新方法及动态更新硬件功能的装置 | |
CN111782561B (zh) | 一种sram的存储空间分配方法、装置及芯片 | |
CN112416656B (zh) | 一种用于车站应用服务器的数据离线存储方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |