(57)【要約】【課題】　ソフトウェアをエミュレートすると同時に、非同期割込みを処理する方法を提供する。【解決手段】　ソフトウェアをエミュレートしている間に非同期割込み（１１０）を処理する方法であって、前記非同期割込みが到来すると、該非同期割込みを、それが前記ソフトウェアの実行に割込むことなく保留中のままであるように中断させること（３１２）と、前記非同期割込みの引渡し(delivery)を命令コード（１２０）と同期させること（３１４）とを含む。【選択図】図４
2004054948.tif 000002
【特許請求の範囲】
【請求項１】
　ソフトウェアをエミュレートしている間に非同期割込み（１１０）を処理する方法であって、
　前記非同期割込みが到来すると、該非同期割込みを、それが前記ソフトウェアの実行に割込むことなく保留中のままであるように中断させること（３１２）と、
　前記非同期割込みの引渡し(delivery)を命令コード（１２０）と同期させること（３１４）と
　を含む方法。
【請求項２】
　前記非同期割込み（１１０）の引渡しを、前記命令コード（１２０）が実行される時に例外（２７２）を生成することにより、該命令コードと同期させる
　請求項１記載の方法。
【請求項３】
　前記非同期割込み（１１０）の引渡しを前記命令コード（１２０）と同期させることは、トラップオン割込み命令（１２０）に達した時に例外（２７２）を生成することを含む
　請求項１記載の方法。
【請求項４】
　前記非同期割込み（１１０）の引渡しを前記命令コード（１２０）と同期させることは、トラップオン割込み制御レジスタ（２８０）がアクセスされ（２８４）、かつ前記非同期割込みが保留中である時に、例外（３００）を生成することを含む
　請求項１記載の方法。
【請求項５】
　前記ソフトウェアのオリジナル命令（５０）をネイティブ命令（５２）と置換することをさらに含んでおり、該オリジナル命令のうちの少なくとも１つ（６０）を、複数のネイティブ命令（７４）と置換する
　請求項１記載の方法。
【請求項６】
　前記ネイティブ命令（５２）の始まりの前に、非同期割込みを中断する中断命令を追加し、一方、前記非同期割込みの引渡しを許可する命令（１２０）に達するまで前記ネイティブ命令が実行され続けること（３１２）をさらに含む
　請求項５記載の方法。
【請求項７】
　前記非同期割込みの引渡しを許可する前記命令（１２０）に達すると、例外（例えば２７２）を生成することにより、前記非同期割込みを引渡すことをさらに含む
　請求項６記載の方法。
【請求項８】
　割込み処理装置（１３０）であって、
　入力と出力とを有し、該入力に割込み信号（１４０）が接続されている割込みラッチ（１５０）と、
　中断マスクレジスタ（１７２）と、
　第１のＡＮＤゲート（２２０）であって、少なくとも２つの入力と出力とを有しており、該出力は標準割込み信号（２３０）を生成し、該２つの入力のうちの第１の入力は前記割込みラッチ（１５０）出力に接続され、前記中断マスクレジスタ（１７２）は該２つの入力のうちの第２の入力に接続されている、第１のＡＮＤゲート（２２０）と、
　第２のＡＮＤゲート（２５４）であって、少なくとも反転入力と非反転入力と出力とを有しており、該出力は例外トリガ信号（２５６）を生成し、該非反転入力は前記割込みラッチ（１５０）出力に接続され、該反転入力は前記第１のＡＮＤゲート（２２０）出力に接続されている、第２のＡＮＤゲート（２５４）と
　を具備する割込み処理装置。
【請求項９】
　エミュレートされたソフトウェアを実行するプロセッサであって、
　割込み中断サブ回路を有する割込み処理回路（１３０）と、
　該割込み中断サブ回路によって割込みが中断された時で、かつ、中断された割込みの処理を許可する命令（１２０）が実行された時に、例外（たとえば、２６４、３００）を生成する例外発生器（たとえば、２６３、２８０）と
　を具備するプロセッサ。
【請求項１０】
　割込み処理装置であって、
　非同期割込みを中断する手段（たとえば、１７２、２２０）と、
　該非同期割込みを表す同期例外を生成する手段（たとえば、２６３、２８０）と
　を具備する割込み処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
　本発明は、概してエミュレータに関し、特にエミュレートされた割込みを同期化することに関する。
【背景技術】
【０００２】
　今日広く利用可能なコンピュータは、多くの異なるアーキテクチャを有し、アーキテクチャの各々がそれら自体の命令セットを有する。
　これらのアーキテクチャは、マイクロプロセッサが新たに生成される度にアップグレードされ変更され、概して追加の処理能力を提供する。
　不都合なことに、コンピュータハードウェアがアップグレードまたは置換されると、莫大な費用および労力で作成された既存のソフトウェアが陳腐化する可能性がある。
【０００３】
　ソフトウェアは、以前の命令セットアーキテクチャに対して書かれているため、概して、新たなコンピュータハードウェアが理解しない命令を含む。
　コンピュータハードウェアが置換される時はいつでも、結果としてソフトウェアを置換することが必要であることは、ユーザに対し資本費用においても訓練費用においても非常にコストがかかる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
　次第に実用的になってきている１つの解決法は、新たなアーキテクチャに対して以前のアーキテクチャをエミュレートし、エミュレータによって既存のソフトウェアを実行することである。
　命令は、実行中にソフトウェアから取得されると、新たなアーキテクチャにおいてエミュレータがネイティブに実行するために置換または変更される。
【０００５】
　不都合なことに、割込みを正しく処理すると同時にコンピュータ上のソフトウェアを非ネイティブな命令セットでエミュレートすることは困難である。
　それは、ソフトウェアからの命令が、通常ネイティブな命令により１対１で置換されないためである。
　このため、単一命令が、一続きのいくつかの新たな命令によって置換される可能性がある。
【０００６】
　一続きの新たな命令の実行が割込みによって割込まれる場合に、エミュレートされたアーキテクチャは既知の状態でない可能性がある。
　割込みは、タイマーチックまたは周辺装置トランザクション通知等、非同期例外イベントである。
　これらのイベントは、エミュレートされる命令セットまたは仮想マシンに対してネイティブな割込み・キャッチ（interrupt-catching）メカニズムによってサービスされる。
【０００７】
　この割込み・キャッチメカニズムは、仮想マシンがネイティブな命令境界で発生する状態にあるように見えることを予期する。
　しかしながら、エミュレートされた一続きの置換命令は、オリジナル命令境界のうちの１つに対応しないポイントで割込みされる場合、仮想マシンを予期された状態にしない可能性がある。
【課題を解決するための手段】
【０００８】
　ソフトウェアをエミュレートすると同時に、非同期割込みを、ソフトウェアの実行を割込むことなしに保留中のままであるように中断することにより、処理する。
　非同期割込みの引渡しは、命令コードと同期化される。
【発明の効果】
【０００９】
　本発明によれば、ソフトウェアをエミュレートすると同時に、非同期割込みを処理する方法を提供することができる。
【発明を実施するための最良の形態】
【００１０】
　本発明の例示的な実施形態を、添付図面に示す。
　割込みを同期化するために使用することができる通常のコンピュータシステムを、図１のブロック図に示す。
　コンピュータシステム１０は、後述するように、非同期割込みの同期化のためのサポートを含む中央処理装置（ＣＰＵ）１２を含む。
【００１１】
　ＣＰＵ１２は、システムバス１４により、リードオンリメモリ（ＲＯＭ）１６、ランダムアクセスメモリ（ＲＡＭ）２０、入出力（Ｉ／Ｏ）アダプタ２２、通信アダプタ２４、ユーザインタフェースアダプタ２６、およびディスプレイアダプタ３０等の装置に接続される。
　ハードドライブ３２等のデータ記憶装置は、Ｉ／Ｏアダプタ２２を介してコンピュータシステム１０に接続される。
【００１２】
　動作時、コンピュータシステム１０のＣＰＵ１２は、ＲＯＭ１６、ハードドライブ３２、およびＲＡＭ２０に、バイナリフォーマットで格納された命令を実行し、それによってコンピュータシステム１０が、ＲＡＭ２０に格納されたデータを操作して有用な機能を実行するようにする。
　コンピュータシステム１０は、通信アダプタ２４に接続されたローカルネットワークまたはワイドエリアネットワーク（たとえば、３４）を通して他の電子機器と通信することができる。
【００１３】
　ユーザ入力は、ユーザインタフェースアダプタ２６を通してコンピュータシステム１０に接続された、キーボード３６およびポインティングデバイス４０等の入力装置を通して取得される。
　出力は、ディスプレイアダプタ３０に接続されたモニタ４２等の表示装置に表示される。
　割込みの同期化は、かかるコンピュータシステム１０かまたは他の任意の適当に構成された処理システムで実行することができる。
【００１４】
　割込みの同期化は、種々のコンピュータ処理環境において、特に、ソフトウェアエミュレーション、翻訳、最適化およびプログラムコードが変換される他の場合の間に、ならびに、ネスト化された割込みの管理を最適化するのにより従来的な割込み処理タスクの間に適用可能である。
　コンピュータシステム１０のプログラムコードを、エミュレータによって実行し、翻訳し、または最適化する等によって変換する場合、オリジナル命令はネイティブ命令によって置換される。
【００１５】
　オリジナル命令セットに対して書かれたコードは、ターゲットコンピュータシステムまたはエミュレーションホストに対してネイティブである新たな命令によって置換または追加される。
　コード変換の重要な部分は、オリジナルコードの可観測性特性を保持することである。
【００１６】
　この場合、システムの可観測性は、プログラム実行中に所定の同期ポイントで「観測する」かまたは他の方法で確定することができる所定の既知の状態にあるシステムの特性として定義される。
　可観測性は、例外イベント（たとえば、割込み）が処理された後にシステムのその状態を復元するための実質的な前提条件である。
【００１７】
　これはまた時に、文字通り、システムが「正確な例外」をサポートすることも言う。
　言い換えれば、例外イベントの場合、処理環境の正確な状態を、例外イベントのハンドラに引渡さなければならず、それによってハンドラは、たとえばそのタスクを完了すると状態を復元することができる。
【００１８】
　コード、例外および割込みを変換する場合に処理される例外イベントには主に２つのタイプがある。
　例外は、同期例外イベントであり、メモリ管理障害および浮動小数点例外等の命令が実行される場合に内部的に生成される。
【００１９】
　翻訳エミュレータのコンテキストにおける例外を、多くの異なる方法で、たとえば、エミュレートされた命令セットまたは仮想マシンにおいて例外を生成することができる、任意のオリジナル命令に対応する例外チェックコードを生成することにより、管理することができる。
　たとえば、メモリ動作の翻訳は、エミュレートされた状態への変更をコミットする前に例外があるかチェックするためのコードをいくつか含んでよい。
【００２０】
　対照的に、割込みは、タイマチックまたは周辺装置トランザクション通知等の非同期例外イベントであり、外部的に生成される。
　非同期イベントは、予期されない時にプログラム実行に割込む。
　割込みは、特にネイティブな割込み処理に対して使用される同じネイティブな割込み・キャッチメカニズムによってサービスされる場合（これは、より優れたパフォーマンスおよび割込み応答時間を得るために望ましい）、翻訳エミュレータのコンテキストにおける例外よりも処理することの方がずっと困難である。
【００２１】
　ネイティブな割込み・キャッチメカニズムは、通常、しばしばレジスタにアクセスする事前割当てされた割込み処理機能とプロセッサの他の状態依存態様とを呼出す。
　翻訳エミュレータの場合、ネイティブな割込みには、エミュレートされた環境に割当てられる可能性があり、したがって対応するエミュレートされた割込み処理機能によって処理される必要がある。
【００２２】
　なお、保留中である従来のようにマスクされた割込みは、割込みサービスルーチンによってマスクが解除されサービスされるまで保留中のままである。
　従来のようにマスクされた割込みを同期ポイントにおいてマスク解除することには、いくつかの不都合がある。
【００２３】
　第１の不都合は、マスク解除する割込みは概して特権動作であり、翻訳されたコード／仮想マシン環境（もしくは翻訳されたコードの少なくとも一部）はユーザレベルで実行している可能性がある、ということである。
　割込みがいつでも発生する可能性があり実際に発生するため、従来のようにマスクされた割込みは、システムが部分的にでも特権モードではなくユーザモードで実行している場合、所望の同期ポイントではマスク解除可能とならない。
【００２４】
　従来のようにマスクされた割込みを同期ポイントにおいてマスク解除しようと試みる際の第２の不都合は、マスク解除が通常即座にアクティブとならない、ということである。
　むしろ、マスク解除は概して、マスク解除動作が発行された（概して、制御レジスタにおける格納）後数サイクルかかる。
　さらに、結果としての発行された割込みは、やはり、割込みをマスク解除した命令の後に、命令のパイプラインへの入力の完了を可能にするであろう。
【００２５】
　これは、非同期のエミュレートされた割込みを同期化する場合に行われることだが、割込みが例外に変換される（少なくともパイプラインの観点から）場合には当てはまらない。
　それは、例外の場合、例外を引起す命令（この場合、生成された例外であり、本明細書では「トラップオン割込み」例外と呼ぶ）の後にパイプラインに入力するすべての命令が無効にされるためである。
【００２６】
　非同期割込みにとって処理システムが一貫した既知の状態であることを確実にするために、概して、エミュレーションを大幅に低速化することができる非常に保守的な戦略が採用される。
　割込みの同期化は、処理システムが正当なチェックポイントまたは既知の状態にあることが保証される場合、非同期イベントをプログラムの所定ポイントで同期イベントに変えることにより、その非同期イベントを処理する問題を適切に解決する。
　それにより、すべての技法が、ジャストインタイムコンパイルおよび動的最適化を処理し、同時にエミュレートされる命令セットまたは仮想マシンにおいて割込み処理のオリジナルのセマンティクスを保存することが可能となる。
【００２７】
　本明細書で開示するような命令の同期化は、割込み引渡しポイント管理がエラーを防止することができるかまたは割込み処理を簡略化することができる場合はいつでも、種々の処理環境において有益であり、ソフトウェアエミュレーションまたは本明細書で説明する他の例示的な処理環境には限定されない。
　非同期割込みの同期化を使用して、プロセッサでネイティブに実行しているオリジナルコードにおける割込み引渡しおよび処理を管理することも可能である。
　したがって、本明細書では、割込みの同期化を、ソフトウェアエミュレーション環境に適用するものとして説明する。
【００２８】
　１つの例示的な実施形態では、非同期割込みの同期化は、開示する内容が引用をもってすべて本明細書内に包含されたものとする、２００１年８月８日に出願された「Dynamic Execution Layer Interface for Explicitly or Transparently Executing Application or System Binaries」と題された米国特許出願第０９／９２４，２６０号に記載されているものなどの、動的実行層の一部として実行するエミュレータによって実行される。
　動的実行層は、オリジナル命令コードをインタセプトして読み出し、それらをネイティブ命令に置換し、ネイティブ命令を最適化し、ネイティブ命令をキャッシュに格納し、キャッシュからの翻訳される命令の実行を制御する等の、レガシコンピュータプログラムの制御等、エミュレータに対しいくつかのサービスを提供する。
【００２９】
　上に引用した特許出願書類において述べられている動的実行層は、プログラムを変換するためにコンピュータプログラムとコンピュータハードウェアとの間で実行するソフトウェア層である。
　動的実行層は、プログラムの実行可能イメージから、ハードウェアによって実行される前の命令をインタセプトして、それらを翻訳し、最適化し、見つからないハードウェアのために仮想サポートを提供し、または多数の望ましいタスクを行う等、それらを変換する。
【００３０】
　また、動的実行層は、変換されたコードセグメントをキャッシュすることにより、繰返し実行されるコードセグメントの実行速度を向上させることができる。
【００３１】
　ソフトウェアエミュレーションおよび翻訳中に割込みの引渡しポイントを管理することは、特にエミュレーションシステムがオペレーティングシステム（ＯＳ）およびデバイスドライバのようなシステムコードもエミュレートする場合に、非常に重要となる可能性がある。
【００３２】
　例示的なエミュレータは、オリジナルプロセッサのオリジナル命令セットに対して設計された命令コードのストリームを読み出し、それらを、置換プロセッサの第２の命令セットに対してネイティブな命令コードと置換し、それにより置換プロセッサにおいてオリジナル命令セットをエミュレートする。
　このため、本明細書における「オリジナル命令」という用語は、オリジナル命令セット下でオリジナルプロセッサに対して書かれた命令コードを言い、本明細書における「ネイティブ命令」という用語は、置換プロセッサに対して書かれた置換命令コードを言う。
　ネイティブ命令は、オリジナル命令の翻訳である。
【００３３】
　ここで図２を参照し、エミュレーションプロセスについて説明する。
　エミュレータは、一続きのオリジナル命令５０を読み出し、それらを一続きのネイティブ命令５２と置換する。
　オリジナル命令Ａ〜Ｆ（５４、５６、６０、６２、６４および６６）は、置換プロセッサに対してネイティブにオリジナル動作を実行するネイティブ命令Ａ'〜Ｆ'（７０、７２、７４、７６、８０および８２）と置換される。
【００３４】
　なお、オリジナル命令によっては、Ｂ５６をＢ'７２におよびＤ６２をＤ'７６に等、単一命令と置換される。
　しかしながら、オリジナル命令には、置換Ａ'７０を構成するいくつかのネイティブ命令８４、８６および９０と置換されるＡ５４等、いくつかのネイティブ命令と置換されなければならないものもある。
【００３５】
　このように、エミュレーション中、命令コードが置換されるかまたは変更される際、新たなコードの命令境界が、オリジナルコードの命令境界に対応しない場合がある。
　これによって、エミュレートされたプロセッサが未知の状態になることにより割込みハンドラに対して問題がもたらされる可能性がある。
　ここで図３を参照すると、命令Ｃ６０の実行中に割込み９２が生成される場合、割込みキャッチメカニズムは、命令Ｃ６０の終り９４において割込み９２をネイティブプロセッサに引渡す。
【００３６】
　オリジナル命令Ｃ６０が単一のネイティブ命令に置換された場合、ネイティブ命令ストリームにおいて、割込みを問題無しに処理することができる。
　割込みハンドラ自体は、エミュレートされたプログラムとして書込まれる可能性が高く、その標準動作の一部として割込まれた（エミュレートされた）プログラムの状態を問合せることが多い。
　厳密に言えば、割込みハンドラに誤りのある状態を渡すことは、エミュレートされた環境の実行モデルの違反となる。
【００３７】
　エミュレートされた割込みハンドラを、ネイティブ割込み処理システムによって種々の方法で呼び出すことができる。
　たとえば、多くのネイティブ割込み処理システムは、プログラム可能割込みベクトルを用いて割込み処理機能を再マップする能力を有する。
【００３８】
　その場合、エミュレートされた割込みハンドラにおける翻訳されたコードが、ネイティブ割込みシステムが割込みを受け取る時に直接呼出されるように、仮想マシンは、エミュレートされた割込みハンドラをネイティブ割込みベクトルに割り当てることができる。（また、ハンドラに対して翻訳されたコードが、割込みセマンティックにしたがってエミュレートされたマシン状態を変更するタスクで開始する際に、コードの一部を含むことも可能である。たとえば、一定の制御レジスタに一定の値を保存するか、または一定の他の値を一定のエミュレートされたマシンレジスタにロードする。）
【００３９】
　代替的に、ネイティブ割込みハンドラが、割込みを処理するかまたは割込みをエミュレートされた環境に渡すように提供されてよい。
　これらの場合のいずれにおいても、割込みは、既知の状態を期待してエミュレートされたプログラムの状態を問合せてよい。
【００４０】
　図３の実施例では、オリジナル命令Ｃ６０は、置換動作Ｃ'７４を形成する一続きの５つのネイティブ命令１００、１０２、１０４、１０６および１０８によって置換される。
　たとえば、オリジナル命令Ｃ６０は、２つの数を加算する単一命令であってよく、その命令は、命令セマンティクス、バス幅、バイトエンディアン順、レジスタ編成等のハードウェアの相違を処理するために、エミュレーション中に一続きの５つの命令１００、１０２、１０４、１０６および１０８によって置換されなければならない。
【００４１】
　この実施例では、割込みハンドラは、レジスタが、割込みが発生する前に実行された、エミュレートされた命令によって生成された正しい値を含む等、所与の状態のプロセッサに渡されるよう期待する。
　しかしながら、Ｃ'７４を形成する５つの割込み１００、１０２、１０４、１０６および１０８の一続きの置換に対し、第３の置換命令１０４中に割込みがなされた場合、ネイティブ割込みキャッチメカニズムは、第３の置換命令１０４の終り１１２において割込み１１０を引渡す。
【００４２】
　エミュレートされたプロセッサは、期待された値ではない、エミュレートされたレジスタに格納された一時的な値を有する等、未知の状態にされる可能性がある。
　未知のプロセッサ状態により、致命的なエラーと誤ったプログラムカウンタでのプログラム実行再開等のような他の問題とがもたらされる可能性がある。
　エミュレートされたシステムが既知の状態にある、正しい割込み引渡しポイントは、一続きの置換Ｃ'７４を形成する最後のネイティブ命令の終り１１４であり、それは、オリジナル命令Ｃ６０の終り９４に対応する。
　このように、非同期割込みを少なくともオリジナル命令境界に対応するネイティブコードのポイントまで遅延させることにより、エミュレートされた割込みハンドラに対し、ネイティブ処理システムが期待された状態にあることが保証される。
【００４３】
　割込みの同期化により、システムは、プロセッサが既知の状態にある所望のコードロケーションまで割込み処理を遅延させる。
　標準ネイティブ割込み制御メカニズムを拡張することにより、ネイティブ割込みコントローラに対し、いくつかの割込みをキャッチされた時に選択的に中断させるための機能が追加される。
【００４４】
　下により詳細に説明するように、拡張には、割込みマスクレジスタと論理積がとられる特別な制御レジスタ（「中断マスク」レジスタ）を追加することにより、標準割込み信号とプロセッサコアに対する同期化される割込み信号（本明細書では、例外トリガ信号と呼ぶ）とをともに生成することが含まれる。
　適当な引渡しポイントまで非同期割込みを中断させるために中断マスクレジスタに値を格納する中断命令がネイティブコードに追加される。
【００４５】
　例外トリガ信号は、コードにおいて非同期割込みの引渡しを同期例外として許可する命令に達すると、例外の生成をトリガする。
　割込み許可命令のいくつかの例示的な実施形態を以下に説明する。
　第１の例示的な実施形態は、ユーザレベル（非特権的）命令、すなわち「トラップオン割込み（trap-on-interrupt）」（ＴＯＩ）を命令セットに追加することを含む。（なお、ＴＯＩ命令に対し代替的にいかなる望ましい名前を与えてもよい。）
【００４６】
　ＴＯＩ命令は、保留中の割込みのリストをチェックする。
　所与のタイプの保留中の割込み（この場合、すべてのマスク可能割込み）が存在する場合、ＴＯＩ命令は特別のトラップを引渡し、存在しない場合、ノーオペレーション（ｎｏ−ｏｐ）のように振舞う。
　ＴＯＩ命令がコミット段階に達すると、ＴＯＩ命令自体に同期化された例外が生成される。
【００４７】
　第２の例示的な実施形態は、トラップオン割込み制御レジスタを追加することを含む。
　この実施形態では、割込み許可命令は、トラップオン割込み制御レジスタ（ＴＯＩ＿ＣＲ）にアクセスする命令である。
　中断された割込みが待機している間、命令がＴＯＩ＿ＣＲにアクセスすると、ＴＯＩ＿ＣＲは、不当なメモリにアクセスしているかのように、メモリ例外等の例外を生成し、セグメンテーション違反（ＳＩＧＳＥＧＶ）をもたらす。
【００４８】
　例外が実行に割込みを行うと、例外ハンドラは、システム依存の方法で適当な割込みハンドラを呼び出す。
　たとえば、上述したように、例外ハンドラは、中断された割込みのための割込みベクトルを有する例外トリガ信号を読み出し、その割込みベクトルに対応する割込みハンドラを呼び出してよい。
【００４９】
　すべての割込みが、同期化するために潜在的に中断される可能性があるが、本明細書で論考する例示的な実施形態は、マスク可能な割込みのみを同期化する。
【００５０】
　このため、中断された割込みは、割込み許可命令に同期化される例外を生成することによって同期化される。
　中断された割込みは実際に例外に変換されるため、コミット段階に先立つ状態におけるすべての命令が、パイプラインを空にする（パイプライの命令を実行する）のではなく無効にされる。
【００５１】
　ここで図４を参照し、中断マスクレジスタと非同期割込みを同期化する割込み許可命令との使用を説明する。
　第１に、割込みは、ネイティブコード５２に入る前に中断される。
　これを、たとえば対応する中断マスク制御レジスタへの格納により、ネイティブシステムの割込みがエミュレートされたコードにマップされるべきかにしたがって、中断マスクに対する値を計算し設定することによって行ってよい。
　これは、たとえば、特権モードで実行中に初期化時に仮想マシンランタイム環境によって行われる。
　これは、特権動作であるが、通常、ネイティブコード５２に入る前に一度だけ実行される。
【００５２】
　そして、割込みが引渡し可能となるネイティブコード５２のすべてのポイントにおいて、割込み許可命令が追加される（ＴＯＩ命令かまたはＴＯＩ＿ＣＲにアクセスする命令）。
　割込み許可命令は、割込みが安全に処理され得る各ポイントにおいてネイティブコード５２に追加され、それにより、保留中の割込みが、これらのポイントのみにおいてプログラム実行に割込むことが可能となる。
　たとえば、ネイティブ動作Ｃ'７４の実行中に非同期割込みが引渡されないようにするために、ネイティブ命令シーケンス５２のＣ'７４の最後の命令１０８後に、割込み許可命令１２０が追加される。
　このように、割込み１１０の引渡しが、割込み許可命令１２０における正しい引渡しポイント１２２まで中断され、非同期割込み１１０が有効に同期化される。
【００５３】
　このため、割込みを同期化する割込み許可命令は、それらに対してプロセッサが既知の状態にあるように見えることを保証することにより、割込みハンドラプログラミングを大幅に簡略化する。
　また、ソフトウェアエミュレーション中に非同期割込みを同期化することにより、エミュレートされたコードの最適化および監視も容易になる。
　オリジナル命令境界に対応する置換コードのすべてのポイントにおいて翻訳エミュレータまたは他のシステムによるか、または自動的に他の任意の所望のアルゴリズムにしたがって等、割込みを同期化する割込み許可命令を追加してよい。
【００５４】
　ここで図５を参照して、割込みを中断させるサブ回路１３１を有する割込みコントローラ１３０の例示的な実施態様を説明する。
　しかしながら、非同期命令を同期化するシステムは、図５に示す例示的な回路に限定されず、要求に応じて他のいかなる適当な回路、ファームウェアまたはソフトウェアで実施してもよい、ということを留意することが重要である。
【００５５】
　図５に示す例示的な割込みコントローラ１３０は、４つの割込みラインのみを含むように簡略化されているが、要求に応じて拡張することができる。
　また、図５に示す例示的な割込みコントローラ１３０はいかなるタイプの中断された割込みの引渡しも可能とするが、単一タイプの割込みの引渡しを選択的に可能にするように容易に適合させることができる。
【００５６】
　割込み信号は、４つの割込みライン１３２、１３４、１３６および１４０に到着する。
　割込み信号は、４つの割込みライン１３２、１３４、１３６および１４０にそれぞれ接続された４つの割込みラッチ１４２、１４４、１４６および１５０においてラッチされる。
　割込みをマスクすることにより、４つのＡＮＤゲート１６２、１６４、１６６および１７０においてラッチされた割込み信号と論理積がとられる割込みマスク（ＩＮＴＭＡＳＫ）１５２、１５４、１５６および１６０を使用して、いずれの割込み信号がプロセッサコアに引き渡されるかを判断してよい。
【００５７】
　すなわち、割込みラッチ（たとえば、１５０）の出力と対応する割込みマスク（たとえば、１５２）の出力とが、ＡＮＤゲート１７０の入力に接続される。
　これらの割込み信号を、本明細書では、「非マスク割込み」と呼び、それらが中断マスクによってマスクされていなかったことを示す。
【００５８】
　結果としてのラッチされた非マスク割込み信号を、中断マスク（ＳＭＡＳＫ）１７２、１７４、１７６および１８０によって中断することができる。
　中断マスク１７２、１７４、１７６および１８０の出力における中断マスク信号は、４つのさらなるＡＮＤゲート２１２、２１４、２１６および２２０において、４つのＡＮＤゲート１６２、１６４、１６６および１７０からの非マスク割込み信号と結合され、４つのマスク割込み２２２、２２４、２２６および２３０を形成する。
　これらのマスク割込み２２２、２２４、２２６および２３０を、優先待ち行列２３２に供給してよく、その後、標準割込み信号２３４として割込みが中断されてよいプロセッサコアに引渡すことができる。
【００５９】
　４つのＡＮＤゲート１６２、１６４、１６６および１７０の出力におけるラッチされた非マスク割込み信号２４０、２４２、２４４および２４６もまた、非中断標準割込み信号２５２を生成する他の優先待ち行列２５０に供給してよい。
　第１の優先待ち行列２３２からの標準割込み信号２３４がＡＮＤゲート２５４の反転入力に接続され、非中断標準割込み信号２５２がＡＮＤゲート２５４の非反転入力に接続され、それによって、トラップオン割込み（ＴＯＩ）割込み信号ＴＯＩ＿ＩＮＴ２５６、すなわちプロセッサコアに提供される同期化される割込み信号が生成される。
【００６０】
　動作中、特権モード動作により、ＩＮＴＭＡＳＫおよびＳＭＡＳＫレジスタ１５２、１５４、１５６および１６０と１７２、１７４、１７６および１８０とに値が書き込まれる。
　ＩＮＴＭＡＳＫ１５２、１５４、１５６および１６０は、システムの標準動作の一部として書き込まれる。
　ＳＭＡＳＫレジスタ１７２、１７４、１７６および１８０は、翻訳されたコードに入る前にエミュレータスーパバイザによって書き込まれる。
　割込み信号（たとえば、１４０）は、生成されると、対応する割込みラッチ（たとえば、１５０）に格納される。
【００６１】
　対応するＩＮＴＭＡＳＫレジスタ１５２は、非ゼロ値を有する場合、ＡＮＤゲート１７０において割込みラッチ１５０の出力をマスクする。（なお、この例示的な実施形態では、マスクレジスタ１５２、１５４、１５６および１６０と１７２、１７４、１７６および１８０との出力は反転される。）
　対応するＩＮＴＭＡＳＫレジスタ１５２は、ゼロ値を有する場合、真値を生成し、その値は、ＡＮＤゲート１７０において割込みラッチ１５０からの真値と結合されることにより、ＡＮＤゲート１７０の出力において非マスク割込み信号２４０を生成する。
【００６２】
　非マスクされた割込み信号２４０を、ＡＮＤゲート２２０において中断マスクレジスタ１７２からの中断マスク信号と結合することにより、マスク割込み２３０が形成される。
　このため、割込みラッチ１５０が割込みを含み、対応するＩＮＴＭＡＳＫレジスタ１５２およびＳＭＡＳＫレジスタ１７２がゼロ値を含む場合、マスク割込み２３０が生成される。
　ＳＭＡＳＫレジスタ１７２が非ゼロ値を含む場合、マスク割込み２３０は中断され、ＩＮＴ標準割込み信号２３４はアサートされないままである。
　中断される割込みは、割込み許可命令に達するかＳＭＡＳＫレジスタ１７２がクリアされるまで、割込みラッチ１５０において保留中のまま維持される。
【００６３】
　マスク割込み２３０と他の割込み２２２、２２４および２２６とに対し、優先待ち行列２３２において優先順位を付すことにより、プロセッサコアに対しＩＮＴ標準割込み信号２３４を生成してよい。
【００６４】
　割込みラッチ１５０が割込みを含み、対応するＩＮＴＭＡＳＫレジスタ１５２およびＳＭＡＳＫレジスタ１７２がそれぞれゼロ値および非ゼロ値を含む場合、マスク割込み２３０は中断されるが、非マスク割込み２４０はアサートされる。
【００６５】
　非マスク割込み２４０、２４２、２４４および２４６に対し、第２の優先待ち行列２５０において優先順位を付すことにより、非中断標準割込み信号２５２を生成してよい。
【００６６】
　中断（非アサート）ＩＮＴ標準割込み信号２３４は、反転され、ＡＮＤゲート２５４において非中断（アサート）標準割込み信号２５２と結合されることにより、同期化のためにコアに送信されるアサートＴＯＩ＿ＩＮＴ割込み信号２５６を生成する。
【００６７】
　要約すれば、割込み１４０が存在するが中断されない場合、ＩＮＴ標準割込み信号２３４はアサートされ、ＴＯＩ＿ＩＮＴ割込み信号２５６はアサートされない。
【００６８】
　標準割込み処理プロセスは、ＩＮＴ標準割込み信号２３４によって呼び出される。
　割込み１５０が存在し中断される場合、ＩＮＴ標準割込み信号２３４はアサートされず、ＴＯＩ＿ＩＮＴ割込み信号２５６はアサートされる。
　不当な場所でコードが不注意に割込まれないように、標準割込み処理プロセスは呼び出されない。
　ＴＯＩ＿ＩＮＴ割込み信号２５６は、コードにおける割込み許可命令が後に実行される時、例外、すなわち同期例外イベントの生成をトリガする。
【００６９】
　第１の例示的な実施形態では、割込み許可命令は、ターゲットプロセッサの命令セットに追加されたトラップオン割込み（ＴＯＩ）命令である。
　ここで図６を参照すると、ＴＯＩ＿ＩＮＴ割込み信号２５６がアサートされＴＯＩ命令が実行される場合に、命令実行のコミットフェーズ中に例外が生成される。
【００７０】
　ＡＮＤゲート２６３を使用して、ＴＯＩ＿ＩＮＴ割込み信号２５６と、ＴＯＩ命令が実行されている時を示すプロセッサの命令デコーダからの信号２６０と、命令実行のコミットフェーズ中にパルス駆動される信号２６２とが結合される。
　結果としての信号２６４と他の例外源２６６とがＯＲゲート２７０に入ることにより、コミットフェーズ例外信号２７２が生成される。
　プロセッサコアにおいて他の既存の例外信号としてコミットフェーズ例外信号２７２を使用することにより、パイプラインにおける他の命令の実行を停止し無効にしてよい。
【００７１】
　割込みを、いかなる望ましい方法で解読し処理することも可能である。
　たとえば、ソフトウェア管理割込みシステムを使用する一実施形態では、ＩＮＴ信号２３４およびＴＯＩ＿ＩＮＴ信号２５６はシングルワイヤであり、制御レジスタを読み出すかまたは何らかの同様の動作を実行することにより割込みを識別してよい単一の割込みハンドラが呼び出される。
　割込みのハードウェアベクトル命令化を使用する他の実施形態では、割込みコントローラ１３０は、各あり得る割込みに対して１つの、いくつかの割込みベクトル信号を含んでよく、したがって各割込みベクトルにより異なる割込みハンドラを直接呼び出すことができる。
　割込みは、いかに解読され処理されるかに関らず、本明細書で説明するように同期化されることが可能である。
【００７２】
　ここで図７を参照すると、第２の例示的な実施形態における割込み許可命令は、プロセッサにおいてトラップオン割込み制御レジスタ（ＴＯＩ＿ＣＲ）２８０にアクセスするために使用される、ロード命令等の命令セットにおける既存の命令である。
　ＴＯＩ＿ＣＲ２８０は、ＴＯＩ＿ＩＮＴ割込み信号２５６をラッチしその値を未キャッシュ領域のコアメモリ空間にマップする、リードオンリ制御レジスタである。
【００７３】
　ＴＯＩ＿ＣＲ２８０は、ＴＯＩ＿ＩＮＴ割込み信号２５６に接続された例外トリガ入力２８２と、アクセスされている制御レジスタを識別するアドレス入力２８４と、ＴＯＩ＿ＣＲ２８０のアドレスを含むアドレス入力２８６とを有する。（代替的に、ＴＯＩ＿ＣＲ２８０のアドレスは、ＴＯＩ＿ＣＲ２８０にハードコード化されてよい。）
　例外トリガ入力２８２は、ラッチ２９０にラッチされてよい。
【００７４】
　アドレス比較器２９４は、制御レジスタアドレスをＴＯＩ＿ＣＲアドレスと比較することにより、ＴＯＩ＿ＣＲ２８０がアクセスされている時を指示する。
　同期例外トリガ入力２８２は、ＡＮＤゲート２９６においてアドレス比較器２９４の出力と結合され、出力は、ＴＯＩ＿ＣＲ２８０のメモリ例外出力３００と接続される。
　メモリ例外出力３００は、ＴＯＩ＿ＩＮＴ割込み信号２５６がアサートされＴＯＩ＿ＣＲ２８０にアクセスされる時にメモリ例外を示す。
　ＴＯＩ＿ＣＲ２８０は、常に、その戻り値出力３０４に定数３０２を提供する。
　上述したように、メモリ例外出力３００を使用して、実行を停止し、パイプラインを無効にし、適当な割込みハンドラを呼び出してよい。
【００７５】
　ＴＯＩ＿ＣＲ２８０は、常にゼロを返すが、ＴＯＩ＿ＩＮＴ割込み信号２５６がアサートされる時にメモリ例外を生成する、ＴＯＩ＿ＣＲ＿ＡＤＤＲメモリアドレスにマップされる一定のリードオンリメモリロケーションである。
　コアからＴＯＩ＿ＣＲ２８０にアクセスするために、既存のロード命令を以下のように実行することができる。
　ｌｄｗ　＄ｒ０＝ＴＯＩ＿ＣＲ＿ＡＤＤＲ［＄ｒ０］
【００７６】
　上記ロード命令において、＄ｒ０は定数レジスタ０であり、ＴＯＩ＿ＣＲ＿ＡＤＤＲはＴＯＩ＿ＣＲ２８０のアドレスを表す定数である。
　ＴＯＩ＿ＣＲ２８０にアクセスされる場合にＴＯＩ＿ＩＮＴ割込み信号２５６がアサートされる場合、ロードは、不当なメモリにアクセスしているかのように、セグメンテーション違反（ＳＩＧＳＥＧＶ）等のメモリ例外を発生させる。
【００７７】
　２つの例示的な例外生成実施形態のうちのもっとも有利なものを選択することは、プロセッサマイクロアーキテクチャによって決まる。
　命令セットにＴＯＩ命令を追加することにより、幾分複雑性が増大するが、それには、いかなる割込みも保留中でない場合ｎｏ−ｏｐとして作用するという利点がある。
　これにより、ＴＯＩ命令を、ほとんど不利益なしにネイティブコードを通して自由に挿入することができる。
【００７８】
　既存の命令を使用してトラップオン割込み制御レジスタにアクセスすることにより、命令セットに新たな命令が追加されるのが回避されるが、各割込み引渡しポイントにおいてトラップオン割込み制御レジスタにアクセスされる。
　これは、ＴＯＩ命令を追加することがプロセッサマイクロアーキテクチャによって決まるため、幾分効率的であり得る。
　２つの例示的な実施形態は機能的に等価であり、割込み許可命令が実行される時に、他の機能的に等価な実施形態を使用してＴＯＩ＿ＩＮＴ割込み信号２５６から例外を生成してよい。
【００７９】
　割込みコントローラ１３０は、最近のすべてのマイクロプロセッサの割込みおよび例外制御メカニズムの非常に単純かつ自然な拡張であり、そのため非同期割込みを同期化するために多くの複雑な回路を追加しない。
　割込み許可命令（たとえば、ＴＯＩ命令またはロード命令）は、ユーザレベル（非特権）例外命令である。
　ＴＯＩ命令を、ネイティブ命令ストリームにおいて自由に混合することができる。
【００８０】
　それは、いかなる割込みも保留中でない場合にｎｏ−ｏｐのように振舞うためである。
　したがって、いかなる割込みも保留中でない場合、最も頻繁に実行される場合の間にネイティブ命令ストリームにＴＯＩ命令を追加することにより、いかなる不利益ももたらされない。
【００８１】
　各エミュレートされた命令境界において、割込み許可命令を挿入してよいが、望ましい場合は、挿入の頻度はより低くてよい。
　割込み許可命令包含の粒度は、プログラムのリアルタイム特性と割込みの引渡しのために許容可能なレイテンシとによって決まる。
　割込み許可命令が多すぎることによりコード最適化が抑止される可能性があるが、割込みのタイムリーなサービスが保証される。
【００８２】
　上述したものなどのエミュレータが、割込み許可命令にわたってネイティブ命令を再配置することができない可能性があるため、最適化が抑止される可能性がある。
　割込み許可命令が少なすぎる場合、最適化中の自由なコード移動が可能となるが、プログラムの観測可能ポイントが減らされる。
【００８３】
　たとえば、各ループにおいて少なくとも１つの割込み許可命令を確実に含めなければならない。
　このため、上述したように、割込み許可命令を、各オリジナル命令境界においてネイティブ命令ストリームに自動的に追加してよく、あるいはタイムリーな割込み引渡し対最適化可能性等の釣合いの必要のための何らかのアルゴリズムにしたがって追加してよい。
【００８４】
　図８に、非同期のエミュレートされた割込みの同期化を要約するフローチャートを示す。
　オリジナル命令は、一続きのネイティブ命令によって置換される（３１０）。
　ネイティブ命令に入る前に、非同期割込みの引渡しを中断する命令が追加される（３１２）。
　オリジナル命令境界に対応するポイント等、割込みが安全に引渡される可能性のあるネイティブ命令のすべてのポイントにおいて、割込み許可命令が追加される（３１４）。
【００８５】
　本明細書では、本発明の例示的な実施形態を詳細に説明したが、発明の概念を他の方法で種々に具体化し採用してよい、ということと、併記の特許請求の範囲は、従来技術によって限定される場合を除き、かかる変形形態を包含するよう解釈されるように意図されている、ということは理解されなければならない。
【産業上の利用可能性】
【００８６】
　本発明は、コンピュータにおいてエミュレートされた割込みを同期化するために利用可能である。
【図面の簡単な説明】
【００８７】
【図１】ソフトウェアをエミュレートしている間に非同期割込みを同期化するために使用してよいコンピュータシステムの実施形態の例示的なブロック図である。
【図２】エミュレーションプロセスの実施形態においてオリジナル命令がネイティブ命令にいかに対応するかを示す例示的な図である。
【図３】例示的な実施形態におけるエミュレーション中のネイティブ命令の実行中に、割込みが誤った引渡しポイントにいかに到着し実行されることができるかを示す図である。
【図４】例示的な実施形態におけるエミュレーションプロセス中にネイティブ命令における正しい引渡しポイントまでの命令の中断を示す図である。
【図５】エミュレーション中に割込みを中断するための割込み処理回路の例示的な実施形態を示す回路図である。
【図６】非同期の中断された割込みが処理される場合に例外を発生させるための例外発生器の第１の例示的な実施形態の回路図である。
【図７】非同期の中断された割込みが処理される場合に例外を発生させるための例外発生器の第２の例示的な実施形態の回路図である。
【図８】エミュレーション中に非同期割込みを同期化する動作の例示的な実施形態のフローチャートである。
【符号の説明】
【００８８】
１０・・・コンピュータシステム、
１２・・・ＣＰＵ、
１４・・・システムバス、
１６・・・ＲＯＭ、
２０・・・ＲＡＭ、
２２・・・Ｉ／Ｏアダプタ、
２４・・・通信アダプタ、
２６・・・ユーザインターフェースアダプタ、
３０・・・ディスプレイアダプタ、
３６・・・キーボード、
４０・・・ポインティングデバイス、
４２・・・モニタ、
５０・・・オリジナル命令、
５２・・・ネイティブ命令、
１１０・・・割込み、
１３２〜１４０・・・割込みライン、
１４２〜１５０・・・割込みラッチ、
１５２〜１６０・・・割込みマスク、
１７２〜１８０・・・中断マスク、
２３２，２５０・・・優先待ち行列、
２９０・・・ラッチ、
２９４・・・アドレス比較器、
３０２・・・定数、
【図１】
2004054948.tif 000003
【図２】
2004054948.tif 000004
【図３】
2004054948.tif 000005
【図４】
2004054948.tif 000006
【図５】
2004054948.tif 000007
【図６】
2004054948.tif 000008
【図７】
2004054948.tif 000009
【図８】
2004054948.tif 000010