(57)【要約】自己書き換えゲストコードのサポートを提供する方法及び装置。この装置は、メモリ、ハードウェアバッファ、及びプロセッサを備える。プロセッサは、ゲストコードをネイティブコードに変換するとともに、ゲストコードの変換後のネイティブコードに相当するものをプロセッサのコードキャッシュ部に格納するように構成されている。プロセッサは、コードキャッシュにおける変換後コードの各位置を追跡するように構成されたハードウェアバッファを維持するようにさらに構成されている。ハードウェアバッファは、コードキャッシュにおける変換後コードの各位置と関連付けられたメモリ中の各位置への各アクセスに基づいて更新される。プロセッサは、ハードウェアバッファへのアクセス後、メモリ位置を書き換える要求を実行するようにさらに構成されている。【選択図】  図４Ａ
2017516228.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
ハードウェアバッファと、
プロセッサであって、
ゲストコードをネイティブコードに変換することと、
変換後ゲストコードを前記プロセッサのコードキャッシュ部に格納することと、
コードキャッシュにおける変換後コードの各位置を追跡するように構成された前記ハードウェアバッファを維持することであり、前記ハードウェアバッファが、前記コードキャッシュにおける変換後コードの各位置と関連付けられた前記メモリ中の各位置への各アクセスに基づいて更新される、維持することと、
前記ハードウェアバッファへのアクセス後、メモリ位置を書き換える要求を実行することと、
を行うように構成されたプロセッサと、
を備えた、装置。
【請求項２】
前記メモリが、前記コードキャッシュに存在する変換後コードを追跡する前記ハードウェアバッファと関連付けられたテーブルを含む、請求項１に記載の装置。
【請求項３】
前記ハードウェアバッファが、前記ハードウェアバッファと関連付けられた前記テーブルのキャッシュとして働くように構成されており、前記ハードウェアバッファが、前記ハードウェアバッファと関連付けられた前記テーブルのデータの部分集合を含む、請求項２に記載の装置。
【請求項４】
前記プロセッサが、変換後ゲストコードを含む前記コードキャッシュにおける位置と関連付けられたメモリ中の位置を前記要求が書き換えることになる場合、例外を発生させるように構成された、請求項１に記載の装置。
【請求項５】
前記プロセッサが、ゲストコード分岐に応答して例外を発生させるように構成された、請求項１に記載の装置。
【請求項６】
前記要求が、自己書き換えコードによる格納である、請求項１に記載の装置。
【請求項７】
前記要求が、直接メモリアクセス（ＤＭＡ）書き込みである、請求項１に記載の装置。
【請求項８】
前記プロセッサが、前記ハードウェアバッファを備えた、請求項１に記載の装置。
【請求項９】
メモリと、
ハードウェアバッファ及びコードキャッシュを備えたプロセッサであって、
ゲストコードをネイティブコードに変換することと、
変換後ゲストコードを前記プロセッサのコードキャッシュに格納することと、
コードキャッシュにおける変換後コードの各位置を追跡するように構成された前記ハードウェアバッファを維持することであり、前記ハードウェアバッファが、前記コードキャッシュにおける変換後コードの各位置と関連付けられた前記メモリ中の各位置への各アクセスに基づいて更新される、維持することと、
前記コードキャッシュに存在する変換後コードを追跡する前記ハードウェアバッファと関連付けられたテーブルを維持することであり、前記メモリが、前記ハードウェアバッファと関連付けられた前記テーブルを含む、維持することと、
前記ハードウェアバッファへのアクセス後、メモリ位置を書き換える要求を実行することと、
を行うように構成されたプロセッサと、
を備えた、システム。
【請求項１０】
前記ハードウェアバッファが、前記ハードウェアバッファと関連付けられた前記テーブルのキャッシュとして働くように構成されており、前記ハードウェアバッファが、前記ハードウェアバッファと関連付けられた前記テーブルのデータの部分集合を含む、請求項９に記載のシステム。
【請求項１１】
前記プロセッサが、変換後ゲストコードを含む前記コードキャッシュにおける位置と関連付けられたメモリ中の位置を前記要求が書き換えることになる場合、例外を発生させるように構成された、請求項９に記載の装置。
【請求項１２】
前記プロセッサが、ゲストコード分岐に応答して例外を発生させるように構成された、請求項９に記載の装置。
【請求項１３】
前記要求が、自己書き換えコードによる格納である、請求項９に記載の装置。
【請求項１４】
前記要求が、直接メモリアクセス（ＤＭＡ）書き込みである、請求項９に記載の装置。
【請求項１５】
ゲストコードを変換するシステムであって、
メモリと、
ハードウェアバッファ及びコードキャッシュを備えたプロセッサであって、
ゲストコードをネイティブコードに変換することと、
変換後ゲストコードを前記プロセッサのコードキャッシュに格納することと、
コードキャッシュにおける変換後コードの各位置を追跡するように構成された前記ハードウェアバッファを維持することであり、前記ハードウェアバッファが、前記コードキャッシュにおける変換後コードの各位置と関連付けられた前記メモリ中の各位置への各アクセスに基づいて更新され、前記ハードウェアバッファが、自己書き換えコードに応答して更新される、維持することと、
前記コードキャッシュに存在する変換後コードを追跡する前記ハードウェアバッファと関連付けられたテーブルを維持することであり、前記メモリが、前記ハードウェアバッファと関連付けられた前記テーブルを含む、維持することと、
前記ハードウェアバッファへのアクセス後、メモリ位置を書き換える要求を実行することと、
を行うように構成されたプロセッサと、
を備えた、システム。
【請求項１６】
前記ハードウェアバッファが、前記ハードウェアバッファと関連付けられた前記テーブルのキャッシュとして働くように構成されており、前記ハードウェアバッファが、前記ハードウェアバッファと関連付けられた前記テーブルのデータの部分集合を含む、請求項１５に記載のシステム。
【請求項１７】
前記プロセッサが、変換後ゲストコードを含む前記コードキャッシュにおける位置と関連付けられたメモリ中の位置を前記要求が書き換えることになる場合、例外を発生させるように構成された、請求項１５に記載のシステム。
【請求項１８】
前記プロセッサが、ゲストコード分岐に応答して例外を発生させるように構成された、請求項１５に記載のシステム。
【請求項１９】
前記要求が、格納である、請求項１５に記載のシステム。
【請求項２０】
前記要求が、直接メモリアクセス（ＤＭＡ）書き込みである、請求項１５に記載のシステム。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
[001]本願は、２０１４年５月１２日に出願された代理人整理番号第ＳＭＩＩ−２０７．Ａ号の本願と同一の出願人による米国仮特許出願第６１／９９１，９５１号「ＭＥＴＨＯＤ  ＡＮＤ  ＡＰＰＡＲＡＴＵＳ  ＦＯＲ  ＰＲＯＶＩＤＩＮＧ  ＨＡＲＤＷＡＲＥ  ＳＵＰＰＯＲＴ  ＦＯＲ  ＳＥＬＦ  ＭＯＤＩＦＹＩＮＧ  ＣＯＤＥ」の優先権及び利益を主張するものであり、そのすべてを本明細書に援用する。
【背景】
【０００２】
[002]自己書き換えコード（ＳＭＣ）は、あるソフトウェアコードが実行前にそれ自体の一部を書き換える最適化技術である。ＳＭＣは、Ｊａｖａ［登録商標］プログラミング言語等を用いた実行時コンパイル（ＪＩＴ）コンパイルシステムにおいて使用可能である。コード変換を使用するシステムにおいては、ゲストコードの自己書き換えによって、特有の問題が生じる。それは、ゲストコード書き換え（ＧＣＭ）の検出が必要であるとともに、新たなコードに基づいて、コードキャッシュ中の対応する変換トレースを無効化又は再生する必要があるためである。
【０００３】
[003]ＧＣＭの検出は、滅多に発生しないケースが起こり得るため、困難となる可能性がある。滅多に発生しないケースとしては、微細にインターリーブされたコード及び書き込み可能なデータが挙げられ、例えば別個の命令及びデータパスを有するハーバードプロセッサの場合、ＧＣＭは、キャッシュ可能なメモリにコードが格納された場合には、ゲストアーキテクチャの特定のコード系列がコード変化を可視化することを必要とすることがある。
【０００４】
[004]滅多に発生しないケースとしては、中央演算処理装置（ＣＰＵ）と異なるメモリマスタによりコード位置が書き込まれる場合がさらに挙げられる。例えば、ある直接メモリアクセス（ＤＭＡ）プロセスでは、実行前に外部の周辺機器からコードをダウンロードする。ＤＭＡメモリ書き込み操作をＣＰＵから見えるようにし、考慮できるように、入出力メモリ管理ユニット（ＩＯＭＭＵ）が存在する場合が多い。
【概要】
【０００５】
[005]ともにＧＣＭとして知られている自己書き換えゲストコード及びゲストコードのＤＭＡ書き換えを取り扱うことが必要とされている。実施形態は、コードキャッシュに格納されたコードのトレースに対応するメモリ領域の変化を識別するように構成されている。実施形態は、コードキャッシュにおける変換後コードの位置を追跡するようにさらに構成されていてもよい。自己書き換えコードが存在し得るデータのフェッチに対応可能である。自己書き換えコードの検出及びコードキャッシュにおけるコードのトレースの置換が行われている間に性能が向上する。
【０００６】
[006]一実施形態は、自己書き換えコードのサポートを提供する装置として実装される。この装置は、メモリ、ハードウェアバッファ、及びプロセッサを備える。プロセッサは、ゲストコードをネイティブコードに変換するとともに、変換後ゲストコードをプロセッサのコードキャッシュ部に格納するように構成されている。プロセッサは、コードキャッシュにおける変換後コードの各位置を追跡するように構成されたハードウェアバッファを維持するようにさらに構成されている。ハードウェアバッファは、コードキャッシュにおける変換後コードの各位置と関連付けられたメモリ中の各位置への各アクセスに基づいて更新される。プロセッサは、ハードウェアバッファへのアクセス後、メモリ位置を書き換える要求を実行するようにさらに構成されている。
【０００７】
[007]上記は、概要であるため、必然的に詳細を簡素化、一般化、及び省略している。したがって、当業者は、概要が例示されているに過ぎず、何ら限定するものでないことを認識されよう。特許請求の範囲によってのみ規定される本発明の他の態様、独創的特徴、及び利点については、以下に示す非限定的な詳細説明において明らかとなるであろう。
【図面の簡単な説明】
【０００８】
[008]本開示の別の態様については、添付の図面を参照することにより、ほんの一例に過ぎない以下の説明から明らかとなるであろう。
【０００９】
【図１】[009]図１は、種々の実施形態に係る、ゲスト命令ブロックがネイティブ変換ブロックに変換されるブロックベースのトランスレーションプロセスを示した図である。
【００１０】
【図２】[0010]図２は、種々の実施形態に係る、ゲスト命令ブロック及びその対応するネイティブ変換ブロックがキャッシュに格納される様態を示す例示的なハードウェア加速変換システムを示した図である。
【００１１】
【図３】[0011]図３は、種々の実施形態に係る、システムのページサイズよりも小さな粒度でゲストコードを追跡するシステムの例示的な構成要素を示した図である。
【００１２】
【図４Ａ】[0012]図４Ａは、種々の実施形態に係る、コードキャッシュにおける変換後コードの位置を追跡する例示的な電子的構成要素制御のプロセスを示したフローチャートである。
【図４Ｂ】[0012]図４Ｂは、種々の実施形態に係る、コードキャッシュにおける変換後コードの位置を追跡する例示的な電子的構成要素制御のプロセスを示したフローチャートである。
【００１３】
【図５】[0013]図５は、種々の実施形態を含む例示的なコンピューティングシステムのブロック図である。
【詳細な説明】
【００１４】
[0014]以下の詳細な説明においては、具体的な方法の順序、構造、要素、及び接続等、多くの具体的詳細を示している。ただし、本発明の実施形態を実現するためにこれら及び他の具体的詳細を利用する必要はないことが了解されるものとする。他の状況においては、周知の構造、要素、又は接続の省略により、又はより詳細な説明をしないことにより、本明細書が無用に不明瞭化することのないようにする。
【００１５】
[0015]本明細書において、「一実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ又はａｎ  ｅｍｂｏｄｉｍｅｎｔ）」という言及は、当該実施形態と関連して説明する特定の特徴、構造、又は特性が本発明の少なくとも１つの実施形態に含まれることを示すものである。本明細書の種々の箇所において表現「一実施形態において」が登場する場合、これらは必ずしもすべてが同じ実施形態を表しておらず、他の実施形態を相互に除外する別個又は代替の実施形態も表していない。なお、特許請求の範囲に係る如何なる実施形態も、本開示のすべての「目的」又は「実施形態」を必ずしも含んでいない。
【００１６】
[0016]さらに、いくつかの実施形態によって示し得るものの他の実施形態によっては示し得ない種々の特徴を説明する。同様に、いくつかの実施形態の要件となり得るものの他の実施形態の要件とはなり得ない種々の要件を説明する。
【００１７】
[0017]以下の詳細な説明のいくつかの部分は、コンピュータメモリ内のデータビットの操作の手順、ステップ、論理ブロック、処理、及び他の記号的表現の観点で示している。これらの説明及び表現は、データ処理技術の当業者が他の当業者に対して自身の仕事の内容を最も効果的に伝えるために使用する手段である。本明細書においても一般的にも、手順、コンピュータ実行ステップ、論理ブロック、処理等は、所望の結果を導く首尾一貫した一連のステップ又は命令と考えられる。各ステップは、物理量の物理的操作を要するステップである。通例、これらの量は、必ずしもそうとは限らないが、コンピュータ可読記憶媒体の電気的又は磁気的な信号の形態を取り、コンピュータシステムにおいて格納、移動、組合せ、比較、或いは操作可能である。これらの信号は、主に一般的に使用されているという理由で、ビット、値、要素、記号、文字、用語、数字等と称するのが好都合な場合もあることが分かっている。
【００１８】
[0018]ただし、これらの用語及び類似する用語はすべて、然るべき物理量と関連付けられることになり、これらの量に適用された便利な標識に過ぎないことに留意する必要がある。以下の記述において特に明確な指定のない限りは、当然のことながら、本発明の全体において、「処理」、「アクセス」、「書き込み」、「格納」、「複製」等の用語を用いた記述は、コンピュータシステムのレジスタ、メモリ、及び他のコンピュータ可読媒体内で物理（電子）量として表されたデータを操作して、コンピュータシステムのメモリ、レジスタ、又はそのような他の情報記憶、伝送、若しくは表示装置内で同様に物理量として表されるその他のデータに変換するコンピュータシステム又は類似の電子演算装置の動作及び処理を表す。
【００１９】
[0019]以下、本開示の種々の実施形態を詳しく参照するが、その例を添付の図面に示している。さらに、以下の本開示の詳細な説明においては、本開示の十分な理解が得られるように、多くの具体的詳細を示している。ただし、本開示は、これらの具体的詳細なく実現可能であることが了解される。他の例では、本開示の態様が無用に不明瞭とならないように、周知の方法、手順、構成要素、及び回路を詳しく説明していない。
【００２０】
[0020]実施形態は、コードキャッシュに格納されたコードのトレースに対応するメモリ領域の変化を識別するように構成されている。実施形態は、コードキャッシュにおける変換後コードの位置を追跡するようにさらに構成されていてもよい。自己書き換えコードの検出及びコードキャッシュにおけるコードのトレースの置換が行われている間に性能が向上する。
【００２１】
[0021]図面は、種々の実施形態において用いられる例示的な構成要素を示している。図面には、具体的な構成要素を開示しているが、当然のことながら、このような構成要素は例示である。すなわち、その他様々な構成要素又は図面に列挙された構成要素の変形例を有するように実施形態が適合している。当然のことながら、図面中の構成要素は、提示した以外の構成要素と協働するようになっていてもよく、実施形態の目標の達成に、図面の構成要素のすべてが必要なわけではない。
【００２２】
[0022]図１は、種々の実施形態に係る、ゲスト命令ブロックがネイティブ変換ブロックに変換されるブロックベースの変換プロセスを示した図である。図１に示すように、複数のゲスト命令ブロック１０１が、対応する複数のネイティブ変換ブロック１０２に変換されることが示されている。
【００２３】
[0023]本発明の実施形態は、ゲスト命令ブロックの命令を対応するネイティブ変換ブロックの命令に変換することによって機能する。ブロック１０１はそれぞれ、ゲスト命令で構成されている。これらのゲスト命令は、多くの異なるゲスト命令アーキテクチャ（例えば、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ［登録商標］、ｘ８６、ＭＩＰＳ、ＳＰＡＲＣ等）に由来し得る。複数のゲスト命令ブロックを１つ又は複数の対応するネイティブ変換ブロックに変換可能である。この変換は、命令ごとに発生する。
【００２４】
[0024]図２は、種々の実施形態に係る、ゲスト命令ブロック及びその対応するネイティブ変換ブロックがキャッシュに格納される様態を示す例示的なハードウェア加速変換システム２００を示した図である。図２に示すように、変換ルックアサイドバッファ（ＣＬＢ）２０６の使用によって、ゲストブロックとネイティブブロック間のアドレスマッピングをキャッシングする。これにより、プロセッサ２０８から低遅延で利用できることを通じて、最も頻繁に生じるネイティブ変換ブロックへのアクセスが行われる。
【００２５】
[0025]図２の図は、頻繁に生じるネイティブ変換ブロックが高速低遅延キャッシュである変換ルックアサイドバッファ２０６内に維持される様態を示している。図２に示す構成要素は、ハードウェア加速変換処理を実装することによって、はるかに高レベルの性能を提供する。
【００２６】
[0026]ゲストフェッチ論理ユニット２０２は、システムメモリ２０１からゲスト命令をフェッチするハードウェアベースのゲスト命令フェッチユニットとして機能する。所与のアプリケーションのゲスト命令は、システムメモリ２０１内に存在する。プログラムの起動に際して、ハードウェアベースのゲストフェッチ論理ユニット２０２は、ゲストフェッチバッファ２０３へのゲスト命令のプリフェッチを開始する。ゲストフェッチバッファ２０７は、ゲスト命令を蓄積し、それらをゲスト命令ブロックとして組み立てる。これらのゲスト命令ブロックは、変換テーブル２０４の使用により、対応するネイティブ変換ブロックに変換される。変換後ネイティブ命令は、ネイティブ変換ブロックが完了するまで、ネイティブ変換バッファ２０５に蓄積される。そして、ネイティブ変換ブロックがネイティブキャッシュ２０７に移され、マッピングが変換ルックアサイドバッファ２０６に格納される。その後、ネイティブキャッシュ２０７の使用により、ネイティブ命令がプロセッサ２０８に供給されて実行される。一実施形態において、ゲストフェッチ論理ユニット２０２が実行する機能は、ゲストフェッチ論理状態機械により生成される。
【００２７】
[0027]このプロセスが続くと、変換ルックアサイドバッファ２０６は、ゲストブロックのネイティブブロックへのアドレスマッピングで満たされる。変換ルックアサイドバッファ２０６は、１つ又は複数のアルゴリズム（例えば、最も長い間使われていない等）を用いて、より頻繁に生じるブロックマッピングがバッファ内に保たれる一方、滅多に生じないブロックマッピングがバッファから追い出し（ｅｖｉｃｔ:エビクト）されるようにする。このように、変換ルックアサイドバッファ２０６には、高出現のネイティブ変換ブロックマッピングが格納される。また、ネイティブブロック内の十分に予測される極端なゲスト分岐は、対象とするブロックが単一のマッピングネイティブブロック内で結合されて、ＣＬＢ構造について低容量の効率に保っていることから、新たなマッピングをＣＬＢに挿入する必要がないことに留意されたい。さらに、一実施形態において、ＣＬＢ２０６は、ネイティブアドレスマッピングに対して終了ゲストのみを格納するように構造化される。この態様によっても、ＣＬＢの低容量効率が保たれる。
【００２８】
[0028]ゲストフェッチ論理２０２は、変換ルックアサイドバッファ２０６を調べて、ゲスト命令ブロックからのアドレスがネイティブ変換ブロックに変換済みであるか否かを判定する。上述の通り、本発明の実施形態は、変換処理のハードウェア加速を提供する。このため、ゲストフェッチ論理２０２は、システムメモリ２０１からゲストアドレスをフェッチして新たな変換を行うのに先立って、既存のネイティブ変換ブロックマッピングを変換ルックアサイドバッファ２０６で調べることになる。
【００２９】
[0029]一実施形態において、変換ルックアサイドバッファは、ゲストアドレス範囲又は個々のゲストアドレスによって索引付けされる。ゲストアドレス範囲は、ネイティブ変換ブロックに変換済みのゲスト命令ブロックのアドレスの範囲である。変換ルックアサイドバッファにより格納されたネイティブ変換ブロックマッピングは、各自の対応するゲスト命令ブロックの対応するゲストアドレス範囲によって索引付けされている。このため、ゲストフェッチ論理は、マッピングが変換ルックアサイドバッファ２０６に保持された変換後ブロックのゲストアドレス範囲又は個々のゲストアドレスに対してゲストアドレスを比較することにより、ネイティブキャッシュ２０７又は図３のコードキャッシュに格納されたものの中に既存のネイティブ変換ブロックが存在するか否かを判定することができる。既存のネイティブ変換ブロックがネイティブキャッシュ又はコードキャッシュのどちらかに存在する場合は、対応するネイティブ変換命令がこれらのキャッシュからプロセッサに直接転送される。
【００３０】
[0030]このように、高出現のゲスト命令ブロック（例えば、頻繁に実行されるゲスト命令ブロック）には、それぞれの対応する高出現のネイティブ変換ブロックマッピングが高速低遅延の変換ルックアサイドバッファ２０６内に維持されている。ブロックについては、適当な置換ポリシーによって、高出現のブロックマッピングが変換ルックアサイドバッファ内に留まるようにする。このため、ゲストフェッチ論理２０２は、要求されたゲストアドレスが変換済みであるか否かを即座に識別するとともに、変換済みのネイティブ命令をネイティブキャッシュ２０７に直接転送して、プロセッサ２０８により実行することができる。システムメモリへのトリップに４０〜５０サイクル以上を要する可能性があることから、これらの態様によって、多くのサイクルが節約される。これらの属性（例えば、上記のうちのＣＬＢ、ゲスト分岐シーケンス予測、ゲスト及びネイティブ分岐バッファ、ネイティブキャッシング）では、本発明の実施形態のハードウェア加速機能は、相当するネイティブアプリケーションのアプリケーション性能の８０％〜１００％以内のゲストアプリケーションのアプリケーション性能を実現可能である。
【００３１】
[0031]一実施形態において、ゲストフェッチ論理２０２は、プロセッサ２０８からのゲスト命令要求とは無関係に、ゲスト命令を絶えずプリフェッチして変換する。ネイティブ変換ブロックは、これら使用頻度の低いブロックのためのシステムメモリ２０１の変換バッファ「コードキャッシュ」内に蓄積可能である。また、変換ルックアサイドバッファ２０６は、使用頻度が最も高いマッピングを保持する。したがって、要求されたゲストアドレスが変換ルックアサイドバッファにおいてゲストアドレスにマッピングされていない場合、ゲストフェッチ論理は、システムメモリ２０１を確認することにより、システムメモリ２０１に格納されたネイティブ変換ブロックにそのゲストアドレスが対応しているか否かを判定することができる。
【００３２】
[0032]一実施形態において、変換ルックアサイドバッファ２０６は、キャッシュとして実装され、キャッシュコヒーレンシプロトコルを利用することにより、より高レベルのキャッシュ及びシステムメモリ２０１に格納されたはるかに大きな変換バッファとのコヒーレンシを維持する。変換ルックアサイドバッファ２０６に格納されたネイティブ命令マッピングは、高レベルのキャッシュ及びシステムメモリ２０１にも書き戻される。システムメモリへの書き戻しによって、コヒーレンシが維持される。このため、キャッシュ管理プロトコルの使用により、高出現のネイティブ変換ブロックマッピングが変換ルックアサイドバッファ２０６に格納され、低出現のネイティブ変換ブロックマッピングがシステムメモリ２０１に格納されるようにすることができる。このため、システムメモリ２０１には、はるかに大きな形態の変換バッファ２０６が存在する。
【００３３】
[0033]一実施形態において、図２のアーキテクチャは、多くの異なる命令アーキテクチャを入力として受け付け得る柔軟な変換プロセスを使用する仮想命令セットプロセッサ／コンピュータを実装する。このような仮想命令セットプロセッサにおいて、プロセッサのフロントエンドは、ハードウェア加速変換処理を活用してはるかに高いレベルの性能を提供しつつ、ソフトウェア制御が可能なように実装される。このような実装により、様々なゲストアーキテクチャの処理及び変換が可能である一方、それぞれのアーキテクチャがハードウェア加速の恩恵を受けて、はるかに高いレベルの性能を享受する。例示的なゲストアーキテクチャとしては、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ、ｘ８６、ＭＩＰＳ、ＳＰＡＲＣ等が挙げられる。一実施形態において、「ゲストアーキテクチャ」としては（例えば、ネイティブアプリケーション／マクロ動作による）ネイティブ命令が可能であり、変換プロセスは、最適化されたネイティブ命令（例えば、最適化されたネイティブ命令／マイクロ動作）を生成する。ソフトウェア制御されるフロントエンドは、プロセッサ上で実行されるアプリケーションの柔軟性を高くすることができる。上述の通り、ハードウェア加速によれば、ネイティブに近いハードウェア速度でゲストアプリケーションのゲスト命令を実行することができる。
コードキャッシュにおける変換後コードの追跡
【００３４】
[0034]バイナリトランスレーションを採用してゲスト（例えば、ソース）コードを、同一又は別の命令セットアーキテクチャ（ＩＳＡ）のネイティブ（例えば、ターゲット）コードに変換するアーキテクチャは、自己参照コード、自己書き換えコード、及び入出力装置によるＤＭＡを介した相互コード書き換えの問題に対処する必要がある。実施形態は、ゲストコードの真偽自己書き換え及びゲストコードのＤＭＡ書き換えを取り扱うように構成されている。
【００３５】
[0035]ゲストコードのＤＭＡ書き換えを伴う状況に対処する場合は、命令の変換及びコードキャッシュへの保持が行われたゲストページの書き込み保護が可能である。ただし、書き込み保護されたページは、ＩＯＭＭＵを採用していないシステムにおいて、コードキャッシュにおけるゲストコードのコピーがＤＭＡ装置による書き換えによって古くなることを防止できない。さらに、ゲストページの粒度での書き込み保護は、いずれかのコードが同じページのデータと混じり合った場合、又は大きなページがまばらに変換された場合に、性能上の大きな影響を及ぼす。
【００３６】
[0036]図３は、種々の実施形態に係る、システムのページサイズよりも小さな粒度でゲストコードを追跡するシステムの例示的な構成要素を示している。図３は、コードを実行し、自己書き換えコードを実行し、自己書き換えコードに応答してコードキャッシュを維持するための構成要素を示している。システム３００は、プロセッサ３０２及びメモリ３１０を具備する。なお、システム３００は、他の図面に存在する他の構成要素をさらに具備していてもよい。
【００３７】
[0037]プロセッサ３０２は、メモリ３１０に格納されたプログラム及び／又はコードを実行するように構成されている。プロセッサ３０２は、コードキャッシュ存在バッファ（ＰＣＢ：Ｐｒｅｓｅｎｔ  ｉｎ  Ｃｏｄｅ  Ｃａｃｈｅ  Ｂｕｆｆｅｒ）３０８、ＰＣＢ関連レジスタ３１４、キャッシュ３２０、自己書き換えコード（ＳＭＣ）検出モジュール３３０、及び実行機能モジュール３５０を具備する。メモリ３１０は、コードキャッシュ存在テーブル（ＰＣＴ：Ｐｒｅｓｅｎｔ  ｉｎ  Ｃｏｄｅ  Ｃａｃｈｅ  Ｔａｂｌｅ）３１２を含む。実行機能モジュール３５０は、命令をフェッチする１つ又は複数の処理コア及び機能を含み得る。
【００３８】
[0038]ＳＭＣ検出モジュール３３０は、自己書き換えコードによるコードの書き換えを検出及び／又は判定するように構成されている。いくつかの実施形態において、ＳＭＣ検出モジュール３３０は、実行機能モジュール３５０と通信を行うことにより、自己書き換えコードがいつそれ自体を書き換えるかを決定する。
【００３９】
[0039]実行機能モジュール３５０は、キャッシュ３２０及び／又はメモリ３１０からアクセスされたプログラム及び／又はコードをプロセッサ３０２が実行できるように構成されている。キャッシュ３２０は、コードキャッシュ３２２及びデータキャッシュ３２４を具備する。コードキャッシュ３２２は、メモリ３１０からのコードをキャッシングして、プロセッサ３０２の性能を向上させるように構成されている。データキャッシュ３２４は、メモリ３１０からのデータをキャッシングして、プロセッサ３０２の性能を向上させるように構成されている。
【００４０】
[0040]いくつかの実施形態においては、コードキャッシュ３２２とデータキャッシュ３２２が組み合わされることにより、キャッシュ３２０にコード及びデータがともに格納される。例えば、コード及びデータをキャッシュ３２０にインターリーブ可能である。
【００４１】
[0041]実施形態は、最小のページサイズよりも小さな粒度でゲストコードを追跡することにより、ゲストコードの追跡及び保護を改善するように構成されている。このより小さな粒度において、例えばＭＭＵのキャッシュラインのサイズは、変換されたゲストコードページの格納に依存不可能であってもよい。実施形態は、コードキャッシュ存在テーブル（ＰＣＴ）３１２を使用して、コードキャッシュ３２２における変換後コードのマッピング及び追跡を行う。格納又はＤＭＡ書き込みでは、その格納又はＤＭＡ書き込みのグローバルな可視化に先立って、ＰＣＴ３１２を参照する。
【００４２】
[0042]いくつかの実施形態においては、メモリ固有の構造であるＰＣＴ３１２へのアクセスと関連付けられたメモリ遅延を隠すため、ＰＣＴ３１２をより小さくキャッシングしたバージョンをプロセッサ３０２に格納するが、これはコードキャッシュ存在バッファ（ＰＣＢ）３０８として知られている。所与のページアドレス（ＰＡ）に格納又はＤＭＡ書き込みが発生した場合は、ＰＣＢ３０８においてアクセスが行われる。ＰＣＢ３０８におけるアクセスが不首尾に終わった場合は、ＰＣＴ３１２においてアクセスが行われる。ＰＣＢ３０８及び／又はＰＣＴ３１２の探索に際し、変換済みのキャッシュラインに対して格納が行われる場合は、イーガー法（ｅａｇｅｒ  ｍｅｔｈｏｄ）として既知の方法で格納を実行したスレッド／コアに関して例外(ｅｘｃｅｐｔｉｏｎ：エクセプション)を発生させる選択肢が与えられる。なお、スレッド／コアの例外対象ＩＤをシステムレジスタに格納することによって、格納を実行するスレッド／コアと異なるスレッド／コアに例外を誘導することができる。
【００４３】
[0043]いくつかの実施形態においては、レイジー法（ｌａｚｙ  ｍｅｔｈｏｄ）として既知の方法でゲストがＰＣＢ３０８及び／又はＰＣＴ３１２を分岐する場合、例外を後に発生させることができる。また、参照及び書き換えの両者に関して、如何なる例外も抑制可能である。
【００４４】
[0044]変換済みのページ（例えば、４Ｋページ）でのキャッシュラインに対する格納又はＤＭＡ書き込みに際しては、ＰＣＢ３０８においてエントリが追加され、当該エントリが書き換え済みとしてマーキングされる。いくつかの実施形態において、未変換のデータ又はゲストコードに対する格納については、格納ごとにＰＣＴ３１２に至ることはない。未変換のデータ又はゲストコードに対する各格納に際してのＰＣＢ３０８へのアクセスは、キャッシュ（例えば、Ｌ２キャッシュ）において各ページ（例えば、４Ｋページ）をマッピングするようにＰＣＢ３０８がサイズ規定されており、ＰＣＢ３０８がＰＣＴ３１２のヒット及びミス情報を当該ＰＣＢ３０８にキャッシングする場合、回避可能である。
【００４５】
[0045]コードキャッシュ３２２は、様々なサイズが可能である。例えば、ゲストコードのサイズは、最大６４ＭＢが可能である。いくつかの実施形態において、ゲストキャッシュラインは、その変換されたネイティブ命令をコードキャッシュ３２２に有しておらず、ゲストキャッシュラインが属するゲストページ（例えば、４Ｋページ）はＰＣＴ３１２にマッピングされていない。言い換えると、ゲストキャッシュラインは、当該ゲストキャッシュラインが属するゲストページがＰＣＴ３１２にマッピングされた状態で、その変換されたキャッシュラインをコードキャッシュ３２２に有することになる。例えば、コードキャッシュ３２２における６４バイトの各キャッシュラインは、一意のゲストコード４Ｋページに由来する可能性があり、ＰＣＴ３１２は百万個のエントリを有する（例えば、６４ＭＢ／６４Ｂ）。ＰＣＴ３１２は、コードキャッシュ３２２をいくつかの異なる形で編成できるようにサイズを規定することができる。表１は、（例えば、トランスレーションテーブルエントリ（ＴＴＥ）と類似し得る）コードキャッシュ存在テーブルエントリ（ＰＣＴＥ）として知られているＰＣＴ３１２のエントリのビットレイアウトを示している。
【表１】
2017516228.tif 000003
【００４６】
[0046]いくつかの実施形態においては、ＰＣＴ３１２の複数のＰＣＴＥが単一のキャッシュラインとしてグループ化されることにより、キャッシュラインのフェッチに応じた複数のＰＣＴＥのキャッシングが可能となる。例えば、４つの連続するＰＣＴＥを１つの６４Ｂキャッシュラインとしてグループ化可能であり、当該グループのフェッチに際しては、４つの連続するＰＣＴＥが単一のＬ２キャッシュラインとしてキャッシングされる。ＰＣＴ３１２は、ハッシュテーブル又はＮ−ｗａｙセットアソシアティブであるキャッシュとしてメモリ中に編成可能である。
【００４７】
[0047]いくつかの実施形態においては、ＣＬＢ／ＣＬＴへのエントリの挿入によりゲスト分岐に対して変換が可視化される前に、ソフトウェアによってエントリがＰＣＴ３１２に挿入される。ＰＣＴ３１２は、ＰＣＢ３０８からの書き戻しに際してハードウェアが書き換えビットを１に設定している状態で、ソフトウェアによって維持されるようになっていてもよい。ＰＣＴ３１２の更新は、ソフトウェア、ハードウェア、又はこれらの組合せによって取り扱うことができる。ＰＣＴ３１２の更新は、ハードウェアベースのキャッシュにキャッシング可能であり、あるスレッド／コアによる更新は、他のスレッド／コアに対して可視化される。いくつかの実施形態においては、ＰＣＢ３０８と関連付けられた論理がＰＣＴＥの書き換えビットを更新し（例えば、０から１への遷移）、ソフトウェアがＰＣＴＥの各ビットを更新可能である。ハードウェア及びソフトウェアの両者による同時更新によるデータ破損を回避するため、ＰＣＴＥの書き換えビットに対して、７つの高次ビットを予約済みとして保持可能である。これにより、同じキャッシュラインに対するソフトウェア更新との衝突なく、ハードウェアによる書き換えビットへのバイト書き込みが可能となる。
【００４８】
[0048]ＰＣＢ関連レジスタ３１４は、ＰＣＴタグレジスタ（ＰＣＴＴＲ）を含んでいてもよい。いくつかの実施形態において、トランスレータ又はコンバータは、ＰＣＴ３１２のタグ及びインデックスビットをハードウェア（例えば、プロセッサ３０２）に示すようにＰＣＴＴＲレジスタをプログラムする。表２は、ＰＣＴＴＲの例示的なフィールドを示している。
【表２】
2017516228.tif 000004
【００４９】
[0049]いくつかの実施形態において、ページアドレスマスク（ＰＡＭ）は、不連続な１を有さないように構成されている。ＰＡＭフィールドは、ＰＣＴＥタグに見出されるページアドレス値のマスクとして（例えば、ＰＣＴＥ．Ｔａｇ［３９：１２］及びＰＡＭ［３９：１２］として）働く。例えば、ＰＡＭ［３９：１２］＝＝０ｘＦＦＦ＿ＦＦ００の場合は、ＰＡＭ［１９：１２］がＰＣＴ３１２へのインデックスとして働く一方、ＰＡＭ［３９：２０］がＰＣＴ３１２におけるタグビットである。したがって、ＰＣＴＥをＰＣＴ３１２に配置する場合、コンバータは、ＰＣＴＥ．Ｔａｇ［１０１：８２］においてＰＡＭ［３９：２０］ビットをプログラムする。ＰＣＴＥ．Ｔａｇ［８１：７４］ビットについては、気に掛けなくてもよい。
【００５０】
[0050]ＰＣＢ関連レジスタ３１４は、ＰＣＴ構成レジスタ（ＰＣＴＣＲ）を含んでいてもよい。本明細書において、ＧＣＭは、例外を表す。表３は、ＰＣＴＣＲの例示的なフィールドを示している。
【表３】
2017516228.tif 000005
【００５１】
[0051]いくつかの実施形態において、ＳＥＴＶ及びＢＥＴＶが１である場合は、ＳＥＴ及びＢＥＴフィールドにおいてプログラムされたスレッド／コアに関して（ＰＣＴＥ．Ａフィールドに従って）例外を発生させる。それ以外の場合は、格納又は分岐の実行に至ったスレッド／コアに関して（ＰＣＴＥ．Ａフィールドに従って）例外を発生させる。いくつかの実施形態において、ＤＥＴＶフィールドは、常に１である。また、ＤＥＴフィールドにおいてプログラムされたスレッド／コアに関して、（ＰＣＴＥ．Ａフィールドに従って）例外を発生させる。ＳＥＶがゼロである場合は、格納に関する例外を発生させない。ＢＥＶがゼロである場合は、分岐に関する例外を発生させない。ＤＥＶがゼロである場合は、ＤＭＡアクセス（例えば、ＤＭＡ格納）に関する例外を発生させない。ＤＭＡＧＣＭＥＮがゼロである場合は、ＰＣＢ３０８及び／又はＰＣＴ３１２の探索の必要なく、論理によってＤＭＡアクセスを処理可能である。ＧＣＭＥＮがゼロである場合、（例えば、アレイ及び論理を含む）ＰＣＢ３０８は、電源を落とすことができる。
【００５２】
[0052]いくつかの実施形態において、ＰＣＢ３０８は、オンチップ（例えば、プロセッサ３０２の一部）であり、格納及びゲスト分岐に際してＰＣＴ３１２のＰＣＴＥをキャッシングするスレッド／コアに依存しない構造である。ＰＣＢ３０８は、拡張されたシステムレジスタを介して与えられる維持動作により、ソフトウェアに対して可視化される。
【００５３】
[0053]格納では、ＭＭＵから得られたページアドレスを用いることにより、ＰＣＢ３０８におけるエントリを探索する。アクセスがＰＣＢ３０８においてヒットし、１に設定されたＣ（変換後）ビットを、一致するキャッシュラインが有する場合、格納では、Ｍ０（Ｍｏｌｄ）が１となっていなければ、Ｍｎ（Ｍｎｅｗ）を１に設定することになる。
【００５４】
[0054]格納がＰＣＢ３０８においてミスである場合は、ＰＣＴウォーク（ＰＣＴＷ）の起動によって、ＰＣＴ３１２からＰＣＴＥをフェッチする。ＰＣＴＷの完了に際して、一致するＰＣＴＥが見つかっている場合は、当該ＰＣＴＥがＰＣＢ３０８に挿入され、そうでない場合は、Ｃ、Ｍｎｅｗ、及びＭｏｌｄビットが０に設定された状態で、新たなエントリがＰＣＢ３０８に作成される。ＰＣＴＥをＰＣＢ３０８に挿入するプロセスにおいて、置換対象のエントリがＭｎビットを１に設定している場合は、書き戻しが必要となり得る。
【００５５】
[0055]なお、負荷がＰＣＢ３０８と直接相互作用しなくてもよい。ただし、直近に負荷からアクセスを受けたページ（例えば、４Ｋページ）について、ＰＣＴＥをＰＣＢ３０８にフェッチすることにより、負荷と格納間の参照の局所性を活用することができる。
【００５６】
[0056]ＤＭＡ書き込み及び読み出しは、プロセッサ３０２のプロセッサコアを通して、メインメモリに送ることができる。そのようなＤＭＡ書き込みでは、ＰＣＢ３０８をスヌープして、Ｍビットを設定するとともに、任意選択でイーガー例外（ｅａｇｅｒ  ｅｘｃｅｐｔｉｏｎ）を生成することができる。
【００５７】
[0057]いくつかの実施形態において、ゲスト分岐では、（例えば、ＴＬＢ探索により得られるゲスト物理アドレスを用いて）ＣＬＢ及びＰＣＢ３０８のエントリを並列に探索する。ＣＬＢ、ＣＬＴ、ＰＣＢ３０８、及びＰＣＴ３１２間では、所与のゲスト物理アドレスが一貫しているものと予想される。例えば、エントリは、ＣＬＢ／ＣＬＴでヒットし且つＰＣＴ３１２でミスになることも、ＰＣＴ３１２でヒットするがＣビットが１に設定されていないことも不可能である。
【００５８】
[0058]ゲスト分岐がＰＣＢ３０８においてミスである場合は、ＣＬＢにおいてミスであったとしてもＰＣＴＷが起動される。
【００５９】
[0059]ＰＣＴＷの完了に際して、ＰＣＴＥがＰＣＢ３０８に挿入されるようになっていてもよい（そのことにより、例えば、同じ対象に対して、将来的なゲスト分岐の性能を向上可能となる）。ＰＣＴＥをＰＣＢ３０８に挿入するプロセスにおいて、置換対象のエントリがＭｎビットを１に設定している場合は、書き戻しが必要となり得る。
【００６０】
[0060]いくつかの実施形態において、ゲスト分岐は、ＰＣＴＥ．Ａビットと併せて、ＰＣＢ３０８のＰＣＴＥ．Ｍ［ｎｅｗ］及びＰＣＴＥ．Ｍ［ｏｌｄ］に依存するか、又は基づいていない。
【００６１】
[0061]実施形態は、分岐命令に対応するように構成されている。分岐命令は、ＰＣＢ３０８及び／又はＰＣＴ３１２の探索によって、変換がゲスト書き換えにより古くなっていることを確認する。分岐命令は、ＰＣＢ３０８及び／又はＰＣＴ３１２の探索に続いて、ＴＬＢ探索を起動する。例えば、探索の結果がＰＣＢ３０８においてミスである場合は、ＰＣＴＷの起動によって、ＰＣＴ３１２からＰＣＴＥをフェッチする。
【００６２】
[0062]ＰＣＴＷの完了に際して、ＰＣＴＥがＰＣＢ３０８に挿入されるようになっていてもよい（そのことにより、例えば、同じトレースに対して、将来的な分岐命令の性能を向上可能となる）。ＰＣＴＥをＰＣＢ３０８に挿入するプロセスにおいて、置換対象のエントリがＭｎビットを１に設定している場合は、書き戻しが必要となり得る。
【００６３】
[0063]いくつかの実施形態において、ＰＣＢ３０８は、ＰＣＴのヒット及びミス情報を格納する。これは、ほとんどの格納は未変換のデータ又はコードに対するものであり、このような格納はＰＣＴ３１２においてミスとなる事実に基づく。ＰＣＴ３１２においてミスになるものと予想されるこのようなほとんどの格納に関するＰＣＴ探索の実行を回避するため、ＰＣＢ３０８の使用により、ＰＣＴのヒット及びミス情報をキャッシングする。これにより、同じページ（例えば、４Ｋページ）に対する格納に応じた将来的なＰＣＴ探索を回避可能となる。
【００６４】
[0064]例えば、ＰＣＢ３０８は、Ｌ２キャッシュに固有の各４Ｋページ候補をマッピングするように構成されているため、Ｌ２キャッシュと同じｗａｙ数のキャッシュとして構成可能である（例えば、Ｌ２キャッシュの各ｗａｙには、最大３２個の４Ｋページが存在し得る）。
【００６５】
[0065]いくつかの実施形態において、ＰＣＢ３０８は、各ｗａｙに３２個のエントリを有する８−ｗａｙアソシアティブキャッシュである。各エントリは、４Ｋページについて、ＰＣＴのヒット及びミス情報を提供する。ＰＡ［１６：１２］ビットは、集合を選択するためのインデックスビットである。表４は、例示的なＰＣＢエントリ（ＰＣＢＥ）のレイアウトを示している。
【表４】
2017516228.tif 000006
ｙの値は、ＰＣＴＥ．Ｔａｇに見出されるものと同じにすることができる。最大４０ｂのアドレスに対応する大規模物理アドレス拡張（ＬＰＡＥ：Ｌａｒｇｅ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ  Ｅｘｔｅｎｓｉｏｎ）システムにおいて、ｙは３９である。
【００６６】
[0066]いくつかの実施形態において、ＰＣＢ３０８は、ソフトウェアによってシステムレジスタで維持可能である。ＰＣＢＥは、ＰＡに基づいて無効化可能である。例えば、変換が古くなっている場合、又は新たなトレースを作成する場合は、ソフトウェアによってＰＣＢのエントリを無効化可能である。ＰＣＢＥは、ＰＡに基づいて削除可能である。例えば、Ｍｏｌｄ及びＭｎｅｗが設定され、エントリが有効である場合は、ＰＣＢＥがメモリ３１０に書き込まれるとともに、ＰＣＴ３１２及びＰＣＢＥは有効状態を維持し続ける。この動作により、コンバータは、ＰＣＴ３１２のＰＡに対する任意の維持に先立って、ＰＣＴＥ上でＰＣＢＥと同期可能である。ＰＣＢＥは、ＰＡに基づいて削除及び無効化可能である。例えば、Ｍｏｌｄ及びＭｎｅｗが設定され、エントリが有効である場合は、ＰＣＢＥがメモリ３１０に書き込まれるとともに、ＰＣＢＥが無効化される。各ＰＣＢＥエントリは、初期化中又はコンバータによるコードキャッシュ３２２のクリア時に無効化可能である。なお、書き換えエントリは、メモリ３１０及びＰＣＴ３１２に書き戻さなくてもよい。各ＰＣＢＥは、削除及び無効化可能である。例えば、この動作によって、ＰＣＢ３０８の各書き換えエントリは、ＰＣＴ３１２に書き戻し可能となるため、ＰＣＢ３０８の各エントリが無効化される。
【００６７】
[0067]ＰＣＢ関連レジスタ３１４は、ＰＣＢ維持レジスタ（ＰＣＢＭＲ）を含んでいてもよい。表５は、ＰＣＢＭＲのフィールドを示している。いくつかの実施形態において、維持がインデックスベースである場合は、ＷＡＹビットと併せて、ＰＡ［１６：１２］がインデックスビットとして用いられる。
【表５】
2017516228.tif 000007
【００６８】
[0068]ＰＣＢ関連レジスタ３１４は、ＰＣＴベースアドレスレジスタ（ＰＣＴＢＡＲ）を含んでいてもよい。表６は、ＰＣＴＢＡＲのフィールドを示している。
【表６】
2017516228.tif 000008
【００６９】
[0069]ＰＣＢ関連レジスタ３１４は、ＧＣＭシンドローム０レジスタ（ＧＣＭＳ０Ｒ）を含んでいてもよい。表７は、ＧＣＭＳ０Ｒのフィールドを示している。
【表７】
2017516228.tif 000009
【００７０】
[0070]ＰＣＢ関連レジスタ３１４は、ＧＣＭシンドローム１レジスタ（ＧＣＭＳ１Ｒ）を含んでいてもよい。表８は、ＧＣＭＳ１Ｒのフィールドを示している。
【表８】
2017516228.tif 000010
【００７１】
[0071]実施形態は、多様な技術を用いて関連ケースを取り扱うように構成されており、そのような技術には、ゲスト命令分岐（ＧＩＢ）相互作用、ＰＣＴ維持、及びＰＣＢプリフェッチ等におけるトレースの中断が挙げられるが、これらに限定されない。
【００７２】
[0072]いくつかの実施形態においては、ゲスト分岐の使用により、コードキャッシュにおける古いコードを検出する。コンバータは、ゲスト分岐が生じるとトレースを中断し、単一のトレースを継続する。
【００７３】
[0073]いくつかの実施形態において、ＰＣＴ３１２は、負荷及び格納を用いてソフトウェアによって維持される。ＰＣＢ３０８の論理は、書き換えＰＣＢＥをＰＣＴ３０８に書き戻すことができる。
【００７４】
[0074]いくつかの実施形態において、各ＰＣＢＥは、４Ｋページにマッピングされる。より大きなゲストページサイズが採用される場合、ＰＣＢの論理は、ＰＣＢ３０８においてヒットする負荷又は格納の参照ごとに、後続の４ＫページのＰＣＴＥを順次プリフェッチ可能である。
【００７５】
[0075]図４を参照すると、フローチャート４００は、本明細書に記載のようにデータを保護する種々の実施形態により用いられる例示的な機能を示している。フローチャート４００には、具体的な機能ブロック（「ブロック」）を開示しているが、このようなステップは例示である。すなわち、その他様々なブロック又はフローチャート４００に列挙されたブロックの変形例を実行するように実施形態が適合している。当然のことながら、フローチャート４００のブロックは、提示と異なる順序で実行可能であり、また、フローチャート４００のブロックをすべて実行する必要はない。
【００７６】
[0076]図４Ａ及び図４Ｂは、種々の実施形態に係る、コードキャッシュにおける変換後コードの位置を追跡する例示的な電子的構成要素制御のプロセスを示したフローチャートである。図４Ａ及び図４Ｂは、いくつかの実施形態に関して、本明細書に記載のようにＰＣＢ及びＰＣＴを伴って変換後コードがコードキャッシュ中に存在するか否かを追跡するプロセス４００を示している。当然のことながら、プロセス４００は、ＰＣＢ及びＰＣＴに関して記述しているが、機能が類似する他のデータ構造及び構成で実行されるようになっていてもよい。
【００７７】
[0077]ブロック４０２においては、ゲスト命令にアクセスする。いくつかの実施形態においては、本明細書に記載のようにゲスト命令をネイティブ命令に変換するトランスレータによって、ゲスト命令にアクセスする。
【００７８】
[0078]ブロック４０４においては、ゲスト命令が分岐であるか否かを判定する。ゲスト命令が分岐命令でない場合は、ブロック４０６を実行する。ゲスト命令が分岐命令である場合は、ブロック４５０を実行する。
【００７９】
[0079]ブロック４０６においては、ゲスト命令がゲスト物理アドレスに対する格納であるか否かを判定する。ゲスト命令がゲスト物理アドレスに対する格納である場合は、ブロック４０８を実行する。ゲスト命令がゲスト物理アドレスに対する格納でない場合は、ブロック４４０を実行する。
【００８０】
[0080]ブロック４０８においては、ＰＣＢにミスがあるか否かを判定する。ＰＣＢのミスは、ゲスト命令のページ又はアドレスに基づいて判定可能である。ＰＣＢにミスがある場合は、ブロック４１０を実行する。ＰＣＢにミスがない場合は、ブロック４２２を実行する。
【００８１】
[0081]ブロック４１０においては、ＰＣＴにミスがあるか否かを判定する。ＰＣＴのミスは、ゲスト命令のページ又はアドレスに基づいて判定可能である。ＰＣＴにミスがある場合は、ブロック４２０を実行する。ＰＣＴにミスがない場合は、ブロック４１２を実行する。
【００８２】
[0082]ブロック４１２においては、エビクトするＰＣＢエントリを選択する。エビクトするＰＣＢエントリは、本明細書に記載のように、最も長い間使われていないか否かに基づいて選択可能である。
【００８３】
[0083]ブロック４１４においては、選択したＰＣＢエントリのエビクトを実行する。ブロック４１６においては、ＰＣＴからのキャッシュラインサイズの選択をフェッチする。本明細書に記載のように、キャッシュラインサイズの選択は、複数のＰＣＴエントリ（例えば、４つのＰＣＴＥ）を含み得る。
【００８４】
[0084]ブロック４１８においては、ＰＣＴからのエントリをＰＣＢ（例えば、エビクトしたＰＣＢエントリの位置）に格納する。
【００８５】
[0085]ブロック４２０においては、変換ゲスト命令を実行する。いくつかの実施形態において、コードキャッシュは、ゲスト命令の変換の一部として更新される。その後、次のゲスト命令について、ブロック４０２を実行するようにしてもよい。
【００８６】
[0086]ブロック４２２においては、本明細書に記載のように、当該位置が変換後コードを有するか否かを判定する。当該位置が変換後コードを有する場合は、ブロック４２４を実行する。当該位置が変換後コードを有さない場合は、ブロック４２０を実行する。
【００８７】
[0087]ブロック４２４においては、本明細書に記載のように、例外を発生させる。これは、イーガー法として知られている可能性がある。いくつかの実施形態においては、例外を発生させない。いくつかの実施形態において、例外を発生させる場合は、コード変換の停止によって、とりわけコードキャッシュの更新及び／又はメモリのアクセスを可能とする。
【００８８】
[0088]ブロック４２６においては、ゲスト命令におけるアドレスと関連付けられたコードキャッシュラインを無効化する。例えば、この無効化は、本明細書に記載のように、ＰＣＢ及び／又はＰＣＴが古くなっていることに基づいて書き換えを示すものとコードキャッシュラインが判定されることに基づくことができる。
【００８９】
[0089]ブロック４２８においては、ＰＣＴにミスがあるか否かを判定する。ＰＣＴのミスは、ゲスト命令のページ又はアドレスに基づいて判定可能である。ＰＣＴにミスがある場合は、ブロック４２０を実行する。ＰＣＴにミスがない場合は、ブロック４３０を実行する。
【００９０】
[0090]ブロック４３０においては、ゲスト命令を変換する。いくつかの実施形態において、コードキャッシュが、ゲスト命令の変換の一部として更新される。
【００９１】
[0091]ブロック４３２においては、本明細書に記載のように、ＰＣＢ及び／又はＰＣＴを更新することによって、格納命令の性能をゲスト物理アドレス及びコードキャッシュの関連する位置に反映させる。例えば、ＰＣＢ及び／又はＰＣＴの更新によって、要求がコードキャッシュラインを書き換えたことを反映させるようにしてもよい。その後、次のゲスト命令について、ブロック４０２を実行してもよい。
【００９２】
[0092]ブロック４４０においては、ゲスト命令に基づく変換命令を実行する。その後、次のゲスト命令について、ブロック４０２を実行してもよい。
【００９３】
[0093]図４Ｂを参照して、ブロック４５０においては、分岐命令をゲスト分岐命令で置換する。
【００９４】
[0094]ブロック４５２においては、本明細書に記載のように、当該位置が変換後コードを有するか否かを判定する。当該位置が変換後コードを有する場合は、ブロック４６０を実行する。当該位置が変換後コードを有さない場合は、ブロック４５４を実行する。
【００９５】
[0095]ブロック４５４においては、ゲスト分岐命令を（例えば、ネイティブ分岐命令に）変換する。ブロック４５６においては、変換ゲスト分岐命令の位置にあるコードを実行する。
【００９６】
[0096]ブロック４６０においては、ゲスト分岐命令の位置（例えば、アドレス）が書き換え済みであるか否かを判定する。ゲスト分岐命令の位置の内容が書き換え済みであるか否かは、ＰＣＢ及び／又はＰＣＴへのアクセスに基づいて判定される。当該位置の内容が書き換え済みである場合は、図４Ａのブロック４２４を実行する。これは、レイジー法として知られている可能性がある。当該位置の内容が書き換え済みでない場合は、ブロック４６２を実行する。
【００９７】
[0097]ブロック４６２においては、ゲスト分岐命令の位置にアクセスする。当該位置は、コードキャッシュ又はメモリからアクセス可能である。
【００９８】
[0098]ブロック４６４においては、ゲスト分岐命令の位置におけるコードを実行する。
【００９９】
[0099]図５は、種々の実施形態を含む例示的なコンピューティングシステム５００のブロック図である。コンピューティングシステム５００は、コンピュータ可読命令を実行可能な任意のシングル又はマルチプロセッサコンピュータ装置又はシステムを広く表す。コンピューティングシステム５００の例としては、ワークステーション、ラップトップ、クライアント側端末、サーバ、スーパーコンピュータ、分散コンピューティングシステム、携帯装置、又はその他任意のコンピューティングシステム若しくは装置等が挙げられるが、これらに限定されない。最も基本的な構成として、コンピューティングシステム５００は、少なくとも１つのプロセッサ５１４及びシステムメモリ５１６を具備していてもよい。
【０１００】
[00100]プロセッサ５１４は、データの処理又は命令の解釈及び実行が可能な任意の種類又は形態の処理ユニットを一般的に表す。特定の実施形態において、プロセッサ５１４は、ソフトウェアアプリケーション又はモジュールから命令を受信するようにしてもよい。これらの命令により、プロセッサ５１４は、本明細書に記載及び／又は図示する例示的な実施形態の１つ又は複数の機能を実行するようになっていてもよい。例えば、プロセッサ５１４は、単独で、又は他の要素との組合せにより、本明細書に記載の識別、判定、使用、実装、トランスレーション、追跡、受信、移動、及び提供の１つ又は複数を実行するか、及び／又は実行する手段であってもよい。また、プロセッサ５１４は、本明細書に記載及び／又は図示するその他任意のステップ、方法、又はプロセスを実行するか、及び／又は実行する手段であってもよい。
【０１０１】
[00101]システムメモリ５１６は、データ及び／又は他のコンピュータ可読命令を格納可能な任意の種類又は形態の揮発性又は不揮発性記憶装置又は媒体を一般的に表す。システムメモリ５１６の例としては、ＲＡＭ、ＲＯＭ、フラッシュメモリ、又はその他任意適当なメモリ装置が挙げられるが、これらに限定されない。必須ではないものの、特定の実施形態において、コンピューティングシステム５００は、揮発性メモリユニット（例えば、システムメモリ５１６等）及び不揮発性記憶装置（例えば、主記憶装置５３２等の両者を具備していてもよい。
【０１０２】
[00102]また、コンピューティングシステム５００は、プロセッサ５１４及びシステムメモリ５１６の他、１つ又は複数の構成要素又は要素を具備していてもよい。例えば、図５の実施形態において、コンピューティングシステム５００は、メモリコントローラ５１８、入出力コントローラ５２０、及び通信インターフェース５２２を具備しており、これらはそれぞれ、通信基盤５１２を介して相互接続されていてもよい。
【０１０３】
[00103]通信基盤５１２は、コンピュータ装置の１つ又は複数の構成要素間の通信を容易化可能な任意の種類又は形態の基盤を一般的に表す。通信基盤５１２の例としては、通信バス（ＩＳＡ、ＰＣＩ、ＰＣＩｅ、又は類似のバス等）及びネットワークが挙げられるが、これらに限定されない。一実施形態において、システム５１６は、専用のメモリバスを介して通信を行う。
【０１０４】
[00104]メモリコントローラ５１８は、メモリ若しくはデータの取り扱い又はコンピューティングシステム５００の１つ又は複数の構成要素間の通信の制御が可能な任意の種類又は形態の装置を一般的に表す。例えば、メモリコントローラ５１８は、通信基盤５１２を介して、プロセッサ５１４、システムメモリ５１６、及び入出力コントローラ５２０間の通信を制御するようにしてもよい。メモリコントローラは、単独で、又は他の要素との組合せにより、本明細書に記載の動作又は特徴の１つ又は複数を実行するか、及び／又は実行する手段であってもよい。
【０１０５】
[00105]入出力コントローラ５２０は、コンピュータ装置の入出力機能の調整及び／又は制御が可能な任意の種類又は形態のモジュールを一般的に表す。例えば、入出力コントローラ５２０は、プロセッサ５１４、システムメモリ５１６、通信インターフェース５２２、ディスプレイアダプタ５２６、入力インターフェース５３０、及び記憶インターフェース５３４等、コンピューティングシステム５００の１つ又は複数の要素間のデータの移動を制御又は容易化するようにしてもよい。入出力コントローラ５２０は、単独で、又は他の要素との組合せにより、本明細書に記載の動作のうちの１つ又は複数の実行のために使用されるか、及び／又はそれらを実行する手段であってもよい。また、入出力コントローラ５２０は、本開示に示す他の動作及び特徴の実行のために使用されるか、及び／又はそれらを実行する手段であってもよい。
【０１０６】
[00106]通信インターフェース５２２は、例示的なコンピューティングシステム５００と１つ又は複数の付加的な装置との間の通信を容易化可能な任意の種類又は形態の通信装置又はアダプタを広く表す。例えば、通信インターフェース５２２は、コンピューティングシステム５００と付加的なコンピューティングシステムを含むプライベート又はパブリックネットワークとの間の通信を容易化するようにしてもよい。通信インターフェース５２２の例としては、有線ネットワークインターフェース（ネットワークインターフェースカード等）、無線ネットワークインターフェース（無線ネットワークインターフェースカード等）、モデム、及びその他任意適当なインターフェースが挙げられるが、これらに限定されない。一実施形態において、通信インターフェース５２２は、インターネット等のネットワークへの直接リンクを介して、リモートサーバへの直接の接続を提供する。また、通信インターフェース５２２は、例えばローカルエリアネットワーク（イーサネット［登録商標］ネットワーク等）、パーソナルエリアネットワーク、電話若しくはケーブルネットワーク、携帯電話接続、衛星データ接続、又はその他任意適当な接続を通して、上記のような接続を間接的に提供するようにしてもよい。
【０１０７】
[00107]また、通信インターフェース５２２は、外部バス又は通信チャネルを介してコンピューティングシステム５００と１つ又は複数の付加的なネットワーク又は記憶装置との間の通信を容易化するように構成されたホストアダプタを表していてもよい。ホストアダプタの例としては、ＳＣＳＩホストアダプタ、ＵＳＢホストアダプタ、ＩＥＥＥ（電気電子技術者協会）５９４ホストアダプタ、シリアルアドバンストテクノロジーアタッチメント（ＳＡＴＡ）及び外部ＳＡＴＡ（ｅＳＡＴＡ）ホストアダプタ、アドバンストテクノロジーアタッチメント（ＡＴＡ）及び並列ＡＴＡ（ＰＡＴＡ）ホストアダプタ、ファイバチャネルインターフェースアダプタ、イーサネットアダプタ等が挙げられるが、これらに限定されない。また、通信インターフェース５２２によって、コンピューティングシステム５００は、分散コンピューティング又はリモートコンピューティングに関与可能であってもよい。例えば、通信インターフェース５２２は、リモート装置からの命令の受信又はリモート装置への命令の送信によって、これを実行するようにしてもよい。通信インターフェース５２２は、単独又は他の要素との組合せにより、本明細書に開示の動作のうちの１つ又は複数の実行及び／又は実行手段であってもよい。また、通信インターフェース５２２は、本開示に示す他の動作及び特徴の実行のために使用されるか、及び／又はそれらを実行する手段であってもよい。
【０１０８】
[00108]また、図５に示すように、コンピューティングシステム５００は、ディスプレイアダプタ５２６を介して通信基盤５１２に結合された少なくとも１つの表示装置５２４を具備していてもよい。表示装置５２４は、ディスプレイアダプタ５２６により転送された情報を視覚的に表示可能な任意の種類又は形態の装置を一般的に表す。同様に、ディスプレイアダプタ５２６は、通信基盤５１２（又は、当技術分野において既知のフレームバッファ）からグラフィック、テキスト、及び他のデータを転送して表示装置５２４に表示するように構成された任意の種類又は形態の装置を一般的に表す。
【０１０９】
[00109]また、図５に示すように、コンピューティングシステム５００は、入力インターフェース５３０を介して通信基盤５１２に結合された少なくとも１つの入力装置５２８を具備していてもよい。入力装置５２８は、コンピュータ又は人間が生成した入力をコンピューティングシステム５００に提供可能な任意の種類又は形態の入力装置を一般的に表す。入力装置５２８の例としては、キーボード、ポインティングデバイス、音声認識装置、又はその他任意の入力装置が挙げられるが、これらに限定されない。一実施形態において、入力装置５２８は、単独で、又は他の要素との組合せにより、本明細書に開示の動作のうちの１つ又は複数を実行するか、及び／又はそれらを実行する手段であってもよい。また、入力装置５２８は、本開示に示す他の動作及び特徴の実行のために使用されるか、及び／又はそれらを実行する手段であってもよい。
【０１１０】
[00110]また、図５に示すように、コンピューティングシステム５００は、記憶インターフェース５３４を介して通信基盤５１２に結合された主記憶装置５３２及びバックアップ記憶装置５３３を具備していてもよい。記憶装置５３２及び５３３は、データ及び／又は他のコンピュータ可読命令を格納可能な任意の種類又は形態の記憶装置又は媒体を一般的に表す。例えば、記憶装置５３２及び５３３は、磁気ディスクドライブ（例えば、いわゆるハードドライブ）、ソリッドステートディスク、フロッピー［登録商標］ディスクドライブ、磁気テープドライブ、光ディスクドライブ、フラッシュドライブ等であってもよい。記憶インターフェース５３４は、コンピューティングシステム５００の記憶装置５３２及び５３３と他の構成要素との間でデータを移動させる任意の種類又は形態のインターフェース又は装置を一般的に表す。
【０１１１】
[00111]引き続き図５を参照して、記憶装置５３２及び５３３は、コンピュータソフトウェア、データ、又は他のコンピュータ可読情報を格納するように構成されたリムーバブル記憶ユニットに対する読み出し及び／又は書き込みを行うように構成されていてもよい。適当なリムーバブル記憶ユニットの例としては、フロッピーディスク、磁気テープ、光ディスク、フラッシュメモリ装置等が挙げられるが、これらに限定されない。また、記憶装置５３２及び５３３は、コンピューティングシステム５００へのコンピュータソフトウェア、データ、又は他のコンピュータ可読命令のロードを可能とする他の類似構造又は装置を具備していてもよい。例えば、記憶装置５３２及び５３３は、ソフトウェア、データ、又は他のコンピュータ可読情報の読み出し及び書き込みを行うように構成されていてもよい。また、記憶装置５３２及び５３３は、コンピューティングシステム５００の一部であってもよいし、他のインターフェースシステムを通してアクセスされる別個の装置であってもよい。
【０１１２】
[00112]記憶装置５３２及び５３３は、単独又は他の要素との組合せにより、本明細書に開示の動作のうちの１つ又は複数の実行のために使用されるか、及び／又はそれらを実行する手段であってもよい。また、記憶装置５３２及び５３３は、本開示に示す他の動作及び特徴の実行のために使用されるか、及び／又はそれらを実行する手段であってもよい。
【０１１３】
[00113]コンピューティングシステム５００には、その他多くの装置又はサブシステムが接続されていてもよい。逆に、図５に示す構成要素及び装置は、本明細書に記載の実施形態を実現するためにすべてが存在する必要はない。また、上記言及した装置及びサブシステムは、図５と異なる方法で相互接続されていてもよい。また、コンピューティングシステム５００は、任意数のソフトウェア、ファームウェア、及び／又はハードウェア構成を採用していてもよい。例えば、本明細書に開示の例示的な実施形態は、コンピュータ可読媒体上でコンピュータプログラム（コンピュータソフトウェア、ソフトウェアアプリケーション、コンピュータ可読命令、又はコンピュータ制御論理とも称する）としてコード化されていてもよい。
【０１１４】
[00114]コンピューティングシステム５００には、コンピュータプログラムを含むコンピュータ可読媒体がロードされてもよい。そして、コンピュータ可読媒体に格納されたコンピュータプログラムの全体又は一部がシステムメモリ５１６並びに／又は記憶装置５３２及び５３３の様々な部分に格納されてもよい。プロセッサ５１４により実行された場合、コンピューティングシステム５００にロードされたコンピュータプログラムにより、プロセッサ５１４は、本明細書に記載及び／又は図示する例示的な実施形態の機能を実行するか、及び／又は実行する手段となってもよい。この追加又は代替として、本明細書に記載及び／又は図示する例示的な実施形態は、ファームウェア及び／又はハードウェアとして実装されていてもよい。例えば、コンピューティングシステム５００は、本明細書に開示の実施形態のうちの１つ又は複数を実装するように構成されたＡＳＩＣとして構成されていてもよい。
【０１１５】
[00115]上記開示内容は、具体的なブロック図、フローチャート、及び例を用いて種々の実施形態を示しているが、本明細書に記載及び／又は図示するブロック図の構成要素、フローチャートのステップ、動作、及び／又は構成要素はそれぞれ、幅広いハードウェア、ソフトウェア、又はファームウェア（又は、これらの任意の組合せ）構成を用いて個別的及び／又は集合的に実装されていてもよい。また、他の構成要素に含まれる構成要素の如何なる開示についても、例示と考えるべきである。それは、その他多くのアーキテクチャの実装によって、同じ機能を実現できるからである。
【０１１６】
[00116]説明を目的とする以上の記述は、具体的な実施形態を参照して記載している。ただし、上記の例示的な記述は、包括的なものでもなければ、開示の厳密な形態に開示内容を制限するものでもない。上記の教示内容を考慮して、多くの改良及び変形が可能である。上記実施形態は、開示内容の原理及びその実際の適用を最も良く説明することにより、想定される特定用途に適合可能となるように他の当業者が開示内容及び種々の改良を伴う種々の実施形態を最も良く利用できるように選定及び記載している。
【０１１７】
[00117]以上、本開示に係る実施形態を説明した。本開示は、特定の実施形態において説明したが、当然のことながら、このような実施形態によって制限されるのではなく、以下の特許請求の範囲に従って解釈されるものとする。
【図１】
2017516228.tif 000011
【図２】
2017516228.tif 000012
【図３】
2017516228.tif 000013
【図４Ａ】
2017516228.tif 000014
【図４Ｂ】
2017516228.tif 000015
【図５】
2017516228.tif 000016
【国際調査報告】
2017516228.tif 000017
2017516228.tif 000018
2017516228.tif 000019