プロセスとfileの関係

プロセスが一つファイルをオープンすると以下のようなデータ構造が作られる。

file構造体は、プロセスが行っているファイル操作の情報を管理する(openモード、ファイルポインタなど)。dentry構造体はファイルの名前とディレクトリやファイルの相互の参照関係を管理する。inodeはファイル実体を管理する。ファイルのデータブロックの場所、ファイルのオーナやモードなどを管理している。

file構造体はプロセスに依存したデータであり、別のプロセスが同じファイルをopenすると、別途そのプロセス用にfile構造体が用意される。二つあるfile構造体は同じdentry構造体を指す。

linuxでは様々な種類のファイルシステムをサポートしているため、ファイルシステム毎に適切な方法でファイル(inode)をアクセスしなければならない。これらアクセス方法は各種ファイルシステム内に関数テーブルという形で用意されており、各inodeはそのinodeが属するファイルシステム内の関数テーブルを指している。(v2.4からはページキャッシュとファイル間での操作関数はaddress_space管理構造体で管理されることとなった。)

img33.gif

各file構造体は下図のように各プロセスが保有するファイルディスクリプタテーブルに登録されている。ファイルディスクリプタはこのテーブルのindexである。

img34.gif

各プロセスはファイルシステムに関する情報、カレントディレクトリやumaskを持っているが、一般に同じshellから生まれたコマンドプロセスはこのデータを共有している。


 

(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST
1