Linux 是否从页面缓存中的脏页面读取文件?
当字节写入文件时,内核不会立即将这些字节写入磁盘,而是将字节存储在页面缓存(回写缓存)中的脏页中Linux 是否从页面缓存中的脏页面读取文件?,linux,caching,linux-kernel,filesystems,page-caching,Linux,Caching,Linux Kernel,Filesystems,Page Caching,当字节写入文件时,内核不会立即将这些字节写入磁盘,而是将字节存储在页面缓存(回写缓存)中的脏页中 问题是,如果文件读取是在脏页刷新到磁盘之前发出的,那么会从缓存中的脏页提供字节,还是先将脏页刷新到磁盘,然后再进行磁盘读取以提供字节(在过程中将它们存储在页面缓存中)?从application developer的角度来看,可以合理地假设,在写入之后进行的读取将获得写入所存储的信息 Linux提供了这样的担保,隐藏了实现细节。因此,无论是否使用缓存,写入的效果都是相同的:进一步读取将返回为写入发出的
问题是,如果文件读取是在脏页刷新到磁盘之前发出的,那么会从缓存中的脏页提供字节,还是先将脏页刷新到磁盘,然后再进行磁盘读取以提供字节(在过程中将它们存储在页面缓存中)?从application developer的角度来看,可以合理地假设,在写入之后进行的读取将获得写入所存储的信息
Linux提供了这样的担保,隐藏了实现细节。因此,无论是否使用缓存,写入的效果都是相同的:进一步读取将返回为写入发出的内容从应用程序开发人员的角度来看,可以合理地假设写入之后的读取将获得写入存储的信息
Linux提供了这样的担保,隐藏了实现细节。因此,无论是否使用缓存,写入的效果都是相同的:进一步读取将返回为写入而发出的内容文件读取将从页面缓存中获取数据,而不写入磁盘。摘自Robert Love的Linux内核开发第三版: 每当内核开始读操作时,例如 进程发出read()系统调用,它首先检查是否需要 数据在页面缓存中。如果是,内核可以放弃访问 存储磁盘并直接从RAM中读取数据。这称为缓存 打如果数据不在缓存中(称为缓存未命中),则内核 必须计划块I/O操作以从磁盘读取数据 与读取分开,定期回写磁盘: Linux采用的第三种策略称为写回。在一个 回写缓存,进程直接执行写入操作 页面缓存。备份存储不会立即或直接更新。 相反,写入页面缓存中的页面被标记为脏页面 并被添加到脏列表中。定期更新脏列表中的页面 在一个称为写回的过程中被写回磁盘,从而 与inmemory缓存一致的磁盘上拷贝
读取的文件将从页面缓存中获取数据,而不会写入磁盘。摘自Robert Love的Linux内核开发第三版: 每当内核开始读操作时,例如 进程发出read()系统调用,它首先检查是否需要 数据在页面缓存中。如果是,内核可以放弃访问 存储磁盘并直接从RAM中读取数据。这称为缓存 打如果数据不在缓存中(称为缓存未命中),则内核 必须计划块I/O操作以从磁盘读取数据 与读取分开,定期回写磁盘: Linux采用的第三种策略称为写回。在一个 回写缓存,进程直接执行写入操作 页面缓存。备份存储不会立即或直接更新。 相反,写入页面缓存中的页面被标记为脏页面 并被添加到脏列表中。定期更新脏列表中的页面 在一个称为写回的过程中被写回磁盘,从而 与inmemory缓存一致的磁盘上拷贝
这不是一个编程问题,而是关于Linux内部的问题。可能更适合Linux站点这不是一个编程问题,而是关于Linux内部的问题。可能更适合Linux站点感谢-另一个问题-如果从尚未同步到磁盘的脏缓存读取文件,并且系统在脏字节写入磁盘之前断电,我们将从从未提交到磁盘的“文件”读取数据-这是真的吗?我想是这样。更有趣的是,数据多久同步一次到磁盘。块I/O调度器涵盖了这一点—截止日期、预期、完全公平排队、noop。通常,它们将读取(从磁盘同步到缓存)优先于写入(从缓存同步到磁盘)。谢谢-另一个问题-如果文件读取是从尚未同步到磁盘的脏缓存提供的,并且系统在脏字节写入磁盘之前断电,我们会从从未提交到磁盘的“文件”中读取数据-这是真的吗?我想是的。更有趣的是,数据多久同步一次到磁盘。块I/O调度器涵盖了这一点—截止日期、预期、完全公平排队、noop。通常,它们将读(从磁盘同步到缓存)优先于写(从缓存同步到磁盘)。