vxworks linux 内存管理,VxWorks中netBufLib的内存池管理

使用netBufLib进行内存池管理

总体概述:

netBufLib提供了mBlks与clBlks结构,其中mBlks指向clBlks,而clBlks指向实际存贮数据的cluster.不同层次之间交互数据可以直接通过传递mBlks链来进行,而不用进行多余的数据拷贝。其中clBlks的作用是,记录有多少个mBlks对其进行了引用,当引用为零时才可以释放。不同的mBlks可以指向相同的clBlks,以共享数据。

我的理解:

对于发送或接收的包可以由多个分开的内存块组成,也可以由一块大的内存块组成。因此对于一个包来说,它有一个mBlks链,链接着这个包的所有clusters.一个包也应该可以由一个大cluster组成,要是这样的话,一个包就只要有一个mBlks就行了。mBlks除链接着本身的所有的mBlks外,mBlks头还链接着下一个包的mBlks链的头。

clusters大小:

对于clusters的大小,可以有不同型号。用于protocol的内存池,可以有不同大小的clusters型号,但型号大小仍有限定(见参考资料).用于driver的内存池,只有一种大小的cluster.其大小与MTU(max

transport unit)类似。

* Valid cluster sizes range from 64 bytes to

65536 bytes. If there are

* multiple cluster pools, valid sizes are further restricted to

powers of

* two (for example, 64, 128, 256, and so on). If

there is only one cluster

* pool (as is often the case for the memory pool specific to a

single

* device driver), there is no power of two

restriction. Thus, the cluster

* can be of any size between 64 bytes and 65536 bytes on 4-byte

alignment. A

* typical buffer size for Ethernet devices is 1514

bytes. However, because

* a cluster size requires a 4-byte alignment, the cluster size for

this

* Ethernet buffer would have to be increased to at least 1516

bytes.

建立内存池内骤:

调用netPoolInit(),初始化缓冲池参数。预留mBlk,clBlk,cluster结构空间等(我想)。此步应在初始化时进行。

在clusters中保存数据:

1.在初始化时,调用netClusterGet()来预留clusters空间。

2.当组装好数据或接收到数据则装进clusters中的一个。

3.调用netClBlkGet()来预留clBlk结构。

4.调用netClBlkJoin()连接clBlk到包含数据的cluster.

5.调用netMblkGet()预留mBlk结构。

6.调用netMblkClJoin()连接mBlk结构到clBlk。

释放mBlks,clBlks,Clusters:

释放mBlks链:netMblkClChainFree().这将释放链中所有的mBlks。同时减少clBlks中mBlks对其的引用,若减少至零,则clBlks及Clusters被释放。

释放单独mBlk,clBlk,Cluster: netMblkClFree();

protocol与driver间传数据:

driver调用MUX的muxReceive();MUX调用protocol的stackRcvRtn()函数;当muxReceive()正确返回后,driver确定数据己发送,接下来的buffer释放,由协议栈上层来完成。(The

upper layers of the stack are responsible for freeing the memory

back to the driver’s memory pool.)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值