プロセスが一つファイルをオープンすると以下のようなデータ構造が作られる。
file構造体は、プロセスが行っているファイル操作の情報を管理する。(openモード、ファイルポインタなど)
dentry構造体はファイルの名前とディレクトリやファイルの相互の参照関係を管理する。
inodeはファイル実体を管理する。ファイルのデータブロックの場所、ファイルのオーナやモードなどを管理している。
file構造体はプロセスに依存したデータであり、別のプロセスが同じファイルをopenすると、別途そのプロセス用にfile構造体が用意される。二つあるfile構造体は同じdentry構造体を指す。
linuxでは様々な種類のファイルシステムをサポートしているため、ファイルシステム毎に適切な方法でファイル(inode)をアクセスしなければならない。これらアクセス方法は各種ファイルシステム内に関数テーブルという形で用意されており、各inodeはそのinodeが属するファイルシステム内の関数テーブルを指している。
各file構造体は下図のように各プロセスが保有するファイルディスクリプタテーブルに登録されている。ファイルディスクリプタはこのテーブルのindexである。
各プロセスはファイルシステムに関する情報、カレントディレクトリやumaskを持っているが、一般に同じshellから生まれたコマンドプロセスはこのデータを共有している。
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST