欢迎来到天天文库
浏览记录
ID:18775910
大小:145.00 KB
页数:12页
时间:2018-09-23
《vxworks网络协议栈》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、《嵌入式操作系统VxWorks中网络协议存储池原理及实现》 周卫东蔺妍刘利强(哈尔滨工程大学自动化学院,黑龙江哈尔滨,150001) 摘 要 本文讨论了网络协议存储池的基本原理和在嵌入式操作系统中的实现方法。为在嵌入式系统中实现TCP/IP协议栈,提供了一种有效、简洁、可靠的缓冲区管理。 关键词 VxWorks;mBlk;clBlk;网络协议存储池 VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS)。它以良好的持续发展能力、高性能的内核以及卓越的实时性被广泛的应用在通信
2、、军事、航空、航天等高精尖技术及实时性要求极高的领域中。VxWorks操作系统有着优越的网络性能,而缓冲区的数据拷贝是影响网络性能的主要因素。 众所周知,缓冲区在网络协议栈中有两个作用:第一,提供载体,使分组或报文可以在各协议层中流动;第二,为各级缓冲区提供空间。缓冲区的设立使得TCP/IP协议栈支持异步I/O操作,异步操作对于协议栈的I/0性能是非常重要的。在网络输出的过程中每一层需要在数据的首部或者尾部添加数据头和数据尾来对数据进行封装使得接收端对应的层能够进行正确的接收,在输入的过程中每层都需要将本层的数据头和数据尾去掉而最终还原成发
3、送端发送的数据。上述的封装/去封装和拷贝操作使得网络协议对内核的存储器管理能力提出了很多要求。这些要求包括能方便地操作可变长缓存,能在缓存头部和尾部添加数据(如低层封装来自高层的数据),能从缓存中移去数据(如当数据包向上经过协议栈时要去掉首部),并能尽量减少这些操作所作的数据复制。1 使用netBufLib管理存储池的基本原理 网络协议存储池使用mBlk结构、clBlk结构、簇缓冲区和netBufLib提供的函数进行组织和管理。mBlk和clBlk结构为簇缓冲区(cluster)中数据的缓冲共享和缓冲链接提供必要的信息。netBufLib例
4、程使用mBlk和clBlk来管理cluster和引用cluster中的数据,这些结构体中的信息用于管理cluster中的数据并且允许他们通过引用的形式来实现数据共享,从而达到数据“零拷贝”的目的。1.1 结构体mBlk和clBlk及其数据结构 mBlk是访问存储在内存池中数据的最基本对象,由于mBlk仅仅只是通过clBlk来引用数据,这使得网络层在交换数据时就可以避免数据复制。只需把一个mBlk连到相应mBlk链上就可以存储和交换任意多的数据。一个mBlk结构体包括两个成员变量mNext和mNextPkt,由它们来组成纵横两个链表:mNex
5、t来组成横的链表,这个链表中的所有结点构成一个包(packet);mNextPkt来组成纵的链表,这个链表中的每个结点就是一个包(packet),所有的结点链在一起构成一个包队列,如图1所示。图1包含两个数据包的mBlk链 结构体mBlk和clBlk的数据结构如下所示:structmBlk{ M_BLK_HDR mBlkHdr; /*header*/ M_PKT_HDR mBlkPktHdr; /*pkthdr*/ CL_BLK* pClBlk; /*pointertoclu
6、sterblk*/}M_BLK;structclBlk{CL_BLK_LIST clNode;/*unionofnextclBlk*/ UINT clSize;/*clustersize*/ int clRefCnt;/*countofthecluster*/ structnetPool* pNetPool; /*pointertothenetPool*/}CL_BLK;/*headeratbeginningofeachmBlk*/structmHdr{ structmBlk* mNext;/*nextbufferincha
7、in*/ structmBlk*mNextPkt;/*nextchaininqueue/record*/char*mData; /*locationofdata*/int mLen;/*amountofdatainthismBlk*/UCHAR mType;/*typeofdatainthismBlk*/UCHAR mFlags; /*flags;seebelow*/}M_BLK_HDR;/*record/packetheaderinfirstmBlkofchain;validifM_PK
8、THDRset*/struct pktHdr{structifnet* rcvif;/*rcvinterface*/in
此文档下载收益归作者所有