基本情報技術者 2017年 秋期 午前(科目A) 問19
問題文
図のメモリマップで、セグメント2が解放されたとき、セグメントを移動(動的再配置)し、分散する空き領域を集めて一つの連続領域にしたい。1回のメモリアクセスは4バイト単位で行い、読取り、書込みがそれぞれ30ナノ秒とすると、動的再配置をするために必要なメモリアクセス時間は合計何ミリ秒か。ここで、1kバイトは1,000バイトとし、動的再配置に要する時間以外のオーバヘッドは考慮しないものとする。

選択肢
ア:1.5
イ:6.0
ウ:7.5
エ:12.0(正解)
メモリの動的再配置による移動時間の計算【午前2 解説】
要点まとめ
- 結論: セグメント3(800kB)をセグメント2の空きへ左へ移動して合計12.0ミリ秒が必要です。
- 根拠: 移動量は800,000バイト、4バイト単位での読み書き(各30ns)なので1アクセス当たり60ns、合計で12msになります。
- 差がつくポイント: 4バイト単位、読み取り+書き込み両方の時間、1k=1,000バイトという条件を見落とさないことが重要です。
正解の理由
セグメント2(100kB)を開放すると、分散する空きは「セグメント2の100kB」と「末尾の800kB」で合計900kBになります。これを連続化するには、間にあるセグメント3(800kB)を左へ100kB分だけ移動させる必要があり、その移動はセグメント3全体(800kB)のメモリ内容をコピーする操作になります。
したがって移動するデータ量は800,000バイトで、4バイトごとに読み取りと書き込みを行うため、1回の4バイト移動にかかる時間は 。アクセス回数と合計時間は以下の通りです。
したがって移動するデータ量は800,000バイトで、4バイトごとに読み取りと書き込みを行うため、1回の4バイト移動にかかる時間は 。アクセス回数と合計時間は以下の通りです。
- アクセス回数: 回
- 合計時間:
よって正解は エ(12.0)です。
よくある誤解
- 誤解1: 「移動量は空いたセグメント分(100kB)だけ」と考え、コピー量を100kBとする誤り。実際は隣接するセグメント全体を移す必要があります。
- 誤解2: 「読み取りだけ、または書き込みだけの時間を考える」ことで時間を半分にしてしまうミス。両方加算する必要があります。
- 誤解3: 「1k=1024バイト」として計算するが、本問では1kバイト=1,000バイトと明記されています。
解法ステップ
- メモリ配置を確認し、空き領域を連続化するために移動が必要なセグメントを特定する(セグメント3を移動)。
- 移動すべきデータ量を求める(セグメント3のサイズ:800kB = 800,000バイト)。
- 4バイト単位でのアクセス回数を計算する: 回。
- 1回の4バイト移動に要する時間を計算する:読み取り30ns+書き込み30ns=60ns。
- 合計時間を求める:。
選択肢別の誤答解説
- ア: 1.5 — これは移動データ量を100kB(100,000バイト)と見なした場合の時間です。。空き分だけ移動すれば良いという誤解が原因です。
- イ: 6.0 — 6.0msは移動データ量を400kBと誤って計算した場合に相当します。。セグメントの一部だけ移すと考えた誤りです。
- ウ: 7.5 — 7.5msは移動データ量を500kBと誤った場合に相当します。。セグメント1(500kB)を移すと誤認した可能性があります。
- エ: 12.0 — 正解。セグメント3全体800kBを移動するため、上記の通り12.0msとなります。
補足コラム
- メモリ移動時のオーバーヘッドには、割り込み処理やテーブル更新などが含まれ得ますが、本問はそれらを無視しています。実運用ではさらに時間がかかる点に注意してください。
- コピー操作は重複領域を考慮した実装(memmove)を用いますが、今回のように「左へ一方向にずらす」場合は上位から下位へ順にコピーするなどオーバーラップ対策が必要です。
- 4バイト単位アクセスでサイズが4の倍数でない場合は、アクセス回数を切り上げる必要があります(ceil)。
FAQ
Q: なぜセグメント3全体を移す必要があるのですか?
A: セグメント3の開始アドレスを左に100kB移動するには、そのセグメントの全バイトを新しい位置へコピーしなければならないため、全体を移動します。
A: セグメント3の開始アドレスを左に100kB移動するには、そのセグメントの全バイトを新しい位置へコピーしなければならないため、全体を移動します。
Q: 読み取りと書き込みは同じ時間で計算して良いですか?
A: 本問では読み取り30ns、書き込み30nsと明示されているため両方を合算します。実機では異なる場合がありますが問題文優先です。
A: 本問では読み取り30ns、書き込み30nsと明示されているため両方を合算します。実機では異なる場合がありますが問題文優先です。
Q: 1kを1024で計算したら答えは変わりますか?
A: はい。本問は1k=1,000バイトと明記しているため、1024で計算すると値がずれ不正解になります。
A: はい。本問は1k=1,000バイトと明記しているため、1024で計算すると値がずれ不正解になります。
関連キーワード: セグメント再配置、メモリ断片化、動的再配置、メモリコピー、アクセス粒度、memmove、読み取り書き込み時間、計算手順、午前2対策

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

