访问不在 RAM 中但已向磁盘发出 I/O 的文件系统缓存

访问不在 RAM 中但已向磁盘发出 I/O 的文件系统缓存

Linux 有一个文件系统缓存,它将尽可能多的数据保存在 RAM 中作为缓冲区。

线程尝试读取文件系统中的页块。如果页面在缓存中,它会从缓存中获取数据(缓存命中)。否则,它会对该页面发出磁盘 I/O 请求并等待(缓存未命中)。

但是当多个线程(或处理器)读取同一个页块时,我认为还可能存在一种情况;该页面不在缓存中,但对该页面的 I/O 请求已发出。在这种情况下,不会再次发出磁盘 I/O,但线程无论如何都应该等待从磁盘读取页面。

Linux的文件缓存有这个属性吗?你把这个称作什么?

答案1

在 Linux 中,我认为在从缓存加载是异步的任何操作系统中完成的方式是:当请求页面但尚未加载时,有一个缓存条目被标记为尚未加载。当第二个请求到来时,它会搭载现有的缓存条目并等待加载完成。在Linux内核中,等待的机制称为等待队列。有很多关于等待队列的文档:Linux 设备驱动程序,竣工数量(等待队列之上的稍高级别的数据结构),内核API文档, …

我不知道这个机制有没有正式的名字。

相关内容