(57)【特許請求の範囲】
【請求項１】
コンピュータ・システム内の割り込みフラグ管理方法において：
割り込みを処理するための命令の実行をモード・エミュレータによって検出し；
前記コンピュータ・システムのスタックのスタック限界を前記モード・エミュレータによって調節し；
スタックに関連した命令を前記コンピュータ内で実行して、前記スタック限界外の前記スタックにアクセスし；
前記コンピュータ・システムにおいて、前記アクセスによって生じたスタック限界違反を検出し；
前記違反を検出した場合に、割り込みフラグを修正する；
ステップからなる前記方法。
【請求項２】
前記命令が割り込み関連命令である特許請求の範囲第１項記載の方法。
【請求項３】
前記スタックの限界をスタック・ポインタの現在の値に調節する特許請求の範囲第１項記載の方法。
【請求項４】
前記割り込み関連命令が割り込みクリア命令（ＣＬＩ）である特許請求の範囲第２項記載の方法。
【請求項５】
前記割り込み関連命令が割り込み設定命令（ＳＴＩ）である特許請求の範囲第２項記載の方法。
【請求項６】
前記スタック関連命令が前記スタックから複数個のスタック項目を取り出すポップ・フラグ（ＰＯＰＦ）命令である特許請求の範囲第１項記載の方法。
【請求項７】
前記スタック関連命令が前記スタックから複数個のスタック項目を取り出す割り込み戻し（ＩＲＥＴ）命令である特許請求の範囲第１項記載の方法。
【請求項８】
前記スタック関連命令の実行及び前記スタックの限界の違反が一般保護例外をもたらす特許請求の範囲第１項記載の方法。
【発明の詳細な説明】
【０００１】
発明の説明
［発明の背景］
（１）技術分野
本発明は一般的にはコンピュータ・メモリ・システムの分野に関係し、具体的にはコンピュータ・メモリの使用を制御し最適化するためのメモリ管理システム及び割り込みフラグ管理システムに関係するものである。
【０００２】
（２）背景技術
典型的なコンピュータ・システムは複数のモジュール又は要素から構成される。コンピュータ・システムにはマイクロプロセッサなどの中央処理装置（ＣＰＵ）を典型的に含む。マイクロプロセッサは命令の取得、復号及び実行を行うプログラム制御される装置である。コンピュータ・システムはシステム・オペレーティング・ソフトウェア、アプリケーション・プログラム命令及びデータを記憶するための記憶要素も含む。これらの記憶要素は読み出し専用メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ），ディスク記憶装置又はテープ記憶装置もしくは他の適当な記憶手段とすることができる。
【０００３】
コンピュータ・システムは外部装置をマイクロプロセッサに接続するための入出力（Ｉ／Ｏ）要素も典型的に含む。メモリ管理ユニットやコプロセッサなどの専用部品もコンピュータ・システムの一部となり得る。
【０００４】
コンピュータはデータの処理に使用される。データの処理を可能にするためには中央処理装置（ＣＰＵ）が入力データを使用するまで、その入力データを記憶しなければならない。また、データを処理した後に出力データを記憶しなければならない。いくつかの処理動作の間、データに対して命令を実行している間にＣＰＵがデータの一時的な記憶を必要とする場合がある。さらに、処理を制御するアプリケーション・プログラムや、その下でプログラムが走行するオペレーティング・システムをＣＰＵからアクセスできなければならない。「メイン・メモリ」と呼ばれる資源にこの情報を記憶することによってＣＰＵからこの情報を使用できるようになる。
【０００５】
メイン・メモリと呼ばれるメモリ要素はユーザ、データ、プログラム又はプロセスに動的にアロケートされる希少な資源である。メイン・メモリは通常はＲＡＭなどのシリコン・べースのメモリである。多くの応用例ではメイン・メモリとしてダイナミック・ランダム・アクセス・メモリ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：ＤＲＡＭ）が使用される。プロセッサのメイン・メモリは「バイト」編成になっている。すなわち、メモリは８ビット・バイトのシーケンスとして構成され、このバイトがメモリからアクセスされる情報の最小単位になる。ある規約によれば、１つのロウ全体がロウ・アドレスによって選択され、カラムが８ビットのグループでアクセスされる。実施によっては１６ビット・ワード（２バイト）又は３２ビット・ワード（４バイト）を１回でアクセスするものもある。
【０００６】
メイン・メモリをＣＰＵからアクセスできるようにするためにはメイン・メモリをＣＰＵに直接又は間接に接続しなければならない。中央処理装置に直接接続できるメイン・メモリの量はＣＰＵのアドレス・バスの幅によって制限される。アドレス・バスはＣＰＵとメモリの間に接続される。メモリをアクセスするため、ＣＰＵは１つのメモリ・ロケーションだけをユニークに表現する値をアドレス・バスに置くことができる。アドレス・バスに置くことのできるユニークな値の数はアドレス・バスの幅に応じて変化する。特定のマイクロプロセッサなど特定のタイプのＣＰＵのアドレス・バスの幅は普通は固定されているので、ＣＰＵによってアドレッシングできるメモリ・ロケーションの数には限界がある。
【０００７】
ＣＰＵによってアドレッシングできる以上のメモリをＣＰＵに接続することが望ましい場合がある。追加のメモリを接続できるようにするためにある方法を使用して追加メモリをＣＰＵに間接的に結合する。８０８８や８０８６などのマイクロプロセッサのアドレス・バスは２０ビットである。ｎビットのアドレス・バスによってアドレッシングできるメモリ・ロケーションの数は２のｎ乗であるから２０ビットのアドレス・バスによってアドレッシングできるメモリ・ロケーションの数は２の２０乗、すなわち、約１００万（１Ｍ）である。ＣＰＵから直接アクセスできるようにするためにはすべてのメモリをアドレス・バスのビットによって表現できるユニークな値の数を越えないサイズの連続ブロックの中に配置しなければならない。２０ビットのアドレス・バスの場合すべてのメモリを１Ｍの連続ブロックの中に置かなければならない。
【０００８】
理論的には間接的な方法によって追加メモリをアクセスすることもできるが、ほとんどのオペレーティング・システムはメモリヘの直接アクセスだけをサポートする。オペレーティング・システムが間接的に追加メモリをアクセスする方法をサポートしない場合、アプリケーション・プログラムとそのデータのすべてを、必要なシステム・ソフトウエアのすべてとともに直接アクセスできる連続ブロックの中に格納しなければならない。
【０００９】
アドレス・バスの幅によって、直接アクセスできるメモリの量が制限されるが、システム・ソフトウェアの占有するメモリの量によって、アプリケーション・プログラムが使用できる空きメモリの量が制限される。したがって、アプリケーション・プログラムが使用できるメモリの量は直接アクセスできるメモリの総量より少ない。アプリケーション・プログラムが、使用可能な量以上のメモリを必要とする時には簡単にアクセスできる使用可能メモリの量を増加するための方法を見い出さなければならない。
【００１０】
従来技術では使用可能メモリの量を増やすために多くの試みが行われてきた。従来技術で使用された方法の１つがエクスパンデッド・メモリ仕様（Ｅｘｐａｎｄｅｄ  Ｍｅｍｏｒｙ  Ｓｐｅｃｉｆ１ｃａｔｉｏｎ：ＥＭＳ）として知られている。ＥＭＳは直接アクセスできないエクステンデッド・メモリの一部をエクスパンデッド・メモリとして使用するために予約し、ぺージに分割する。ＥＭＳではこのエクスパンデッド・メモリを１回に１ぺージずつＣＰＵが直接アクセスできるアドレス空間に切り替えることによって事実上無制限の量のメモリをアクセスできる。しかし、ＥＭＳではぺージの変更に時間がかかる。望みのデータが直接アクセスできるメモリ内に配置されたＥＭＳぺージ・フレーム内にない場合、ＥＭＳではページ・フレームの現在の内容をぺージ・アウトし、望みのデータを含むページをエクスパンデッド・メモリからぺージ・インしなければならない。このようなページ変更は時間を要するのでコンピュータの処理速度が低下する。また、ＥＭＳはすべてのアプリケーション・ソフトウェアに一般的に適用可能ではない。ＥＭＳを使用できる場合にそれを利用するよう特別にアプリケーション・ソフトウェアを作成しなければならない。
【００１１】
従来技術のもう１つの方法はＬＯＡＤＡＬＬ命令に頼る方法である。ＬＯＡＤＡＬＬ命令は８０２８６マイクロプロセッサだけに具えられた非サポート命令である。ＬＯＡＤＡＬＬ命令は８０２８６だけに具えられているのでこの従来技術の方法は８０２８６マイクロプロセッサに基づくコンピュータでなければ役に立たない。
【００１２】
従来技術のもう１つの方法はシステムＲＯＭに含まれるシステム・ソフトウェアの検査と再プログラミングを含む。この方法では最小の量のメモリを占有しながらその機能を実行するようにシステムＲＯＭを再プログラミングすることができる。この方法によればＲＯＭプログラミングが非効率的なために浪費されていたメモリ空間を他の目的に使用できるようになる。しかし、この方法ではこの方法に使用できるＲＯＭのそれぞれのすべての改訂版を人間がプログラミングし直す必要がある。
【００１３】
これらの従来技術の方法のどれにも不便な点がある。これらの方法の中のあるものは追加メモリを提供するが、望みのデータをアクセス可能にするのに必要なステップのせいでコンピュータ・システムの性能を低下させるものがある。特定の中央処理装置に基づくシステムでなければ使えない方法もある。ＲＯＭ固有でありＲＯＭのそれぞれの改訂版ごとに別々に実施しなければならないものもあれば、特定のアプリケーション・プログラムに固有でありすべてのアプリケーション・プログラムに一般的に適用することができないものもある。
【００１４】
発明の概要
本発明は一般保護例外などの障害に対して強固なメモリ管理システムを提供する。本発明はこのことを達成するため適切な割り込みフラグの管理を行う。さらに、ＣＰＵ固有、ＲＯＭ固有又はアプリケーション・プログラム固有のどれでもなく、従来技術の方法ほど性能を低下させないので、従来技術の欠点がなく、より一般的に適用可能であると同時によりよい性能を提供する。
【００１５】
本発明ではＲＯＭに格納されたシステム・ソフトウェアをその通常のアドレス空間から移動し、そのアドレス空間を他の目的に使用する。本発明はＲＯＭアドレス空間を他の目的に使用でき、なおかつＲＯＭに格納されたソフトウェアにアクセスできる形でメモリを管理する。
【００１６】
本発明の好ましい実施例ではシステム・ソフトウェアを含むＲＯＭをエクステンデッド・メモリのアドレス空間にマッピングし、プロテクト・モードでアクセスする。その後、元々ＲＯＭが配置されていたアドレス空間にエクステンデッドＲＡＭをマッピングする。本発明の好ましい実施例ではＲＯＭアクセスの試みのすべてを再配置されたＲＯＭイメージに方向変更し、元はＲＯＭであったアドレス空間にマッピングされたエクステンデッドＲＡＭをアプリケーション・プログラムなど他の目的に使用できるようにする。
【００１７】
本発明の好ましい実施例はＣＰＵの通常のメモリ・アドレッシング範囲内でアドレッシング可能であり、このようにしてデータに直接に簡単にアクセスできるメモリの量を増やすための方法である。本発明の好ましい実施例ではシステムＲＯＭとビデオＲＯＭを再配置するが、他のＲＯＭにもこの方法を適用できる。
【００１８】
本発明では初期設定ルーチンを実行してＲＯＭをメモリ外部アドレス空間にマッピングする。インターセプト・ルーチンをインストールしてＲＯＭアクセスをすべてインターセプトする。エクステンデッドＲＡＭの位置を突き止め、アロケートして、以前にＲＯＭが占有していたアドレス空間に配置する。インストールが終わったならば、普通のアプリケーション・プログラムをこのコンピュータ・システムで実行できる。元々ＲＯＭがあったアドレス空間に配置される追加ＲＡＭはアプリケーション・プログラムが使用するためにアロケートしたり、常駐終了（Ｔｅｒｍｉｎａｔｅ−ａｎｄ−Ｓｔａｙ  Ｒｅｓｉｄｅｎｔ：ＴＳＲ）プログラムの再配置を含む（それに限定されるわけではない）他の目的のためにアロケートできる。ＲＯＭへのアクセスがある場合にはＲＯＭアクセス・インターセプト・ルーチンがそのアクセスをインターセプトし、再配置されたＲＯＭイメージに方向変更する。再配置されたＲＯＭルーチンを呼び出す時にはその実行を監視して、元のＲＯＭアドレス空間にあるＲＯＭデータ・テーブルやＲＯＭサブルーチンをアクセスしたりしないようにする。というのはこのアクセスが行われるとシステムがクラッシュするはずだからである。再配置されたＲＯＭルーチンの実行が完了した後にこのＲＯＭ実行の結果のすべてを検査し、調節して、システムのエラーやクラッシュをもたらす可能性のある不正確なデータを除く。性能をさほど低下させず、特定のＣＰＵ、特定のＲＯＭ又は特定のアプリケーション・プログラムに限定されない形で動作することによって本発明はコンピュータ・システム内のＣＰＵから簡単にアクセスできる使用可能メモリの量を増やすためのはるかに効率的で一般的に適用できる方法を提供する。
【００１９】
コンピュータ・システム内で簡単にアクセスできる追加メモリを提供する方法を説明する。以下の説明では本発明の完全な説明を提供するためコンピュータ・システムのタイプ、メモリ・アドレス・ロケーション、メモリの量やバス幅など多数の特定の詳細を記載する。しかし、これらの特定の詳細なしで本発明を実施できることは当業者には明白であろう。それ以外の場合では本発明を無用に不明瞭にしないために周知の特徴を詳細に説明することはしない。
【００２０】
典型的なコンピュータ・アーキテクチャを第１図に示す。このコンピュータ・システムにはＣＰＵ１０１、ＲＡＭ（メイン・メモリ）１０２、ＲＯＭ（読み取り専用メモリ）１０３、及びＩ／Ｏ（入出力）１０４が含まれ、これらのすべてがシステム・バス１０７に結合される。Ｉ／Ｏブロック１０４はバス１０５を介して、大容量記憶装置１０６などの他のシステムヘのアクセスを提供する。
【００２１】
ＣＰＵ１０１はコンピュータを制御し、命令を実行し、データを処理する。ＣＰＵ１０１はシステム・バス１０７を介して他の要素と通信する。ＣＰＵはシステム・バス１０７を介してコンピュータの他の要素から入力データを受け取り、システム・バスを介してコンピュータの他の要素へ出力データを送る。システム・バス１０７には普通アドレス・バス、データ・バス及び他のさまざまな制御線が含まれる。アドレス・バスとデータ・バスの幅ならびに制御線の数とタイプはコンピュータ・システムごとに異なる。
【００２２】
ＲＡＭ１０２、ＲＯＭ１０３及びメモリー・マップドＩ／Ｏ１０４を合むコンピュータ・システムの各要素に複数の別個のメモリ・ロケーションが含まれる。ＣＰＵ１０１がこれらのロケーションをアクセスできるようにするために各ロケーションに固有のアドレスを割り当てる。アドレスのそれぞれはアドレス・バスを介して送ることのできる２進値の固有の組合せである。ほとんどのメモリ・デバイスに複数のロケーションが含まれるので、１つのメモリ・デバイスのロケーションのすべてのアドレスが通常は連続ブロックとして割り当てられる。これらのブロックに連続した形でアドレスが割り当てられる（メモリにマッピングされる）場合が多い。しかし、割り当てられていないアドレスや将来の使用のために予約されたアドレスでギャップができていてもよい。
【００２３】
メモリ・マップはコンピュータ・システムのメモリの編成を理解するのに役立つ。典型的なメモリ・マップはマイクロプロセッサがアクセスできる最下位アドレスから始まり、マイクロプロセッサがアクセスできる最上位アドレスまで延びる。メモリ・マップの１例を第２図に示す。第２図のマップのメモリの最下位アドレスは領域２０１として示されるが、メイン・メモリＲＡＭ１０２にアロケートされる。領域２０２として示される次のアドレスはＩ／Ｏ１０４にアロケートされる。領域２０３として示されるメモリ・アドレスは未使用である。未使用アドレスの上位にある領域２０４にはＲＯＭにアロケートされたメモリ・アドレスが含まれる。領域２０５は追加ＲＡＭにアロケートされるメモリ・アドレスであり、領域２０６は追加ＲＯＭにアロケートされるメモリ・アドレスである。第２図はコンピュータ・システムのメモリ・アーキテクチャを設計する際の自由度を示すためあくまで１例として提供した図である。これは特定のコンピュータ・システムの実際のメモリ・マップを表現したものではない。
【００２４】
コンピュータ・システムの動作は「オペレーティング・システム」として知られる一連の命令によって制御される。オペレーティング・システムは入出力などコンピュータ・システムの基本機能を制御するのに使用され、通常はＲＯＭ１０３などの永久記憶要素に記憶される。オペレーティング・システムの例にＭＳ−ＤＯＳ又はＰＣ−ＤＯＳが含まれる。
【００２５】
コンピュータ・システムはアプリケーション・プログラムを実行するのに使用される。アプリケーション・プログラムの例に含まれるのがワード・プロセッサ、スプレッドシート、ドローインク・プログラム、データベースなどである。アプリケーション・プログラムによってはＲＯＭに格納されるものもある。しかし、一般的にはアプリケーション・プログラムはディスク・ドライブなどの大容量記憶装置に記憶される。
【００２６】
コンピュータ・システムの初期設定の時にＣＰＵ１０１によって実行されるアプリケーション・プログラムも大容量記憶装置１０６からＲＡＭ１０２に転送される。ＣＰＵ１０１が操作するデータもＲＡＭ１０２に格納される。
【００２７】
アプリケーション・プログラムのサイズと量、オペレーティング・システムのサイズ及びＣＰＵ１０１からアクセスできるデータの量はメイン・メモリのサイズによって制限される。無限の量のメモリがあれば理想的だが経済的にも技術的にも不可能である。まず、ユーザが購入できるメモリの量に限界がある。次に、特定のコンピュータがサポートできるメモリの量に技術的な限界がある。特定のコンピュータがサポートするメモリの量はそのコンピュータのベースとなる特定のＣＰＵのタイプに依存する。
【００２８】
たとえば、ＩＢＭのパーソナルコンピュータは８０８８マイクロプロセッサをベースとしている。８０８８マイクロプロセッサのアドレス・バスは２０ビットである。あるコンピュータがアドレッシングできるメモリの量はそのアドレス・バスの幅の関数である。ｎビットのアドレス・バスを備えたＣＰＵは２のｎ乗バイト又は２のｎ乗ワードのメモリを直接アクセスできる。したがって、８０８８マイクロプロセッサは約１００万バイト又は１００万ワード（１Ｍ）を直接アクセスできる。ＣＰＵのアドレス・バスの限界を越えて追加メモリを間接アクセスできるようにするための方法が開発されてはいるが、このような方法は扱いにくくて非効率的である場合が多い。したがって、アプリケーション・ソフトウエアが使用できる直接アクセス可能なメモリ空間ができる限り多い状態を保って、アプリケーション・ソフトウェアが可能な限り効率的に動作できるようにすることが望ましい。
【００２９】
できる限り多くの直接アクセス可能なメモリ空間をアプリケーション・ソフトウェア用に予約し直接アクセス可能なメモリ空間に収まるようにアプリケーション・ソフトウェアをできる限り小さくすることが理想的であるが、これが必ず達成できるとは限らない。システム・ソフトウェアはアプリケーション・ソフトウェアの管理と制御のために必要であるからやはりメモリに常駐しなければならない。また、アプリケーション・ソフトウェアの複雑さとユーザ・データの量が増加するにつれてアプリケーション・ソフトウェアに必要なメモリが増加する。
【００３０】
さらに、ＴＳＲ（常駐終了）として知られるプログラムがコンピュータ・システム上で使用される場合が多い。このようなプログラムは「ホット・キー」と「ポップアップ・ウィンドウ」を提供し、ビデオ・ディスプレイの隅に時計を表示したりディスク・ドライブの活動を監視するなどバックグラウンド・タスクの実行に使用される。ＴＳＲは他の多くの応用分野のために作成されており、ユーザが自分のコンピュータに複数のＴＳＲを同時に常駐させることもしばしばである。ＴＳＲのそれぞれが自分の配置されるメモリ空間を必要とするのでシステムにＴＳＲを追加するとメモリ必要量が増加する。
【００３１】
第５図は典型的なコンピュータ、すなわち、８０８８／８０８６ファミリのマイクロプロセッサに基づいて、ＭＳ−ＤＯＳの下で動作するＩＢＭのパーソナル・コンピュータなどのコンピュータのメモリ・マップを示す図である。第５図のメモリ・マップは可能な唯一のメモリ・マップではなく、典型的なメモリ・マップの１例である。このメモリ・マップは一番下のメモリ・ロケーション０（５０１）から一番上のメモリ内で最上位のロケーションまでという形で編成されている。このメモリ・マップには３つの基本領域がある。第１領域には最下位６４０Ｋのメモリが含まれ、コンベンショナル・メモリ５０２と呼ばれる。コンベンショナル・メモリ５０２は読み取り動作と書き込み動作の両方が可能なＲＡＭだけから構成される。ただし、すべてのシステムが６４０Ｋ全体を含むわけではなく、メモリ空間の一部が未使用のままであってもよい。
【００３２】
初期のマイクロコンピュータのアドレス・バスは１６ビットであり、これによって６４Ｋのアドレス空間がもたらされた。アプリケーションの必要とするメモリの量が増加するにつれてマイクロコンピュータに１６ビット・アドレス・バスの制限を克服する必要が生じた。したがって、ＩＢＭのパーソナルコンピュータは２０ビット・アドレス・バスをサポートするセグメント・アドレス方式と共に市場に導入された。２０ビット・アドレス・バスは１０２４Ｋ又は１Ｍのアドレス空間を提供するが、これは１６ビット・バスの１６倍のスペースである。１Ｍは１６ビット・アドレス・バスを備えるコンピュータの６４Ｋと比較して膨大な量のメモリであると思われた。さらに、当時のメモリ回路は高価であったのでＲＡＭメモリに関する人為的な制限が６４０Ｋに設けられた。６４０Ｋから１Ｍまでの３８４Ｋのアドレス空間は将来の使用、主にＲＯＭのために予約されていた。後続モデルのコンピュータはオリジナルのＩＢＭ  ＰＣと後方互換であり同一のＰＣ−ＤＯＳ／ＭＳ−ＤＯＳオペレーティング・システムを使用するように設計されたので６４０Ｋの制限が現代のコンピュータ上でアプリケーションに使用可能なメモリの量を制約し続けている。
【００３３】
コンベンショナル・メモリ５０２はコンピュータ・システムの重要な部分である。コンベンショナル・メモリはシステム・ソフトウェア、アプリケーション・ソフトウェア、ユーザ・データ及びＴＳＲやデバイス・ドライバを含む他のコードとデータを記憶するのに使用される。第５図に示すように、ＭＳ−ＤＯＳはメモリの最下位部分を使用してそれ自体のコード５０６と関連データ５０７を格納する。ＭＳ−ＤＯＳはその上位にアプリケーション・ソフトウェア、ＴＳＲ及びデバイス・ドライバ（全体を要素５１２として図示）を格納する。
【００３４】
メモリの第２の基本領域が３８４Ｋの予約済みメモリ５０３である。これは６４０ＫのＲＡＭ限界の上位、１０２４Ｋまでのメモリ・アドレスにある。予約済みメモリ領域５０３は主に読み取り専用デバイスであるＲＯＭによって占められる。予約済みメモリ領域にあるＲＯＭにはシステムＲＯＭ５０４，ビデオＲＯＭ５０５とおそらくはハード・ディスク・ドライブやネットワーク・インターフェースなどの他の周辺装置用のＲＯＭ５１４が含まれる。システムＲＯＭ５０４にはコンピュータの基本機能をサポートするコードとデータが格納される。ビデオＲＯＭ５０５にはビデオ表示を伴う動作をサポートするためのコードとデータが格納される。他の周辺機器用のＲＯＭ５１４はそれらの装置の動作をサポートする。
【００３５】
ＲＯＭの他に予約済みメモリ領域５０３には他のタイプの特殊メモリも含まれる。予約済みメモリ領域５０３にあるメモリのタイプの１つがビデオ・フレーム・バッファに使用されるＲＡＭである。ビデオ・フレーム・バッファは現在ビデオ・ディスプレイに表示されている情報を格納するのに使用される。一般にビデオ・フレーム・バッファから情報を読み取ることと書き込むことの両方が可能であるが、ビデオ・フレーム・バッファは通常は一般情報の記憶には使用できない。というのはビデオ・フレーム・バッファがアクティブでなくその状態のままになるのでない限り、ビデオ・フレーム・バッファに情報を書き込むとビデオ・ディスプレイの外見が変化するからである。
【００３６】
予約済み領域５０３のうちでビデオ・フレーム・バッファのために使用される領域は特定のコンピュータ・システムにインストールされたビデオ・ディスプレイ・アダプタの特定のタイプによって変化する。第５図に示すように、ＥＧＡ又はＶＧＡのビデオ・アダプタをインストールする場合、グラフィックス用の６４Ｋのビデオ・フレーム・バッファ５０８が６４０Ｋから７０４Ｋまでのメモリ空間を占有する。ＥＧＡ又はＶＧＡのアダプタはテキスト表示のために３２Ｋのビデオ・フレーム・バッファも使用する。この３２Ｋのビデオ・フレーム・バッファはモノクローム表示の場合には７０４Ｋから７３６Ｋまで、カラー表示の場合には７３６Ｋから７６８Ｋまでに配置される。ＭＤＡビデオ・アダプタをインストールする場合１６Ｋのビデオ・フレーム・バッファ５０９が７０４Ｋから７２０Ｋまでのメモリ空間を占有する。ハーキュリーズ・ビデオ・アダプタをインストールする場合、６４Ｋのビデオ・フレーム・バッファが７０４Ｋから７６８Ｋまでのメモリ空間を占有する。ＣＧＡビデオ・アダプタをシステムにインストールする場合、ビデオ・フレーム・バッファ５１０が７３６Ｋから７６８Ｋまでの８２Ｋのメモリ空間を占有する。ＥＧＡ又はＶＧＡのビデオ・アダプタをインストールする場合、追加のメモリがビデオＲＯＭのために使用される。典型的には７６８Ｋから７８４Ｋまでの１６Ｋのメモリ空間がＥＧＡ又はＶＧＡのビデオＲＯＭ５０５のために使用される。ただし、ビデオＲＯＭ５０５はサイズが異なる場合もあり、異なるアドレス空間に配置される場合もある。
【００３７】
システムＲＯＭ５０４はコンピュータの基本動作をサポートするが典型的にはたとえば９６０Ｋから１０２４Ｋまでの予約済みメモリ領域５０３の最上位６４Ｋを占有する。予約済みメモリ領域５０３の残りのスペースは未使用か、周辺装置をサポートするＲＯＭやＥＭＳページ・フレームを含む他の目的に使用されるかのどちらかである。
【００３８】
メモリの第３の基本領域は１Ｍを越えるすべてのメモリを合むエクステンデッド・メモリ５１１である。８０８８／８０８６マイクロプロセッサはアドレス・バスが２０ビットしかないので１Ｍのメモリしかアドレッシングできず、エクステンデッド・メモリ５１１を簡単にはサポートできない。８０２８６など２４ビットのアドレッシング能力を持つマイクロプロセッサは予約済みメモリ５０３とコンベンショナル・メモリ５０２の１Ｍの他に、１５Ｍのエクステンデッド・メモリ５１１を合む１６Ｍまでのメモリをアドレッシングできる。８０３８６や８０４８６など３２ビットのアドレッシング能力を持つマイクロプロセッサは予約済みメモリ５０３とコンベンショナル・メモリ５０２の１Ｍの他に４０９５Ｍのエクステンデッド・メモリ５１１を含む４Ｇまでのメモリをアドレッシングできる。
【００３９】
エクステンデッド・メモリ５１１のうちで１Ｍの直上に置かれる領域をハイ・メモリ・エリア５１３と呼ぶ場合がある。ハイ・メモリ・エリア５１３は従来技術のハイ・メモリ技法を使用してアドレッシングできる６５５２０個のメモリ・ワードから構成される。
【００４０】
第５図の従来技術のメモリ・マッピング・システムの欠点は１メガバイトのメモリしか直接アクセスできないことである。その１メガバイトの中にＲＡＭアドレッシングに関して６４０Ｋの人為的な制限が設けられている。しばしば、ユーザは６４０Ｋを越えるＲＡＭを直接アドレッシングできることを必要とする。ＲＡＭアドレッシングの人為的な６４０Ｋ制限を変更できないので追加ＲＡＭを提供しようとする従来技術の試みはＲＡＭカットオフと１メガバイト限界の間の３８４Ｋの予約メモリの利用に焦点を置いている。いくつかの従来技術の方法を以下で説明する。
【００４１】
従来技術の第１の方法では追加のコンベンショナル・メモリとして使用するためコンベンショナル・メモリ６０２の６４０Ｋ限界の真上の予約メモリ６０３をアロケートする。第５図を参照すると、要素６０１として示される６４０Ｋから７０４Ｋまでの予約メモリ・アドレス空間がＥＧＡ／ＶＧＡビデオ・フレーム・バッファのためにアロケートされる。７０４Ｋから７３６Ｋまでの予約メモリはＭＤＡ／ハーキュリーズ・ビデオ・フレーム・バッファのためにアロケートされる。７３６Ｋから７６８Ｋまでの予約メモリ・アドレス空間はＣＧＡビデオ・フレーム・バッファのためにアロケートされる。しかし、ほとんどのコンピュータ・・システムには１種類のビデオ・ディスプレイ・アダプタしかない。あるコンピュータ・システムにＣＧＡ又はＭＤＡ／ハーキュリーズのビデオ・アダプタがあるがＥＧＡ／ＶＧＡビデオ・アダプタがない場合、要素６０１として図示されるＥＧＡ／ＶＧＡビデオ・フレーム・バッファのためにアロケートされる６４０Ｋから７０４Ｋまでのメモリは未使用のままになり、コンベンショナル・メモリ６０２の拡張としてアプリケーション・プログラムが使用するために再アロケートすることができる。あるコンピュータ・システムにＣＧＡビデオ・アダプタがあるがＭＤＡ／ハーキュリーズ又はＥＧＡ／ＶＧＡのアダプタがない場合、ＭＤＡ／ハーキュリーズとＥＧＡ／ＶＧＡのビデオ・フレーム・バッファのためにアロケートされる６４０Ｋから７３６Ｋまでのメモリ空間が未使用のままになりコンベンショナル・メモリ６０２を７３６Ｋまで拡張できる。
【００４２】
コンベンショナル・メモリ６０２の限界を６４０Ｋの上に押し上げるためには、まず、そのシステムにインストールされているビデオ・ディスプレイ・アダプタのタイプを判定しなければならない。存在するビデオ・ディスプレイ・アダプタのタイプに応じて外部メモリから適当な量の未使用ＲＡＭを６４０Ｋを越えて６４０Ｋと連続している未使用のアドレス空間にマッピングしなければならない。その後、アプリケーション・ソフトウェアやＴＳＲにメモリを供給するためのメモリ・アロケーション手続きを修正して６４０Ｋ限界を越えるメモリをアロケートできるようにしなければならない。
【００４３】
この方法は簡単にアクセスできるメモリの量を増加させるが、複数の欠点がある。第１に、この方法はますます一般的になりつつあるＥＧＡディスプレイ又はＶＧＡディスプレイを備えたコンピュータ・システムでは役に立たない。第２に、ＥＧＡディスプレイ又はＶＧＡディスプレイのないシステムであってもこの方法によって使用可能にできるメモリの量はごくわずかである。ＭＤＡディスプレイ又はハーキュリーズ・ディスプレイのあるシステムでは６４Ｋを使用可能にすることしかできない。ＣＧＡディスプレイしかないシステムであっても９６Ｋを使用可能にすることしかできない。
【００４４】
従来技術の第２の方法は第１の方法に似ている。この方法にも第６図に示されるようにコンベンショナル・メモリの６４０Ｋ限界を予約メモリ領域に押し上げることが含まれる。しかし、この方法は他の目的に使用されている予約メモリの再配置も行われるという点が従来技術の第１の方法と異なる。この方法を使用することからもたらされるメモリ・マップを第７図に示す。この方法を用いるとビデオＲＡＭ７０３及びビデオＲＯＭ７０４ならびに入出力（Ｉ／Ｏ）メモリ７０５及びＴＳＲメモリ７０６を予約メモリ領域内でできる限り上位のメモリ・ロケーションに再配置してできる限り多くの未使用の予約メモリ・アドレス空間をコンベンショナル・メモリ７０１との６４０Ｋ境界に連続して使用可能にすることができる。実際に、コンベンショナル・メモリ７０１の６４０Ｋ限界を９００Ｋまで押し上げることができる。
【００４５】
この方法を実施するためには、まず、そのシステムにインストールされているビデオ・ディスプレイ・アダプタのタイプを判定しなければならない。やはり予約メモリ領域７０８の一部を占有する他のＩ／Ｏデバイスも判定しなければならない。その後、ビデオＲＡＭ７０３、ビデオＲＯＭ７０４、他のＩ／Ｏメモリ７０５及びＴＳＲメモリ７０６を予約メモリ領域７０８の最上位にあるシステムＲＯＭ７０７の真下の領域に再マッピングしなければならない。その後、ビデオＲＡＭ７０３、ビデオＲＯＭ７０４、Ｉ／Ｏメモリ７０５及びＴＳＲメモリ７０６を指す割り込みポインタその他すべてのポインタをリダイレクト（宛先変更）して、このメモリが再配置された新しいメモリ空間を反映させなければならない。次に、６４０Ｋと連続する予約メモリ・アドレス空間の使用可能ブロックに外部メモリから適当な量の未使用ＲＡＭをマッピングしなければならない。最後に、アプリケーション・ソフトウェアとＴＳＲのためのメモリ・アロケーション手続きを修正してフィル・メモリ７０２と呼ばれる６４０Ｋの上位にある予約メモリのうちで使用可能にされた部分をアロケートできるようにしなければならない。
【００４６】
この従来技術の第２の方法にも欠点がある。この方法では多くとも２６０Ｋの予約メモリしかアクセスできない。また、ビデオＲＡＭ７０３はしばしばアプリケーション・ソフトウエアが直接アクセスするので、アクセスの試みのすべてをつかまえビデオＲＡＭ７０３が再配置されたメモリ空間にリダイレクトすることは困難である。
【００４７】
従来技術の第３の方法は初めの２つとは多少異なる形で動作する。これを第８図に示す。ＴＳＲ、デバイス・ドライバ及びネットワーク・インターフェース・プログラム８０８は普通は６４０Ｋ未満のコンベンショナル・メモリ８０１に配置されるが、そうでなければアプリケーション・ソフトウェアが使用できるはずのコンベンショナル・メモリの一部を占有するので、これらのプログラムをコンベンショナル・メモリ８０１の外部に移動できるならばより多くのメモリをアプリケーション・ソフトウェアが使用できるはずである。従来技術の第３の方法ではＴＳＲ，デバイス・ドライバ及びネットワーク・インターフェース・プログラム８０３をコンベンショナル・メモリ８０１から予約メモリ８０２に移動することによってアプリケーション・ソフトウェアが使用できるコンベンショナル・メモリ８０１の量を増やす。
【００４８】
この方法を実施するためには、まず、未使用の予約メモリ８０６の量を判定しなければならない。また、ＴＳＲ、デバイス・ドライバ及びネットワーク・インターフエース・ドライバ８０３が占有するコンベンショナル・メモリの量も判定しなければならない。その後、予約メモリ領域にエクステンデッド・メモリから十分な量のアロケートされていないＲＡＭをマッピングしてＴＳＲ，デバイス・ドライバ及びネットワーク・インターフェース・プログラムのためのメモリ空間を供給しなければならない。次に、ＴＳＲ、デバイス・ドライバ及びネットワーク・インターフェース・プログラム８０３を予約メモリ８０２内の使用可能メモリ８０６に再配置しなければならない。
この従来技術の第３の方法にも欠点がある。まず、この方法ではアロケートされていない予約メモリ空間８０６しか使用できない。この方法ではＲＯＭ、ビデオ・フレーム・バッファ又は他の用途にアロケートされている予約メモリ空間８０７を使用できない。また、ＴＳＲ、デバイス・ドライバ及びネットワーク・インターフェース・プログラム８０３の再配置はそれらに対する参照のすべてが確実に新しいロケーション８０４，８０５にリダイレクトされるようにするために注意深く行わなければならない。
【００４９】
従来技術の第４の方法はいわゆるハイ・メモリ・エリアに関連する方法である。この方法を使用することからもたらされるメモリ・マップを第９図に示す。この方法は８０２８６で実施されたセグメント・アドレッシング方式の例外に基づいている。セグメント・アドレッシング方式では１６ビットのセグメントと１６ビットのオフセットを組み合わせて２０ビットのアドレスを生成する。２０ビットのアドレスは理論的には１Ｍまでに制限されるはずであるが、セグメントとオフセットの特定の組合せを用いると１Ｍ限界を越えるアドレスを得ることができる。８０８８及び８０８６マイクロプロセッサは可能なアドレスの範囲を１Ｍまでに制限するよう設計されたが８０２８６マイクロプロセッサにはそのような保護機構がない。８０２８６マイクロプロセッサはメモリ・アドレスに対する１Ｍ制限を厳格に維持するわけではないのでこの方法を８０２８６プロセッサと共に使用すると、ハイ・メモリ・エリア（ＨＭＡ）９０３と呼ばれる、１Ｍの真上に位置する追加の６４Ｋのメモリをアクセスできるようになる。
【００５０】
この方法を使用するためには、まず、セグメント・アドレッシング方式を使用する時に最初の１６ビットのセグメントを格納するのに使用される「セグメント・レジスタ」と呼ばれるレジスタにＦＦＦＦＨをロードする。その後、「オフセット・レジスタ」と呼ばれるレジスタに１０ＨとＦＦＦＦＨの間の値をロードする。そうすると、マイクロプロセッサはコンベンショナル・メモリ９０１へのアクセスであるかのようにハイ・メモリのアクセスを実行する。
【００５１】
この従来技術の第４の方法にはそれに関連する欠点がある。この方法は８０８８又は８０８６マイクロプロセッサに基づくコンピュータでは機能しないので、初期のＰＣやその互換機では使用できない。また、この方法によってもたらされるメモリの量は６４Ｋに限られる。さらに、アプリケーション・ソフトウェアはＨＭＡをアロケートし、アクセスするよう特別に作成しなければならず、セグメント計算やＨＭＡへの直接のディスク読み書きを含むＨＭＡアクセスに関する制約に違反してはならない。また、この方法は広く知られており、この方法を使用してより多くのメモリを取得するソフトウェアが作成されているので、この方法によってもたらされるメモリはおそらくほとんどのコンピュータ・システムで他の用途に使用することができない。
【００５２】
従来技術の第５の方法ではメモリをページに分割し、データをアクセスする時にその望みのデータを含むページがアクセス可能なメモリに確実に含まれるようにする。この方法には２つのバリエーションがある。第１のバリエーションはエクスパンデッド・メモリ仕様（Ｅｘｐａｎｄｅｄ  Ｍｅｍｏｒｙ  Ｓｐｅｃｉｆｉｃａｔｉｎ：ＥＭＳ）と呼ばれる。ＥＭＳを第１２図に示す。ＥＭＳはエクステンデッド・メモリから予約メモリ領域１２０２内のページ・フレーム１２０３にバンク切換してどの時点でも１Ｍ未満のメモリ空間に１つ又は少数のページしか存在しないのに大量のエクステンデッド・メモリを使用できるようにする。ＥＭＳと共に使用する時にはエクステンデッド・メモリをエクスパンデッド・メモリ１２０４と呼ぶ。第２のバリエーションは仮想メモリと呼ばれる。仮想メモリを第１０図に示す。仮想メモリを用いるシステムの可能なメモリ・マップの１つを第１１図に示す。仮想メモリを使用すると物理メモリ１００２に格納できない情報をハード・ディスク・ドライブなどのＩ／Ｏデバイスに記憶できるようになる。データはべ一ジに分割されＣＰＵ１００１が必要とする時だけにディスク・ドライブから物理メモリにロードされる。したがって、大量のデータ・ページをハード・ディスクに記憶できるとともに物理メモリ１００２にわずかのページを保持するだけでよい。
【００５３】
ＥＭＳを使用するためにはエクスパンデッド・メモリ１２０４をページに分割しなければならない。また、予約メモリ内の１領域をページ・フレーム１２０３として使用するためにアロケートしなければならない。ページの内容とエクスパンデッド・メモリ内でのロケーションを含むページのディレクトリを維持しなければならない。一旦ＥＭＳが初期設定され動作状態になったならば、ＥＭＳをサポートするソフトウェアは望みのＥＭＳデータがＥＭＳページ・フレーム１２０３に含まれるようにするためにメモリ・アクセスを監視しなければならない。望みのＥＭＳデータがアクセスの時点でＥＭＳページ・フレーム１２０３に含まれない場合、ＥＭＳをサポートするソフトウェアは望みのデータのための余地を作るためにページ・フレーム１２０３のうちのどのページをページ・フレームからバンク切り替えして追い出すかを決定しなければならない。その後、このソフトウェアはエクスパンデッド・メモリ１２０４から適当なページを見つけなければならない。その後、この適当なページをページ・フレーム１２０３のうちの使用可能なページにロードしなければならない。その後、ページ・フレーム１２０３内の適当なアドレスへメモリ・アクセスをリダイレクトして望みのデータを読み書きできるようにしなければならない。
【００５４】
仮想メモリ・システムを使用するためにはハード・ディスク上にアロケートされた仮想メモリ１００３をページに分割しなければならない。ページの内容とメモリ内のロケーションを含むページのディレクトリを維持しなければならない。一旦仮想メモリ・システムが初期設定され動作状態になったならば、仮想メモリ・システムは望みのデータが物理メモリ１００２に含まれるようにするためにメモリ・アクセスを監視しなければならない。望みの仮想メモリ・データがアクセスの時点で物理メモリ１００２に含まれない場合、仮想メモリ・システムは将来アクセスされる可能性が最も低いメモリのページを判定しなければならず、それらをハード・ディスクに書き戻さなければならない。その後、仮想メモリ・システムはハード・ディスクの仮想メモリ１００３から適当なページを見つけなければならない。その後、適当なページを物理メモリ１００２の選択されたページにロードしなければならない。その後、新たにロードされたページ内の適当なアドレスにメモリ・アクセスをリダイレクトして望みのデータを読み書きできるようにしなければならない。
【００５５】
ＥＭＳと仮想メモリ・システムには類似性があるが、仮想メモリ・システムは一般にＥＭＳよりはるかに自動的にアプリケーション・ソフトウエアに対して透明に動作する。アプリケーション・ソフトウェアは、仮想メモリ・システムの場合、その存在すら意識せずにコンピュータ・システム上でアクティブになる場合があるが、ＥＭＳの場合、アプリケーション・ソフトウェアはＥＭＳの存在を認識するだけではなく特別にＥＭＳをサポートしＥＭＳの動作を指令しなければならない。
【００５６】
この従来技術の第５の方法は理論的にはより大量のメモリのアクセスを可能にする能力を持っているが欠点もある。この方法を用いるとメモリ管理にＣＰＵタイムを割かなければならないのでメモリ・アクセス・タイムが増加する。記録を継続的に更新してページ・フレーム１２０３とエクスパンデッド・メモリ１２０４の両方でのページの位置とその内容を示さなければならない。これらの動作はＣＰＵが他のタスクに当てることのできるはずのタイムを奪い、したがって、性能を低下させる。
【００５７】
従来技術の第６の方法ではＲＯＭの圧縮と最適化を使用する。この方法は一般的に適用することができず、ＲＯＭのそれぞれの改訂版ごとに人間が実行しなければならない。この方法の目的はＲＯＭの占有するメモリ空間の量を減らし、その結果ＲＯＭにアロケートされているが未使用のメモリ空間を他の目的のために再アロケートできるようにすることである。非効率的なコードとＲＯＭのうちで絶対にアクセスされない部分とを発見し除去することによって、ＲＯＭが占有するメモリ空間を減らす。
【００５８】
この方法は特定のＲＯＭのそれぞれに別々の形で適用しなければならないのでこの方法の詳細を一般的に説明することはできない。この方法を使用するためには既存のＲＯＭのコードとデータを注意深く検査し、変更又は削除しなければならない領域を突き止めなければならない。その後、これらの変更を行った後にＲＯＭのコードとデータを再アセンブルしなければならない。その後、小さくなった新しいＲＯＭコードを元のＲＯＭの部分の上にマッピングしなければならない。また、この方法によって使用可能にされたメモリ空間を他の目的に使用できるようにするための用意も必要である。
【００５９】
この方法の明らかな欠点は一般的に適用できないことである。この方法に基づく製品は新しいＲＯＭ改訂版が発表された途端に旧式になる。また、ＲＯＭのそれぞれの各改訂版の圧縮と最適化を実行するにはかなりの時間と労力と技能が必要である。
【００６０】
従来技術の第７の方法では予約メモリ領域に常駐することになるＴＳＲの初期設定のために予約メモリ領域内に追加のメモリを一時的に供給する。予約メモリ領域にマッピングされているメモリ内にＴＳＲを置くことによって、そうでなければそれらのＴＳＲが使用するはずのコンベンショナル・メモリ空間をアプリケーション・プログラムが使用できる。しかしながら、ＴＳＲは典型的に初期設定されるときに単に常駐している時よりも多くのメモリを必要とする。時にはＥＭＳをインストールしそのページ・フレームが予約メモリ領域内のメモリ空間を占有する時などにある、ＴＳＲを初期設定するのに十分な使用可能予約メモリ空間がない場合がある。従来技術のこの方法はＥＭＳページ・フレームのためにアロケートされた予約メモリ空間からスペースを借りることによってこの問題を克服する。ＴＳＲがその初期設定を完了し、そのスペースがもはや不要になった後にそのスペースがＥＭＳに返される。
【００６１】
従来技術のこの方法にも、欠点がある。まず、この方法はＴＳＲにしか適用できない。ＴＳＲのないシステムやごく小数のＴＳＲしかないシステムがあり、これらのシステムではこの方法からはほとんど利益を得られない。また、この方法から得られる利益の量はＴＳＲによって変化する。あるＴＳＲが初期設定のために追加のメモリを必要としない場合、この方法からはほとんど利益を得られない。
【００６２】
従来技術の第８の方法ではＬＯＡＤＡＬＬコマンドを使用してリアル・モード・プログラムを８０２８６マイクロプロセッサのプロテクト・モードで走らせる。その目的は８０２８６マイクロプロセッサにリアル・モードでの固有のメモリ・マッピング能力がないという事実にもかかわらずＥＭＳをエミュレートすることである。リアル・モード・プログラムがセグメント・レジスタをロードしようとする時に一般保護例外が発生する。この方法は一般保護例外ハンドラを使用してセグメント・レジスタをセレクタに変換し、予期されないプロセッサ・モードをプログラムに対して透明にする。これらの能力を８０２８６マイクロプロセッサで実現するためにこの方法はＬＯＡＤＡＬＬ命令に頼る。
【００６３】
ＬＯＡＤＡＬＬコマンドは８０２８６マイクロプロセッサの非公開・非サポートの機能である。これは８０８８、８０８６、８０３８６又は８０４８６マイクロプロセッサではサポートされない。これは明らかにマイクロプロセッサの製造と試験を助けるものとして８０２８６マイクロプロセッサだけに実施されたコマンドである。したがって、ＬＯＡＤＡＬＬ命令は将来に製造される８０２８６マイクロプロセッサでサポートされるという保証すらない。ＬＯＡＤＡＬＬ命令はシステム・ソフトウェア又はアプリケーション・ソフトウェアでの使用を目的としたものではない。
【００６４】
従来技術の第８の方法を使用するためには以下の処理を実行しなければならない。第１に、割り込みを禁止しなければならない。第２に、ロケーション００８００Ｈから始まる１０２バイトをセーブしなければならない。第３に、全レジスタをセーブしなければならない。次に、アクセスしようとする外部メモリの領域を指定するディスクリプタ・キャッシュ・ベース・アドレスを含む望みのレジスタ値をロケーション００８００Ｈから始まる１０２バイトのメモリにロードしなければならない。この後に、ＬＯＡＤＡＬＬオペコード（０ＦＨ０５Ｈ）を実行しなければならない。次に、エクステンデッド・メモリの読み取り又は書き込みを実行するが、この時にはアドレス・オフセットだけを使用しセグメント・ベース・アドレスを変更してはならない。この後に、記憶しておいた全レジスタの値を取り出し、ロケーション００８００Ｈから始まる１０２バイトのメモリにロードしなければならない。次に、ＬＯＡＤＡＬＬオペコード（０ＦＨ０５Ｈ）を実行してレジスタとディスクリプタ・キャッシュの以前の内容を復元しなければならない。その後、００８００Ｈから始まるメモリの１０２バイトの内容を取り出し、復元しなければならない。最後に、割り込みを許可し直さなければならない。
【００６５】
従来技術の第８の方法には多数の欠点がある。まず、ＬＯＡＤＡＬＬ命令は８０２８６べースのコンピュータ・システムでなければ機能せず８０８８、８０８６、８０３８６又は８０４８６ベースのコンピュータ・システムでは機能しない。ＬＯＡＤＡＬＬ命令は非公開で非サポートであるからＬＯＡＤＡＬＬ命令が将来に製造される８０２８６マイクロプロセッサで機能するという保証はない。一般に非公開又は非サポートのハードウェア機能に頼るのは受け入れられない行動である。さらに、ＬＯＡＤＡＬＬ命令は絶対メモリ・アドレス００８００Ｈにあるデータの操作を必要とする。ＬＯＡＤＡＬＬ命令を実行する前にこの領域のメモリに含まれるデータを保存するために何らかの手だてを講じない限りシステム・ソフトウェアがダメージを受ける可能性がある。また、この方法によればすべてのタイプのシステム動作の間に一般保護例外が発生する。この例外をサービスする必要があるがこれにはＣＰＵタイムというコストがかかり、したがって、ほとんどのタイムでシステム性能がかなり低下する。
【００６６】
従来技術のもう１つの方法はアップルＩＩコンピュータで使用する１６Ｋ−ＲＡＭカードに関連するものである。アップルＩＩコンピュータは６５０２マイクロプロセッサをベースとする。６５０２マイクロプロセッサのアドレス・バスは１６ビットであり６４Ｋのアドレス空間をサポートする。しかし、アップルＩＩが市場に導入された時点ではＲＡＭデバイスのコストが高かったので下位４８Ｋのアドレス空間だけがＲＡＭを用いて使用するようになっていた。この４８ＫのＲＡＭの上位に、Ｉ／Ｏメモリに当てられた４Ｋの領域があった。残りの１２Ｋはアドレス空間の最上位領域にありＲＯＭを用いて使用するようになっていた。
【００６７】
アプリケーション・ソフトウェアが徐々に大量のＲＡＭを必要とするようになるのにつれてその４８Ｋの限界を越えてＲＡＭを拡張する方法が必要になった。ＲＡＭの量を増やすために１６Ｋ−ＲＡＭカードが導入された。１６Ｋ−ＲＡＭカードには１６ＫのＲＡＭが搭載され、このＲＡＭは６４Ｋアドレス空間の上位１６Ｋにマッピングでき、４ＫのＩ／Ｏメモリと１２ＫのＲＯＭと入れ替えることができた。追加の１６ＫのＲＡＭを使用できるようにするためには、まず、Ｉ／ＯメモリとＲＯＭをアドレス空間の上位１６Ｋから取り除かなければならなかった。これはメモリ・デバイスに関連するアドレス復号ロジックを変更することによって達成できた。その後、１６ＫのＲＡＭのアドレス復号ロジックをイネーブルすることによってそのＲＡＭを１６Ｋのアドレス空間にマッピングできた。
【００６８】
１６Ｋ−ＲＡＭカードをイネーブルすると６４Ｋのアドレス空間が６４ＫのＲＡＭで満たされた。その時点では４ＫのＩ／Ｏメモリも１２ＫのＲＯＭもアクセスできなかった。Ｉ／ＯメモリとＲＯＭが使用できないのでアプリケーション・ソフトウェアは１６Ｋ−ＲＡＭカードがイネーブルされている間にコンピュータ・システムの完全な制御を維持しなければならず、制御を解放する前にＩ／ＯメモリとＲＯＭを確実にイネーブルし直さなければならなかった。また、アプリケーション・ソフトウェアは１６Ｋ−ＲＡＭカードがイネーブルされている間にＩ／ＯデバイスやＲＯＭルーチンをアクセスすることができなかった。１６Ｋ−ＲＡＭカードがイネーブルされている間にアプリケーション・ソフトウェアが制御を解放するかＩ／Ｏデバイス又はＲＯＭルーチンをアクセスしようとしたならば、システムがクラッシュした。というのはその時点で望みのＩ／ＯデバイスもシステムＲＯＭもそのコンピュータ・システムのアドレス空間に存在しなかったからである。この方法はアプリケーション・ソフトウェアによるこのような注意深い制御と監視を必要としたので確かにアプリケーション・ソフトウェアの動作に対して透明ではなかった。１６Ｋ−ＲＡＭカードの存在を特に認識しその特徴を注意深く使用するようにアプリケーション・ソフトウェアを作成しなければならなかった。
【００６９】
本発明はアプリケーション・ソフトウェアに透明な形でＲＯＭアドレス空間を再利用するための方法を提供することによって、この従来技術の方法の制限を克服する。本発明を特にサポートするようにアプリケーション・ソフトウェアを記述する必要はなく、本発明の存在や動作を意識する必要もない。したがって、本発明は従来技術の方法よりはるかに役に立ち、用途の広い、ＲＯＭアドレス空間再利用方法を提供する。
【００７０】
本発明はＲＯＭメモリ・アドレスを６４０Ｋバイトと１メガバイトの間の予約メモリ領域に再割り振りすることによってＲＡＭをサポートするために使用できる追加のメモリ・アドレス空間を提供する。この場合、元のメモリ・アドレスをＲＡＭに格納されているアプリケーション、ＴＳＲなどをアドレスするために使用できる。
【００７１】
たとえば、８０８８／８０８６ファミリーのマイクロプロセッサ（８０２８６、８０３８６及び８０４８６マイクロプロセッサを含むがこれらに限定されるものではない）をベースとし、ＭＳ−ＤＯＳないしＰＣ−ＤＯＳオペレーティング・システムの下で作動するコンピュータ・システムに適用されたものとして本発明を説明する。しかしながら、本発明の用途はこのようなコンピュータ・システムに限定されるものではない。本発明は特定のビデオ・ディスプレイ・アダプタの構成を必要とするものではなく、すべてのビデオ・ディスプレイ・アダプタで作動する。さらに、本発明は特定のＲＯＭの特定の改訂版に限定されるものではなく一般的にほとんどのＲＯＭに適用できるものである。さらに、本発明は特定のアプリケーション・ソフトウェアとともに使用することに限定されるものではなくほとんどのアプリケーション・ソフトウェアに透過的に使用できる。また、本発明は全体的なシステム・パフォーマンスの相当程度の低下を回避する。このようにして、本発明はコンピュータ・システムで利用可能なメモリの量を増加させる従来技術の方法を大幅に改善するものである。
【００７２】
本発明を典型的なＭＳ−ＤＯＳコンピュータに適用したものを第１３図に示す。システムＲＯＭ１３０１及びビデオＲＯＭ１３０２の位置はエクステンデッド・メモリ１３０３に移動されており、これらが占めていたスペースは割り振り解放（ｄｅａ１１ｏｃａｔｅｄ）されている。したがって、未使用予約メモリ１３０４の量は増加し未使用予約メモリ１３０５となっている。本発明によればＲＯＭ１３０６及びビデオＲＯＭ１３０７にプロテクト・モードであるいは予約メモリへマップすることによってアクセス可能である。
本発明はコンピュータ・システムで使用されているマイクロプロセッサのセグメント化アドレス指定「リアル」モード及び「プロテクト」モードを利用する。セグメント化アドレス指定ならびにリアル・モード及びプロテクト・モードについては後で詳述する。
【００７３】
セグメント化アドレス指定を第８図に示す。セグメント化アドレス指定において、アドレスは２つの部分で指定される。最初の部分はセグメント８０１と呼ばれ、１６ビットの２進値である。第２の部分はオフセット３０２と呼ばれ、これも１６ビットの２進値である。アクセスする物理メモリ３０６内で指定されたアドレスを決定するためにマイクロプロセッサはまずセグメント・レジスタの内容に１０Ｈを乗算する（３０３）がこれはセグメントの内容を左へ４ビットシフトすることと等価である。次いで、この値をオフセット・レジスタの内容に加算する（３０４）。セグメント・レジスタをシフトしてからオフセット・レジスタに加算することにより、幅２０ビットのアドレスが生成される。２０ビットのアドレス・バスを通じてＣＰＵにアクセス可能なメモリの量は２２０であり、これは１０２４Ｋバイトすなわち１Ｍバイトに等しい。このアドレス指定方法は８０２８６、８０３８６及び８０４８６が「リアル」モードで作動している場合にこれらによっても使用される。
【００７４】
８０２８６、８０３８６及び８０４８６マイクロプロセッサは「リアル」モードでも「プロテクト」モードでも作動可能である。プロテクト・モードにはリアル・モードにはない各種の利点がある。まず、８０２８６ではプロテクト・モードで１６Ｍバイトにアクセスすることができ、これはリアル・モードでアクセス可能なメモリの量の１６倍である。８０３８６及び８０４８６ではプロテクト・モードはアドレス指定限度をさらに増加させる。プロテクト・モードにおいて８０３８６及び８０４８６は４０９６Ｍバイトすなわち４Ｇバイトをアドレスすることができこれは約４０億メモリ・ワードにあたる。
本発明は「プロテクト・モード」の実施例と坪ばれるもの、あるいは「マッピング」の実施例と呼ばれるものにおいて実現可能である。
【００７５】
プロテクト・モード
プロテクト・モードにおけるアドレス指定を第４図に示す。１６ビットのセグメント・レジスタの代わりに、プロテクト・モードは１６ビットのセレクタ４０１を使用する。セレクタはディスクリプタ・テーブル４０４の項目４０３をポイントする。ディスクリプタ・テーブルはベース・アドレスを指定するディスクリプタを含んでいる。８０２８６のディスクリプタは２４ビットのベース・アドレスを備えており、８０３８６及び８０４８６のディスクリプタは３２ビットのベース・アドレスを備えている。これらのベース・アドレスは８０８８／８０８６のセグメントと同じ機能を果たすがより用途が広いものである。アクセスするメモリ４０６内で指定されたアドレス４０５を決定するために８０８８／８０８６で使用しているものと同様なオフセット４０２をディスクリプタ・テーブル４０４からベース・アドレスに追加する。
【００７６】
８０３８６及び８０４８６は「仮想８６（Ｖ８６）」モードという付加的な機能を有している。仮想モードにおいてマイクロプロセッサが計算したアドレスはアドレス・バスにおかれる実際のアドレスではないことがある。８０８８６又は８０４８６が仮想モードでアドレスを計算する場合、３２ビットの線形アドレスのみを計算する。線形アドレスは次いで、マイクロプロセッサのページング機構に渡され、該機構は付加的な計算を行って物理メモリにおける最終アドレスを決定する。ページング機構によって実際の物理メモリのものと異なる構成でメモリをマップすることが可能となる。物理メモリをページに分割することによって仮想モードは物理メモリの各４Ｋバイトのブロックがそれ自体の仮想アドレスを有することを可能とする。以下の説明において「リアル・モード」という語は「仮想モード」と言い換えることができる。好ましい実施例において本発明は仮想モードを利用する。
【００７７】
本発明のプロテクト・モードの実施例によって本来システム５０４及びビデオＲＯＭ５０５に割り振られている予約メモリ領域５０３のメモリ空間の再割り振り（ｒｅａ１１ｏｃａｔｉｎ）が可能となる。プロテクト・モードでＲＯＭからの読み込みを行うことによって本発明はＲＯＭのアドレス空間をリアル・モードにおいて他の目的に使用することを可能とする。
【００７８】
システム構成を初期化し、元のＲＯＭのアドレス空間を再割り振りして、他の目的に利用できるようにし、ＲＯＭのアクセスをインターセプトして、これらのアクセスが再割り振りされたＲＯＭのアドレス空間に送られるようにし、かつＲＯＭのアクセスを処理して、ＲＯＭのアクセスが完了し、システムがＲＯＭのアクセス後に実行を継続できるようにすることによって、本発明は実施される。
【００７９】
本発明のコンピュータ・システムの初期化を第１４図の流れ図に関して説明する。初期化ルーチンはステップ１４０１から始まる。ステップ１４０１において移動対象のＲＯＭは第５図の予約メモリ領域５０８の元のアドレス空間におかれている。ステップ１４０３においてＲＯＭのコードにアクセスする割り込みハンドラが確認される。
【００８０】
ステップ１４０４においてＲＯＭのデータ・テーブル・アドレス及び長さが確認される。ステップ１４０５において再割り振りされたＲＯＭが使用する適切な割り振りされていない（ｕｎａｌｌｏｃａｔｅｄ）プロテクト・モード・アドレス空間が確認される。このアドレス空間は連続していなければならず、またＲＯＭのアドレス指定を完全にサポートするのに適切なサイズのものでなければならない。このアドレス空間は再割り振りされたＲＯＭが実行されるところである。
【００８１】
ステップ１４０６において、エクステンデッド・メモリ内の確認されたアドレス空間がＲＯＭに割り振られるので、他の目的のためのアドレス空間を使用することによる衝突が防止される。ＲＯＭは割り振られたメモリ・アドレス空間にマップされる。
【００８２】
オプションのステップ１４０７においてグローバル及びローカル・ディスクリプタ・テーブル（ＧＤＴ／ＬＤＴ）がＲＯＭがマップされている新しいアドレス空間に対して事前に割り振りされる。
【００８３】
ステップ１４０８においてコンベンショナル・メモリがＲＯＭデータ・テーブルのコピーを保持するために割り振られる。ステップ１４０９においてＲＯＭデータ・テーブルがコンベンショナル・メモリにコピーされる。ステップ１４１０においてコンベンショナル・メモリ内のアドレス空間が割り込みハンドラ・ルーチンに割り振られる。ステップ１４１１において割り込みハンドラ・ルーチンが割り振られたアドレス空間にインストールされる。ステップ１４１２に拾いてＲＯＭデータ・テーブルに対するポインタがコンベンショナル・メモリ内のコピーにリダイレクトされる。
【００８４】
オプションのステップ１４１３においてＲＯＭのアドレスはエクステンデッド・メモリによってオーバーレイされる。ステップ１４１４において制御がオペレーティング・システムに戻される。
【００８５】
ＲＯＭデータ・テーブルに対する照会がすべて見つからなかった場合あるいはこれらがすべて見つからないようなことを回避したい場合には上記の手順の変形を行う。その位置に関して公表されている情報を照会するかあるいはＲＯＭの内容の分析によるかのいずれかによってＲＯＭデータ・テーブルの位置を捜し出してから、元のＲＯＭアドレス空間のこれらが占める部分をこれらに予約されているものとすることができる。次いで、プロテクト・モードの機能を使用してＲＯＭデータ・テーブルを元のＲＯＭアドレス空間内の元の位置に復元することができる。ＲＯＭデータ・テーブルは元のＲＯＭアドレス空間の元の位置にマップされる。マイクロプロセッサはプロテクト・モードのリング・ゼロにおかれている。グローバル及びローカル両方のディスクリプタ・テーブル（ＧＤＴ／ＬＤＴ）はＲＯＭデータ・テーブルが占める元のＲＯＭアドレス空間の部分に設定される。プロセッサはプロテクト・モードを終了し、リアル・モードヘ戻るようになされる。ＲＯＭデータ・テーブルが占める部分以外の元のＲＯＭアドレス空間は割り振り解放され、他のリアル・モードでの目的に使用できるようになる。割り振りされていない適切なエクステンデッドＲＡＭを見つけだし、元のＲＯＭアドレス空間を割り振り解放済みの予約メモリ５０３に収める必要がある。このＲＡＭは次いで予約メモリ内の元のＲＯＭアドレス空間に割り振られ、マップされる。
【００８６】
必要なステップをすべて行って本発明のプロテクト・モードの実施例で使用するためにコンピュータ・システムを初期化した後、予約メモリ５０３内の元のＲＯＭアドレス空間にマップされているＲＡＭをＴＳＲ，デバイス・ドライバ又はネットワーク・インタフェース・プログラムの再配置を含む各種の目的に使用することができる。ＲＯＭの呼出しを合めコンピュータ・システムの作動のすべてのフェーズの間新しいＲＡＭは元のＲＯＭアドレス空間にマップされたままとなる。
【００８７】
システムが再構成され予約メモリ５０３内の元のＲＯＭアドレス空間の再割り振りが可能となってからＲＯＭアクセス・インタセプタが使用される。システムの何らかのソフトウェアがＲＯＭへのアクセスを試みた場合、ＲＯＭアクセス・インタセプタが試みられたアクセスをインターセプトし、ＲＯＭアクセス・ハンドラを活性化してＲＯＭのコード又はデータにアクセスできるようにしなければならない。ほとんどのＲＯＭのルーチンがソフトウェア割り込みによってアクセスされるものであるから、ＲＯＭのアクセスをインターセプトするもっとも簡単な方法は上述のように割り込みテーブルを変更することである。アプリケーション・ソフトウェアの中には割り込みを使用せずに直接ＲＯＭへのアクセスを試みるものがあるため、ＲＯＭのアドレスに対する照会についてアプリケーション・ソフトウェアを調べ、これらの照会をリダイレクトして、アプリケーション・ソフトウェアがエクステンデッド・メモリ内の新しいＲＯＭイメージにアクセスするようにすることが望ましい。
【００８８】
もちろん、ＲＯＭデータ・テーブルを元の位置に保持しておくという上述の代替手順を使用した場合にはＲＯＭデータ・テーブルにアクセスしようとするＲＯＭアクセスを行うことができ、インターセプト及びリダイレクトは行われない。
【００８９】
ＲＯＭアクセス・ハンドラはエクステンデッド・メモリ内の新しいＲＯＭイメージにアクセスし、ＲＯＭの実行を収納し、ＲＯＭアクセスの完了後にアプリケーション・ソフトウェアの実行を継続できる状態にコンピュータ・システムを復元する方法を提供する。
【００９０】
ＲＯＭアクセス・ハンドラの作動を示す流れ図を第１５図に示す。プロセスはステップ１５０１から始まる。ステップ１５０２においてアクセスされる特定の割り込みサービス・ルーチンに対するＲＯＭアクセス・ハンドラはＣＰＵをリング・ゼロというプロテクト・レベルでプロテクト・モードにする。オプションのステップ１５０３において割り込みのサービスはＲＯＭへ行かずに行われ、制御が呼出しプログラムに戻される。オプションのステップを実行しない場合、プロセスは次のようになる。
【００９１】
ステップ１５０４において必要ならば新しいプロテクト・モード・セレクタを反映するように入力リアル・モード・セグメント・レジスタが調節される。ステップ１５０５において、ＲＯＭが戻るアドレスがプロテクト・モード・スタックに設定される。
ステップ１５０６においてリング・スリー・プロテクト・モードのＣＳ：ＩＰを変更し、再配置されたＲＯＭ入口点をポイントするようにする。ステップ１５０７において該当するＩＯＰＬを設定する。ステップ１５０８において再配置されたＲＯＭ入口点でリング・スリー・プロテクト・モードに移行する。
【００９２】
ステップ１５０９においてＲＯＭは実行可能とされ、障害があればそれを処理する。ステップ１５１０においてＲＯＭは制御をステップ１５０５で設定されたアドレスに戻す。ステップ１５１１において再度プロテクト・モードヘ移行し、ルーチンを終了する。
ステップ１５１２においてリアル・モードのＣＳ：ＩＰを変更し、呼出しプログラムの戻りアドレスをポイントするようにする。必要に応じステップ１５１３において戻りポインタを変更し、リダイレクトされたＲＯＭデータをポイントするようにする。ステップ１５１４において呼出しプログラムの戻りアドレスでリアル・モードに移行する。
【００９３】
マッピングの実施例
本発明のマッピングの実施例も当初ＲＯＭに割り振られていた予約メモリ５０３のアドレス空間を他の用途に再割り振りすることを可能とする。しかしながら、本発明のマッピングの実施例はプロテクト・モードを使用することを必要とするものではなく、したがって、プロテクト・モードの作動をサポートしていない８０８８及び８０８６マイクロプロセッサとの互換性を有し、プロテクト・モード動作をサポートしない。本発明のマッピングの実施例は８０３８６又は８０４８６マイクロプロセッサのプロテクト・モードを必要としないがメモリ空間を再マップする機能は必要である。８０３８６及び８０４８６においてこの機能はＶ８６仮想モードによって提供される。８０８８、８０８６及び８０２８６マイクロプロセッサにおいてこの機能はエクスパンデッド・メモリ仕様（ＥＭＳ）ボード又はその他のメモリ管理ハードウェアのいずれかによって提供される。
【００９４】
本発明の初期化ルーチンのマッピングの実施例を示す流れ図を第１６図に示す。プロセスはステップ１６０１から始まる。ステップ１６０２においてアドレス空間が再割り振りされるＲＯＭを捜し出す。
ステップ１６０３においてＲＯＭコードにアクセスする割り込みハンドラが確認される。ステップ１６０４においてＲＯＭデータ・テーブルのアドレス及び長さが確認される。
ステップ１６０５においてＲＯＭが実行されるＥＭＳのページ・フレームのリアル・モード・アドレス空間が割り振られる。オプションのステップ１６０６においてＲＯＭのアドレスをオーバーレイするために使用するエクステンデッド・メモリが割り振られる。
ＲＯＭのデータ・テーブルはステップ１６０７においてコンベンショナル・メモリにコピーされる。ステップ１６０８において割り込みハンドラのインターセプトが配置される。ステップ１６０９においてＲＯＭデータに対するポインタがコンベンショナル・メモリ内のデータのコピーをポイントするようにリダイレクトされる。オプションでステップ１６１０においてＲＯＭアドレスがエクステンデッド・メモリによってオーバーレイされる。制御はステップ１６１１においてオペレーティング・システムに戻される。
【００９５】
ＲＯＭデータ・テーブルに対する照会がすべて見つからなかった場合、あるいはこれらがすべて見つからないようなことを回避したい場合には上記の手順の変形を行う。その位置に関して公表されている情報を照会するか、あるいはＲＯＭの内容の分析によるかのいずれかによってＲＯＭデータ・テーブルの位置を捜し出してから、元のＲＯＭアドレス空間のこれらが占める部分をこれらに予約されているものとすることができる。ＲＯＭデータ・テーブルは元のＲＯＭアドレス空間の元の位置にマップされる。ＲＯＭデータ・テーブルが占めるスペース以外の予約メモリ内の元のＲＯＭアドレス空間は割り振り解放され、他のリアルモードでの目的に使用できるようになる。割り振りされていない適切なエクステンデッドＲＡＭを見つけだし、元のＲＯＭアドレス空間を割り振り解放済みの予約メモリ５０３に収める必要がある。このＲＡＭを次いで割り振らなければならない・このＲＡＭを予約メモリ５０３内の割り込み解除されたＲＯＭナドレス空間にマップしなければならない。
【００９６】
第１６図の初期化ルーチンが一回完了すると、コンピュータを正常に使用することができ、また当初ＲＯＭが占めていたメモリ空間をＴＳＲ、デバイス・ドライバ及びネットワーク・インターフェース・プログラムの再配置を含む他の用途に割り振ることができる。
マッピングの実施例のＲＯＭアクセス・インタセプタはＲＯＭを照会するすべての命令をインターセプトし実行が混乱するのを防止しなければならない。ほとんどのアプリケーション・ソフトウエアがソフトウェア割り込みによってＲＯＭコードにアクセスしているため割り込みテーブルを修正することによって、．ＲＯＭコードに対する呼出しをインターセプトし、リダイレクトすることが可能である。ＲＯＭデータ・テーブルに対する照会をリダイレクトすることが望ましいので、ソフトウェアを調べ、ＲＯＭデータ・テーブルに対するアクセスの試みを捜し出さなければならず、またＲＯＭデータ・テーブル・ポインタに対する変更を行って、アクセスが適切にリダイレクトされるようにしなければならない。ＲＯＭデータ・テーブルを元の位置に保持しておくという上述の代替手順を使用した場合にはＲＯＭデータ・テーブルにアクセスしようとするＲＯＭアクセスを行うことができ、インターセプト及びリダイレクトは行われない。ＲＯＭアクセス・インタセプタはＲＯＭアクセスの試みをインターセプトした場合には実行をＲＯＭアクセス・ハンドラに渡す。
【００９７】
本発明のＲＯＭアクセス・ハンドラのマッピングの実施例を第１７図の流れ図に示す。流れ図はステップ１７０１から操作を開始する。
ステップ１７０２においてアクセスされる特定の割り込みサービス・ルーチンのためのハンドラに対するプロテクト・モードヘの移行が行われる。オプションのステップ１７０３においてＲＯＭへ進むことなくサービスが行われ、システムは次いで呼出しプログラムに戻る。オプションのステップ１７０３を行わない場合にはプロセスは次のように継続する。
ステップ１７０４においてページ・フレームの現行のマッピングが呼出しプログラムのリアル・モード・スタックにオプションでセーブされる。ステップ１７０５においてＲＯＭが戻るアドレスがリアル・モード・スタックに設定される。ステップ１７０６においてリアル・モードＣＳ：ＩＰを変更し、再配置されたＲＯＭ入口点をポイントする。ステップ１７０７においてＲＯＭがページ・フレームにマップされる。ステップ１７０８において再配置されたＲＯＭ入口点におけるリアル・モードヘの移行が行われる。ＲＯＭはステップ１７０９において実行可能となる。
【００９８】
ステップ１７１０において制御はステップ１７０５で設定されたアドレスに戻される。システムはプロテクト・モードヘ再移行し、ステップ１７１１でルーチンを終了する。ステップ１７１２においてリアル・モードＣＳ：ＩＰを変更し、呼出しプログラムの戻りアドレスをポイントする。
必要に応じステップ１７１３において戻りポインタを修正し、リダイレクトされたＲＯＭデータをポイントするようにする。ページ・フレームの元のマッピングはステップ１７１４において呼出しプログラムのリアル・モード・スタックに格納されているデータからオプションで復元される。ステップ１７１５においてシステムは呼出しプログラムの戻りアドレスでリアル・モードに再移行する。
ＣＰＵのプロテクト・モードを使用した本発明の実施形態は多数の利点をもたらすものであるが、ＲＯＭは通常プロテクト・モードではなくリアル・モード（又はＶ８６モード）で作動している。ＲＯＭにはリアル・モードでアクセスするものとしているシステム・ソフトウェア及びアプリケーション・ソフトウェアとの互換性を維持するため、プロテクト・モードでアクセスされるＲＯＭに対してリアル・モードの作動をシミュレートするステップを行わなければならない。
【００９９】
本発明をセグメント・レジスタのローディング時の試みをトラップする方法を含むように実施することができる。ＣＰＵがプロテクト・モードであるときにセグメント・レジスタをロードしようとする試みをＣＰＵによって検出し、一般保護例外ハンドラ（ｇｅｎｅｒａ１  ｐｒｏｔｅｃｔｉｏｎ  ｅｘｃｅｐｔｉｏｎｈａｎｄｌｅｒ）に対する呼出しを自動的に行う。一般保護例外ハンドラはプロテクト・モードの規則に違反する命令の位置を戻す。
これが発生するのを補うために一般保護例外ハンドラが指定した位置にある命令を調ベデコードする。デコーディンクはすべての命令のオペコード（ｏｐｃｏｄｅ）を含んでいるルックアップ・テーブルにある命令のオペコードを調べることによって行われる。命令の分析によりリアル・モードにおいて命令が意図している効果を判断することができ、かつ意図している効果をプロテクト・モードでエミュレートすることができる。意図している効果がもたらされるので障害をもたらしたコードを適切に動作させることができ、実行がそのコードに渡されそのコードを完了することが可能となる。
【０１００】
本発明が適切に作動できるようにするため、Ｉ／Ｏ命令をトラップしＩ／Ｏ特権レベル（Ｉ／Ｏ  Ｐｒｉｖｅｌｅｇｅ  Ｌｅｖｅ１）ＩＯＰＬの特権レベルを高くできるので（低い特権レベル番号で表される）ＩＯＰＬセンシティブＩ／Ｏ命令を実行しようという試みは一般保護例外障害をもたらす。発生した障害を処理し、これが本発明の動作と衝突しないようにすることができる。
いくつかのマイクロプロセッサの割り込みフラグは注意をほとんど必要としない態様で作動するが、Ｉ／Ｏ命令をトラップする場合などのようにＩ／Ｏ特権が拒否された場合、割り込みフラグの動作が異なるものとなることがある。割り込みフラグに関連したある種のマイクロプロセッサの命令はＩ／Ｏレベルに敏感である（ＩＯＰ−ｓｅｎｓｉｔｉｖｅ）。８０２８６又は８０３８６マイクロプロセッサ・ベースのシステムにおいて、Ｉ／Ｏ特権が拒否された場合に割り込み可能フラグ・クリア（ｃｌｅａｒ  ｉｎｔｅｒｒｕｐｔ  ｅｎａｂｌｅ  ｆ１ａｇ）ＣＬＩ命令又は割り込み可能フラグ設定（ｓｅｔ  ｉｎｔｅｒｒｕｐｔ  ｅｎａｂ１ｅ  ｆｌａｇ）ＳＴＩ命令の実行を試みると一般保護例外障害が生じる。
【０１０１】
本発明は割り込みフラグを変更するソフトウェアによる試みの監視、ならびに適切な割り込みフラグの挙動のエミュレーションの問題を解決する方法も含んでいる。これらの問題はプロテクト・モードにおけるＰＯＰＦ及び割り込み戻り（ｉｍｔｅｒｒｕｐｔ  ｒｅｔｕｒｎ）ＩＲＥＴ命令の不適切な動作によって生じる。ＰＯＰＦ命令は最上位のワードをスタックから取り出し、その内容をＣＰＵのフラグ・レジスタに入れるものであると考えられる。ＩＲＥＴ命令は上位８ワードをスタックから取り出し、そのワードの内容をＣＰＵフラグ・レジスタに入れる。しかしながら、プロテクト・モードではＰＯＰＦ命令もＩＲＥＴ命令も割り込みフラグを変更しないし、また一般保護例外も発生しない。それ故、コンピュータがプロテクト・モードのときに割り込みフラグのリアル・モードでの挙動をエミュレートするために一般保護例外ハンドラを使用すると完全なエミュレーションは行われず、適正な作動が行われなくなる。
【０１０２】
従来、ＰＯＰＦ命令をトラップできなかったため、満足できるリアル・モードのエミュレーションを提供できたものは誰もいない。「ＤＯＳ  Ｐｒｏｔｅｃｔｅｄ  Ｍｏｄｅ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，Ｖｅｒｓｉｏｎ  １．０」には次のように記載されている。「．．．クライアントはＩＲＥＴ（Ｄ）又はＰＯＰＦを使用して、割り込みフラグを変更できないが、これはこれらの命令が物理的割り込みフラグにアクセスするものであり、クライアントの特権レベルのためＣＰＵによって無視されるからである。」
【０１０３】
本発明の特徴の１つはＰＯＰＦ及びＩＲＥＴ命令に一般保護例外を発生させることである。本発明は一般保護例外ハンドラのみに依存する代わりに、代替方法を使用してＰＯＰＦ命令又はＩＲＥＴ命令をトラップすることによってプロテクト・モード時にリアル・モードの挙動の適切なエミュレーションを提供する。
ＰＯＰＦ命令又はＩＲＥＴ命令が普通、プログラム内のコードの予測可能なシーケンスの一部として使用されているので、本発明はこの規則性を利用してＰＯＰＦ命令をトラップする。
【０１０４】
普通は、プログラムはＰＵＳＨＦ命令を使用してフラグ・レジスタの内容をセーブし、ＣＬＩ又はＳＴＩ命令を使用して割り込みをロックし、割り込みがロックされている間に各種のコードを実行し、その後、ＰＯＰＦ命令を使用してフラグ・レジスタの内容を復元している。
ＰＯＰＦ命令をトラップするためにＣＬＩ又はＳＴＩ命令の実行によってもたらされる一般保護例外が生じる場合には、常にスタックの限界を現行のスタック・ポインタと等しく設定する。このようなスタックの限界を設けた場合、ＰＯＰＦ又はＩＲＥＴを実行するとスタックの限界を越え、これによって、一般保護例外が発生する。
【０１０５】
本発明は第５図に示すようにマップされたメモリ・アドレスを有するコンピュータ・システムに限定されるものではない。たとえば、ＲＯＭ用に予約されたメモリ・アドレスが他の位置にあることがある。たとえば、ＰＳ／２などのオペレーティングシステムの場合、ＲＯＭ用のメモリ・アドレスは０Ｅ０００などの位置に予約されている。
本発明はマッピング方法にプロテクト・モードを利用しているが、これは必須ではない。マッピング方法のためにプロテクト・モードとすることを必要としない他のメモリ管理システムを使用することができる。
したがって、パフォーマンスを大幅に劣化させることがなく、またＣＰＵ、ＲＯＭ又はアプリケーションのいずれにも特有のものではない態様で容易にアクセスできるメモリをより多く利用可能にする方法が提供される。
【図面の簡単な説明】
【図１】第１図  典型的なコンピュータ・システムの構造を示すブロック図。
【図２】第２図  コンピュータ・システムの可能なメモリ編成を示すメモリ・マップ。
【図３】第３図  あるマイクロプロセッサのリアル・モードで使用されるアドレッシング方法を示す図。
【図４】第４図  あるマイクロプロセッサのプロテクト・モードで使用されるアドレッシング方法を示す図。
【図５】第５図  典型的なコンピュータ・システムのメモリ編成を示すメモリ・マップ。
【図６】第６図  従来技術の第１の方法を示すメモリ・マップ。
【図７】第７図  従来技術の第２の方法を示すメモリ・マップ。
【図８】第８図  従来技術の第４の方法を示すメモリ・マップ。
【図９】第９図  従来技術の第３の方法を示すメモリ・マップ。
【図１０】第１０図  従来技術の第５の方法を使用する典型的なコンピュータ・システムの構造を示すブロック図。
【図１１】第１１図  従来技術の第５の方法を使用するコンピュータ・システムの可能なメモリ編成を示すメモリ・マップ。
【図１２】第１２図  従来技術の第５の方法を示すメモリ・マップ。
【図１３】第１３図  本発明のプロテクト・モード実施例とマッピング実施例を示すメモリ・マップ。
【図１４】第１４図  本発明のプロテクト・モード実施例の初期設定ルーチンを示す流れ図。
【図１５】第１５図  本発明のプロテクト・モード実施例の初期設定ハンドラを示す流れ図。
【図１６】第１６図  本発明の初期設定ルーチンのマッピング実施例を示す流れ図。
【図１７】第１７図  本発明の初期設定ハンドラのマッピング実施例を示す流れ図。
【図１】
0003571667.tif 000002
【図２】
0003571667.tif 000003
【図３】
0003571667.tif 000004
【図４】
0003571667.tif 000005
【図５】
0003571667.tif 000006
【図６】
0003571667.tif 000007
【図７】
0003571667.tif 000008
【図８】
0003571667.tif 000009
【図９】
0003571667.tif 000010
【図１０】
0003571667.tif 000011
【図１１】
0003571667.tif 000012
【図１２】
0003571667.tif 000013
【図１３】
0003571667.tif 000014
【図１４】
0003571667.tif 000015
【図１５】
0003571667.tif 000016
【図１６】
0003571667.tif 000017
【図１７】
0003571667.tif 000018