VxWorks中三元组mBlk的原理

VxWorks采用MBlk-ClBlk-Cluster三元组结构来存储网络协议栈中的数据,以减少拷贝提高性能。在数据封装时,新申请的mBlk存放报头,而数据存储在Cluster中,通过mBlk引用。存储池netPool预先分配mBlk、ClBlk和Cluster,按需组合使用。mBlk链表构成数据包,ClBlk进行引用计数,Cluster形成链表池。这种机制通过调整指针而非复制数据,提升了系统效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据包在网络协议栈中从上向下流动时,需要在数据的首部和尾部为其增加相应的包头和包尾。例如在TCP/IP协议栈中,数据从应用层向下传输的过程中,需要为其封装TCP头部、IP头部等,使得接收端能根据各层的报头来正确的接收数据。这就要求存储数据的缓冲区是可变长的,而同时如果数据是通过拷贝在协议层之间传输时,大量的拷贝会极大的影响性能。

因此在VxWorks中,网络协议栈采用了MBlk-ClBlk-Cluster三元组的结构来存储数据。

1)在为数据包封装头部时,申请一个新的mBlk来存放待封装的报头,并将其链接到mBlk链的头部,这样就不需要拷贝了。

2)将真正待传输的上层数据存放在Cluster中,MBlk通过操作Cluster来引用数据。这样数据在协议层之间传输时,只需要修改MBlk的指针即可,不用真正的拷贝数据。

使用三元组的结构来存储网络协议栈中的数据,可以极大的提升系统性能。

1、存储池netPool

存储池netPool与内存池类似,在初始化的时候,就先根据配置构造好一定数量的mBlk、ClBlk和Cluster。然后在需要用到时,从存储池中取出相应的结构,并将其组合在一起即可。

存储池初始化后的示意图如下:


由上图可知,一个存储池又可分为一个mBlk池、一个ClBlk池和多个Cluster池,其中不同的Cluster池中存放着大小不同的Cluster,Cluster的大小默认可以为64、128、256、512、1024、

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值