(57)【特許請求の範囲】
【請求項１】
マルチサブジェクトスレッドを有しサブジェクトプロセッサによって実行可能なサブジェクトコードを、ターゲットプロセッサによって実行可能なターゲットコードに変換するプログラムコード内で使用するための、共有リソースへのアクセスを調整するための機構（以下、ターゲットアクセス調整機構という）を提供する方法であって、前記ターゲットアクセス調整機構は、マルチサブジェクトスレッドの一つに各々関連付けられたローカルデータ構造体と、前記マルチサブジェクトスレッドの各々に共通する数値カウンタ値とを有するものであり、
前記ターゲットプロセッサを備えているコンピュータが、
（ａ）前記マルチサブジェクトスレッドの一つに各々関連付けられた前記ローカルデータ構造体と、前記マルチサブジェクトスレッドの各々に共通する前記数値カウンタ値とを準備するステップであって、前記ローカルデータ構造体は、前記数値カウンタ値の現在値、ローカル値及びローカルメモリアドレスを格納するための構造体であり、前記ローカル値は、共有リソースから読み込まれるデータ値であり、前記ローカルメモリアドレスは、前記データ値の読み込み元のアドレスである、前記準備するステップと、
（ｂ）前記サブジェクトコードをデコードし、前記サブジェクトプロセッサ内に設けられたアクセス調整機構（以下、サブジェクトアクセス調整機構という）を設定するために使用されるサブジェクト設定命令と、前記サブジェクトアクセス調整機構をチェックし且つ共有リソースに関連する潜在的なインターフェアレンスを検出するために使用されるサブジェクトチェッキング命令とを識別するステップであって、前記サブジェクトアクセス調整機構は前記共有リソースに関係し、前記マルチサブジェクトスレッドのうちの一つを超えるスレッドが前記共有リソースにアクセスすることによって生じる不一致または予期しない動作であるインターフェアレンスが共有リソースに関して発生しているかどうかを検出するために使用されるリザベーションを備えており、前記リザベーションは命令に関連付けられたメモリアドレスを書き込むためのリザベーションレジスタと、前記リザベーションレジスタが設定されているか又はクリアされているかを示す予約フラグとを備えており、前記サブジェクトアクセス調整機構におけるインターフェアレンスの検出は、前記予約フラグがなおも設定されていなければならないときにクリアされるか、又は前記リザベーションレジスタ内に保持されたアドレスが前記サブジェクトチェッキング命令内で特定されたアドレスと同じでないことのいずれかによって検出され、前記サブジェクトチェッキング命令が続行する場合、すなわち前記潜在的なインターフェアレンスが検出されない場合に、前記インターフェアレンスが発生していないと判断して前記予約フラグがクリアにされるものである、前記識別するステップと、
（ｃ）前記識別されたサブジェクト設定命令に応答して、
（ｃ−１）前記数値カウンタ値をインクリメント又はデクリメントのいずれか一方による数学的操作による調整をし、そして当該調整された数値カウンタ値、すなわち前記数値カウンタ値の現在値を、現スレッドのための前記ローカルデータ構造体内に記憶するステップと、
（ｃ−２）前記サブジェクト設定命令で特定されたメモリロケーションからデータ値をロードするステップであって、前記データ値は前記サブジェクト設定命令によって提供された共有リソースに関連する設定アドレスに応答して共有リソースから読み込まれるデータ値である、前記ロードするステップと、当該ロードされたデータ値を前記ローカルデータ構造体内に記憶し、且つ前記設定アドレスのコピーを前記ローカルデータ構造体内のローカルメモリアドレスとして記憶するステップと、
（ｄ）前記識別されたサブジェクトチェッキング命令に応答して、
（ｄ−１）前記サブジェクトチェッキング命令内で特定されたアドレスから導出されたチェッキングアドレスと前記ローカルデータ構造体内に記憶されたローカルメモリアドレスと比較するステップであって、前記サブジェクトチェッキング命令内で特定されたアドレスから導出されたチェッキングアドレスと前記ローカルデータ構造体内に記憶されたローカルメモリアドレスとが等しくない場合には、別のサブジェクト設定命令が現行のマルチサブジェクトスレッドで実行されていることを示す、前記比較するステップと、
（ｄ−２）前記共通する数値カウンタ値の現在値と前記ローカルデータ構造体内に記憶された前記数値カウンタ値とを比較するステップであって、前記共通する数値カウンタ値の現在値と前記ローカルデータ構造体内に記憶された前記数値カウンタ値とが等しくない場合には、前記共通する数値カウンタ値の現在値が、別のマルチサブジェクトスレッド内の潜在的なインターフェアリング命令によって調整される、前記比較するステップと、
（ｄ−３）前記サブジェクトチェッキング命令内に特定付けられたメモリロケーションに現在ストアされている値と前記ローカルデータ構造体内に記憶された前記ローカル値とを比較するステップであって、前記サブジェクトチェッキング命令内に特定付けられたメモリロケーションに現在ストアされている値と前記ローカルデータ構造体内に記憶された前記ローカル値とが等しくない場合には、前記サブジェクト設定命令と前記サブジェクトチェッキング命令との間の介在命令がインターフェアレンスなしに実行されなかったことが検出される、前記比較するステップと、
を実行することを含み、前記（ｄ−１）、（ｄ−２）及び（ｄ−３）の各比較において一致しなかった場合に失敗フラグを示すように設定され、前記（ｄ−１）、（ｄ−２）及び（ｄ−３）の各比較が全て一致した場合に成功フラグを示すように設定される、前記方法。
【請求項２】
前記コンピュータが、
前記共有リソースに関連する潜在的にインターフェアする事象に応答して前記数値カウンタ値を前記調整するステップであって、前記潜在的にインターフェアする事象が、割り込み、システムコール、又は前記レジスタに保持されたメモリアドレスへの記憶である、前記調整するステップと
をさらに実行することを含む、請求項１に記載の方法。
【請求項３】
前記コンピュータが、
前記サブジェクトコードまたは前記サブジェクトコードに影響を与える割り込み又はシステムコールを検出するステップであって、当該検出は共有リソースに関連する潜在的なインターフェアレンスを表す、前記検出するステップと、
前記検出に応じて、前記数値カウンタ値を前記調整するステップ
をさらに実行することを含む、請求項１又は２に記載の方法。
【請求項４】
前記コンピュータが、
第１サブジェクトスレッドに関して前記ステップ（ｃ）を実行するステップと、
第２サブジェクトスレッドに関して前記数値カウンタ値を前記調整するステップと、
前記第１サブジェクトスレッドに関して前記ステップ（ｄ）を実行し、前記第２サブジェクトスレッドに関して前記共有リソースに関連する前記潜在的なインターフェアレンスを決定するステップと
をさらに実行することを含む、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記ステップ（ｄ）は、前記サブジェクトチェッキング命令に応答して共有リソースに新しいデータ値を記憶するステップをさらに含む、請求項１〜４のいずれか一項に記載の方法。
【請求項６】
前記コンピュータが、
前記数値カウンタ値を前記ターゲットプロセッサ上で原子的に調整するステップ
をさらに実行することを含む、請求項１〜５のいずれか一項に記載の方法。
【請求項７】
前記コンピュータが、
前記サブジェクトプロセッサによって実行可能なサブジェクトコードを、前記ターゲットプロセッサによって実行可能なターゲットコードに変換するステップ
をさらに実行することを含む、請求項１〜６のいずれか一項に記載の方法。
【請求項８】
前記コンピュータが、
前記サブジェクトコードから前記ターゲットコードに動的にバイナリトランスレーションを実行するステップ
をさらに実行することを含む、請求項７に記載の方法。
【請求項９】
前記コンピュータが、
前記サブジェクトチェッキング命令が失敗する場合に、前記サブジェクト設定命令にループバックするステップ
をさらに実行することを含む、請求項１に記載の方法。
【請求項１０】
マルチサブジェクトスレッドを有しサブジェクトプロセッサによって実行可能なサブジェクトコードを、ターゲットプロセッサによって実行可能なターゲットコードに変換する装置であって、前記装置は前記ターゲットプロセッサを備えており、前記装置は前記変換するプログラムコード内で使用するための、共有リソースへのアクセスを調整するための機構（以下、ターゲットアクセス調整機構という）を提供し、前記ターゲットアクセス調整機構は、マルチサブジェクトスレッドの一つに各々関連付けられたローカルデータ構造体と、前記マルチサブジェクトスレッドの各々に共通する数値カウンタ値とを有するものであり、
前記装置は、
（ａ）前記マルチサブジェクトスレッドの一つに各々関連付けられた前記ローカルデータ構造体と、前記マルチサブジェクトスレッドの各々に共通する前記数値カウンタ値とを準備し、前記ローカルデータ構造体は、前記数値カウンタ値の現在値、ローカル値及びローカルメモリアドレスを格納するための構造体であり、前記ローカル値は、共有リソースから読み込まれるデータ値であり、前記ローカルメモリアドレスは、前記データ値の読み込み元のアドレスであり、
（ｂ）前記サブジェクトコードをデコードし、前記サブジェクトプロセッサ内に設けられたアクセス調整機構（以下、サブジェクトアクセス調整機構という）を設定するために使用されるサブジェクト設定命令と、前記サブジェクトアクセス調整機構をチェックし且つ共有リソースに関連する潜在的なインターフェアレンスを検出するために使用されるサブジェクトチェッキング命令とを識別し、前記サブジェクトアクセス調整機構は前記共有リソースに関係し、前記マルチサブジェクトスレッドのうちの一つを超えるスレッドが前記共有リソースにアクセスすることによって生じる不一致または予期しない動作であるインターフェアレンスが共有リソースに関して発生しているかどうかを検出するために使用されるリザベーションを備えており、前記リザベーションは命令に関連付けられたメモリアドレスを書き込むためのリザベーションレジスタと、前記リザベーションレジスタが設定されているか又はクリアされているかを示す予約フラグとを備えており、前記サブジェクトアクセス調整機構におけるインターフェアレンスの検出は、前記予約フラグがなおも設定されていなければならないときにクリアされるか、又は前記リザベーションレジスタ内に保持されたアドレスが前記サブジェクトチェッキング命令内で特定されたアドレスと同じでないことのいずれかによって検出され、前記サブジェクトチェッキング命令が続行する場合、すなわち前記潜在的なインターフェアレンスが検出されない場合に、前記インターフェアレンスが発生していないと判断して前記予約フラグがクリアにされるものであり、
（ｃ）前記識別されたサブジェクト設定命令に応答して、
（ｃ−１）前記数値カウンタ値をインクリメント又はデクリメントのいずれか一方による数学的操作による調整をし、そして当該調整された数値カウンタ値、すなわち前記数値カウンタ値の現在値を、現スレッドのための前記ローカルデータ構造体内に記憶し、
（ｃ−２）前記サブジェクト設定命令で特定されたメモリロケーションからデータ値をロードし、ここで、前記データ値は前記サブジェクト設定命令によって提供された共有リソースに関連する設定アドレスに応答して共有リソースから読み込まれるデータ値であり、当該ロードされたデータ値を前記ローカルデータ構造体内に記憶し、且つ前記設定アドレスのコピーを前記ローカルデータ構造体内のローカルメモリアドレスとして記憶し、
（ｄ）前記識別されたサブジェクトチェッキング命令に応答して、
（ｄ−１）前記サブジェクトチェッキング命令内で特定されたアドレスから導出されたチェッキングアドレスと前記ローカルデータ構造体内に記憶されたローカルメモリアドレスと比較し、前記サブジェクトチェッキング命令内で特定されたアドレスから導出されたチェッキングアドレスと前記ローカルデータ構造体内に記憶されたローカルメモリアドレスとが等しくない場合には、別のサブジェクト設定命令が現行のマルチサブジェクトスレッドで実行されていることを示し、
（ｄ−２）前記共通する数値カウンタ値の現在値と前記ローカルデータ構造体内に記憶された前記数値カウンタ値とを比較し、前記共通する数値カウンタ値の現在値と前記ローカルデータ構造体内に記憶された前記数値カウンタ値とが等しくない場合には、前記共通する数値カウンタ値の現在値が、別のマルチサブジェクトスレッド内の潜在的なインターフェアリング命令によって調整され、
（ｄ−３）前記サブジェクトチェッキング命令内に特定付けられたメモリロケーションに現在ストアされている値と前記ローカルデータ構造体内に記憶された前記ローカル値とを比較し、前記サブジェクトチェッキング命令内に特定付けられたメモリロケーションに現在ストアされている値と前記ローカルデータ構造体内に記憶された前記ローカル値とが等しくない場合には、前記サブジェクト設定命令と前記サブジェクトチェッキング命令との間の介在命令がインターフェアレンスなしに実行されなかったことが検出され、
前記（ｄ−１）、（ｄ−２）及び（ｄ−３）の各比較において一致しなかった場合に失敗フラグを示すように設定され、前記（ｄ−１）、（ｄ−２）及び（ｄ−３）の各比較が全て一致した場合に成功フラグを示すように設定される、前記装置。
【請求項１１】
前記装置は、
前記共有リソースに関連する潜在的にインターフェアする事象に応答して前記数値カウンタ値を前記調整し、
前記潜在的にインターフェアする事象が、割り込み、システムコール、又は前記レジスタに保持されたメモリアドレスへの記憶である、請求項１０に記載の装置。
【請求項１２】
前記装置は、
前記サブジェクトコードまたは前記サブジェクトコードに影響を与える割り込み又はシステムコールを検出し、当該検出は共有リソースに関連する潜在的なインターフェアレンスを表し、
前記検出に応じて、前記数値カウンタ値を前記調整する、
請求項１０又は１１に記載の装置。
【請求項１３】
前記装置は、
第１サブジェクトスレッドに関して前記（ｃ）を実行し、
第２サブジェクトスレッドに関して前記数値カウンタ値を前記調整し、
前記第１サブジェクトスレッドに関して前記（ｄ）を実行し、前記第２サブジェクトスレッドに関して前記共有リソースに関連する前記潜在的なインターフェアレンスを決定する、
請求項１０〜１２のいずれか一項に記載の装置。
【請求項１４】
前記（ｄ）において、さらに、
前記サブジェクトチェッキング命令に応答して共有リソースに新しいデータ値を記憶する、
請求項１０〜１３のいずれか一項に記載の装置。
【請求項１５】
前記装置は、
前記数値カウンタ値を前記ターゲットプロセッサ上で原子的に調整する、
請求項１０〜１４のいずれか一項に記載の装置。
【請求項１６】
前記装置は、
前記サブジェクトコードから前記ターゲットコードに動的にバイナリトランスレーションを実行する、
請求項１０〜１５のいずれか一項に記載の装置。
【請求項１７】
前記装置は、
前記サブジェクトチェッキング命令が失敗する場合に、前記サブジェクト設定命令にループバックする、
請求項１０〜１６のいずれか一項に記載の装置。
【請求項１８】
請求項１〜９のいずれか一項に記載の方法の複数のステップから成る方法をコンピュータが備えているターゲットプロセッサに実行させる命令を格納したコンピュータ読み取り可能な記憶媒体。
【請求項１９】
ターゲットプロセッサを備えているコンピュータに、請求項１〜９のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概して、コンピュータおよびコンピュータソフトウェアの分野、より詳しくは例えばプログラムコードを変換するコード変換装置、エミュレータおよびアクセレレータに有用なプログラムコード変換方法および装置に関する。
【背景技術】
【０００２】
組み込みおよび非組み込みＣＰＵの両方において、ＣＰＵが適切なソフトウェアに透過的にアクセラし、動作性能を高速化することができ、あるいはより優れた費用／性能利益を提示できる無数の潜在量力のあるプロセッサに「変換される」既存の大量ソフトウェアのための卓越した命令セットアーキテクチャ（ＩＳＡ）がある。さらに、ＩＳＡに対して時間的にロックされ、性能または市場機能範囲に発展することができない優勢なＣＰＵアーキテクチャが見つかっている。この種のＣＰＵは、ソフトウェア指向プロセッサ共同アーキテクチャから利益を得ることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
このような高速化、変換および共同アーキテクチャ能力を促進するプログラムコード変換方法および装置は、例えば国際公開公報第００／２２５２１号パンフレットに開示されており、当該開示は参照することにより本願に援用される。
【０００４】
本発明の実施例は、特にプログラムコード変換に関しており、これにより、サブジェクトプログラムは、ターゲットコンピューティングプラットフォーム内のターゲットプロセッサによって実行可能なターゲットコードに変換される。
【０００５】
プログラムコード変換の実行は、サブジェクトプロセッサ上でサブジェクトプログラムの本来の実行と比較して変換プロセス内でオーバーヘッドを必然的にもたらす。変換プロセス内のこのオーバーヘッドを低減することが一般的に望ましい。さらに、ターゲットコードの生成がターゲットプロセッサ上で正確に、かつ効果的に実行されることが一般的に望まれる。
【０００６】
スレッドはプログラムの一部であり、プログラムの他の部分を独立して、また同時に実行されることができる。マルチ−スレッド処理環境において、一つを超えるスレッド（または一つを超えるプロセッサ）が、メモリのような共有リソースにアクセスされる。共有リソースへのアクセスを調整するための機構体は普通必要である。これは不一致または予期しない動作のようなインターフェアレンスを回避するためである。例えば、二つのスレッドが独立して特定メモリロケーションでデータを更新したときに、故意でないインターフェアレンスが発生することがある。アクセス調整機構は普通サブジェクトプロセッサの命令セットアーキテクチャに特定付けられている。多くの場合において、サブジェクトアクセス調整機構は、プログラムコード変換に追従するターゲットプロセッサ上で容易に実行されない。第１に、ターゲットプロセッサはハードウエア基準調整機構体を有していない。第２に、ターゲット調整機構体はサブジェクト機構体とは別に作動する。これらの例の両方において、サブジェクトコードによって予期されるサブジェクトアクセス調整機構に対する適切な代用装置を用意することが困難である。
【課題を解決するための手段】
【０００７】
本発明によれば、添付した特許請求の範囲に説明されたような装置および方法が提供される。本発明の好ましい特徴は、従属請求項および以下の説明から明白となろう。
次の説明は、本発明の実施例に基づいて実用化可能な種々の観点および利点の概要である。当業者に対して本明細書に添付された請求項の範囲に決して限定せず、また、限定することを意図せず詳細な設計の説明をより迅速に理解する助けとなる導入部として提供される。
【０００８】
本発明の一つの観点において、マルチサブジェクトスレッドを有するサブジェクトコードを、ターゲットプロセッサよって実行可能なターゲットコードに変換するプログラムコード内で使用するための共有リソースのアクセス調整機構を提供する方法が提供される。この方法は、（ａ）マルチサブジェクトスレッドの一つに各々関連付けられた複数のローカルデータ構造とサブジェクトスレッドの各々に共通するグローバルトークン（すなわち、数値カウンタ値）とを準備するステップと、（ｂ）サブジェクトコードをデコードし、共有リソースに関係するサブジェクトアクセス調整機構を設定するサブジェクト設定命令と、サブジェクトアクセス調整機構をチェックするサブジェクトチェッキング命令を識別するステップと、（ｃ）サブジェクト設定命令に応答して、グローバルトークンを調整し、および少なくとも現在のスレッドのためのローカルデータ構造内にローカルトークンを記憶するためにターゲットコードを発生するステップであって、ローカルトークンが調整されたグローバルトークンから導出されるステップと、（ｄ）サブジェクトチェッキング命令に応答して、少なくとも記憶されたローカルトークンをグローバルトークンと比較し、共有リソースに関連する潜在的なインターフェアレンスを決定するステップとを含む。
【０００９】
典型的な実施例において、発明者らは特にサブジェクトプログラムコードのターゲットコードへのダイナミック２進変換を提供するランタイム変換装置に関して特に有効なプログラムコード変換の促進に向けられた方法を開発してきた。
【００１０】
本発明はまた、本願で規定されたいずれの方法をも実行するように構成された変換ユニットを有する変換装置にまで拡大される。さらに、本発明はコンピュータによって実行可能な命令を記憶され個々に規定されたいずれの方法をも実行するコンピュータ読み取り可能記憶媒体にまで拡大される。
【００１１】
本明細書の一部に組み込まれ、かつ一部を構成する添付図面は好ましい実行を示し、以下に説明される。
【発明を実施するための最良の形態】
【００１２】
次の説明は当業者が本発明を製作して使用することを可能にし、本発明者が本発明を実行することを考慮した最良モードを指摘している。しかし、種々の修正例が当業者に容易に理解できるであろう。なぜなら、本発明の一般原理がここに特定されて改良プログラムコード変換方法および装置を提供することを規定しているからである。
【００１３】
以下の用語において、サブジェクトプログラムは、サブジェクトプロセッサを含んでいるサブジェクトコンピューティングプラットフォーム上で実行することが意図されている。ターゲットプロセッサを含んでいるターゲットコンピューティングプラットフォームはサブジェクトプログラムを実行するように使用され、変換装置を介して動的プログラムコード変換が実行される。変換装置は、ターゲットコードがターゲットコンピューティングプラットフォーム上で実行可能なように、サブジェクトコードからターゲットコードにコード変換する。
【００１４】
図１はターゲットコンピューティングプラットフォーム１４の一例を示し、複数のソフトウェア要素１７，１９，２０，２１および２７を記憶しているメモリ１８を伴ってターゲットレジスター１５を含んでいるターゲットプロセッサ１３を備えている。ソフトウェアは特に、オペレーティングシステム２０、変換されるべきサブジェクトコード１７、トランスレータコード１９、被変換コード（被トランスレートコード、ターゲットコード）２１およびアブストラクトレジスタバンク２７を含む。
【００１５】
一実施例において、トランスレータコード１９は、最適化にかかわらずサブジェクト命令セットアーキテクチャ（ＩＳＡ）のサブジェクトコードを別のＩＳＡの被変換ターゲットコードに変換するエミュレータである。すなわち、トランスレータ１９はサブジェクトプロセッサをエミュレートし、ターゲットプロセッサ１３上でターゲットコード２１としてサブジェクトプログラム１７を実際に実行する。別の実施例において、トランスレータ１９は、プログラムコード最適化を実行することによって同じＩＳＡの各々のサブジェクトコードをターゲットコードに変換するためのアクセラレータとして機能する。
【００１６】
一般的用語において、ターゲットコンピューティングプラットフォーム１４は特に、変換ユニット１９を備えている変換装置である。典型的な実施例において、トランスレータ１９は、変換装置を実行するソースコードの被コンパイル変形例である。トランスレータ１９およびトランスレータ１９によって生成された被変換コード２１は、ターゲットプロセッサ１３上でオペレーティングシステム２０に関連して作動する。ターゲットプロセッサ１３は一般的に、マイクロプロセッサまたは他の適切なコンピュータである。
【００１７】
図１に示した構造体は典型的な例として示しただけであり、例えば本発明の実施例はオペレーティングシステム内でまたは下流に存在するコード内で実行可能である。サブジェクトコード１７、トランスレータコード１９、オペレーティングシステム２０およびメモリ１８の記憶機構体は、当業者にとって知られている多様なタイプのものであることが可能である。
【００１８】
図１に基づく装置において、プログラムコード変換は、ターゲットコード２１が稼動中にランタイムで動的に実行されることが好ましい。トランスレータ１９は、被変換プログラム２１によりインラインで稼動する。この場合において、変換装置は動的２進変換装置である。別の例としての実施例において、トランスレータ１９は、個々のサブジェクト命令を一つまたはそれ以上の対応ターゲットコード命令として順番に変換し、かつ実行するインタープリタである。
【００１９】
トランスレータ１９は、ターゲットアーキテクチャのために編集されたアプリケーションとして使用されことが好ましい。サブジェクトプログラム１７がランタイムでトランスレータ１９によって変換され、ターゲットアーキテクチャ１４上で実行される。サブジェクトプログラム１７はランタイムでトランスレータ１９によって変換され、ターゲットアーキテクチャ上で直接実行される。トランスレータ１９は、サブジェクトプログラム１７によってなされたサブジェクトオペレーティングシステム（ＯＳ）コールも変換し、従ってコールがターゲットＯＳ２０を通過したときに正確に稼動する。
【００２０】
サブジェクトプログラム１７がトランスレータ１９に通過される操作は、インターリーブ方式で実行されるコードの二つの、すなわちトランスレータコード１９とターゲットコード２１の異なるタイプを包含している。トランスレータコード１９はランタイム前に、トランスレータ１９のハイレベルソースコード実装に基づいてコンパイラ等によって発生する。これに反して、ターゲットコード２１はランタイムを通して、変換されるプログラムの被記憶サブジェクトコード１７に基づいてトランスレータコード１９によって発生する。
【００２１】
典型的な実施例において、少なくとも一つのアブストラクトレジスタバンク２７が設けられる（サブジェクトレジスタバンク２７またはグローバルレジスタストア２７とも呼ばれる）。マルチプロセッサ環境において、オプション的に一つを超えるアブストラクトレジスタバンク２７がサブジェクトプロセッサのアーキテクチャに基づいて設けられる。
【００２２】
サブジェクトプロセッサ状態の表示は、トランスレータ１９とターゲットコード２１の要素によって提供される。すなわち、トランスレータ１９は、サブジェクトプロセッサ状態を変数および（または）オブジェクトのような種々の明確なプログラミング言語デバイス内に記憶する。トランスレータ１９を編集するように使用されるコンパイラが、状態とオペレーションとがトランスレータコード内でどのように実行されるかを決定する。これと比較して、ターゲットコード２１は、ターゲットレジスター１５内とターゲットコード２１のターゲット命令によって処理されるメモリロケーション１８内とにサブジェクトプロセッサ状態を絶対的に提供する。例えば、グローバルレジスタストア２７の低レベル表示は単に被割当メモリの領域である。しかし、トランスレータ１９のソースコードにおいて、グローバルレジスタストア２７はより高レベルでアクセス可能であり、かつ処理可能なデータアレイないしオブジェクトである。
【００２３】
図２は、プログラムコード変換中に制御を実行する方法の一例を示す概略フロー図である。
図２に示したように、制御装置は最初に、トランスレータ制御ループ１９０とともに存在する。ステップ２０１において、制御ループ１９０がトランスレータコード１９のコード発生機能１９２をコールし、一連のサブジェクトコード１７を対応する一連の被変換コード２１に変換する。次に、ステップ２０２において、この一連の被変換コード２１がターゲットプロセッサ１３上で実行される。好都合なことに、各一連の被変換コード２１の終端は、制御ループ２０１に制御装置を帰還させる命令を含む。換言すれば、サブジェクトコードをトランスレートし、実行するステップはサブジェクトプログラム１７の一部が順番にトランスレートされて実行されるようにインターレースされる。
【００２４】
ここで、用語「ベーシックブロック」は当業者にとってよく知られているであろう。ベーシックブロックは、正確な一つの入口点と、正確な一つの出口点とを伴うコードのセクションであって、ブロックコードを単一制御経路に限定している。この理由で、ベーシックブロックは制御フローの有効な基本的ユニットである。適切に、トランスレータ１９はサブジェクトコード１７を複数のベーシックブロックに分割し、各ベーシックブロックは単一入口点における第１命令と単一出口点における最後の命令（ジャンプ、コールまたはブランチ命令のような）との間の命令のシーケンスセットである。トランスレータはこれらのベーシックブロック（ブロックモード）のただ一つを選択するか、またはベーシックブロックのグループ（グループブロックモード）を選択する。グループブロックが、単一ユニットとして一緒に処理される二つまたはそれ以上のベーシックブロックを備えていることが望ましい。さらに、トランスレータはサブジェクトコードの同じベーシックコードを表わすイソブロックを形成するが、異なる入口条件下である。
【００２５】
典型的な実施例において、中間表示（ＩＲ）のツリーが、オリジナルサブジェクトプログラム１７からターゲットコード２１を発生するプロセスの一部としてサブジェクト命令シーケンスに基づいて発生する。ＩＲツリーは、サブジェクトプログラムによって計算された表現と、これによって実行される操作との概略説明である。後に、ターゲットコード２１がＩＲツリーに基づいて発生する。ＩＲノードの収集は実際に非循環図（ＤＡＧ）に向けられるが、口語的に「ツリー」と呼ばれる。
【００２６】
当業者が理解可能なように一実施例において、トランスレータ１９はＣ＋＋のようなオブジェクト指向プログラミング言語を使用して実行される。例えば、ＩＲノードはＣ＋＋オブジェクトとして実行され、他のノードに対する参照は他のノードに対応するＣ＋＋オブジェクトに対するＣ＋＋参照として実行される。従って、ＩＲツリーは互いに種々の参照を包含するＩＲノードオブジェクトの収集として実行される。
【００２７】
さらに、検討中の実施例において、ＩＲジェネレーションは、サブジェクトプログラム１７が稼動されるように意図されたときに、サブジェクトアーキテクチャの特定の特徴に対応するアブストラクトレジスタ規定群を使用する。例えば、サブジェクトアーキテクチャ上の各物理的レジスタのためのユニークなアブストラクトレジスタ規定がある（「サブジェクトレジスタ」）。トランストレータ内のアブストラクトレジスタ規定は、それなりに、ＩＲノードオブジェクト（すなわち、ＩＲツリー）に対する参照を包含しているＣ＋＋オブジェクトとして実行されることができる。アブストラクトレジスタ規定群によって参照される全ＩＲツリーの集合体は、稼動ＩＲフォーレストとして参照される（「フォーレスト」は多数のアブストラクトレジスタルーツを包含しているからであり、各々ＩＲツリーに関係している。）これらのＩＲツリーおよび他のプロセスは適切に、トランスレータコードジェネレーション関数１９２の一部を形成している。
【００２８】
図３は、本発明の典型的な実施例におけるプログラムコード変換に後続するサブジェクトプログラム内の命令とターゲットプログラム内にある命令との間の関係の一例を示す概略図である。
【００２９】
本実施例において、サブジェクト命令Ｓ１−Ｓ３は機能的に、等価ターゲット命令Ｔ１−Ｔ３の結果となる。サブジェクト命令Ｓ１はデッドコード削除最適化によるなどして除去され、発生したターゲットコード内にカウンターパートを有していない。サブジェクト命令Ｓ２は一つの等価ターゲット命令Ｔ３の結果となる。これに反して、サブジェクト命令Ｓ３は二つのターゲット命令Ｔ１およびＴ２の結果となる。ターゲットとサブジェクトコード命令間には、１対０、１対１、１対多数、または多数対１の関係がある。
【００３０】
図３にも示したように、別の一般的に使用される最適化はコード再スケジューリングを実行することであり、これによってターゲットコード内の命令シーケンスがサブジェクトコード内のオリジナルシーケンスと等価にならない。ここで、第２サブジェクト命令Ｓ２が第３ターゲット命令Ｔ３として再スケジュールされる。
【００３１】
サブジェクトアクセス協調
図４は、サブジェクトプロセッサ４００の一例を示す概略図である。サブジェクトプロセッサ４００は、当業者によく知られているようにメモリ４０１にアクセスし、少なくとも一つの汎用目的レジスタ４０２を含む。図示されるサブジェクトプロセッサ４００は、ＲＩＳＣプロセッサの一般的なものである。
【００３２】
本実施例において、サブジェクトプロセッサは、リザベーション４０３の形態をなすアクセス調整機構をさらに含む。一般的に、リザベーション４０３は、サブジェクトプロセッサ４００の物理的ハードウエアの一部をなしている。リザベーション４０３は、メモリ４０１のような共有リソースのためのアクセス調整機構を提供する。普通、ただ一つのリザベーション４０３がプロセッサ４００に設けられている。
【００３３】
リザベーション４０３は、潜在的なインターフェアレンスが共有リソース、すなわちメモリ４０１に関して発生しているかどうかを検出するのに使用される。
本実施例において、リザベーション４０３は、予約フラグ４０４、特定目的リザベーションレジスタ４０５を備えている。予約フラグ４０４は一般的に１ビットフラグであり、リザベーションが設定されているかクリアされているかを示す。リザベーションレジスタ４０５はメモリアドレスを記憶するのに使用される。
【００３４】
最も一般的に、リザベーション４０３は「ロード−リンク」と「ストア−コンディショナル」タイプの命令とを合成するのに使用される。ロード−リンク命令はアクセス調整機構を設定（またはシール）するのに使用される。ストア−コンディショナル命令はアクセス調整機構をチェックし、共有リソースによる潜在的なインターフェアレンスを検出するのに使用される。
【００３５】
これらの命令の各々は特定アドレスに関連しており、一例として、
再試行：
ロード−リンク［ＭＥＭ  ＬＬ］
．．．ロード−データに対して操作を実行、
ストア−コンディショナル［ＭＥＭ  ＳＣ］
ストア−コンディショナルが失敗であれば分岐：再試行
．．．
（retry:
load-link [MEM LL]
...perform operations on the loaded data
store-conditional [MEM SC]
branch if store-conditional fails: retry
...）である。
【００３６】
ロード−リンクタイプの命令が遭遇されたとき、データはこの命令に関連するメモリアドレス（すなわち、［ＭＥＭ  ＬＬ］）から読み込まれ、アドレス［ＭＥＭ  ＬＬ］がリザベーションレジスタ４０４に書き込まれ、予約フラグ４０５が設定される。
【００３７】
メモリアドレスから読み込まれたデータが、次に一つまたはそれ以上の操作（すなわち、一つまたはそれ以上の介在サブジェクト命令）に使用されることができる。例えば、インクリメント操作、付加操作またはビット−シフト操作が、読み込まれたデータに対して実行される。一般的に、少数の操作のみが対応ロード−リンクと一つ、二つまたは三つの命令のようなストア−コンディショナル命令間で実行される。この操作はインターフェアレンスの可能性を低減する。しかし、概して一対のロード−リンクとストア−コンディショナル命令との間で実行されることができる多数の命令に限定されない。
【００３８】
ストア−コンディショナル命令は、これらの介在操作の結果をメモリ４０１に戻して書き込むのに使用されるが、普通、データが読み込まれた同じメモリアドレスに戻される。すなわち、ロード−リンクおよびストア−コンディショナル命令は普通、［ＭＥＭ  ＬＬ］が［ＭＥＭ  ＳＣ］と同じアドレスとなるような一致した対で生成される。
【００３９】
ストア−コンディショナル命令は、任意のストアアドレス［ＭＥＭ  ＳＣ］をリザベーションレジスタ４０４内に記憶されたアドレス（なおもＭＥＭ  ＬＬになければならない）と比較する。被比較アドレスが同じであり（すなわち、ＭＥＭ  ＳＣが記憶されたＭＥＭ  ＬＬと同じ）、予約フラグ４０５がなおも設定されておれば、次にストアが実行される。
【００４０】
マルチ−スレッド環境において、潜在的にインターフェアする事象がサブジェクトシステム内（すなわち、別のサブジェクトスレッド内または別のサブジェクトプロセッサ上）のどこかで発生するかもしれない。ここで、潜在的にインターフェアする事象は、（ａ）レジスタフラグ４０４がなおも設定されていなければならないときにクリアされること、又は、（ｂ）リザベーションレジスタ４０５内に保持されたアドレスがストア−コンディショナル命令内で特定されたアドレス（すなわち、［ＭＥＭ  ＳＣ］）と同じでないこと、のいずれかによって検出される。
【００４１】
ストア−コンディショナル命令が続行（すなわち、インターフェアレンスが検出されない）されれば、次に予約フラグ４０４がクリアされ、プログラム実行が続行される。しかし、ストア−コンディショナル命令が失敗すれば、次に命令がインターフェアレンスなしに実行されるまで、普通はプログラムが反復してロード−リンク命令にループバックする。
【００４２】
潜在的にインターフェアする事象の実施例として、割り込み、システムコール、またはリザベーションレジスタ４０４に保持されたメモリアドレスへの記憶によって予約フラグ４０５は一般的にクリアされる。
【００４３】
別の実施例として、第２ロード−リンク命令（例えば、別のスレッドにある）が予約フラグ４０５を設定し、また、リザベーションレジスタ４０４内に記憶されたアドレスを第２ロード−リンク命令に関連するアドレス（例えば、［ＭＥＭ  ＬＬ２］）に変更する。従って、第２ロード−リンク命令は第１ストア−コンディショナル命令を失敗させる。
【００４４】
リザベーション４０３を高効率で機能させるために、リザベーションレジスタ４０４と予約フラグ４０５とを設定し、かつチェックするためのロジックゲートが一般的にサブジェクトプロセッサ４０５にハードワイヤードされる。同様にして、予約フラグ４０５をクリアするためのロジックゲートが一般的にサブジェクトプロセッサにハードワイヤードされる。このように特別に適合されたハードウエアが、これらのプロシージャに関連するコンピュータ操作によるオーバーヘッドを最少にする。
【００４５】
特定の実施例として、パワーＰＣタイプのプロセッサがリザベーションを提供するとともに命令セットアーキテクチャを有しており、「ｌｗａｒｘ」および「ｓｔｗｃｘ」として知られているロード−リンクおよびストア−コンディショナル機能のための一対の命令をサポートする。本実施例のさらなる背景として、より詳細な説明がhttp://www-128.ibm.com/developerworks/library/pa-atom.で利用可能である。
【００４６】
このサブジェクトハードウエア基準リザベーションシステムにおいて、割り込みが受信された、またはシステムコールが実行されたときに、リザベーションはブロウされる（すなわち、フラグ４０５がクリアされる、またはリザベーションレジスタ４０４が変更される）。スレッド間でコンテキストの切換えが行われた場合には、ＯＳが再スケジュールタスクを選択すれば（一般的に割り込みまたはシステムコールのときに実行される）、実行中のスレッドのロード−リンクが別のスレッドのストア−コンディショナルと一致しない（ストアが誤って実行されることがある）。そのようなものとして、ハードウエアレベルにおいてソフトウェアタスク毎にではなく、一つのリザベーションはプロセッサ毎に設けられている。
【００４７】
ターゲットアクセス協調
図５はターゲットコンピューティングプラットフォーム１４の概略図であって、本発明の典型的な実施例に使用される共有リソースへのアクセスを協調するための機構体を含む。
【００４８】
トランスレータ１９は、一つまたはそれ以上のサブジェクトプログラム１７内で多数のスレッドを支持するように構成されている。トランスレータ１９は多数のスレッドによるメモリ１８のような共有リソースへのアクセスを協調し、潜在的なインターフェアレンスの検出を可能にする。
【００４９】
図５を参照して、トランスレータ１９はグローバルトークン５０１、および一つまたはそれ以上の組をなすローカルデータ５０２を提供し、これらは共同してメモリ１８へのアクセスを協調するように使用される。
【００５０】
典型的な実施例において、トランスレータ１９はサブジェクトプログラム１７の各スレッドに対して一つのローカルデータ構造体５０２を提供する。図５は第１および第２スレッド１７１，１７２に各々関連付けられた第１および第２ローカルデータ構造体５０２ａ，５０２ｂを示す。
【００５１】
アクセス協調機構体（すなわち、グローバルトークン５０１および各ローカルデータ構造体５０２）が、図５に示すようにメモリ１８内に好都合に記憶されている。別の構成として、データの全てまたは一部が、もし入手できれば、ターゲットプロセッサ１３の適切なレジスタ１５に記憶される。すなわち、ターゲットコード２１がターゲットレジスター内のアクセス協調データの一つまたはそれ以上の要素を保持することができる。特に、グローバルトークン５０１がターゲットレジスター１５に保持されることが望ましい。
【００５２】
図５に示したように、各ローカルデータ構造体５０２ａ，５０２ｂは、ローカルトークン５２１、ローカル値５２２およびローカルメモリアドレス５２３を備えている。ローカルトークン５２１は、グローバルトークン５０１から導出されたトークンを記憶する。ローカル値５２２は、共有リソースから読み込まれたデータ値（すなわち、メモリ１８からの読み込み）を記憶する。ローカルメモリアドレス５２３は、データの読み込み元のアドレスを記憶する。
【００５３】
ローカルメモリアドレス５２３は、サブジェクトアドレススペースを表わすサブジェクトアドレスとして（例えば、図４のサブジェクトシステムのメモリ４０１に適したアドレスとして）適切にフォーマットされる。サブジェクトアドレススペースはサブジェクト命令１７によって参照される。トランスレータ１９は、サブジェクトアドレスを、ターゲットコンピューティングシステム１４とターゲットメモリ１８に適切なターゲットアドレスに変換する。別の構成として、記憶されたローカルメモリアドレス５２３を被変換されたターゲットアドレスとしてフォーマットする。
【００５４】
図６は、本発明の実施例に使用されるアクセス調整機構を提供する好ましい方法の概略図である。この方法はトランスレータ１９内で適切に実行され、ターゲットコード２１を発生してターゲットプロセッサ１３でこの方法を実行する。
【００５５】
図６を参照すると、この方法には、図５を参照して上述したように、グローバルトークン５０１および少なくとも一つのローカルデータ構造体５０２を準備するステップ６０１が含まれる。
【００５６】
ステップ６０２はサブジェクトプログラム１７をデコードし、サブジェクトアクセス調整機構（すなわち、図４のサブジェクトプロセッサ４００に設けられたアクセス調整機構４０３）を参照する命令を識別するステップを含む。特に、このステップは（ａ）サブジェクトアクセス調整機構を設定するサブジェクト設定命令（例えば、ロード−リンク命令）、および（ｂ）サブジェクトアクセス調整機構をチェックするサブジェクトチェッキング命令（例えば、ストア−コンディショナル命令）を識別するステップを含む。
【００５７】
ステップ６０３は、（ａ）サブジェクト設定命令に応答して、グローバルトークン５０１を調整し、第１スレッド１７１のためにローカルデータ構造体５０２を記憶するステップを含む。ここで、サブジェクトロードリンク命令に遭遇したときに、ローカルトークン５２１、ローカル値５２２およびローカルメモリアドレス５２３が、ターゲットコードによってローカルデータ構造体５０２（例えば、メモリ１８）に書き込まれる。
【００５８】
ステップ６０４は、（ｂ）サブジェクトチェッキング命令に応答して、記憶されたローカルデータ構造体５０２をグローバルトークン５０１の少なくとも現在値と比較して、共有リソース１８に対する潜在的なインターフェアレンスを判断するステップを含む。この比較ステップでは、サブジェクトチェッキング命令内に設けられたデータとローカルデータ構造体５０２との比較も行われる。さらに、ステップ６０４は、グローバルトークン５０１を調整するステップを含む。
【００５９】
図７は、図６のステップ６０３をより詳しく示す概略フロー図である。
トランスレータ１９は、サブジェクトリザベーション４０３で動作するサブジェクトコードのロード−リンク命令ｌｏａｄ−ｌｉｎｋ［ＭＥＭ  ＬＬ］のようなサブジェクト設定命令を識別する。トランスレータによって生成された対応ターゲットコード２１が、図７に示されたステップを実行する。簡単に説明すると、図７は、グローバルトークン５０１を調整するステップ７０１、データを共有リソースから読み込むステップ７０３、ならびにローカルデータ構造体５０２を記憶するステップ７０２，７０４および７０５を示す。
【００６０】
ステップ７０１は、グローバルトークン５０１を調整するステップを含む。適切には、グローバルトークンは６４ビット数値カウンタのような数値であり、グローバルトークンの調整は数学的操作である。最も好都合なことに、グローバルトークン５０１の調整はカウンタのインクリメントである。インクリメント命令は多数のターゲットプロセッサ１３中で相対的に安価に実行される。別の方式として、カウンタがデクリメントされる。調整の他の形式も可能である。調整は、グローバルトークンがその前の形式または値から変化したことを示す。さらに、グローバルトークンは、後段調整に応じて再度変化する。
【００６１】
理想的には、グローバルトークン５０１を調整する一つの操作または複数の操作自体がインターフェアレンスなしに実行されることが望ましい。そうでなければ、グローバルトークン５０１が正確に調整されるという保証がない。特に、トランスレータ１９自体が複数のターゲットスレッドの中の一つのスレッドとしてターゲットプロセッサで稼動する場合がある。
【００６２】
適切には、グローバルトークン５０１は、ターゲットプロセッサに適した機構体を使用してインターフェアレンスなしに調整される。理想的には、命令セットアーキテクチャにターゲットプロセッサがあれば原子操作が使用され、あるいはターゲットプロセッサ自体のロード−リンクおよびストア−コンディショナル機構体があれば、これが使用される。
【００６３】
いくつかの命令セットアーキテクチャが、メモリからのデータの読み込み、データに対する操作、および結果のメモリへの書き込みを単一ステップとして操作を支持する。このような操作は別々のサブ−ステップを備えておらず、従って分解されることができない。このタイプの操作は論理的に分割できないので、「原子的」として知られている。普通、原子的操作は単一バスサイクル内のプロセッサで発生する。論理的に、データを操作する他の試行は、原子的操作の前または後のいずれかで実行されなければならない。
【００６４】
原子的操作は普通、ＣＩＳＣプロセッサに設けられている。特定の実施例として、ターゲットプロセッサがｘ８６ファミリプロセッサを備えており、グローバルトークン５０１の調整ステップは、原子的比較−交換タイプの命令（例えば、「ｃｍｐｘｃｈｇ」命令）を使用してグローバルトークンカウンタをインクリメントするステップを含む。
【００６５】
ステップ７０２は、ローカルデータ構造体５０２のローカルトークン５２１としてグローバルトークン５０１の現在値を記憶するステップを含む。
ステップ７０３は、サブジェクトロードリンク命令内で特定されたメモリロケーション（すなわち、サブジェクトアドレス［ＭＥＭ  ＬＬ］に関係するターゲットメモリ１８内のロケーション）からデータをロードするステップを含む。すなわち、サブジェクト設定命令は共有リソースに関連する設定アドレスを提供し、データ値が設定アドレス（すなわち、必要とされれば適切なアドレス変換により）に応答して共有リソースから読み込まれる。
【００６６】
ステップ７０４および７０５は、ローカルデータ構造体５０２内で、ローカル値５２２とローカルメモリアドレスとして読み込まれたデータと設定アドレス（例えば、ＭＥＭ  ＬＬ）のコピーとを記憶するステップを含む。
【００６７】
ステップ７０１から７０５を実行するための一般的な翻訳言語は、
[atomically] adjust global token
load [MEM LL]
local_token = global token
local_mem = MEM LL
local_value = value in MEM LLである。
【００６８】
図８は、図６のステップ６０４をより詳しく示す概略フロー図である。
サブジェクトコードのストア−コンディショナル命令は、図８に示すようにターゲットコード内でいくつかのサブ−ステップに好便に分割される。
【００６９】
ステップ８０１は、サブジェクトコードのストア−コンディショナル命令内で特定されたアドレスから導出されたチェッキングアドレス（すなわち、［ＭＥＭ  ＳＣ］）をローカルデータ構造体５０２内の記憶されたローカルメモリアドレス５２３と比較するステップを含む。再度、必要ならばアドレス変換が実行される。比較が成功に終わる（チェッキングアドレスと記憶されたローカルメモリアドレスが同一である）と、サブジェクトコードのストア−コンディショナル命令とそれに先立つロード−リンク命令とが一致することが示される。比較が失敗（両アドレスが同一でない）している場合は、別のロード−リンク命令が現行のスレッド１７１で実行されたことを示している。このような状況は、サブジェクトコードが下手に書き込まれた場合に故意でなく発生する。ここで、第１ロード−リンク命令と対応するストアーコンディショナル命令との間に介在する命令がインターフェアレンスなしに実行されたという保証はない。
【００７０】
ステップ８０２は、被ストアローカルトークン５２１の、記憶されたグローバルトークン５０１との比較ステップを含む。ローカルトークン５２１がグローバルトークン５０１と等しくなければ、グローバルトークン５０１は、別のスレッド１７２内（または現スレッド１７１内においても）の潜在的インターフェアリング命令によって調整されることになる。例えば、別のスレッドはインターフェアリングロード−リンク形式の設定命令を実行することになる。この場合において、記憶されたローカルトークン５２１がインターフェアレンスなしに実行されるので、介在操作の保証はない。
【００７１】
他のターゲットコード命令は、理想的に上述したように[atomically]adjust globaltokenのような原子的操作を使用してグローバルトークン５０１を調整するように設定されることができる。例えば、ストア、システムコールまたはサブジェクトプロセッサ上の割り込みは通常、サブジェクトプロセッサの予約フラグ４０５をクリアする。これらのサブジェクトプロセッサ事象および命令がグローバルトークン５０１を調整するターゲットコードに変換されることが理想的である。
【００７２】
ステップ８０３において、local valueとして記憶された値５２２は、サブジェクトチェッキング命令（ストア−コンディショナル命令）内に特定付けられたメモリロケーション（［ＭＥＭ  ＳＣ］）に現在ストアされている値と比較される。両値が同一でなければ、別のストアがメモリロケーション上に発生していることを示している。従って、サブジェクト設定命令とチェッキング命令との間の介在命令がインターフェアレンスなしに実行されなかったことが検出される。
【００７３】
適切なメモリアドレスへの書き込みが続行される別のストア命令の値に対応するlocal valueの値５２２が偶然に一致する可能性がある。しかし、この付加的チェックは、グローバルトークンが予期値に調整され、同じ値が記憶されたときにのみ誤判定となることを意味している。
【００７４】
理想的には、ステップ８０１〜８０３のチェックは組み合わされて実行される。これら三つのチェックは一緒になって強固であるが比較的安価な機構体を提供してマルチ−スレッド環境においてメモリのような共有リソースに関連する潜在的なインターフェアレンスを検出する。
【００７５】
ステップ８０４は、サブジェクトチェッキング命令（すなわち、ストア−コンディショナル命令）によって要求されたストアを実行するステップを含む。すなわち、ステップ８０１，８０２および８０３の比較の各々が成功した場合には、介在操作の結果がサブジェクトチェッキング命令内に特定されたロケーション（［ＭＥＭ  ＳＣ］）に記憶される。
【００７６】
ステップ８０５は、ステップ７０１につき上述したように、原子的インクリメント（例えば、比較−交換）命令のようなグローバルトークンを調整するステップを含む。
ステップ８０６は、サブジェクトプログラムの操作が目下続行されるようにチェッキングと記憶操作とが成功したことを指示するステップを含む。例えば、成功／失敗フラグが用意され、ターゲットコード２１またはトランスレータ１９によって参照される。
【００７７】
ステップ８０７および８０８は、ステップ８０１〜８０３の比較操作が成功しない（失敗）の場合に到達される。
ステップ８０７は、ステップ７０１につき上述したように、原子的インクリメント（例えば、比較−交換）命令のようなグローバルトークンを調整するステップを含む。
【００７８】
ステップ８０８は、チェッキングと記憶操作が失敗したことを指示するステップを含む。例えば、成功／失敗フラグが失敗を指示するように設定され、ターゲットコード２１またはトランスレータ１９によって参照される。理想的には、成功／失敗フラグは枝路帰還され、対応ロード−リンク命令からの全シーケンスを再試行するのに使用される。
【００７９】
ステップ８０１〜８０８のためのプログラム命令の例は、以下の汎用疑似コードで示す。
If (local mem == MEM SC)
and (local token == global token)
and (local value == contents of MEM SC)
then:
perfom sotre [MEM SC]
[atomically] adjust global token
set success flag
else
[atomically] adjust global token
set failure flag
ここで説明する典型的な実施例は、多くの有益性と利点とを有している。ここで説明する実施例は、アクセス協調へのソフト指向アプローチを有利に提供し、なおもトランスレータ内での実行が比較的有効であり、費用効率の高く、且つターゲットコードとして実行される。
【００８０】
ここで提示された例は一般的であり、本発明の原理がサブジェクトプロセッサおよびターゲットプロセッサの全ての組み合わせに適用され、サブジェクトコード設定およびチェッキング命令（例えば、それぞれ、ロード−リンクおよびストア−コンディショナル命令）が異なるアクセス調整機構が使用されるか、またはこの種の機構体を備えていないアーキテクチャ上で実行される。特に、典型的な実施例には、リザベーションのためにハードウエアサポートを提供しないターゲットプロセッサ上で効果的に実行されるハードウエア指向リザベーションと等価である特性が認められている。
【００８１】
特に、非限定例であるＰｏｗｅｒＰＣおよびＭＩＰＳタイプのプロセッサは、ハードウエア支持リザベーションを使用するロード−リンクおよびストア−コンディショナル機構体を提供する。それと対照的に、ｘ８６、イタニウム（Ｉｔａｎｉｕｍ）（登録商標）およびスパーク（Ｓｐａｒｃ）タイプのプロセッサはリザベーションを提供しない。好ましい実施例において、これらのプロセッサは比較的安価なメモリ上で原子的操作を実行することができる。
【００８２】
ここで説明する原理は、サブジェクトプロセッサおよび目的プロセッサの両方がロード−リンクおよびストア−コンディショナル機構体を有しているが、これら両機構体間に直接マッピングがない場合、適用されることができる。さらに、ロード−リンクおよびストア−コンディショナル機構体を有しているサブジェクトプロセッサおよびターゲットプロセッサ両者の場合において、なおもサブジェクトコード内でターゲットプロセッサリザベーションをロード−リンクおよびストア−コンディショナル命令に依存しない状態を保持することが望ましい。これはトランスレータもターゲットプロセッサを稼動し、それ自体ターゲットプロセッサリザベーションを使用するからである。この方式において、トランスレータと被変換ターゲットコードとの間のインターフェアレンスは低減される。
【００８３】
上述したように、本発明の典型的な実施例は、ソフトウェア層において、割り込みまたはシステムコールのような再スケジュール事象の検出は困難または費用がかかる可能性があるという観察に基づいている。しかし、スレッドを通しての情報を記憶するステップはそう費用がかからない。好ましい設計はスレッドを通して三つの情報を記憶するステップに基づいている。すなわち、アクセス調整機構が設定されていることを示すフラグ、ロードされたアドレス、およびロードされた値である。クリアされた（すなわち、失敗状態を示すように設定された）フラグは、システムコールをこのスレッド内で発生させるか、トランスレータを介して処理した割り込みを発生させなければならない。
【００８４】
値は、適切なメモリ内容がロード−リンク設定命令に続くストア−コンディショナルチェッキング命令の一点で変化したときを検出するのに使用される。理想的に、システムは、値がロード−リンクの一点にあるときのようにストア−コンディショナルチェッキング命令にあるのと同じであるかどうか検出するだけでなく、あらゆる介在変化も検出しなければならない。ソフトウェアからこれらの値を検出するステップの費用は潜在的に非常に高い。
【００８５】
実際に、任意のメモリアドレスは一般的に、原子的または非原子的命令によってのみアクセスされる。このように、ストア−コンディショナル命令をしてシステム内の全アクセス調整機構を禁止せしめるのに充分である。この方式は、潜在的にアクセス調整機構をして不必要に禁止せしめるが、いずれにしても、この動作は（例えば、スレッドがロード−リンクとストア−コンディショナル命令間のハードウエア割り込みを受けるが、操作の原子状態を伴う介在事象インターフェアレンスの生じることはない）発生し得る。ストア−コンディショナル命令停止のためにアクセス調整機構のどこか他のところで割り込むために、本発明の典型的な実施例が、１ビットモデルを特徴として保持されているリザベーションを指示する上述したような正パースレッドモデルからグローバルトークンを導入するモデルに移動する。パースレッドフラグがパースレッドローカルトークンとして設けられている。この構成の利点は全他のスレッド内の全アクセス調整機構が、システム内で全スレッドのフラグを更新するように試行するのではなく、むしろ単一グローバルトークンをただ修正することによって失敗させるようにする。
【００８６】
僅かな好ましい実施例を示すとともに説明したが、添付した請求項に規定したように本発明の範囲から逸脱することなしに種々の変更および修正できることが当業者に理解できるであろう。
【００８７】
本願に関連する本願と同時にまたは以前に提出され、また、本願に対する公開審査にかけられた全書類および文献に注意が向けらており、さらに、全てこの種の文書および文献の内容はここに引用して援用される。
【００８８】
本願（いずれの添付請求項、要約および図面を含む）に説明された特徴の全ておよび（または）説明したいずれの方法のステップおよびプロセスの全ては、このような特徴の少なくともいくつかおよび（または）ステップが相互に排他的である組み合わせを除外して、いずれの組み合わせを組み合わせることができる。
【００８９】
本願（いずれの添付請求項、要約および図面を含む）に説明された各特徴は、明確に説明がない限り、同じ、等価または同様の目的を発揮する別の特徴によって置換することができる。従って、明確に説明がない限り、説明された各特徴は等価な一般的シリーズまたは同様の特徴のほんの一例である。
【００９０】
本発明は前述の実施例の詳細まで限定するのもではない。本発明は本明細書（いずれの添付請求項、要約および図面を含む）で説明した特徴のいずれの新しい特徴、またはいずれの新しい組み合わせに、または説明されたいずれの方法のステップまたはプロセスのいずれの新しい特徴、またはいずれの新しい組み合わせに拡大する。
【図面の簡単な説明】
【００９１】
【図１】明細書に見出される本発明の実施例の装置のブロック図である。
【図２】プログラムコード変換中、実行制御の方法の例を示す概略フロー図である。
【図３】プログラムコード変換に後続するサブジェクト命令とターゲット命令と間の関係を示す概略図である。
【図４】ハードウエア指向アクセス調整機構としてのリザベーションを有するサブジェクトプロセッサの例を示す概略図である。
【図５】本発明の典型的な実施例に使用された共有リソースのためのアクセス調整機構を有するターゲットプロセッサの概略図である。
【図６】本発明の典型的な実施例に使用された方法を示す概観図である。
【図７】図６の方法をより詳しく示した概略フロー図である。
【図８】図６の方法をより詳しく示した概略フロー図である。
【図１】
0005182816.tif 000002
【図２】
0005182816.tif 000003
【図３】
0005182816.tif 000004
【図４】
0005182816.tif 000005
【図５】
0005182816.tif 000006
【図６】
0005182816.tif 000007
【図７】
0005182816.tif 000008
【図８】
0005182816.tif 000009