深入理解网络技术内幕 阅读笔记(一)
来源:互联网 发布:网络打印相片 编辑:程序博客网 时间:2024/06/05 10:38
内存缓存:内核分别使用kmalloc和kfree函数分配和释放一个内存块。当分配和回收经常发生时,相关的内核组建初始化函数通常会分配一块特殊的内存缓存,以作分配之用。当一个内存块被释放时,实际上是返回到当初被分配的同一个缓冲区中。内核维护的其专属内存缓存的一些网络数据结构的例子包括,
套接字缓冲区描述符:用于分配sk_buff缓冲区描述符。sk_buff结构可能是网络子系统中分配和回收注册次数最高的。
邻居映射协议:每一个邻居映射协议都使用一个缓存区,以分配存储L3层到L2层地址映射的数据结构(struct neighbour)。
路由表:路由代码使用两个缓存,用于定义路径的三个数据结构(struct fib_node, struct fib_alias, struct rtable<v4>)。
kmem_cache_create
kmem_cache_destroy
创建和销毁一个缓存。
kmem_cache_alloc
kmem_cache_free
为缓存分配及回收一个缓冲。
互斥:每种互斥机制都是特定环境下的最佳选择。
回旋锁(spin lock):这是一种在某一个时刻只能由一个执行的线程所持有的锁。若试图获得由另一个执行线程所持有的锁,则要进入循环等待,直到该锁被释放为止。由于进入循环将造成浪费,回旋锁只用于多处理器系统中,并且通常只用在开发人员预期该锁只会被短期持有的时候。此外,由于会引起其他执行线程的浪费,执行线程在持有回旋锁时不能休眠。
读-写回转锁:当给定锁的使用可以明确分为只读和读-写时,应该先使用读-写回转锁。同一时刻该锁的持有者只能有一个可以写入,同时,当该锁被一个写入者持有时,读者都不能取得该锁。由于读取者的优先级高于写入者,因此当读取者的数目远远超过写入者的数目时,这种类型的锁能很好的工作。例如fib_hash_lock,dev_base_lock,proto_list_lock。
RCU:Linux新机制,下列特定条件下工作的很好:
- 与只读锁的请求相比,读-写锁的请求很少见。
- 持有该锁的代码以原子的形式执行,而且不能休眠。
- 该锁保护的数据结构是通过指针访问的。
- 《深入理解Linux网络技术内幕》阅读笔记(一)
- 深入理解网络技术内幕 阅读笔记(一)
- 《深入理解Linux网络技术内幕》阅读笔记(二)
- 《深入理解Linux网络技术内幕》阅读笔记(三)
- 《深入理解Linux网络技术内幕》阅读笔记(四)
- 《深入理解Linux网络技术内幕》阅读笔记(五)
- 《深入理解Linux网络技术内幕》阅读笔记(六)
- 《深入理解Linux网络技术内幕》阅读笔记(七)
- 《深入理解Linux网络技术内幕》阅读笔记(八)
- 《深入理解Linux网络技术内幕》阅读笔记(九)
- 《深入理解Linux网络技术内幕》阅读笔记(十)
- 《深入理解Linux网络技术内幕》阅读笔记(十一)
- 《深入理解Linux网络技术内幕》阅读笔记(十二)
- 《深入理解Linux网络技术内幕》阅读笔记(十三)
- 《深入理解Linux网络技术内幕》阅读笔记(十四)
- 《深入理解Linux网络技术内幕》阅读笔记(十五)
- 《深入理解Linux网络技术内幕》阅读笔记(十六)
- 《深入理解Linux网络技术内幕》阅读笔记(十七)
- awk 控制结构
- Unity3d 调用外部视频
- ecshop中 dwt, lbi 文件详解
- Spring MVC 3.2 技术预览(三):动手写一个异步Controller方法
- 取消ListView点击变色
- 深入理解网络技术内幕 阅读笔记(一)
- CocoaPods的安装和使用
- spring-boot学习
- 欢迎使用CSDN-markdown编辑器
- 【扩展Baby Step Giant Step解决离散对数问题】
- SpringMVC 3.0 常用注解简介
- 圆角、分割线以、及选择器
- linux命令之sync
- 毫秒级日期类型转换