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