存在するログ構造のファイルシステムの設計と実装、それは言う:
Unix FFSで新しいファイルを作成するには、少なくとも5つのディスクI / Oが必要で、各I / Oの前に検索が続きます。ファイル属性とファイルデータ、ディレクトリデータ、およびディレクトリ属性への2つの異なるアクセスは、それぞれ一度にアクセスされます。
「ファイル属性への2つの異なるアクセス」とは何ですか? inodeが生成されたときに一度だけ計算できます。
ベストアンサー1
Remzi Arpaci-Dusseau教授の本オペレーティングシステム:3つの簡単な部分持つ火法ファイル生成情報:
たとえば、ファイルが作成されたときにどのデータ構造を更新する必要があるかを考えてみましょう。この例では、ユーザーが新しいファイルを作成し、
/foo/bar.txt
ファイルが1ブロック長(4KB)であると仮定します。ファイルは新しいファイルなので、新しいinodeが必要です。したがって、inodeビットマップと新しく割り当てられたinodeの両方がディスクに書き込まれます。このファイルにもデータがあるため、割り当てる必要があります。したがって、データビットマップとデータブロックは(最終的に)ディスクに書き込まれます。したがって、現在のシリンダーグループに少なくとも4回の書き込みが発生します(これらの書き込みが発生する前に一定時間メモリにバッファリングされる可能性があることに注意してください)。しかし、それはすべてではありません!特に、新しいファイルが作成されると、そのファイルもファイルシステム階層に配置する必要があります。つまり、ディレクトリを更新する必要があります。特に、bar.txt
次のエントリを追加するには、親ディレクトリfooを更新する必要があります。この更新は、既存のデータブロックに適したりfoo
(関連するデータビットマップと共に)新しいブロックを割り当てる必要があるかもしれません。foo
また、更新時間フィールド(最後の変更時間など)だけでなく、ディレクトリの新しい長さを反映するようにinodeも更新する必要があります。全体的に、新しいファイルを作成するだけでも多くの作業が必要です!次回これを行うときは、さらに監査する必要があります。
2つを比較すると、作成者はファイル属性アクセス内にデータブロックの更新を含めたと推測します(ファイル属性が「inode」を意味すると明示的に述べていますが、データの場所をファイル属性として扱うことは非合理的ではないようです) )。とにかく、彼らはディスクアクセスの数を過小評価するようです。 Arpaci-Dusseau教授の説明によると、少なくとも6回かかります。
- インデックスノードビットマップ
- インデックスノード
- データビットマップ
- ファイルデータ
- ディレクトリデータ
- ディレクトリのプロパティ