仮想記憶
1961年、バロースはセグメント方式で仮想記憶をサポートした世界初の商用コンピュータ B5000 をリリースした。
1965年にMITが開発したMultics以降、仮想記憶は本格的に採用され始めた。
コンピュータ史上の多くの技術と同様、仮想記憶にも様々な曲折があった。安定した技術と見なされるまで、仮想記憶の様々な問題点を解決しようとするモデルや理論が開発され実験がなされた。仮想アドレスを物理アドレスに変換するハードウェア機構の開発も必然的だったが、初期の実装ではそれによってメモリアクセスが若干遅くなった。システム全体を対象とするアルゴリズム(仮想記憶)は従来のアプリケーション単位のアルゴリズム(オーバーレイ)よりも非効率ではないかという懸念もあった。1969年、商用コンピュータでの仮想記憶に関する論争は事実上終結した。David Sayre 率いるIBMの研究チームが仮想記憶システムが手動制御システムよりも優位にあることを示したのである。
1970年、IBMはSystem/370シリーズのOSであるDOS/VS、OS/VS1、OS/VS2(後のMVS)で仮想記憶をサポートした。OS/VS1はシングルタスクの仮想記憶で、マルチタスクには従来通りユーザーによるマルチプログラミングが必要であったが、OS/VS2はマルチタスクの仮想記憶(複数の仮想アドレススペース)をオペレーティングシステムの機能としてサポートした。
UNIXおよびUnix系OSでは、ハードディスクのパーティションを丸ごとスワップに使用することが多く、そのようなパーティションをスワップパーティションと呼ぶ。ドライブを1個丸ごとスワップパーティションとすることもある。そのようなドライブをスワップドライブなどと呼ぶ。スワップパーティションしかサポートしないシステムもあるが、ファイルへのスワッピングもサポートするシステムもある。フラグメンテーション問題を回避して性能を維持するためにもパーティションの使用が推奨されている。また、スワップパーティションを使うと、スワップ領域をディスク内の最も高速アクセス可能な場所に配置できる。最近のハードディスクでは、先頭の方がよいとされている。
仮想記憶を適切に実装するには、CPU(あるいはそれに付随するデバイス)がOSに対して仮想メモリを物理メモリにマップする(対応付ける)手段を提供し、主記憶(物理メモリ)に対応していない仮想アドレスにアクセスしたことを検出する手段を提供して必要なデータをスワップインできるようにしなければならない。CPUの支援なしで仮想記憶を提供することも可能だが、その場合は上述の機能を提供するCPUをエミュレートするだけであって、本質的には同じことである。アドビの一部のアプリケーションのように、アプリケーションプログラムが自前で仮想記憶機構を持つ例もある。
ソフトウェアによって仮想記憶を実現することは、本来ハードウェアで実現できる機能をあえてソフトウェアで行おうとしているので一見非効率に思える場合がある。しかし、この見方は場合によっては誤りである。なぜならページ方式やセグメント方式では仮想アドレス空間に対する広がりを持たせているので、例えば画像などを扱う場合には単にアドレス空間方向への広がり=すなわち水平方向への広がりしか持たない。だが画像に対する操作は、特定の2次元空間=面的な広がりを持っている。ここにソフトウェアで仮想記憶を実施するに当たって、面的な広がりをメモリ参照の局在性としてみなすと、単なる仮想記憶よりも性能の向上が期待できる。
Mac OSはSystem 7から「仮想メモリ」として実装される。当時はコントロールパネルでメモリサイズ(メインメモリのサイズを加算した値)を指定し機能を入にすることで使用できるようになる。すると起動ディスクに隠しファイルとしてスワップファイルが作成される。スワップファイルは指定したメモリサイズの大きさとなり、これ以上は増えない。この頃の仮想メモリは使用しているかどうかでプログラムの動作が不安定になることがあった。そのため、プログラムのパッケージや説明書には仮想メモリの設定を確認させる記述が見られる。
仮想記憶(かそうきおく、英語: Virtual Memory、バーチャルメモリ)とは、コンピュータ分野におけるメモリ管理の仮想化技法の一種であり、オペレーティングシステム (OS) などが物理的なメモリを、アプリケーション・ソフトウェア(プロセスなど)に対して、専用の連続した主記憶装置に見えるように提供する。
この技術により、物理的な主記憶装置に加えてハードディスク装置等の補助記憶装置を併用すれば、物理的な主記憶装置よりも大きな仮想メモリを提供する事ができる。またアプリケーション・プログラム側は、物理メモリ上のアドレスを意識しなくて良いため、マルチタスクの実現が容易である。このため現代のオペレーティングシステムの多くが仮想記憶をサポートしている。
仮想的に与えられたアドレスを仮想アドレス (virtual address) または論理アドレス (logical address)、実記憶上で有効なアドレスを物理アドレス (physical address) または実アドレス (real address) という。仮想アドレスの範囲を仮想アドレス空間、物理アドレスの範囲を物理アドレス空間という。