嵌入式操作系统vxworks中网络协议存储池原理及实现

嵌入式操作系统vxworks中网络协议存储池原理及实现

ID:9542612

大小:48.50 KB

页数:2页

时间:2018-05-03

嵌入式操作系统vxworks中网络协议存储池原理及实现_第1页
嵌入式操作系统vxworks中网络协议存储池原理及实现_第2页
资源描述:

《嵌入式操作系统vxworks中网络协议存储池原理及实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、嵌入式操作系统VxWorks中网络协议存储池原理及实现摘要本文讨论了网络协议存储池的基本原理和在嵌入式操作系统中的实现方法。为在嵌入式系统中实现TCP/IP协议栈,提供了一种有效、简洁、可靠的缓冲区管理。关键词Vx_BLK_HDRmBlkHdr;/*header*/M_PKT_HDRmBlkPktHdr;/*pkthdr*/CL_BLK*pClBlk;/*pointertoclusterblk*/}M_BLK;structclBlk{CL_BLK_LISTclNode;/*unionofnext

2、clBlk*/UINTclSize;/*clustersize*/intclRefCnt;/*countofthecluster*/structPool*pNetPool;/*pointertothePool*/}CL_BLK;/*headeratbeginningofeachmBlk*/structmHdr{structmBlk*mNext;/*nextbufferinchain*/structmBlk*mNextPkt;/*nextchaininqueue/record*/char*mDat

3、a;/*locationofdata*/intmLen;/*amountofdatainthismBlk*/UCHARmType;/*typeofdatainthismBlk*/UCHARmFlags;/*flags;seebeloBlkofchain;validifM_PKTHDRset*/structpktHdr{structif*rcvif;/*rcvinterface*/intlen;/*totalpacketlength*/}M_PKT_HDR;1.2网络协议存储池的初始化VxWork

4、s在网络初始化时给网络协议分配存储池并调用PoolInit()函数对其初始化,由于一个网络协议通常需要不同大小的簇,因此它的存储池也必须包含很多簇池(每一个簇池对应一个大小的簇)。如图2所示。另外,每个簇的大小必须为2的方幂,最大可为64KB(65536),存储池的常用簇的大小为64,128,256,512,1024比特,簇的大小是否有效取决于CL_DESC表中的相关内容,CL_DESC表是由PoolInit()函数调用设定的。图2网络协议存储池初始化后的结构1.3存储池的链接及释放存储池在初始

5、化后,由Pool结构组织几个下一级子池:一个mBlk池、一个clBlk池和一个cluster池。mBlk池就是由很多mBlk组成的一条mBlk链;clBlk池就是由很多clBlk组成的一条clBlk链。cluster池由很多的更下一级cluster子池构成,每一个cluster子池就是一个cluster链。每一个cluster链中的所有cluster的大小相同,不同链中的cluster大小不同。但要实现不同进程访问同一簇而不需要作数据的拷贝,还需要把mBlk结构,clBlk结构和簇结构链接在一起

6、。创建这三级结构一般要遵循这样五步:a.调用系统函数ClusterGet()预定一块簇缓冲区;b.调用系统函数ClBlkGet()预定一个clBlk结构;c.调用系统函数MblkGet()预定一个mBlk结构;d.调用系统函数ClBlkJoin()把簇添加到clBlk结构中;e.调用系统函数MblkClJoin()把clBlk结构添加到mBlk结构中。这样,就构成了最后的缓冲区。在缓冲区中的数据使用完毕后要及时的释放内存,这一过程只需要调用系统函数MblkC1ChainFree()释放存有数据的

7、mBlk链表。例如当数据向上层传送时,在本层中可以释放已经不再使用的mBlk链表,由于在clBlk中记录着指向本模块的mBlk的个数,虽然释放了mBlk链表,但是这并不表示将cluster中的数据释放掉了,上层复制的链表仍然控制着这些数据,直到clBlk中的mBlk计数为0时才真正的将数据占用的簇释放掉,将数据占用的内存空间释放、归还给系统将来使用。2网络协议存储池与数据的封装处理Vx_PKTHDR标志。在第二个mBlk中分组首部占用的空间现在未用。最后,改变在此分组首部中的长度成员mBlkPk

8、tHdr.len,成员mBlkPktHdr.len的值是这个分组的mBlk链表中所有数据的总长度:即所有通过mBlkHdr.mNext指针链接的mbuf的mBlkHdr.mLen值的和。本例中由于增加了28个字节变成了1488。如图4所示。图4添加完IP和UDP首部的mBlk这样,当报文在协议栈中流动时,不会拷贝报文链,而只需把指向mBlk的指针通过参数传递。当报文需要进人缓冲区时,也是通过链表的指针操作将报文插入或添加到队列中。3结论网络协议存储池的职责有两个:为协议栈提供合适的缓冲区,如果太

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。