在2.2x时期,page cache和buffer cache是两套cache系统,之间有同步.但是
linux不保证每个版本都如此.
如果现在/dev/hda1是根,如果hda1上有文件a.txt用dd dump /dev/hda1能够
得到和open a.txt一样的结果.
到了2.4.x事情已经变得不是这样了,dd if=/dev/hda1 从buffer cache中获取
数据,open打开的普通文件缓冲到page cache,两者没有任何同步机制(meta data
还是一致的). 合适的次序下,得到的结果不能保证正确性.
当然dump一个已经mount的,"live file system"是个愚蠢的做法,我们只是拿
来讨论问题.
到了2.5,文件的meta data也移到了page cache,事情进一步复杂了.在2.6的内
核中page cache和buffer cache进一步结合,从此buffer cache 消失,只有page
cache了. buffer cache退化为一个纯粹的io entry.随了linus的心愿.
可以看看linus的讨论
在2.4中buffer cache自己维护了一套类似page cache和lru队列的机制,对
buffer cache做lru 缓冲处理,的确不是一个什么好东西.
阅读(1741) | 评论(0) | 转发(1) |