struct file_ops と struct vnodeops

struct file_ops と struct vnodeops

私が知る限り、カーネルは4つのテーブルを維持します。

  1. 各プロセスのFDテーブル。
  2. システム完全オープンファイルテーブルstruct file
  3. インデックスノード(インメモリ)テーブルstruct vnode
  4. 索引ノード(ディスク上)の表。

struct filestruct file_operations f_ops;FS固有のジョブを含むフィールドがありますext2_read()。例えば、ext2_write();

struct vnodestruct vnodeops v_op;FS関連タスクも含むフィールドがあります。

私の質問はなぜ私たちの両方が同様の機能を持っているのですか?それとも私が何か間違っているのでしょうか? UnixとLinuxでは状況が異なりますか?struct vnodeLinuxで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_operationsvnode->v_op

ただし、Linuxにはオープン、読み取り、書き込みなどの機能を含むフィールドがstruct fileあり(vnodeに似ています)、検索、リンク、リンク解除、シンボリックリンク、rmdir、mkdir、名前変更などの操作を含むフィールドがあります。 。file_operationsstruct inodeinode_operations

関連情報