[发明专利]一种嵌入式系统内存零拷贝的方法及装置有效
申请号: | 202010606120.1 | 申请日: | 2020-06-30 |
公开(公告)号: | CN111800353B | 公开(公告)日: | 2022-04-12 |
发明(设计)人: | 许井泉;黄永佳;周进 | 申请(专利权)人: | 翱捷科技股份有限公司 |
主分类号: | H04L49/901 | 分类号: | H04L49/901;G06F9/50 |
代理公司: | 上海双霆知识产权代理事务所(普通合伙) 31415 | 代理人: | 殷晓雪 |
地址: | 201203 上海市浦东新区中国*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 嵌入式 系统 内存 拷贝 方法 装置 | ||
本申请公开了一种嵌入式系统内存零拷贝的方法,包括如下步骤。步骤S10:采用统一数据块格式,包括标准头部、扩展头部和预留空间。步骤S20:模块A按照统一数据块格式为数据Z分配内存,并配置mem_msg字段;同时在统一数据块格式的对应头部位置写入数据Z。步骤S30:模块A扩展pbuf的数据结构,增加指向以太网头部以及内存分配和释放字段的指针。步骤S40:模块A基于扩展后的pbuf数据结构处理数据Z,在pbuf释放函数中增加pkt_msg指针所指向的mem_msg字段中的释放函数指针。步骤S50:模块B读取内存分配和释放字段,调用其中的释放函数指针所指向的内存释放函数来释放数据Z占用的内存。本申请对内存分配和释放、数据零拷贝传递进行了优化。
技术领域
本申请涉及一种嵌入式系统(embedded system)的内存分配和释放管理方法。
背景技术
基于RTOS(real-time operating system,实时操作系统)的嵌入式系统中,可能存在多种类型的内部存储器,比如RAM(random-access memory,随机存取存储器)、ROM(read-only memory,只读存储器)、以及特定的内存池(memory pool)。本申请中将这些嵌入式系统中的内部存储器统称为内存。同时为了适应模块使用的特殊场景,还可能针对模块自行定义内存分配和释放的方式。对于RTOS系统,任务的调度一般采用线程(thread)的方式,内存对所有线程是共享的,所以线程之间的消息交互经常会采用共享内存的方式,这就带来了内存分配和释放的管理问题,如果处理不当,很容易带来内存泄露,导致系统出现故障。此外,嵌入式系统中的内存资源有限,为了减少系统开销需要尽可能减少拷贝。
以无线网络路由器为例,设备需要处理各个接口的数据包,包括WiFi接口的数据包、以太网接口的数据包、或者是3G、4G移动通讯模块的数据包,以及内部应用的数据包。不同的数据来源可能对应不同的内存分配模式,而对于TCP/IP协议中,每层IP数据包的处理还需要尽可能地减少拷贝,以免带来性能的损失。
现有的技术方案更多的集中在提高内存的分配效率上,比如采用内存池的设计方式提高访问效率,而没有从系统的角度提出优化解决方案。
发明内容
本申请所要解决的技术问题是提供一种在嵌入式系统的不同端口具有不同内存分配形式的条件下,实现内存在TCP/IP各层的不同接口之间的零拷贝的数据传递和内存释放的方法。本申请适用于共享内存的多线程调度系统中内存的分配和释放管理。
为解决上述技术问题,本申请提出了一种嵌入式系统内存零拷贝的方法,包括如下步骤。步骤S10:嵌入式系统中采用统一数据块格式,包括标准头部、扩展头部和预留空间;标准头部包括以太网头部、IP头部、TCP或UDP头部;扩展头部用来替换嵌入式系统的不同接口采用的协议的头部;预留空间预留给内存分配和释放字段即mem_msg字段。步骤S20:模块A按照统一数据块格式为数据Z分配内存,并根据内存分配情况配置mem_msg字段的数据结构,其中包括指向内存释放函数和指向内存释放地址的指针;然后把mem_msg字段写入所述预留空间;同时在统一数据块格式的对应头部位置写入数据Z。步骤S30:模块A扩展pbuf数据结构,在pbuf数据结构中增加指向以太网头部的pkt_mac指针以及指向mem_msg字段的pkt_msg指针。步骤S40:模块A基于扩展后的pbuf数据结构处理数据Z,将数据Z挂载到pbuf数据结构的payload字段;还在pbuf释放函数中增加pkt_msg指针所指向的mem_msg字段中的释放函数指针。步骤S50:对于转发到模块B的数据Z,模块B读取mem_msg字段,调用其中的释放函数指针所指向的内存释放函数来释放数据Z占用的内存。上述方法首先对TCP/IP各种协议的数据包分析,采用统一数据块的扩展头部充分预留包头空间,解决数据包经过各层以及各接口可能带来的数据修改和填充,而充分预留的空间也避免了后续的内存拷贝。同时针对RTOS系统中存在的多种内存分配形式,在统一数据块中设计内存分配和释放字段用于记录内存的释放指针,灵活而方便地实现了谁分配谁释放的原则,避免内存的泄露。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于翱捷科技股份有限公司,未经翱捷科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010606120.1/2.html,转载请声明来源钻瓜专利网。