|
仮想記憶(かそうきおく、Virtual Memory)とは、メモリ管理技法の一種であり、マルチタスクオペレーティングシステムが不連続なメモリ領域をソフトウェア(プロセスなど)から見て連続になるように見せかけるものである。仮想記憶はまた、コンピュータ上に実装されている主記憶装置よりも大きな記憶領域を仮想的に提供する仕組みを提供する。仮想記憶の仕組みを利用することで、メモリ空間の一部をハードディスク装置等の大容量外部記憶〔初期のシステムでは磁気ドラムメモリが使われていた。現代のシステムではハードディスクドライブやソリッドステートドライブが使われている。〕に待避でき、実装メモリ量以上のメモリ空間が利用できるようになる。 現代のオペレーティングシステムの多くが仮想記憶をサポートしており、各プロセスをそれぞれ専用のアドレス空間で動作させている。しかし古いOSだけでなく、一部の現代のOS(IBM i など)も単一アドレス空間のOSであり、全プロセスをメモリを仮想化した単一アドレス空間内で動作させている。 仮想的に与えられたアドレスを仮想アドレス (virtual address) または論理アドレス (logical address)、実記憶上で有効なアドレスを物理アドレス (physical address) または実アドレス (real address) という。仮想アドレスの範囲を仮想アドレス空間、物理アドレスの範囲を物理アドレス空間という。 == 概要 == 仮想記憶の実装(仮想記憶方式)には、大きく分けてセグメント方式とページング方式の二種類がある。ちなみに68000システムでは、68451(セグメント方式)と、68851(ページング方式)のメモリ管理ユニット (Memory Management Unit、MMU) が準備されていた。 一般にページング方式の方がよく使われている。これにより、メモリスワッピング(あるいは匿名メモリページング)と仮想記憶が結びつけられる。メモリスワッピングとは、一次記憶装置内のメモリページを二次記憶装置(のスワップファイルあるいはスワップパーティションと呼ばれる場所)に書き出して、より高速な一次記憶装置を他のプロセスが使えるように解放することである。 「仮想記憶」という用語は「メモリスワッピング」と混同されることが多い。これはWindows系のオペレーティングシステム (OS) がメモリスワッピングの可 / 不可を設定する項目を "virtual memory" と称していることも一因と考えられる。実際、Windowsはその "virtual memory" を不可としても、ページング方式と仮想記憶を使用している〔Microsoft support: RAM, Virtual Memory, Pagefile and all that stuff 〕〔メモリ、仮想メモリ、ページファイル、および Windows のメモリ管理 〕〔Bruce Sanderson's General Windows Information RAM, Virtual Memory, PageFile and all that stuff 〕。Windows XP日本語版では、"システムのプロパティ"→"詳細設定"→"パフォーマンスオプション"→"仮想メモリ"のことである。 Unix系システムでもスワップファイルやスワップパーティションなしで仮想記憶を使用することが可能である。従って主記憶装置以上の大きな記憶領域を仮想的に使用できるようにすることは仮想記憶の主な目的ではあるが、本質ではないとも言える。本質は、不連続な物理メモリ領域を連続な仮想メモリ領域にマッピングすることであり、複数のプロセスがそれぞれ固有の連続な仮想メモリ領域を割り当てられる点である。これによって他のプロセスのことを気にせずに動作できる環境が提供されている。そういった意味で、仮想機械がゲストOSに対して提供していることと、仮想記憶がユーザープロセスに提供していることは等価である。仮想記憶は物理メモリのフラグメンテーションを隠蔽することでアプリケーションのプログラミングを容易にする。すなわちカーネルに記憶階層の管理を委任することで、プログラムが明示的なオーバーレイの制御を行う必要性を排除している。 技術的には、仮想記憶を使うことにより、ソフトウェアが動作するメモリアドレス空間のサイズとアドレス範囲は当該コンピュータの物理メモリ領域には必ずしも縛られなくなる。仮想記憶を適切に実装するには、CPU(あるいはそれに付随するデバイス)がOSに対して仮想メモリを物理メモリにマップする(対応付ける)手段を提供し、主記憶(物理メモリ)に対応していない仮想アドレスにアクセスしたことを検出する手段を提供して必要なデータをスワップインできるようにしなければならない。CPUの支援なしで仮想記憶を提供することも可能だが、その場合は上述の機能を提供するCPUをエミュレートするだけであって、本質的には同じことである。アドビシステムズの一部のアプリケーションのように、アプリケーションプログラムが自前で仮想記憶機構を持つ例もある。 ソフトウエアによって仮想記憶を実現する事は、本来ハードウエアで実現できる機能をあえてソフトウエアで行おうとしているので一見非効率に思える場合がある。しかし、この見方は場合によっては誤りである。なぜならページ方式やセグメント方式では仮想アドレス空間に対する広がりを持たせているので、例えば画像などを扱う場合には単にアドレス空間方向への広がり=すなわち水平方向への広がりしか持たない。だが画像に対する操作は、特定の2次元空間=面的な広がりを持っている。ここにソフトウエアで仮想記憶を実施するに当たって、面的な広がりをメモリ参照の局在性としてみなすと、単なる仮想記憶よりも性能の向上が期待できる。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「仮想記憶」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 Virtual memory 」があります。 スポンサード リンク
|