メモリ管理ユニット
出典: フリー百科事典『ウィキペディア(Wikipedia)』
メモリ管理ユニット(Memory Management Unit、MMU)は、コンピュータのハードウェア部品のひとつであり、CPUの要求するメモリアクセスを処理する。
主な機能としては、仮想アドレスを物理アドレスに変換する機能(すなわち仮想記憶管理)、メモリ保護機能、キャッシュ制御機能、バス調停機能、そして単純な8ビットシステムなどに見られるバンク切り替え機能などがある。
最近のMMUでは、一般的にメモリ空間(アドレス空間)はページに分割される。 ページのサイズは 2Nであり、たいていの場合数Kバイトである。 CPUが出力するアドレス下位Nビット(ページ内オフセット)は仮想→物理の変換においては変化しない。 CPUが出力するアドレス上位ビットは仮想ページ番号である。 MMUはページテーブルを持っている。ページテーブルは配列構造になっていて、仮想ページ番号がそのインデックスになっている。 各ページテーブルエントリ(PTE)は仮想ページ番号(そのPTEのインデックス)に対応した物理ページ番号を格納している。 この物理ページ番号とページ内オフセットを組み合わせて完全な物理アドレスを作り出すのである。
PTEには、以下のような情報が含まれている。
- そのページに以前に書き込みがあったかどうか
- 最後にアクセスされたのはいつか(ページ置換アルゴリズムで使用)(必ずしもきちんとした時刻が記されているわけではない)
- 特権レベルごとのアクセス権(特権モードでの読み/書き/実行、ユーザモードでの読み/書き/実行の可/不可を設定)
- そのページにアクセスしたときキャッシュメモリに内容をコピーするか否か
ある仮想ページに対して物理メモリ(RAM)が対応していないこともある。 その場合、MMUは「ページフォールト」をCPUに通知する。 オペレーティングシステム(OS)はその通知を受けて、空いている物理ページを探し、PTEの内容をその物理ページを示すよう書き換える。ページフォールト処理から元のプログラムに復帰するとフォールトを発生させた命令を再度実行して、今度はPTEが物理ページを指しているので正常に処理が続行される。 もし、空きメモリがない場合、使用中のページから(何らかの置換アルゴリズムを使って)物理ページを選択し、その内容をディスクに書き込んで退避し、そのページを使う(必要ならばディスクから内容を復帰させる)。 これをページング方式と呼ぶ。 ページテーブル自体もメモリ上に存在するので、PTEが存在しないという場合もあり、その場合もOSとMMUが協力して新たにページテーブルを割り当てる。
「ページフォールト」は時としてソフトウェアのバグによって発生することもある。 MMUのメモリ保護機能を使えば、OSはアクセス権を与えない設定をすることで不正なプログラムからメモリを守ることができる。 一般にOSはプログラム(プロセス)ごとに別の仮想アドレス空間を用意する。
MMUはメモリのフラグメンテーションに対しても有効である。 メモリブロックのアロケートと解放が繰り返されると、フリーなメモリは十分あっても、大きな連続なブロックをアロケートできなくなってしまう。 仮想記憶では、こまぎれな物理ページを集めて連続な仮想空間をつくることができる。
マイクロプロセッサの初期の設計では、MMUは独立した集積回路となっていた。 たとえば、Macintosh IIのMC68020 CPUでは MC68851 MMU を使い、Z80ファミリでは Z8015 が使われた。 その後のCPUであるMC68030やZ280ではマイクロプロセッサ内にMMUを内蔵している。
この項目では最近のページング方式を使うMMUについて解説したが、MMUにはセグメント方式や他の方式を使用しているものもある。そしてそれは現在のマイクロプロセッサにも残っている。x86系統のマイクロプロセッサはページングだけでなくセグメント方式を提供している。
[編集] その他
- PA-RISCでは、ハッシュ・ページ・テーブルと呼ばれるより複雑な構造でアドレス変換を行っている。この機構はIA-64にも受け継がれているため、IA-64は一般的なページング方式とPAライクなハッシュ方式とIA-32モードでのセグメント方式の3つの方式をサポートしている。
- MIPSアーキテクチャではMMUはあるもののページテーブルは規定されておらず、オペレーティングシステムが直接トランスレーション・ルックアサイド・バッファを書き換えるようになっている。