基本情報技術者 2009年 秋期 午前(科目A) 問13
問題文
500バイトのセクタ8個を1ブロックとして、ブロック単位でファイルの領域を割り当てて管理しているシステムがある。2,000バイト及び9,000バイトのファイルを保存するとき、これら二つのファイルに割り当てられるセクタ数の合計は幾らか。ここで、ディレクトリなどの管理情報が占めるセクタは考慮しないものとする。
選択肢
ア:22
イ:26
ウ:28
エ:32(正解)
🔒 解説は解答すると表示されます
ブロック割当と内部断片化【午前解説】
正解の理由
ファイル領域が「ブロック単位」で割り当てられるため、各ファイルはブロックの整数個を割り当てられます。1ブロックはセクタ8個×500バイト=4000バイトです。したがって、2,000バイトのファイルは1ブロック(8セクタ)、9,000バイトのファイルは3ブロック(24セクタ)を必要とし、合計は8+24=32セクタとなります。正しい選択肢は エ の32です。
解法ステップ
- セクタサイズと1ブロックあたりのセクタ数からブロックサイズを求める。
- 各ファイルの必要ブロック数を切り上げで求める。
- 2,000バイト: ブロック
- 9,000バイト: ブロック
- 各ファイルのセクタ数を求め、合計する。
→ 1×8 + 3×8 = 8 + 24 = 32 セクタ
(一般式:セクタ合計 = )
選択肢別の誤答解説
-
ア: 22
誤りの典型的理由 — セクタ単位で割り当てると仮定した場合の計算です。- 2,000バイト ÷ 500バイト/セクタ = 4 セクタ
- 9,000バイト ÷ 500バイト/セクタ = 18 セクタ
合計 4 + 18 = 22 セクタ。
しかし問題文は「ブロック単位で割り当て」と明記されているため、このセクタ単位での割当はルールに反します(ブロック丸めを無視している)。
-
イ: 26
誤りの典型的理由 — 1つのファイルに対してはブロック単位で見積もるが、もう一方をセクタ単位で数えて混在させた計算です(方法の不一致)。
例えば:2000バイトをブロック単位で1ブロック=8セクタ、9000バイトをセクタ単位で18セクタとして合計 8 + 18 = 26 セクタ。
混在計算は見かけ上の数値は導けますが、割り当て単位を統一しないため誤りです。 -
ウ: 28
誤りの典型的理由 — 上と逆の混在ミス。
例:2000バイトをセクタ単位で4セクタ、9000バイトをブロック単位で3ブロック=24セクタとして合計 4 + 24 = 28 セクタ。
これも割り当て単位が一貫していないため誤りです。 -
エ: 32
正しくブロック単位で統一した計算。- 2000バイト → 1ブロック = 8セクタ
- 9000バイト → 3ブロック = 24セクタ
合計 32 セクタで、条件に合致します。
よくある誤解
- 「セクタ単位で割り当てて良い」と誤解する
- 問題文でブロック単位と指定されている場合は、必ずブロック丸め(切り上げ)で考える必要があります。
- 切り上げ忘れ・切り捨てのミス
- 4000バイトを超える部分があるときは必ず次の整数ブロックに切り上げること。切り捨てると過小評価になります。
- 計算方法を混在させるミス
- セクタ単位とブロック単位を混ぜて計算すると一見正しそうな数値が出るため注意が必要です。
補足コラム
内部断片化の観点では、ブロックサイズが大きいほど小さなファイルでの無駄な空き(内部断片化)が増えます。今回の例では2,000バイトのファイルが1ブロック(4,000バイト)を占有するため、2,000バイト分が未使用になります。システム設計では平均ファイルサイズとブロックサイズのトレードオフを考慮します。
簡単な計算コード(参考)
import math
sector_size = 500
sectors_per_block = 8
block_size = sector_size * sectors_per_block
def sectors_needed(file_size):
blocks = math.ceil(file_size / block_size)
return blocks * sectors_per_block
total = sectors_needed(2000) + sectors_needed(9000)
print(total) # 32
FAQ
Q: ファイルサイズがちょうどブロックの整数倍ならどうなる?
A: ちょうど整数倍であれば無駄は発生せず、必要ブロック数はファイルサイズ÷ブロックサイズになります(切り上げの結果が整数)。
A: ちょうど整数倍であれば無駄は発生せず、必要ブロック数はファイルサイズ÷ブロックサイズになります(切り上げの結果が整数)。
Q: なぜディレクトリ等の管理情報は無視するのか?
A: 問題文で明示的に管理情報のセクタを考慮しないと指示されているため、計算対象から除外します。実運用では別途考慮が必要です。
A: 問題文で明示的に管理情報のセクタを考慮しないと指示されているため、計算対象から除外します。実運用では別途考慮が必要です。
関連キーワード: ブロック割当, セクタ, 内部断片化, 切り上げ計算, ファイルシステム, ストレージ管理

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

