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