文件读取是否来自页面缓存中脏污的页面?

时间:2016-10-14 03:50:05

标签: linux caching linux-kernel filesystems page-caching

当字节写入文件时,内核不会立即将这些字节写入磁盘,而是将字节存储在页面缓存中的脏页中(回写缓存)。

问题是,在将脏页刷新到磁盘之前是否发出了文件读取,是否将从缓存中的脏页提供字节,或者是否将脏页首先刷新到磁盘,然后再读取磁盘读取服务字节(在过程中将它们存储在页面缓存中)?

2 个答案:

答案 0 :(得分:1)

读取的文件将从页面缓存中获取数据而无需写入磁盘。来自Robert Love的 Linux内核开发第3版

  

每当内核开始读取操作时 - 例如,当a   进程发出read()系统调用 - 它首先检查是否必要   数据在页面缓存中。如果是,内核可以放弃访问   磁盘并直接从RAM中读取数据。这称为缓存   击中。如果数据不在缓存中,则称为内存缓存未命中   必须安排阻止I / O操作以从磁盘读取数据。

定期发生回写,与读取分开:

  

Linux采用的第三种策略称为回写策略。在一个   回写缓存,进程直接执行写操作   页面缓存。后备存储不会立即或直接更新。   相反,页面缓存中的写入页面被标记为脏   并被添加到脏列表中。定期,脏列表中的页面   在一个名为writeback的进程中被写回磁盘,带来了   与内存缓存一致的磁盘复制。

答案 1 :(得分:0)

从应用程序开发人员的角度来看,可以合理地假设 write 之后的读取将获得写入存储的信息。

Linux提供了这样的保证,隐藏了实现细节。因此,无论是否使用缓存,写入的效果都是相同的:进一步阅读将返回已发布的内容

相关问题