正解 ア 次の問題へ

問8 ページング方式の仮想記憶を用いることによって、フラグメンテーションの問題を解決できる理由はどれか。

ア 一連のプログラムやデータを、不連続な主記憶に割り付けることができる。
イ 仮想記憶のページ数を主記憶のページ数よりも多くすることができる。
ウ プログラム全体を1ページに割りつけることができる。
エ プログラムのローディング時に主記憶を割り付けることができる。

解説

メモリ管理に関する問題です。
ア 正解
 アプリケーションに連続/不連続を意識させずに記憶領域を提供できるのはページング方式の利点です。
 アプリケーションはOSから与えられた領域をページの存在を意識せずに利用し、OSはアプリケーションがアクセスしたアドレスを正しいページに変換してプロセッサに伝えることで不連続な領域を意識させずに提供できるようになります。

イ 不正解
 スワップファイル、スワップ領域に関する記述です。(スワップ swap 日本語で言うと「交換」)
 ハードディスク等の補助記憶装置に、スワップファイルを作成することで主記憶装置以上の記憶領域を確保できます。

ウ 不正解
HugePage(Lage Page)に関する記述です。
 近年の主記憶装置の大容量化に伴い、大量のメモリを利用するアプリケーションも増加し、ページサイズが小さいことによるオーバーヘッドも増加しました。
 これに対応する技術がHugePage(Lage Page)です。プロセッサとOSの対応状況によりますが、名前の通り、通常のページサイズ4キロバイトに対し、500倍以上の2メガバイト~256メガバイトのページサイズを割り当てることができます。
 例えば、4ギガバイトのメモリを4キロバイトのページで管理すると、単純計算で100万ページに分割して管理することになります。100万ページに分割すると、当然1ページごとにページを管理するメモリも消費するし、大量のページの仮想アドレス、物理アドレス変換の計算量も増加します。これを2メガバイトのページで管理すると、ページ数は200ページとなり、ページ管理に必要なメモリもアドレス変換の計算量も減少します。
 問題にあるように、ページサイズ以下のアプリケーションであれば1ページに全て割り当てることも可能になるため処理が早くなります。

エ 不正解
C言語の静的領域に関する記述です。
 C言語で扱うメモリには、プログラム領域、静的領域、ヒープ領域、スタック領域の4種類があります。
静的領域はプログラムのロード時に確保される領域で、グローバル変数はロード時に静的領域に割り当てられます。
 関数内の自動変数はスタック領域に、C言語のmalloc関数やC++のnewで動的に確保されるメモリはヒープ領域に割り当てられます。