EMM386

EMM386 は、DOSで拡張メモリを使うためのもので、Intel 80386 CPU上でXMSを使って拡張メモリを生成する。

この技法は1987年にコンパックが開発した CEMMが起源と思われる。マイクロソフト版は1988年に Windows/386 2.1 に組み込まれたのが最初で、1989年にはMS-DOS 4.01上の独立したEMM386.SYSとなった。より柔軟なバージョンのEMM386.EXEは1991年のMS-DOS 5.0で登場した。

EMM386.EXEは他のメモリマネージャと違い、動作にはを必要とする。先に常駐するHIMEM.SYSがHMAとXMSを担当し、さらにEMSを提供するドライバとして別途EMM.SYSが用意されていたが、80386以降のプロセッサではEMM.SYSの代わりにEMM386が常駐することにより、より使い勝手の良い仮想EMSとUMB（後述）が提供される。EMM386の常駐後は、プロセッサがプロテクトモードであることを示すPEビットが立ち、DOSと言えど純粋なリアルモードではなくなる。そしてEMM386はリングプロテクションのリング0で動作し、ハードウエアに直接アクセスする命令などが一部制限されるようになる。

他の拡張メモリマネージャと同様、EMM386 は仮想86モードを使っている。ただし仮想86モードを示すフラグレジスタのVMビットは0を返す。Windowsではプロテクトモードのカーネルがその役割を果たすので、386エンハンストモードでのWindowsセッションの間、EMM386は一時的にシャットダウンされる。

EMM386.EXE は Upper Memory Block (UMB) 内の未使用ブロックにメモリをマッピングでき、デバイスドライバやTSRをそこにロードし、コンベンショナルメモリの使用を節約する。

 関連項目 
Upper Memory Area（UMA、Upper Memory Blockとも）
Extended Memory Specification (XMS)
Expanded Memory Specification (EMS)

Category:X86アーキテクチャ
Category:メモリ管理
Category:DOSの外部コマンド
Category:Windowsのソフトウェア