コンテンツにスキップ

Expanded Memory Specification

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。ミラー貝入 (会話 | 投稿記録) による 2007年1月30日 (火) 17:26個人設定で未設定ならUTC)時点の版であり、現在の版とは大きく異なる場合があります。

EMS(Expanded Memory Specification)は、ロータスインテルマイクロソフトの3社により提唱された、MS-DOS上でのメモリ拡張手法。

基本概念

  • "EMSマネージャ"を通じてメモリ空間の取得・開放、バンク切り換え等を行う。
  • 16KBytes単位でバンク切替を行い、これをページと呼ぶ。
  • 8086でアクセス可能な1Mbytesの範囲内に"ページフレーム"区画を設ける。
  • ページフレームは、ほとんどの場合4ページ=64KBytes(バージョン4.0)の連続した領域。
  • EMSマネージャは、要求のあったページをページフレームに出現させる。
  • そのため、各種操作は隠蔽され、ユーザは気にする必要が無い。
  • メジャーなバージョンとして3.2,Enhanced EMS 3.2, 4.0がある。4.0では特にWindows 2.x向けの拡張が行われた。

CPUメモリバスの変遷に伴い、いくつかの実装方式があった。

実現方法

ハードウェアEMS

バンク切替機能を持つ、専用メモリカードを拡張バスに接続する。

バンク切替等の操作は、ハードウェア的に行われるので高速。また、808680186V30といった、アドレスバスが20bitのCPUでもEMSを使用できる。

純粋なハードウェアEMSを80286以降搭載のコンピュータに増設しても、プロテクトメモリとしては使用できず、どちらも使用したい場合は"二重投資"となる。そのため、カード上のスイッチ切り替えにより、"拡張バス接続のプロテクトメモリ"としても使用できるEMSカードも存在した。

ソフトウェアEMS

80286以降のCPUで使用可能。プロテクトメモリを用いてEMSのエミュレーションを行う。

EMSマネージャは、バンク切替指令を受けると、プロテクトメモリからページフレームにページをコピー/書き戻しする。このオーバーヘッドのため低速である。

EMSマネージャを組み込まない場合は、プロテクトメモリはそのまま使用できるので、汎用性がある。

仮想86EMS

80386以降のCPUで使用可能。IA-32仮想86モードを用いてEMSを実現する。

EMSマネージャは、CPUのメモリマッピング機構を用いて、(プログラムから見て)ページフレームにプロテクトメモリ上のページを出現させる。

ソフトウェアEMS同様の汎用性があり、ページ切替も高速。また、汎用拡張バスではなくメモリ専用バス上のメモリを使用可能なために最も高速である。

MS-DOS用ソフトウェアの互換性のために、Microsoft Windows Meまでサポートされていた。

設定上の注意

メインメモリ(コンベンショナルメモリ)を圧迫せずにEMSを使用するためには、その範囲外となる空間にページフレームを設定する必要がある。しかし、この空間はBIOS・拡張カードBIOS・VRAMが使用する空間である。

そのため、EMSを使用する際には、拡張カードBIOSを

  • 本体BIOS・VRAM・他のカードのBIOSと衝突しないように
  • かつ、64KBytesの連続未使用領域が生じるように

設定し、そこをページフレームとしなければならない。

ラージフレーム

PC/AT互換機におけるEMSの実装方法として、640KB以降のアッパーメモリにページフレームを設けるだけでなく、コンベンショナルメモリの上位アドレス (256KB:40000H以降など)にもページフレームを設けるラージフレーム方式がある。(実装に仮想メモリマネージャを使うことが多かった) 特にWindows 2.0,Windows/286,Windows 3.0リアルモードではこの方法を使って、コンベンショナルメモリに常駐するDLLを切り替えることが出来、 この点において国産のPC-9801などに比べて快適なOS環境を実装していた。(日本IBMで発売していたWindows 3.0Aのリアルモードでもこの機能は利用可能である。)

関連項目

  • XMS (Extended Memory Specification)