(57)【特許請求の範囲】
【請求項１】
対象プログラム・コードがトランスレータによって変換されたターゲット・コードを実行するためのマルチプロセッサ・コンピューティング・システムであって、
少なくとも第１ターゲット・コード部分と第２ターゲット・コード部分とを含む複数のターゲット・コード部分を格納するメモリと、
前記メモリ内に格納された前記複数のターゲット・コード部分を実行する複数のターゲット・プロセッサであって、前記マルチプロセッサ・コンピューティング・システムの第１ターゲット・プロセッサが前記第１ターゲット・コード部分を実行し、且つ、前記マルチプロセッサ・コンピューティング・システムの第２ターゲット・プロセッサが前記第２ターゲット・コード部分を実行する、前記ターゲット・プロセッサと、
前記複数のターゲット・プロセッサによる前記複数のターゲット・コード部分の実行を制御するコントローラ・ユニットと
を備えており、
前記コントローラ・ユニットが、
前記メモリをアドレッシングするのに使用される仮想アドレス空間を複数の仮想アドレス空間領域に分割し、且つ前記複数のターゲット・コード部分の実行を制御して、最初に第１のメモリ一貫性モデルに従って前記複数の仮想アドレス空間領域を介して前記メモリにアクセスするアドレス空間割振りユニットと、
前記第１ターゲット・コード部分と少なくとも前記第２ターゲット・コード部分とによってアクセス可能な前記メモリ内の共有メモリ区域に対して前記第１ターゲット・コード部分を実行する際に生成されるメモリ・アクセス要求を検出し、且つ前記共有メモリ区域にアクセスする前記第１ターゲット・コード部分内の少なくとも１つの命令のグループを識別する共有メモリ検出ユニットと、
前記共有メモリ検出ユニットが前記命令のグループを識別することに応じて、メモリ一貫性保護を適用して、前記第１ターゲット・コード部分内の前記識別された命令のグループを実行する際に前記検出された共有メモリ区域へのアクセスに関して第２のメモリ一貫性モデルの下で実行するメモリ保護ユニットと
を含む、前記マルチプロセッサ・コンピューティング・システム。
【請求項２】
前記コントローラ・ユニットが、前記メモリへのアクセスを順序付けるために、前記第１のメモリ一貫性モデルの下で実行する前記第１および第２のターゲット・コード部分を生成し、
前記メモリ保護ユニットが、前記メモリ一貫性保護を適用することによって、前記第１ターゲット・コード部分内の前記識別された命令のグループが前記共有メモリ区域にアクセスする際に前記第２のメモリ一貫性モデルの下で実行される、
請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項３】
前記アドレス空間割振りユニットが、前記複数の仮想アドレス空間領域のうちの第１仮想アドレス空間領域を前記第１ターゲット・コード部分の実行に割り振り、前記複数の仮想アドレス空間領域のうちの異なる第２仮想アドレス空間領域を前記第２ターゲット・コード部分の実行に割り振る、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項４】
前記仮想アドレス空間が、前記マルチプロセッサ・コンピューティング・システム内における前記コントローラ・ユニットおよび前記複数のターゲット・コード部分の実行のために提供され、
前記アドレス空間割振りユニットが、前記コントローラ・ユニットおよび前記複数のターゲット・コード部分の実行のために提供された前記仮想アドレス空間を前記複数の仮想アドレス空間領域に分割する、
請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項５】
前記アドレス空間割振りユニットが、２ｎビット（ｎは、正の整数）のサイズを有する前記仮想アドレス空間を、各々２ｎビット未満のサイズを有する前記複数の仮想アドレス空間領域に分割する、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項６】
前記アドレス空間割振りユニットが、２６４ビットのサイズを有する前記仮想アドレス空間を、各々２３２ビットのサイズを有する前記複数の仮想アドレス空間領域に分割する、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項７】
前記アドレス空間割振りユニットが、前記複数の仮想アドレス空間領域のそれぞれで前記第１および第２のターゲット・コード部分を実行させる、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項８】
前記アドレス空間割振りユニットが、前記複数の仮想アドレス空間領域のそれぞれの所定のベース・アドレスを前記ターゲット・コードの実行時に決定される前記仮想アドレス空間領域内のオフセットと組み合わせることによって、メモリ・アクセスを実行するための前記第１および第２のターゲット・コード部分をそれぞれ生成する、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項９】
前記アドレス空間割振りユニットが、少なくとも１つの共有仮想アドレス空間領域と少なくとも１つのプライベート仮想アドレス空間領域とを含む前記複数の仮想アドレス空間領域を提供し、かつ、
前記アドレス空間割振りユニットが、前記複数のターゲット・プロセッサの少なくとも第１および第２のレジスタを参照するターゲット・コード命令を有する少なくとも前記第１ターゲット・コード部分を生成し、
前記第１レジスタが、前記プライベート仮想アドレス空間領域の第１ベース・アドレスを格納し、前記第２レジスタが、前記共有仮想アドレス空間領域の第２ベース・アドレスを格納し、
前記第１ターゲット・コード部分内の少なくとも１つのターゲット・コード命令のグループが、前記第１ベース・レジスタ内に格納された前記第１ベース・アドレスを参照して前記プライベート仮想アドレス空間領域に対して前記メモリにアクセスし、かつ、前記第１ターゲット・コード部分内の少なくとも１つのターゲット・コード命令のグループが、前記第２ベース・レジスタ内に格納された前記第２ベース・アドレスを参照して前記共有仮想アドレス空間領域に対して前記メモリにアクセスする、
請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１０】
前記共有メモリ検出ユニットが、前記複数のターゲット・プロセッサのそれぞれのターゲット・プロセッサでの実行中に前記第１ターゲット・コード部分によって実行され、共有メモリ区域のマッピングを明示的に要求するメモリ・マッピング・システム呼出しをインターセプトすることによって明示的に共有されるメモリ区域に関する要求を検出し、かつ、
前記共有メモリ検出ユニットが、前記要求された明示的に共有されるメモリ区域を前記複数の仮想アドレス空間領域の中の共有仮想アドレス空間領域にマッピングし、前記明示的に共有されるメモリ区域を表すために前記第１ターゲット・コード部分に割り振られた前記仮想アドレス空間領域のプライベート仮想アドレス空間領域内のポインタを返す、
請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１１】
前記共有メモリ保護ユニットが、それぞれのターゲット・プロセッサ上での実行中に前記第１ターゲット・コード部分によって実行され、前記第１ターゲット・コード部分の実行から複製される前記第２ターゲット・コード部分の実行の開始を要求するクローンタイプ・システム呼出しをインターセプトすることによってプライベート・メモリ区域の間接的な共有を検出し、
前記アドレス空間割振りユニットが、前記第１ターゲット・コード部分に割り振られた第１仮想アドレス空間領域とは異なる第２仮想アドレス空間領域を前記第２ターゲット・コード部分に割り振る、
請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１２】
前記複数の仮想アドレス空間領域のうちの第１仮想アドレス空間領域内でマッピングされていない区域へのアクセスを試みる前記第１ターゲット・コード部分内の命令内のフォールト・メモリ・アクセスに応答して生成される例外シグナルを受け取る例外ハンドラをさらに備えており、
前記共有メモリ検出ユニットは、前記フォールト・メモリ・アクセスが前記第２ターゲット・コード部分に関する前記複数の仮想アドレス空間領域のうちの第２仮想アドレス空間領域内にマッピングされるメモリ区域にアクセスする試みであることを前記例外シグナルに応答して判定し、前記メモリ区域を共有メモリ区域として共有仮想アドレス空間領域にマッピングし、
前記アドレス空間割振りユニットが、前記第１ターゲット・コード部分内の前記識別された命令のグループにより、前記共有仮想アドレス空間領域に対して前記共有メモリ空間にアクセスし、
前記メモリ保護ユニットが、前記識別された命令のグループによる前記共有メモリ区域へのアクセスに関してメモリ一貫性保護を適用する、
請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１３】
前記共有メモリ検出ユニットが、前記複数の仮想アドレス空間領域のそれぞれにマッピングされるメモリ区域のマップを記録し、フォールト・メモリ・アクセスが前記複数の仮想アドレス空間領域のうちの１つまたは複数に既にマッピングされているメモリ区域にアクセスする試みであるかどうかを前記マップを参照して判定する、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１４】
前記第１および第２のターゲット・コード部分のそれぞれが、複数の命令のブロックに分割され、１つのブロックが、前記コントローラ・ユニットによって処理される最小コード単位であり、
前記メモリ保護ユニットは、例外シグナルが現在のブロックの実行途中で生成されるとき、前記現在のブロックの１つまたは複数の残りの命令にメモリ一貫性保護を適用しながら前記残りの命令の実行を完了させ、
前記コントローラ・ユニットが、前記ブロック全体にメモリ一貫性保護を適用するために前記現在のブロックを再生成する、
請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１５】
前記メモリ保護ユニットが、前記メモリ内の１つまたは複数のメモリ・ページがキャッシュ禁止とキャッシュ保護との両方になるように前記メモリに関連するページ・テーブル内の属性を操作することによって、前記１つまたは複数のメモリ・ページをストア順序付けするべくマークする、
請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１６】
前記コントローラ・ユニットが、バイナリ実行可能形式の対象コードをバイナリ実行可能形式の前記ターゲット・コード部分に変換する、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１７】
前記コントローラ・ユニットが、バイナリ実行可能形式の対象コードを、前記ターゲット・コードの実行に動的にインターリーブされるバイナリ実行可能形式の前記ターゲット・コード部分に変換する、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１８】
前記コントローラ・ユニットが、対象コードを前記複数のターゲット・コード部分に変換することによって前記対象コードをデバッグする、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項１９】
前記コントローラ・ユニットが、バイナリ実行可能形式の対象コードを前記ターゲット・コード部分の実行中に動的にバイナリ実行可能形式の前記ターゲット・コード部分に変換することによって前記対象コードをデバッグする、請求項１に記載のマルチプロセッサ・コンピューティング・システム。
【請求項２０】
対象プログラム・コードがトランスレータによって変換されたターゲット・コードを実行するためのマルチプロセッサ・コンピューティング・システムでメモリ一貫性を保護する方法であって、前記マルチプロセッサ・コンピューティング・システムが、
第１のメモリ一貫性モデルの下で第１ターゲット・コード部分及び前記第２ターゲット・コード部分を実行する工程であって、前記実行する工程が、第１仮想アドレス空間領域に関して前記マルチプロセッサ・コンピューティング・システムの第１ターゲット・プロセッサ上で前記第１ターゲット・コード部分を実行すること、および第２仮想アドレス空間領域に関して前記マルチプロセッサ・コンピューティング・システムの第２ターゲット・プロセッサ上で前記第２ターゲット・コード部分を実行することを含み、前記第１および第２の仮想アドレス空間領域が、別々でかつオーバーラップしていない、前記実行する工程と、
前記第１ターゲット・コード部分と少なくとも第２ターゲット・コード部分との両方によってアクセス可能な、メモリ内の共有メモリ区域を検出する工程であって、前記第２仮想アドレス空間領域内でマッピングされてはいないが前記第１仮想アドレス空間領域内でマッピングされた区域であるメモリ区域への前記第２ターゲット・コード部分によるアクセス要求を検出することによって、前記第２ターゲット・コード部分が共有メモリ区域へのアクセスを試みようとしていることを検出することを含む、前記検出する工程と、
前記検出された共有メモリ区域にアクセスする前記第１ターゲット・コード部分内の少なくとも１つの命令のグループを識別する工程であって、前記検出された共有メモリ区域にアクセスする前記第２ターゲット・コード部分内の命令のグループを識別する工程を含む、前記識別する工程と、
前記命令のグループを識別することに応じて、メモリ一貫性保護を適用して、前記第１ターゲット・コード部分内の前記識別された命令のグループを実行する際に前記検出された共有メモリ区域へのアクセスに関して第２のメモリ一貫性モデルの下で実行する工程であって、前記適用することが、前記第２ターゲット・コード部分内の前記命令のグループが前記第２のメモリ一貫性モデルを実行する形で前記検出された共有メモリ区域にアクセスするように、前記メモリ一貫性保護を選択的に適用することを含む、前記実行する工程と
を実行する、前記方法。
【請求項２１】
前記第２のメモリ一貫性モデルが、前記第１のメモリ一貫性モデルよりも強いメモリ・アクセス順序付け制約を有する、請求項２０に記載の方法。
【請求項２２】
前記マルチプロセッサ・コンピューティング・システムが、
前記第１ターゲット・コード部分を複数のブロックに分割する工程をさらに実行し、
前記適用する工程が、前記検出された共有メモリ区域にアクセスする前記命令を含む前記第１ターゲット・コード部分の前記ブロックだけに前記メモリ一貫性保護を選択的に適用することを含む、
請求項２０に記載の方法。
【請求項２３】
前記実行する工程が、前記マルチプロセッサ・コンピューティング・システムのデフォルト・メモリ一貫性モデルとしての前記第１のメモリ一貫性モデルの下で前記第１ターゲット・コード部分および前記第２ターゲット・コード部分を実行することを含み、
前記検出する工程が、前記第１ターゲット・コード部分と前記第２ターゲット・コード部分との両方からアクセス可能な明示的に共有されるメモリ区域を起動する要求を検出することを含み、
前記適用する工程が、前記第１ターゲット・コード部分および前記第２ターゲット・コード部分のうちの選択された部分だけが、前記明示的に共有されるメモリ区域へのアクセスを異なる第２のメモリ一貫性モデルの下で実行するように、前記メモリ一貫性保護を適用することを含む、
請求項２０に記載の方法。
【請求項２４】
前記マルチプロセッサ・コンピューティング・システムが、
前記第１および第２の仮想アドレス空間領域に対して別々でかつオーバーラップしていない第３仮想アドレス空間領域に、前記第１仮想アドレス空間領域から前記マッピングされた区域を再マッピングする工程と、
前記アクセス要求を含む前記第２ターゲット・コード部分内の少なくとも選択された命令のブロックを変更して、所定のメモリ順序付け制約の下で前記ブロックに実行させる前記メモリ一貫性保護を適用し、前記第３仮想アドレス空間領域内でマッピングされる共有メモリ区域にアクセスするように前記選択されたブロックに指示する工程と
をさらに実行する、請求項２０に記載の方法。
【請求項２５】
コンピュータ・プログラムであって、マルチプロセッサ・コンピューティング・システムに、請求項２０〜２４のいずれか１項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的にはコンピュータおよびコンピュータ・システムの分野に関する。より具体的には、本発明は、マルチプロセッサ・コンピューティング・システムでのメモリ一貫性の保護に関する。
【背景技術】
【０００２】
強力なコンピューティング・システムに関する現代の必要は、２つ、４つ、８つ、またはそれを超える別々のプロセッサを有するマルチプロセッサ・コンピュータ・アーキテクチャの開発をもたらした。そのようなマルチプロセッサ・システムは、プログラム・コードの複数の部分を同時に実行する（すなわち、複数のプロセスおよび／または複数のプロセス・スレッドを同時に実行する）ことができる。たとえばプロセス間通信（ＩＰＣ）用のメッセージ受渡しを含む、複数の異なる機構が、プログラム・コードの実行中の部分の間でデータを共有するために存在する。しかし、ほとんどの現代のマルチプロセッサ・コンピューティング・システムは、別々のプロセッサ上で動作している複数のプログラム・コード部分によってアクセス可能な共有メモリの使用をもサポートする。
【０００３】
共有メモリに格納されたデータに対するすべての変更が、秩序だって同期化された形で複数のコード部分のそれぞれに可視にされることが重要である。したがって、マルチプロセッサ・システムの各異なるタイプは、それによって共有メモリに対する変更が複数のプロセッサのそれぞれで可視にされる形を定義するメモリ動作のセマンティックス（特に、ロード動作、ストア動作、および原子的動作に関する）を指定する、それ自体の対応するメモリ一貫性モデルを有する。プログラム・コードとマルチプロセッサ・システム内のハードウェアとの両方が、正しい動作を達成するためにメモリ一貫性モデルを厳守しなければならない。逆に、メモリ一貫性の障害は、システムの致命的クラッシュにつながり得る。
【０００４】
マルチプロセッサ・コンピューティング・システムでのメモリ一貫性モデルのより詳細な紹介は、その開示が参照によって本明細書に援用する文献に記載されている（たとえば、非特許文献１参照。）。
【０００５】
最も単純な例で、メモリ一貫性モデルは、シーケンシャル一貫性を指定し、これによって、メモリ動作が、厳密にプログラム・コードで指定されるプログラム順で行われるように見えるようになる。しかし、マルチプロセッサ・アーキテクチャ内のプロセッサおよびメモリ・サブシステムは、しばしば、改善されたハードウェア性能を達成するためにメモリ動作を並べ変えるように設計される。すなわち、Ｄｉｇｉｔａｌ  ＡＬＰＨＡ、ＳＰＡＲＣ  ｖ８およびｖ９、ＩＢＭ  ＰＯＷＥＲ、ならびに他のプロセッサ・システムなどの多くの現代の共有メモリ・マルチプロセッサ・システムは、さまざまな形の緩和された順序付けを提供し、微妙に異なる形の非シーケンシャル・メモリ一貫性を提供する。ここで、メモリ一貫性の分野のさらに一般的な背景情報が、その開示が参照によって本明細書に援用する論文に記載されている（たとえば、非特許文献２参照。）。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Ｒｉｃｅ  Ｕｎｉｖｅｒｓｉｔｙ  ＥＣＥ  Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ  ９５１２および１９９５年９月付けのＷｅｓｔｅｒｎ  Ｒｅｓｅａｒｃｈ  Ｌａｂｏｒａｔｏｒｙ  Ｒｅｓｅａｒｃｈ  Ｒｅｐｏｒｔ  ９５／７として公表された、サリタ  Ｖ  アドベイ（Ｓａｒｉｔａ  Ｖ．Ａｄｖｅｙ）およびクーロシュ  ガラコールーズ（Ｋｏｕｒｏｓｈ  Ｇｈａｒａｃｈｏｒｌｏｏｚ）、「Ｓｈａｒｅｄ  Ｍｅｍｏｒｙ  Ｃｏｎｓｉｓｔｅｎｃｙ  Ｍｏｄｅｌｓ：  Ａ  Ｔｕｔｏｒｉａｌ」
【非特許文献２】２００２年４月２４付けのｈｔｔｐ：／／ｗｗｗ−１２８．ｉｂｍ．ｃｏｍ／ｄｅｖｅｌｏｐｅｒｗｏｒｋｓ／ｅｓｅｒｖｅｒ／ａｒｔｉｃｌｅｓ／ｐｏｗｅｒ４＿ｍｅｍ．ｈｔｍｌにあるビー  ヘイ（Ｂ．  Ｈａｙ）およびジー  フック（Ｇ．  Ｈｏｏｋ）、「ＰＯＷＥＲ４  ａｎｄ  ｓｈａｒｅｄ  ｍｅｍｏｒｙ  ｓｙｎｃｈｒｏｎｉｓａｔｉｏｎ」
【発明の概要】
【０００７】
本発明によれば、本明細書に添付の特許請求の範囲に示された、マルチプロセッサ・コンピュータ・システムでメモリ一貫性を保護するマルチプロセッサ・コンピュータ・システムおよび方法が提供される。
【０００８】
本明細書で述べる本発明の例示的な実施形態は、マルチプロセッサ・コンピューティング・システムでのメモリ一貫性の保護に関する。具体的に言うと、本発明の例示的実施形態は、マルチプロセッサ・コンピュータ・システム内の共有メモリに関する一貫し同期化された動作を提供する機構に関する。
【０００９】
以下、本発明の実施形態により実現可能なさまざまな態様および利点の要約である。これは、以下の詳細な説明を取り入れるために当業者を支援するための導入として提供されるものであり、本明細書に添付の特許請求の範囲を限定することを意図していない。
【００１０】
本発明の１つの例示的な態様では、メモリと、複数のプロセッサと、コントローラ・ユニットとからなるマルチプロセッサ・コンピューティング・システムが提供される。メモリは、少なくとも第１ターゲット・コード部分および第２ターゲット・コード部分を含む複数のターゲット・コード部分を格納する。複数のプロセッサは、並列処理を使用して、メモリ内に格納された複数のターゲット・コード部分を実行するように構成される。コントローラ・ユニットは、複数のプロセッサによる複数のターゲット・コード部分の実行を制御するように構成される。コントローラ・ユニットは、メモリをアドレッシングするのに使用される仮想アドレス空間を複数の仮想アドレス空間領域に分割し、最初に第１のメモリ一貫性モデルに従って複数の仮想アドレス空間領域を介してメモリにアクセスするために複数のターゲット・コード部分の実行を制御するように構成されたアドレス空間割振りユニットからなる。また、コントローラ・ユニットは、少なくとも第２ターゲット・コード部分によってもアクセス可能であるメモリ内の共有メモリ区域に関して第１ターゲット・コード部分の実行時に行われるメモリ・アクセス要求を検出し、共有メモリ区域にアクセスする第１ターゲット・コード部分内の少なくとも１つの命令のグループを識別するように構成された共有メモリ検出ユニットを含む。さらに、メモリ保護ユニットは、共有メモリ検出ユニットが識別された命令のグループを識別することに応答して、第１ターゲット・コード部分内の識別された命令のグループの実行時における共有メモリ区域へのアクセスに関して第２のメモリ一貫性モデルを強制するためにメモリ一貫性保護を選択的に適用するように構成される。
【００１１】
本発明のもう１つの例示的な態様では、マルチプロセッサ・コンピューティング・システムでメモリ一貫性を保護する方法であって、第１のメモリ一貫性モデルの下で少なくとも第１コード部分を実行する工程と、第１コード部分と少なくとも第２コード部分との両方によってアクセス可能な共有メモリ区域を検出する工程と、共有メモリ区域にアクセスする第１コード部分内の命令のグループを識別する工程と、第１コード部分内の命令のグループが、検出された共有メモリ区域へのアクセスを第２のメモリ一貫性モデルの下で実行するように、メモリ一貫性保護を選択的に適用する工程と、をコンピュータが実行する工程として備える方法が提供される。
【００１２】
本発明のもう１つの例示的な態様では、マルチプロセッサ・コンピューティング・システムでメモリ一貫性を保護するであって、マルチプロセッサ・コンピューティング・システムのデフォルト・メモリ一貫性モデルの下で少なくとも第１プログラム・コード部分および第２プログラム・コード部分を実行する工程と、第１プログラム・コード部分と第２プログラム・コード部分との両方からアクセス可能な明示的に共有されるメモリ区域を起動する要求を検出する工程と、第１および第２のプログラム・コード部分が、共有メモリ区域へのアクセスを、異なる第２のメモリ一貫性モデルの下で実行するように、メモリ一貫性保護を選択的に適用する工程と、をコンピュータが実行する工程として備える方法が提供される。
【００１３】
本発明のもう１つの例示的な態様では、少なくとも第１プロセッサおよび第２プロセッサを有するマルチプロセッサ・コンピュータ・システム内でメモリ一貫性を保護する方法であって、第１仮想アドレス空間領域に関して第１プロセッサ上で第１コード部分を実行し、第１仮想アドレス空間とは別でありかつオーバーラップしない第２仮想アドレス空間領域に関して第２プロセッサ上で第２コード部分を実行する工程と、第１仮想空間領域内の少なくとも１つのマッピングされた領域をマッピングする工程と、第２仮想アドレス空間領域内でマッピングされていないが第１仮想アドレス空間領域内でマッピングされる区域であるメモリ区域への第２コード部分によるアクセス要求を検出することによって、第２コード部分が共有メモリ区域へのアクセスを試みていることを判定する工程と、第１および第２の仮想アドレス空間領域とは別でありかつオーバーラップしない第３仮想アドレス空間領域へ第１仮想アドレス空間領域からマッピングされた領域を再マッピングする工程と、ブロックに所定のメモリ順序付け制約の下で実行させるメモリ一貫性保護を適用するために、少なくとも、アクセス要求を含む第２コード部分内の命令の選択されたブロックを変更し、第３アドレス空間領域にマッピングされた共有メモリ区域にアクセスするように少なくとも選択されたブロックに指示する工程とを備える方法が提供される。
【００１４】
例示的な実施形態は、特に、メモリ一貫性保護を識別し、プログラムのうちでそのような保護を必要とする部分だけに選択的に適用することによって、マルチプロセッサ・コンピューティング・システムでメモリ一貫性を保護する低コストで効果的な機構を提供する。さらに、例示的実施形態は、共有メモリへのアクセスを検出し、これによってプログラムのうちでメモリ一貫性保護を必要とする部分を判定する低コストで効果的な機構を提供する。
【００１５】
本明細書で述べる例示的実施形態の一部は、プログラム・コード変換に着手するとき、改善されたメモリ一貫性を提供する。ここで、コントローラ・ユニットが、トランスレータ・ユニットである。具体的に言うと、本発明人は、プログラム・コード変換を対象とする機構を開発したが、このプログラム・コード変換は、動的バイナリ変換を実行するランタイム・トランスレータと関連して有用である。すなわち、コントローラ・ユニットは、動的バイナリ・トランスレータとして構成される。たとえば、第１のメモリ一貫性モデルを有する対象アーキテクチャからもう１つのメモリ一貫性モデルを有するターゲット・アーキテクチャへのそのような変換に着手するとき、対象アーキテクチャとターゲット・アーキテクチャとのメモリ一貫性モデルの間の相違が、ターゲット・アーキテクチャ上で実行されるプログラム・コードの予期されない挙動または誤った挙動につながる場合がある。具体的に言うと、メモリ一貫性エラーは、強く順序付けられたメモリ一貫性モデルを有する対象アーキテクチャ（ＳＰＡＲＣアーキテクチャおよびｘ８６アーキテクチャなど）から相対的に弱い順序付けを有するメモリ一貫性モデルを有するターゲット・アーキテクチャ（ＰｏｗｅｒＰＣアーキテクチャおよびＩｔａｎｉｕｍアーキテクチャなど）へプログラム・コードを変換するとき生じる場合がある。したがって、例示的な実施形態は、これらの形のプログラム・コード変換を実行するマルチプロセッサ・コンピュータ・システム内でメモリ一貫性を保護する低コストで効果的な機構を提供する。
【００１６】
本明細書で述べる例示的な実施形態で使用できるプログラム・コード変換に関するさらなる情報については、いずれもが参照によって本明細書に組み込まれている、ＰＣＴ出願公告第ＷＯ２０００／２２５２１号、名称「Ｐｒｏｇｒａｍ  Ｃｏｄｅ  Ｃｏｎｖｅｒｓｉｏｎ」、ＰＣＴ出願公告第ＷＯ２００４／０９５２６４号、名称「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｐｅｒｆｏｒｍｉｎｇ  Ｉｎｔｅｒｐｒｅｔｅｒ  Ｏｐｔｉｍｉｚａｔｉｏｎｓ  ｄｕｒｉｎｇ  Ｐｒｏｇｒａｍ  Ｃｏｄｅ  Ｃｏｎｖｅｒｓｉｏｎ」、ＰＣＴ出願公告第ＷＯ２００４／０９７６３１号、名称「Ｉｍｐｒｏｖｅｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｇｅｎｅｒａｔｉｎｇ  Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎｓ  ｆｏｒ  Ｐｒｏｇｒａｍ  Ｃｏｄｅ  Ｃｏｎｖｅｒｓｉｏｎ」、ＰＣＴ出願公告第ＷＯ２００５／００６１０６号、名称「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｐｅｒｆｏｒｍｉｎｇ  Ａｄｊｕｓｔａｂｌｅ  Ｐｒｅｃｉｓｉｏｎ  Ｅｘｃｅｐｔｉｏｎ  Ｈａｎｄｌｉｎｇ」、およびＰＣＴ出願公告第ＷＯ２００６／１０３３９５号、名称「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｐｒｅｃｉｓｅ  Ｈａｎｄｌｉｎｇ  ｏｆ  Ｅｘｃｅｐｔｉｏｎｓ  Ｄｕｒｉｎｇ  Ｐｒｏｇｒａｍ  Ｃｏｄｅ  Ｃｏｎｖｅｒｓｉｏｎ」に注意を向けられたい。
【００１７】
本発明は、マルチプロセッサ・コンピューティング・システムと協力して使用される時の、本明細書に記載の発明の実施形態のいずれかを実行するように構成されたコントローラ装置またはトランスレータ装置にも及ぶ。また、本発明は、マルチプロセッサ・コンピュータ・システムによって実施されるとき本明細書で定義される方法のいずれかを実行する命令をその上に記録されたコンピュータ可読記憶媒体に及ぶ。
【００１８】
本発明の少なくともいくつかの実施形態を、専用の特殊目的ハードウェアを使用して、部分的にまたは全体的に構成することができる。本明細書で使用される「コンポーネント」、「モジュール」、または「ユニット」などの用語は、ある種のタスクを実行するフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）または特定用途向け集積回路（ＡＳＩＣ）などのハードウェア・デバイスを含むことができるが、これらに限定はされない。代替案では、本発明の要素を、アドレス可能記憶媒体に常駐するように構成し、１つまたは複数のプロセッサ上で実行するように構成することができる。したがって、本発明の機能的要素は、いくつかの実施形態で、たとえば、ソフトウェア・コンポーネント、オブジェクト指向ソフトウェア・コンポーネント、クラス・コンポーネント、およびタスク・コンポーネントなどのコンポーネント、プロセス、関数、属性、プロシージャ、サブルーチン、プログラム・コードのセグメント、ドライバ、ファームウェア、マイクロコード、回路、データ、データベース、データ構造、テーブル、配列、ならびに変数を含むことができる。さらに、好ましい実施形態を、下で述べるコンポーネント、モジュール、およびユニットに関して説明したが、そのような機能要素を、より少数の要素に組み合わせるか、追加の要素に分離することができる。
【００１９】
添付図面は、本明細書に組み込まれ、本明細書の一部を構成するが、現在好ましい実施態様を示し、次のように説明される。
【図面の簡単な説明】
【００２０】
【図１】本発明の実施形態が応用例を見出すマルチプロセッサ・コンピューティング・システムを示すブロック図。
【図２】本発明の実施形態によって使用されるプログラム・コード変換プロセスを示す概略概要図。
【図３】本発明の実施形態によって使用されるマルチプロセッサ・コンピューティング・システムのプログラム・コード変換システムを示す概略概要図。
【図４】本発明の例示的実施形態で適用されるメモリ一貫性保護方法を示す概略流れ図。
【図５】プログラム・コード変換システムの選択された部分をより詳細に示す概略ブロック図。
【図６】仮想メモリ・レイアウトの一部を示す概略図。
【図７Ａ】仮想メモリ・レイアウトの一部を示す概略図。
【図７Ｂ】仮想メモリ・レイアウトの一部を示す概略図。
【図７Ｃ】仮想メモリ・レイアウトの一部を示す概略図。
【図７Ｄ】仮想メモリ・レイアウトの一部を示す概略図。
【図８】プログラム・コード変換システムの選択された部分をより詳細に示す概略ブロック図。
【図９】本発明の例示的実施形態でメモリ一貫性保護を提供する方法を示す概略流れ図。
【図１０】本発明のもう１つの例示的実施形態でメモリ一貫性保護を提供する方法を示す概略流れ図。
【図１１Ａ】プログラム・コード変換システムの選択された部分をより詳細に示す概略図。
【図１１Ｂ】プログラム・コード変換システムの選択された部分をより詳細に示す概略図。
【発明を実施するための形態】
【００２１】
以下の説明は、当業者が本発明を成しかつ使用することを可能にするために提供され、本発明者によって企図される本発明の実施の最良の態様を示す。しかし、本明細書で定義される本発明の全般的原理を考慮することで、さまざまな変更が当業者に明らかとなる。
【００２２】
図１に、以下でより詳細に述べるコンポーネント、モジュール、およびユニットを紹介するために、本発明の例示的な実施形態が応用例を見出すシステムおよび環境の概要を与える。図１を参照すると、対象プログラム１７は、少なくとも１つの対象プロセッサ３を有する対象コンピューティング・システム１上で実行されることを意図されている。しかし、ターゲット・コンピューティング・システム１０は、そうではなく、プログラム・コード変換を実行するトランスレータ・ユニット１９を介して対象プログラム１７を実行するのに使用される。トランスレータ・ユニット１９は、対象コード１７からターゲット・コード２１へのコード変換を実行し、ターゲット・コード２１が、ターゲット・コンピューティング・システム１０上で実行可能になる。
【００２３】
当業者にはよく分かるように、対象プロセッサ３は、対象レジスタ５のセットを有する。対象メモリ８は、とりわけ、対象コード１７および対象オペレーティング・システム２を保持する。同様に、図１の例のターゲット・コンピューティング・システム１０は、複数のターゲット・レジスタ１５を有する少なくとも１つのターゲット・プロセッサ１３と、ターゲット・オペレーティング・システム２０、対象コード１７、トランスレータ・コード１９、および変換されたターゲット・コード２１を含む複数の動作コンポーネントを格納するメモリ１８とを含む。ターゲット・コンピューティング・システム１０は、通常、マイクロプロセッサベースのコンピュータまたは他の適切なコンピュータである。
【００２４】
１実施形態で、トランスレータ・コード１９は、対象命令セット・アーキテクチャ（ＩＳＡ）の対象コードを、最適化を伴ってまたは伴わずに、もう１つのＩＳＡの変換されたターゲット・コードに変換するエミュレータである。もう１つの実施形態で、トランスレータ１９は、プログラム・コード最適化を実行することによって、それぞれが同一のＩＳＡを有する対象コードをターゲット・コードに変換するアクセラレータとして機能する。
【００２５】
トランスレータ・コード１９は、好適には、トランスレータを実施するソース・コードのコンパイルされたバージョンであり、ターゲット・プロセッサ１３のオペレーティング・システム２０と共に動作する。図１に示された構造が例示のみであり、たとえば、本発明の実施形態によるソフトウェア、メソッド、およびプロセスを、オペレーティング・システム２０の中またはその下に常駐するコードで実施できることを理解されたい。対象コード１７、トランスレータ・コード１９、オペレーティング・システム２０、およびメモリ１８のストレージ機構は、当業者に既知のとおり、さまざまなタイプのうちのいずれとしてもよい。
【００２６】
図１による装置では、プログラム・コード変換は、ターゲット・コード２１が動作している間にターゲット・アーキテクチャ１０上で実行するために、ランタイムに動的に実行される。すなわち、トランスレータ１９は、変換されたターゲット・コード２１とインラインで動作する。トランスレータ１９を介する対象プログラム１７の実行は、インターリーブされた形で実行される２つの異なるタイプのコードすなわち、トランスレータ・コード１９およびターゲット・コード２１を伴う。したがって、ターゲット・コード２１は、変換されるプログラムの格納された対象コード１７に基づいて、ランタイム全体を通じてトランスレータ・コード１９によって生成される。
【００２７】
１実施形態で、トランスレータ・ユニット１９は、実際にはターゲット・プロセッサ１３上でターゲット・コード２１として対象プログラム１７を実行しながら、対象プロセッサ３および特に対象レジスタ５などの対象アーキテクチャ１の関連部分をエミュレートする。好ましい実施形態では、少なくとも１つのグローバル・レジスタ・ストア２７が設けられる（対象レジスタ・バンク２７または抽象レジスタ・バンク２７とも称する）。マルチプロセッサ環境では、任意選択で、複数の抽象レジスタ・バンク２７が、対象プロセッサのアーキテクチャに従って設けられる。対象状態の表現が、トランスレータ１９およびターゲット・コード２１のコンポーネントによって提供される。すなわち、トランスレータ１９は、変数および／またはオブジェクトなどのさまざまな明示的プログラミング言語デバイス内に対象状態を格納する。変換されたターゲット・コード２１は、比較によって、ターゲット・コード２１のターゲット命令によって操作されるターゲット・レジスタ１５内およびメモリ位置１８内で暗黙のうちに対象プロセッサ状態を提供する。たとえば、グローバル・レジスタ・ストア２７の低水準表現は、単純に、割り振られたメモリの領域である。しかし、トランスレータ１９のソース・コードでは、グローバル・レジスタ・ストア２７は、より高いレベルでアクセスでき操作できる、データ配列またはオブジェクトである。
【００２８】
用語「基本ブロック」は、当業者にはよくわかるものであろう。基本ブロックは、正確に１つのエントリ・ポイントおよび正確に１つのエクシット・ポイントを有し、ブロック・コードを単一制御パスに制限する、コードのセクションである。この理由から、基本ブロックは、制御フローの有用な基礎単位である。好適には、トランスレータ１９は、対象コード１７を複数の基本ブロックに分割し、ここで、各基本ブロックは、単一のエントリ・ポイントにある最初の命令と単一のエクシット・ポイントにある最後の命令（ジャンプ命令、呼出し命令、または分岐命令など）との間の命令のシーケンシャル・セットである。トランスレータ１９は、これらの基本ブロックのうちの１つだけを選択する（ブロック・モード）か、基本ブロックのグループを選択する（グループ・ブロック・モード）ことができる。グループ・ブロックは、好適には、単一の単位として一緒に扱われなければならない複数の基本ブロックを含む。さらに、トランスレータは、対象コードの同一の基本ブロックを表すが異なるエントリ条件の下にあるアイソブロックを形成することができる。
【００２９】
好ましい実施形態では、中間表現（ＩＲ）のツリーが、対象命令シーケンスに基づいて、オリジナルの対象プログラム１７からのターゲット・コード２１の生成のプロセスの一部として生成される。ＩＲツリーは、対象プログラムによって計算される式および対象プログラムによって実行される動作の抽象表現である。その後、ターゲット・コード２１が、ＩＲツリーに基づいて生成される（「移植（ｐｌａｎｔ）される」）。ＩＲノードの集合は、実際には有向非循環グラフ（ＤＡＧ）であるが、単に「ツリー」と称する。
【００３０】
当業者が理解するとおり、１実施形態で、トランスレータ１９は、Ｃ＋＋などのオブジェクト指向プログラミング言語を使用して実施される。たとえば、ＩＲノードは、Ｃ＋＋オブジェクトとして実施され、他のノードへの参照は、これらの他のノードに対応するＣ＋＋オブジェクトへのＣ＋＋参照として実施される。したがって、ＩＲツリーは、互いのさまざまな参照を含むＩＲノード・オブジェクトの集合として実施される。
【００３１】
さらに、議論している実施形態では、ＩＲ生成は、対象プログラム１７が動作することを意図された対象アーキテクチャの特定の特徴に対応するレジスタ定義のセットを使用する。たとえば、対象アーキテクチャ上の物理レジスタ（すなわち、図１の対象レジスタ５）ごとに、独自のレジスタ定義がある。したがって、トランスレータ内のレジスタ定義は、ＩＲノード・オブジェクトへの参照を含むＣ＋＋オブジェクト（すなわち、ＩＲツリー）として実施することができる。レジスタ定義のセットによって参照されるすべてのＩＲツリーの集合を、ワーキングＩＲフォレストと称する（それぞれが１つのＩＲツリーを参照する、複数の抽象レジスタ・ルートを含むので、「フォレスト」）。これらのＩＲツリーおよび他のプロセスは、好適には、トランスレータ１９の部分を形成する。
【００３２】
図１は、さらに、ターゲット・アーキテクチャ１０のメモリ１８内のネイティブ・コード２８を示す。対象コード１７のランタイム変換から生じるターゲット・コード２１と、ターゲット・アーキテクチャ用に直接に記述されるかコンパイルされるネイティブ・コード２８との間には、区別がある。いくつかの実施形態で、対象プログラムの制御フローが、対象ライブラリなど、それに関して対象コードのネイティブ・バージョンが存在する対象コード１７のセクションに入ることをトランスレータ１９が検出するとき、ネイティブ・バインディングが、トランスレータ１９によって実施される。対象コードを変換するのではなく、トランスレータ１９は、その代わりに、同等のネイティブ・コード２８をターゲット・プロセッサ１３上で実行させる。例示的な実施形態では、トランスレータ１９は、その開示が参照によって本明細書に組み込まれているＰＣＴ出願公告第ＷＯ２００５／００８４７８号でより詳細に述べられている、ネイティブ・コード呼出しスタブまたはターゲット・コード呼出しスタブなど、定義されたインターフェースを使用して、生成されたターゲット・コード２１をネイティブ・コード２８にバインドする。
【００３３】
図２に、ターゲット・コンピューティング・システム１０上で動作する時のトランスレータ・ユニット１９をより詳細に示す。上で述べたように、トランスレータ１９のフロント・エンドは、デコーダ・ユニット１９１を含み、このデコーダ・ユニット１９１は、複数の対象コード・ブロック１７１ａ、１７１ｂ、１７１ｃ（通常はそれぞれが対象コードの１つの基本ブロックを含む）を提供するために対象プログラム１７の現在必要なセクションを復号し、トランスレータ１９の後の動作を助ける、各対象ブロックおよびそこに含まれる対象命令に関するデコーダ情報１７２を提供することもできる。いくつかの実施形態で、トランスレータ１９のコア１９２内のＩＲユニットは、復号された対象命令から中間表現（ＩＲ）を作り、最適化は、中間表現に関して折よく実行される。トランスレータ１９のバック・エンドの一部としてのエンコーダ１９３は、ターゲット・プロセッサ１３によって実行可能なターゲット・コード２１を生成する（移植する）。この単純な例では、３つのターゲット・コード・ブロック２１１ａ〜２１１ｃが、対象システム１上での対象コード・ブロック１７１ａ〜１７１ｃの実行と同等の作業をターゲット・システム１０で実行するために生成される。また、エンコーダ１９３は、ターゲット・ブロックが動作する環境のセッティングおよび適切な場合にトランスレータ１９に戻して制御を渡すことなどの機能を実行する、ターゲット・コード・ブロック２１１ａ〜２１１ｃの一部またはすべてに関する制御コード２１２を生成することができる。
【００３４】
いくつかの例示的実施形態で、トランスレータ１９は、さらに、対象コード１７内のシステム呼出しを識別するように構成される。上で述べたように、ターゲット・システム１０は、異なるターゲット・オペレーティング・システム２０および異なるターゲットＩＳＡを使用する場合があり、したがって、対象ＩＳＡと比較して異なるシステム呼出しのセットを有する場合がある。ここで、変換フェーズにおいて、デコーダ１９１は、対象ＩＳＡのシステム呼出しを検出するように構成され、対象コード１７は、対象オペレーティング・システム２を呼び出す。ほとんどの現代のオペレーティング・システムは、通常のユーザ・レベル・プログラムとオペレーティング・システムの残りとの間にあるライブラリ、通常はｇｌｉｂｃまたはＭＳ  ＬｉｂＣなどのＣライブラリ（ｌｉｂｃ）を提供する。このＣライブラリは、オペレーティング・システム２のカーネルに情報を渡すことと、より特権を与えられたスーパーバイザ・モードへの切替、ならびに特権モードで行われる必要がないすべてのデータ処理および準備の低水準の詳細を処理する。ＰＯＳＩＸおよび類似するシステムでは、いくつかの一般的な例のシステム呼出しは、ｏｐｅｎ、ｒｅａｄ、ｗｒｉｔｅ、ｃｌｏｓｅ、ｗａｉｔ、ｅｘｅｃｖｅ、ｆｏｒｋ、およびｋｉｌｌである。多くの現代のオペレーティング・システムが、数百個のシステム呼出しを有する。たとえば、Ｌｉｎｕｘは、ほぼ３００個の異なるシステム呼出しを有し、ＦｒｅｅＢＳＤは約３３０個の異なるシステム呼出しを有する。さらに、いくつかの場合に、ターゲット・コードの制御を維持し、実行制御をターゲット・コード２１からターゲットＯＳ  ２０に直接には渡さないことが望まれる。例示的実施形態では、対象コード１７内で識別されるシステム呼出しのうちの少なくとも一部が、本明細書で「ｘ＿ｃａｌｌ」と称する、トランスレータ１９にコール・バックする関数呼出しを含むターゲット・コード２１を生成させる。これらのｘ＿ｃａｌｌは、ターゲット・コード２１には、ターゲットＯＳ  ２０に対してシステム呼出しが行われたかのように見えるが、実際には、実行制御をターゲット・コード２１からトランスレータ１９に返す。例示的な実施形態では、トランスレータ１９は、そのようなｘ＿ｃａｌｌによってターゲット・コード２１から呼び出されるターゲットＯＳインターフェース・ユニット（「ＦＵＳＥ」とも呼ばれる）１９４を含む。ＦＵＳＥ  １９４は、適切な場合にターゲットＯＳ  ２０への実際のシステム呼出しを実行することを含めてｘ＿ｃａｌｌに応答し、その後、ターゲット・コード２１にリターンする。したがって、トランスレータ１９は、ターゲット・コード２１によって行われるシステム呼出しを効果的にインターセプトし、ターゲット・コード２１によって要求されるシステム呼出しを監視し、制御する機会を有すると同時に、ターゲット・コード２１は、それでも、システム呼出しがターゲットＯＳ  ２０に対して行われたかのように働く。
【００３５】
やはり図２に示されているように、いくつかの例示的実施形態で、トランスレータ１９は、ターゲット・コード２１の実行中に送出される例外シグナルを選択的にインターセプトするように構成される。トランスレータ１９は、ターゲット・コード２１の実行によって送出される例外シグナルのうちの少なくともいくつかのタイプを受け取るためにターゲットＯＳに登録される１つまたは複数の例外ハンドラ１９５を含む。したがって、例外ハンドラ１９５は、適切な場合に、例外の処理に選択的に介入し、ある種の例外が送出されたことをトランスレータ１９に知らせることができる。ここで、例外ハンドラ１９５は、例外を処理し、適切に実行を再開する（たとえば、ターゲット・コード２１にリターンすることによって）か、例外シグナルをターゲットＯＳ  ２０内などの適切なネイティブ例外ハンドラに渡すと決定するかのいずれかを行う。１実施形態で、トランスレータ１９は、選択された例外シグナルを受け取り、受け取られた例外シグナルのうちのいくつかを適切な例外ハンドラ１９５による処理のために渡すプロキシ・シグナル・ハンドラ（図示せず）を提供する。
【００３６】
図３は、本発明の例示的実施形態によるプログラム・コード変換システムを示す概略図である。
まず、図示と説明の簡単さとのために、図３に、対象コードの別々の部分１７０ａ、１７０ｂ（ＳＣ１およびＳＣ２）を実行し、メモリ・サブシステム（ＭＳ）８内に格納されたデータにアクセスする複数のプロセッサ３ａ、３ｂを有するマルチプロセッサ対象コンピューティング・システム１を示す。
【００３７】
最も一般的に、プロセッサ３ａ、３ｂ上で実行される対象コード部分１７０ａ、１７０ｂは、仮想アドレス空間（ＶＡＳ）８１を参照することによって物理メモリ８にアクセスし、ＶＡＳ  ８１は、対象コード１７０ａ、１７０ｂ内で参照されるメモリ・アクセス・アドレスをメモリ・サブシステム８内の物理メモリ・アドレスにマッピングする。したがって、用語  仮想アドレス空間は、当技術分野で、コードのアドレス空間を物理アドレッシングから区別するのに使用される。
【００３８】
いくつかの状況で、第１および第２の対象コード部分１７０ａ、１７０ｂの両方が、物理メモリ８の同一領域にアクセスすることを意図される。図３に示された例の状況では、メモリ８の１ページなどの区域が、両方の対象コード部分１７０ａ、１７０ｂによって仮想アドレス空間８１にマッピングされる。他の場合には、明示的に共有されるメモリ区域が、２つの異なる仮想アドレス空間にマッピングされる。
【００３９】
上で述べたように、対象コンピューティング・アーキテクチャ１のメモリ一貫性モデルは、メモリ・アクセスのセマンティックスと、プロセッサ３ａ、３ｂおよびメモリ・サブシステム８が対象コード１７のオリジナル・プログラム順に関してメモリ・アクセスを並べ変えることのできる範囲とを定義する。この例では、対象アーキテクチャ１は、比較的強い順序付け制約を有する。すなわち、対象メモリ一貫性モデルは、連続するストアおよび連続するロードが順序付けられることを定義することができが、ロードが続くストアまたはストアが続くロードをプログラム順と比較して並べ変えることができることを定義することができる。この例の対象アーキテクチャのメモリ一貫性モデルを、次の表１に短く要約することができる。
【００４０】
【表１】
0005583409.tif 000002
対象コード１７は、正しく機能するためにメモリ一貫性モデルに頼る。実際には、対象コードは、しばしば、対象ハードウェアの現在入手可能なバージョンで働く点まで記述され、デバッグされる。しかし、対象コンピューティング・システム１の異なるバージョンとしてのターゲット・コンピューティング・システム１０で対象コード１７を実施すること、または完全に異なるターゲット・コンピューティング・システム１０上で動作するように対象コード１７を変換することは、対象コード内の弱さを明らかにする可能性がある。ここで、とりわけＡｌｐｈａ、ＡＭＤ６４、ＩＡ６４、ＰＡ−ＲＩＳＣ、ＰＯＷＥＲ、ＳＰＡＲＣ、ｘ８６、およびｚＳｅｒｉｅｓ（ＩＢＭ  ３６０、３７０、３９０）を含む、さまざまな異なる形の緩和されたメモリ一貫性を使用するマルチプロセッサ・システムの多数の実用的な例がある。
【００４１】
図３に示されているように、ターゲット・コンピューティング・システム１０上のトランスレータ・ユニット（ＴＵ）１９は、ターゲット・システムの物理メモリ１８への参照を用いる複数のターゲット・プロセッサ１３ａ、１３ｂ上での実行のために対象コード１７をターゲット・コード２１に変換する。この例では、ターゲット・コンピューティング・システム１０は、対象システム１のメモリ一貫性モデルより弱い、より緩和された制約を伴うメモリ一貫性モデルを有する。たとえば、ターゲット・メモリ一貫性モデルは、順序付けが全くないことを指定することができ、ターゲット・メモリ一貫性モデルは、次の表２に要約されているように、プログラム・セマンティックスを維持しながらロードおよびストアを自由に並べ変えることを許容する。
【００４２】
【表２】
0005583409.tif 000003
当業者にはよく分かるように、メモリ・サブシステム１８は、メモリ・アクセス速度を高めるように設計されたさまざまなキャッシュ構造（図示せず）を含むことができる。メモリ・サブシステム１８は、とりわけ、オンチップまたはオフチップのスタティックＲＡＭによって提供されるキャッシュ・ラインと、ダイナミックＲＡＭのメイン・メモリと、大容量ディスク・ストレージとを含む物理メモリの複数の層を含むことができ、これらの物理メモリは、対象コンピューティング・システムのアーキテクチャに従ってメモリ・サブシステムによって管理される。キャッシュ構造が一貫したままになることを保証するためにキャッシュ一貫性（キャッシュ・コヒーレンシとも呼ばれる）を保護する多数の機構があるが、これらは、検討中の例には特に関連せず、本明細書でさらには述べない。
【００４３】
これから、単純化された例を提供して、メモリ一貫性エラーがターゲット・コンピューティング・システム１０内で生じ得る形のいくつかを示す。この例では、２つのメモリ位置（＊ａｒｅａ１、＊ａｒｅａ２）がアクセスされる。これらの位置は、これらがターゲット・メモリ・サブシステム１８のキャッシュ構造内で同一のキャッシュ・ライン上にないことを保証し、メモリ１８へのアクセスが順序外れで発生する可能性を高めるために、異なるメモリ・ページにあると仮定する。最初に、我々は、これらの位置に格納される値を、＊ａｒｅａ１＝０および＊ａｒｅａ２＝０と定義する。第１プロセッサ１３ａは、ターゲット・コードの第１部分２１ａを実行しつつあり、この第１部分２１ａは、次の擬似コードに示されているように、＊ａｒｅａ２に格納された値を監視し、次に、＊ａｒｅａ１の値に従って変数「ａ」をセットする。
【００４４】
ｗｈｉｌｅ（＊ａｒｅａ２＝＝０）｛｝
ｉｎｔ  ａ＝＊ａｒｅａ１
第２プロセッサ１３ｂは、ターゲット・コードの第２部分２１ｂを実行し、この第２部分２１ｂは、２つのメモリ位置に格納された値を変更する命令を含む。
【００４５】
＊ａｒｅａ１＝１
＊ａｒｅａ２＝１
直観的に、我々は、現在変数「ａ」に値「１」がセットされていなければならないと期待する。実際に、強く順序付けされたシーケンシャルに一貫したシステムでは、これが真になるはずである。しかし、メモリ一貫性エラーが生じ、その代わりに変数「ａ」に「０」がセットされる場合がある。このエラーは、２つの通常の理由から生じ得る。第１に、緩和されたストア順序付けは、第２のストア（＊ａｒｅａ２＝１）が第１のストア（＊ａｒｅａ１＝１）の前にメモリに達することを可能にする場合がある。その後、第１プロセッサ１３ａは、＊ａｒｅａ１の古い値を読み取ることができる。第２に、緩和されたロード順序付けは、投機的に実行されるロードを含むロードが、第１プロセッサ１３ａ内の命令パイプライン内で順序外れで発行されることを可能にする。この場合に、第１プロセッサ１３ａが、＊ａｒｅａ２が変化するのを待っている間に、＊ａｒｅａ１の値が、既に投機的にロードされ、テストが成功したならば再ロードされない。これは、第２プロセッサ１３ｂからのストアが正しく順序付けられる場合であっても、第１プロセッサ１３ａが、それでも、更新された値を異なる順序で読み取る可能性があることを意味する。
【００４６】
ほとんどのマルチプロセッサ・システムは、プログラム・コードがハードウェアの緩和されたメモリ一貫性モデルをオーバーライドし、より強い順序付け制約を課し、これによってメモリ一貫性エラーに対する保護の手段を提供することを可能にするセーフティ・ネットを提供する。そのようなセーフティ・ネット機構の１つは、適切な同期化ポイントを形成するためにターゲット・コード２１ａ、２１ｂ内でシリアライゼーション命令を使用するが、もう１つのそのようなセーフティ・ネットは、ページ・テーブル内で属性をセットすることによってメモリのある種の区域を安全保護するためのものである。下でより詳細に述べるように、これらおよび他のメモリ一貫性保護機構を、単独でまたは組み合わせて使用することができる。
【００４７】
まず、シリアライゼーション命令の使用を調べると、１つの一般的に使用可能な形は、フェンス命令である。フェンス命令は、プログラム命令を、フェンスに先行する命令とフェンスに続く命令とに分割するメモリ・バリアを形成する。フェンスに先行する命令によって引き起こされるメモリ・アクセスは、フェンスに続く命令によって引き起こされるメモリ・アクセスの前に実行される。したがって、フェンスは、メモリ一貫性を得るのに有用であるが、かなりの性能ペナルティをこうむる。ＩＢＭ  ＰＯＷＥＲ命令セット・アーキテクチャの命令ＳＹＮＣが、フェンス命令の主な例である。軽量同期化（ＬＷＳＹＮＣ）命令またはＩ／Ｏのインオーダー実行強制（ＥＩＥＩＯ）命令など、フェンス命令の他の特定の変形形態も、ＰＯＷＥＲ  ＩＳＡで使用可能である。他の例は、Ａｌｐｈａ  ＩＳＡのＭＢおよびＭＢＷ、ｘ８６  ＩＳＡのＭＦＥＮＣＥ、およびＳＰＡＲＣ  ＩＳＡのＭＥＭＢＡＲを含む。
【００４８】
一部のＩＳＡは、特定のプロセッサ内の命令の実行を同期化する１つまたは複数のシリアライゼーション命令をも提供する。すなわち、命令同期化は、プロセッサに、同期化の前のすべての命令の実行を完了させ、既に実行を開始されている可能性がある同期化の後のすべての命令の結果を破棄させる。命令同期化が実行された後に、プログラム内の後続命令は、実行を開始することができる。ここで、ＩＢＭ  ＰＯＷＥＲ命令セット・アーキテクチャの命令ＩＳＹＮＣが、そのような命令同期化を実行する命令の主な例である。
【００４９】
これらのシリアライゼーション命令は、ターゲット・マシンのデフォルト・メモリ一貫性モデルと異なるメモリ一貫性モデルをアサートするためにターゲット・コードに挿入される。上で述べた例の擬似コードへのこれらのシリアライゼーション命令の挿入は、次のように、変更されたターゲット・コード２１ａおよび２１ｂをもたらす。
【００５０】
第１プロセッサ１３ａについて、シリアライゼーション命令ＩＳＹＮＣが挿入され（表１で指定されたロード−ロード順序付けのゆえに）、その結果、ターゲット・コード２１ａは、次のようになる。
【００５１】
ｗｈｉｌｅ（＊ａｒｅａ２＝＝０）｛｝
ｉｓｙｎｃ
ｉｎｔ  ａ＝＊ａｒｅａ１
第２プロセッサ１３ｂについて、シリアライゼーション命令ＳＹＮＣが挿入され、その結果、ターゲット・コード２１ｂは、次のようになる。
【００５２】
＊ａｒｅａ１＝１
ｓｙｎｃ
＊ａｒｅａ２＝１
ここで、メモリ一貫性エラーに対する保護を提供するもう１つの機構に移ると、一部のターゲット・コンピューティング・システムは、ページ・テーブル属性の操作を可能にする。特定の例として、ＩＢＭ  ＰＯＷＥＲアーキテクチャは、メモリ１８のある種の区域を、キャッシング禁止とキャッシュ保護（以下ではストア順序付けされると呼ぶ）との両方として指定することを可能にする。別々のストア命令が、メモリのそのような保護された区域にアクセスする場合に、それらのストアは、プログラムによって指定される順序で実行される。便利なことに、メモリの一部のページは、ストア順序付けされるものとしてマークされ、メモリの他のページは、ストア順序付けされないものとしてマークされる。ストア順序付けされたページは、ターゲット・マシンのデフォルト・メモリ一貫性モデルとは異なるメモリ一貫性モデルをアサートするのに使用することができる。しかし、そのようなストア順序付けされたページへのアクセスは、ストア順序付けされないページへのアクセスと比較して、通常、性能ペナルティをこうむる。
【００５３】
これから、シリアライゼーション命令およびストア順序付けされたページなどのメモリ一貫性保護機構に関連する大きい性能ペナルティを最小化するか完全に回避しながら、上で概要を示したメモリ一貫性の問題に対処する本発明の例示的な実施形態を、より詳細に説明する。
【００５４】
図４は、図３を参照して上で述べたターゲット・コンピューティング・システム１０内など、マルチプロセッサ・コンピューティング・アーキテクチャ内でメモリ一貫性を保護するために本発明の例示的実施形態で適用される方法の全般的概要を提供する概略流れ図である。
【００５５】
ステップ４０１は、第１のメモリ一貫性モデルの下で少なくとも第１ターゲット・コード部分２１ａを実行することを含む。すなわち、ステップ４０１では、少なくともターゲット・コードの第１部分２１ａが、ターゲット・コンピューティング・システムのアーキテクチャに適用可能な第１デフォルト・メモリ一貫性モデルの下でターゲット・コンピューティング・システム１０内で実行される。
【００５６】
ステップ４０２は、第１ターゲット・コード部分２１ａと少なくとも１つの他の第２プログラム・コード部分２１ｂとの両方によってアクセス可能な共有メモリ区域へのアクセスの要求を検出することを含む。すなわち、ステップ４０２では、トランスレータ・ユニット１９が、少なくとも第１および第２のターゲット・コード部分２１ａ、２１ｂの両方からアクセス可能である（またはアクセス可能になる）メモリ１８内の共有メモリ区域に関するメモリ・アクセス要求を検出するように構成される。さまざまな機構が、そのような共有メモリ区域にアクセスするために使用可能であり、さまざまな検出機構が、下でより詳細に述べるように、本明細書で考慮される。
【００５７】
ステップ４０３は、第１ターゲット・コード部分２１ａ内の少なくともある種の命令またはある種の命令のグループが、検出された共有メモリ区域にアクセスするとき保護された第２のメモリ一貫性モデルの下で実行するように、メモリ一貫性保護機構を適用することを含む。ここで、トランスレータ・ユニット１９は、メモリ一貫性保護機構を選択的に適用し、このメモリ一貫性保護機構は、第１ターゲット・コード部分２１ａ内の選択された命令に、第１モデルとは異なる第２のメモリ一貫性モデルを強制する形で、識別された共有メモリ区域にアクセスさせる。具体的に言うと、保護された第２のメモリ一貫性モデルは、本明細書で注記されるタイプのメモリ一貫性エラーを防ぐことを目指す、第１モデルより強い順序付け制約を提供する。その後、第２コード部分２１ｂも、その共有メモリ区域へのアクセスを試みるときは、第２プログラム・コード部分２１ｂ内の少なくとも選択された命令も今や検出された共有メモリ区域に関して保護された第２のメモリ一貫性モデルの下で実行するように、メモリ一貫性保護機構が、さらに、選択的に適用される。
【００５８】
この例示的実施形態では、第１および第２のターゲット・コード部分２１ａ、２１ｂが、当初は第２のメモリ一貫性モデルに従って制約されるのではなく、当初はデフォルト第１モデルの下で実行される。すなわち、ターゲット・コードは、最初に、ターゲット・システムのより高速のデフォルト・メモリ一貫性モデルに従って作成され、実行される。メモリ１８のうちで共有メモリ区域として検出された区域にアクセスする識別されたターゲット・コード命令だけにメモリ一貫性保護機構を適用することによって、第２のメモリ一貫性モデルの制限および制約に起因してこうむる性能ペナルティが、より全般的にターゲット・コード２１によってアクセスされるすべてのメモリにまたがって機能強化された第２のメモリ一貫性モデルを適用することと比較して、実質的に減らされる。
【００５９】
図５は、本発明の例示的実施形態をさらに示すためにターゲット・コンピューティング・システム１０の選択された部分を示す概略図である。図５では、対象コード１７が、ターゲット・コード２１に変換されるとき複数のターゲット・コード部分（たとえば、複数のスレッド）として実行されるマルチスレッド式アプリケーション・プログラムである。３つのそのようなターゲット・コード部分２１ａ〜２１ｃ（Ｔ１、Ｔ２、Ｔ３）が、例示のために示されている。
【００６０】
対象コード１７は、好適には、トランスレータ１９のサポートを得てターゲット・システム１０上で実行されるターゲット・コード２１に変換されるアプリケーション・プログラムである。一般的な例として、対象コード１７は、ウェブ・サーバ、ディジタル・コンテンツ・サーバ（たとえば、ストリーミング・オーディオ・サーバまたはストリーミング・ビデオ・サーバ）、ワード・プロセッサ、スプレッドシート・エディタ、グラフィックス・イメージ編集ツール、またはデータベース・アプリケーションなど、複雑なプログラムである。ターゲット・コンピューティング・システム１０は、しばしば、オペレーティング・システム２０およびトランスレータ１９に関連するものなどの他のタスクに加えて、多数のそのようなアプリケーションを同時に実行することを要求される。
【００６１】
動的バイナリ変換のコンテキストで、対象コード１７は、特定の対象アーキテクチャ１に固有の作成された（たとえば、コンパイルされた）バイナリ実行可能ファイルの形をとることができる。したがって、対象コード１７の人間による介入または再検討の機会はなく、その代わりに、対象コード１７をターゲット・コンピューティング・システム１０での実行用のターゲット・コード２１（すなわち、ターゲット・バイナリ）に自動的に変換することが望まれる。本明細書で述べる機構は、少なくともいくつかの実施形態で、メモリ一貫性をも保護しながら、そのような変換プロセスを自動的に実施することを可能にする。
【００６２】
多くの市販アプリケーション・プログラムは、複数のプロセスおよび／または複数のプロセス・スレッドとして実行される。ここで、正確な実施態様は、特定のコンピューティング・アーキテクチャに依存して異なるが、各プロセスは、一般に、比較的大量の状態情報（一般にコンテキスト情報とも呼ばれる）を有し、それ自体の仮想アドレス空間を有する。対照的に、親プロセスは、１つまたは複数のスレッドをｓｐａｗｎし、これらのスレッドは、通常、その親プロセスの状態情報を共有し、同一プロセスからの２つのスレッドは、通常、親プロセスの仮想アドレス空間を共有する。同一親プロセスからのスレッドの間の切替は、通常、プロセスの間のコンテキスト切替より高速であり、マルチスレッディングは、現代のマルチプロセッサ・システムでの人気のあるプログラミング・モデルおよび実行モデルである。用語「プロセス」および「スレッド」は、当業者によって幅広く使用され、理解されるが、本明細書の説明は、その代わりに全般的に、説明を明瞭にするためにプログラム・コードの「部分」に言及する。
【００６３】
図５に示されているように、既に説明したユニットに加えて、例示的実施形態のトランスレータ１９は、アドレス空間割振りユニット（ＡＳＡＵ）１９６、共有メモリ検出ユニット（ＳＭＤＵ）１９７、およびメモリ保護ユニット（ＭＰＵ）１９８をさらに含む。
【００６４】
ＡＳＡＵ  １９６は、複数の仮想アドレス空間領域（ＶＡＳＲ）１８１を複数のターゲット・コード部分２１ａ、２１ｂ、２１ｃに割り振るように構成される。第２に、ＡＳＡＵ  １９６は、生成されたターゲット・コード部分２１ａ〜２１ｃに複数の割り振られたＶＡＳＲ  １８１のうちの異なるＶＡＳＲにアクセスするように指示するように構成される。
【００６５】
ＳＭＤＵ  １９７は、ターゲット・コード部分２１ａ、２１ｂ、２１ｃのうちの１つによる、共有メモリ区域にアクセスする要求を検出するように構成され（これについては特定の実施形態を下で述べる）、メモリ一貫性保護が必要である、このターゲット・コード部分内の１つまたは複数のターゲット・コード命令を識別する。
【００６６】
ＭＰＵ  １９８は、メモリ一貫性保護をＳＭＤＵ  １９７によって識別された選択されたターゲット・コード命令に適用するように構成される。このメモリ一貫性保護は、ターゲット・コードに、異なるメモリ一貫性モデル（この場合にはより強い順序付け制約を有するモデル）を強制させて、メモリ一貫性を保ち、これによって、対象コード１７によって要求されるメモリ一貫性モデルを維持する。好適には、ＭＰＵ  １９８は、後で詳細に述べるように、ターゲット・コードにシリアライゼーション命令を適用し、かつ／またはストア順序付けされたページを選択的にアサートする。
【００６７】
図５の例では、３つのターゲット・コード部分Ｔ１、Ｔ２、Ｔ３（２１ａ〜２１ｃ）は、それぞれが、それぞれの仮想アドレス空間領域１８１ａ〜１８１ｃに関連して図示されている。さらに、この第１実施形態では、ＡＳＡＵ  １９６は、共有メモリ区域に関して使用される追加のＶＡＳＲ  １８１ｄを割り振る。
【００６８】
ＡＳＡＵ  １９６の１つの例示的な実施形態では、ターゲット・コンピューティング・システム１０が、複数の異なるアドレッシング・モードを提供する。最も一般的に使用可能なコンピューティング・システムは、３２ビット仮想アドレッシング・モードを提供し、プログラム・コードの特定の部分の仮想アドレス空間が、物理メモリ１８の２３２個の個々の要素（すなわち、バイト、ワード）をアドレッシングできるようになっている。したがって、多くの市販アプリケーション・プログラムは、３２ビット仮想アドレス空間で動作することを期待する。しかし、いくつかのコンピューティング・システムは、６４ビット・モードなどのより大きいアドレッシング・モードをも可能にし、このモードを、より小さい３２ビット・アドレッシング・モードの代わりにまたはそれと一緒に使用することができる。便利なことに、トランスレータ・ユニット１９は、６４ビット・アドレッシング・モードで動作するようにセットされ、これによって、６４ビット仮想アドレス空間（下ではトランスレータ仮想アドレス空間またはトランスレータＶＡＳ  １８０と称する）を与えられる。次に、アドレス空間割振りユニット１９６は、より大きい６４ビット・トランスレータＶＡＳ  １８０内で複数の別々の３２ビット仮想アドレス空間領域（ＶＡＳＲ）１８１を割り振る。複数の２４ビット仮想アドレス空間領域を提供するために副分割される３２ビット・トランスレータＶＡＳなど、他のアドレッシング・オプションが、やはり使用可能であり、同一の効果を達成するために適切な組合せで適用され得る。
【００６９】
ＡＳＡＵ  １９６は、ターゲット・コード２１の各部分をＶＡＳＲ  １８１のうちの選択された１つまたは複数に向けるようにさらに構成される。図２に関して上で注記したように、ターゲット・コードの各部分２１ａは、トランスレータ１９によって処理される最小単位として個々の命令の短いシーケンスを含む複数のブロック２１１に副分割される。これらの命令の一部は、ロードまたはストアなどのメモリ・アクセスを行い、特定のターゲット・コード部分２１ａ内の命令のほとんどは、その部分に割り振られたＶＡＳＲ  １８１ａに関するプライベート・メモリにアクセスする。しかし、ある種の命令または命令のグループは、共有メモリに関するメモリ・アクセスを行い、共有メモリ区域に関するＶＡＳＲ  １８１ｄにアクセスするように指示される。
【００７０】
１実施形態で、ターゲット・コード２１は、メモリ動作を実行するときベース・レジスタＢＲ  １５ａを参照するように生成される。ベース・レジスタ１５ａは、ほとんどのアーキテクチャについて高速で容易に使用可能なストレージ位置であり、「ベース＋オフセット」タイプのメモリ・アクセスで効率的に使用できるが、適切な場合には、他の適切なストレージを使用することができる。ベース・レジスタＢＲは、ターゲット・コードのこの部分（すなわち、このスレッドまたはこのプロセス）のコンテキスト情報の一部として便利に提供される。ベース・レジスタＢＲ  １５ａは、ターゲット・コード２１の生成された部分によって使用される、３２ビットＶＡＳＲ  １８１のうちの１つの開始アドレスとして６４ビット・トランスレータＶＡＳ  １８０内の開始アドレスを与えるベース・アドレスを格納するのに使用される。次に、ターゲット・コードの各部分２１ａ、２１ｂ、２１ｃは、ベース・レジスタＢＲ  １５ａ内の開始アドレスを参照してメモリ・アクセスを行うように、トランスレータ１９によって生成される。
【００７１】
図５の図示の例では、ターゲット・コード部分２１ａについて、ベース・レジスタＢＲは、６４ビット値「１＜＜３２、２３２」を含み、これによって、スレッドＴ１は、この６４ビット・ベース値からのオフセットとしてその割り振られた最初の（３２ビット）ＶＡＳＲ  １８１ａを参照してメモリ・アクセスを行う。同様に、第２ターゲット・コード部分２１ｂについて、ベース・レジスタＢＲは、第２の３２ビットＶＡＳＲ  １８１ｂの６４ビット開始アドレスとして値「２＜＜３２、２３２」を含む。
【００７２】
ここで、例の対象コード１７は、３２ビットＶＡＳ内で動作するように作成されており、したがって、３２ビット・アドレスのみに関係する。したがって、トランスレータ１９は、３２ビットＶＡＳＲ  １８１を参照する、ターゲット・コードの関連部分２１ａ〜２１ｂを生成する。しかし、これらの３２ビットＶＡＳＲ  １８１は、より大きい６４ビット・トランスレータＶＡＳ  １８０から割り振られるので、ターゲット・コードは、メモリ・アクセスを行うときフル６４ビット・アドレスを使用する。これは、３２ビットＶＡＳＲ  １８１を参照する下位３２ビット・アドレスをベース・レジスタＢＲ  １５ａで指定されるフル６４ビット・ベース・アドレスに連結することによって便利に達成される。たとえば、ターゲット・レジスタｒ３１は、６４ビット・ベース・アドレスを保持するベース・レジスタとして働き、ターゲット・レジスタｒ６は、ターゲット・コード内で所望の３２ビット・アドレスを保持するのに使用される。これらのアドレスは、次の擬似コードによって示されるように組み合わされる。
【００７３】
ｒ６＝０ｘ００００３２１０；ターゲット・コードＶＡＳＲ内の３２ビット・アドレス
ｒ３１＝０ｘ０００００００１  ００００００００；このＶＡＳＲの６４ビット・ベース・アドレス
ａｄｄ  ｒ３，ｒ３１，ｒ６；アドレスをｒ３に組み合わせる
ｌｗｚ  ｒ５，０（ｒ３）；ｒ３の組み合わされたアドレスを使用してメモリにアクセスする
さらに、ＡＳＡＵ  １９６は、ターゲット・コード部分２１ａ内のある種の命令に、割り振られたＶＡＳＲ  １８１のうちの異なる１つを参照するように指示するように構成される。具体的に言うと、共有メモリへのアクセスに関するある種の命令が、共有メモリ区域用に予約されたＶＡＳＲ  １８１ｄに向けられる。
【００７４】
１つの例の実施態様で、ベース・レジスタＢＲ  １５ａで与えられる開始アドレスが変更され、ターゲット・コード２１内の後続命令が、その後、割り振られたＶＡＳＲ  １８１のうちの異なる１つを参照するようになる。すなわち、ベース・レジスタＢＲ  １５ａに格納されたベース・アドレスが、変更され、その変更されたベース・アドレスは、ベース・レジスタが以前の値にリセットされるまで、ターゲット・コードの特定のブロック内の１つまたは複数の後続命令によって使用される。ここで、上の例と同様に、最初にＢＲ  １５ａで与えられる値は、第１のターゲット・コード部分２１ａに割り振られたＶＡＳＲ  １８１ａの６４ビット開始アドレスとしての「１＜＜３２、２３２」である。このベース・アドレスを一時的に「０」に変更することは、図示の例では、ターゲット・コード命令に、その代わりに共有メモリ区域用に予約された第４のＶＡＳＲ  １８１ｄを参照させる。ＢＲ１５ａを値「１＜＜３２、２３２」に戻すことによって、もう一度、ターゲット・コード２１ａが、割り振られた第１のＶＡＳＲ  １８１ａを参照するようになる。
【００７５】
便利なことに、ベース・レジスタ１５ａのデフォルト・ベース・アドレスは、ターゲット・コードのこの部分２１ａのコンテキスト／状態の一部としてセットされる。したがって、デフォルト値が、コンテキストから容易に使用可能であり、各ターゲット・コード・ブロック２１１の始めなど、必要なときデフォルト値をすばやくセットすることができる。
【００７６】
もう１つの例の実施態様では、ＡＳＡＵ  １９６は、やはり図５に示された少なくとも２つのベース・レジスタ１５ａ、１５ｂを参照するターゲット・コード命令を選択的に生成するように構成される。便利なことに、第１ベース・レジスタＢＲ１は、ターゲット・コードの現在の部分２１ａ〜２１ｃに割り振られたＶＡＳＲ  １８１ａ〜１８１ｃのベース・アドレスを保持する。それに対し、第２ベース・レジスタＢＲ２は、共有メモリ区域に割り振られたＶＡＳＲ  １８１ｄのベース・アドレスを保持する。ここで、ターゲット・コード命令は、第１ベース・レジスタＢＲ１、第２ベース・レジスタＢＲ２、またはこの両方の組合せに関してメモリ・アクセスを実行するように生成される。したがって、全体を通じて第１ベース・レジスタＢＲ１だけを参照するようにターゲット・コードの第１部分２１ａを生成することによって、ターゲット・コードのこの部分が、それぞれの割り振られたＶＡＳＲ  １８１ａに関してのみ動作するようになる。しかし、ターゲット・コード命令が、その代わりにレジスタＢＲ２内のベース・アドレスを参照する場合に、そのターゲット・コードは、共有メモリ区域のＶＡＳＲ  １８１ｄにアクセスするように指示される。第１ベース・レジスタＢＲ１および第２ベース・レジスタＢＲ２への参照を選択的に移植することによって、ＡＳＡＵ  １９６は、どのＶＡＳＲがターゲット・コードによってアクセスされるのかを制御するように構成される。
【００７７】
ＳＭＤＵ  １９７は、ターゲット・コードの部分２１ａ、２１ｂ、２１ｃのうちの１つによる、共有メモリ・エリアにアクセスする要求を検出するように構成される。第１に、この要求は、他のスレッドまたはプロセスと共有される明示的共有メモリ区域を初期化する要求の形を取る場合がある。第２に、この要求は、別のスレッドの仮想アドレス空間内で既にマッピングされているメモリ区域にアクセスする要求など、共有メモリを間接的に要求する形を取る場合がある。明示的に共有されるメモリの検出を、まず図６を参照して述べる。次に、間接的に共有されるメモリの検出を、図７を参照してより詳細に述べる。
【００７８】
上で述べたように、トランスレータ１９は、実行中のターゲット・コード２１によって行われるシステム呼出しを監視し、インターセプトするように構成される。具体的に言うと、ｘ＿ｃａｌｌが、実行制御をトランスレータ１９内のＦＵＳＥ  １９４に渡すために設けられ、これによって、ｍｍａｐ（）などのメモリ・マッピング・システム呼出しの挙動をエミュレートする。
【００７９】
ｘ＿ｃａｌｌが共有メモリに関係しない場合には、好適には、システム呼出しが、ターゲット・コードの実行中の部分に割り振られたＶＡＳＲ  １８１にプライベート非共有ページをロードするなど、必要なアクションを行うためにターゲットＯＳに対して行われる。次に、実行制御が、ＦＵＳＥ  １９４を介してターゲット・コードに返され、ターゲット・コードは、ターゲット・システム呼出しからリターンするかのようにコンテキストを受け取る。
【００８０】
しかし、ｘ＿ｃａｌｌが共有メモリに関係する場合には、アクションは、共有メモリ検出ユニット１９７によって行われる。ここで、ｘ＿ｃａｌｌまたは少なくともｘ＿ｃａｌｌから導出される情報が、ＳＭＤＵ  １９７に渡される。特定の例として、ターゲット・オペレーティング・システム２０は、ｓｈｍｇｅｔまたはｍｍａｐ（）などのメモリ・マッピング・システム呼出しをサポートする。ＵＮＩＸおよびＬＩＮＵＸタイプのオペレーティング・システムでの特定の例として、ｍｍａｐ（）システム呼出しは、通常、ｍｍａｐ（ｓｔａｒｔ，ｌｅｎｇｔｈ，ｐｒｏｔ，ｆｌａｇｓ，ｆｄ，ｏｆｆｓｅｔ）の形をとって、ファイル記述子ｆｄによって指定されるファイルまたは他のオブジェクトから仮想メモリ内のアドレスｓｔａｒｔへの、ｏｆｆｓｅｔオフセットで始まるｌｅｎｇｔｈバイトのマッピングを要求する。匿名ファイルについて、引数ｆｄはｎｕｌｌである。引数ｐｒｏｔは、読取り保護および書込み保護をセットする所望のメモリ保護を記述する。パラメータｆｌａｇｓは、とりわけ、このオブジェクトをマッピングするすべての他のプロセスとこのマッピングを明示的に共有するフラグＭＡＰ＿ＳＨＡＲＥＤを含む。代替案では、パラメータｆｌａｇｓは、プライベートなコピー−オン−ライト・マッピングを作成するフラグＭＡＰ＿ＰＲＩＶＡＴＥを含む。したがって、ｍｍａｐ（）システム呼出しは、ターゲット・コード内で同等のｘ＿ｃａｌｌ（たとえば、ｘ＿ｍｍａｐ（））として移植され、プライベート・メモリ区域を明示的に要求することができ（その場合には、対応するｍｍａｐ（）システム呼出しが、上で注記したようにターゲットＯＳ  ２０に渡される）、あるいは、共有メモリ区域を明示的に要求することができ、これによって、アクションがＳＭＤＵ  １９７によって行われる。
【００８１】
図６は、明示的共有メモリをマッピングする要求に関してＳＭＤＵ  １９７によって行われるアクションを示すための、図５に示されたターゲット・コンピューティング・システムのより詳細な概略図である。具体的に言うと、図６は、トランスレータＶＡＳ  １８０の一部の概略表現である。
【００８２】
図６に示されたこの例では、ターゲット・コードの現在実行中の部分２１ａは、スレッドＴ１であり、明示的に共有されるメモリ区域１８２ａを要求するためｘ＿ｍｍａｐ（）システム様関数呼出しを含む。しかし、要求される共有メモリ区域１８２ａは、この特定のスレッドＴ１  ２１ａに関連する仮想アドレス空間領域１８１ａにマッピングされていない。そうではなく、要求された共有メモリ区域１８２ａと同一のサイズおよびオフセットのメモリ区域１８２ｄが、その代わりに、共有メモリ用に予約された仮想アドレス空間領域１８１ｄにマッピングされる。要求された共有メモリ区域へのポインタＰＴＲが、ｍｍａｐ（）システム呼出しに続く期待される挙動としてＦＵＳＥ  １９４によってＴ１ターゲット・コード２１ａに返される。この例示的実施形態では、３２ビット・ポインタが、３２ビットＶＡＳＲ  １８１ａ内の開始アドレスとして返される。次に、ターゲット・スレッドＴ１  ２１ａの実行は、新たにマッピングされた共有メモリ区域へのポインタが与えられたかのように継続される。
【００８３】
任意選択で、ＳＭＤＵ  １９７は、ｘ＿ｍｍａｐ（）呼出しの引数から導出された要求された共有メモリ区域１８２ａの詳細を記録する。すなわち、ＳＭＤＵは、各要求された共有メモリ区域１８２のマッピングを形成し、このマッピングは、便利に、各共有メモリ区域のサイズおよび位置を含み、この区域の所有者またはオリジネータとしてターゲット・コードの特定の部分を識別することもできる。また、ＦＵＳＥ  １９４および／またはＳＭＤＵ  １９７は、この新たに割り振られた共有メモリ領域が対象コード１７に見える形を反映するように、トランスレータ１９内で保持される対象状態を更新する。
【００８４】
要求された共有メモリ区域１８２ａは、実際には、第１ターゲット・コード・スレッドＴ１  ２１ａのＶＡＳＲ  １８１ａ内でマッピングされてはいないので、スレッドＴ１がマッピングされていない共有メモリ区域１８２ａ内のページへのアクセスを試みるとき、例外（すなわち、ページ・フォールト）が発生する。この例外は、図２に示された例外ハンドラ１９５によってインターセプトされ、ＳＭＤＵ  １９７に渡され、したがって、ＳＭＤＵ  １９７は、明示的に共有されるメモリ領域１８２ａへのアクセスを試みているターゲット・コードのブロックを識別することができる。
【００８５】
この明示的シグナルに応答して、識別されたターゲット・コード命令は、第１に、共有メモリ用に予約されたＶＡＳＲ  １８１ｄに向けられ、第２に、メモリ一貫性保護機構が、適用される。
【００８６】
上で述べたように、ＡＳＡＵ  １９６は、ベース・レジスタＢＲ  １５ａ内の値を修正するためにコードを変更することによって、またはその代わりに第２ベース・レジスタＢＲ２  １５ｂを参照するようにコードを修正することによって、ターゲット・コードのブロック内の少なくともある種の命令を共有ＶＡＳＲ  １８１ｄ内の共有メモリ区域１８２ｄにリダイレクトする。ＶＡＳＲ  １８１ｄ内の共有メモリ区域１８２ｄは、物理メモリにマッピングされ、したがって、ターゲット・コード内の関連命令は、今や、共有メモリ区域１８２へのアクセスを得る。
【００８７】
この例示的実施形態は、明示的に共有されるメモリ区域が実行中のスレッドＴ１に関連する仮想アドレス空間領域１８１内でマッピングされていないので、共有メモリ区域１８２にアクセスする試みの検出を容易に可能にする。しかし、追加の仮想アドレス空間領域１８１ｄを設け、選択されたターゲット・コード命令をそれにリダイレクトすることによって、所望の共有メモリ領域１８２が、ターゲット・コード２１のその部分によってそれでもアクセス可能である。
【００８８】
また、下でより詳細に述べるように、ＭＰＵ  １９８は、識別されたターゲット・コード命令にメモリ一貫性保護機構を適用する。すなわち、メモリ一貫性保護機構が、メモリ一貫性を保つために、ターゲット・コード２１のうちで共有メモリ領域へのアクセスを試みるブロックだけについて選択的に適用される。したがって、比較的少数の命令が影響を受ける。注目すべきことに、この機構は、高価なメモリ保護機構をプログラム全体またはスレッド全体にすら適用する必要がない。
【００８９】
もう一度図５を参照し、共有メモリ区域用のＶＡＳＲ  １８１ｄが、ターゲット・コードの実行中の部分Ｔ１、Ｔ２、またはＴ３のいずれの仮想アドレス空間領域ともオーバーラップしないことに留意されたい。したがって、第２または第３のターゲット・コード部分Ｔ２またはＴ３による、明示的に共有されるメモリ区域１８２へのアクセスのすべての試みが、最初に失敗する。というのは、この明示的に共有されるメモリ領域が、そのスレッドに関連するそれぞれのＶＡＳＲ  １８１ｂまたは１８１ｃ内でマッピングされていないからである。やはり、結果の例外シグナルは、例外ハンドラ１９５によって処理され、ＳＭＤＵ  １９７に渡され、ＳＭＤＵ  １９７は、関連する命令に、共有メモリ用に予約されたＶＡＳＲ  １８１ｄにアクセスさせ、メモリ一貫性保護機構をそれに適用させる。したがって、明示的に共有されるメモリ区域へのアクセスを試みるすべてのターゲット・コード命令が、例外ハンドラ１９５およびＳＭＤＵ  １９７を介して検出され、適切なアクションが行われる。
【００９０】
図７は、間接的に共有されるメモリに関してＳＭＤＵ  １９７によって行われるアクションを示すための、図５に示されたターゲット・コンピューティング・システムのより詳細な概略図である。具体的に言うと、図７は、間接的に共有されるメモリ区域がターゲット・コードの新しい部分の始めに開始されるときメモリ一貫性を保護するための機構を示す、新しいスレッドなどのターゲット・コードの新しい部分の開始中のトランスレータＶＡＳ  １８０の一部の概略表現である。具体的に言うと、図７は、ＬＩＮＵＸタイプ・オペレーティング・システムのｃｌｏｎｅ（）などのシステム呼出しに関する。ここで、通常のシステム応答は、同一の共有仮想アドレス空間で親プロセスと同時に動作する子スレッドを作成することであり、子スレッドは、親プロセスからのコンテキスト情報のサブセットを含む。したがって、ｃｌｏｎｅ（）システム呼出しによって作成される新しいスレッドは、デフォルトで親プロセスと同一の仮想アドレス空間を占め、したがってメモリを親プロセスと共有する。しかし、例示的実施形態の応答は、これから説明するように、この通常の応答とは異なる。
【００９１】
図７Ａに示されているように、この例では、第１スレッドＴ１が、第１ＶＡＳＲ  １８１ａ内で実行されつつあり、このプロセスにプライベートとして少なくとも１つのメモリ区域１８２ａをマッピング済みである。ここで、マッピングされた区域１８２ａは、通常、グローバル・データ、初期ヒープ・メモリ、および任意選択として追加ヒープ・メモリを含む。第１スレッドＴ１が、ｃｌｏｎｅ（）システム呼出し（便利にｘ＿ｃａｌｌとして移植される）を実行するとき、新しいスレッドＴ２が、図５のＡＳＡＵ  １９６を使用して別々のＶＡＳＲ  １８１ｂを割り振られる。この例では、新しいスレッドＴ２  ２１ｂによって参照されるベース・レジスタ１５ａは、値「２＜＜３２」を含み、スレッドＴ２が、第２のＶＡＳＲ  １８１ｂに向けられるようになっている。２つのスレッドＴ１およびＴ２は、今や、別々のＶＡＳＲを割り振られるので、以前にスレッドＴ１によってマッピングされたメモリの区域１８２ａは、図７Ｂに示されているように、スレッドＴ２に関連する仮想アドレス空間領域１８１ｂにはマッピングされない。したがって、ＶＡＳＲ  １８１ａ内のプライベートなマッピングされた区域１８２ａに対応するサイズおよびオフセットを有する同等の区域１８２ｂが、スレッドＴ２に関連する第２  ＶＡＳＲ  １８１ｂ内でマッピングされないままになる。
【００９２】
図７Ｂに示されているように、スレッドＴ１は、この時点では、スレッドＴ１のターゲット・コードの部分２１ａへの変更を一切伴わずに、プライベート・メモリ区域１８２ａにアクセスし続ける。これは、図５および６を参照して上で述べた明示的共有メモリを処理する機構とは異なる。スレッドＴ１  ２１ａは、それでも、潜在的に共有されるメモリ区域１８２ａにアクセスできるが、スレッドＴ２  ２１ｂが、それ自体のＶＡＳＲ  １８１ｂ内の対応する区域１８２ｂへのアクセスを試みる場合に、関連するページは、マッピングされておらず、例外が発生する。
【００９３】
この例外シグナルは、ＳＭＤＵ  １９７に渡され、ＳＭＤＵ  １９７は、例外ハンドラ１９５と協力して、この例外を処理する。第１に、スレッドＴ１が割り込まれる。というのは、Ｔ１が、第２スレッドＴ２  ２１ｂがアクセスを試みているマッピングされたメモリ区域１８２ａを所有するからである。ここで、スレッドＴ１からの関連するメモリ区域１８２ａへのすべての保留中のアクセスが、完了される。第２に、図７Ｃに示されているように、同一のサイズおよびオフセットの対応するメモリ区域１８２ｄが、今や、共有ＶＡＳＲ  １８１ｄ内でマッピングされ、第１スレッドＴ１によって区域１８２ａで参照される物理メモリ内のデータが、今や、その代わりに共有区域１８２ｄで使用可能になる。フォールトした単一のページを、共有メモリ区域１８２ｄにコピーすることができ、あるいは、関連するメモリ区域１８２ａ全体をこのときコピーすることができる。コピーされた共有区域１８２ａは、たとえばｍｕｎｍａｐ（）を使用することによってまたはその区域を保護されるものとしてマークすることによって、今や、第１スレッドＴ１  ２１ａの仮想アドレス空間領域１８１内でアンマッピングされ、スレッドＴ１は、もはや区域１８２ａにアクセスできなくなる。
【００９４】
次に、Ｔ１は、共有領域１８１ｄ内で新たに作成されたメモリ区域１８２ｄ内のアクセスを再試行することが安全であることをＴ２に通知する。Ｔ１は、通常動作を再開する。Ｔ２は、今や、フォールトしたメモリ・アクセスを、今回は共有メモリ領域１８１ｄにアクセスすることによって、適切なメモリ一貫性保護を適用されて、再試行し、その後、実行を再開する。
【００９５】
図７Ｃに示されているように、ターゲット・コード部分Ｔ１またはＴ２が、その後、共有区域１８２（現在はそのプライベートＶＡＳＲ  １８１ａ、１８１ｂ内でアクセス不能である／アンマッピングされている）にもう一度アクセスする場合には、例外が発生し、そのメモリ・アクセスは、その代わりに、ＭＰＵ  １９８によって適用される適切なメモリ一貫性保護の下で共有アドレス領域１８２ｄにアクセスするために例外ハンドラ１９５を介して完了される。
【００９６】
この機構の結果として、ターゲット・コード部分Ｔ１およびＴ２内の適切な命令が、共有データ区域１８２ｄへのアクセスを得るために共有仮想アドレス空間領域１８１ｄに向けられ、第２のメモリ一貫性モデルのより強い制約が、ターゲット・コードのうちで共有データ区域１８２ｄへのアクセスを試みる部分のみについて適用される。
【００９７】
このプロセスは、今や、スレッドＴ１およびＴ２が並列に実行される状態で継続される。スレッドのうちの１つ、たとえば第２スレッドＴ２が、もう１つのスレッド、たとえば第１スレッドＴ１によって既にマッピングされているメモリの区域へのアクセスを試みるたびに、例外が発生し、この例外は、関連する区域またはページをオーナー・スレッドＴ１から共有ＶＡＳＲ  １８１ｄに移動し、ターゲット・コードのその区域に選択的にメモリ一貫性保護を適用するために処理される。現在は共有されているメモリ区域へのアクセスを試みるすべての他のスレッドは、同様に、例外を引き起こし、そのスレッド内の関連するコードは、同様に、指示され、メモリ一貫性保護の対象になる。したがって、この機構は、プログラム・コードの任意の個数の部分（スレッドＴ１、Ｔ２、Ｔ３など）に適用される。
【００９８】
代替の機構は、多数のＬｉｎｕｘタイプおよびＵＮＩＸタイプのオペレーティング・システムで使用可能な再マッピング・システム呼出しを使用することである。ここで、ＭＲＥＭＡＰシステム呼出しは、メモリ１８へのアクセスを制御するためにターゲット・システム１０によって使用されるページ・テーブルへの変更を可能にする。ページ・テーブルを変更することによって、メモリのページが、仮想アドレス空間１８０内の新しい位置にマッピングされ、したがって、第１ＶＡＳＲ  １８１ａから第２ＶＡＳＲ  １８１ｂに直接に移動される。再マッピングは、実行中のユーザ空間スレッドの観点からは原子的に発生し、したがって、第１スレッドＴ１は、割り込まれまたは通知される必要がない。
【００９９】
図７Ｄは、複数のアドレス空間領域１８１を示すトランスレータＶＡＳ  １８０のもう１つの図であるが、この図では、ＶＡＳＲ  １８１は、例示を簡単にするためにそのそれぞれのベース・アドレスで位置合せされている。また、図７Ｄは、ＶＡＳＲ  １８１のそれぞれの中のマッピングされた区域を記録する、ＳＭＤＵ  １９７によって保持されるＶＡＳＲマップ１９９を示す。この例示的実施形態では、ＶＡＳＲは、すべてが等しい３２ビットのサイズであり、単一の３２ビット・マップが、各ＶＡＳＲ内のマッピングされたメモリ区域を便利に記録する。したがって、プライベートにマッピングされた区域が、当初はターゲット・コード部分の１つのためにＶＡＳＲ内に存在する場合であっても、間接的に共有されるメモリが、特定のＶＡＳＲ内の要求された３２ビット・アドレスが別のＶＡＳＲ内の対応する位置で既にマッピングされていることを判定するためにマップ１９９を調べることによって、容易に検出される。それに応答して、図７Ｂおよび７Ｃに示されたアクションが、検出された共有メモリ区域にアクセスするターゲット・コード命令のみについて実行される。
【０１００】
本明細書で述べる例示的実施形態は、ターゲット・コード部分２１ａ〜２１ｃのそれぞれについて正確に１つのＶＡＳＲ  １８１。しかし、他の実施形態が、やはり可能であり、説明される例示的実施形態に対する変形形態として企図されている。たとえば、複数の共有区域を設けることができる。１つの代替実施形態では、各ターゲット・コード部分２１ａ〜２１ｃは、プライベート・メモリ区域だけを保持する対応するプライベートＶＡＳＲに関連し、それぞれの共有メモリ区域は、共有メモリ区域および１つまたは複数のプライベート・メモリ区域を保持する。ここで、複数のターゲット・コード部分のための複数のＶＡＳＲの使用は、それでも、共有メモリおよび特に間接的に共有されるメモリをＳＭＤＵ  １９７によって簡単に検出することを可能にする。
【０１０１】
図８に、メモリ一貫性保護機能の例示的実施形態をより詳細に示す。
図８の例は、対象コード・ブロック１７１および対応するターゲット・コード・ブロック２１１を示す。ターゲット・コード・ブロック２１１の実行中のある点で、例外が、共有メモリ区域に関して発生し、上で述べたように、メモリ一貫性を保護するためにＡＳＡＵ  １９６、ＳＭＤＵ  １９７、およびＭＰＵ  １９８と協力して例外ハンドラ１９５によってアクションが行われる。図８の例では、例外は、このブロックの実行の途中の命令部分に関して生じ、したがって、ブロック２１１は、例示のために半分に分割されており、ここで、上半分は、既に実行された命令を表し、下半分の残りは、まだ実行を開始されていない。ここで、メモリ保護機能は、まず、現在のブロック２１１の実行を完了することを試み、オン・ザ・フライでメモリ一貫性を保護する手段が講じられる。その後、適切な確立した状態を達成したとき、ターゲット・コードのこのブロックの将来の実行で例外を防ぐことを目指してブロック２１１全体を再生成するなど、より長期の変更が、ターゲット・コードに対して行われる。
【０１０２】
まず、メモリ一貫性保護機構によって講じられる直接の手段を調べて、さまざまな例示的な実施形態を説明する。
１つの例示的実施形態（図８で丸に囲まれた１によってマークされる）では、ターゲット・コード２１は、たとえばストアの各対の間など、適切な同期化ポイントでｎｕｌｌ動作を含むように生成される。ＩＢＭ  ＰＯＷＥＲ  ＩＳＡのＮＯＰ命令などのこれらのｎｕｌｌ動作は、プロセッサに特定の個数のクロック・サイクルの間に何も行わせないこと以外に何の効果も有しておらず、したがって、プレースホルダとして使用するのに便利である。ｎｕｌｌ動作は、今や、アクティブ・シリアライゼーション命令（たとえば、ＳＹＮＣおよびＩＳＹＮＣ）に置換されて、ターゲット・コードにメモリ一貫性セーフティ・ネットを適用する。また、コードは、上で述べたように共有ＶＡＳＲ  １８１ｄを参照するように変更される。したがって、この実施形態は、少なくとも部分的に、ブロック２１１の非実行部分を将来の実行の準備ができた状態に変更する。
【０１０３】
もう１つの実施形態（図８で丸に囲まれた２によってマークされる）では、ターゲット・コードのブロックの実行が、ＭＰＵ  １９８内にまたはこれに関連して常駐する対象−ターゲット・インタープリタＳＴＩｎｔ  ２００を介して完了される。すなわち、実行は、ＳＴＩｎｔ  ２００を介して対応する対象コード・ブロック１７１ｂの残りの命令を１命令ずつ同等のターゲット・コード命令に解釈することによって完了される。ここで、ＭＰＵ  １９８は、インタープリタに、適切な同期化ポイントを形成するためにシリアライゼーション命令を適用させる（たとえば、ロードまたはストアに続くＳＹＮＣおよびＩＳＹＮＣを挿入する）。しかし、この実施形態は、ＳＴＩｎｔ  ２００を介して実行を開始するために、適切な対象状態が使用可能であることを前提とする。
【０１０４】
もう１つの実施形態では、ターゲット・ブロックの少なくとも未実行部分が、即座に、シリアライゼーション命令を挿入するために再生成される。すなわち、ターゲット・コード・ブロック２１１の残りの部分が、変更されたバージョンによって置換され、ここで、シリアライゼーション命令が、判定された同期化ポイントに挿入される。やはり、この実施形態は、再生成されるターゲット・コードがやはり既知の状態から前に進むことができるように、適切な対象状態が使用可能であることを前提とする。
【０１０５】
適切な対象状態が、例外が発生した点で使用可能ではない場合には、ＭＰＵ  １９８は、ターゲット・コードを適切にロール・バックして、必要な対象状態が達成可能であるチェックポイントまたは回復ポイントに達する。例外に関して対象状態を達成する例の機構が、上で引用したＷＯ２００５／００６１０６に詳細に記載されている。ここで、ブロックの始めもしくは終りまたはブロック内の選択された点などのチェックポイントが提供される。ＭＰＵは、最後に達したチェックポイントを探し、したがって、そのチェックポイントでの対象状態を回復することができる。ブロックの実行は、今は、回復された対象状態を参照してチェックポイントから前に進むことによって完了される。
【０１０６】
さらなる洗練で、ＭＰＵ  １９８は、例外が発生した点の後の次のチェックポイントにロール・フォワードする。ここで、ＭＰＵは、ターゲット−ターゲット・インタープリタＴＴＩｎｔ  ２０１によって支援され、ＴＴＩｎｔ  ２０１は、ターゲット・コードが次のチェックポイントにロール・フォワードするまで、メモリ一貫性を保護するために適切なシリアライゼーション命令を挿入しながら、ブロック２１１内の既に生成されたターゲット・コードを解釈する。この対象状態を回復するフォワード・ローリング機構は、ＷＯ２００６／１０３３９５で詳細に述べられている。さらなる洗練として、ターゲット−ターゲット・インタープリタＴＴＩｎｔ  ２０１は、ターゲット・コードのブロックの後の再生成を改善するために、フォールトしたメモリ・アクセスおよびフォールトしなかったメモリ・アクセスを記録するなど、ロール・フォワード動作中に変換ヒントを収集する。便利なことに、これらの変換ヒントは、最初にＮＯＰ  ｎｕｌｌ動作を用いてターゲット・コードを生成し、その後、これらのＮＯＰを変換ヒント・フラグを用いて選択的に置換することによって、ターゲット・コードに移植される。
【０１０７】
このターゲット・コード・ブロック２１１の直接の必要を処理したので、トランスレータ１９は、今や、さらなる注意をブロック２１１に向けることができる。たとえば、ターゲット・ブロック２１１全体のすべてまたは一部を、ブロック全体にシリアライゼーション命令（たとえば、ＳＹＮＣおよびＩＳＹＮＣ）を含むようにまたはブロック内の選択された命令のグループを保護するようになど、再生成することができる。したがって、再生成されたターゲット・コード・ブロック２１１ｂは、今や、そのブロックが将来に実行されるとき共有メモリ・アクセスに関するメモリ一貫性保護の対象である。ターゲット・コードの再生成は、ターゲット・コードのブロックの以前の具体化の実行から収集された変換ヒントを使用することができる。再生成は、即座に実行することができ、あるいは、図８に概略的に示されているように再生成フラグ２１１ｆを使用して再生成を必要とするものとしてブロックをマークすることによって、ブロック２１１ｂが実行のために次に必要とされる時など、より後の点まで延期することができる。再生成プロセスは、反復的であり、複数のパスを要する場合がある。すなわち、メモリ一貫性保護は、第１再生成の後に第１の命令のグループに選択的に適用され、その後、第２再生成で第２の命令のグループにも適用される。ここで、以前の１つまたは複数の具体化から収集された変換ヒントは、再生成の最新の反復を支援するのに使用することができる。さらに、再生成プロセスは、複数の独自のエントリ・ポイントおよび／または複数の独自のエクシット・ポイントを有する、かつ／あるいは内部ジャンプを有するグループ・ブロックを形成するためにターゲット・コードの複数の基本ブロックの組合せを含むことができる。ここで、ターゲット・コードに埋め込まれた変換ヒントは、関連する基本ブロックの以前の再生成を既に考慮に入れ、したがってグループ・ブロックの再生成を減らす、効率的なグループ・ブロックをトランスレータが形成することを可能にするのに役立つ。
【０１０８】
実用的な実施形態では、コードの特定のセクションを、共有メモリとプライベート・メモリとの両方のアクセスに使用することができる。上で述べたように、ターゲット・コードは、元々、関連するプライベートＶＡＳＲ  １８１ａ〜ｃ内のプライベート・メモリに適切に生成される。コードが、その後に共有メモリに適切に再変換される場合に、そのコードは、今や、その代わりに、プライベート・メモリへのアクセスを試みるとき例外を引き起こす。というのは、そのプライベート・メモリが、共有ＶＡＳＲ  １８１ｄ内でマッピングされていないからである。したがって、１つのオプションは、コードを、プライベート・メモリに適切なオリジナル・フォーマットにもう一度変換して戻すことである。共有ＶＡＳＲ  １８１ｄまたはプライベートＶＡＳＲ  １８１ａ〜ｃにマッピングされるメモリ・ページの相互に排他的な性質は、ケースのこの変化が必ず検出されることを保証する。
【０１０９】
例外の処理およびコードの関連する１つまたは複数のブロックの再変換にはオーバーヘッドがある。いくつかのプログラムで、再変換オーバーヘッドは、比較的まれに出会い、したがって、最も適切な全体的解決策である。しかし、コードのあるセクションがプログラム内の多数の異なる場所から呼び出される時など、いくつかの実例が、頻繁な再変換を伴うこともわかっている。一特定の例が、メモリ・コピー関数ｍｅｍｃｐｙ（）である。ここで、この機構を、さらに開発し、洗練して、この問題に対処する。
【０１１０】
図８に示されているように、トランスレータ１９は、ターゲット・ブロック２１１の少なくとも２つの異なるバージョンを保持することができる。第１のバージョン２１１Ａは、メモリ一貫性保護なしのオリジナル変換であり、これは、ターゲット・システムによって実行される並べ変えおよび他の最適化に従ってすばやく実行される。第２のバージョン２１１Ｂは、この例ではシリアライゼーション命令を伴う共有ＶＡＳＲ  １８１ｄを参照する、メモリ一貫性保護の対象であり、したがって、より遅く実行される。トランスレータは、今や、プログラムの実行中にこのブロックに次に出会うとき、第１のバージョン２１１Ａと第２のバージョン２１１Ｂを選択的に実行することができる。関数へのエントリ時に、動的テストを適用して、アクセスされるメモリのタイプ、すなわちプライベートまたは共有のいずれかを判定し、その後、適切なバージョンを選択する。この解決策は、変換オーバーヘッドを減らすが、動的テストの実行の際に実行ペナルティがある。
【０１１１】
もう１つの洗練では、トランスレータは、ループ最適化を実行する。ここで、ループは、１回目に実行され、ループ内のメモリ・アクセスが共有メモリを参照するので、メモリ例外を引き起こす。トランスレータは、今や、共有メモリを参照するようにループ内のコードを再変換することができ、共有メモリを参照する将来の実行がフォールト（fault）する可能性をより低くする。動的チェックの提供は、プライベート・メモリまたは共有メモリのいずれかにアクセスするようにループ内のコードを特殊化する。また、トランスレータは、動的チェックをループの中から引き揚げ、ループの前に配置し、したがって実行作業負荷をさらに減らすことを試みることができる。
【０１１２】
呼び出されるコードの動的チェックに対する代替案として、もう１つのオプションは、特殊化されたコードを呼出し側の場所でインライン化することである。もう１つのオプションは、特定の関数の呼出し側を特殊化することである。すなわち、呼出し側は、それぞれプライベート・メモリまたは共有メモリにアクセスするために、プライベートタイプ・アクセッサ関数または共有タイプ・アクセッサ関数のいずれかを呼び出すように特殊化される。たとえば、
呼出し側＞ｍｅｍｃｏｐｙ＞メモリ
は、
呼出し側１（プライベート）＞ｍｅｍｃｏｐｙ＿ｐｒｉｖａｔｅ＞プライベート・メモリ
呼出し側２（共有）＞ｍｅｍｃｏｐｙ＿ｓｈａｒｅｄ＞共有メモリ
になる。
【０１１３】
これらの特殊化された呼出し側は、インダイレクションのさらなる層（すなわち、呼出しスタック上の余分なアイテムとしてのラッパー関数）を用いることもできる。ここで、アクセスされるメモリ・アドレスは、呼出し側によって決定され、メモリ・アドレスは、アクセッサ関数（たとえば、ｍｅｍｃｏｐｙ）によってのみ使用される。ラッパー関数は、最初に、そのサクセッサのプライベート・バージョンを呼び出すようにセットされる。したがって、呼出しスタックを観察することによって、この呼出し側場所からの将来の呼出しが成功することを可能にするために特殊化される必要があるラッパー関数が判定される。好適には、漸進的特殊化は、各層がプライベート・バージョンおよび共有バージョンに特殊化され終るまで、アクセッサ関数に最も近いものから開始して、一時に１ラッパー層ずつ適合する。
【０１１４】
図９は、本明細書で述べるさまざまな詳細な実施形態の要約としてメモリ一貫性保護方法の全般的概要を提供する概略流れ図である。
ステップ９０１で、第１および第２のコード部分を別々の仮想アドレス空間領域内で実行する。たとえば、第１および第２のターゲット・コード部分２１ａ、２１ｂが、それぞれ別個のオーバーラップしない第１および第２の仮想アドレス空間領域１８１ａ、１８１ｂに関して実行される。
【０１１５】
ステップ９０２は、任意選択で、仮想アドレス空間領域１８１ａ、１８１ｂのそれぞれの中のマッピングされた区域１８２ａ、１８２ｂを記録することを含む。ここで、各マッピングされたメモリ区域のアドレス・オフセットおよびサイズ（アドレス範囲）が、とりわけｍｍａｐ（）システム呼出しなどのメモリ・マッピング・アクションに応答してメモリ・マップ１９９内に記録される。
【０１１６】
ステップ９０３で、この方法は、現在実行中のコード部分に関連するアドレス空間内ではマッピングされていないが、複数のアドレス空間のうちの別のアドレス空間内でマッピングされているメモリ区域へのアクセス要求を検出することを含む。ここで、対応するメモリ区域は、別の実行中のコード部分（すなわち、別のスレッド）に関連するアドレス空間内または共有メモリ用に予約された別々のアドレス空間内のいずれかでマッピングされる。どちらの場合でも、現在実行中のコード部分によるアクセス要求は、メモリ例外を引き起こし、このメモリ例外に応答して、現在実行中のコード部分が共有メモリ区域へのアクセスを試みていると判定される。
【０１１７】
ステップ９０４で、この方法は、コードに所定の制約を有するメモリ一貫性モデルの下で実行させるメモリ一貫性保護機構を適用するために、現在実行中のコードを修正することを含む。また、現在実行されているコードは、共有メモリ用に予約されたアドレス空間内の所定の共有メモリ区域に向けられるように修正される。
【０１１８】
最後に、ステップ９０５で、共有メモリ区域がまだ共有メモリ用に予約されたアドレス空間内に常駐していない場合に、共有メモリ区域を、そのようなアドレス空間に移動し、少なくとも現在のコード部分に関連するアドレス空間内でアンマッピングするか他の形で保護する。
【０１１９】
上で述べたｃｌｏｎｅ（）システム呼出しなどの新しい実行中コード部分を開始する機構を考慮して、ステップ９０１が、新たに実行されるコード部分を開始する試みを検出するステップと、新しい実行中コード部分用の別々のアドレス空間を割り振るステップと、その後、新たに割り振られた別々のアドレス空間内で新しいコード部分を実行するステップとをさらに含むことができることを理解されたい。
【０１２０】
また、図９に示されたステップが、図示のシーケンシャル順で実行される必要がないことを理解されたい。特定の例として、各アドレス空間内のマッピングされた区域を記録するステップ９０２を、メモリの各新しい区域が特定のアドレス空間にマッピングされるとき動的に実行することができ、この実行は、複数のコード部分のそれぞれを別々のアドレス空間で実行するステップ９０１の前に、ステップ９０１と並列に、またはステップ９０１の後に発生することを理解されたい。さらに、ステップ９０４および９０５を、任意選択で、ターゲット・コードがまずメモリ一貫性保護機構を適用されて生成されるように、周期的に実行することができる。これらの代替実施形態は、トランスレータ１９内のセッティングに依存する可能性がある。トランスレータが、対象コード１７の変換の結果として、そのようなオプション実施形態がプログラムの特定のセクションについて有益であると予測する場合には、メモリ一貫性保護機構が、生成されるターゲット・コード２１に適用される。
【０１２１】
さらに、上で述べた機構が、単一のアプリケーション・プログラム内で動作するプロセスおよびスレッドに限定されるのではなく、ターゲット・コンピューティング・システム上で同時に動作するプログラムのセットまたはスイートにも適用できることを理解されたい。すなわち、複数の別々のプログラム（タスク）が、上で述べた機構の下でメモリを共有する形で一緒に動作することができる。
【０１２２】
図１０は、本発明のもう１つの例示的実施形態によるＭＰＵ  １９８内でメモリ一貫性保護機構を実施する方法の概略流れ図である。上で詳細に述べたメモリ一貫性保護機構は、生成されたターゲット・コードにシリアライゼーション命令を適用した。代替構成では、ページ・フラグ変更が、メモリ１８内でストア順序付けされるページを作成するために、ターゲット・コンピューティング・システムのある種のアーキテクチャで使用される。
【０１２３】
ステップ１００１で、上で述べた実施形態に似て、複数のターゲット・コード部分のそれぞれを、別々の仮想アドレス空間領域内で実行する。ステップ１００２で、この方法は、図７ＤのＶＡＳＲマップ１９９を使用することによるなど、複数のアドレス空間のそれぞれにマッピングされるメモリ区域を記録することを含む。これらのステップは、上で述べた形で図５のＡＳＡＵ  １９６によって適切に実行される。
【０１２４】
ステップ１００３で、この方法は、共有メモリ区域を開始する要求を検出することを含む。一特定の実施形態では、この要求は、明示的に共有メモリを要求するｍｍａｐ（）などのメモリ・マッピング・システム呼出しである。もう１つの例では、子スレッドが、それ自体のアドレス空間内でマッピングされていないが、親スレッドのアドレス空間内でマッピングされている領域へのアクセスを試みるとき、例外が送出され、ここで、子スレッドは、ｃｌｏｎｅ（）システム呼出しなどによって生成されたものである。好適には、ＳＭＤＵ  １９７の検出機構が、上で述べたように使用される。
【０１２５】
ステップ１００４で、検出された共有メモリ区域の１つまたは複数のページが、これらのページへのアクセスが第２の非デフォルト・メモリ一貫性モデルを厳守することを強制されるように、ページ・テーブル属性を操作することによって、ＭＰＵ  １９８によってマークされる。特定の例として、ＰｏｗｅｒＰＣアーキテクチャに基づくシステム・ハードウェアの実施態様は、シーケンシャル一貫性を必要とするものとして関連するページをマークすることを可能にするように適合される。
【０１２６】
この実施形態は、有利なことに、共有メモリ区域１８２を別々のアドレス空間領域１８１に移動することを必要としない。そうではなく、共有メモリ区域１８２は、共有メモリ区域１８２へのアクセスを必要とする各ターゲット・コード部分２１ａ、２１ｂ、２１ｃのＶＡＳＲ  １８１ａ、１８１ｂ、１８１ｃにマッピングされる。共有区域にアクセスするすべてのコードが、ストア順序付けされた形でそれを行い、したがって、望まれるメモリ一貫性モデルが、適用される。さらに、ターゲット・コードは、ページ・フォールトなしで共有メモリ区域１８２にアクセスし、ターゲット・コードの変更が回避される。
【０１２７】
図１１は、仮想アドレス空間１８０を物理メモリ・サブシステム１８にマッピングするページ・テーブルＰＴ  １８３と一緒に、ストア順序付けされたページに関するこの実施形態をさらに示すための、トランスレータＶＡＳ  １８０を含む、ターゲット・コンピューティング・システムの諸部分の概略図である。
【０１２８】
図１１Ａでは、第１コード部分Ｔ１  ２１ａが、共有メモリ、たとえばファイル−バッキングされたｍｍａｐ＿ｓｈａｒｅｄメモリを明示的に要求するｍｍａｐ（）タイプのシステム呼出しを含む。トランスレータ・ユニット１９内のＦＵＳＥ  １９４は、このシステム呼出しをインターセプトし、ページがまだストア順序付けされるものとしてマークされていない場合には、その領域のキャッシュ・ラインを無効化し、ページ・テーブルＰＴ  １８３内でそのページをストア順序付けされるものとしてマークする。次に、ファイルが、共有メモリ区域１８２ａとして、第１コード部分Ｔ１  ２１ａのＶＡＳＲ  １８１ａにマッピングされる。
【０１２９】
図１１Ｂに示されているように、第２ターゲット・コード部分２１ｂは、今や、共有メモリ区域１８２ａへのアクセスを試み、この共有メモリ区域が現在は関連するＶＡＳＲ  １８１ｂ内でマッピングされていないので、例外が送出される。それに応答して、ＳＭＤＵ  １９７は、今や、共有メモリ区域１８２ｂをも第２ＶＡＳＲ  １８１ｂにマッピングし、まだそのようにマークされていない場合には、関連するメモリ・ページを、ページ・テーブル属性を操作することによってストア順序付けされるものとしてマークする。
【０１３０】
図１１Ｂは、ｃｌｏｎｅ（）システム呼出しが行われる場合のシステムの応答をも示す。コード部分２１ｂ内の新しいスレッドは、親プロセス２１ａのＶＡＳＲ  １８１ａとオーバーラップしない別々の別個のＶＡＳＲ  １８１ｂを割り振られる。この場合に、第１コード部分２１ａの第１ＶＡＳＲ  １８１ａ内の以前のプライベート・メモリ領域１８２ａを、今や共有されるものにすることができる。メモリ１８２ａのある種の領域が、ＶＡＳＲ  １８１ａ内で親プロセスに既にマッピングされる場合であっても、これらは、新たに複製（clone）されるスレッドについてはマッピングされていないままになる。第２コード部分２１ｂが、今、それ自体のＶＡＳＲ  １８１ｂ内ではマッピングされていないが親プロセス２１ａのＶＡＳＲ  １８１ａ内の対応する区域１８２ａではマッピングされるメモリ領域１８２ｂへのアクセスを試みる場合に、子スレッドＴ２  ２１ｂは、例外を引き起こす。ＳＭＤＵ  １９７は、所望のファイルを子スレッドのＶＡＳＲにマッピングして、共有メモリ区域１８２ｂ内でこれらのＶＡＳＲ  １８１ａ、１８１ｂの両方で同一の相対位置にマッピングして、ターゲット・コードの両方の部分２１ａ、２１ｂに物理メモリの同一ページへのアクセスを与える。この場合に、以前にはプライベートであったが今は間接的に共有されるメモリ区域１８２は、ページ・テーブルＰＴ  １８３内でストア順序付けされるものとしてマークされる。
【０１３１】
例示的な実施形態を、上では主にプログラム・コードのアクセラレーション、エミュレーション、または変換のためのプログラム・コード変換システムに関して述べた。また、本明細書で述べた機構は、メモリ一貫性エラーに脆弱なプログラム・コードを検出し、任意選択でこれを自動的に訂正する、デバッギング・ツールに適用可能である。設計問題すなわちバグは、共有メモリ・マルチプロセッサ・アーキテクチャでは見つけ、分離し、訂正するのがむずかしい。検出されないバグは、不正な動作をもたらし、この不正な動作は、しばしばシステム障害につながり、新しいソフトウェアの公開を遅らせ、あるいは、公開後ソフトウェア・アップデートすら必要とする。このために、本明細書のコントローラ／トランスレータ・ユニットは、共有メモリ区域を検出し、生成されるターゲット・コードがデバッギングされるように、シリアライゼーション命令の挿入またはページ・テーブル属性の変更などの対象コードに対する適切なコード変更を適用する、デバッギング・ツールとして動作するように構成される。
【０１３２】
少数の例示的な実施形態を図示し、説明してきたが、当業者は、添付の特許請求の範囲で定義される本発明の範囲から逸脱せずにさまざまな変更および修正を行えることを理解するであろう。
【０１３３】
本願に関連して本願と同時にまたは本願の前に出願され、本願に関して公に公開されるすべての論文および文書に注意が向けられ、そのようなすべての論文および文書の内容が、参照によって本明細書に組み込まれている。
【０１３４】
本明細書（すべての添付の特許請求の範囲、要約書、および図面を含む）で開示される特徴のすべておよび／またはそのように開示されるすべての方法またはプロセスのステップのすべてを、そのような特徴および／またはステップの少なくともいくつかが相互に排他的である組合せを除いて、任意の組合せで組み合わせることができる。
【０１３５】
本明細書（すべての添付の特許請求の範囲、要約書、および図面を含む）で開示される各特徴を、そうではないと明示的に述べられない限り、同一の、同等の、または類似する目的のために働く代替特徴によって置換することができる。したがって、そうではないと明示的に述べられない限り、開示される各特徴は、包括的な一連の同等のまたは類似する特徴の１つの例にすぎない。
【０１３６】
本発明は、前述の１つまたは複数の実施形態の詳細に制限されない。本発明は、本明細書（すべての添付の特許請求の範囲、要約書、および図面を含む）で開示される特徴の任意の新規の１つもしくは任意の新規の組合せ、またはそのように開示される任意の方法またはプロセスのステップの任意の新規の１つもしくは任意の新規の組合せに及ぶ。
【図１】
0005583409.tif 000004
【図２】
0005583409.tif 000005
【図３】
0005583409.tif 000006
【図４】
0005583409.tif 000007
【図５】
0005583409.tif 000008
【図６】
0005583409.tif 000009
【図７Ａ】
0005583409.tif 000010
【図７Ｂ】
0005583409.tif 000011
【図７Ｃ】
0005583409.tif 000012
【図７Ｄ】
0005583409.tif 000013
【図８】
0005583409.tif 000014
【図９】
0005583409.tif 000015
【図１０】
0005583409.tif 000016
【図１１Ａ】
0005583409.tif 000017
【図１１Ｂ】
0005583409.tif 000018