JP2004054948A - 非同期のエミュレートされた割込みの同期化 - Google Patents
非同期のエミュレートされた割込みの同期化 Download PDFInfo
- Publication number
- JP2004054948A JP2004054948A JP2003273508A JP2003273508A JP2004054948A JP 2004054948 A JP2004054948 A JP 2004054948A JP 2003273508 A JP2003273508 A JP 2003273508A JP 2003273508 A JP2003273508 A JP 2003273508A JP 2004054948 A JP2004054948 A JP 2004054948A
- Authority
- JP
- Japan
- Prior art keywords
- interrupt
- instruction
- asynchronous
- exception
- native
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
【課題】 ソフトウェアをエミュレートすると同時に、非同期割込みを処理する方法を提供する。
【解決手段】 ソフトウェアをエミュレートしている間に非同期割込み(110)を処理する方法であって、前記非同期割込みが到来すると、該非同期割込みを、それが前記ソフトウェアの実行に割込むことなく保留中のままであるように中断させること(312)と、前記非同期割込みの引渡し(delivery)を命令コード(120)と同期させること(314)とを含む。
【選択図】図4
【解決手段】 ソフトウェアをエミュレートしている間に非同期割込み(110)を処理する方法であって、前記非同期割込みが到来すると、該非同期割込みを、それが前記ソフトウェアの実行に割込むことなく保留中のままであるように中断させること(312)と、前記非同期割込みの引渡し(delivery)を命令コード(120)と同期させること(314)とを含む。
【選択図】図4
Description
本発明は、概してエミュレータに関し、特にエミュレートされた割込みを同期化することに関する。
今日広く利用可能なコンピュータは、多くの異なるアーキテクチャを有し、アーキテクチャの各々がそれら自体の命令セットを有する。
これらのアーキテクチャは、マイクロプロセッサが新たに生成される度にアップグレードされ変更され、概して追加の処理能力を提供する。
不都合なことに、コンピュータハードウェアがアップグレードまたは置換されると、莫大な費用および労力で作成された既存のソフトウェアが陳腐化する可能性がある。
これらのアーキテクチャは、マイクロプロセッサが新たに生成される度にアップグレードされ変更され、概して追加の処理能力を提供する。
不都合なことに、コンピュータハードウェアがアップグレードまたは置換されると、莫大な費用および労力で作成された既存のソフトウェアが陳腐化する可能性がある。
ソフトウェアは、以前の命令セットアーキテクチャに対して書かれているため、概して、新たなコンピュータハードウェアが理解しない命令を含む。
コンピュータハードウェアが置換される時はいつでも、結果としてソフトウェアを置換することが必要であることは、ユーザに対し資本費用においても訓練費用においても非常にコストがかかる。
コンピュータハードウェアが置換される時はいつでも、結果としてソフトウェアを置換することが必要であることは、ユーザに対し資本費用においても訓練費用においても非常にコストがかかる。
次第に実用的になってきている1つの解決法は、新たなアーキテクチャに対して以前のアーキテクチャをエミュレートし、エミュレータによって既存のソフトウェアを実行することである。
命令は、実行中にソフトウェアから取得されると、新たなアーキテクチャにおいてエミュレータがネイティブに実行するために置換または変更される。
命令は、実行中にソフトウェアから取得されると、新たなアーキテクチャにおいてエミュレータがネイティブに実行するために置換または変更される。
不都合なことに、割込みを正しく処理すると同時にコンピュータ上のソフトウェアを非ネイティブな命令セットでエミュレートすることは困難である。
それは、ソフトウェアからの命令が、通常ネイティブな命令により1対1で置換されないためである。
このため、単一命令が、一続きのいくつかの新たな命令によって置換される可能性がある。
それは、ソフトウェアからの命令が、通常ネイティブな命令により1対1で置換されないためである。
このため、単一命令が、一続きのいくつかの新たな命令によって置換される可能性がある。
一続きの新たな命令の実行が割込みによって割込まれる場合に、エミュレートされたアーキテクチャは既知の状態でない可能性がある。
割込みは、タイマーチックまたは周辺装置トランザクション通知等、非同期例外イベントである。
これらのイベントは、エミュレートされる命令セットまたは仮想マシンに対してネイティブな割込み・キャッチ(interrupt-catching)メカニズムによってサービスされる。
割込みは、タイマーチックまたは周辺装置トランザクション通知等、非同期例外イベントである。
これらのイベントは、エミュレートされる命令セットまたは仮想マシンに対してネイティブな割込み・キャッチ(interrupt-catching)メカニズムによってサービスされる。
この割込み・キャッチメカニズムは、仮想マシンがネイティブな命令境界で発生する状態にあるように見えることを予期する。
しかしながら、エミュレートされた一続きの置換命令は、オリジナル命令境界のうちの1つに対応しないポイントで割込みされる場合、仮想マシンを予期された状態にしない可能性がある。
しかしながら、エミュレートされた一続きの置換命令は、オリジナル命令境界のうちの1つに対応しないポイントで割込みされる場合、仮想マシンを予期された状態にしない可能性がある。
ソフトウェアをエミュレートすると同時に、非同期割込みを、ソフトウェアの実行を割込むことなしに保留中のままであるように中断することにより、処理する。
非同期割込みの引渡しは、命令コードと同期化される。
非同期割込みの引渡しは、命令コードと同期化される。
本発明によれば、ソフトウェアをエミュレートすると同時に、非同期割込みを処理する方法を提供することができる。
本発明の例示的な実施形態を、添付図面に示す。
割込みを同期化するために使用することができる通常のコンピュータシステムを、図1のブロック図に示す。
コンピュータシステム10は、後述するように、非同期割込みの同期化のためのサポートを含む中央処理装置(CPU)12を含む。
割込みを同期化するために使用することができる通常のコンピュータシステムを、図1のブロック図に示す。
コンピュータシステム10は、後述するように、非同期割込みの同期化のためのサポートを含む中央処理装置(CPU)12を含む。
CPU12は、システムバス14により、リードオンリメモリ(ROM)16、ランダムアクセスメモリ(RAM)20、入出力(I/O)アダプタ22、通信アダプタ24、ユーザインタフェースアダプタ26、およびディスプレイアダプタ30等の装置に接続される。
ハードドライブ32等のデータ記憶装置は、I/Oアダプタ22を介してコンピュータシステム10に接続される。
ハードドライブ32等のデータ記憶装置は、I/Oアダプタ22を介してコンピュータシステム10に接続される。
動作時、コンピュータシステム10のCPU12は、ROM16、ハードドライブ32、およびRAM20に、バイナリフォーマットで格納された命令を実行し、それによってコンピュータシステム10が、RAM20に格納されたデータを操作して有用な機能を実行するようにする。
コンピュータシステム10は、通信アダプタ24に接続されたローカルネットワークまたはワイドエリアネットワーク(たとえば、34)を通して他の電子機器と通信することができる。
コンピュータシステム10は、通信アダプタ24に接続されたローカルネットワークまたはワイドエリアネットワーク(たとえば、34)を通して他の電子機器と通信することができる。
ユーザ入力は、ユーザインタフェースアダプタ26を通してコンピュータシステム10に接続された、キーボード36およびポインティングデバイス40等の入力装置を通して取得される。
出力は、ディスプレイアダプタ30に接続されたモニタ42等の表示装置に表示される。
割込みの同期化は、かかるコンピュータシステム10かまたは他の任意の適当に構成された処理システムで実行することができる。
出力は、ディスプレイアダプタ30に接続されたモニタ42等の表示装置に表示される。
割込みの同期化は、かかるコンピュータシステム10かまたは他の任意の適当に構成された処理システムで実行することができる。
割込みの同期化は、種々のコンピュータ処理環境において、特に、ソフトウェアエミュレーション、翻訳、最適化およびプログラムコードが変換される他の場合の間に、ならびに、ネスト化された割込みの管理を最適化するのにより従来的な割込み処理タスクの間に適用可能である。
コンピュータシステム10のプログラムコードを、エミュレータによって実行し、翻訳し、または最適化する等によって変換する場合、オリジナル命令はネイティブ命令によって置換される。
コンピュータシステム10のプログラムコードを、エミュレータによって実行し、翻訳し、または最適化する等によって変換する場合、オリジナル命令はネイティブ命令によって置換される。
オリジナル命令セットに対して書かれたコードは、ターゲットコンピュータシステムまたはエミュレーションホストに対してネイティブである新たな命令によって置換または追加される。
コード変換の重要な部分は、オリジナルコードの可観測性特性を保持することである。
コード変換の重要な部分は、オリジナルコードの可観測性特性を保持することである。
この場合、システムの可観測性は、プログラム実行中に所定の同期ポイントで「観測する」かまたは他の方法で確定することができる所定の既知の状態にあるシステムの特性として定義される。
可観測性は、例外イベント(たとえば、割込み)が処理された後にシステムのその状態を復元するための実質的な前提条件である。
可観測性は、例外イベント(たとえば、割込み)が処理された後にシステムのその状態を復元するための実質的な前提条件である。
これはまた時に、文字通り、システムが「正確な例外」をサポートすることも言う。
言い換えれば、例外イベントの場合、処理環境の正確な状態を、例外イベントのハンドラに引渡さなければならず、それによってハンドラは、たとえばそのタスクを完了すると状態を復元することができる。
言い換えれば、例外イベントの場合、処理環境の正確な状態を、例外イベントのハンドラに引渡さなければならず、それによってハンドラは、たとえばそのタスクを完了すると状態を復元することができる。
コード、例外および割込みを変換する場合に処理される例外イベントには主に2つのタイプがある。
例外は、同期例外イベントであり、メモリ管理障害および浮動小数点例外等の命令が実行される場合に内部的に生成される。
例外は、同期例外イベントであり、メモリ管理障害および浮動小数点例外等の命令が実行される場合に内部的に生成される。
翻訳エミュレータのコンテキストにおける例外を、多くの異なる方法で、たとえば、エミュレートされた命令セットまたは仮想マシンにおいて例外を生成することができる、任意のオリジナル命令に対応する例外チェックコードを生成することにより、管理することができる。
たとえば、メモリ動作の翻訳は、エミュレートされた状態への変更をコミットする前に例外があるかチェックするためのコードをいくつか含んでよい。
たとえば、メモリ動作の翻訳は、エミュレートされた状態への変更をコミットする前に例外があるかチェックするためのコードをいくつか含んでよい。
対照的に、割込みは、タイマチックまたは周辺装置トランザクション通知等の非同期例外イベントであり、外部的に生成される。
非同期イベントは、予期されない時にプログラム実行に割込む。
割込みは、特にネイティブな割込み処理に対して使用される同じネイティブな割込み・キャッチメカニズムによってサービスされる場合(これは、より優れたパフォーマンスおよび割込み応答時間を得るために望ましい)、翻訳エミュレータのコンテキストにおける例外よりも処理することの方がずっと困難である。
非同期イベントは、予期されない時にプログラム実行に割込む。
割込みは、特にネイティブな割込み処理に対して使用される同じネイティブな割込み・キャッチメカニズムによってサービスされる場合(これは、より優れたパフォーマンスおよび割込み応答時間を得るために望ましい)、翻訳エミュレータのコンテキストにおける例外よりも処理することの方がずっと困難である。
ネイティブな割込み・キャッチメカニズムは、通常、しばしばレジスタにアクセスする事前割当てされた割込み処理機能とプロセッサの他の状態依存態様とを呼出す。
翻訳エミュレータの場合、ネイティブな割込みには、エミュレートされた環境に割当てられる可能性があり、したがって対応するエミュレートされた割込み処理機能によって処理される必要がある。
翻訳エミュレータの場合、ネイティブな割込みには、エミュレートされた環境に割当てられる可能性があり、したがって対応するエミュレートされた割込み処理機能によって処理される必要がある。
なお、保留中である従来のようにマスクされた割込みは、割込みサービスルーチンによってマスクが解除されサービスされるまで保留中のままである。
従来のようにマスクされた割込みを同期ポイントにおいてマスク解除することには、いくつかの不都合がある。
従来のようにマスクされた割込みを同期ポイントにおいてマスク解除することには、いくつかの不都合がある。
第1の不都合は、マスク解除する割込みは概して特権動作であり、翻訳されたコード/仮想マシン環境(もしくは翻訳されたコードの少なくとも一部)はユーザレベルで実行している可能性がある、ということである。
割込みがいつでも発生する可能性があり実際に発生するため、従来のようにマスクされた割込みは、システムが部分的にでも特権モードではなくユーザモードで実行している場合、所望の同期ポイントではマスク解除可能とならない。
割込みがいつでも発生する可能性があり実際に発生するため、従来のようにマスクされた割込みは、システムが部分的にでも特権モードではなくユーザモードで実行している場合、所望の同期ポイントではマスク解除可能とならない。
従来のようにマスクされた割込みを同期ポイントにおいてマスク解除しようと試みる際の第2の不都合は、マスク解除が通常即座にアクティブとならない、ということである。
むしろ、マスク解除は概して、マスク解除動作が発行された(概して、制御レジスタにおける格納)後数サイクルかかる。
さらに、結果としての発行された割込みは、やはり、割込みをマスク解除した命令の後に、命令のパイプラインへの入力の完了を可能にするであろう。
むしろ、マスク解除は概して、マスク解除動作が発行された(概して、制御レジスタにおける格納)後数サイクルかかる。
さらに、結果としての発行された割込みは、やはり、割込みをマスク解除した命令の後に、命令のパイプラインへの入力の完了を可能にするであろう。
これは、非同期のエミュレートされた割込みを同期化する場合に行われることだが、割込みが例外に変換される(少なくともパイプラインの観点から)場合には当てはまらない。
それは、例外の場合、例外を引起す命令(この場合、生成された例外であり、本明細書では「トラップオン割込み」例外と呼ぶ)の後にパイプラインに入力するすべての命令が無効にされるためである。
それは、例外の場合、例外を引起す命令(この場合、生成された例外であり、本明細書では「トラップオン割込み」例外と呼ぶ)の後にパイプラインに入力するすべての命令が無効にされるためである。
非同期割込みにとって処理システムが一貫した既知の状態であることを確実にするために、概して、エミュレーションを大幅に低速化することができる非常に保守的な戦略が採用される。
割込みの同期化は、処理システムが正当なチェックポイントまたは既知の状態にあることが保証される場合、非同期イベントをプログラムの所定ポイントで同期イベントに変えることにより、その非同期イベントを処理する問題を適切に解決する。
それにより、すべての技法が、ジャストインタイムコンパイルおよび動的最適化を処理し、同時にエミュレートされる命令セットまたは仮想マシンにおいて割込み処理のオリジナルのセマンティクスを保存することが可能となる。
割込みの同期化は、処理システムが正当なチェックポイントまたは既知の状態にあることが保証される場合、非同期イベントをプログラムの所定ポイントで同期イベントに変えることにより、その非同期イベントを処理する問題を適切に解決する。
それにより、すべての技法が、ジャストインタイムコンパイルおよび動的最適化を処理し、同時にエミュレートされる命令セットまたは仮想マシンにおいて割込み処理のオリジナルのセマンティクスを保存することが可能となる。
本明細書で開示するような命令の同期化は、割込み引渡しポイント管理がエラーを防止することができるかまたは割込み処理を簡略化することができる場合はいつでも、種々の処理環境において有益であり、ソフトウェアエミュレーションまたは本明細書で説明する他の例示的な処理環境には限定されない。
非同期割込みの同期化を使用して、プロセッサでネイティブに実行しているオリジナルコードにおける割込み引渡しおよび処理を管理することも可能である。
したがって、本明細書では、割込みの同期化を、ソフトウェアエミュレーション環境に適用するものとして説明する。
非同期割込みの同期化を使用して、プロセッサでネイティブに実行しているオリジナルコードにおける割込み引渡しおよび処理を管理することも可能である。
したがって、本明細書では、割込みの同期化を、ソフトウェアエミュレーション環境に適用するものとして説明する。
1つの例示的な実施形態では、非同期割込みの同期化は、開示する内容が引用をもってすべて本明細書内に包含されたものとする、2001年8月8日に出願された「Dynamic Execution Layer Interface for Explicitly or Transparently Executing Application or System Binaries」と題された米国特許出願第09/924,260号に記載されているものなどの、動的実行層の一部として実行するエミュレータによって実行される。
動的実行層は、オリジナル命令コードをインタセプトして読み出し、それらをネイティブ命令に置換し、ネイティブ命令を最適化し、ネイティブ命令をキャッシュに格納し、キャッシュからの翻訳される命令の実行を制御する等の、レガシコンピュータプログラムの制御等、エミュレータに対しいくつかのサービスを提供する。
動的実行層は、オリジナル命令コードをインタセプトして読み出し、それらをネイティブ命令に置換し、ネイティブ命令を最適化し、ネイティブ命令をキャッシュに格納し、キャッシュからの翻訳される命令の実行を制御する等の、レガシコンピュータプログラムの制御等、エミュレータに対しいくつかのサービスを提供する。
上に引用した特許出願書類において述べられている動的実行層は、プログラムを変換するためにコンピュータプログラムとコンピュータハードウェアとの間で実行するソフトウェア層である。
動的実行層は、プログラムの実行可能イメージから、ハードウェアによって実行される前の命令をインタセプトして、それらを翻訳し、最適化し、見つからないハードウェアのために仮想サポートを提供し、または多数の望ましいタスクを行う等、それらを変換する。
動的実行層は、プログラムの実行可能イメージから、ハードウェアによって実行される前の命令をインタセプトして、それらを翻訳し、最適化し、見つからないハードウェアのために仮想サポートを提供し、または多数の望ましいタスクを行う等、それらを変換する。
また、動的実行層は、変換されたコードセグメントをキャッシュすることにより、繰返し実行されるコードセグメントの実行速度を向上させることができる。
ソフトウェアエミュレーションおよび翻訳中に割込みの引渡しポイントを管理することは、特にエミュレーションシステムがオペレーティングシステム(OS)およびデバイスドライバのようなシステムコードもエミュレートする場合に、非常に重要となる可能性がある。
例示的なエミュレータは、オリジナルプロセッサのオリジナル命令セットに対して設計された命令コードのストリームを読み出し、それらを、置換プロセッサの第2の命令セットに対してネイティブな命令コードと置換し、それにより置換プロセッサにおいてオリジナル命令セットをエミュレートする。
このため、本明細書における「オリジナル命令」という用語は、オリジナル命令セット下でオリジナルプロセッサに対して書かれた命令コードを言い、本明細書における「ネイティブ命令」という用語は、置換プロセッサに対して書かれた置換命令コードを言う。
ネイティブ命令は、オリジナル命令の翻訳である。
このため、本明細書における「オリジナル命令」という用語は、オリジナル命令セット下でオリジナルプロセッサに対して書かれた命令コードを言い、本明細書における「ネイティブ命令」という用語は、置換プロセッサに対して書かれた置換命令コードを言う。
ネイティブ命令は、オリジナル命令の翻訳である。
ここで図2を参照し、エミュレーションプロセスについて説明する。
エミュレータは、一続きのオリジナル命令50を読み出し、それらを一続きのネイティブ命令52と置換する。
オリジナル命令A〜F(54、56、60、62、64および66)は、置換プロセッサに対してネイティブにオリジナル動作を実行するネイティブ命令A'〜F'(70、72、74、76、80および82)と置換される。
エミュレータは、一続きのオリジナル命令50を読み出し、それらを一続きのネイティブ命令52と置換する。
オリジナル命令A〜F(54、56、60、62、64および66)は、置換プロセッサに対してネイティブにオリジナル動作を実行するネイティブ命令A'〜F'(70、72、74、76、80および82)と置換される。
なお、オリジナル命令によっては、B56をB'72におよびD62をD'76に等、単一命令と置換される。
しかしながら、オリジナル命令には、置換A'70を構成するいくつかのネイティブ命令84、86および90と置換されるA54等、いくつかのネイティブ命令と置換されなければならないものもある。
しかしながら、オリジナル命令には、置換A'70を構成するいくつかのネイティブ命令84、86および90と置換されるA54等、いくつかのネイティブ命令と置換されなければならないものもある。
このように、エミュレーション中、命令コードが置換されるかまたは変更される際、新たなコードの命令境界が、オリジナルコードの命令境界に対応しない場合がある。
これによって、エミュレートされたプロセッサが未知の状態になることにより割込みハンドラに対して問題がもたらされる可能性がある。
ここで図3を参照すると、命令C60の実行中に割込み92が生成される場合、割込みキャッチメカニズムは、命令C60の終り94において割込み92をネイティブプロセッサに引渡す。
これによって、エミュレートされたプロセッサが未知の状態になることにより割込みハンドラに対して問題がもたらされる可能性がある。
ここで図3を参照すると、命令C60の実行中に割込み92が生成される場合、割込みキャッチメカニズムは、命令C60の終り94において割込み92をネイティブプロセッサに引渡す。
オリジナル命令C60が単一のネイティブ命令に置換された場合、ネイティブ命令ストリームにおいて、割込みを問題無しに処理することができる。
割込みハンドラ自体は、エミュレートされたプログラムとして書込まれる可能性が高く、その標準動作の一部として割込まれた(エミュレートされた)プログラムの状態を問合せることが多い。
厳密に言えば、割込みハンドラに誤りのある状態を渡すことは、エミュレートされた環境の実行モデルの違反となる。
割込みハンドラ自体は、エミュレートされたプログラムとして書込まれる可能性が高く、その標準動作の一部として割込まれた(エミュレートされた)プログラムの状態を問合せることが多い。
厳密に言えば、割込みハンドラに誤りのある状態を渡すことは、エミュレートされた環境の実行モデルの違反となる。
エミュレートされた割込みハンドラを、ネイティブ割込み処理システムによって種々の方法で呼び出すことができる。
たとえば、多くのネイティブ割込み処理システムは、プログラム可能割込みベクトルを用いて割込み処理機能を再マップする能力を有する。
たとえば、多くのネイティブ割込み処理システムは、プログラム可能割込みベクトルを用いて割込み処理機能を再マップする能力を有する。
その場合、エミュレートされた割込みハンドラにおける翻訳されたコードが、ネイティブ割込みシステムが割込みを受け取る時に直接呼出されるように、仮想マシンは、エミュレートされた割込みハンドラをネイティブ割込みベクトルに割り当てることができる。(また、ハンドラに対して翻訳されたコードが、割込みセマンティックにしたがってエミュレートされたマシン状態を変更するタスクで開始する際に、コードの一部を含むことも可能である。たとえば、一定の制御レジスタに一定の値を保存するか、または一定の他の値を一定のエミュレートされたマシンレジスタにロードする。)
代替的に、ネイティブ割込みハンドラが、割込みを処理するかまたは割込みをエミュレートされた環境に渡すように提供されてよい。
これらの場合のいずれにおいても、割込みは、既知の状態を期待してエミュレートされたプログラムの状態を問合せてよい。
これらの場合のいずれにおいても、割込みは、既知の状態を期待してエミュレートされたプログラムの状態を問合せてよい。
図3の実施例では、オリジナル命令C60は、置換動作C'74を形成する一続きの5つのネイティブ命令100、102、104、106および108によって置換される。
たとえば、オリジナル命令C60は、2つの数を加算する単一命令であってよく、その命令は、命令セマンティクス、バス幅、バイトエンディアン順、レジスタ編成等のハードウェアの相違を処理するために、エミュレーション中に一続きの5つの命令100、102、104、106および108によって置換されなければならない。
たとえば、オリジナル命令C60は、2つの数を加算する単一命令であってよく、その命令は、命令セマンティクス、バス幅、バイトエンディアン順、レジスタ編成等のハードウェアの相違を処理するために、エミュレーション中に一続きの5つの命令100、102、104、106および108によって置換されなければならない。
この実施例では、割込みハンドラは、レジスタが、割込みが発生する前に実行された、エミュレートされた命令によって生成された正しい値を含む等、所与の状態のプロセッサに渡されるよう期待する。
しかしながら、C'74を形成する5つの割込み100、102、104、106および108の一続きの置換に対し、第3の置換命令104中に割込みがなされた場合、ネイティブ割込みキャッチメカニズムは、第3の置換命令104の終り112において割込み110を引渡す。
しかしながら、C'74を形成する5つの割込み100、102、104、106および108の一続きの置換に対し、第3の置換命令104中に割込みがなされた場合、ネイティブ割込みキャッチメカニズムは、第3の置換命令104の終り112において割込み110を引渡す。
エミュレートされたプロセッサは、期待された値ではない、エミュレートされたレジスタに格納された一時的な値を有する等、未知の状態にされる可能性がある。
未知のプロセッサ状態により、致命的なエラーと誤ったプログラムカウンタでのプログラム実行再開等のような他の問題とがもたらされる可能性がある。
エミュレートされたシステムが既知の状態にある、正しい割込み引渡しポイントは、一続きの置換C'74を形成する最後のネイティブ命令の終り114であり、それは、オリジナル命令C60の終り94に対応する。
このように、非同期割込みを少なくともオリジナル命令境界に対応するネイティブコードのポイントまで遅延させることにより、エミュレートされた割込みハンドラに対し、ネイティブ処理システムが期待された状態にあることが保証される。
未知のプロセッサ状態により、致命的なエラーと誤ったプログラムカウンタでのプログラム実行再開等のような他の問題とがもたらされる可能性がある。
エミュレートされたシステムが既知の状態にある、正しい割込み引渡しポイントは、一続きの置換C'74を形成する最後のネイティブ命令の終り114であり、それは、オリジナル命令C60の終り94に対応する。
このように、非同期割込みを少なくともオリジナル命令境界に対応するネイティブコードのポイントまで遅延させることにより、エミュレートされた割込みハンドラに対し、ネイティブ処理システムが期待された状態にあることが保証される。
割込みの同期化により、システムは、プロセッサが既知の状態にある所望のコードロケーションまで割込み処理を遅延させる。
標準ネイティブ割込み制御メカニズムを拡張することにより、ネイティブ割込みコントローラに対し、いくつかの割込みをキャッチされた時に選択的に中断させるための機能が追加される。
標準ネイティブ割込み制御メカニズムを拡張することにより、ネイティブ割込みコントローラに対し、いくつかの割込みをキャッチされた時に選択的に中断させるための機能が追加される。
下により詳細に説明するように、拡張には、割込みマスクレジスタと論理積がとられる特別な制御レジスタ(「中断マスク」レジスタ)を追加することにより、標準割込み信号とプロセッサコアに対する同期化される割込み信号(本明細書では、例外トリガ信号と呼ぶ)とをともに生成することが含まれる。
適当な引渡しポイントまで非同期割込みを中断させるために中断マスクレジスタに値を格納する中断命令がネイティブコードに追加される。
適当な引渡しポイントまで非同期割込みを中断させるために中断マスクレジスタに値を格納する中断命令がネイティブコードに追加される。
例外トリガ信号は、コードにおいて非同期割込みの引渡しを同期例外として許可する命令に達すると、例外の生成をトリガする。
割込み許可命令のいくつかの例示的な実施形態を以下に説明する。
第1の例示的な実施形態は、ユーザレベル(非特権的)命令、すなわち「トラップオン割込み(trap-on-interrupt)」(TOI)を命令セットに追加することを含む。(なお、TOI命令に対し代替的にいかなる望ましい名前を与えてもよい。)
割込み許可命令のいくつかの例示的な実施形態を以下に説明する。
第1の例示的な実施形態は、ユーザレベル(非特権的)命令、すなわち「トラップオン割込み(trap-on-interrupt)」(TOI)を命令セットに追加することを含む。(なお、TOI命令に対し代替的にいかなる望ましい名前を与えてもよい。)
TOI命令は、保留中の割込みのリストをチェックする。
所与のタイプの保留中の割込み(この場合、すべてのマスク可能割込み)が存在する場合、TOI命令は特別のトラップを引渡し、存在しない場合、ノーオペレーション(no−op)のように振舞う。
TOI命令がコミット段階に達すると、TOI命令自体に同期化された例外が生成される。
所与のタイプの保留中の割込み(この場合、すべてのマスク可能割込み)が存在する場合、TOI命令は特別のトラップを引渡し、存在しない場合、ノーオペレーション(no−op)のように振舞う。
TOI命令がコミット段階に達すると、TOI命令自体に同期化された例外が生成される。
第2の例示的な実施形態は、トラップオン割込み制御レジスタを追加することを含む。
この実施形態では、割込み許可命令は、トラップオン割込み制御レジスタ(TOI_CR)にアクセスする命令である。
中断された割込みが待機している間、命令がTOI_CRにアクセスすると、TOI_CRは、不当なメモリにアクセスしているかのように、メモリ例外等の例外を生成し、セグメンテーション違反(SIGSEGV)をもたらす。
この実施形態では、割込み許可命令は、トラップオン割込み制御レジスタ(TOI_CR)にアクセスする命令である。
中断された割込みが待機している間、命令がTOI_CRにアクセスすると、TOI_CRは、不当なメモリにアクセスしているかのように、メモリ例外等の例外を生成し、セグメンテーション違反(SIGSEGV)をもたらす。
例外が実行に割込みを行うと、例外ハンドラは、システム依存の方法で適当な割込みハンドラを呼び出す。
たとえば、上述したように、例外ハンドラは、中断された割込みのための割込みベクトルを有する例外トリガ信号を読み出し、その割込みベクトルに対応する割込みハンドラを呼び出してよい。
たとえば、上述したように、例外ハンドラは、中断された割込みのための割込みベクトルを有する例外トリガ信号を読み出し、その割込みベクトルに対応する割込みハンドラを呼び出してよい。
すべての割込みが、同期化するために潜在的に中断される可能性があるが、本明細書で論考する例示的な実施形態は、マスク可能な割込みのみを同期化する。
このため、中断された割込みは、割込み許可命令に同期化される例外を生成することによって同期化される。
中断された割込みは実際に例外に変換されるため、コミット段階に先立つ状態におけるすべての命令が、パイプラインを空にする(パイプライの命令を実行する)のではなく無効にされる。
中断された割込みは実際に例外に変換されるため、コミット段階に先立つ状態におけるすべての命令が、パイプラインを空にする(パイプライの命令を実行する)のではなく無効にされる。
ここで図4を参照し、中断マスクレジスタと非同期割込みを同期化する割込み許可命令との使用を説明する。
第1に、割込みは、ネイティブコード52に入る前に中断される。
これを、たとえば対応する中断マスク制御レジスタへの格納により、ネイティブシステムの割込みがエミュレートされたコードにマップされるべきかにしたがって、中断マスクに対する値を計算し設定することによって行ってよい。
これは、たとえば、特権モードで実行中に初期化時に仮想マシンランタイム環境によって行われる。
これは、特権動作であるが、通常、ネイティブコード52に入る前に一度だけ実行される。
第1に、割込みは、ネイティブコード52に入る前に中断される。
これを、たとえば対応する中断マスク制御レジスタへの格納により、ネイティブシステムの割込みがエミュレートされたコードにマップされるべきかにしたがって、中断マスクに対する値を計算し設定することによって行ってよい。
これは、たとえば、特権モードで実行中に初期化時に仮想マシンランタイム環境によって行われる。
これは、特権動作であるが、通常、ネイティブコード52に入る前に一度だけ実行される。
そして、割込みが引渡し可能となるネイティブコード52のすべてのポイントにおいて、割込み許可命令が追加される(TOI命令かまたはTOI_CRにアクセスする命令)。
割込み許可命令は、割込みが安全に処理され得る各ポイントにおいてネイティブコード52に追加され、それにより、保留中の割込みが、これらのポイントのみにおいてプログラム実行に割込むことが可能となる。
たとえば、ネイティブ動作C'74の実行中に非同期割込みが引渡されないようにするために、ネイティブ命令シーケンス52のC'74の最後の命令108後に、割込み許可命令120が追加される。
このように、割込み110の引渡しが、割込み許可命令120における正しい引渡しポイント122まで中断され、非同期割込み110が有効に同期化される。
割込み許可命令は、割込みが安全に処理され得る各ポイントにおいてネイティブコード52に追加され、それにより、保留中の割込みが、これらのポイントのみにおいてプログラム実行に割込むことが可能となる。
たとえば、ネイティブ動作C'74の実行中に非同期割込みが引渡されないようにするために、ネイティブ命令シーケンス52のC'74の最後の命令108後に、割込み許可命令120が追加される。
このように、割込み110の引渡しが、割込み許可命令120における正しい引渡しポイント122まで中断され、非同期割込み110が有効に同期化される。
このため、割込みを同期化する割込み許可命令は、それらに対してプロセッサが既知の状態にあるように見えることを保証することにより、割込みハンドラプログラミングを大幅に簡略化する。
また、ソフトウェアエミュレーション中に非同期割込みを同期化することにより、エミュレートされたコードの最適化および監視も容易になる。
オリジナル命令境界に対応する置換コードのすべてのポイントにおいて翻訳エミュレータまたは他のシステムによるか、または自動的に他の任意の所望のアルゴリズムにしたがって等、割込みを同期化する割込み許可命令を追加してよい。
また、ソフトウェアエミュレーション中に非同期割込みを同期化することにより、エミュレートされたコードの最適化および監視も容易になる。
オリジナル命令境界に対応する置換コードのすべてのポイントにおいて翻訳エミュレータまたは他のシステムによるか、または自動的に他の任意の所望のアルゴリズムにしたがって等、割込みを同期化する割込み許可命令を追加してよい。
ここで図5を参照して、割込みを中断させるサブ回路131を有する割込みコントローラ130の例示的な実施態様を説明する。
しかしながら、非同期命令を同期化するシステムは、図5に示す例示的な回路に限定されず、要求に応じて他のいかなる適当な回路、ファームウェアまたはソフトウェアで実施してもよい、ということを留意することが重要である。
しかしながら、非同期命令を同期化するシステムは、図5に示す例示的な回路に限定されず、要求に応じて他のいかなる適当な回路、ファームウェアまたはソフトウェアで実施してもよい、ということを留意することが重要である。
図5に示す例示的な割込みコントローラ130は、4つの割込みラインのみを含むように簡略化されているが、要求に応じて拡張することができる。
また、図5に示す例示的な割込みコントローラ130はいかなるタイプの中断された割込みの引渡しも可能とするが、単一タイプの割込みの引渡しを選択的に可能にするように容易に適合させることができる。
また、図5に示す例示的な割込みコントローラ130はいかなるタイプの中断された割込みの引渡しも可能とするが、単一タイプの割込みの引渡しを選択的に可能にするように容易に適合させることができる。
割込み信号は、4つの割込みライン132、134、136および140に到着する。
割込み信号は、4つの割込みライン132、134、136および140にそれぞれ接続された4つの割込みラッチ142、144、146および150においてラッチされる。
割込みをマスクすることにより、4つのANDゲート162、164、166および170においてラッチされた割込み信号と論理積がとられる割込みマスク(INTMASK)152、154、156および160を使用して、いずれの割込み信号がプロセッサコアに引き渡されるかを判断してよい。
割込み信号は、4つの割込みライン132、134、136および140にそれぞれ接続された4つの割込みラッチ142、144、146および150においてラッチされる。
割込みをマスクすることにより、4つのANDゲート162、164、166および170においてラッチされた割込み信号と論理積がとられる割込みマスク(INTMASK)152、154、156および160を使用して、いずれの割込み信号がプロセッサコアに引き渡されるかを判断してよい。
すなわち、割込みラッチ(たとえば、150)の出力と対応する割込みマスク(たとえば、152)の出力とが、ANDゲート170の入力に接続される。
これらの割込み信号を、本明細書では、「非マスク割込み」と呼び、それらが中断マスクによってマスクされていなかったことを示す。
これらの割込み信号を、本明細書では、「非マスク割込み」と呼び、それらが中断マスクによってマスクされていなかったことを示す。
結果としてのラッチされた非マスク割込み信号を、中断マスク(SMASK)172、174、176および180によって中断することができる。
中断マスク172、174、176および180の出力における中断マスク信号は、4つのさらなるANDゲート212、214、216および220において、4つのANDゲート162、164、166および170からの非マスク割込み信号と結合され、4つのマスク割込み222、224、226および230を形成する。
これらのマスク割込み222、224、226および230を、優先待ち行列232に供給してよく、その後、標準割込み信号234として割込みが中断されてよいプロセッサコアに引渡すことができる。
中断マスク172、174、176および180の出力における中断マスク信号は、4つのさらなるANDゲート212、214、216および220において、4つのANDゲート162、164、166および170からの非マスク割込み信号と結合され、4つのマスク割込み222、224、226および230を形成する。
これらのマスク割込み222、224、226および230を、優先待ち行列232に供給してよく、その後、標準割込み信号234として割込みが中断されてよいプロセッサコアに引渡すことができる。
4つのANDゲート162、164、166および170の出力におけるラッチされた非マスク割込み信号240、242、244および246もまた、非中断標準割込み信号252を生成する他の優先待ち行列250に供給してよい。
第1の優先待ち行列232からの標準割込み信号234がANDゲート254の反転入力に接続され、非中断標準割込み信号252がANDゲート254の非反転入力に接続され、それによって、トラップオン割込み(TOI)割込み信号TOI_INT256、すなわちプロセッサコアに提供される同期化される割込み信号が生成される。
第1の優先待ち行列232からの標準割込み信号234がANDゲート254の反転入力に接続され、非中断標準割込み信号252がANDゲート254の非反転入力に接続され、それによって、トラップオン割込み(TOI)割込み信号TOI_INT256、すなわちプロセッサコアに提供される同期化される割込み信号が生成される。
動作中、特権モード動作により、INTMASKおよびSMASKレジスタ152、154、156および160と172、174、176および180とに値が書き込まれる。
INTMASK152、154、156および160は、システムの標準動作の一部として書き込まれる。
SMASKレジスタ172、174、176および180は、翻訳されたコードに入る前にエミュレータスーパバイザによって書き込まれる。
割込み信号(たとえば、140)は、生成されると、対応する割込みラッチ(たとえば、150)に格納される。
INTMASK152、154、156および160は、システムの標準動作の一部として書き込まれる。
SMASKレジスタ172、174、176および180は、翻訳されたコードに入る前にエミュレータスーパバイザによって書き込まれる。
割込み信号(たとえば、140)は、生成されると、対応する割込みラッチ(たとえば、150)に格納される。
対応するINTMASKレジスタ152は、非ゼロ値を有する場合、ANDゲート170において割込みラッチ150の出力をマスクする。(なお、この例示的な実施形態では、マスクレジスタ152、154、156および160と172、174、176および180との出力は反転される。)
対応するINTMASKレジスタ152は、ゼロ値を有する場合、真値を生成し、その値は、ANDゲート170において割込みラッチ150からの真値と結合されることにより、ANDゲート170の出力において非マスク割込み信号240を生成する。
対応するINTMASKレジスタ152は、ゼロ値を有する場合、真値を生成し、その値は、ANDゲート170において割込みラッチ150からの真値と結合されることにより、ANDゲート170の出力において非マスク割込み信号240を生成する。
非マスクされた割込み信号240を、ANDゲート220において中断マスクレジスタ172からの中断マスク信号と結合することにより、マスク割込み230が形成される。
このため、割込みラッチ150が割込みを含み、対応するINTMASKレジスタ152およびSMASKレジスタ172がゼロ値を含む場合、マスク割込み230が生成される。
SMASKレジスタ172が非ゼロ値を含む場合、マスク割込み230は中断され、INT標準割込み信号234はアサートされないままである。
中断される割込みは、割込み許可命令に達するかSMASKレジスタ172がクリアされるまで、割込みラッチ150において保留中のまま維持される。
このため、割込みラッチ150が割込みを含み、対応するINTMASKレジスタ152およびSMASKレジスタ172がゼロ値を含む場合、マスク割込み230が生成される。
SMASKレジスタ172が非ゼロ値を含む場合、マスク割込み230は中断され、INT標準割込み信号234はアサートされないままである。
中断される割込みは、割込み許可命令に達するかSMASKレジスタ172がクリアされるまで、割込みラッチ150において保留中のまま維持される。
マスク割込み230と他の割込み222、224および226とに対し、優先待ち行列232において優先順位を付すことにより、プロセッサコアに対しINT標準割込み信号234を生成してよい。
割込みラッチ150が割込みを含み、対応するINTMASKレジスタ152およびSMASKレジスタ172がそれぞれゼロ値および非ゼロ値を含む場合、マスク割込み230は中断されるが、非マスク割込み240はアサートされる。
非マスク割込み240、242、244および246に対し、第2の優先待ち行列250において優先順位を付すことにより、非中断標準割込み信号252を生成してよい。
中断(非アサート)INT標準割込み信号234は、反転され、ANDゲート254において非中断(アサート)標準割込み信号252と結合されることにより、同期化のためにコアに送信されるアサートTOI_INT割込み信号256を生成する。
要約すれば、割込み140が存在するが中断されない場合、INT標準割込み信号234はアサートされ、TOI_INT割込み信号256はアサートされない。
標準割込み処理プロセスは、INT標準割込み信号234によって呼び出される。
割込み150が存在し中断される場合、INT標準割込み信号234はアサートされず、TOI_INT割込み信号256はアサートされる。
不当な場所でコードが不注意に割込まれないように、標準割込み処理プロセスは呼び出されない。
TOI_INT割込み信号256は、コードにおける割込み許可命令が後に実行される時、例外、すなわち同期例外イベントの生成をトリガする。
割込み150が存在し中断される場合、INT標準割込み信号234はアサートされず、TOI_INT割込み信号256はアサートされる。
不当な場所でコードが不注意に割込まれないように、標準割込み処理プロセスは呼び出されない。
TOI_INT割込み信号256は、コードにおける割込み許可命令が後に実行される時、例外、すなわち同期例外イベントの生成をトリガする。
第1の例示的な実施形態では、割込み許可命令は、ターゲットプロセッサの命令セットに追加されたトラップオン割込み(TOI)命令である。
ここで図6を参照すると、TOI_INT割込み信号256がアサートされTOI命令が実行される場合に、命令実行のコミットフェーズ中に例外が生成される。
ここで図6を参照すると、TOI_INT割込み信号256がアサートされTOI命令が実行される場合に、命令実行のコミットフェーズ中に例外が生成される。
ANDゲート263を使用して、TOI_INT割込み信号256と、TOI命令が実行されている時を示すプロセッサの命令デコーダからの信号260と、命令実行のコミットフェーズ中にパルス駆動される信号262とが結合される。
結果としての信号264と他の例外源266とがORゲート270に入ることにより、コミットフェーズ例外信号272が生成される。
プロセッサコアにおいて他の既存の例外信号としてコミットフェーズ例外信号272を使用することにより、パイプラインにおける他の命令の実行を停止し無効にしてよい。
結果としての信号264と他の例外源266とがORゲート270に入ることにより、コミットフェーズ例外信号272が生成される。
プロセッサコアにおいて他の既存の例外信号としてコミットフェーズ例外信号272を使用することにより、パイプラインにおける他の命令の実行を停止し無効にしてよい。
割込みを、いかなる望ましい方法で解読し処理することも可能である。
たとえば、ソフトウェア管理割込みシステムを使用する一実施形態では、INT信号234およびTOI_INT信号256はシングルワイヤであり、制御レジスタを読み出すかまたは何らかの同様の動作を実行することにより割込みを識別してよい単一の割込みハンドラが呼び出される。
割込みのハードウェアベクトル命令化を使用する他の実施形態では、割込みコントローラ130は、各あり得る割込みに対して1つの、いくつかの割込みベクトル信号を含んでよく、したがって各割込みベクトルにより異なる割込みハンドラを直接呼び出すことができる。
割込みは、いかに解読され処理されるかに関らず、本明細書で説明するように同期化されることが可能である。
たとえば、ソフトウェア管理割込みシステムを使用する一実施形態では、INT信号234およびTOI_INT信号256はシングルワイヤであり、制御レジスタを読み出すかまたは何らかの同様の動作を実行することにより割込みを識別してよい単一の割込みハンドラが呼び出される。
割込みのハードウェアベクトル命令化を使用する他の実施形態では、割込みコントローラ130は、各あり得る割込みに対して1つの、いくつかの割込みベクトル信号を含んでよく、したがって各割込みベクトルにより異なる割込みハンドラを直接呼び出すことができる。
割込みは、いかに解読され処理されるかに関らず、本明細書で説明するように同期化されることが可能である。
ここで図7を参照すると、第2の例示的な実施形態における割込み許可命令は、プロセッサにおいてトラップオン割込み制御レジスタ(TOI_CR)280にアクセスするために使用される、ロード命令等の命令セットにおける既存の命令である。
TOI_CR280は、TOI_INT割込み信号256をラッチしその値を未キャッシュ領域のコアメモリ空間にマップする、リードオンリ制御レジスタである。
TOI_CR280は、TOI_INT割込み信号256をラッチしその値を未キャッシュ領域のコアメモリ空間にマップする、リードオンリ制御レジスタである。
TOI_CR280は、TOI_INT割込み信号256に接続された例外トリガ入力282と、アクセスされている制御レジスタを識別するアドレス入力284と、TOI_CR280のアドレスを含むアドレス入力286とを有する。(代替的に、TOI_CR280のアドレスは、TOI_CR280にハードコード化されてよい。)
例外トリガ入力282は、ラッチ290にラッチされてよい。
例外トリガ入力282は、ラッチ290にラッチされてよい。
アドレス比較器294は、制御レジスタアドレスをTOI_CRアドレスと比較することにより、TOI_CR280がアクセスされている時を指示する。
同期例外トリガ入力282は、ANDゲート296においてアドレス比較器294の出力と結合され、出力は、TOI_CR280のメモリ例外出力300と接続される。
メモリ例外出力300は、TOI_INT割込み信号256がアサートされTOI_CR280にアクセスされる時にメモリ例外を示す。
TOI_CR280は、常に、その戻り値出力304に定数302を提供する。
上述したように、メモリ例外出力300を使用して、実行を停止し、パイプラインを無効にし、適当な割込みハンドラを呼び出してよい。
同期例外トリガ入力282は、ANDゲート296においてアドレス比較器294の出力と結合され、出力は、TOI_CR280のメモリ例外出力300と接続される。
メモリ例外出力300は、TOI_INT割込み信号256がアサートされTOI_CR280にアクセスされる時にメモリ例外を示す。
TOI_CR280は、常に、その戻り値出力304に定数302を提供する。
上述したように、メモリ例外出力300を使用して、実行を停止し、パイプラインを無効にし、適当な割込みハンドラを呼び出してよい。
TOI_CR280は、常にゼロを返すが、TOI_INT割込み信号256がアサートされる時にメモリ例外を生成する、TOI_CR_ADDRメモリアドレスにマップされる一定のリードオンリメモリロケーションである。
コアからTOI_CR280にアクセスするために、既存のロード命令を以下のように実行することができる。
ldw $r0=TOI_CR_ADDR[$r0]
コアからTOI_CR280にアクセスするために、既存のロード命令を以下のように実行することができる。
ldw $r0=TOI_CR_ADDR[$r0]
上記ロード命令において、$r0は定数レジスタ0であり、TOI_CR_ADDRはTOI_CR280のアドレスを表す定数である。
TOI_CR280にアクセスされる場合にTOI_INT割込み信号256がアサートされる場合、ロードは、不当なメモリにアクセスしているかのように、セグメンテーション違反(SIGSEGV)等のメモリ例外を発生させる。
TOI_CR280にアクセスされる場合にTOI_INT割込み信号256がアサートされる場合、ロードは、不当なメモリにアクセスしているかのように、セグメンテーション違反(SIGSEGV)等のメモリ例外を発生させる。
2つの例示的な例外生成実施形態のうちのもっとも有利なものを選択することは、プロセッサマイクロアーキテクチャによって決まる。
命令セットにTOI命令を追加することにより、幾分複雑性が増大するが、それには、いかなる割込みも保留中でない場合no−opとして作用するという利点がある。
これにより、TOI命令を、ほとんど不利益なしにネイティブコードを通して自由に挿入することができる。
命令セットにTOI命令を追加することにより、幾分複雑性が増大するが、それには、いかなる割込みも保留中でない場合no−opとして作用するという利点がある。
これにより、TOI命令を、ほとんど不利益なしにネイティブコードを通して自由に挿入することができる。
既存の命令を使用してトラップオン割込み制御レジスタにアクセスすることにより、命令セットに新たな命令が追加されるのが回避されるが、各割込み引渡しポイントにおいてトラップオン割込み制御レジスタにアクセスされる。
これは、TOI命令を追加することがプロセッサマイクロアーキテクチャによって決まるため、幾分効率的であり得る。
2つの例示的な実施形態は機能的に等価であり、割込み許可命令が実行される時に、他の機能的に等価な実施形態を使用してTOI_INT割込み信号256から例外を生成してよい。
これは、TOI命令を追加することがプロセッサマイクロアーキテクチャによって決まるため、幾分効率的であり得る。
2つの例示的な実施形態は機能的に等価であり、割込み許可命令が実行される時に、他の機能的に等価な実施形態を使用してTOI_INT割込み信号256から例外を生成してよい。
割込みコントローラ130は、最近のすべてのマイクロプロセッサの割込みおよび例外制御メカニズムの非常に単純かつ自然な拡張であり、そのため非同期割込みを同期化するために多くの複雑な回路を追加しない。
割込み許可命令(たとえば、TOI命令またはロード命令)は、ユーザレベル(非特権)例外命令である。
TOI命令を、ネイティブ命令ストリームにおいて自由に混合することができる。
割込み許可命令(たとえば、TOI命令またはロード命令)は、ユーザレベル(非特権)例外命令である。
TOI命令を、ネイティブ命令ストリームにおいて自由に混合することができる。
それは、いかなる割込みも保留中でない場合にno−opのように振舞うためである。
したがって、いかなる割込みも保留中でない場合、最も頻繁に実行される場合の間にネイティブ命令ストリームにTOI命令を追加することにより、いかなる不利益ももたらされない。
したがって、いかなる割込みも保留中でない場合、最も頻繁に実行される場合の間にネイティブ命令ストリームにTOI命令を追加することにより、いかなる不利益ももたらされない。
各エミュレートされた命令境界において、割込み許可命令を挿入してよいが、望ましい場合は、挿入の頻度はより低くてよい。
割込み許可命令包含の粒度は、プログラムのリアルタイム特性と割込みの引渡しのために許容可能なレイテンシとによって決まる。
割込み許可命令が多すぎることによりコード最適化が抑止される可能性があるが、割込みのタイムリーなサービスが保証される。
割込み許可命令包含の粒度は、プログラムのリアルタイム特性と割込みの引渡しのために許容可能なレイテンシとによって決まる。
割込み許可命令が多すぎることによりコード最適化が抑止される可能性があるが、割込みのタイムリーなサービスが保証される。
上述したものなどのエミュレータが、割込み許可命令にわたってネイティブ命令を再配置することができない可能性があるため、最適化が抑止される可能性がある。
割込み許可命令が少なすぎる場合、最適化中の自由なコード移動が可能となるが、プログラムの観測可能ポイントが減らされる。
割込み許可命令が少なすぎる場合、最適化中の自由なコード移動が可能となるが、プログラムの観測可能ポイントが減らされる。
たとえば、各ループにおいて少なくとも1つの割込み許可命令を確実に含めなければならない。
このため、上述したように、割込み許可命令を、各オリジナル命令境界においてネイティブ命令ストリームに自動的に追加してよく、あるいはタイムリーな割込み引渡し対最適化可能性等の釣合いの必要のための何らかのアルゴリズムにしたがって追加してよい。
このため、上述したように、割込み許可命令を、各オリジナル命令境界においてネイティブ命令ストリームに自動的に追加してよく、あるいはタイムリーな割込み引渡し対最適化可能性等の釣合いの必要のための何らかのアルゴリズムにしたがって追加してよい。
図8に、非同期のエミュレートされた割込みの同期化を要約するフローチャートを示す。
オリジナル命令は、一続きのネイティブ命令によって置換される(310)。
ネイティブ命令に入る前に、非同期割込みの引渡しを中断する命令が追加される(312)。
オリジナル命令境界に対応するポイント等、割込みが安全に引渡される可能性のあるネイティブ命令のすべてのポイントにおいて、割込み許可命令が追加される(314)。
オリジナル命令は、一続きのネイティブ命令によって置換される(310)。
ネイティブ命令に入る前に、非同期割込みの引渡しを中断する命令が追加される(312)。
オリジナル命令境界に対応するポイント等、割込みが安全に引渡される可能性のあるネイティブ命令のすべてのポイントにおいて、割込み許可命令が追加される(314)。
本明細書では、本発明の例示的な実施形態を詳細に説明したが、発明の概念を他の方法で種々に具体化し採用してよい、ということと、併記の特許請求の範囲は、従来技術によって限定される場合を除き、かかる変形形態を包含するよう解釈されるように意図されている、ということは理解されなければならない。
本発明は、コンピュータにおいてエミュレートされた割込みを同期化するために利用可能である。
10・・・コンピュータシステム、
12・・・CPU、
14・・・システムバス、
16・・・ROM、
20・・・RAM、
22・・・I/Oアダプタ、
24・・・通信アダプタ、
26・・・ユーザインターフェースアダプタ、
30・・・ディスプレイアダプタ、
36・・・キーボード、
40・・・ポインティングデバイス、
42・・・モニタ、
50・・・オリジナル命令、
52・・・ネイティブ命令、
110・・・割込み、
132〜140・・・割込みライン、
142〜150・・・割込みラッチ、
152〜160・・・割込みマスク、
172〜180・・・中断マスク、
232,250・・・優先待ち行列、
290・・・ラッチ、
294・・・アドレス比較器、
302・・・定数、
12・・・CPU、
14・・・システムバス、
16・・・ROM、
20・・・RAM、
22・・・I/Oアダプタ、
24・・・通信アダプタ、
26・・・ユーザインターフェースアダプタ、
30・・・ディスプレイアダプタ、
36・・・キーボード、
40・・・ポインティングデバイス、
42・・・モニタ、
50・・・オリジナル命令、
52・・・ネイティブ命令、
110・・・割込み、
132〜140・・・割込みライン、
142〜150・・・割込みラッチ、
152〜160・・・割込みマスク、
172〜180・・・中断マスク、
232,250・・・優先待ち行列、
290・・・ラッチ、
294・・・アドレス比較器、
302・・・定数、
Claims (10)
- ソフトウェアをエミュレートしている間に非同期割込み(110)を処理する方法であって、
前記非同期割込みが到来すると、該非同期割込みを、それが前記ソフトウェアの実行に割込むことなく保留中のままであるように中断させること(312)と、
前記非同期割込みの引渡し(delivery)を命令コード(120)と同期させること(314)と
を含む方法。 - 前記非同期割込み(110)の引渡しを、前記命令コード(120)が実行される時に例外(272)を生成することにより、該命令コードと同期させる
請求項1記載の方法。 - 前記非同期割込み(110)の引渡しを前記命令コード(120)と同期させることは、トラップオン割込み命令(120)に達した時に例外(272)を生成することを含む
請求項1記載の方法。 - 前記非同期割込み(110)の引渡しを前記命令コード(120)と同期させることは、トラップオン割込み制御レジスタ(280)がアクセスされ(284)、かつ前記非同期割込みが保留中である時に、例外(300)を生成することを含む
請求項1記載の方法。 - 前記ソフトウェアのオリジナル命令(50)をネイティブ命令(52)と置換することをさらに含んでおり、該オリジナル命令のうちの少なくとも1つ(60)を、複数のネイティブ命令(74)と置換する
請求項1記載の方法。 - 前記ネイティブ命令(52)の始まりの前に、非同期割込みを中断する中断命令を追加し、一方、前記非同期割込みの引渡しを許可する命令(120)に達するまで前記ネイティブ命令が実行され続けること(312)をさらに含む
請求項5記載の方法。 - 前記非同期割込みの引渡しを許可する前記命令(120)に達すると、例外(例えば272)を生成することにより、前記非同期割込みを引渡すことをさらに含む
請求項6記載の方法。 - 割込み処理装置(130)であって、
入力と出力とを有し、該入力に割込み信号(140)が接続されている割込みラッチ(150)と、
中断マスクレジスタ(172)と、
第1のANDゲート(220)であって、少なくとも2つの入力と出力とを有しており、該出力は標準割込み信号(230)を生成し、該2つの入力のうちの第1の入力は前記割込みラッチ(150)出力に接続され、前記中断マスクレジスタ(172)は該2つの入力のうちの第2の入力に接続されている、第1のANDゲート(220)と、
第2のANDゲート(254)であって、少なくとも反転入力と非反転入力と出力とを有しており、該出力は例外トリガ信号(256)を生成し、該非反転入力は前記割込みラッチ(150)出力に接続され、該反転入力は前記第1のANDゲート(220)出力に接続されている、第2のANDゲート(254)と
を具備する割込み処理装置。 - エミュレートされたソフトウェアを実行するプロセッサであって、
割込み中断サブ回路を有する割込み処理回路(130)と、
該割込み中断サブ回路によって割込みが中断された時で、かつ、中断された割込みの処理を許可する命令(120)が実行された時に、例外(たとえば、264、300)を生成する例外発生器(たとえば、263、280)と
を具備するプロセッサ。 - 割込み処理装置であって、
非同期割込みを中断する手段(たとえば、172、220)と、
該非同期割込みを表す同期例外を生成する手段(たとえば、263、280)と
を具備する割込み処理装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/198,839 US6895460B2 (en) | 2002-07-19 | 2002-07-19 | Synchronization of asynchronous emulated interrupts |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004054948A true JP2004054948A (ja) | 2004-02-19 |
Family
ID=30443184
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003273508A Withdrawn JP2004054948A (ja) | 2002-07-19 | 2003-07-11 | 非同期のエミュレートされた割込みの同期化 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6895460B2 (ja) |
JP (1) | JP2004054948A (ja) |
GB (1) | GB2394086B (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014532248A (ja) * | 2012-09-21 | 2014-12-04 | インテル コーポレイション | バイナリトランスレーションを実行する方法及びシステム |
Families Citing this family (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7735136B2 (en) * | 2005-04-18 | 2010-06-08 | Vmware, Inc. | 0-touch and 1-touch techniques for improving the availability of computer programs under protection without compromising security |
GB2425372B (en) * | 2005-04-20 | 2007-06-13 | Transitive Ltd | Method and apparatus for precise handling of exceptions during program code conversion |
CN101278260B (zh) * | 2005-06-07 | 2012-07-18 | 威睿公司 | 使软件程序免于弱点和攻击的约束注入方法 |
US7363471B2 (en) * | 2005-06-27 | 2008-04-22 | Intel Corporation | Apparatus, system, and method of dynamic binary translation supporting a denormal input handling mechanism |
US7562263B1 (en) * | 2005-09-14 | 2009-07-14 | Unisys Corporation | System and method for detecting and recovering from errors in a control store of an electronic data processing system |
US7877630B1 (en) | 2005-09-28 | 2011-01-25 | Oracle America, Inc. | Trace based rollback of a speculatively updated cache |
US8037285B1 (en) | 2005-09-28 | 2011-10-11 | Oracle America, Inc. | Trace unit |
US7849292B1 (en) | 2005-09-28 | 2010-12-07 | Oracle America, Inc. | Flag optimization of a trace |
US7783863B1 (en) | 2005-09-28 | 2010-08-24 | Oracle America, Inc. | Graceful degradation in a trace-based processor |
US8499293B1 (en) | 2005-09-28 | 2013-07-30 | Oracle America, Inc. | Symbolic renaming optimization of a trace |
US8032710B1 (en) | 2005-09-28 | 2011-10-04 | Oracle America, Inc. | System and method for ensuring coherency in trace execution |
US7953961B1 (en) | 2005-09-28 | 2011-05-31 | Oracle America, Inc. | Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder |
US7937564B1 (en) | 2005-09-28 | 2011-05-03 | Oracle America, Inc. | Emit vector optimization of a trace |
US7870369B1 (en) | 2005-09-28 | 2011-01-11 | Oracle America, Inc. | Abort prioritization in a trace-based processor |
US7949854B1 (en) | 2005-09-28 | 2011-05-24 | Oracle America, Inc. | Trace unit with a trace builder |
US8051247B1 (en) | 2005-09-28 | 2011-11-01 | Oracle America, Inc. | Trace based deallocation of entries in a versioning cache circuit |
US8370576B1 (en) | 2005-09-28 | 2013-02-05 | Oracle America, Inc. | Cache rollback acceleration via a bank based versioning cache ciruit |
US7676634B1 (en) | 2005-09-28 | 2010-03-09 | Sun Microsystems, Inc. | Selective trace cache invalidation for self-modifying code via memory aging |
US8015359B1 (en) | 2005-09-28 | 2011-09-06 | Oracle America, Inc. | Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit |
US7953933B1 (en) | 2005-09-28 | 2011-05-31 | Oracle America, Inc. | Instruction cache, decoder circuit, basic block cache circuit and multi-block cache circuit |
US8019944B1 (en) | 2005-09-28 | 2011-09-13 | Oracle America, Inc. | Checking for a memory ordering violation after a speculative cache write |
US8024522B1 (en) | 2005-09-28 | 2011-09-20 | Oracle America, Inc. | Memory ordering queue/versioning cache circuit |
US7966479B1 (en) | 2005-09-28 | 2011-06-21 | Oracle America, Inc. | Concurrent vs. low power branch prediction |
US7814298B1 (en) | 2005-09-28 | 2010-10-12 | Oracle America, Inc. | Promoting and appending traces in an instruction processing circuit based upon a bias value |
US7987342B1 (en) | 2005-09-28 | 2011-07-26 | Oracle America, Inc. | Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer |
US7472261B2 (en) * | 2005-11-08 | 2008-12-30 | International Business Machines Corporation | Method for performing externally assisted calls in a heterogeneous processing complex |
US7797517B1 (en) | 2005-11-18 | 2010-09-14 | Oracle America, Inc. | Trace optimization via fusing operations of a target architecture operation set |
US7681019B1 (en) * | 2005-11-18 | 2010-03-16 | Sun Microsystems, Inc. | Executing functions determined via a collection of operations from translated instructions |
US9361114B1 (en) * | 2005-12-06 | 2016-06-07 | Azul Systems, Inc. | Instruction based interrupt masking for managing interrupts in a computer environment |
US8510596B1 (en) * | 2006-02-09 | 2013-08-13 | Virsec Systems, Inc. | System and methods for run time detection and correction of memory corruption |
US8370609B1 (en) | 2006-09-27 | 2013-02-05 | Oracle America, Inc. | Data cache rollbacks for failed speculative traces with memory operations |
US8010745B1 (en) | 2006-09-27 | 2011-08-30 | Oracle America, Inc. | Rolling back a speculative update of a non-modifiable cache line |
US7934063B2 (en) * | 2007-03-29 | 2011-04-26 | International Business Machines Corporation | Invoking externally assisted calls from an isolated environment |
JP5267328B2 (ja) * | 2009-05-26 | 2013-08-21 | 富士通セミコンダクター株式会社 | 割り込み通知制御装置および半導体集積回路 |
CN102141928A (zh) * | 2010-01-29 | 2011-08-03 | 国际商业机器公司 | 虚拟环境下的数据处理方法、系统以及系统的部署方法 |
US8782434B1 (en) | 2010-07-15 | 2014-07-15 | The Research Foundation For The State University Of New York | System and method for validating program execution at run-time |
US8607210B2 (en) | 2010-11-30 | 2013-12-10 | Micron Technology, Inc. | Code patching for non-volatile memory |
US20120158631A1 (en) | 2010-12-15 | 2012-06-21 | Scientific Conservation, Inc. | Analyzing inputs to an artificial neural network |
CN103582877B (zh) * | 2010-12-15 | 2015-09-23 | 超威半导体公司 | 计算机系统中断处理 |
US9063721B2 (en) | 2012-09-14 | 2015-06-23 | The Research Foundation For The State University Of New York | Continuous run-time validation of program execution: a practical approach |
US9311137B2 (en) | 2012-09-28 | 2016-04-12 | International Business Machines Corporation | Delaying interrupts for a transactional-execution facility |
US9069782B2 (en) | 2012-10-01 | 2015-06-30 | The Research Foundation For The State University Of New York | System and method for security and privacy aware virtual machine checkpointing |
US9507404B2 (en) | 2013-08-28 | 2016-11-29 | Via Technologies, Inc. | Single core wakeup multi-core synchronization mechanism |
US9465432B2 (en) | 2013-08-28 | 2016-10-11 | Via Technologies, Inc. | Multi-core synchronization mechanism |
US9792112B2 (en) | 2013-08-28 | 2017-10-17 | Via Technologies, Inc. | Propagation of microcode patches to multiple cores in multicore microprocessor |
GB2538091B (en) * | 2015-05-07 | 2018-03-14 | Advanced Risc Mach Ltd | Verifying correct code execution context |
KR20170032502A (ko) * | 2015-09-14 | 2017-03-23 | 삼성전자주식회사 | 스토리지 장치 및 그것의 인터럽트 발생 방법 |
US10089264B2 (en) | 2016-05-13 | 2018-10-02 | Intel Corporation | Callback interrupt handling for multi-threaded applications in computing environments |
US11182316B2 (en) * | 2019-05-20 | 2021-11-23 | International Business Machines Corporation | Program interrupt code conversion |
JP7327235B2 (ja) * | 2020-03-24 | 2023-08-16 | 横河電機株式会社 | フォールトトレラントシステム |
US20230058452A1 (en) * | 2021-08-17 | 2023-02-23 | Sap Se | Efficient error reproduction scenarios through data transformation |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5307504A (en) * | 1991-03-07 | 1994-04-26 | Digital Equipment Corporation | System and method for preserving instruction granularity when translating program code from a computer having a first architecture to a computer having a second reduced architecture during the occurrence of interrupts due to asynchronous events |
TW197505B (ja) * | 1991-03-07 | 1993-01-01 | Digital Equipment Corp | |
JPH04306735A (ja) * | 1991-04-04 | 1992-10-29 | Toshiba Corp | 非同期割込み禁止機構 |
US5539911A (en) * | 1991-07-08 | 1996-07-23 | Seiko Epson Corporation | High-performance, superscalar-based computer system with out-of-order instruction execution |
JP3176093B2 (ja) * | 1991-09-05 | 2001-06-11 | 日本電気株式会社 | マイクロプロセッサの割込み制御装置 |
JP3590075B2 (ja) * | 1992-01-20 | 2004-11-17 | 株式会社東芝 | 仮想記憶方式のデータ処理装置及び方法 |
US5819063A (en) | 1995-09-11 | 1998-10-06 | International Business Machines Corporation | Method and data processing system for emulating a program |
US6480952B2 (en) * | 1998-05-26 | 2002-11-12 | Advanced Micro Devices, Inc. | Emulation coprocessor |
JP3152205B2 (ja) | 1998-06-10 | 2001-04-03 | 日本電気株式会社 | 論理シミュレーション装置及びその方法並びにその制御プログラムを記録した記録媒体 |
-
2002
- 2002-07-19 US US10/198,839 patent/US6895460B2/en not_active Expired - Lifetime
-
2003
- 2003-07-11 JP JP2003273508A patent/JP2004054948A/ja not_active Withdrawn
- 2003-07-16 GB GB0316710A patent/GB2394086B/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014532248A (ja) * | 2012-09-21 | 2014-12-04 | インテル コーポレイション | バイナリトランスレーションを実行する方法及びシステム |
Also Published As
Publication number | Publication date |
---|---|
US6895460B2 (en) | 2005-05-17 |
US20040015627A1 (en) | 2004-01-22 |
GB2394086A (en) | 2004-04-14 |
GB0316710D0 (en) | 2003-08-20 |
GB2394086B (en) | 2005-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6895460B2 (en) | Synchronization of asynchronous emulated interrupts | |
US10963281B2 (en) | Nested virtualization for virtual machine exits | |
US10318322B2 (en) | Binary translator with precise exception synchronization mechanism | |
US6480952B2 (en) | Emulation coprocessor | |
EP1524596B1 (en) | Systems and methods for using synthetic instructions in a virtual machine | |
JP3320358B2 (ja) | コンパイル方法、例外処理方法、及びコンピュータ | |
US8478922B2 (en) | Controlling a rate at which adapter interruption requests are processed | |
US7783867B2 (en) | Controlling instruction execution in a processing environment | |
EP4168891A1 (en) | Systems and methods for performing binary translation | |
US11301283B1 (en) | Virtualization extension modules | |
US20120317312A1 (en) | Managing operator message buffers in a coupling facility | |
US6173248B1 (en) | Method and apparatus for handling masked exceptions in an instruction interpreter | |
US8788719B2 (en) | Executing a start operator message command | |
US9043643B2 (en) | Operator message commands for testing a coupling facility | |
NL2030804B1 (en) | Flexible return and event delivery | |
EP2941694B1 (en) | Capability based device driver framework | |
KR920003044B1 (ko) | 가상 머신 시스템용의 게스트 머신 실행 제어 시스템 | |
Zampiva et al. | A hypervisor approach with real-time support to the MIPS M5150 processor | |
US11216280B2 (en) | Exception interception | |
US7882336B2 (en) | Employing a buffer to facilitate instruction execution | |
Appavoo et al. | Utilizing Linux kernel components in K42 | |
JPS6139135A (ja) | 仮想計算機システムにおけるインタバル・タイマ割り込み制御装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040420 |
|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20061003 |