据我了解,内核维护着 4 个表。
- 每个进程的 FD 表。
- 系统全开放文件表
struct file
- 索引节点(内存中)表
struct vnode
- 索引节点(磁盘上)表。
struct file
有一个名为的字段,struct file_operations f_ops;
其中包含 FS 特定操作,例如ext2_read()
,ext2_write();
struct vnode
还有一个字段struct vnodeops v_op;
也包含 FS 特定操作。
我的问题是为什么我们两者都有相似的功能?或者我弄错了什么? Unix 和 Linux 中的情况有什么不同吗?因为我struct vnode
在Linux里面没有找到fs.h
参考:https://www.usna.edu/Users/cs/wcbrown/courses/IC221/classes/L09/Class.html
图(来自《Unix内部新前沿》一书)
答案1
好的,我找到了答案。
在 Unix 的早期版本(如 SVR4)中,struct file
不包含file_operations
. 包含的字段和所有操作,例如读、写等vnode->v_op
。
但是,在 Linux 中,struct file
将包含file_operations
具有打开、读取、写入等功能的字段,并且struct inode
(类似于 vnode)将包含具有inode_operations
查找、链接、取消链接、符号链接、rmdir、mkdir、重命名等操作的字段。