Expanded_Memory_Specification
[Wikipedia|▼Menu]

Expanded Memory Specification (EMS) は、MS-DOS上でのメモリ拡張手法。ロータスインテルマイクロソフトの3社が提唱したことから、その頭文字を付けてLIM-EMSとも呼ばれる。
概要

初期のMS-DOSはIntel 8086向けに作られていたことから、8086が扱える最大のメモリ空間である1MB以上を扱うことが考慮されていなかった。8086が登場した当初は8ビットプロセッサの最大64KBの空間に比べると余裕があるように見えたが、ROMVRAMの為に消費される空間を除いたメインメモリ空間は640KBまたは768KBに制限され、アプリケーションの規模が拡大し、また扱うデータが増大すると1MBでも不足するようになった。

やがて1MBを越えるメモリを扱える上位互換品である8028680386が登場し、メモリモジュールが安価に手に入る時代に入ったが、リアルモードでどうやって使うかが問題になった。プロセッサをプロテクトモードで動作させれば1MBを越えるメモリを扱えたが、当時のMS-DOSおよびそのアプリケーションは、多くの場合リアルモードで動作していた為である。

この壁を乗り越えるハード的な実装は幾つかあったが、代表的なのは後に統一規格として制定されたバンク切り換えによるメモリ拡張方式EMSである。EMSを使用するソフトではデータを16KB?64KBの窓を通してアクセスする為、データの分解・再結合をしなければならず、またEMSを通常メモリのように透過的に扱うライブラリも無かった事から、やや煩雑なプログラミングをする必要があった。(コード領域をEMSに展開し、コンベンショナルメモリの負担を軽減するコンパイラはあった)。 80386からは仮想86モードを使ったソフトウエア的なEMSの実装が一般的となった。
基本概念

"EMSマネージャ"を通じてメモリ空間の取得・開放、
バンク切り換え等を行う。

16KBytes単位でバンク切替を行い、これをページと呼ぶ。

8086でアクセス可能な1Mbytesの範囲内に"ページフレーム"区画を設ける。

ページフレームは、ほとんどの場合4ページ = 64Kバイト(バージョン4.0)の連続した領域。

EMSマネージャは、要求のあったページをページフレームに出現させる。

そのため、各種操作は隠蔽され、ユーザは気にする必要が無い。

対応するメモリ総量は32Mバイト(2048ページ)まで。

主な版として3.2, Enhanced EMS 3.2, 4.0がある。4.0では特にWindows 2.x向けの拡張を行った。

CPUメモリバスの変遷に伴い、いくつかの実装方式があった。
実現方法PC-9800シリーズ用のプロテクトメモリ・EMS切替スイッチ付メモリボード(右、容量4MiB・512ページ)とメモリマネージャ。収録のEMSマネージャはソフトウェアEMSとしてI・Oバンクメモリの利用もできる。
ハードウェアEMS

バンク切替機能を持つ、専用メモリカードを拡張バスに接続する。バンク切替等の操作は、ハードウェア的に行われるので高速。また、808680186V30といった、アドレスバスが20bitのCPUでもEMSを使用できる。純粋なハードウェアEMSを80286以降搭載のコンピュータに増設しても、プロテクトメモリとしては使用できないため、どちらも使用したい場合は"二重投資"となる。そのため、カード上のスイッチ切り替えにより、"拡張バス接続のプロテクトメモリ"としても使用できるEMSカードも存在した。
ソフトウェアEMS

80286以降のCPUで使用可能。プロテクトメモリを用いてEMSのエミュレーションを行う。EMSマネージャは、バンク切替指令を受けると、プロテクトメモリからページフレームにページをコピー/書き戻しする。このオーバーヘッドのため低速である。EMSマネージャを組み込まない場合は、プロテクトメモリはそのまま使用できるので、汎用性がある。

一般的にソフトウェアエミュレーション方式のEMS(ソフトウェアEMS)といえばプロテクトメモリを使ったものを指すことが多いが、その他のエミュレーション方式についても併記する。

PC-9800シリーズ用の一部のEMSマネージャは、プロテクトメモリの代わりにI・Oバンクメモリを利用できた(ページフレームのアドレスはハードウェアEMSの有無により異なる)。バンクメモリを利用する場合は8086/V30でも使用できる。

また、プロテクトメモリの代わりに補助記憶装置(ストレージ)上のファイルを用いるドライバもある。メモリの代わりにファイルにアクセスするため、さらに低速であるが、ドライバによっては8086/8088などでも使用できる。HP200LX(CPUは80C186)では、この方法によりEMSが使用できる。ページフレームをメインメモリ空間に確保し、ストレージに充分な空き領域があれば、追加ハードウェアは不要である。

LXEMM (HP200LX用) など

仮想86EMS

80386以降のCPUで使用可能。IA-32仮想86モードを用いてEMSを実現する。EMSマネージャは、CPUのメモリマッピング機構を用いて、(プログラムから見て)ページフレームにプロテクトメモリ上のページを出現させる。ソフトウェアEMS同様の汎用性があり、ページ切替も高速。また、汎用拡張バスではなくメモリ専用バス上のメモリを使用可能なために最も高速である。ただし、仮想86モードはプロテクトモードの1タスクである(独立した動作モードではない点に注意)ため、プロテクトモードを使用した際に発生するのと同等の処理速度の低下がある。特に割り込みとI/Oポートへのアクセスでこの速度の低下が顕著となる。

MS-DOS用ソフトウェアの互換性のために、Windows 9x系まではMS-DOSモード用にEMM386が用意されていた。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:11 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef