EMM386は、 MicrosoftのMS-DOS、IBMのPC DOS、Digital ResearchのDR-DOS、DatalightのROM-DOS [ 1 ]の拡張メモリマネージャであり、 Intel 80386 CPUの拡張メモリを使用して拡張メモリを作成するために使用されます。FreeDOSでもEMM386.EXEが利用可能です。[ 2 ]
EMM386.EXE は、メモリを上位メモリ領域(UMA)内の未使用ブロックにマップできるため、デバイス ドライバーと常駐プログラムを「上位にロード」して、従来のメモリを保持できます。
この技術は、おそらく 1986 年にCompaq Deskpro 386用のCompaq OEM MS-DOSに含まれていたCEMMの開発で初めて登場しました。Microsoftのバージョンは、1987 年にWindows/386 2.0に組み込まれて初めて登場し、1988 年にはMS-DOS 4.0でスタンドアロンの EMM386.SYS として登場しました。より柔軟な EMM386.EXE バージョンは、 1991 年にMS-DOS 5.0で登場しました。
EMM386はプロセッサの仮想8086モードを使用します。これにより、DOSアプリケーションによるメモリアクセスはプロセッサのMMU(386で導入)を経由するようになり、MMUが使用するページテーブルエントリはEMM386によって、上位メモリの特定の領域を拡張メモリ(EMM386が拡張メモリマネージャHIMEM.SYSを介して取得)にマッピングするように設定されます。この技術により、EMS(拡張メモリ)とUMBの両方が使用可能になりました。どちらもDOSアプリケーションからは上位メモリのように見えますが、実際には1MBを超える物理メモリ位置にマッピングされています。
386 拡張モードでの Windows セッション中は一時的にシャットダウンし、Windows の保護モードカーネルがその役割を引き継ぎます。
WindowsはGEMMIS APIを使用してEMM386.EXEからメモリ管理を引き継ぎます。グローバルEMMインポート仕様(GEMMIS)は、一部のメモリ管理ベンダーが利用できるドキュメント(「Windows/386ページングインポート仕様」)によってサポートされています。[ 3 ] [ 4 ] [ 5 ] [ 6 ]
GEMMIS APIを実装したメモリマネージャはごくわずかで、EMM386.EXE、Quarterdeck QEMM、Qualitas 386MAX、Helix Netroom [ 3 ]、DOSBox built-in DOSなどが含まれています。注目すべきはFreeDOSのメモリマネージャが欠けていることです。
FreeDOS のメモリマネージャ (HIMEMX.EXE、JEMM386.EXE、JEMMEX.EXE) はいずれも GEMMIS API を実装しておらず、JEMMxxx と連携して Windows を実行すると、メモリ管理の役割を引き継ぐことができないため、Windows の起動に失敗します。Windows ME、Windows 98、Windows 95、Windows for Workgroups 3.1x、Windows 3.xxはすべて起動に失敗し、JEMMxxx には以下のメッセージが表示されます。
現在インストールされている保護モードソフトウェアが動作している間はWindowsを実行できません 実行中。
保護モードのソフトウェアを終了してから、もう一度試してください。 コンピュータを再起動する必要があるかもしれません。
JEMMxxを使用すると、Windowsを強制的に標準モード(つまり、80386拡張モードではなく80286保護モード)に設定することで、Windows 3.xおよびWindows for Workgroups 3.1xを限定的な機能で実行できます。ただし、以下の3つの条件を満たす必要があります。
標準モードの Windows は機能が制限されており、仮想メモリが不足しており、SYSTEM.INI の [386Enh] セクションがスキップされ、[386Enh] 内のデバイス ドライバーは読み込まれないことに注意してください。