嵌入式TCP/IP协议LwIP的内存管理机制研究
2012-11-26蔡雄飞王新华郭淑琴
蔡雄飞,王新华,郭淑琴
(1浙江工业大学信息工程学院,浙江杭州310023;2浙江科技学院信息与电子工程学院,浙江杭州310023)
0 引言
嵌入式系统中广泛采用的网络协议栈一般是作为嵌入式操作系统内核的一部分,应用中只需要在系统内核配置标中标记使用即可,但这些商用操作系统高昂的版权费不利于初期的开发。LwIP(Lightweight Internet Protocol)是瑞士计算机科学院的Adam Dunkels等开发出来的一套用于嵌入式系统的开源TCP/IP协议栈,可以方便地移植于各种开源的嵌入式操作系统。LwIP的主要特点是在保证了TCP/IP协议基本功能模块的基础上,减少了对RAM的占用,一般只需要几十KB的RAM就可以运行[1]。目前,最新的LwIP已经发展到了1.4.0版。本文主要分析和研究了LwIP协议栈的内存管理机制,并设计出了网络接口层的主收发程序。
1 LwIP的数据缓存方式
LwIP采用pbuf(packet buffer)结构和pbuf链来管理数据包。pbuf结构既能在动态内存分配下保存信息包的数据,也能够让信息包数据驻留在静态存储区,通过结构中的*prev和*next指针将存储数据包信息的各个pbuf结构“连接”起来,在逻辑上构成一个pbuf链。pbuf链实现了使物理上呈分散存储的数据能够在逻辑上连续读写,这样就减少了频繁的数据拷贝和内存分配操作。LwIP管理内存的pbuf结构为[2,3]:

pbuf具有PBUF_POOL、PBUF_ROM和PBUF_RAM 3种类型,结构中的flags成员变量即用来标识它的类型。由于分配一个pbuf的操作可以快速完成,PBUF_POOL主要用于网络设备驱动层,适合用于中断处理。当应用程序要发送的数据位于应用程序管理的存储区时,则会分配PBUF_ROM类型的pbuf。而PBUF_RAM类型的pbuf主要用于应用程序发送的数据由动态生成的情况下。……
