基本情報技術者 2009年 秋期 午前(科目A) 問13
問題文
500バイトのセクタ8個を1ブロックとして、ブロック単位でファイルの領域を割り当てて管理しているシステムがある。2,000バイト及び9,000バイトのファイルを保存するとき、これら二つのファイルに割り当てられるセクタ数の合計は幾らか。ここで、ディレクトリなどの管理情報が占めるセクタは考慮しないものとする。
選択肢
ア:22
イ:26
ウ:28
エ:32(正解)
500バイト×8セクタ=1ブロックでファイル割当を行う問題【午前2 解説】
要点まとめ
- 結論→セクタ500バイト×8で1ブロック=4,000バイトなので、2,000バイトは1ブロック、9,000バイトは3ブロックで合計32セクタ必要です。
- 根拠→各ファイルの必要ブロック数は で求め、ブロック数×8がセクタ数になります。
- 差がつくポイント→切り上げ(端数は次のブロックへ)と単位混同(バイト/セクタ/ブロック)に注意すると短時間で正解にたどり着けます。
正解の理由
ブロックサイズはセクタ500バイト×8=4,000バイトです。
2,000バイトのファイルは のため1ブロック(8セクタ)で足ります。
9,000バイトのファイルは なので切り上げて3ブロック(3×8=24セクタ)必要です。
合計は 8+24=32 セクタ、したがって正解は エ(32)です。
2,000バイトのファイルは のため1ブロック(8セクタ)で足ります。
9,000バイトのファイルは なので切り上げて3ブロック(3×8=24セクタ)必要です。
合計は 8+24=32 セクタ、したがって正解は エ(32)です。
よくある誤解
- 「9,000バイトは2ブロックで足りる」と誤って切り捨てるミス。常に切り上げ。
- バイト数を直接セクタ数に換算してからブロック数を計算して混乱するケース。まずブロック単位で考えると安全。
解法ステップ
- セクタサイズと1ブロックのセクタ数からブロックサイズを求める:500×8=4,000バイト。
- 各ファイルの必要ブロック数を求める: を計算。
- 2,000バイト→ ブロック、9,000バイト→ ブロックと判断。
- 各ブロックをセクタ数に戻す:1ブロック=8セクタなので 1×8 と 3×8 を計算。
- 合計セクタ数を足す:8+24=32 セクタが最終答え。
選択肢別の誤答解説
- ア: 22 — 2,000バイトを1ブロック(8セクタ)としたとしても9,000バイトを誤って2ブロック(16セクタ)とすると合計24でなく22になる計算誤りです。端数処理の誤り。
- イ: 26 — 9,000バイトを2.5ブロック扱い(切り上げで3ブロックなら24セクタ)にせず、中途半端な換算をした結果の誤り。
- ウ: 28 — 9,000バイトを3ブロック(24セクタ)としても2,000バイトを誤って2ブロック(16セクタ)とすると合計40になり得るが、28はどちらも正しい切り上げをしていない混合ミス。
- エ: エ(32) — 正解。2,000バイト=1ブロック(8セクタ)、9,000バイト=3ブロック(24セクタ)、合計32セクタ。
補足コラム
- 整数の切り上げは式で表すと (S=ファイルサイズ、B=ブロックサイズ)で、プログラムでは
(S + B - 1) // B
と書けます。 - ブロック割当ては内部断片化(unusedな余り)が発生しやすく、小さなファイルが多いとディスク効率が落ちます。
- 問題文で「ディレクトリなどの管理情報を考慮しない」とある場合は純粋にデータ領域のみを計算します。
FAQ
Q: ブロックサイズをまずセクタに戻す必要はありますか?
A: いいえ。どちらでも計算可能ですが、誤りを防ぐにはまずブロックサイズ(4,000バイト)を求めてからファイルサイズをブロック単位で切り上げるのが確実です。
A: いいえ。どちらでも計算可能ですが、誤りを防ぐにはまずブロックサイズ(4,000バイト)を求めてからファイルサイズをブロック単位で切り上げるのが確実です。
Q: セクタ単位で直接計算する方法は?
A: ファイルサイズをセクタ500バイトで切り上げた後、合計セクタ数を8で割ってブロック数に丸めるより、ブロック単位で切り上げる方が単純です。どちらも最終結果は同じになります。
A: ファイルサイズをセクタ500バイトで切り上げた後、合計セクタ数を8で割ってブロック数に丸めるより、ブロック単位で切り上げる方が単純です。どちらも最終結果は同じになります。
関連キーワード: ブロック割り当て、セクタ数、ブロックサイズ、内部断片化、切り上げ計算、ファイルシステム、午前2

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

