Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 是否从页面缓存中的脏页面读取文件?_Linux_Caching_Linux Kernel_Filesystems_Page Caching - Fatal编程技术网

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。通常,它们将读(从磁盘同步到缓存)优先于写(从缓存同步到磁盘)。