LwIP的内存管理

LwIP的内存管理,第1张

 

 

  TCP/IP是一种基于OSI参考模型的分层网络体系结构,它由应用层、运输层、网络层、数据链路层、物理层组成。各层之间消息的传递通过数据报的形式进行。由于各层之间报头长度不一样,当数据在不同协议层之间传递时,对数据进行封装和去封装、增加和删除 *** 作将十分频繁。

  在嵌入式系统开发中也经常遇到类似问题。用户数据从本地嵌入式设备传输到远程主机的过程中,要经过各层协议,对消息的封装、去封装和拷贝 *** 作几乎是不可避免的。而通常所采用的用一段连续的内存区来存储、传递数据的做法会有以下的缺陷:

  (1)当从上层向下层传递数据时,下层协议需要对数据进行封装,而上层在申请内存时没有(也不应该)考虑下层的需要。这样会导致下层协议处理时需要重新申请内存并进行内存拷贝,从而影响程序的效率。

  (2)当从下层向上层传递数据时,下层协议专有的数据结构应当对上层协议不可见。因此也需要重新申请内存并进行内存拷贝。

  (3)随着数据的逐层处理,其内容可能有所增减,而连续内存很难处理这种动态的数据增删。

  因此,必须有一种能适应数据动态增删、但在逻辑上又呈现连续性的数据结构,以满足在各协议层之间传递数据而不需要进行内存拷贝。嵌入式TCP/IP协议栈要求简单高效,并减少对内存的需求。这些都需要相应的内存管理机制实现。

  1 LwIP协议栈中pbuf介绍

  LwIP(Light weight IP)是瑞士计算机科学院Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP可以移植到 *** 作系统上,也可以在无 *** 作系统的情况下独立运行。LwIP TCP/IP实现的重点是:在保持TCP协议主要功能的基础上,减少对RAM的占用。这使LwIP协议栈适合在低端嵌入式系统中使用。

  LwIP利用pbuf结构实现数据传递,它与BSD中的Mbuf很相似。pbuf的主要用途是保存在应用程序和网络接口间互相传递的用户数据。

  pbuf的内部结构为:

  struct pbuf{

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

  void *payload;    /*指向pbuf数据中的起始位置*/

  u16_t tot_len;    /*该pbuf和后续pbuf中数据长度的总和*/

  u16_t len;      /*该pbuf中数据的长度*/

  u16_t flags;     /*pbuf的类型*/

  u16_t ref;      /*该pbuf被引用的次数*/

  }

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2497895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存