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