プロが教えるわが家の防犯対策術!

iノードの3重間接ブロックを使用してあらわされるファイルの大きさは、ブロックの大きさをxキロバイトとしたとき、どれだけになるか?

という問題なのですが、計算の仕方が分かりません。
ご教授よろしくお願い致します。

A 回答 (1件)

inode を使ったファイルシステムの一般論として考える場合、


計算するためには、ブロックの大きさだけでなく、inodeの大きさの情報も必要です。

今現在一般的な inode は32bit(4バイト)ですが、その場合での計算は、2重間接までは
http://www.atmarkit.co.jp/flinux/rensai/fs02/fs0 …
こちらの図2以後の部分説明の通りです。3重間接の場合、さらにもう1段階参照が増えます。

「ブロックの大きさをxキロバイト」「inodeのサイズをsバイト」とした時の、xとsの式で書くと、

まず1段目で、一つのブロックに格納できるエントリ数は、
「x ×1024 ÷ s」エントリになります。

1段目の個々のエントリが2段目での1ブロック分のテーブルを指しますから、
1段目の個々のエントリが、2段目でさらに「x ×1024 ÷ s」個のエントリを持つことになり、、
全部で「(x ×1024 ÷ s)×(x ×1024 ÷ s)」のエントリがあります。

3段目では、2段目の「(x ×1024 ÷ s)×(x ×1024 ÷ s)」個のエントリがそれぞれ
「x ×1024 ÷ s」個のエントリを持つことになりますから、
全部で「(x ×1024 ÷ s)×(x ×1024 ÷ s)×(x ×1024 ÷ s)」個のエントリがあります。

3重間接では、この個々のエントリが、「x ×1024」バイトのデータを持ちますから、
最大容量は、「(x ×1024 ÷ s)×(x ×1024 ÷ s)×(x ×1024 ÷ s)×(x ×1024)」バイトになります。
式を整理すると、
「(x×x×x×x) ÷ (s×s×s) ×1024×1024×1024×1024」バイト=「x^4 ÷ s^3」テラバイト
になります。

たとえば、ブロックサイズ4キロバイト、inodeは32bit(x=4、s=4)の場合、
x^4(xの4乗)=256、
s^3(sの3乗)=64、
x^4÷s^3=256÷64=4ですから、

最大容量は4テラバイトと求まります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!