* nixファイルシステムはディスクの先頭(または固定位置)にinodeテーブルを保持します。これは、inodeを一意に識別する整数であるinode番号で索引付けされます。 inode番号を知ることで、inodeをすばやく見つけることができます。 inodeには、ファイル内の実際のデータを含む他のディスクブロックへのポインタ/アドレスが含まれています。
inodeテーブルとinode番号を削除する次の方法が機能するかどうかを知りたいです。
まだinodeが残っていますが、今ではinodeがディスクのデータ領域に格納され、inode番号を追跡する代わりにinodeのディスクアドレスやブロック番号だけを記録するようになります。ファイルまたはその inode にアクセスしようとするたびに、inode テーブルにインデックスを付けるために inode 番号を使用する代わりに、ディスクアドレスを使用して inode を検索します。これにより、別の間接層から私たちを救うことができます。
私のアプローチには何がありましたか? inodeテーブルの根拠を理解したいと思います。
答え1
私が正しく理解したら、inode番号をブロックアドレスに置き換えたいと思います。これは、(1)ブロックごとに1つのinodeが多くのスペースを無駄にすることを意味します(inodeはそれほど大きくありません)。 (2) これは inode 番号付けを使用することと変わらない。 inodeは固定サイズを持つため、ブロックには既知の数のn
inodeが含まれます。アイノード 。したがって、inode番号n
(理想的には2の累乗であるためシフト)を分割すると、商はinodeのブロック番号(inodeテーブルが起動されるディスクアドレスを含む)で、残りはinodeのインデックスです。そのブロック内で。
inodeテーブルの理論的根拠を理解するには、inodeテーブルに格納されているデータを検討してください。これは、所有者、グループ、権限、タイムスタンプ、データブロックのインデックス、間接インデックスなどのプロパティです。どこかに保存する必要があり、ファイルデータと一緒に保存することはできません。
したがって、独自のファイルシステムを設計する場合、答えるべき最初の質問は、「ファイルに属するデータブロックをどのように識別しますか?」です。 2番目の質問は、「所有権、権限などの属性をどこに保存しますか?」です。そして、タイムスタンプは何ですか?」 はい、inodeとは異なるスキームを使用できます。
編集する
については
メインメモリとその中のオブジェクトに使用するのと同じように、アドレスを使用するとどうなりますか?
私が書いたように、デフォルトではすでにブロックアドレスがあります。まず、それを分割してオフセットを追加します。原則として、オフセットが各inodeに追加されると、「inode番号」ははるかに大きくなり、各inode番号で繰り返される上位ビットに定数値があります。これにより、各ディレクトリエントリが大きくなります。
ハードドライブのサイズが約20MBだったときにUnixファイルシステムが発明されたことを忘れないでください。スペースを無駄にしたくないので、すべてを密に詰めて重複を避けてください。インデックスノードにアクセスするたびにオフセットを追加するコストは低くなります。このオフセットを各「inode番号」参照の一部として保存するのは高価です。
興味深いことに、inodeシステムは今日の小型ドライブ用に開発されましたが、スケーラビリティが高く、テラバイトサイズのドライブでも「動作」します。