拡張メモリ

拡張メモリは 1 MB 以上に配置され、ハイ メモリ領域を含み、Intel 286では 16 MB、 Intel 386DX以降では 4 GB で終わります。

DOS のメモリ管理では、拡張メモリとは、 IBM PCまたは80286以降のプロセッサと互換機におけるアドレス空間の最初の 1メガバイト(2 20バイト)より上のメモリを指します。この用語は主にDOSおよびWindowsオペレーティング システムで使用されます。リアル モードまたは仮想 x86 モードで実行される DOS プログラムは、このメモリに直接アクセスできませんが、拡張メモリ仕様(XMS) と呼ばれるアプリケーション プログラミング インターフェイス(API)を介してアクセスできます。この API は、ドライバ( HIMEM.SYSなど) またはオペレーティング システム カーネルによって実装され、プロセッサを一時的に保護モードに切り替えることで、メモリ管理と、従来型メモリと拡張メモリ間のメモリのコピーを行います。この文脈では、「拡張メモリ」という用語は、拡張メモリ全体を指す場合もあれば、この API を介して利用できる部分のみを指す場合もあります。

拡張メモリには、 VCPIまたはDPMIを使用して保護モードで実行されている DOS プログラムから直接アクセスすることもできます。これらは、DOS で保護モードを使用する 2 つの (異なる、互換性のない) 方法です。

拡張メモリを、バンクスイッチメモリモジュールを備えた拡張カードを使用して IBM PC のメモリ容量を 640 KB (655,360 バイト) 以上に拡張する以前の方法である拡張メモリ(EMS)と混同しないでください。一般的なアプリケーションで拡張メモリがサポートされているため、拡張メモリを使用して拡張メモリをエミュレートするデバイスドライバが開発されました。その後、640 KB を超える追加メモリの小さな部分にリアルモードから直接アクセスできる 2 つの方法が開発されました。1 つはハイメモリ領域(HMA) と呼ばれ、拡張メモリの最初の約 64 KB で構成されます。もう 1 つは上部メモリ領域(UMA、上部メモリブロックまたは UMB とも呼ばれます) と呼ばれ、IBM PC がハードウェアアダプタと ROM 用に指定している 640 KB から 1 MB までのアドレス範囲に配置されます。

概要

x86ベースのPCでは、拡張メモリはIBM PC ATなどのIntel 80286プロセッサ以上でのみ利用可能です。[ 1 ]これらのチップのみが1MBを超えるRAMを直接アドレス指定できます。初期の8086/8088プロセッサでは、特別なハードウェアを用いて1MB未満のアドレスにRAMの一部を選択的に配置することで、1MBを超えるRAMを利用できます。

640 kB を超える RAM を搭載した 286 以上の PC では、IBM PC アーキテクチャがシステム ROM と周辺機器用に 640 kB から 1 MB の間のアドレスを予約しているため、追加メモリは通常 1 MB 境界より上に再マップされます。

拡張メモリはリアルモードではアクセスできません(ハイメモリ領域と呼ばれる小さな部分を除く)。保護モードで実行されるアプリケーションのみが拡張メモリを直接使用できます。Microsoft Windowsなどの監視型保護モードオペレーティングシステムは、アプリケーションプログラムのメモリアクセスを管理します。プロセッサは、グローバル記述子テーブル(GDT)と1つ以上のローカル記述子テーブル(LDT)を通じてこのメモリをアクセス可能にします。メモリが「保護」されるのは、ローカル記述子が割り当てられたメモリセグメントは、別のプログラムが異なるLDTを使用するためアクセスできないという意味です。また、グローバル記述子が割り当てられたメモリセグメントはアクセス権が制限され、違反時にプロセッサ例外(例えば、一般保護違反(GPF))が発生する場合があります。これにより、保護モードで実行されるプログラムが互いのメモリに干渉することが防止されます。[ 2 ]

