当前位置: 技术问答>linux和unix
关于page cache 和buffer cache的问题
来源: 互联网 发布时间:2016-02-12
本文导语: 在2.4之前有page cache和buffer cache之分,但是page cache的主要用途是什么呢?buffer cache的主要用途的什么呢?因为他两是两套独立的系统,为什么要分别设置呢?各自的职责是什么呢? | 在 Linu...
在2.4之前有page cache和buffer cache之分,但是page cache的主要用途是什么呢?buffer cache的主要用途的什么呢?因为他两是两套独立的系统,为什么要分别设置呢?各自的职责是什么呢?
|
在 Linux 的实现中,文件 Cache 分为两个层面,一是 Page Cache,另一个 Buffer Cache,每一个 Page Cache 包含若干 Buffer Cache。内存管理系统和 VFS 只与 Page Cache 交互,内存管理系统负责维护每项 Page Cache 的分配和回收,同时在使用 memory map 方式访问时负责建立映射;VFS 负责 Page Cache 与用户空间的数据交换。而具体文件系统则一般只与 Buffer Cache 交互,它们负责在外围存储设备和 Buffer Cache 之间交换数据。
而在linuxforum上的一些文章上看到比较深入的分析里面说:
page 不会同时存在于 buffer cache 和 page cache.add_page_to_hash_queue将此思想显露无余.buffer_head 定义在fs.h,和文件系统有着更为紧密的关系.
从文件读写角度看buffer cache缓存文件系统的管理信息像root entry, inode等,而page cache缓存文件的内容
注意函数block_read_full_page,虽然位于buffer.c,但并没有使用buffer cache. 但是确实使用了buffer:只是再指定page上创建buffer提交底层驱动读取文件内容.这个流程有两个值得注意的地方:
一是普通file的read通过page cache进行
二是page cache读取的时候不和buffer cache进行同步
三是page cache的确使用了buffer,不过注意,buffer 不是buffer cache.
http://linux.chinaunix.net/bbs/thread-903787-1-11.html
而在linuxforum上的一些文章上看到比较深入的分析里面说:
page 不会同时存在于 buffer cache 和 page cache.add_page_to_hash_queue将此思想显露无余.buffer_head 定义在fs.h,和文件系统有着更为紧密的关系.
从文件读写角度看buffer cache缓存文件系统的管理信息像root entry, inode等,而page cache缓存文件的内容
注意函数block_read_full_page,虽然位于buffer.c,但并没有使用buffer cache. 但是确实使用了buffer:只是再指定page上创建buffer提交底层驱动读取文件内容.这个流程有两个值得注意的地方:
一是普通file的read通过page cache进行
二是page cache读取的时候不和buffer cache进行同步
三是page cache的确使用了buffer,不过注意,buffer 不是buffer cache.
http://linux.chinaunix.net/bbs/thread-903787-1-11.html