XMS
出典: フリー百科事典『ウィキペディア(Wikipedia)』
XMS(eXtended Memory Specification)は、MS-DOS上でのメモリ拡張規格のひとつ。MS-DOS バージョン5.0以降から公式にサポートされた(ただし、Windows/286と3.0で既にサポートされている)。
なお、フリーウェアやサードパーティ製のドライバを使用することで、それ以前のバージョンでも使用可能であった。
目次 |
[編集] 基本概念
XMSは、次の3つのメモリ領域の規格からなる。
- 100000h~10FFEFhを使用するHMA (High Memory Area)
- 10FFF0h以降のメモリ領域を使用するEMB (Extended Memory Block)。このメモリ領域の内容は、XMSドライバの助けを借りてコンベンショナルメモリ間とブロック転送できる
- BIOS・VRAM等が用いるA0000h~FFFFFhの、空き領域にRAMを出現させるUMB (Upper Memory Blocks)
XMSは、これら3規格の総称であるが、「XMSメモリを使うプログラム」などといった文脈で使う場合は、EMBを指す場合も多い。 ただし、XMS ver.1はHMAの規格であり、 ver.2でEMB, UMBが追加され、 ver.3でEMBが64MB以上のメモリに対応し、UMBも1個機能が追加された。
なお、XMSという用語はメモリ領域を指す言葉の他に、それらの領域を管理するファンクションコールを意味する言葉としても使用された。例えば「このメモリマネージャーは、EMSの他、XMSもサポートする」のように使用された場合には、ファンクションコールを意味する
またHMAとEMBに関するファンクションコールを提供するデバイスドライバーは、プロテクトメモリBIOS等の機種依存部分を吸収する役割も担っていた。 XMSドライバ が提供するHMAとEMBファンクションコールを利用するお陰で、Windows 3.x は、プロテクトメモリBIOSの直接呼出しと、A20ラインのハードウェア制御という機種依存処理を回避することが出来た。
[編集] HMA
8086では、セグメントレジスタ・オフセットレジスタという2つの16ビットレジスタを用いてメモリ管理を行っている。(これは8080等との互換性を考慮した結果の設計である)MS-DOSにおけるメモリ管理も、このセグメント単位で行っている。参照する実メモリはセグメント×10h + オフセットとなる。
上記の理由から、286以降のCPUを使用しているコンピュータで、20ビット以上のアドレスバスを有効にした後(8086との互換性のため、CPU周辺回路によって起動直後は電気的に無効になっている。なお、このアドレスライン20制御は機種依存する)、セグメントレジスタにFFFFhを指定すると、アクセスする実アドレスはFFFF0h-10FFEFhとなる。すなわち、セグメント+レジスタという8086・MS-DOSのメモリ管理の枠内で、64キロバイト弱のメモリが余分に扱えることになる。この領域をHMAと呼ぶ。これは80286のバグであったが、有効利用できるので残された。
HMAの使用には、アドレスバスが20ビット以上の80286以降のCPUと1メガバイト超のメモリが必要である。
基本的には排他的な利用となり、Windows/286(日本ではWindows 2.1x)かMS-DOS 5.0以降が占有する。DOS 5.0以降に関してはDOSカーネル、ディスクバッファ、また一部のユーティリティ(display.sysなど)で利用する。
[編集] EMB
80286以降のCPUのプロテクトメモリ領域の内、HMAを除いた10FFF0h以降のメモリ領域をEMBと呼ぶ。
XMSドライバは、EMBに関してメモリ領域の空メモリサイズの取得、EMBの割当、解放、ロック、アンロック等のファンクションコールを提供するので、DOSエクステンダやWindows 3.x のスタンダードモード・エンハンストモード等、プロテクトモードを使用できるプログラムは、XMSドライバーのファンクションコールを利用すれば、機種依存するプロテクトメモリBIOSを呼び出すことなしにプロテクトメモリを利用できた。
EMB領域はプロテクトモードでないとアクセスできないので、一般のMS-DOSアプリケーションは直接アクセスできないが、XMSドライバは、EMB同士またはEMBと任意のコンベンショナルメモリ領域とのブロック転送を行うファンクションコールも提供したので、リアルモード専用のプログラムでもXMSドライバを使用すれば、EMB領域を利用できた。
[編集] UMB
BIOS・VRAM等が用いる、A0000h-FFFFFh(PC/AT互換機や、PC-98ノーマルモードの場合)の空き領域にRAMを割り当てて利用するもの。 この空間は1メガバイト以内に収まっているため、MS-DOSのメモリ管理の枠内であり、デバイスドライバの読込用等に使用できる。実装にはチップセットや専用のRAMボードの機能を使ってハードウェア的にRAMを出現させるものと、80386以降の仮想86モードを使って、仮想メモリマネージャ(EMM386.EXE等)がメモリを割り当てるものがある。前者はCPUが80386以降である必要性は無い(但し、XMSが80286以降を前提とする)。
[編集] よく使われたドライバ
- MS-DOS・Windows 9xのHIMEM.SYS(EMB, HMA担当)+EMM386.EXE(UMB, EMS担当、386以降)
- メルコのMELEMM.SYS(XMS+EMS担当、386以降)
- I・O DATAのVMM386.EXE(XMS+EMS担当、386以降)
- Quarterdeck(シマンテックに吸収)のQEMM
[編集] 関連項目
- MS-DOS
- Microsoft Windows
- DOSエクステンダ
- DPMI (DOS Protected Mode Interface)
- VCPI (Virtual Control Program Interface)
- Expanded Memory Specification (EMS)
- プロテクトモード
[編集] 参考文献
- 『MS-DOSメモリ管理ソフト技法-メモリ常駐ソフト&拡張メモリ活用プログラミング』(CQ出版、1990年), ISBN 978-4789834841
- 「インターフェース 1990年9月号」(CQ出版)
- 「インターフェース 1993年10月号」(CQ出版)
- Duncan, Ray (1992). Extending-DOS:A Programmer's Guide to Protected-Mode DOS(Addison-Wesley), ISBN 978-0-201-56798-4