一度に一つのプログラムしかメモリ上にロードできなかったとしたら、プロセスを切り替えるたびにプログラムをロードし直さなければいけなくなる。 これでは非効率なので、多くのOSでは、起動中のプログラムをメモリにロードしたままにしている。
このような、複数プログラムが同時にメモリ上に格納された状態では、仮想記憶という仕組みが用いられている。
物理的なメモリのうち、アプリケーションプログラムがロードされる領域は、ページと呼ばれる特定の大きさの領域に区切られている。 このページごとに、ロードするプログラムを変えることができるようになっている。
仮想記憶システムでは、プロセスごとに1つのアドレス空間が仮想的に割り当てられる。 このアドレス空間は物理的なメモリ上のアドレスとは関係ないため、仮想アドレス空間or論理アドレス空間と呼ばれる。
アプリケーションプログラム側では、仮想アドレス空間の番地を使ってプログラムが作られる。 実際にCPUがプログラムを実行する時には、仮想的なアドレスと物理的なアドレスの対応関係が書かれた表(アドレス変換テーブル)を使って、MMU(Memory Management Unit)と呼ばれるハードウェアによってアドレスが変換される。