3

UNIXについていくつか質問があります。

  1. UNIX は、開いている各ファイルに関連付けられたオフセットをどこに保存しますか? iノードで?データブロックで?何処か別の場所?
  2. UNIX は、各ファイルを開いたときのアクセス許可 (読み取り専用など) をどこに保存しますか?
  3. UNIX は、i ノードに関連付けられた名前/リンクのリストをどこに保存しますか?
4

2 に答える 2

3

見逃していると思われる重要な違いが 1 つあります。具体的には、ディスク上のデータとメモリ内のデータの違いです。

  • ディレクトリとファイルの内容、アクセス許可、拡張属性、およびシステムの再起動などの後に持続すると予想されるその他のものは、通常は i ノードの永続ストレージのファイルシステムに保存されます。たとえば、ファイルの所有者、グループ、および権限は、従来 i ノードに保管されていました。

  • 開いているファイル記述子、ファイル オフセット、キャッシュされたデータなど、ファイル システムの現在の操作に関連するものはすべて、カーネル空間のデータ構造内のコンピューター メモリに保持されます。

i ノードに関連付けられた名前を格納する限り、ほとんどの Unix スタイルのファイルシステムには、i ノードを一定時間内に名前にマッピングできる特定のデータ構造がありません。一般に、理にかなっているリバース マッピング (つまり、i ノードへの名前) に関心があることを考慮します。代わりに、各ディレクトリのデータ ブロックには、各ファイルとサブディレクトリの名前と関連する i ノード識別子が含まれます。特定の i ノードの単一の名前リストが必要な場合は、通常、ファイルシステムのディレクトリ ツリー全体を走査して、一致するものを探す必要があります...

最新のファイルシステムは、データとメタデータの間の境界線をあいまいにする傾向があることに注意してください。たとえば、拡張属性をデータ ブロックに格納したり、非常に小さなファイルを独自の i ノード内に完全にパックしたりできます。一部のファイルシステムには、専用のデータ ブロックや i ノードさえありません。

于 2013-01-06T17:48:56.497 に答える
1

ファイル オフセットはファイル記述に格納され、グローバル (システム全体) のファイル記述テーブルがあります。各プロセスのファイル記述子は、ファイルの説明にアクセスするために使用されます。アクセス許可は保存されません。アクセス許可は、ファイルが開かれたときにのみチェックされます。i ノードに関連付けられているリンクのリストは、ファイル システムのディレクトリに保存されます。実際、ディレクトリの妥当な定義は「inode へのリンクのリスト」です。

于 2013-01-06T14:59:32.990 に答える