![访问不在 RAM 中但已向磁盘发出 I/O 的文件系统缓存](https://linux22.com/image/91404/%E8%AE%BF%E9%97%AE%E4%B8%8D%E5%9C%A8%20RAM%20%E4%B8%AD%E4%BD%86%E5%B7%B2%E5%90%91%E7%A3%81%E7%9B%98%E5%8F%91%E5%87%BA%20I%2FO%20%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%BC%93%E5%AD%98.png)
Linux 有一个文件系统缓存,它将尽可能多的数据保存在 RAM 中作为缓冲区。
线程尝试读取文件系统中的页块。如果页面在缓存中,它会从缓存中获取数据(缓存命中)。否则,它会对该页面发出磁盘 I/O 请求并等待(缓存未命中)。
但是当多个线程(或处理器)读取同一个页块时,我认为还可能存在一种情况;该页面不在缓存中,但对该页面的 I/O 请求已发出。在这种情况下,不会再次发出磁盘 I/O,但线程无论如何都应该等待从磁盘读取页面。
Linux的文件缓存有这个属性吗?你把这个称作什么?
答案1
在 Linux 中,我认为在从缓存加载是异步的任何操作系统中完成的方式是:当请求页面但尚未加载时,有一个缓存条目被标记为尚未加载。当第二个请求到来时,它会搭载现有的缓存条目并等待加载完成。在Linux内核中,等待的机制称为等待队列。有很多关于等待队列的文档:Linux 设备驱动程序,竣工数量(等待队列之上的稍高级别的数据结构),内核API文档, …
我不知道这个机制有没有正式的名字。