「メモリ保護」の版間の差分

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