page cache 和 buffer cache 的联系和区别

本文探讨了Linux系统中BufferCache与PageCache的区别与联系。BufferCache主要用于文件系统的元数据缓存,而PageCache用于缓存文件的实际内容。两者虽然在某些情况下指向相同内存区域,但在管理和使用上有明确分工。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网上看了一些相关资料,不过还是有些疑问:
区别,主要是
1 他们针对的对象不同。buffer cache 是供驱动使用, 而 page cache 是供vfs使用。
2 他们存的内容不同。buffer cache 存放的是文件的元数据,而page cache 存放的是inode的内容,即文件的数据。
第一点好理解,但是第二点,我有些疑问:
1 因为buffer cache 和page cache 其实都指向同一段内存。即一个page cache里面可能包含多个buffer cache.他们的内容应该是相同的呀,怎么又有元数据和文件数据之分呢?
2 磁盘读文件是以buffer cache为单位,这样,在有预读,并且文件被分片的情况下。读入连续4个buffer cache 即一个page cache的数据,并不一定都是文件数据呀。这样,page cache 又如何能反映文件的逻辑影射呢?

不知道是否还有其他区别和联系,请兄弟们指教,谢谢

 

 

 

这是我先看的一篇文章http://blog.chinaunix.net/u1/33412/showart_327801.html
里面讲:
在 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.

我比较赞同后者的说法。
但现在对page cache和buffer cache的理念仍旧不是太清晰。

还有楼上说的很对。

如果想深入想知道buffer cache的管理 可以参见“VFS 缓冲区缓存Buffer Cache实现原理剖析”一文
google就可以搜到。里面讲的版本相对现在代码有稍微变动。但是剖析非常清楚,推荐看一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值