0.12内核高速缓冲区是不是每个块都在空闲链表上?
时间:2010-09-07
来源:互联网
我是边看《unix操作系统设计》,边看源代码(0.12)的,由于对空闲表的使用不同,现在有点混淆。。我的理解是每个缓冲块都在空闲链表上,然后只是管理这个链表让其满足LRU规则而已,至于散列表,感觉只是为了加速查找而已。
不知道理解是不是正确,求指教,谢谢!
不知道理解是不是正确,求指教,谢谢!
作者: dawnwish 发布时间: 2010-09-07
0.12的内核... 汗ing... 我以前入门只看了0.11... 貌似记得linus并没有完全按照unix操作系统设计里面讲的关于高速缓存的方式coding. 你说的那个函数应该所getblk()吧. 高速缓存hash表是保存从特定dev block读取到高速缓存中的页面。 这样在请求读同样的磁盘块的数据时就不需要再从磁盘读. 可以直接在hash表中找到..
0.11内核里的空闲表是在系统初始化时根据系统的内存配置分配的所有页面的集合... 在从空闲表中分配一个缓存区时并没有像书中所说的... 从空闲表"摘取"下来... 如果"摘取"下来.. 那就需要另外的数据结构来记录从空闲表中‘摘取"走的缓冲区. 当时可能是为了简化设计... 就用了一个链表... 但是这样肯定有性能上的损失...
在获取空闲缓冲区时要遍历所有的缓冲区...也包括已经分配出去的..已经不是空闲的缓冲区...
具体可以参考getblk的代码... 好像是5种情形....
一切都在代码中...
0.11内核里的空闲表是在系统初始化时根据系统的内存配置分配的所有页面的集合... 在从空闲表中分配一个缓存区时并没有像书中所说的... 从空闲表"摘取"下来... 如果"摘取"下来.. 那就需要另外的数据结构来记录从空闲表中‘摘取"走的缓冲区. 当时可能是为了简化设计... 就用了一个链表... 但是这样肯定有性能上的损失...
在获取空闲缓冲区时要遍历所有的缓冲区...也包括已经分配出去的..已经不是空闲的缓冲区...
具体可以参考getblk的代码... 好像是5种情形....
一切都在代码中...
作者: PCliangtao 发布时间: 2010-09-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28