80286のプロテクトモードではソフトウェアが動作しなかったため、拡張メモリは当初は使われていませんでした。しかし、業界は1985年にプロセッサの種類を問わずすべてのPCで動作する拡張メモリ規格を迅速に採用しました。 [ 1 ] Microsoft Windowsなどのプロテクトモードオペレーティングシステムは、リアルモードプログラムを実行し、拡張メモリを提供することもできます。DOSプロテクトモードインタフェース(DPMI)は、マルチタスク環境下でDOSプログラムが拡張メモリにアクセスするためのMicrosoftの規定方式です。[ 2 ]

拡張メモリ仕様(XMS)

拡張メモリ仕様XMS )は、 IBM PCの拡張メモリをリアルモードでデータ保存用に使用する仕様です(実行コードの実行用ではありません)。メモリは、 HIMEM.SYSなどの拡張メモリマネージャXMM )ソフトウェアによって利用可能になります。XMM関数は、ソフトウェア割り込み2Fh関数4310hを介して参照される変数アドレスへの直接呼び出しによってアクセスできます。

1988 年 7 月にリリースされた XMS バージョン 2.0 では、最大 64 MB のメモリが許可されていました。[ 3 ] XMS バージョン 3.0 では、これが 4 GB (2 32バイト) に増加しました。[ 4 ]この違いは、1 KB (1024 バイト) 単位で合計および未割り当て (空き) の拡張メモリの量を報告するために使用される値のサイズによる直接的な結果です。XMS 2.0 は 16 ビットの符号なし整数を使用し、最大 (65535 * 1 KB) = 64 MB を表現できますが、XMS 3.0 では、32 ビットの符号なし整数を使用する新しい代替関数が追加され、(4 G * 1 KB) = 4 TB (4 テラバイト) を表現できますが、仕様により 4 GB までに制限されています。[ 3 ] [ 4 ](4 GB は、1991 年に XMS 3.0 が公開された当時存在していた唯一の 32 ビット Intel x86 CPU である 80386 と 80486 のアドレス範囲です。)XMS 3.0 は、元の 64 MB 制限の XMS 2.0 API 関数を保持していますが、4 GB の拡張メモリ(最初の 1 MB を除く)をサポートする新しい「スーパー拡張メモリ」関数が追加されており、32 ビット CPU でのみ呼び出すことができます(これらの「スーパー」関数は、値を渡すために 32 ビット CPU レジスタを使用するため)。[ 4 ]アプリケーションで使用できるメモリの量は、アプリケーションが開発された仕様のバージョンによって異なる可能性があるため、後者はスーパー拡張メモリSXMS)と呼ばれることがあります。

拡張メモリマネージャは、ハイメモリ領域(HMA)とアッパーメモリ領域(UMA、アッパーメモリブロックまたはUMBとも呼ばれる)の割り当て管理も担当します。実際には、アッパーメモリ領域は拡張メモリマネージャ(EMM)によって提供され、その後、DOSはそれらすべてを割り当て、自ら管理しようとします。

参照

参考文献

仕様
  1. ^ a b Mendelson, Edward (1989年12月12日). 「A Slot Full of RAM」 . PC Magazine . 第8巻第21号. Ziff Davis Publishing Co. pp. 169–. 2020年2月8日時点のオリジナルよりアーカイブ。 2020年2月8日閲覧
  2. ^ a bこの記事は、2008年11月1日より前にFree On-line Dictionary of Computingのextended +memoryから取得した資料に基づいており、 GFDLバージョン1.3以降 の「再ライセンス」条項に基づいて組み込まれています。
  3. ^ a b MicrosoftLotusIntelAST Research (1988-07-19). eXtended Memory Specification (XMS) バージョン 2.0
  4. ^ a b c Microsoft、Lotus、Intel、AST Research (1991年1月) 。eXtended Memory Specification (XMS) バージョン3.0
マイクロソフト サポート技術情報