免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 825 | 回复: 0
打印 上一主题 下一主题

Understanding Linux Network Internals 1.2.3. 叁考计数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-01 18:21 |只看该作者 |倒序浏览
1.2.3. 叁考计数
当一块代码试着存取被释放的数据结构的时候,内核不是很快乐,而且用户很少地对内核的反应感到满意。避免那些脏问题,去构造垃圾收集机制是比较容易而且是更有效的 (请见 " 垃圾收集 " 本章节后面的部分) 大多数的数据结构保存一个叁考计数。优秀的内核成员逐渐增加或者渐减每个数据结构的叁考计数 ,每次他们保存或释放叁考,对结构。对于任何的数据结构类型所需要叁考计数,通常的内核成员拥有结构输出二种功能去递增和渐减叁考计数。 分别地,这样功能通常被称为 xxx_hold 和 xxx_release 。 有时释放功能也可以用 xxx_put 代替 。 (例如, dev_put 对于 net_device 结构)
我们喜欢设想在内核中没有不健康的部分,但是开发者是人的,同样地他们不总是写出没有bug的代码。 叁考计数的使用作为一个简单而有效的机制-避免释放静止的叁考数据结构。 然而,它不是总能完美地解决问题。 这是忽略了平衡递增和渐减的结果:
如果你发布关于数据结构的参考但是忘记了声明 xxx_release 函数, 内核将不会释放这个数据结构 (除非发生其他更多的 bug 代码区块这个发布的函数才会被声明在特别的时间通过错误的形式!)。 这将导致存储空间逐渐的耗尽。
如果你提取关于数据结构的参考但是忘记声明 xxx_hold, 而且在稍后指出 , 你恰好是唯一的叁考持有人, 因为你没有说明,所以结构将会过早的被释放。 这种情形一定是更灾难的超过前面的; 你接下来尝试接近结构可能会破坏其他的数据或者引起内核错误是整个系统崩溃。
当数据结构因为一些原因被移动, 叁考持有人能明确地被通知到有关它离开的情况以便他们能很斯文的(politely)释放他们的叁考。 通过通知链来完成。一个有趣的例子在第 8 章中的 " 叁考计数 " 。
在数据结构上的叁考计数代表性被增加:
二种数据结构类型之间有紧密的关系。在这情况,其中一个经常会维持一个指针到第二个类型的住址去设定初值。
管理者要存取数据结构会开启一个定时器。当定时器被开启的时候,叁考计数在结构上被增加, 最后一件事,在定时器期满之前,你需要释放这个数据结构。
一次成功的查询在一个列表或者 Hash表中返回一个指针到匹配的要素。在大多数情况下,送回的结果被访客去实行一些工作。所以,一个查询常式在相配要素上增加叁考计数, 而且让访客释放它通常是必需的。
当一个数据结构的最后参考被发布, 它可能被释放, 因为它再也不被需要 ,但是也不是必然的。
新 sysfs 文件系统介绍到,它已经帮助创建部分好的内核代码,使得更多的一致的来意识到参考计数被它所应用。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1880/showart_71320.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP