私が知る限り、カーネルは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
図(「The New Frontier Inside Unix」の本から抜粋)
答え1
さて、答えを見つけました。
以前のバージョンのUnix(SVR4など)では、読み取り、書き込みなど、.に含まれるフィールドとすべての操作はstruct file
含まれていませんでした。file_operations
vnode->v_op
ただし、Linuxにはオープン、読み取り、書き込みなどの機能を含むフィールドがstruct file
あり(vnodeに似ています)、検索、リンク、リンク解除、シンボリックリンク、rmdir、mkdir、名前変更などの操作を含むフィールドがあります。 。file_operations
struct inode
inode_operations