HMA
読み方:エイチエムエー
別名:ハイメモリー
HMAとは、Intel社製CPU使用時の特定条件下で利用可能なメモリ領域のことである。
HMAは、80286以降のCPUを使用しており、なおかつ同CPUのリアルモードで動作しているコンピュータが直接参照可能な、約64KBのメモリ領域(アドレス:100000h-10FFEFh)の呼称である。HMAはハイメモリとも呼ばれ、EMB、UMBとともにXMS規格を構成する。HMAを利用するには80286以降のCPUと1MB以上のメモリ、MS-DOS ver.5.0以降のOSが必要である。
リアルモードは本来、1MBまでのメモリ領域しか利用できず、リアルモードで動作するMS-DOSにおいても、使用可能なメモリ領域が1MBに制限されていた。しかし、ソフトウェアの発展やデータサイズの増大により、メモリ容量の不足が問題となってきたため、システムの一部をHMAに移動させることで、ユーザーが使用できる領域を拡大する仕様を策定した。
HMA
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/05/14 06:32 UTC 版)
8086では、セグメントとオフセットという2つの16ビット値を用いてメモリ管理を行っている(これは8080等との互換性を考慮した結果の設計である)。MS-DOSにおけるメモリ管理も、このセグメント単位で行っている。参照する実メモリはセグメント×10h + オフセットとなる。 上記の理由から、286以降のCPUを使用しているコンピュータで、アドレスライン20以上のアドレスバスを有効にした後(8086との互換性のため、初期状態では電気的に無効になっている。なお、このアドレスライン20制御は機種依存する)、セグメントレジスタにFFFFhを指定すると、アクセスする実アドレスはFFFF0h – 10FFEFhとなる。すなわち、セグメント+オフセットという8086・MS-DOSのメモリ管理の枠内で、65520バイトのメモリが余分に扱えることになる。この領域をHMAと呼ぶ。 セグメント FFFFh:オフセット 0000h = FFFF0h + 0000h = FFFF0h(8086などでも可) セグメント FFFFh:オフセット 0010h = FFFF0h + 0010h = 100000h セグメント FFFFh:オフセット FFFFh = FFFF0h + FFFFh = 10FFEFh HMAの使用には、アドレスバスが21ビット以上の(アドレスライン20がある)80286以降のCPUと1メガバイト超のメモリが必要である。 基本的には排他的な利用となり、Windows/286(日本ではWindows 2.1x)かMS-DOS 5.0以降が占有する。DOS 5.0以降に関してはDOSカーネル、ディスクバッファ、また一部のユーティリティ(display.sysなど)で利用する。変わったところでは、ATOK7の後期バージョンでHMAを使用するバージョン (ATOK7H) があった。 多くのEMSドライバが使用する仮想86モード環境下においては、一般に仮想86モニタ(プロテクトモードで稼動するプログラム)が上位メモリに存在するため、ハードウェア的にはアドレスの20ビットマスクを常に行わずに、該当する中間線形アドレスに対応するページのメモリアドレスを置き換えることでエミュレーションする対応を行っていた。
※この「HMA」の解説は、「XMS」の解説の一部です。
「HMA」を含む「XMS」の記事については、「XMS」の概要を参照ください。
- HMAのページへのリンク