Stallingがメモリ内のiノードテーブルについて話しているのか、ファイルシステム内のテーブルについて話しているのかを判断するための詳細なコンテキストなしでは不明確です。私はずっと以前の本を誰かに貸したが、それを取り戻すことはできなかった。自分でコンテキストを調べることはできません。
「ファイルテーブル」は3つありますが、ここで説明するものは、より一般的に「メモリ内のiノードテーブル」と呼ばれます。2番目は一般に「オープンファイルテーブル」と呼ばれ、プロセスごとに存在します。どちらのテーブルもカーネルメモリにあり、プログラムからアクセスできません。3番目の「テーブル」は、実際にはファイルシステム(ディスク上)内の2つのテーブルセットです。1つ目はディスク上のiノードテーブルで、2つ目はデータブロック自体です(注:この説明は、従来のUNIXファイルシステム管理に関するもので、新しいシステムでは別の組織を持っている)。iノードテーブルのエントリには、間接参照ブロックまたは実際のデータを含むデータブロックへの一連の参照があります。ファイルの鍵ファイルシステム上はiノードであり、データブロック自体ではありません。ストールがディスク上の「ファイルテーブル」について話している場合、それは一般に、FATシステムのiノードテーブルやブロック定義テーブルなどのファイルを示すディスク上の「小さい」テーブルになります。
メモリ内のiノードテーブルに関しては、iノードはファイルシステムからロードされ、そのst_nlink値がインクリメントされ、システムの他の部分からアクセス可能になります。iノードデータがディスクに書き込まれると、st_ctimeが更新されます。inodeがメモリで不要になった場合、st_nlink値は減分され、テーブル内のエントリは空きとしてマークされます。すべてのプロセスは、メモリ内のiノードテーブルに約3または5つのエントリを参照して起動します:のiノードstdin
、stdout
、stderr
-これらは多くの場合、デバイス・ファイル(TTY)されている-と、現在のディレクトリへの参照およびルートディレクトリ。iノードはテーブルに一度だけ存在するため、テーブル内の単一のiノードへの複数の参照が存在する可能性があります。
開いているファイルテーブルはプロセスごとに保持され、メモリ内のiノードテーブルへの参照、バッファへのポインタ、および状態情報(fseek(2)
からの値やフラグなど)が含まれていopen(2)
ます。ファイル記述子は、文字通り開いているファイルテーブルへのインデックスですが、ほとんどの場合「ファイル記述子」について話すとき、人々はオープンファイルテーブルのエントリを参照します。
を使用してファイルを開くopen(2)
と、開いているファイルテーブルで利用可能なエントリが見つかり、パス名によるファイル参照のiノードが決定され、そのiノードがメモリ内のiノードテーブルに読み込まれます。まだ読み込まれていない場合は、st_nlinkカウントが増加し、inodeエントリがファイル記述子で参照され、フラグが設定され、バッファが割り当てられます。閉じた場合は、逆になります。
カーネル内のルーチンは「ファイル管理システム」と呼ばれ、「ファイルシステム」はディスク上の編成です。最近では、modprobe(8)
ディスク上のさまざまな組織のファイル管理システムに()ロードできる「プラグイン可能な」モジュールがいくつかあります。たとえば、ext2 / ext3 / ext4ファイルシステムタイプがあり、それらのそれぞれがカーネルのファイル管理システムに異なるモジュールを持っています。ntfs、sbfs、nfs、vfat、jfsなどと同じ
これは私が最初に意図したよりも少し長いので、ここで終了します。