struct file_operations 与 struct vnodeops

struct file_operations 与 struct vnodeops

据我了解,内核维护着 4 个表。

  1. 每个进程的 FD 表。
  2. 系统全开放文件表struct file
  3. 索引节点(内存中)表struct vnode
  4. 索引节点(磁盘上)表。

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、重命名等操作的字段。

相关内容