仮想記憶
プログラムが使う仮想アドレスと主記憶の実アドレスを分け、対応を管理するメモリ管理の仕組み。ディスクなどの外部記憶装置も補助に使うことで、主記憶の容量を超えるメモリ空間を利用できる。
イマシルちゃんの解説
仮想記憶は、プログラムから見えるメモリと、実際の主記憶を分けて管理する仕組みだよ。
プログラムが使う仮想アドレスを、OSとハードウェアが主記憶上の実アドレスへ対応付けるんだ。
よく使われる方式では、メモリをページという一定の大きさに区切って管理するよ。
今すぐ使わない部分をディスクなどへ移し、必要になったときに主記憶へ読み込むこともできるの。
これならプログラム自身がデータの出し入れを細かく管理しなくても、主記憶に一度に収まらない量を扱えるんだ。
この解説はわかりやすかったですか?
より深い解説
定義
仮想記憶は、プログラムが使うアドレス(仮想アドレス、論理アドレス)と、主記憶の実際のアドレス(実アドレス)を分け、OSとハードウェア(MMU:メモリ管理ユニット)がその対応を管理する仕組みである。主記憶に入りきらない部分は、ディスク上の領域(スワップ領域、ページファイル)に置いておき、必要になったときに主記憶へ読み込む。
ページング方式
現在の多くのOSは、メモリを固定長のページ(4Kバイトなど)に区切って管理するページング方式を使う。
| 用語 | 内容 |
|---|---|
| ページテーブル | 仮想アドレスのページと、実アドレスのページの対応表 |
| ページフォールト | アクセスしたページが主記憶にないときに起こる割込み。OSがディスクからページを読み込む(ページイン) |
| ページアウト | 主記憶の空きを作るため、ページをディスクに書き出す |
| TLB | ページテーブルの対応を一時的に保存する高速なキャッシュ |
ページ置換えのアルゴリズム
主記憶に空きがないとき、どのページを追い出すかを決める方式である。
| 方式 | 追い出すページ |
|---|---|
| FIFO | 最も古く読み込んだページ |
| LRU(Least Recently Used) | 最後に参照されてから、最も長い時間が経ったページ |
| LFU(Least Frequently Used) | 参照された回数が最も少ないページ |
スラッシング
主記憶の容量に対して、同時に実行するプログラムが多すぎたりすると、ページフォールトが頻発し、ページの入れ替えの処理(ディスクへのアクセス)ばかりに時間が使われて、システムの処理能力が極端に低下する。これをスラッシングという。主記憶の増設や、同時に実行するプログラム数(多重度)を減らすことで対処する。
仮想記憶の利点
| 利点 | 内容 |
|---|---|
| 大きなメモリ空間 | 主記憶の容量を超える大きさのプログラムを実行できる |
| メモリの保護 | プログラムごとに別の仮想アドレス空間を持つため、ほかのプログラムのメモリを壊さない |
| 効率的な利用 | 実際に使っているページだけを主記憶に置ける |
似た仕組みとの区別
| 仕組み | 内容 |
|---|---|
| 仮想記憶 | 外部記憶装置を使い、主記憶の容量を超えるメモリ空間を使えるようにする |
| メモリインタリーブ | 主記憶を複数のバンクに分け、アクセスを並列化する |
| ディスクキャッシュ | 主記憶と磁気ディスクの間にバッファを置き、速度差を補う |
| DMA | CPUを介さずに、主記憶と入出力装置の間でデータを転送する |