Pau*_*aul 3 linux filesystems proc
我发现在 Linux 中有“真实文件”和“虚拟文件”,真实文件是驻留在硬盘上的文件,而虚拟文件只是由内核表示为文件的数据。
例如,/proc目录中的文件是虚拟文件。
我想了解像这样的函数如何read()知道如何读取真实文件以及如何读取虚拟文件。我创建了下图来显示我对这个主题的理解,如果我的理解有误,请纠正我:
在 VFS 层中,所有文件都是虚拟的(它实际上是由 SunOS 工程师发明的,用于绑定 UFS(基于磁盘)和 NFS(基于网络)文件系统)。
每个 openfile都有f_op提供通用例程实现的函数表(其中一些可能是通用的),每个 open都有inode一个附加address_space对象,该对象还具有a_ops包含必要实现的 C 函数表 ( )。顺序是这样的:
sys_read(): 应用程序使用系统调用启动文件读取vfs_read())file->f_op->read()或do_sync_read()或将调用传递给文件系统驱动程序new_sync_read()a_ops->direct_IO(), ext4_direct_IO()forext4则调用 ) 并返回数据file_get_page()a_ops->readpage()实现的文件系统读取 它ext4_readpage()ext4submit_bio()来自http://myaut.github.io/dtrace-stap-book/kernel/fs.html,它有点过时了,因为 VFS 堆栈在我写完这篇文章后被重构了一点