![Unix inodeファイルシステムで特定のファイルサイズが占めるブロック数を計算する方法は? [閉鎖]](https://linux33.com/image/174204/Unix%20inode%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%A7%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%8C%E5%8D%A0%E3%82%81%E3%82%8B%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E6%95%B0%E3%82%92%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
Unixに似たファイルシステムを備えたハードドライブと、以下の仕様が提供されています。
ブロックサイズは4KB、ブロックアドレス長は4バイトで、i-nodeは伝統的な構造(直接ポインタ10個、間接ポインタ1個、二重間接ポインタ1個、三重間接ポインタ1個)を持っています。
次のファイルが占めるブロック数(データブロックとアドレスブロックを含む)はいくらですか?
- ファイルAサイズは20KBです。
- ファイルBのサイズは200KBです。
- ファイルC、サイズ2000KB
- ファイルD、サイズ20000KB
ここでの問題は、この問題を解決できる公式さえ見つからないことです。数式がある場合は、値を変更するだけで終了します。トラブルシューティングを手伝ってもらうのではなく、指示を求めるだけです。
答え1
データ構造のどこかに文書があります。
これは私の仕事であり、私は意図的にそれをしません(これはあなたの宿題/勉強です)。
20Kファイルの場合、これは単にinode(間接ブロックなし)です。したがって、20KB/(4KB/ブロック) + inode = 5ブロック + inodeです。
それ以外の場合は、間接ポインタがいくつあるかを知る必要があります。間接ブロック(4KB /(4B /ポインタ)= 1Kポインタ)。 4KB × 10 + 4KB × 1K = 4KB × ( 1K + 10 ) = 4KB × 1034 = 4136KBで十分です。 (inodeを忘れないでください。どれだけ大きいのかわかりません。)
二重および三重間接参照の場合。それぞれ1Kポインタ(1ブロック)を指す1Kポインタ(1ブロック)のツリーがありますが、各ポインタはnullになる可能性があるため、すべてのブロックは割り当てられません。
そしてトリプルの場合、それは単なる拡張です。
また、直接ブロックを最初に割り当ててから、それをサイズから減算します。次に、間接割り当てと減算、二重間接割り当てと減算、トリプル間接割り当てを実行します。適切でない場合は、最新のファイルシステムにアップグレードする必要があります(すでに実行していますが、基本を理解する方が簡単であるため、トレーニングには古いファイルシステムが使用されます)。