+ -
当前位置:首页 → 问答吧 → 0.12内核高速缓冲区是不是每个块都在空闲链表上?

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种情形....
一切都在代码中...

作者: PCliangtao   发布时间: 2010-09-07

热门下载

更多