下载此文档

第九章协议处理.ppt


文档分类:法律/法学 | 页数:约28页 举报非法文档有奖
1/28
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/28 下载此文档
文档列表 文档介绍
第九章协议处理主要内容缓冲区管理分片重组常规协议(TCP/UDP),首先要分配一个缓冲区操作系统必须提供分配和释放缓冲区的服务,包括:管理空闲缓冲区为数据包找到合适大小的缓冲空间如果多个连接或用户共享一个缓存空间,还需提供某种形式的公平性困难::使用一个缓冲区链来存放一个包,每个缓冲区为一段连续的存储空间BSD定义了三种大小的缓冲区:100字节、108字节、2048字节(称cluster)Mbufs设计的出发点:使用一个缓冲区链来存放一个包:允许动态扩展包的缓冲空间;适应各种协议栈定义不同大小的缓冲区:充分利用内存空间缺点:访问数据和拷贝数据的开销大Sk_bufLinux操作系统的包缓冲区实现是sk_buf:每个包缓冲区都是一块连续地址空间,提前为路径上需要添加的各种协议头预留了空间用空间换时间(P4b):包缓冲区必须满足最大包长,有时会浪费空间,但实现简化了。避免不必要的一般性(P7):放宽对支持任意协议栈的要求,以提高速度。如何为不同大小的包分配缓冲区?按需分配内存:当一个包到来时,为其分配一块合适大小的缓存空间动态分配内存的困难:用户在不同的时间释放缓冲区,导致内存中出现许多不连续的、大小不同的空闲区域教科书上的标准算法(如Fist-Fit、Best-Fit)可以搜索到合适大小的空闲区域,但速度太慢高速包缓冲区分配器隔离池分配器(SegregatedPoolAllocator)Linux分配器(LinuxAllocator)批量分配器(BatchAllocator),称Kingsleymalloc()。将存储空间划分成一组隔离的内存池,同一个内存池中的缓冲区大小相同,为2的幂次。内存请求被取整到最近的缓冲区大小,从相应的内存池链表头部取一个空闲缓冲区分配。若对应的内存池空间不足,分配失败。可能有内存空间浪费,但实现简单。Linux分配器Linux分配器最初由DougLea实现,称为dlmalloc()内存被划分成128个内存池:前64个内存池,缓冲区大小分别为16、24、32、……、512字节(按8字节步长增加)后64个内存池,大小为2的幂次分配器会合并相邻的空闲缓冲区,放入合适的缓冲池中。Lea分配器比Kingsley分配器使用内存更高效,但实现起来更复杂。批量分配器分配器一次性向系统请求一大块内存,用来作为包缓冲区(批量的含义)当一个内存块正在使用时,后台创建另一个空闲内存块分配器在当前内存块上采用顺序分配:一个指针指向上一次分配结束的位置,新的内存请求总是从当前位置开始分配一个内存块用完,立即转移到另一个空闲内存块上

第九章协议处理 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息