メモリ保護機能
出典: フリー百科事典『ウィキペディア(Wikipedia)』
メモリ保護機能(めもりほごきのう)とはコンピュータにおいてプログラムが暴走しても、他のプロセスのプログラムが読み書きしているメモリーの領域を破壊することが無いように保護する機能である。通常、ハードウェア(MMU)とOSが協調して、多重仮想記憶などを用いて保護する。
目次 |
[編集] 実現方法
メモリ保護機能を実現する方法はいくつかある。以下に列挙する。
[編集] セグメント方式
セグメント方式では、セグメントと呼ばれるメモリのかたまりをいくつか割り当てられてプロセスが動作し、それ以外のメモリにはアクセスできない。セグメントはハードウェアのレジスタによって定義され、アクセス可能なメモリアドレスの範囲を限定する。データを許されている範囲外に読もうとしたときや書き込もうとしたときに例外が発生する。(これはx86のリアルモードのセグメント機能と混同されるべきではない。)
[編集] ページング方式
ページング方式は、メモリ保護機能を実現する方法としてよく使われる。ページング方式では、メモリはページと呼ばれる小さな断片に分割される。仮想記憶機構を使い、ページは任意の物理メモリに対応付けられるか、保護状態であることがフラグで示される。ページング方式では連続した仮想記憶空間をばらばらな物理メモリ空間に対応付けることでこれを実現する。
各プロセスはページテーブルを持っていて、アクセス可能なアドレスに物理メモリをマップする。ページテーブルはプロセスからは見えない。ページテーブルを使うことによって、新たなメモリをプロセスに割り当てる必要が生じたときには、適当な物理メモリをどこからでも持ってきて新しいページとして割り当てることができる。
ページテーブルは仮想アドレスをインデックスとした配列の形式が一般的である。各エントリの形式はプラットフォームのMMUによって決められており、対応する物理メモリのアドレスの他にアクセス権を設定する。アクセス権としては、アクセス可能な特権レベルとアクセスの種別(読み出し、書き込み、実行など)の組み合わせで表される。これによりMMUは当該ページへのアクセスが妥当であるかを判断する。不正なアクセスと判断された場合、例外が発生する。
[編集] 保護キー
保護キー機構では、メモリはある一定のサイズのかたまりに分割される(例えば、2Kバイト)。そして、それぞれに保護キー(protection key)と呼ばれる数値が対応付けられる。また、プロセスもひとつの保護キーを割り当てられている。メモリにアクセスする際、ハードウェアは現在のプロセスの保護キーとアクセスしようとしているメモリの保護キーが合っているかをチェックする。もし合っていない場合、例外が発生する。この機構はシステム/360アーキテクチャで使用されている。
IA-32アーキテクチャのように、ページング方式とセグメント方式を同時に使用している場合、セグメントは物理メモリに直接マップせず、リニアアドレス空間にマップされ、リニアアドレス空間から物理アドレス空間へのマッピングをページング方式で行う。もちろん、ページングを使わずにセグメント方式だけを使うことも可能である。両方を使用した場合、どちらにもアクセス権の設定機能があるため、注意が必要となる。