FE EXAM

仮想記憶(仮想メモリ)

物理メモリより大きなアドレス空間を、補助記憶を併用して見せかける仕組み。

INTERACTIVE VISUALIZATION
仮想空間
ページテーブル
物理メモリ
補助記憶
フェーズ
idle
参照中の仮想ページ
所在
シナリオ
ステップ1 / 6
STEP 1/6大きな仮想空間と小さな物理メモリプログラムには大きなアドレス空間(仮想空間)が見えています(左の6ページ)。一方で実際の物理メモリ(主記憶)はもっと小さく、ここでは3フレームしかありません(右)。仮想記憶はこの差を補助記憶(=ハードディスクやSSD)で埋める仕組みです。
仮想空間(6ページ)ページテーブル物理メモリ(3フレーム)ページ 0ページ 1ページ 2ページ 3ページ 4ページ 5P0F0P1ディスクP2F2P3ディスクP4F1P5ディスクF0P0F1P4F2P2補助記憶(ディスク)
仕組みのまとめ
1. プログラムは 仮想アドレス でアクセス
2. ページテーブル + MMU が物理アドレスに変換
3. 物理メモリ にあれば即読む(ヒット)
4. 無ければ 補助記憶 から読み込む(ページフォールト)
解説

📌
仮想記憶とは

大きな仮想空間物理メモリ補助記憶

仮想記憶とは、物理メモリ(主記憶)より大きなアドレス空間を、補助記憶(=ハードディスクやSSD)を併用してプログラムに見せかける仕組みのことです。実際の主記憶が小さくても、大きなメモリがあるかのように振る舞えます。

身近な例で考えると、机と引き出しの関係に似ています。机(主記憶)は狭いので、いま使う書類だけを広げ、当面使わない書類は引き出し(補助記憶)にしまいます。必要になったら引き出しから出して机に置きます。こうすれば狭い机でも大量の書類を扱えます。

上のツールで▶ボタンを押すと、プログラムが仮想アドレスを使い、変換を経て物理メモリや補助記憶へたどり着く流れを確認できます。

🔁
アドレス変換の仕組み

仮想アドレスページテーブル+MMU物理アドレス

プログラムが使う仮想アドレスは、そのままでは物理メモリにアクセスできません。間に変換のしくみが入ります。
ページテーブル:仮想ページと物理フレーム(=メモリ上の枠)の対応を記録した表。
MMU(メモリ管理ユニット):この変換を高速に行う専用のハードウェア。

参照したいページが物理メモリ上にあれば、変換した物理アドレスへすぐアクセスできます。これをヒットと呼びます。逆にまだ補助記憶にしかない場合はページフォールト(=ページ不在の例外)が起き、OSが補助記憶から物理メモリへページを読み込んでから処理を続けます。上のツールのSTEP3〜5で、この2パターンを確認できます。

利点

大きなプログラム独立空間で保護断片化を緩和

仮想記憶には主に次の利点があります。
物理メモリより大きなプログラムを実行できる:使う部分だけ主記憶に置けばよいため、メモリ容量の制約を超えられます。
各プロセスに独立した空間を与え保護できる:プロセス(=実行中のプログラム)ごとに専用の仮想空間を持つので、他のプロセスのメモリを誤って壊しません。
メモリの断片化を緩和:ページ単位で物理上のどこへでも置けるため、空きを連続させる必要がありません。

これらの利点のおかげで、現代のパソコンやスマートフォンのOS(基本ソフト)はほぼすべて仮想記憶を採用しています。複数のアプリを同時に安全に動かせるのは、この仕組みのおかげと考えると分かりやすいです。上のツールの最終ステップで、小さな物理メモリで大きな空間を実現する様子を確認できます。

📌
なぜ実メモリより大きく使えるのか

物理メモリ今使う分だけ置く補助記憶(HDD/SSD)使わない分はここで待機

なぜ物理メモリ(主記憶)より大きなプログラムを動かせるのか。答えは「プログラムの全ページを一度にメモリへ置かなくてよい」からです。

仮想記憶では、プログラムをページ(=一定サイズのかたまり)に細かく分けて管理します。
今使っているページだけを物理メモリ(主記憶)に置く
しばらく使わないページは補助記憶(ディスク)に退避させておく
・アクセスが来たページがメモリにない場合はページフォールトが起き、OSがディスクからメモリへ読み込む

この「必要なものだけ手元に置く」という考え方をデマンドページング(=要求があったときにページを読み込む方式)と呼びます。机の上に今使う書類だけ広げ、残りは棚にしまっておく状態に似ています。棚(ディスク)は机(メモリ)より大きいので、机が狭くても大量の書類(プログラム)を扱えるのです。

📌
アドレス変換が必要な理由

プロセスA仮想 0番地仮想 N番地プロセスB仮想 0番地仮想 N番地変換MMU物理メモリ同じ仮想番地でも、物理上の場所は別々

なぜアドレス変換が必要なのか。プロセス(=実行中のプログラム)がそれぞれ「0番地から始まる自分だけのメモリ空間」を持てるようにするためです。

変換がない場合、プロセスAが0番地に書き込んだデータをプロセスBが上書きしてしまう可能性があります。仮想記憶では、各プロセスに独立した仮想アドレス空間(=仮想の番地体系)を与えます。
・プロセスAの「仮想0番地」は物理メモリの場所Xへ
・プロセスBの「仮想0番地」は物理メモリの場所Yへ(別の場所)

この変換を担うのがページテーブル+MMU(メモリ管理ユニット=変換専用のハードウェア)です。MMUはプログラムが仮想アドレスを使うたびに瞬時に物理アドレスへ変換します。この仕組みのおかげで、複数のプログラムが互いに干渉せず、同時に安全に動けるのです。

練習問題

🎯
基本情報技術者 練習問題

Q1.仮想記憶の説明として最も適切なものはどれか。
A.CPUの計算速度を高速化する仕組み
B.物理メモリより大きなアドレス空間を、補助記憶を併用してプログラムに提供する仕組み
C.ディスプレイの解像度を上げる仕組み
D.メモリを使わずにプログラムを実行する仕組み
Q2.仮想アドレスを物理アドレスに変換するために使われるものの組み合わせとして正しいものはどれか。
A.ページテーブルとMMU(メモリ管理ユニット)
B.キャッシュメモリとレジスタだけ
C.コンパイラとリンカ
D.ファイルシステムとデバイスドライバ
Q3.仮想記憶の利点として適切でないものはどれか。
A.物理メモリより大きなプログラムを実行できる
B.各プロセスに独立した空間を与えて保護できる
C.メモリの断片化を緩和できる
D.CPUのクロック周波数を物理的に引き上げられる

関連コンテンツ