linux的VFS如何确定块设备上的数据是否已经在缓存中
时间: 2024-06-11 17:06:27 浏览: 13
Linux的VFS会维护一个页缓存(page cache),它是一个内核缓存,用于存储文件系统块设备上的数据。当一个进程请求读取某个块设备上的数据时,VFS会先检查页缓存中是否已经有该数据的一个副本。如果有,VFS会直接从页缓存中读取数据,并返回给进程。如果没有,VFS会将请求转发给块设备驱动程序,并从设备中读取数据。读取完成后,VFS会将数据存储到页缓存中,并返回给进程。
因此,通过检查页缓存中是否已经有该数据的一个副本,VFS可以确定块设备上的数据是否已经在缓存中。如果已经在缓存中,VFS不需要再次访问块设备,可以直接从缓存中读取数据,从而提高读取性能。如果数据不在缓存中,VFS需要从块设备中读取数据,这会导致一定的延迟。
相关问题
内核中,vfs_fsync函数详解
在Linux内核中,vfs_fsync函数是用于将文件系统中的数据同步到磁盘上的函数。该函数的实现在文件系统的super_operations结构体中,其函数原型如下:
```c
int (*fsync) (struct file *, loff_t, loff_t, int);
```
其中,参数file是一个指向打开的文件的指针,loff_t是一个表示文件位置的类型,int是一个表示同步标志的类型。该函数返回值为0表示成功,否则表示错误。
vfs_fsync函数的实现会调用文件系统的fsync方法,该方法会将文件系统中的数据同步到磁盘上,以确保数据的持久化。在调用fsync方法时,需要注意同步标志的设置,以确保数据的正确性。
vfs_fsync函数的作用是非常重要的,因为在对文件进行写操作时,操作系统不会立即将数据写入磁盘,而是将数据缓存起来,等到一定时间或者缓存满了之后才会将数据写入磁盘,这就可能会导致数据的丢失。vfs_fsync函数的作用就是将缓存中的数据同步到磁盘上,以确保数据的安全。
linux下用户通过write()函数向硬盘中写入数据,内核执行的时候流程上会调用__submit_bio()函数吗
不会。`write()`函数向硬盘中写入数据时,内核会调用`file_operations`结构体中的`write()`函数,该函数会调用`vfs_write()`函数,`vfs_write()`函数会调用`generic_write_checks()`函数进行一些权限和空间检查,然后调用`__generic_file_write_iter()`函数将数据写入文件页缓存中。当文件页缓存被填满后,内核会触发写入磁盘的操作,这个过程是异步的,因此内核会将数据提交给块设备层,并在需要时调用`__submit_bio()`函数将数据传递给块设备驱动程序。`__submit_bio()`函数主要是将数据打包成一个`bio`结构体,并将其传递给块设备驱动程序的`submit_bio()`函数。因此,`__submit_bio()`函数不会在用户通过`write()`函数向硬盘中写入数据时直接被调用。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)