碧波液压网 欢迎你,游客。 登录 注册

一种用于嵌入式系统的可变长缓冲区设计及其实现

版权信息:站内文章仅供学习与参考,如触及到您的版权信息,请与本站联系。

  1引言

  TCP/IP协议分层处理数据,数据要在协议层间流动,存储系统的主要用途是在网络各层接口间传递数据时保存数据。另外,存储系统还需要存放通信双方的源地址、目的地址、源端口和目的端口等信息。

  基于以上目的,对存储管理能力有如下要求:(1)适合存放不同长度的数据。(2)方便地操作变长缓存。(3)尽量减少为完成这些操作所做的数据拷贝。

  另外,嵌入式系统中资源有限,传统PC上的实现对于嵌入式来说过于庞大复杂,需要去掉传统实现中复杂的部分,使得缓存的分配回收简单、可靠,减少内存的使用。

  LwIP是一个应用比较广泛的嵌入式TCP/IP协议栈。LwIP协议栈参考目前使用最广泛的BSD UNIX的Mbuf缓存管理系统,去掉Mbuf中实现复杂的、开销大的部分,根据嵌入式系统的实际需要,以减少内存使用量、增强实时性、可移植性为目标,设计实现了pbuf。本文分析LwIP的缓存管理系统实现,并实现在EuroDOSIS协议栈的嵌入式系统中应用。

  2 PBUF的设计与实现

  2.1 设计目标

  Pbuf,Packet buffer的缩写。Pbuf的设计目标是既可以动态分配内存存放数据包,也可以让数据包存放在静态内存中,且可以把多个pbuf链接到一起成为一个pbuf的链,使得一个大的数据分组可以分散存储在几个pbuf中。

  支持内存动态分配和回收,为了防止多次malloc/free在整个系统空间产生内存碎片,采用内存再分配算法——先从系统申请固定大小的静态内存作为协议栈的缓冲区,在这段内存上定义协议栈自身的内存分配算法,在固定协议栈所用的内存的情况下支持内存的动态分配和回收,防止了协议栈耗尽所有系统内存,提高了系统的可控性和可靠性。为了灵活使用有限内存空间,采用变长分配缓冲区和定长分配缓冲区两种方式。

  为了提高速度,允许数据驻留在协议栈以外的内存中,避免数据拷贝。

  针对数据源和流向的不同,设计实现四种类型的pbuf:PBUF_RAM ,PBUF_ROM ,PBUF_REF和 PBUF_POOL类型。后面对每种类型pbuf的实现目的和方法有详细介绍。

  2.2 数据结构和实现

  ? PBUF结构

  struct pbuf {

  struct pbuf *next; //指向下一个pbuf;

  void *payload; //指向pbuf数据区;

  INT16 len; //当前pbuf中已存放数据的长度

  INT16 tot_len; //pbuf链表中当前pbuf及其后所有pbuf中数据的长度的和;

  INT16 flags; //pbuf类型;

  INT16 ref; //pbuf被引用的次数,ref为0时,才可以释放该pbuf

  };

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码:

最新评论