`
peizhiinfo
  • 浏览: 1494425 次
文章分类
社区版块
存档分类
最新评论

BSD中为什么用了mbuf,而不是直接用应用层的buf

 
阅读更多

这是从myjesky的一个帖子中截取出来的的内容

http://topic.csdn.net/t/20050420/13/3951787.html

内存复制占用很多时间的,为什么还要用mbuf这样一个结构?

简单的说,如果传指针,那么上层用户如果无意之中释放了某块内存,那么整个协议栈就可能会崩溃,而导致内核的崩溃(协议栈中保持着大量的mbuf链表。BSD和linux内核只信任内核本身。

mbuf在层与层之间,就是传递指针的,至于为什么不直接使用应用层buf,有几个原因:
1. 应用层buf不一定能够满足需要,比方说,我需要在前面加上IP头,可是前面没有空间了。
2. 发送过程是一直延伸到物理层的,也就是说,假如直接使用应用层buf,那么直到驱动的芯片发送完报文之前,系统必须锁定这块内存,你的应用层能接受这种等待么,要知道某些链路的速度是很慢的,而CPU快得多,所有比较合理的方法是,将数据复制到mbuf中,然后后面的发送过程使用mbuf,程序则可以快速 返回。

下面是手册中对mbuf的描述:

An mbuf is a basic unit of memorymanagement in the kernel IPC subsystem.

Network packets and socket buffers arestored in mbufs. A network packet

may span multiple mbufs arranged into a mbufchain (linked list), which

allows adding or trimming network headerswith little overhead.

While a developer should not bother with mbufinternals without serious

reason in order to avoid incompatibilitieswith future changes, it is

useful to understand the general structureof an mbuf.


An mbuf consists of a variable-sizedheader and a small internal buffer

for data.The total size of an mbuf, MSIZE, is a constant defined in

<sys/param.h>. The mbuf header includes:

m_next (struct mbuf *) A pointer to the next mbufin the mbuf

chain.

m_nextpkt (struct mbuf *) A pointer to the next mbufchain in the

queue

m_data (caddr_t) A pointer to data attached tothis mbuf.

m_len (int) The length of the data.

m_type (short) The type of the data.

m_flags (int) The mbuf flags.

分享到:
评论

相关推荐

    BSD68,BSD100.rar

    BSD68和BSD100是两个在计算机视觉和图像处理领域中广泛使用的数据集,尤其在深度学习的训练和评估中占据重要地位。这两个数据集由加利福尼亚大学伯克利分校的研究人员创建,因此通常被称为Berkeley Segmentation ...

    bsd架设管理与应用

    bsd架设管理与应用

    IP处理模块以及Mbuf

    Mbuf,全称Memory Buffer,是一种内存缓冲区的数据结构,常见于BSD风格的操作系统中,如FreeBSD和OpenBSD。Mbuf设计的主要目标是在网络数据处理中提供高效、灵活的内存管理。Mbuf的特点包括: 1. 链接结构:Mbuf...

    BSD的TCP/IP协议栈

    在BSD(Berkeley Software Distribution)系统中,尤其是BSD4.4版本,其TCP/IP协议栈的设计与实现是业界的经典之作,被广泛应用于各种操作系统,包括现代的FreeBSD、OpenBSD和NetBSD等。本篇将深入探讨BSD4.4的TCP/...

    4.4BSD-Lite

    在4.4BSD-Lite中,TCP/IP协议栈的实现包括了从低层的数据链路层到高层的应用层的各个层次。例如,链路层协议如Ethernet或PPP处理物理连接和帧的传输,而网络层的IP协议则处理网络间的路由选择。传输层的TCP和UDP...

    BSD中的arp实现

    【BSD中的arp实现】章节主要探讨了在BSD操作系统中如何实现地址解析协议(ARP),这是一种将IP地址转换为网络接口硬件地址(如以太网地址)的机制。ARP的规范在RFC 826中定义,它对于网络通信至关重要,尤其是在...

    winsocket -BSD socket 入门讲义

    虽然在实际应用中,TCP/IP协议族更常用,但OSI模型为理解和分析网络通信提供了理论框架。 在网络编程中,Socket是连接应用层和传输层的接口,它允许应用程序通过网络发送和接收数据。在Windows环境下,Winsock遵循...

    BSD500数据集

    BSD500数据集是计算机视觉领域中一个重要的资源,主要关注图像分割和轮廓提取的任务。这个数据集包含了丰富的信息,对于研究和开发图像处理算法,尤其是语义分割技术,有着不可忽视的价值。 首先,我们要理解什么是...

    4.4BSD-Lite2源码

    4.4BSD-Lite2源码是用于深入理解TCP/IP协议栈实现的重要参考资料,它源自于Berkeley Software Distribution (BSD)家族的操作系统,是4.4BSD-Lite的一个分支。这个源码库提供了网络堆栈的详细实现,对于学习网络编程...

    4.4BSD-lite.tar.gz

    4.4BSD的套接字API在业界广泛使用,为各种编程语言提供了标准的网络编程模型。 4. **路由和网络配置**:4.4BSD-lite包含了动态路由协议的实现,如RIP(路由信息协议)和OSPF(开放最短路径优先),以及静态路由配置...

    86BSD代码.rar

    在86BSD的驱动代码中,你会找到用于处理传感器数据的函数,这些函数可能包括读取传感器的原始值、进行温度补偿(因为压力读数可能受环境温度影响)、应用计算公式将这些值转化为实际压力值等。这些公式可能涉及到...

    iOS中BSD socket的客户端实现

    BSD(Berkeley Software Distribution)Socket是UNIX系统中广泛使用的网络编程接口,它也在iOS操作系统中得到了支持。本篇文章将深入探讨如何在iOS中实现一个简单的BSD Socket客户端。 首先,我们需要了解BSD ...

    奔流系列BSD5015

    奔流系列BSD5015是一款专为长时间、高音质播放而设计的音频播放模组,其特点在于采用上海奔流公司最新推出的智能语音控制芯片BLA902,配合SD卡技术,可以实现多种功能,适用于多种应用场景。以下是根据提供的文件...

    BSD68 用于图像去噪算法的测试图片

    BSD68是一个专门用于图像去噪算法评估的图片数据集,它包含68张具有不同特性的灰度图像。这个数据集在图像处理领域中扮演着重要的角色,因为准确评估去噪算法的效果对于算法的开发和优化至关重要。下面将详细讨论...

    iPhone网络通讯之BSD Socket篇

    标题《iPhone网络通讯之BSD Socket篇》所涉及的知识点主要集中在iOS开发中网络编程的基础,具体到BSD套接字(BSD Socket)的应用。BSD套接字是网络编程中使用的一套API,用于实现进程间的通信(IPC),也可以用于...

    图像处理BSD68测试集灰度图像

    图像处理BSD68测试集灰度图像。图像处理(image processing),用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。图像处理一般指数字图像处理。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄...

    数字图像处理数据集(一)-BSD68

    在使用BSD68数据集进行实验时,研究人员通常会首先对图像进行预处理,然后应用各种算法,并用剩余的图像作为测试集来评估算法的性能。通过对不同算法的比较,可以优化图像处理的方法,从而推动该领域的进步。 总之...

    linux与BSD不能系统混为一谈.pdf

    其次,从代码控制方面看,BSD 的代码不是被控制在任何一个人手里,而 Linux 的内核基本上被 Linus Torvalds 所控制,BSD 并没有单一的人来说什么可以或什么不可以进入代码。相反,BSD 通过一个核心小组 "Core Team" ...

    4.4BSD Lite

    卷2通常会深入探讨TCP/IP的高级主题,如路由选择、网络管理、网络安全以及应用层协议的实现,如FTP、SMTP、DNS等。通过这些源代码,读者可以了解到如何在实际操作系统中实现这些协议,理解其工作原理,这对于网络...

Global site tag (gtag.js) - Google Analytics