(57)【要約】【課題】  コンピュータ・システムにおいて例外信号を処理するための装置及び方法を提供する。【解決手段】  １つのコンピュータ・プラットフォームによって実行可能なバイナリ・コードの、別のコンピュータ・プラットフォームによって代わりに実行されるバイナリ・コードへの動的変換と特に組み合わせられた、例外信号の処理のための方法及び装置である。１つの例示的な態様において、例外処理ユニット（１９５、２２０、２３０）は、ターゲット状態（３２０）に関する何らかの例外信号を選択的に処理し、ターゲット状態（３２０）から得られたサブジェクト状態（３３０）に関する他の例外信号を処理する。複数の信号処理サブユニット（２２３）が、ターゲット状態（３２０）に関する例外信号（３１０）を選択的に処理し、実行に戻る要求又は例外信号（３１０）を渡す要求のいずれかを出力する。配送パス選択ユニット（２２２）は、複数の信号処理サブユニット（２２３）の選択されたグループにいたる例外信号（３１０）の配送パスを決定するように構成される。信号制御ユニット（２２１）は、配送パスに従って、例外信号を信号処理サブユニット（２２３）の選択されたグループの各々に順に配送し、（ｉ）信号処理サブユニット（２２３）のそれぞれが実行に戻る要求を出力した場合、ターゲット状態（３２０）に応じて実行に戻り、（ｉｉ）信号処理サブユニット（２２３）が例外信号（３１０）を渡す要求を出力した場合、配送パスに従って、例外信号（３１０）を信号処理サブユニット（２２３）の選択されたグループの次のものに渡し、（ｉｉｉ）配送パスにおいて信号処理サブユニットの更に別のものが指定されなかった場合、例外信号（３１０）をサブジェクト側例外ハンドラ・ユニット（２３０）に配送するように構成される。【選択図】      図４
2010525440.tif 000002
【特許請求の範囲】
【請求項１】
サブジェクト・コードをターゲット・コードに変換するように構成された翻訳器ユニットと、
前記ターゲット・コードを実行し、プロセッサ・ユニットにおける前記ターゲット・コードの実行に関するターゲット状態を提供するように構成されたプロセッサ・ユニットと、
少なくとも前記プロセッサ・ユニットにおける前記ターゲット・コードの実行に応答して、例外信号を生成するように構成された信号生成器ユニットと、
前記例外信号を処理するように構成された例外処理ユニットと、
を備えるコンピュータ・システムであって、前記例外処理ユニットは、
前記ターゲット状態から得られるサブジェクト状態に関する前記例外信号を処理するように構成されたサブジェクト側例外ハンドラ・ユニットであって、前記サブジェクト状態は、サブジェクト・プロセッサ・ユニット上の前記サブジェクト・コードの実行の状態を提供する、サブジェクト側例外ハンドラ・ユニットと、
前記信号生成器ユニットから前記例外信号を受け取り、前記ターゲット状態に関する前記例外信号を選択的に処理するように構成されたターゲット側例外ハンドラ・ユニットと、
を備え、前記ターゲット側例外ハンドラ・ユニットは、
各々が前記ターゲット状態に関する前記例外信号を選択的に処理し、実行に戻る要求又は前記例外信号を渡す要求を出力するように構成された複数の信号処理サブユニットと、
前記複数の信号処理サブユニットの選択されたグループへの前記例外信号の配送パスを決定するように構成された配送パス選択ユニットと、
前記配送パスに従って前記例外信号を前記複数の信号処理サブユニットの選択されたグループの各々に順に配送し、（ｉ）前記信号処理サブユニットのそれぞれが前記実行に戻る要求を出力した場合、前記ターゲット状態に応じて実行に戻り、（ｉｉ）前記信号処理サブユニットが前記例外信号を渡す要求を出力した場合、前記配送パスに従って前記例外信号を信号処理サブユニットの前記選択されたグループの次のものに渡し、（ｉｉｉ）前記配送パスにおいて前記信号処理サブユニットの更に別のものが指定されなかった場合、デフォルトで前記例外信号を前記サブジェクト側例外ハンドラ・ユニットに配送するように構成された信号制御ユニットと、
を備える、コンピュータ・システム。
【請求項２】
前記信号生成器ユニットは、複数の異なるタイプの１つとして前記例外信号を生成し、前記配送パス選択ユニットは、前記例外信号のタイプに応じて前記信号処理サブユニットのそれぞれのグループを含ませるように前記配送パスを決定する、請求項１に記載のコンピュータ・システム。
【請求項３】
前記配送パス選択ユニットは、前記信号処理サブユニットの選択されたグループへの前記例外信号の配送の順序を指定するように前記配送パスを決定するように構成され、前記信号制御ユニットは、前記配送順序に従った順序で、前記例外信号を前記信号処理サブユニットの選択されたグループに配送する、請求項１に記載のコンピュータ・システム。
【請求項４】
前記プロセッサ・ユニットは、前記翻訳器ユニット及び前記ターゲット・コードを実行し、それぞれ前記ターゲット・コード及び前記翻訳器ユニットに関連する、前記プロセッサ・ユニットにおける現在の実行の状態を表す前記ターゲット状態を提供するように構成され、
前記信号生成器ユニットは、前記ターゲット・コード及び前記翻訳器ユニットに関連する複数の前記例外信号を生成するように構成され、
前記信号処理サブユニットの少なくとも１つは、前記例外信号が前記翻訳器ユニットの実行の結果として得られたとき、前記ターゲット状態に関する前記例外信号のそれぞれ１つ又は複数を処理するように構成される、請求項１に記載のコンピュータ・システム。
【請求項５】
前記複数の信号処理サブユニットの各々は、
前記例外信号を受け取り、この例外信号を処理するかどうかを決定するように構成された入口ユニットと、
前記実行が前記例外信号に応答して異なるように再開するように前記ターゲット状態を選択的に修正することを含めて、前記入口ユニットが決定したとき、前記ターゲット状態に関する前記例外信号における所定の信号処理機能を果たすように構成された信号処理ユニットと、
前記実行に戻る要求又は前記例外信号を渡す要求のいずれかを出力するように構成された出口ユニットと、
を備える、請求項１に記載のコンピュータ・システム。
【請求項６】
前記サブジェクト側例外ハンドラは、
前記ターゲット状態を前記サブジェクト状態に変換するように構成された変換器ユニットと、
各々が前記サブジェクト状態に関する前記例外信号を選択的に処理し、前記例外信号を渡すか又は実行に戻ることを要求するかを決定するように構成された複数のサブジェクト側信号処理サブユニットと、
前記例外信号の配送パスを決定するように構成されたサブジェクト側配送パス選択ユニットであって、前記配送パスは前記複数のサブジェクト側信号処理サブユニットのうちの１つ又は複数の選択されたグループを指定する、サブジェクト側配送パス選択ユニットと、
前記サブジェクト側信号処理サブユニットの前記選択されたグループの各々に前記例外信号を順に渡し、前記サブジェクト側信号処理サブユニットの前記グループのそれぞれからの前記要求に応答して実行に戻るように構成されたサブジェクト側信号制御ユニットと、
を備える、請求項１に記載のコンピュータ・システム。
【請求項７】
前記変換器は、前記サブジェクト側信号制御ユニットが実行に戻ることを決定したとき、前記サブジェクト状態を前記ターゲット状態に再変換するようにさらに構成される、請求項６に記載のコンピュータ・システム。
【請求項８】
前記複数のサブジェクト側信号処理サブユニットの各々は、
前記例外信号を受け取り、この例外信号を処理するかどうかを決定するように構成された入口ユニットと、
前記実行が前記例外信号に応答して異なるように再開するように前記サブジェクト状態を選択的に修正することを含めて、前記入口ユニットが決定したときに、前記サブジェクト状態に関する前記例外信号における所定の信号処理機能を実施するように構成された信号処理ユニットと、
前記実行に戻る要求又は前記例外信号を渡す要求のいずれかを出力するように構成された出口ユニットと、
を備える、請求項６に記載のコンピュータ・システム。
【請求項９】
前記信号制御ユニットは、前記例外信号についての異なる配送パスを決定するために、前記配送パス選択ユニットを動的に再構成するように構成される、請求項１に記載のコンピュータ・システム。
【請求項１０】
少なくとも１つのプロセッサを有するコンピュータ・システムにおいて例外信号を処理する方法であって、前記方法は、
サブジェクト・コードを前記少なくとも１つのプロセッサによって実行可能なターゲット・コードに変換するコンピュータ実装ステップと、
前記少なくとも１つのプロセッサ上で前記ターゲット・コードを実行するコンピュータ実装ステップと、
前記ターゲット・コードの実行と関連して例外信号を生成するコンピュータ実装ステップと、
前記例外信号に関する信号配送パスを決定するコンピュータ実装ステップであって、前記信号配送パスが複数の信号処理サブユニットの中から選択された信号処理サブユニットのグループを指定する、ステップと、
前記信号配送パスに従って、前記例外信号を前記グループ内の前記信号処理サブユニットの第１のものに配送するコンピュータ実装ステップと、
前記信号処理サブユニットにおいて前記信号を処理するかどうかを決定し、処理する場合、前記例外を処理するために前記信号処理サブユニットにおいて前記信号を処理するコンピュータ実装ステップと、
実行に戻ることを要求するかどうかを判断し、要求する場合、実行に戻るか、又は前記信号配送パスに従って前記例外信号を前記グループの次の信号処理サブユニットに渡すコンピュータ実装ステップと、
前記グループ内の次の信号処理サブユニットと関連して前記決定するステップ及び前記判断するステップを繰り返すコンピュータ実装ステップと、
を含む方法。
【請求項１１】
前記例外信号に関する前記コンピュータ・システムの実行の状態に関連する情報を含むターゲット状態データ構造を提供することと、
前記ターゲット状態データ構造を選択的に修正することを含めて、前記ターゲット状態データ構造信号に関して前記信号処理サブユニットにおいて前記例外信号を処理することと、
をさらに含み、
前記判断するステップが実行に戻ることを要求すると判断した場合、前記ターゲット状態データ構造に従って実行に戻る、請求項１０に記載の方法。
【請求項１２】
前記例外信号をサブジェクト側例外処理ユニットに選択的に渡すことと、
前記ターゲット状態データ構造をサブジェクト状態データ構造に変換することと、
前記サブジェクト側例外処理ユニットにおいて前記サブジェクト状態データ構造に関する前記例外信号を処理することと、
をさらに含む、請求項１１に記載の方法。
【請求項１３】
少なくとも１つのプロセッサを有するコンピュータ・システムによって実行されるとき、前記コンピュータ・システムに、少なくとも、
実行可能なサブジェクト・コードを前記少なくとも１つのプロセッサによって実行可能なターゲット・コードに変換するステップと、
前記少なくとも１つのプロセッサ上で前記ターゲット・コードを実行するステップと、
前記ターゲット・コードの実行と関連して例外信号を生成するステップと、
前記例外信号に関する信号配送パスを決定するステップであって、前記信号配送パスは複数の信号処理サブユニットの中から選択された信号処理サブユニットのグループを指定する、ステップと、
前記信号配送パスに従って、前記例外信号を前記グループ内の前記信号処理サブユニットの第１のものに配送するステップと、
前記信号処理サブユニットにおいて前記信号を処理するかどうかを決定し、処理する場合、前記例外信号を処理するために前記信号処理サブユニットにおいて前記信号を処理するステップと、
実行に戻ることを要求するかどうかを判断し、要求する場合、前記例外信号の処理から実行に戻るか、又は前記信号配送パスに従って前記例外信号を前記グループの次の信号処理サブユニットに渡し、前記次の信号処理サブユニットと関連して前記決定するステップ及び前記判断するステップを繰り返すステップと、
を実行させる、命令が上に記録されたコンピュータ可読記録媒体。
【請求項１４】
前記命令はさらに、前記コンピュータ・システムに、
前記例外信号に関する前記コンピュータ・システムの実行の状態に関連する情報を含むターゲット状態データ構造を提供するステップと、
前記ターゲット状態データ構造を選択的に修正することを含めて、前記ターゲット状態データ構造信号に関する前記信号処理サブユニットにおいて前記例外信号を処理するステップと、
を実行させる、請求項１３に記載のコンピュータ可読記録媒体。
【請求項１５】
前記命令はさらに、前記コンピュータ・システムに、
前記例外信号をサブジェクト側例外処理ユニットに選択的に渡すステップと、
前記ターゲット状態データ構造をサブジェクト状態データ構造に変換するステップと、
前記サブジェクト側例外処理ユニットにおいて前記サブジェクト状態データ構造に関する前記例外信号を処理するステップと、
を実行させる、請求項１４に記載のコンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータ及びコンピュータ・システムの分野に関し、より特定的には、例えばコード翻訳器、エミュレータ、及びアクセラレータに有用なプログラム・コード変換方法及び装置との関連における例外信号の処理に関する。より具体的には、本発明の例示的な実施形態は、１つのコンピュータ・プラットフォームによって実行可能なバイナリ・コードから、別のコンピュータ・プラットフォームによって代わりに実行可能なバイナリ・コードへの動的変換と組み合わせた、例外信号の処理のための方法及び装置に関する。
【背景技術】
【０００２】
中央処理ユニット（ＣＰＵ）すなわちプロセッサは、全ての近代的なコンピュータ・システムの中心に位置する。プロセッサは、コンピュータ・プログラムの命令を実行し、ひいてはコンピュータ・プラットフォームが有用な仕事を行なうことができるようにする。ＣＰＵは、現代の生活において、パーソナル・コンピュータ、ラップトップ、及びＰＤＡなどの専用コンピュータ・マシンだけでなく、あらゆる形態のデジタル・デバイスとして普及している。現代のマイクロプロセッサは、自動車から携帯電話や子供の玩具に至るまであらゆるものに搭載されている。
【０００３】
各々のタイプのプロセッサはそれ自体の固有の命令セット・アーキテクチャ（ＩＳＡ）を有するため、１つのタイプのプロセッサによって実行可能なプログラム・コードは、いずれかの別のタイプのプロセッサによって実行不可能な場合があるという問題が生じる。従って、１つのタイプのプロセッサのために書かれたプログラム・コードを別のタイプのプロセッサによって実行可能なコードに自動的に変換するために、又は、同じタイプのプロセッサについてより古い非効率的なコードをより新しくより高速なバージョンに最適化するために、プログラム・コード変換が発展してきた。つまり、組み込みＣＰＵ及び非組み込みＣＰＵのいずれにおいても、大容量のソフトウェアが既に存在しており、性能の点で「処理能力を向上」させるか又はコスト／性能の点でより有利な他のプロセッサに合わせて「翻訳」することができる、支配的なＩＳＡが存在する。自らのＩＳＡに束縛されて性能又は市場の範囲を発展させることができない支配的なＣＰＵアーキテクチャも見られる。この問題は、独立型のポケット・サイズ・コンピュータ・デバイスから、何十何百もの強力なサーバを有する大規模ネットワークに至るまで、コンピュータ産業の全てのレベルにおいて当てはまる。
【０００４】
このプログラム・コード変換分野の背景情報として、発明の名称を「Program Code Conversion」とする特許文献１、発明の名称を「Methodand Apparatus for Performing Interpreter Optimizations during Program CodeConversion」とする特許文献２、発明の名称を「Improved Architecture forGenerating Intermediate Representations for Program Code Conversion」とする特許文献３、発明の名称を「Method and Apparatus for Performing Adjustable Precision ExceptionHandling」とする特許文献４、及び発明の名称を「Method and Apparatus forPrecise Handling of Exceptions During Program Code Conversion」とする特許文献５は、本明細書において説明される例示的な実施形態において用いることができるようなプログラム・コード変換能力を高める方法及び装置を開示する。
【０００５】
１つの具体的な問題領域は、例外信号（exception signal）の処理に関するものである。例外（exception）とは、プログラムにおける正常な制御フローを変化させる状況である。例外信号は、プロセッサの注意を必要とし、通常、処理を続行可能にする前に処理される必要がある状況が、システム内のどこかで発生したことを示す。例外は、割り込み、違反（fault）、トラップ、又は異常終了といった種々の異なるタイプに細分することができる。用語は異なるアーキテクチャ間で異なり、特定のタイプ又はカテゴリの例外は、特定のアーキテクチャに固有のものとすることができる。
【０００６】
例外信号（単に「信号」と呼ばれることが多い）は、ハードウェア又はソフトウェアによって生成する（もたらす）ことができる。ハードウェア例外には、リセット、割り込みのような信号、又はメモリ管理ユニットからの信号が含まれる。例として、例外は、ゼロ除算などの数値エラーの場合、オーバーフロー又はアンダーフローの場合、或いは特権命令、予約命令、トラップ命令、又は未定義の命令などの命令デコード・エラーの場合に、算術論理ユニット又は浮動小数点ユニットによって生成することができる。ソフトウェア例外は、種々の異なるソフトウェア・プログラムによって大きく異なるが、一般に、プログラムの正常な動作を変える任意の種類のエラー検査に対しても適用可能である。
【０００７】
信号ハンドラは、プログラムの実行中に例外信号が生じたときに呼び出される特別なコードである。次に、信号ハンドラは、例外を生じさせた如何なる環境にも対処し、可能な場合はプログラムを実行し続けようと試みる。プログラムが所定の信号に関する信号ハンドラを提供しない場合、デフォルトのシステム・信号ハンドラが呼び出される。
【０００８】
例外信号をトリガする最も一般的なイベントは、プロセスが、（ｉ）マッピングされていないメモリ領域にアクセスしようとした場合、又は（ｉｉ）正しい許可を有していないメモリ領域を操作しようとした場合である。例外信号をトリガする他の一般的なイベントは、（ｉｉｉ）別のプロセスから送られた信号の受信、（ｉｖ）現在のプロセスが実行の特権レベルを有していない命令の実行、又は（ｖ）ハードウェアにおける入力／出力イベントである。
【０００９】
表１に、幾つかの代表的な例外信号が説明される。ターゲット・コンピュータ・プラットフォームの観点から、各々のタイプの信号は、通常、整数番号＃１、＃２、＃３等である対応する信号番号を有する。また、表に示されるように、各々の信号が記憶すべき記号名を有することが一般的である。
【表１】
2010525440.tif 000003
【００１０】
例外信号は、２つの供給源に由来し得る。すなわち（１）実行しているプログラムから直接に、又は（２）オペレーティング・システム又は別のプロセスからである。幾つかの例外信号は、プログラムが実行する命令の直接的な結果として生成される。例えば、プログラムが違法のオペコードを実行した場合、SIGILLがもたらされる。同様に、プログラムが、違法のメモリ・アクセスを試みた場合、SIGSEGVがもたらされる。これらは帯域内（in-band）信号と呼ばれる。例外信号はまた、オペレーティング・システムによって、或いは別のプロセスによってなど、外部で生成されることもある。SIGHUP及びSIGALRMは、これらの例である。これらの外部で生成される例外信号は、帯域外（out-of-band）信号と呼ばれる。
【００１１】
プログラムの観点から、例外信号は、如何なる時点でも生じる可能性がある。例外信号が生じると、オペレーティング・システムは、信号が送られたプログラムの実行に割り込みをかけて、信号ハンドラを呼び出す。オペレーティング・システムは、通常、全ての例外に対するデフォルトの信号ハンドラを定めており、このデフォルト信号ハンドラは、デフォルトで例外信号を受信し、所定のアクションをとるか又は単に信号を無視する。しかしながら、オペレーティング・システムは、各タイプの信号を登録された信号ハンドラにマッピングするプロセス特有の処理表を保持する。例えば、Ｕｎｉｘでは、プログラムは、sigaction()システム・コールを呼び出すことによって、デフォルトの信号ハンドラをオーバーライドすることができる。Sigaction()により、プログラムは、特定の例外信号を受け取ったときに、オペレーティング・システムがどのアクションをとるべきかを指定することができる。アクションは、（１）例外信号を無視する、（２）デフォルトの信号ハンドラを呼び出す、或いは（３）プログラムがアドレスを提供する、特化された信号ハンドラ機能を呼び出す、ものとすることができる。sigaction()コールを行なうときに指定できる他の選択肢は、信号ハンドラの実行中に、ＣＰＵが特定の割り込みを隠すことができるのとほぼ同じ方法で、他の信号のどれをブロックするのか、を含む。
【００１２】
Ｕｎｉｘ信号ハンドラには、一般に、２つのプロトタイプの一方が与えられる。第１の信号ハンドラ・プロトタイプは、「void sigHandler（int sigNum）」である。第１の引数は、例外信号の数であるため、多数の信号を処理するために１つの関数を登録することができる。プログラムは、SA_SIGINFOＯフラグを用いてsigaction()を呼び出すことによって、より多くの情報を信号ハンドラに提供するように要求することができる。この場合、Ｕｎｉｘ信号ハンドラ・プロトタイプは、「void sigHandler(intsigNum, siginfo_t sigInfo, void*context)」になる。
【００１３】
第２のパラメータ（「siginfo」）は、信号についての情報を含む構造であり、信号が生じた原因及び信号の出所についての何らかの表示を含んでいる。例えば、SIGILL信号の場合、siginfo構造は、違法命令のアドレスを含む。このデータは、プロセスが信号を適切に処理できるためには、不可欠なものであり得る。第３のパラメータ（「コンテキスト」）は、信号がもたらされたときのプロセッサ状態（全てのレジスタを含む）に対するアクセスを与える。この場合も、このデータは、信号の正しい処理を可能にするために、不可欠なものであり得る。信号ハンドラは、このコンテキストを変更することが許容されており、実行が再開されると、レジスタは、変更されたコンテキストの値に回復される。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】ＷＯ２０００／２２５２１号明細書
【特許文献２】ＷＯ２００４／０９５２６４号明細書
【特許文献３】ＷＯ２００４／０９７６３１号明細書
【特許文献４】ＷＯ２００５／００６１０６号明細書
【特許文献５】ＷＯ２００６／１０３３９５号明細書
【特許文献６】ＷＯ２００５／００８４７８号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１５】
元のプログラム・コード（ここでは「サブジェクト・コード（subject code）」と呼ばれる）が特定のタイプのプロセッサに従って書かれた場合、サブジェクト・コードは、特定のタイプの実行環境を必要とし、例外信号の処理のための適切な機構によってサポートされることが必要である。しかしながら、プログラム・コード変換において、サブジェクト・コードは、代わりにターゲット・コード（target code）に変換され、ターゲット・コンピュータ・システム上で実行される。例外が生じたとき、今や例外を処理する適切な機構を提供することに関連する困難が存在する。
【００１６】
プログラム・コード変換の分野において、ターゲット命令がターゲット・プロセッサ上で実行され、例外信号が報告されたとき、ターゲット命令は、通常、サブジェクト・コードで書かれた信号ハンドラに例外を報告するための条件を満たさないことは明らかである。第１に、サブジェクト・コードが書かれたサブジェクト・プロセッサの命令セットと、ターゲット・コードが実行されるターゲット・プロセッサとの間の相違のために、第２に、一般にプログラム・コード変換中に行なわれる最適化のために、命令は、ターゲット・プロセッサ上では、殆どの場合、サブジェクト・コードの対応するブロック内の命令の順序とは異なる順序で実行される。従って、信号ハンドラにターゲット状態を提供するのは比較的容易であるが、元のサブジェクト・コードの実行における同等の点を表す正確なサブジェクト状態を得るのは困難であり、費用がかかる。
【００１７】
特に、プログラム・コード変換を行なう翻訳器（translator）の実行及び翻訳器が生成するターゲット・コードの実行がインターリーブされ、ターゲット・コンピュータ・プラットフォーム上で同じ実行プロセスを共有することもできる動的プログラム・コード変換の分野においては、さらなる問題が生じる。大部分のシステムにおいて、限られた数の例外信号しか存在しない。例えば、たった１つのSIGALRM信号しかなく、このSIGALRM信号を翻訳器とターゲット・コードとの間で共有する必要があり得る。その結果、ターゲット・コードが翻訳器の実行に悪影響を及ぼすことなしに、元のサブジェクト・コードを正確にエミュレートすることは困難であり、或いは逆に、翻訳器のサブジェクト・コードが、ターゲット・コードの実行に悪影響を及ぼすことなしに、プログラム・コード変換を効率的に行なうことは困難である。ターゲット・コンピュータ・プラットフォーム内の使用可能な信号が使い尽くされる可能性があり、最悪の場合、プログラム・コード変換プロセスを終了しなければならない。
【００１８】
信号を広く利用するようにサブジェクト・コードが書かれているが、それらは、今や、ターゲット・コンピュータ・プラットフォーム上で使用可能な信号の数又はタイプによってサポートすることができないという、更に別の問題が生じる。
【００１９】
以下でより詳細に説明されるように、本発明の例示的な実施形態によって従来技術のこれらの問題及び他の問題に対処する。
【課題を解決するための手段】
【００２０】
本発明によると、添付の特許請求の範囲に示されるコンピュータ・システム、コンピュータ可読ストレージ媒体、及び方法が提供される。本発明の他の特徴は、従属請求項及び以下の説明から明らかとなるであろう。
【００２１】
以下は、本発明の実施形態に従って実現可能な種々の態様及び利点の概要である。これは当業者の役に立ち、以下の詳細な設計の説明をより迅速に理解させるための導入として提供されるものであり、本明細書に添付される特許請求の範囲を如何なる形においても限定するものではなく、また限定することを意図しない。
【００２２】
特に、発明者らは、プログラム・コード変換に向けられた方法を開発した。これらの方法は、動的実行時翻訳又はバイナリ・プログラム・コードの高速化（acceleration）を提供する実行時翻訳器と共に用いると、特に有用である。
【００２３】
本発明の１つの例示的な態様において、サブジェクト・コードをターゲット・コードに変換するように構成された翻訳器ユニットと、ターゲット・コードを実行し、プロセッサ・ユニットにおけるターゲット・コードの実行に関するターゲット状態を提供するように構成されたプロセッサ・ユニットと、ターゲット・コードの実行に応答して例外信号を生成するように構成された信号生成器ユニットと、例外信号を処理するように構成された例外処理ユニットとを含むコンピュータ・システムが提供される。ここで、例外処理ユニットは、信号生成器ユニットから例外信号を受け取り、ターゲット状態に関する例外信号を選択的に処理するように構成されたターゲット側例外ハンドラ・ユニットと、ターゲット側例外処理ユニットから例外信号を受け取り、サブジェクト状態に関する例外信号を処理するように構成されたサブジェクト側例外ハンドラ・ユニットとを含み、サブジェクト状態は、ターゲット状態から得られる。ターゲット側例外ハンドラ・ユニットは、各々がターゲット状態に関する例外信号を選択的に処理し、実行に戻る要求（request to return to execution）又は例外信号を渡す要求（requestto pass on exceptional signal）を出力するように構成された複数の信号処理サブユニットと、複数の信号処理サブユニットの選択されたグループへの例外信号の配送パス（delivery path）を決定するように構成された配送パス選択ユニットと、配送パスに従って例外信号を信号処理サブユニットの選択されたグループの各々に順に配送し、（ｉ）信号処理サブユニットのそれぞれが実行に戻る要求を出力した場合、ターゲット状態に応じて実行に戻り、（ｉｉ）信号処理サブユニットが例外信号を渡す要求を出力した場合、配送パスに従って例外信号を信号処理サブユニットの選択されたグループの次のものに渡し、（ｉｉｉ）配送パスにおいて信号処理サブユニットの更に別のものが指定されなかった場合、デフォルトで例外信号をサブジェクト側例外ハンドラ・ユニットに配送するように構成された配送パス選択ユニットとを含む。
【００２４】
一実施形態において、信号生成器ユニットは、複数の異なるタイプの１つとして例外信号を生成し、配送パス選択ユニットは、例外信号のタイプに応じて配送パスを決定する。随意的に、配送パス選択ユニットは、異なるタイプの例外信号の組をそれぞれ信号処理サブユニットのそれぞれのグループにマッピングする表を含む。随意的に、表は、各タイプの例外信号を、信号処理サブユニットのうちの０、１、又は複数のものを含むそれぞれのグループにマッピングする。ここで表は、複数の信号処理サブユニットを含む少なくとも１つのグループを含む。
【００２５】
一実施形態において、配送パス選択ユニットは、信号処理サブユニットの選択されたグループへの例外信号の配送順序を指定し、信号制御ユニットは、配送順序に従って、例外信号を信号処理サブユニットの選択されたグループに配送する。
【００２６】
一実施形態において、信号生成器ユニットは、少なくともその一部が遮断可能（interceptable）である複数の例外信号を生成するように構成され、例外処理ユニットは、遮断可能な例外信号のうちの１又は複数を受け取るように、信号処理ユニットに登録される。
【００２７】
一実施形態において、プロセッサ・ユニットは、翻訳器ユニット及びターゲット・コードの両方を実行し、それぞれターゲット・コード及び翻訳器ユニットに関連する、プロセッサ・ユニットにおける現在の実行の状態を表すターゲット状態を提供するように構成され、信号生成器ユニットは、ターゲット・コードの実行及び翻訳器ユニットに関連して複数の例外信号を生成するように構成され、翻訳器ユニットの実行の結果として例外信号が生じたとき、信号処理サブユニットの少なくとも１つは、ターゲット状態に関する例外信号のうちのそれぞれ１つ又は複数を処理するように構成される。随意的に、例外信号がターゲット・コードの実行の結果として生じたとき、信号処理サブユニットの少なくとも１つは、ターゲット状態に関する同じ例外信号又は少なくとも同じタイプの例外信号を処理するように構成される。
【００２８】
一実施形態において、サブジェクト側例外ハンドラは、例外信号がターゲット・コードの実行の結果として生じたときのみ、ターゲット状態から得られるサブジェクト状態に関する例外信号を処理するように構成される。従って、サブジェクト側例外ハンドラは、例外信号が翻訳器ユニットの実行の結果として生じたときには例外信号を処理しない。
【００２９】
一実施形態において、配送パス選択ユニットは、特にサブジェクト側例外ハンドラ・ユニットを含ませるように、少なくとも１つのタイプの例外信号についての配送パスを決定し、信号制御ユニットは、配送パスに従って、例外信号をサブジェクト側例外ハンドラ・ユニットに配送する。
【００３０】
一実施形態において、信号制御ユニットは、配送パスに従って例外信号を信号処理サブユニットの選択されたグループの各々に配送した後、例外信号をサブジェクト側ハンドラ・ユニットに配送するように構成される。
【００３１】
一実施形態において、例外処理ユニットは、例外信号に続くクラッシュに関連するプロセッサ・ユニットの実行の状態に関するクラッシュ・レポート・データ構造を生成及び格納し、実行に戻るか又は実行を終了するように構成されたクラッシュ・レポータ・ユニットの少なくとも１つと、所定の例外処理プロトコルに従って例外信号を処理し、実行に戻るか又は実行を終了するように構成されたデフォルト・ハンドラ・ユニットとをさらに含む。随意的に、配送パス選択ユニットは、クラッシュ・レポータ・ユニット及び／又はデフォルト・ハンドラ・ユニットを含ませるように配送パスを決定する。信号制御ユニットは、配送パスに従って例外信号をそれぞれクラッシュ・レポータ・ユニット及びデフォルト・ハンドル・ユニットに配送する。随意的に、信号制御ユニットは、配送パスに従って例外信号を信号処理サブユニットの選択されたグループの各々及びサブジェクト側例外ハンドラ・ユニットに配送した後、例外信号をクラッシュ・レポータ・ユニット及び／又はデフォルト・ハンドラ・ユニットに配送するように構成される。
【００３２】
一実施形態において、複数の信号処理サブユニットの各々は、例外信号を受け取り、この例外信号を処理するかどうかを決定するように構成された入口ユニットと、実行が例外信号に応答して異なるように再開するようにターゲット状態を選択的に修正することを含めて、入口ユニットによって決定されたときにターゲット状態に関する例外信号の所定の信号処理機能を実行するように構成された信号処理ユニットと、実行に戻る要求又は例外信号を渡す要求のいずれかを出力するように構成された出口ユニットとを含む。随意的に、ターゲット状態は、例外信号に関する情報を含む信号情報データ構造を含む。随意的に、ターゲット状態は、例外信号に関するプロセッサ・ユニットのコンテキストに関連する情報を含む信号コンテキスト・データ構造を含む。
【００３３】
一実施形態において、サブジェクト側例外ハンドラは、ターゲット状態をサブジェクト状態に変換するように構成された変換器ユニットと、各々がサブジェクト状態に関する例外信号を選択的に処理し、例外信号を渡す要求又は実行に戻る要求のいずれかを決定するように構成された複数のサブジェクト側信号処理サブユニットと、例外信号の配送パスを決定するように構成されたサブジェクト側配送パス選択ユニットであって、配送パスは複数のサブジェクト側信号処理サブユニットの中の１つ又は複数の選択されたグループを指定する、サブジェクト側配送パス選択ユニットと、例外信号をサブジェクト側信号処理サブユニットの選択されたグループの各々に順に渡し、サブジェクト側信号処理サブユニットのグループのそれぞれからの要求に応答して実行に戻るように構成されたサブジェクト側信号制御ユニットとを含む。随意的に、サブジェクト側信号制御ユニットが実行に戻ることを決定したとき、変換器は、サブジェクト状態をターゲット状態に再変換するようにさらに構成される。
【００３４】
一実施形態において、複数のサブジェクト側信号処理サブユニットの各々は、例外信号を受け取り、この例外信号を処理するかどうかを決定するように構成された入口ユニットと、例外信号に応答して実行が異なるように再開するようにサブジェクト状態を選択的に修正することを含めて、入口ユニットによって決定されたときにサブジェクト状態に関する例外信号の所定の信号処理機能を実行するように構成された信号処理ユニットと、実行に戻る要求又は例外信号を渡す要求のいずれかを出力するように構成された出口ユニットとを含む。随意的に、サブジェクト状態は、変換された形態の例外信号に関する情報を含むサブジェクト信号情報データ構造を含む。随意的に、サブジェクト状態は、変換された形態の例外信号に関するエミュレートされたサブジェクト・プロセッサのコンテキストに関する情報を含むサブジェクト信号コンテキスト・データ構造を含む。
【００３５】
一実施形態において、信号制御ユニットは、例外信号についての異なる配送パスを決定するために配送パス選択ユニットを動的に再構成するように構成される。随意的に、信号制御ユニットは、配送パス選択ユニットを再構成して、特定のタイプの例外信号についての配送パスを付加し、修正し、又は置き換えるように構成される。随意的に、信号制御ユニットは、配送パス選択ユニットを再構成して、特定のタイプの例外信号についての配送パスに従って、選択されたグループ内の信号処理サブユニットの１つ又は複数を付加し、修正し、又は置き換えるように構成される。
【００３６】
一実施形態において、サブジェクト・コードは、サブジェクト・タイプのプロセッサによって直接実行可能なバイナリ・プログラム・コードである。
【００３７】
一実施形態において、ターゲット・コードは、プロセッサ・ユニットによって直接実行可能なバイナリ・プログラム・コードである。
【００３８】
一実施形態において、翻訳器ユニットは、第１のタイプのプロセッサによって直接実行可能なバイナリ・プログラム・コードであるサブジェクト・コードを、プロセッサ・ユニットによって直接実行可能なバイナリ・プログラム・コードであるターゲット・コードに変換するように構成される。
【００３９】
一実施形態において、翻訳器ユニットは、第１のタイプのプロセッサによる実行のために書かれたサブジェクト・コードを、異なる両立性のない第２のタイプのプロセッサ・ユニットによって実行されるターゲット・コードに翻訳するように構成される。
【００４０】
一実施形態において、翻訳器ユニットは、第１のタイプのプロセッサによる実行のために書かれたサブジェクト・コードを、同じ第１のタイプのプロセッサ・ユニットによってより効率的に実行されるターゲット・コードに最適化するように構成される。
【００４１】
本発明の別の態様において、少なくとも１つのプロセッサを有するコンピュータ・システムにおけて例外信号を処理する方法が提供され、この方法は、サブジェクト・コードを少なくとも１つのプロセッサによって実行可能なターゲット・コードに変換するコンピュータ実装ステップと、少なくとも１つのプロセッサ上でターゲット・コードを実行するコンピュータ実装ステップと、ターゲット・コードの実行と関連して例外信号を生成するコンピュータ実装ステップと、信号配送パスが複数の信号処理サブユニットの中から選択された信号処理サブユニットのグループを指定する場合、例外信号に関する信号配送パスを決定するコンピュータ実装ステップと、信号配送パスに従って例外信号をグループ内の信号処理サブユニットの第１のものに配送するコンピュータ実装ステップと、信号処理サブユニットにおいて信号を処理するかどうかを決定し、処理する場合、例外を処理するために信号処理サブユニットにおいて信号を処理するコンピュータ実装ステップと、実行に戻ることを要求するかどうかを判断し、要求する場合、実行に戻るか、又は信号配送パスに従って例外信号をグループ内の次の信号処理サブユニットに渡すコンピュータ実装ステップと、次の信号処理サブユニットと関連して決定するステップ及び判断するステップを繰り返すコンピュータ実装ステップとを含む。
【００４２】
本発明の更に別の態様において、サブジェクト・プロセッサ・タイプによって実行可能なサブジェクト・コードを少なくとも１つのプロセッサによって実行可能なターゲット・コードに変換するコンピュータ実装ステップと、少なくとも１つのプロセッサ上でターゲット・コードを実行するコンピュータ実装ステップと、ターゲット・コードの実行と関連して例外信号を生成するコンピュータ実装ステップと、例外信号と関連するコンピュータ・システムの実行の状態を表す情報を含むターゲット状態データ構造だけを参照して、例外信号を処理するかどうかを決定し、例外信号を処理しない場合、ターゲット状態データ構造を、例外信号に関連するサブジェクト・プロセッサ・タイプにおけるサブジェクト・コードの実行のエミュレートされた状態を表す情報を含むサブジェクト状態データ構造に変換するコンピュータ実装ステップと、サブジェクト状態データ構造に関する例外信号を処理するコンピュータ実装ステップとを含む、コンピュータ・システムにおいて例外信号を処理する方法が提供される。
【００４３】
例示的な実施形態は、ターゲット状態のみを参照して少なくとも何らかのタイプの例外信号を処理し、よって、ターゲット状態をサブジェクト状態に変換する必要がある機会の数を低減させる。その結果、コンピュータ・システムは、より高速かつより効率的に実行可能になる。
【００４４】
さらに、本発明の例示的な実施形態は、特定のタイプの例外信号を、各々が例外を調べて処理する機会を有する多数の信号処理サブユニットに配送するように構成される。従って、例外信号は、多数の異なる目的を顕在化させる。この機構は、ターゲット・コードと翻訳器との間で共有される、警報（alarm）信号のような単一のタイプの例外信号を可能にする。
【００４５】
ここに述べられる例示的な実施形態においてさらに、ターゲット・コンピュータ・プラットフォームは著しく異なる数又はタイプの例外信号を有し得るが、ターゲット・コードに変換され、ターゲット・コンピュータ・プラットフォーム上で実行されたとき、信号を広く利用するサブジェクト・コードが容易にサポートされる。
【００４６】
本発明は、コンピュータ・システムによって実施されたとき、ここに定義された方法のいずれかを行なう命令が上に記録されたコンピュータ可読記憶媒体にも拡張される。
【００４７】
本発明の少なくとも幾つかの実施形態は、部分的に又は全体的に専用ハードウェアを用いて構成することができる。本明細書において用いられる「コンポーネント」、「モジュール」、又は「ユニット」といった用語は、特定のタスクを実施するField Programmable Gate Array（ＦＰＧＡ）又はApplicationSpecific Integrated Circuit（ＡＳＩＣ）といったハードウェア・デバイスを含むが、これらに限定されるものではない。代替的に、本発明の要素は、アドレス可能なストレージ媒体に常駐するように設定してもよく、１つ又は複数のプロセッサ上で実行されるように設定してもよい。従って、幾つかの実施形態においては、本発明の機能的要素は、例として、ソフトウェア・コンポーネント、オブジェクト指向ソフトウェア・コンポーネント、クラス・コンポーネント、及びタスク・コンポーネントなどのコンポーネント、プロセス、関数、属性、プロシージャ、サブルーチン、プログラム・コードのセグメント、ドライバ、ファームウェア、マイクロコード、回路、データ、データベース、データ構造、表、アレイ、並びに変数を含むものとすることができる。さらに、以下で説明されるコンポーネント、モジュール、及びユニットを参照して好ましい実施形態を説明したが、こうした機能的要素を組み合わせてより少ない要素にしてもよく、又は分離して付加的な要素としてもよい。
【００４８】
本明細書に組み込まれ、その一部を構成する添付図面は、現時点での好ましい実施形態を示すものであり、以下のように説明される。
【図面の簡単な説明】
【００４９】
【図１】本発明の実施形態が応用される装置を示すブロック図を示す。
【図２】本発明の実施形態によって用いられるプログラム・コード変換プロセスの概略図を示す。
【図３】本発明の例示的な実施形態における例外処理中の制御フローを示す概略図である。
【図４】例外処理に関連する例示的なコンピュータ・システムの一部を示す概略図である。
【図５】例示的な信号処理サブユニットを示す概略図である。
【図６】本発明の例示的な実施形態に従って例外信号を処理する方法を示す概略的なフロー図である。
【図７】例外処理に関連する例示的なコンピュータ・システムの一部を示す概略図である。
【図８】本発明の例示的な実施形態に従って例外信号を処理する更に別の方法を示す概略的なフロー図である。
【図９】例外処理に関連する例示的なコンピュータ・システムの一部をさらに示す概略図である。
【図１０】例外処理に関連する例示的なコンピュータ・システムの一部を示す別の概略図である。
【図１１】例外処理に関連する例示的なコンピュータ・システムの一部をさらに示す概略図である。
【図１２】例外処理に関連する例示的なコンピュータ・システムの一部をさらに示す別の概略図である。
【発明を実施するための形態】
【００５０】
以下の説明は、当業者が、本発明を利用するのを可能するために提供され、本発明を実施する、発明者らによって考えられる最良の形態を示している。しかしながら、当業者であれば、ここに説明されるような本発明の一般的な原理に基づいて、種々の修正物及び等価物が容易に明らかであろう。
【００５１】
図１は、以下でより詳細に説明されるコンポーネント、モジュール、及びユニットを紹介するために、本発明の例示的な実施形態を適用することができるシステム及び環境の概要を与えるものである。図１を参照すると、サブジェクト・コード１７は、少なくとも１つのサブジェクト・プロセッサ３を有するサブジェクト・コンピュータ・プラットフォーム１上で実行することを目的としている。しかしながら、その代わりにターゲット・コンピュータ・プラットフォーム１０を用いて、プログラム・コード変換を行なう翻訳器ユニット１９を通じてサブジェクト・コード１７が実行される。翻訳器ユニット１９は、サブジェクト・コード１７からターゲット・コード２１へのコード変換を行ない、それにより、ターゲット・コード２１はターゲット・コンピュータ・プラットフォーム１０上で実行可能となる。
【００５２】
当業者にはよく知られているように、サブジェクト・プロセッサ３は、サブジェクト・レジスタ５の組を有する。サブジェクト・メモリ８は、特に、サブジェクト・コード１７とサブジェクト・オペレーティング・システム２とを保持する。同様に、図１における例示的なターゲット・コンピュータ・プラットフォーム１０は、複数のターゲット・レジスタ１５を有する少なくとも１つのターゲット・プロセッサ１３と、ターゲット・オペレーティング・システム２０、サブジェクト・コード１７、翻訳器ユニット１９、及び翻訳済みターゲット・コード２１を含む複数の動作コンポーネントを格納するためのメモリ１８とを備える。ターゲット・コンピュータ・プラットフォーム１０は、典型的には、マイクロプロセッサ・ベースのコンピュータ又は他の適切なコンピュータである。
【００５３】
一実施形態において、翻訳器ユニット１９は、最適化されているかどうかに関わらず、サブジェクト命令セット・アーキテクチャ（ＩＳＡ）のサブジェクト・コードを別のＩＳＡの翻訳済みターゲット・コードに翻訳するエミュレータである。別の実施形態においては、翻訳器１９は、ターゲット・コンピュータ・プラットフォームの性能を改善する種々の最適化を実行しながら、サブジェクト・コードを、同じＩＳＡのターゲット・コードの各々に変換するためのアクセラレータ（accelerator）として機能する。
【００５４】
翻訳器ユニット１９は、翻訳器を実装するソース・コードのコンパイル・バージョンであることが適切であり、ターゲット・プロセッサ１３上でオペレーティング・システム２０と共に実行される。図１に示される構造は単なる例であり、例えば、本発明の実施形態によるソフトウェア、方法、及びプロセスは、オペレーティング・システム２０の内部又は下層に常駐するコードで実装してもよいことが認識されるであろう。当業者には周知のように、サブジェクト・コード１７、翻訳器ユニット１９、オペレーティング・システム２０、及びメモリ１８のストレージ機構は、様々なタイプのもののいずれかとすることができる。
【００５５】
図１による装置において、プログラム・コード変換は、ターゲット・コード２１の実行中にターゲット・アーキテクチャ１０上で実行されるように実行時に動的に行なわれる。即ち、翻訳器１９は、翻訳済みターゲット・コード２１とインラインで動作する。翻訳器１９を通してサブジェクト・コード１７を実行することには、交互に実行される２つの異なるタイプのコード、すなわち、翻訳器ユニット１９とターゲット・コード２１とが関わる。従って、ターゲット・コード２１は、実行時全体を通して、翻訳中のプログラムの格納済みサブジェクト・コード１７に基づき翻訳器ユニット１９によって生成される。
【００５６】
一実施形態において、翻訳器ユニット１９は、サブジェクト・プロセッサ３及び特にサブジェクト・レジスタ５などのサブジェクト・アーキテクチャ１の関連部分をエミュレートしながら、実際にはターゲット・プロセッサ１３上でターゲット・コード２１としてサブジェクト・コード１７を実行する。好ましい実施形態においては、少なくとも１つのグローバル・レジスタ・ストア２７（サブジェクト・レジスタ・バンク２７又は抽象レジスタ・バンク２７とも呼ばれる）が設けられる。マルチプロセッサ環境においては、サブジェクト・プロセッサのアーキテクチャに応じて、随意的に１つより多い抽象レジスタ・バンク２７が設けられる。サブジェクト状態の表現は、翻訳器１９及びターゲット・コード２１のコンポーネントによって与えられる。つまり、翻訳器１９は、サブジェクト状態を、変数及び／又はオブジェクトといった種々の明示的なプログラミング言語デバイスに格納する。これに対し、翻訳済みターゲット・コード２１は、サブジェクト・プロセッサ状態を、ターゲット・コード２１のターゲット命令によって操作されるターゲット・レジスタ１５及びメモリ位置１８に非明示的に与える。例えば、グローバル・レジスタ・ストア２７の低レベル表現は、単なる割り当てメモリの領域である。しかしながら、翻訳器１９のソース・コードにおいては、グローバル・レジスタ・ストア２７は、より高レベルでアクセス及び操作することができるデータ・アレイ又はオブジェクトである。
【００５７】
好適には、翻訳器１９は、サブジェクト・コード１７を複数の翻訳ユニット又はブロックに分割する。一般的に、これらのサブジェクト・コード・ブロックの各々は、サブジェクト・コードの１つの基本ブロック（basic block）に対応する。「基本ブロック」という用語は、当業者にはよく知られている。つまり、各基本ブロックは、単一の入口点における第１の命令と単一の出口点における最後の命令（例えば、ジャンプ、呼び出し、又は分岐などの命令）との間の連続的な命令の組である。従って、基本ブロックは、正確に１つの入口点と正確に１つの出口点とを有するコードの一部であり、ブロック・コードを単一の制御パスに制限するものである。従って、基本ブロックは、制御フローの有用な基本単位である。翻訳器１９は、これらの基本ブロックのうちの１つのみを選択するか（ブロック・モード）、又は基本ブロックのグループを選択する（グループ・ブロック・モード）ことができる。グループ・ブロックは、好適には、単一のユニットとしてもとめて処理される２つ又はそれ以上の基本ブロックを含む。さらに、翻訳器は、サブジェクト・コードの同じ基本ブロックを表すが異なるエントリ条件下にある等ブロック（iso-block）を形成してもよい。
【００５８】
好ましい実施形態においては、元のサブジェクト・コード１７からターゲット・コード２１を生成するプロセスの一部として、サブジェクト命令シーケンスに基づいて中間表現（ＩＲ）木（trees of intermediate Representation）が生成される。ＩＲ木は、サブジェクト・コードによって計算された表現及び行われた演算の抽象表現である。後に、ＩＲ木に基づいて、ターゲット・コード２１が生成される（移植される（planted））。ＩＲノードの集合は、実際には有向非巡回グラフ（ＤＡＧ）であるが、口語的な表現では「木」と呼ばれる。
【００５９】
当業者であれば分かるように、一実施形態においては、翻訳器１９は、Ｃ＋＋などのオブジェクト指向プログラミング言語を用いて実装される。例えば、ＩＲノードは、Ｃ＋＋オブジェクトとして実装され、他のノードへの参照は、それらの他のノードに対応するＣ＋＋オブジェクトへのＣ＋＋参照として実装される。従って、ＩＲ木は、互いに対する種々の参照を含むＩＲノード・オブジェクトの集合として実装される。
【００６０】
さらに、説明している実施形態においては、ＩＲの生成は、サブジェクト・コード１７が実行されるように意図されるサブジェクト・アーキテクチャの特定の特徴に対応するレジスタ定義の組を用いる。例えば、サブジェクト・アーキテクチャ上の各々の物理レジスタ（すなわち、図１のサブジェクト・レジスタ５）について、固有のレジスタ定義が存在する。従って、翻訳器におけるレジスタ定義は、ＩＲノード・オブジェクト（すなわち、ＩＲ木）への参照を含むＣ＋＋オブジェクトとして実装することができる。レジスタ定義の組によって参照される全てのＩＲ木の集合体は、作業ＩＲ森（working IR forest）と呼ばれる（各々が１つのＩＲ木を参照する複数の抽象レジスタのルートを含むため、「森」と呼ばれる）。これらのＩＲ木及び他のプロセスは、好適には翻訳器１９の一部を形成する。
【００６１】
図１は、さらに、ターゲット・アーキテクチャ１０のメモリ１８の中のネイティブ・コード２８を示す。サブジェクト・コード１７の実行時翻訳の結果として得られるターゲット・コード２１と、ターゲット・アーキテクチャのために直接書かれた又はコンパイルされたネイティブ・コード２８との間には、違いがある。幾つかの実施形態においては、翻訳器１９は、サブジェクト・コードの制御フローが、サブジェクト・コードのネイティブ・バージョンが存在するサブジェクト・ライブラリなどのサブジェクト・コード１７のセクションに入ったことを検出したときに、ネイティブ・バインディングを実施する。翻訳器１９は、サブジェクト・コードを翻訳する代わりに、等価なネイティブ・コード２８をターゲット・プロセッサ１３上で実行させる。例示的な実施形態においては、翻訳器１９は、特許文献６においてより詳細に説明されているように、ネイティブ・コード呼び出しスタブ又はターゲット・コード呼び出しスタブなどの定められたインターフェースを用いて、生成されたターゲット・コード２１をネイティブ・コード２８にバインドする。
【００６２】
図２は、ターゲット・コンピュータ・プラットフォーム１０上で実行されているときの翻訳器ユニット１９をより詳細に示す。上述のように、翻訳器１９のフロント・エンドはデコーダ・ユニット１９１を含み、デコーダ・ユニット１９１は、サブジェクト・コード１７の現時点で必要なセクションをデコードして複数のサブジェクト・コード・ブロック１７１ａ、１７１ｂ、１７１ｃ（通常は各々がサブジェクト・コードの１つの基本ブロックを含む）を与え、また、各々のサブジェクト・ブロックと、翻訳器１９の後の動作を支援する、サブジェクト・ブロックに含まれるサブジェクト命令とに関するデコーダ情報１７２を与えることもできる。幾つかの実施形態においては、翻訳器１９のコア１９２にあるＩＲユニットが、デコードされたサブジェクト命令から中間表現（ＩＲ）を作成し、中間表現に関して、適宜、最適化が行われる。翻訳器１９のバック・エンドの一部としてのエンコーダ１９３が、ターゲット・プロセッサ１３によって実行可能なターゲット・コード２１を生成する（移植する）。この単純な例においては、サブジェクト・プラットフォーム１上でサブジェクト・コード・ブロック１７１ａ−１７１ｃを実行するのに相当する作業をターゲット・プラットフォーム１０上で行なうために、３つのターゲット・コード・ブロック２１１ａ−２１１ｃが生成される。また、エンコーダ１９３は、ターゲット・コード・ブロック２１１ａ−２１１ｃのうちの幾つか又は全てについて、そのターゲット・コード・ブロックが動作する環境を設定し、必要に応じ翻訳器１９に制御を戻すなどといった機能を行なう制御コード２１２を生成することもできる。
【００６３】
同じく図２に示されるように、翻訳器１９は、ターゲット・コード２１の実行中に生じた例外信号を処理するように構成される。このために、翻訳器１９は、ターゲット・プロセッサ１３によるターゲット・コード２１の実行中に生じた例外信号を処理するように構成された例外処理ユニット１９５を含む。さらに、例示的な実施形態においては、翻訳器１９がターゲット・プロセッサ１３上で実行されている間に生じた例外信号を処理するためにも、同じ例外処理ユニット１９５が配置される。
【００６４】
図３は、例外処理ユニット１９５を用いる信号処理中のターゲット・コンピュータ・プラットフォーム１０上の制御フローを全体的な概要で示す概略図である。ここで、例外処理ユニット１９５は、ターゲット側例外ハンドラ・ユニット２２０とサブジェクト側例外ハンドラ・ユニット２３０とを含む。
【００６５】
信号３１０が生じたとき、ターゲット・オペレーティング・システム２０は、例外処理ユニット１９５を呼び出す。ターゲット状態３２０は、一般に、ターゲット・プロセッサ１３における実行の状態を表している。従って、ターゲット状態３２０は、オペレーティング・システム２０がもたらした、SIGINFOデータ構造などの例外信号３１０についての情報を含む。さらに、ターゲット状態３２０は、随意的に、SIGCONTEXTデータ構造などの信号が生じた時点における、特にターゲット・レジスタ１５の状態についてのより詳細な情報を含む。従って、例外信号３１０が生じた時点で、例外処理ユニット１９５は、ターゲット状態３２０を用いてターゲット・プロセッサ１３における実行の状態を調べる。
【００６６】
例外信号３１０の処理の結果として得ることができる種々の結果がある。多くの場合、必要に応じてターゲット・コード２１及び／又は翻訳器１９の実行を再開することが可能である。特に、例外処理ユニット１９５は、ターゲット状態３２０を調べて、例外の性質及び原因を判断し、適切な応答アクションをとる。例外処理ユニット１９５は、元のターゲット状態又は現時点で修正済みのターゲット状態３２０に応じて実行を再開するためにオペレーティング・システム２０を通して実行の制御を戻す前に、条件コード・フラグを変更すること、或いは、ターゲット・レジスタ１５の１つ又は複数のコンテンツを表す格納済みデータを修正することなどによって、必要に応じてターゲット状態３２０を修正する。従って、実行は、例外信号３１０をもたらす条件に応答して、例外が生じた元の時点で、又はコードにおける異なる時点で、或いは異なる方法で、再開することができる。特に、例外は、ターゲット・コード２１の実行中に生じることがあるが、例外の処理後、今や、例外は、翻訳器１９がターゲット・コード２１の１つ又は複数のブロックの変更又は再生を必要とすることを示したので、結果として翻訳器１９の実行に戻る。
【００６７】
例外処理ユニット１９５は、もっぱらターゲット側例外ハンドラ・ユニット２２０において、及び、ターゲット状態３２０だけを参照して、多くのこうした例外信号３１０を処理する。しかしながら、一部の例外信号は、ターゲット側例外ハンドラ・ユニット２２０単独によって処理されない。ここで、特にサブジェクト・レジスタ５についての代表値を含む、エミュレートされたサブジェクト・プロセッサ３上の実行の状態を表すサブジェクト状態３３０が与えられる。好適には、サブジェクト状態３３０は、上述した１つ又は複数の抽象レジスタ・バンク２７を参照する。次に、例外信号を処理するために、サブジェクト側ハンドラ・ユニット２３０によって、このサブジェクト状態３３０が用いられる。しかしながら、例外ハンドラ・ユニット１９５が、サブジェクト状態３３０を提供し、サブジェクト側例外ハンドラ・ユニット２３０を呼び出すのには、相対的に費用がかかるので、サブジェクト側例外ハンドラ・ユニット２３０を呼び出し、サブジェクト状態３３０を構成する機会を最小にすることが望ましい。
【００６８】
ターゲット状態３２０と同様に、サブジェクト状態３３０は、同じままであっても、又は例外信号３１０に応答して修正されてもよい。修正済みのサブジェクト状態３３０は、典型的には、対応する修正済みのターゲット状態３２０をもたらし、これにより、ターゲット・コード２１又は翻訳器１９が、異なる時点で又は異なる方法で実行を再スタートする。
【００６９】
サブジェクト・コード１７は、１つ又は複数の信号ハンドラ機能を含むことが多い。つまり、サブジェクト・コード１７で書かれた特定のプログラムは、特定の例外信号が生じたときに呼び出される１つ又は複数の特定の信号ハンドラ機能を含むことが多い。今や、代わりに、ターゲット・プラットフォーム上に例外信号３１０が生じ、必要に応じて、サブジェクト例外ハンドラを表す情報が、サブジェクト側例外ハンドラ・ユニット２３０に渡される。適切なサブジェクト信号ハンドラ機能は、サブジェクト側例外ハンドラ・ユニット２３０を通じて呼び出され、例外信号を処理するために（ターゲット・コードとして）実行される。従って、サブジェクト状態３３０は、そのデータ構造がサブジェクト信号ハンドラによって用いられる場合、サブジェクトSIGINFOデータ構造を含むことができる。同様に、そのデータ構造がサブジェクト信号ハンドラによって用いられる場合、ターゲット・システム上で利用可能な情報から、サブジェクトSIGCONTEXTデータ構造がポピュレートされる。こうしたサブジェクト状態３３０の生成に関するより詳細な背景情報が、上記で参照した、発明の名称を「Method and Apparatus for Performing Adjustable Precision ExceptionHandling」とする特許文献４、及び、発明の名称を「Method and Apparatus forPrecise Handling of Exceptions During Program Code Conversion」とする特許文献５において与えられる。とりわけ、これらの先の開示は、異なるサブジェクト命令について様々な正確さのレベルでサブジェクト状態を与えるための機構、又は、回復情報を用いて正確なサブジェクト状態を得るための効率的な機構を考えるものであるが、ターゲット状態３２０だけを参照して幾つかの例外信号の処理を可能にするものではない。
【００７０】
図４は、特にターゲット側例外ハンドラ・ユニット２２０を含む、ターゲット・コンピュータ・プラットフォームの特定の部分をより詳細に示す概略図である。
【００７１】
図４に示されるように、好適にはオペレーティング・システム２０の部分である信号生成器（signalgenerator）ユニット２００が、他のプロセスの中でも、ターゲット・プロセッサ１３上のターゲット・コード２１又は翻訳器１９の実行に応答して、例外信号を生成するように構成される。マルチプロセス又はマルチスレッド・コンピュータ環境においては、同時に実行される多くのプロセスが存在し、信号生成器は、各プロセスについての例外信号の生成、及び、それぞれの登録されたハンドラへの例外信号の配送を担当する。
【００７２】
ターゲット側例外ハンドラ・ユニット２２０は、グローバル信号制御ユニット２２１、配送パス選択ニット２２２、及び複数の信号処理サブユニット２２３を含む。
【００７３】
グローバル信号制御ユニット２２１は、少なくともターゲット・コード２１の実行に関連して、最も好適には翻訳器１９の実行にも関連して、信号生成器ユニット２００が生成した例外信号を受け取るように構成される。つまり、グローバル信号制御ユニット２２１は、これらのプロセスについての帯域内例外信号を受け取る。さらに、グローバル信号制御ユニット２２１は、システム内のどこか他の場所から生じる帯域外の例外信号を受け取るように構成される。
【００７４】
配送パス選択ユニット２２２は、各例外信号の配送パスを決定し、そこで、配送パスは、例外信号を受け取る複数の信号処理サブユニット２２３の１つ又は複数を指定する。次に、グローバル信号制御ユニット２２１は、例外信号を、その例外信号についての特定の配送パスに従って、指定された１つ又は複数の信号処理サブユニット２２３又はその各々に順に渡す。
【００７５】
つまり、信号制御ユニット２２１は、配送パスに従って信号処理サブユニット２２３の第１のものを選択し、例外信号をそのサブユニットに渡す。次に、信号制御ユニット２２１は、配送パスに従って信号処理サブユニット２２３の第２のものを選択し、例外信号をそのサブユニットに渡し、例外信号が指定されたサブユニットの各々に順に配送されるまで以下同様である。幾つかのマルチスレッド・コンピュータ環境においては、例外信号を同時に多数のユニットに配送すること、或いは、第１のサブユニットが依然として信号を積極的に処理している間、例外信号を第２のサブユニットに配送することが可能である。しかしながら、サブユニットの各々は信号を処理し、ターゲット状態３２０を変えるといったアクションをとることができるので、サブユニットを線形パスに従うものとして扱うことが好ましい。特に、第２のサブユニットは、第１のサブユニットによって例外信号の処理が完了するまで、ターゲット状態３２０を変えるべきではない。
【００７６】
図４は、ターゲット・コンピュータ・システム１０が複数の異なるタイプの例外信号をサポートし、各々の信号が対応する信号番号（SIGNUM）を有する例示的な状況を示す。例外処理ユニット１９５は、複数のこれらの信号タイプを受信するように登録され、この例においては、例外処理ユニット１９５は、利用可能な信号タイプの組の各々を受信するように登録される。図４に示されるように、信号生成ユニット２００は、利用可能な信号の組＃１〜＃６３の各々を受信するように例外処理ユニット１９５を登録する信号表を用いることができる。従って、これらの信号のいずれかが生成されたとき、例外信号は、例外処理ユニット１９５に渡される。
【００７７】
一例として、信号＃２が生成されたと仮定する。グローバル信号制御ユニット２２１は、この信号についての特定の配送パスを指定する配送パス選択ユニット２２２に相談する。ここで、配送パスは、１つ又は複数の示される信号処理サブユニット２２３ａ〜２２３ｄのどれが信号＃２を受信し、かつ、信号処理サブユニット２２３の選択されたグループが例外信号＃２を受信する順序も指定する。この例において、信号処理サブユニットの選択されたグループは、ユニット２２３ｂ、２２３ｃ、及び２２３ｄを含み、その順序は、「ｄ、次にｃ、次にｂ」のように指定される。従って、今やグローバル信号制御ユニット２２１は、例外信号＃２を、最初に信号処理サブユニット２２３ｄに、次に２２３ｃに、次いで２２３ｂに順に渡す。
【００７８】
信号処理サブユニット２２３の１つが実行（この場合、第３のサブユニット２２３ｂ）に戻ることを要求する場合、グローバル信号制御ユニット２２１は、信号の処理を完了し、必要に応じてターゲット・コード２１又は翻訳器１９の実行に戻るよう教唆する。
【００７９】
図５は、信号処理サブユニット２２３の１つをより詳細に示す概略図である。
【００８０】
図５に示されるように、信号処理サブユニット２２３の各々は、入口ユニット２２４、信号処理ユニット２２５、及び出口ユニット２２６を含む。入口ユニット２２４は、信号３１０を受け取り、この信号が信号処理ユニット２２５によって処理されるべきかどうかを決定する。処理すべきである場合、入口ユニット２２４は、信号３１０を信号処理ユニット２２５に渡す。処理すべきでない場合、入口ユニット２２４は、信号３１０を直接出口ユニットに渡す。ここで、入口ユニット２２４は、ターゲット状態３２０を調べて、今回例外信号を処理すべきかどうかを決定する。殆どの場合、この決定は、信号番号又はSIGINFOデータ構造のような信号３１０に関連して与えられた情報を参照することによってなされる。しかしながら、この決定は、SIGCONTEXTデータ構造のような、ターゲット状態３２０からのより詳細なコンテキスト情報を参照することもある。
【００８１】
信号処理ユニット２２５は、受け取った例外信号に対して所定の信号処理機能を実行する。つまり、信号処理ユニット２２５は、例外を少なくとも部分的に処理するために、信号を処理する。随意的に、信号処理ユニット２２５は、処理された例外信号に応答して実行が異なるように再開するように、ターゲット状態３２０を修正する。
【００８２】
出口ユニット２２６は、信号３１０を後の信号処理サブユニット２２３（又は下記により詳細に説明されるように他のユニット）に渡すかどうか、或いはターゲット状態３２０に応じて実行を再開すべきかどうかを決定する。
【００８３】
図６は、信号処理ユニット１９５によって、特にターゲット側例外ハンドラ・ユニット２２０及び１つ又は信号処理サブユニット２２３において行なわれるような、例外を処理する方法を示す概略的なフロー図である。
【００８４】
ステップ６０１において例外信号を受け取り、信号配送パスが決定される。ステップ６０２において、次に、信号配送パスに従って、信号が信号処理サブユニットに渡される。ステップ６０３において、信号を処理するかどうかを決定する。処理する場合、次に、ステップ６０４において信号が処理される。ステップ６０５において、実行に戻ることを要求するかどうかについての判断がなされる。要求しない場合、方法はステップ６０２に戻り、信号は、次の信号処理サブユニットに渡される。従って、信号３１０は、信号配送パスに従って、順に、第１、第２、第３、及び後続の信号処理サブユニットに渡される。ステップ６０５において、実行に戻ることが要求された場合、ステップ６０６において、格納済みのターゲット状態３２０に応じて、実行制御が戻される。
【００８５】
図７は、サブジェクト側例外ハンドラ・ユニット２３０をより詳細に示す概略図である。
【００８６】
図７に示されるように、サブジェクト側例外ハンドラ・ユニット２３０は、サブジェクト側信号制御ユニット２３１、サブジェクト側配送パス選択ユニット２３２、サブジェクト側信号処理サブユニット２３３ａ−２３３ｃの組、及び変換器ユニット２３４を含む。
【００８７】
変換器ユニット２３４は、例外信号を、サブジェクト・アーキテクチャ上で予想されるフォーマットに、すなわちサブジェクト側例外信号３１１に変換するように構成される。特に、信号番号（SIGNUM）のようなフィールドは、ターゲット・アーキテクチャとサブジェクト・アーキテクチャとの間で異なることが多い。この例においては、ターゲット側の信号＃２は、サブジェクト側の信号＃Ｓ１に翻訳された。同様に、変換器ユニット２３４は、サブジェクト側例外信号３１１を処理する準備のできた正確なサブジェクト状態３３０を提供する。特に、変換器ユニット２３４は、ターゲット・マシン上での実行の状態を表すターゲット状態３２０を変換し、サブジェクト側例外ハンドラ・ユニットにおける例外の処理の準備のできたサブジェクト・コンテキスト・データ構造SIGCONTEXTをもたらす。逆に、変換器ユニット２３４は、後で修正済みサブジェクト状態を等価のターゲット状態３２０に再び変換し、修正済みターゲット状態における実行を再開する。
【００８８】
サブジェクト側配送パス選択ユニット２３２は、サブジェクト側信号処理サブユニット２３３ａ−２３３ｃの１つ又は複数の中から例外信号についての配送パスを決定する。この場合、信号配送パスは、例外信号＃Ｓ１が第２のサブジェクト側信号処理サブユニット２３３ｂに配送されると指定する。
【００８９】
サブジェクト側信号制御ユニット２３１は、例外信号を、順に、信号処理サブユニット２３３の指定されたグループの各々に渡す。
【００９０】
図５を参照してターゲット側信号処理サブユニット２２３について上述されたように、サブジェクト側信号処理サブユニット２３３の各々は、入口ユニット、信号処理ユニット、及び出口ユニットを含む。従って、各々のサブジェクト側信号処理サブユニット２３３は、例外信号を、順に、決定されたサブジェクト側配送パスに従って受け取り、例外信号を選択的に処理する。次に、関連したサブジェクト側信号処理サブユニット２３３は、例外信号を渡すこと、或いは、今や（修正されている可能性が高い）サブジェクト状態３３０に従って実行に戻ることのいずれかを要求する。
【００９１】
図８は、本発明の実施形態において例外信号を処理する例示的な方法を示す概略的なフロー図である。この方法は、サブジェクト側例外ハンドラ・ユニット２３０に関する例外ハンドラ・ユニット１９５において行なわれる。
【００９２】
図８を参照すると、ステップ８０１において、例外信号を、サブジェクト側例外ハンドラ・ユニット２３０に渡すことが決定される。
【００９３】
次に、ステップ８０２乃至８０７は、図６について上述されたステップ６０１乃至６０６と類似しており、これにより、サブジェクト側例外ハンドラ・ユニット２３０は、利用可能なサブジェクト側信号処理サブユニット２３３の１つ又は複数における例外を処理する。ステップ８０７において、サブジェクト状態３３０に従って実行に戻ることが要求され、それにより、必要に応じてターゲット・コード２１又は翻訳器１９の実行を再開するための、対応するターゲット状態３２０がもたらされる。
【００９４】
図９は、例外処理ユニット１９５の動作をより詳細に示す概略図である。特に、図９は、本発明の完全かつ詳細な理解を得る際に当業者を助けるために、第１の説明に役立つ実例を提供する。しかしながら、この説明に役立つ実例は、本発明を用いて達成できる多くの例示的な実施形態の１つにすぎない。
【００９５】
この第１の説明に役立つ実例において、ここで説明される例外処理機構は、タイミング信号に関して、特に有利である。当業者にはよく知られているように、プログラムは、特定の時間間隔が経過した後に例外信号を生じさせるタイマを設定することができる。ＰＯＳＩＸ対応プラットフォームにおいて、一般的に用いられるタイミング信号は、SIGALRM、SIGPROF、及びSIGVTALRMを含む。
【００９６】
多くコンピュータ・アーキテクチャは、各々のこうしたタイミング信号の１つしか提供しないが、サブジェクト・コード（今やターゲット・コード２１として実行されている）及び翻訳器１９の両方とも、それぞれ同じタイプのタイミング信号を利用する必要があり得るという問題が生じる。例えば、ターゲット・コード２１及び翻訳器１９の両方とも、SIGALRM例外信号を用いることを望むとする。図９に示されるようなこの例において、翻訳器１９が、例えばタイムライン上の文字Ｘで示されるような１秒毎の規則的な間隔で、ターゲット・コード２１の性能の輪郭を描くように構成されると仮定する。また、サブジェクト・コード（今やターゲット・コード２１に変換されている）は、同じタイプのタイミング信号を用いて、タイムライン上の文字Ｙで示されるように５秒といった指定された時間内にユーザがキーボード上のキーを押したかどうかを判断するように構成されると仮定する。オペレーティング・システム２０は、SIGALRMタイプの例外信号３１０を生成し、このSIGALRMタイプの例外信号３１０は、時間Ｘ及び時間Ｙにおいて最初にターゲット側例外ハンドラ・ユニット２２０に渡される。このタイプの信号のための配送パスは、タイミング信号が信号処理サブユニット２２３ａに配送され、それにより、タイミング信号が、ターゲット側によって、この場合は翻訳器１９によって予測されるかどうかが確立されることを示す。つまり、信号処理ユニット２２５は、予測されるタイミング信号及び予測される信号の各々の所有者を記録する頻度アービトレータ・ユニット（frequency arbitrator unit）を含む。従って、イベントＸが信号を生じさせた場合、信号処理サブユニット２２３は、翻訳器１９が信号３１０を所有していると判断する。今や信号は処理され、実行に戻る。対照的に、時間Ｙにおける例外信号は、サブジェクト側例外ハンドラ・ユニット２３０に渡される、すなわち、信号はターゲット側によって予測されなかっと判断される。サブジェクト側例外ハンドラ・ユニット２３０は、適切な配送パスを決定し、例外信号をそれぞれの信号処理サブユニット２３３ａに経路指定する。従って、イベントＹから生じる例外信号３１０は、今やサブジェクト側例外ハンドラ・ユニット２３０によって受信され、必要に応じてサブジェクト・コードについて処理される。
【００９７】
図９のこの例から、ここで説明される例外処理機構において多数の利点が存在することが理解されるであろう。第１に、翻訳器１９、又は翻訳器１９によって生成された制御コード２１２の部分のようなターゲット状態３２０に依存するコードと、元のサブジェクト・コード１７によって予想される動作をエミュレートするターゲット・コード２１の主ブロック２１１のようなサブジェクト状態３３０に依存するコードとの間で、SIGALRMのような単一のタイプの例外信号が共有される。第２に、ターゲット側が必要としない信号だけがサブジェクト側に渡され、これにより、サブジェクト状態３３０を正確に取得する機会の数が著しく低減される。
【００９８】
図１０は、例外処理ユニット１９５の動作をより詳細に示す概略図である。図１０に示されるように、例外処理ユニット１９５は、デフォルト・ハンドラ・ユニット２４０及びクラッシュ・レポータ・ユニット２５０をさらに含む。
【００９９】
デフォルト・ハンドラ・ユニット２４０は、ターゲット・システムの例外処理プロトコルに従って例外信号を処理するように構成される。つまり、デフォルト・ハンドラ・ユニット２４０は、ターゲット・オペレーティング・システム２０の予想される動作と同等の例外処理動作を提供する。通常、デフォルト動作は、信号を無視し、実行に戻るか、又は実行を終えることである。デフォルト動作の例は、親プロセスは、子プロセスが終了したときに、情報についてのSIGCHLD例外信号を受け取るが、殆どの場合、信号は無視され、実行が継続するというものである。
【０１００】
クラッシュ・リポータ・ユニット２５０は、翻訳器ユニット１９の一部として与えられ、特にデバッグを支援するために、所定の方法に従って実行のクラッシュを管理する。ここで、クラッシュ・リポータ２５０は、クラッシュに関連する実行の状態に関する詳細な情報を含むクラッシュ・レポート・データ構造３５０を生成するために、例えばターゲット状態３２０及びサブジェクト状態３３０を含む状態情報を格納するように構成される。例示的な実施形態においては、クラッシュ・レポート・データ構造３５０は、ターゲット・システムのメモリ・システム１８内にテキスト・ファイル（.txt）として格納される。
【０１０１】
図１０は、ここでは「Ａ」乃至「Ｄ」と表記された、例外処理ユニット１５を通る４つの主な例外処理経路を示す。
【０１０２】
経路Ａにおいて、例外は、ターゲット側例外処理サブユニット２２３の１つにおいて処理され、実行に戻る。経路Ｂにおいて、例外は、サブジェクト側例外処理サブユニット２３３の１つにおいて処理され、実行に戻る。経路Ｃにおいて、例外は、デフォルト処理ユニット２４０において処理され、戻るか又は終了する。経路Ｄにおいて、例外は、クラッシュ・レポータ２５０において処理され、戻るか又は終了する。
【０１０３】
図１０に示されるように、例示的な例外処理ユニット１９５は、浮動小数点例外の処理に関して、特に有利である。例えば、ＩＢＭ  Ｐｏｗｅｒ  ＰＣ（商標）プロセッサなどの幾つかのコンピュータ・アーキテクチャは、プロセッサにおいて「ゼロ除算」の違法な数学演算が試みられたときに例外信号を生成しないが、代わりに結果をゼロに設定し、実行を継続する。これに対して、Ｉｎｔｅｌ（商標）×８６プロセッサに基づいたもののような他のコンピュータ・アーキテクチャは、プロセッサが違法な「ゼロ除算」演算を行なったとき、例外信号を生成する。図１０において、ターゲット・ハードウェアは、×８６プロセッサに基づいており、よって、違法なゼロ除算の数学演算に直面したとき、こうした浮動小数点例外を生成することになる。
【０１０４】
サブジェクト・コード１７の作業を実行するために、翻訳器１９によって生成されたターゲット・コード２１の実行を通して、この浮動小数点例外が生じたとき、例外は、経路Ａに従うことになる。つまり、ターゲット側例外ハンドラ・ユニット２２０内の信号処理サブユニット２２３ｂの１つは、例外信号３１０を受け取るように構成され、SIGINFOデータ構造内のプログラム・カウンタ（ＰＣ）フィールドを調べることなどによって、ターゲット・コード２１の実行から例外が生じたと判断する。例外信号は、今や、結果をゼロをリセットすることによって、すなわち、ターゲット状態３２０において表されるようにターゲット・レジスタの１つのコンテンツを修正することによって処理される。実行は、ターゲット・コード２１に戻り、続行することができる。結果をゼロにリセットすることによって、ターゲット・システムは、今や、サブジェクト・アーキテクチャに従って、このプログラムの予想される動作を正しくエミュレートする。また、例外は安価に処理され、特に、サブジェクト状態３３０を与える費用のかかるプロセスを行なう必要はなかった。
【０１０５】
同じタイプの浮動小数点例外が翻訳器ユニット１９の実行から生じたとき、この信号は、重大なプログラミング・エラー又は実行エラーを表している可能性が高い。従って、例外信号３１０は、デフォルト・ハンドラ・ユニット２４０への経路Ｃに従うか、或いは、クラッシュ・レポータ・ユニット２５０への経路Ｄに従う。
【０１０６】
頻繁に遭遇する例外信号の更に別の例は、プログラムが、許容されていない方法でメモリにアクセスしようと試みるとき（例えば、読み取り専用の保護メモリ領域への書き込みを試みるなど）エラーが生じたことを示すセグメンテーション違反（segmentation fault）（segfault）である。ＰＯＳＩＸタイプのシステムにおいて、このタイプの違反についての記号定数は、通常、SIGSEGVである。こうしたセグメンテーション違反は、幾つかの異なる理由の１つのために生じることがあり、異なる環境において、同じタイプの例外信号は、例外処理ユニット１９５を通して異なる経路Ａ−Ｄを利用する。
【０１０７】
第１に、セグメンテーション違反は、ターゲット・コード２１が、自己書き換えコード（self-modifying code）への書き込みを試みるといった、メモリの保護された領域へのアクセスを試みる場合を検出するために、トラップとして意図的に導入することができる。信号は経路Ａに従い、関連するターゲット側処理サブユニット２２３がターゲット状態３２０を変更するので、自己書き換えコード・イベントを処理するために、実行は翻訳器１９に戻る。従って、翻訳器１９は、特定の例外信号をトラップするために例外処理ユニットに依存することが可能になる。
【０１０８】
第２に、元のサブジェクト・コード１７は、トラップとしてセグメンテーション違反を用いるように書き込まれた。この場合、信号は経路Ｂに従い、サブジェクト状態３３０を参照してサブジェクト信号処理機能を呼び出すために、サブジェクト側信号処理サブユニット２３３の１つによって処理される。
【０１０９】
第３に、セグメンテーション違反は、別の外部プロセスから例外ハンドラ・ユニット１９５に渡される。SIGINFOデータ構造内のフィールドSI_CODEを調べることにより、信号が外部のものかどうかが判断される。この場合、信号は経路Ｃに従い、そこで、デフォルト・ハンドラ・ユニット２４０は、この場合は信号を無視することであるデフォルト動作を実行する。
【０１１０】
第４に、先行するユニットによって予測されず、捕捉されなかったセグメンテーション違反は、この信号が翻訳器における予測されないエラー又はバグから生じたということに基づいて、経路Ｄに従ってクラッシュ・レポータ２５０に渡される。
【０１１１】
従って、同じタイプの例外信号（この場合はセグメンテーション違反）は、その信号の特定の環境に応じて、例外処理ユニット１９５を通る利用可能な経路のいずれか１つに従う。
【０１１２】
図１１は、例外信号を渡すことに向けられる機構に関連して例外信号ハンドラ・ユニット１９５をより詳細に示す概略図である。
【０１１３】
当業者にはよく知られているように、何らかのタイプの例外信号（例えば、SIGKILL）は、オペレーティング・システム２０によって遮断し（intercept）、常に処理することは可能でない。図１１において、信号タイプ＃６３は、このような遮断可能でない例外信号の例として示される。
【０１１４】
しかしながら、ターゲット・アーキテクチャ内に、遮断可能である多くのタイプの例外信号が存在し、例示的な実施形態において、例外ハンドラ・ユニット１９５は、遮断され得る、ターゲット・アーキテクチャ上の全てのタイプの信号を受け取るように登録される。ここで、少なくとも信号タイプ＃１、＃２、及び＃３等は、遮断することが可能であり、従って、例外信号処理ユニット１９５は、こうした信号を受け取るように登録される。図１１において、オペレーティング・システム２０内の信号生成器ユニット２００は、こうした信号が、オペレーティング・システム２０の信号処理要素にではなく、代わりにここで説明される例示的な実施形態の例外ハンドラ・ユニット１９５に配送されることを示すように、表記「（global）」を記録する。
【０１１５】
ターゲット側例外ハンドラ・ユニット２２０の配送パス選択ユニット２２２は、何らかのタイプの例外信号が、直接に、或いは、最初にターゲット側処理サブユニット２２３（図４を参照されたい）の１つ又は複数を通して例外信号を渡した後に、文字「ＤＦ」でマーク付けされたデフォルト・ハンドラ・ユニット２４０又はクラッシュ・レポータ「ＣＲ」に渡されると判断する。図１１において、文字「ａ」、「ｂ」、又は「ｃ」は、ターゲット側信号処理サブユニット２２３の選択されたものを指す。さらに、何らかのタイプの例外信号は、同じく直接に、或いは、最初にターゲット側信号処理サブユニット「ａ」、「ｂ」又は「ｃ」等の１つ又は複数を通して例外信号を渡した後に、文字「ＳＳ」でマーク付けられたサブジェクト側例外ハンドラ・ユニット２３０に渡される。この判断は、図１１に示される表内に好都合に記録されている。しかしながら、上述したセグメンテーション違反のような何らかのタイプの信号は、SIGINFO又はSIGCONTEXTデータ構造を調べるなど、適切な判断をなすための付加的な処理を必要とする。
【０１１６】
同様に、サブジェクト側例外ハンドラ・ユニット２３０の配送パス選択ユニット２３２は、最初に、文字「Ｓａ」、「Ｓｂ」、又は「Ｓｃ」でここに示されるような１つ又は複数のサブジェクト側信号処理サブユニット２３３を通して例外信号を渡すかどうかに関係なく、特定の例外信号を、文字「ＤＦ」で示されるデフォルト・ハンドラ・ユニット２４０又は「ＣＲ」で示されるクラッシュ・レポータ・ユニット２５０に選択的に渡すように構成される。
【０１１７】
従って、配送パス選択ユニット２２２、２３２は、それぞれの処理の配送パスに沿って、特定のタイプの例外信号の各々を経路指定するために、簡単で好都合な機構を提供する。
【０１１８】
図１２は、信号配送パスの動的再構成に関する例示的な例外処理機構をより詳細に示す概略図である。
【０１１９】
図１２に示されるように、グローバル信号制御ユニット２２１は、ターゲット側配送パス選択ユニット２２２及びサブジェクト側配送パス選択ユニット２３２を動的に制御するように構成される。つまり、グローバル信号制御ユニット２２１は、例外信号のタイプの１つ又は複数についての指定された配送パスを付加し、修正し、又は置き換えるように構成される。このように、グローバル信号制御ユニット２２１は、特定のタイプの例外信号及び指定された順序の配送パスを受け取ることになる、信号処理サブユニット２２３、２３３の組を付加し、修正し、又は置き換える。
【０１２０】
さらに、クラッシュ・レポータ・ユニット２５０は、配送パスを動的に再構成するように、グローバル信号制御ユニット２２１と協働して働くように構成される。一例として、特定のメモリ領域がマッピングされていないことを示す例外信号が生じた場合に、クラッシュ・レポータ・ユニット２５０は、付加的なバス・エラー信号処理サブユニットを導入するように構成される。この新しく導入されたバス・エラー・サブユニットは、メモリ・マッピング機能を実施し、実行に戻る。違反が再び生じた場合、バス・エラー・サブユニットは、今や、ターゲット状態３２０及び／又はサブジェクト状態３３０に関するより詳細な情報の回復を助け、クラッシュ報告プロセスの次の部分に進む。従って、クラッシュ・レポータ・ユニットは、実行の制御を保持し、例外信号を処理するために、特注の信号処理サブユニットの組を導入することができる。
【０１２１】
これらの実施形態において、例外処理ユニット１９５内に新しい例外信号処理動作が導入されたとしても、ターゲット・オペレーティング・システム２０の信号生成器ユニット２００によって保持される信号表は更新されない。つまり、新しい信号処理サブユニットの組立体を登録するために、システム呼び出しを必要とすることなく、信号処理サブユニットの組が付加され、修正され、又は置き換えられる。従って、例外処理ユニット１９５は、動作するのに安価で効率的である上、柔軟性があり強力でもある。
【０１２２】
上述のように、本発明の例示的な例外処理機構は、多くの利点を有する。特に多くの信号がターゲット側例外処理ユニットによって迅速かつ安価に成功裏に処理されるため、この機構は、各々の例外信号に応答して、行なう必要ある作業量を低減させる。多くの場合、元のサブジェクト・コードの実行における同等の時点を表すサブジェクト状態を得る費用なしに、例外信号が処理される。さらに、この機構は、ターゲット・コードの実行及び翻訳器コードの実行の両方の間で１つの例外信号を共有することができ、これにより、ターゲット・コンピュータ・アーキテクチャにおける動作の効率性が改善される。この機構は、多くの場合、サブジェクト・コンピュータ・アーキテクチャ上の例外処理と、ターゲット・アーキテクチャ上の例外処理との間に生じる実質的な差を軽減し、よって、サブジェクト・コードの実行をより良好にサポートするように、ターゲット・アーキテクチャを助ける。このことは、人間の介在なしにプログラム・コードを自動的に変換することが望ましい動的翻訳の分野、特に動的バイナリ翻訳の分野において、極めて重要である。多数のサブジェクト側例外処理サブユニットを設けることにより、利用可能な例外信号を、ターゲット・システムから、サブジェクト・コードにより必要とされるサブジェクト例外信号の組に容易にかつ効率的にマッピングすることが可能になる。サブジェクト・コードが信号を広く利用する場合でも、必要とされる信号の数又はタイプは、今や、ターゲット・コンピュータ・プラットフォーム上で容易にサポートされる。最終的に、例示的な機構は、特に、各々が同じ例外信号を受け取る多数の信号処理サブユニットを提供する能力、及び、最小のオーバーヘッドによりこれらのユニットを付加し、修正し、又は置き換える能力を含む、例外信号の処理において動的柔軟性及び制御を提供する。
【０１２３】
幾つかの好ましい実施形態が示され説明されたが、当業者であれば、添付の特許請求の範囲において定められる本発明の範囲から逸脱することなく、種々の変更及び修正をなし得ることが認識されるであろう。
【０１２４】
本出願と関連して、本明細書と同時に又はそれ以前に出願され、本明細書と共に公開された全ての論文及び文献に注意が向けられており、そのような論文及び文献の全ての内容は、引用により本明細書に組み入れられる。
【０１２５】
（いずれかの添付の特許請求の範囲、要約、及び図面を含む）本明細書において開示された特徴の全て、及び／又は、そこに開示されたいずれかの方法又はプロセスのステップの全ては、こうした特徴及び／又はステップのうちの少なくとも幾つかが相互に排他的である組み合わせを除いて、如何なる組み合わせにも組み合わせることができる。
【０１２６】
（いずれかの添付の特許請求の範囲、要約、及び図面を含む）本明細書において開示された各々の特徴は、他に明示的な断りのない限り、同一の目的、等価な目的、又は類似の目的を果たす代替的な特徴によって置換することができる。従って、他に明示的な断りのない限り、開示された各々の特徴は、一般的な一連の等価な特徴又は類似の特徴の単なる一例である。
【０１２７】
本発明は、上記の実施形態の詳細に限定されるものでなはい。本発明は、（いずれかの添付の特許請求の範囲、要約、及び図面を含む）本明細書において開示された特徴のいずれかの新規な１つ、又はいずれかの新規な組み合わせ、又は、そこに開示された方法若しくはプロセスのステップのいずれかの新規な１つ若しくはいずれかの新規な組み合わせにも及ぶ。
【図１】
2010525440.tif 000004
2010525440.tif 000005
【図２】
2010525440.tif 000006
【図３】
2010525440.tif 000007
【図４】
2010525440.tif 000008
【図５】
2010525440.tif 000009
【図６】
2010525440.tif 000010
【図７】
2010525440.tif 000011
【図８】
2010525440.tif 000012
【図９】
2010525440.tif 000013
【図１０】
2010525440.tif 000014
【図１１】
2010525440.tif 000015
【図１２】
2010525440.tif 000016
【国際調査報告】
2010525440.tif 000017
2010525440.tif 000018
2010525440.tif 000019