XMS
出典: フリー百科事典『ウィキペディア(Wikipedia)』
XMS(eXtended Memory Specification)は、MS-DOS上でのメモリ拡張規格のひとつ。MS-DOS バージョン5.0以降から公式にサポートされた(ただし、Windows/286と3.0で既にサポートされている)。
なお、フリーウェアやサードパーティ製のドライバを使用することで、それ以前のバージョンでも使用可能であった。
目次 |
[編集] 基本概念
- 100000h~10FFEFhを使用するHMA(High Memory Area)
- 10FFF0h以降のメモリの内容を、ドライバの助けを借りてメインメモリ間とブロック転送するEMB(eXtended Memory Block)
- BIOS・VRAM等が用いるA0000h~FFFFFhの、空き領域にRAMを出現させるUMB (Upper Memory Blocks)
の3規格からなる。
XMSは、これら3規格の総称であるが、"XMSメモリを使うプログラム"などといった文脈で使う場合は、EMBを指す場合も多い。 ただし、XMS ver.1はHMAの規格であり、 ver.2でEMB,UMBが追加され、 ver.3でEMBが64MB以上のメモリに対応し、UMBも1個機能が追加された。
[編集] HMA
8086では、セグメントレジスタ・オフセットレジスタという2つの16bitレジスタを用いてメモリ管理を行っている。(これは8080等との互換性を考慮した結果の設計である)MS-DOSにおけるメモリ管理も、このセグメント単位で行っている。
参照する実メモリはセグメント×10h + オフセットとなる。
上記の理由から、286以降のCPUを使用しているコンピュータで、20bit以上のアドレスバスを有効にした後(8086との互換性のため、起動直後は電気的に無効になっている)、セグメントレジスタにFFFFhを指定すると、アクセスする実アドレスはFFFF0h~10FFEFhとなる。(これは80286のバグであったが、有効利用できるので残された。)
すなわち、セグメント+レジスタという8086・MS-DOSのメモリ管理の枠内で、64KBytes弱のメモリが余分に扱えることになる。この領域をHMAと呼ぶ。
アドレスバスが24bit以上の、80286以降のCPUと1MBytes超のメモリが必要である。
基本的には排他的な利用となり、Windows/286(日本ではWindows 2.1x)かMS-DOS 5.0以降が占有する。DOS5.0以降に関してはDOSカーネル、ディスクバッファ、また一部のユーティリティ(display.sysなど)で利用する。
[編集] EMB
10FFF0h以降のメモリの内容を、ドライバの助けを借りてメインメモリ間とブロック転送する。また、このドライバをXMSマネージャ、XMSドライバ等と呼ぶ。
EMSと異なり、任意の場所に、任意のサイズで転送を行える。
アドレスバスが24bit以上の、80286以降のCPUと1MBytes超のメモリが必要である。
[編集] UMB
BIOS・VRAM等が用いる、A0000h~FFFFFh(PC/ATや、PC-98ノーマルモードの場合)の空き領域にRAMを割り当てて利用するもの。
この空間は1MBytes以内に収まっているため、MS-DOSのメモリ管理の枠内であり、デバイスドライバの読込用等に使用できる。
実装にはチップセットや専用のRAMボードの機能を使ってハードウェア的にRAMを出現させるものと、80386以降の仮想86モードを使って、仮想メモリマネージャ(EMM386.EXE等)がメモリを割り当てるものがある。前者はCPUが80386以降である必要性は無い(但し、XMSが80286以降を前提とする)。
[編集] よく使われたドライバ
- MS-DOS・Windows9xのHIMEM.SYS(EMB,HMA担当)+EMM386.EXE(UMB,EMS担当、386以降)
- メルコのMELEMM.SYS(XMS+EMS担当、386以降)
- I・O DATAのVMM386.EXE(XMS+EMS担当、386以降)
- Quarterdeck(シマンテックに吸収)のQEMM