Expanded Memory Specification
バンク切替機能を持つ、専用メモリカードを拡張バスに接続する。バンク切替等の操作は、ハードウェア的に行われるので高速。また、8086・80186・V30といった、アドレスバスが20bitのCPUでもEMSを使用できる。純粋なハードウェアEMSを80286以降搭載のコンピュータに増設しても、プロテクトメモリとしては使用できないため、どちらも使用したい場合は"二重投資"となる。そのため、カード上のスイッチ切り替えにより、"拡張バス接続のプロテクトメモリ"としても使用できるEMSカードも存在した。
Expanded Memory Specification (EMS) は、MS-DOS上でのメモリ拡張手法。ロータス、インテル、マイクロソフトの3社が提唱したことから、その頭文字を付けてLIM-EMSとも呼ばれる。
80286以降のCPUで使用可能。プロテクトメモリを用いてEMSのエミュレーションを行う。EMSマネージャは、バンク切替指令を受けると、プロテクトメモリからページフレームにページをコピー/書き戻しする。このオーバーヘッドのため低速である。EMSマネージャを組み込まない場合は、プロテクトメモリはそのまま使用できるので、汎用性がある。
一般的にソフトウェアエミュレーション方式のEMS(ソフトウェアEMS)といえばプロテクトメモリを使ったものを指すことが多いが、その他のエミュレーション方式についても併記する。
PC-9800シリーズ用の一部のEMSマネージャは、プロテクトメモリの代わりにI・Oバンクメモリを利用できた(ページフレームのアドレスはハードウェアEMSの有無により異なる)。バンクメモリを利用する場合は8086/V30でも使用できる。
また、プロテクトメモリの代わりに補助記憶装置(ストレージ)上のファイルを用いるドライバもある。メモリの代わりにファイルにアクセスするため、さらに低速であるが、ドライバによっては8086/8088などでも使用できる。HP200LX(CPUは80C186)では、この方法によりEMSが使用できる。ページフレームをメインメモリ空間に確保し、ストレージに充分な空き領域があれば、追加ハードウェアは不要である。
LXEMM (HP200LX用) など
初期のMS-DOSはIntel 8086向けに作られていたことから、8086が扱える最大のメモリ空間である1MB以上を扱うことが考慮されていなかった。8086が登場した当初は8ビットプロセッサの最大64KBの空間に比べると余裕があるように見えたが、ROMやVRAMの為に消費される空間を除いたメインメモリ空間は640KBまたは768KBに制限され、アプリケーションの規模が拡大し、また扱うデータが増大すると1MBでも不足するようになった。
やがて1MBを越えるメモリを扱える上位互換品である80286や80386が登場し、メモリモジュールが安価に手に入る時代に入ったが、リアルモードでどうやって使うかが問題になった。プロセッサをプロテクトモードで動作させれば1MBを越えるメモリを扱えたが、当時のMS-DOSおよびそのアプリケーションは、多くの場合リアルモードで動作していた為である。
この壁を乗り越えるハード的な実装は幾つかあったが、代表的なのは後に統一規格として制定されたバンク切り換えによるメモリ拡張方式EMSである。EMSを使用するソフトではデータを16KB~64KBの窓を通してアクセスする為、データの分解・再結合をしなければならず、またEMSを通常メモリのように透過的に扱うライブラリも無かった事から、やや煩雑なプログラミングをする必要があった。(コード領域をEMSに展開し、コンベンショナルメモリの負担を軽減するコンパイラはあった)。 80386からは仮想86モードを使ったソフトウエア的なEMSの実装が一般的となった。