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()
ext4
submit_bio()
来自http://myaut.github.io/dtrace-stap-book/kernel/fs.html,它有点过时了,因为 VFS 堆栈在我写完这篇文章后被重构了一点
归档时间: |
|
查看次数: |
1013 次 |
最近记录: |