免费注册 查看新帖 |

Chinaunix

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

0.12内核高速缓冲区是不是每个块都在空闲链表上? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-07 19:10 |只看该作者 |倒序浏览
我是边看《unix操作系统设计》,边看源代码(0.12)的,由于对空闲表的使用不同,现在有点混淆。。我的理解是每个缓冲块都在空闲链表上,然后只是管理这个链表让其满足LRU规则而已,至于散列表,感觉只是为了加速查找而已。
不知道理解是不是正确,求指教,谢谢!

论坛徽章:
0
2 [报告]
发表于 2010-09-07 21:12 |只看该作者
0.12的内核... 汗ing...   我以前入门只看了0.11... 貌似记得linus并没有完全按照unix操作系统设计里面讲的关于高速缓存的方式coding.  你说的那个函数应该所getblk()吧.    高速缓存hash表是保存从特定dev block读取到高速缓存中的页面。  这样在请求读同样的磁盘块的数据时就不需要再从磁盘读. 可以直接在hash表中找到..
0.11内核里的空闲表是在系统初始化时根据系统的内存配置分配的所有页面的集合... 在从空闲表中分配一个缓存区时并没有像书中所说的... 从空闲表"摘取"下来...   如果"摘取"下来.. 那就需要另外的数据结构来记录从空闲表中‘摘取"走的缓冲区.  当时可能是为了简化设计... 就用了一个链表...  但是这样肯定有性能上的损失...
在获取空闲缓冲区时要遍历所有的缓冲区...也包括已经分配出去的..已经不是空闲的缓冲区...
具体可以参考getblk的代码... 好像是5种情形....
一切都在代码中...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP