図のメモリマップで,セグメント2が解放されたとき,セグメントを移動(動的再配置)し,分散する空き領域を集めて一つの連続領域にしたい。
1回のメモリアクセスは4バイト単位で行い,読取り,書込みがそれぞれ30ナノ秒とすると,動的再配置をするために必要なメモリアクセス時間は合計何ミリ秒か。
ここで,1kバイトは1,000バイトとし,動的再配置に要する時間以外のオーバヘッドは考慮しないものとする。
〔メモリマップ〕
セグメント1|セグメント2|セグメント3|空き/500kバイト|100kバイト|800kバイト|800kバイト
正答4
解説
正解は4です。
セグメント2(100kバイト)が解放されると、セグメント1と3の間に空きができます。
空き領域を一つにまとめるには、セグメント3(800kバイト)をセグメント1の直後へ移動させます。
移動では、元の場所から読み取り、新しい場所に書き込む操作を4バイトずつ繰り返します。
【計算】
移動するデータ量=800kバイト=800,000バイト
アクセス回数=800,000÷4=200,000回
4バイト当たりの時間=読取り30ナノ秒+書込み30ナノ秒=60ナノ秒
合計時間=200,000×60ナノ秒=12,000,000ナノ秒
=12ミリ秒
【選択肢別解説】
1:× 1.5ミリ秒は、解放されたセグメント2の100kバイト分を移動したとした値です。
実際に移動するのはセグメント3の800kバイトです。
2:× 6.0ミリ秒は、読取りか書込みのどちらか一方の時間しか数えていない値です。
移動には読取りと書込みの両方が必要です。
3:× 7.5ミリ秒は、500kバイトのセグメント1を移動したとした値です。
セグメント1は先頭にあるので、移動する必要はありません。
4:○ 800kバイトを4バイトずつ読み書きすると200,000回となり、1回60ナノ秒で12ミリ秒になります。
【ポイント】
動的再配置(コンパクション)では、空きより後ろにあるセグメントだけを前に詰めます。
移動には読取りと書込みの両方の時間がかかる点を忘れないようにします。