(57)【要約】【課題】  コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム、コンピュータ・システム、及びコンピュータ実施方法を提供する。【解決手段】  複数のアーキテクチャ上のレジスタを復元するためのロード要求を取得する。ロード要求を取得することに基づいて、複数のアーキテクチャ上のレジスタのうちの１つ又は複数のアーキテクチャ上のレジスタを復元する。復元することは、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、１つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている１つ又は複数の物理レジスタを、１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットの１つ又は複数の物理レジスタと置換する。【選択図】      図７
2020518895.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
方法を実行するための命令を含み、前記方法は、
複数のアーキテクチャ上のレジスタを復元するためのロード要求を取得することと、
前記ロード要求を取得することに基づいて、前記複数のアーキテクチャ上のレジスタのうちの１つ又は複数のアーキテクチャ上のレジスタを復元することと、
を含み、前記復元することは、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、前記１つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている１つ又は複数の物理レジスタを、前記１つ又は複数のアーキテクチャ上のレジスタに対応する前記スナップショットの１つ又は複数の物理レジスタと置換する、コンピュータ・プログラム。
【請求項２】
前記方法は、
前記ロード要求を取得することに基づいて、前記１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断することと、
前記スナップショットが利用可能であることを示すとの前記判断に基づいて、前記スナップショットを用いて前記復元を実行することと、
をさらに含む、請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記方法は、
前記１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの前記判断に基づいて、値をメモリから前記１つ又は複数のアーキテクチャ上のレジスタにロードすることにより、前記１つ又は複数のアーキテクチャ上のレジスタを復元することをさらに含む、請求項２に記載のコンピュータ・プログラム。
【請求項４】
前記判断することは、スナップショット・スタックを用いて、前記１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することを含む、請求項２に記載のコンピュータ・プログラム。
【請求項５】
前記スナップショット・スタックは複数のエントリを含み、前記スナップショット・スタックのエントリは、前記スナップショットを識別するスナップショット識別子を含む、請求項４に記載のコンピュータ・プログラム。
【請求項６】
前記スナップショット・スタックの前記エントリは、前記１つ又は複数のアーキテクチャ上のレジスタの内容のメモリ内のアドレス、前記スナップショットと関連した前記１つ又は複数のアーキテクチャ上のレジスタの表示、及び前記スナップショットが有効かどうかを示す有効性インジケータから成る群から選択される少なくとも１つを含む付加的な情報を含む、請求項５に記載のコンピュータ・プログラム。
【請求項７】
前記方法は、
前記スナップショットを作成し、前記１つ又は複数の物理レジスタの前記１つ又は複数のアーキテクチャ上のレジスタへのマッピングを保存することをさらに含む、請求項１に記載のコンピュータ・プログラム。
【請求項８】
前記スナップショットを作成することは、前記１つ又は複数のアーキテクチャ上のレジスタの保存を要求する保存要求を取得することに基づいて実行される、請求項７に記載のコンピュータ・プログラム。
【請求項９】
前記ロード要求は、ｌｏａｄ  ｍｕｌｔｉｐｌｅ命令を含み、前記保存要求は、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ命令を含む、請求項８に記載のコンピュータ・プログラム。
【請求項１０】
前記１つ又は複数のアーキテクチャ上のレジスタは、メモリから前記１つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく復元される、請求項１に記載のコンピュータ・プログラム。
【請求項１１】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムは、
メモリと、
前記メモリと通信するプロセッサと、
を含み、前記コンピュータ・システムは、方法を実行するように構成され、前記方法は、
複数のアーキテクチャ上のレジスタを復元するためのロード要求を取得することと、
前記ロード要求を取得することに基づいて、前記複数のアーキテクチャ上のレジスタのうちの１つ又は複数のアーキテクチャ上のレジスタを復元することと、
を含み、前記復元することは、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、前記１つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている１つ又は複数の物理レジスタを、前記１つ又は複数のアーキテクチャ上のレジスタに対応する前記スナップショットの１つ又は複数の物理レジスタと置換する、コンピュータ・システム。
【請求項１２】
前記方法は、
前記ロード要求を取得することに基づいて、前記１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断することと、
前記スナップショットが利用可能であることを示すとの前記判断に基づいて、前記スナップショットを用いて前記復元を実行することと、
をさらに含む、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記方法は、
前記１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの前記判断に基づいて、値をメモリから前記１つ又は複数のアーキテクチャ上のレジスタにロードすることにより、前記１つ又は複数のアーキテクチャ上のレジスタを復元することをさらに含む、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記判断することは、スナップショット・スタックを用いて、前記１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することを含む、請求項１２に記載のコンピュータ・システム。
【請求項１５】
前記１つ又は複数のアーキテクチャ上のレジスタは、メモリから前記１つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく復元される、請求項１１に記載のコンピュータ・システム。
【請求項１６】
コンピューティング環境内の処理を容易にするためのコンピュータ実施方法であって、前記コンピュータ実施方法は、
プロセッサにより、複数のアーキテクチャ上のレジスタを復元するためのロード要求を取得することと、
前記ロード要求を取得することに基づいて、前記複数のアーキテクチャ上のレジスタのうちの１つ又は複数のアーキテクチャ上のレジスタを復元することと、
を含み、前記復元することは、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、前記１つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている１つ又は複数の物理レジスタを、前記１つ又は複数のアーキテクチャ上のレジスタに対応する前記スナップショットの１つ又は複数の物理レジスタと置換する、コンピュータ実施方法。
【請求項１７】
前記ロード要求を取得することに基づいて、前記１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断することと、
前記スナップショットが利用可能であることを示すとの前記判断に基づいて、前記スナップショットを用いて前記復元を実行することと、
をさらに含む、請求項１６に記載のコンピュータ実施方法。
【請求項１８】
前記１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの前記判断に基づいて、値をメモリから前記１つ又は複数のアーキテクチャ上のレジスタにロードすることにより、前記１つ又は複数のアーキテクチャ上のレジスタを復元することをさらに含む、請求項１７に記載のコンピュータ実施方法。
【請求項１９】
前記判断することは、スナップショット・スタックを用いて、前記１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することを含む、請求項１７に記載のコンピュータ実施方法。
【請求項２０】
前記１つ又は複数のアーキテクチャ上のレジスタは、メモリから前記１つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく復元される、請求項１６に記載のコンピュータ実施方法。
【発明の詳細な説明】
【技術分野】
【０００１】
１つ又は複数の態様は、一般に、コンピューティング環境内の処理に関し、特定的には、こうした処理を容易にすることに関する。
【背景技術】
【０００２】
コンピュータ・プログラムは、多くの場合、印刷、種々の数学演算等などの特定の演算を提供するために関数を呼び出す。関数を呼び出すプログラムは、呼び出し元（caller）と呼ばれ、呼び出された関数は、呼び出し先（callee）と呼ばれる。これらの関数の多くは、その正味の静的長さ（すなわち、関数は多くの命令を含まない）、又はその短い動的長さ（例えば、早期終了条件（early-out condition））のいずれかに起因して、極めて短い。
【０００３】
短い関数は、その他の関数と同様に、修正した呼び出し先保存レジスタ（callee-saved register）を関数のプロローグの一部としてスタック上に格納し、それらをエピローグの一部として復元する。スタックは、コール・スタックとも呼ばれ、コンピュータ・プログラムのアクティブな関数についての情報を格納するために、コンピュータ・プログラムにより使用される。同様に、こうした関数に対する呼び出し元は、値が関数呼び出しにわたってライブである場合には、呼び出し元保存レジスタ（caller-saved registers）を関数の呼び出しシーケンスの一部としてスタック上に保存し、戻り時にそれらを復元する。これらのレジスタの保存は、関数を呼び出す著しいコストである。
【０００４】
さらに、短い関数の場合、復元は、保存が完了した後にしか行うことができず、その発生は保証されないので、これらのレジスタを保存し、次に復元することに関連した費用はさらに大きい。これらの条件の下で、ｌｏａｄ−ｈｉｔ−ｓｔｏｒｅ及びｆｏｒｗａｒｄｉｎｇ  ｐｅｎａｌｔｉｅｓのような付加的なペナルティを招くことがある。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」、ＩＢＭ（登録商標）発行、Ｎｏ．ＳＡ２２−７８３２−１０、２０１５年３月
【非特許文献２】「Ｐｏｗｅｒ  ＩＳＡ（商標）  Ｖｅｒｓｉｏｎ  ２．０７Ｂ」，インターナショナル・ビジネス・マシーンズ・コーポレーション、２０１５年４月９日
【発明の概要】
【発明が解決しようとする課題】
【０００６】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム、コンピュータ・システム、及びコンピュータ実施方法を提供する。
【課題を解決するための手段】
【０００７】
コンピューティング環境環境内での処理を容易にするためのコンピュータ・プログラムの提供によって、従来技術の欠点が克服され、付加的な利点がもたらされる。コンピュータ・プログラム製品は、処理回路により読み取り可能であり、方法を実行するための命令を格納するストレージ媒体を含む。この方法は、例えば、プロセッサにより、複数のアーキテクチャ上のレジスタ（architected register）を復元するためのロード要求を取得することと、ロード要求を取得することに基づいて、複数のアーキテクチャ上のレジスタのうちの１つ又は複数のアーキテクチャ上のレジスタを復元することと、を含む。復元することは、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、１つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている１つ又は複数の物理レジスタを、１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットの１つ又は複数の物理レジスタと置換する。１つ又は複数のアーキテクチャ上のレジスタを復元するためにスナップショットを用いて、復元を実行するためのメモリ・アクセスを回避することにより、性能を改善させることができる。
【０００８】
一態様において、ロード要求を取得することに基づいて、１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断する。スナップショットが利用可能であることを示すとの判断に基づいて、スナップショットを用いて復元を実行する。
【０００９】
更に別の態様において、１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの判断に基づいて、値をメモリから１つ又は複数のアーキテクチャ上のレジスタにロードすることにより、１つ又は複数のアーキテクチャ上のレジスタを復元する。
【００１０】
一例として、判断することは、スナップショット・スタックを用いて、１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することを含む。
【００１１】
スナップショット・スタックは、例えば、複数のエントリを含む。一例において、スナップショット・スタックのエントリは、スナップショットを識別するスナップショット識別子を含む。更に別の例において、スナップショット・スタックのエントリは、１つ又は複数のアーキテクチャ上のレジスタの内容のメモリ内のアドレス、スナップショットと関連した１つ又は複数のアーキテクチャ上のレジスタの表示、及びスナップショットが有効かどうかを示す有効性インジケータから成る群から選択される少なくとも１つを含む付加的な情報を含む。
【００１２】
更に別の態様において、スナップショットを作成し、１つ又は複数の物理レジスタの１つ又は複数のアーキテクチャ上のレジスタへのマッピングを保存する。
【００１３】
一例において、スナップショットを作成することは、１つ又は複数のアーキテクチャ上のレジスタの保存を要求する保存要求を取得することに基づいて実行される。
例として、ロード要求は、ｌｏａｄ  ｍｕｌｔｉｐｌｅ（複数ロード）命令を含み、保存要求は、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ（複数ストア）命令を含む。
【００１４】
さらに、一実施形態において、１つ又は複数のアーキテクチャ上のレジスタは、メモリから１つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく復元される。
【００１５】
１つ又は複数の態様に関する方法及びシステムもまた、本明細書で説明され、特許請求される。さらに、１つ又は複数の態様に関するサービスもまた、本明細書で説明され、特許請求することができる。
本明細書で説明される技術を通して、さらなる特徴及び利点が実現される。他の実施形態及び態様は、本明細書で詳細に説明され、特許請求された態様の一部とみなされる。
【００１６】
１つ又は複数の態様は、本明細書の結論部において具体的に指摘され、明確に特許請求される。１つ又は複数の態様の上記及び他の目的、特徴、並びに利点は、添付図面と関連して用いられる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１７】
【図１】本発明の１つ又は複数の態様を組み込み、用いるためのコンピューティング環境の１つの例を示す。
【図２】本発明の１つ又は複数の態様による、図１のプロセッサのさらなる詳細を示す。
【図３】本発明の１つ又は複数の態様に従って用いられる命令実行パイプラインの一例のさらなる詳細を示す。
【図４】本発明の１つ又は複数の態様による、図１のプロセッサのさらなる詳細を示す。
【図５】本発明の１つ又は複数の態様による、呼び出し元保存レジスタを格納する一例を示す。
【図６】本発明の１つ又は複数の態様による、呼び出し先保存レジスタを格納する一例を示す。
【図７】本発明の１つ又は複数の態様による、アーキテクチャ上のレジスタの物理レジスタへのマッピングの一例を示す。
【図８】本発明の１つ又は複数の態様による、バルク保存（bulk save）要求と関連した処理の一例を示す。
【図９】本発明の１つ又は複数の態様による、バルク復元（bulk restore）要求と関連した処理の一例を示す。
【図１０】本発明の１つ又は複数の態様に従って用いられる、レジスタ・リネーム・テーブル、複数のスナップショット、及び物理リネーム・ファイルの一例を示す。
【図１１】本発明の１つ又は複数の態様に従って用いられる、レジスタ・リネーム・テーブル、複数のスナップショット、及び物理リネーム・ファイルのさらなる例を示す。
【図１２】本発明の１つ又は複数の態様による、スナップショットをロールバックする一例を図形的に示す。
【図１３】本発明の１つ又は複数の態様による、スナップショットをロールバックする別の例を図形的に示す。
【図１４】本発明の１つ又は複数の態様に従って用いられるスナップショット・スタックの一例を示す。
【図１５】本発明の１つ又は複数の態様による、Ｓｐｉｌｌ  Ｍｕｌｔｉｐｌｅ（複数スピル）命令の一例を示す。
【図１６】本発明の１つ又は複数の態様による、Ｒｅｌｏａｄ  Ｍｕｌｔｉｐｌｅ（複数再ロード）命令の一例を示す。
【図１７】本発明の１つ又は複数の態様による、バルク復元要求と関連した処理の別の例を示す。
【図１８】本発明の１つ又は複数の態様による、バルク復元要求と関連した処理のさらに別の例を示す。
【図１９】本発明の１つ又は複数の態様による、スナップショットを再使用する一例を図形的に示す。
【図２０】本発明の１つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。
【図２１】本発明の１つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。
【図２２】本発明の１つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。
【図２３】本発明の１つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。
【図２４】本発明の１つ又は複数の態様による、復元スナップショットの管理と関連した処理の例を示す。
【図２５】本発明の１つ又は複数の態様による、復旧（recovery）及び／又は復元（restoration）のための共有スナップショットを用いて復旧を実行する一例を示す。
【図２６】本発明の１つ又は複数の態様による、メモリ変更をチェックし、随意的に復旧する実施形態を示す。
【図２７】本発明の１つ又は複数の態様による、メモリ変更をチェックし、随意的に復旧する実施形態を示す。
【図２８】本発明の１つ又は複数の態様による、メモリ変更をチェックし、随意的に復旧する実施形態を示す。
【図２９】本発明の１つ又は複数の態様による、一致しないＳｐｉｌｌ  Ｍｕｌｔｉｐｌｅ／Ｒｅｌｏａｄ  Ｍｕｌｔｉｐｌｅの対と関連した処理の一例を示す。
【図３０】本発明の１つ又は複数の態様による、関連したインジケータを有するデータ・キャッシュ内のエントリの一例を示す。
【図３１】本発明の１つ又は複数の態様による、図３０に示されるインジケータと関連した処理の例を示す。
【図３２】本発明の１つ又は複数の態様による、図３０に示されるインジケータと関連した処理の例を示す。
【図３３】本発明の１つ又は複数の態様による、図３０に示されるインジケータと関連した処理の例を示す。
【図３４】本発明の１つ又は複数の態様による、レジスタ復元と関連した処理の例を示す。
【図３５】本発明の１つ又は複数の態様による、レジスタ復元と関連した処理の例を示す。
【図３６】本発明の１つ又は複数の態様による、トランザクション・メモリ及び復元と関連した処理の例を示す。
【図３７】本発明の１つ又は複数の態様による、Ｔｒａｎｓａｃｔｉｏｎ  Ｂｅｇｉｎ（トランザクション開始）命令の一例を示す。
【図３８】本発明の１つ又は複数の態様による、トランザクション・メモリ及び復元と関連した処理の態様を示す。
【図３９】本発明の１つ又は複数の態様による、トランザクション・メモリ及び復元と関連した処理の態様を示す。
【図４０】本発明の１つ又は複数の態様による、トランザクション・メモリ及び復元と関連した処理の態様を示す。
【図４１】本発明の１つ又は複数の態様による、メモリ変更を追跡するために用いられる技術の例を示す。
【図４２】本発明の１つ又は複数の態様による、メモリ変更を追跡するために用いられる技術の例を示す。
【図４３】本発明の１つ又は複数の態様による、メモリ変更を追跡するために用いられる技術の例を示す。
【図４４】本発明の１つ又は複数の態様による、メモリ変更を追跡するために用いられる技術の例を示す。
【図４５】本発明の１つ又は複数の態様による、復元要求を処理する一例を示す。
【図４６】本発明の１つ又は複数の態様による、コンテキスト・スイッチと関連した処理の例を示す。
【図４７】本発明の１つ又は複数の態様による、コンテキスト・スイッチと関連した処理の例を示す。
【図４８】本発明の１つ又は複数の態様による、コンテキスト・スイッチと関連した処理の例を示す。
【図４９】本発明の１つ又は複数の態様による、Ｔｒａｎｓａｃｔｉｏｎ  Ｂｅｇｉｎ命令の実行に基づくスナップショットの管理と関連した処理の一例を示す。
【図５０】本発明の１つ又は複数の態様による、レジスタ保存表示と関連した処理の一例を示す。
【図５１】本発明の１つ又は複数の態様による、ｃｏａｌｅｓｃｉｎｇ  ｓｔｏｒｅ／ｌｏａｄ（ストア／ロード合体）命令と関連した処理の例を示す。
【図５２】本発明の１つ又は複数の態様による、ｃｏａｌｅｓｃｉｎｇ  ｓｔｏｒｅ／ｌｏａｄ命令と関連した処理の例を示す。
【図５３】本発明の１つ又は複数の態様に従って用いられる、ライトバック論理を含むストア・キューの一例を示す。
【図５４】本発明の１つ又は複数の態様による、ライトバック論理の処理の例を示す。
【図５５】本発明の１つ又は複数の態様による、ライトバック論理の処理の例を示す。
【図５６】本発明の１つ又は複数の態様による、復旧バッファの一例を示す。
【図５７】本発明の１つ又は複数の態様による、復旧バッファを含むプロセッサの一例を示す。
【図５８】本発明の１つ又は複数の態様による、レジスタ割り当て要求と関連した処理の例を示す。
【図５９】本発明の１つ又は複数の態様による、レジスタ割り当て要求と関連した処理の例を示す。
【図６０】本発明の１つ又は複数の態様による、コンピューティング環境内の処理を容易にする態様の一例を示す。
【図６１】本発明の１つ又は複数の態様による、コンピューティング環境内の処理を容易にする態様の一例を示す。
【図６２】本発明の１つ又は複数の態様を組み込み、用いるためのコンピューティング環境の別の例を示す。
【図６３】図６２のメモリのさらなる詳細を示す。
【図６４】クラウド・コンピューティング環境の一実施形態を示す。
【図６５】抽象化モデル層の一例を示す。
【発明を実施するための形態】
【００１８】
１つ又は複数の態様によると、関数呼び出し時に保存及び復元を最適化するための機能が提供され、それにより、処理が改善され、それと関連したコストが低下する。一例において、この機能は、保存／復元のためにレジスタ・リネーム（register renaming）を用いる。
【００１９】
図１を参照して、本発明の１つ又は複数の態様を組み込、用いるためのコンピューティング環境の一実施形態が説明される。一例において、コンピューティング環境は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいている。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの１つの実施形態は、その全体が引用により本明細書に組み込まれる非特許文献１に記載されている。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅは、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
【００２０】
別の例において、コンピューティング環境は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅに基づいている。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅの１つの実施形態は、その全体が引用により本明細書に組み込まれる非特許文献２に記載されている。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅは、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
【００２１】
コンピューティング環境は、これに限定されるものではないが、Ｉｎｔｅｌ  ｘ８６アーキテクチャを含む他のアーキテクチャにも基づき得る。他の例も存在する。
【００２２】
図１に示されるように、例えば、コンピューティング環境１００は、例えば汎用コンピューティング・デバイスの形で示されるコンピュータ・システム１０２を含む。コンピュータ・システム１０２は、これらに限定されるものではないが、１つ又は複数のバス及び／又は他の接続１１０を介して互いに結合された、１つ又は複数のプロセッサ又は処理ユニット１０４（例えば、中央処理ユニット（ＣＰＵ））、メモリ１０６（例として、メインメモリ又はストレージと呼ばれる）、及び１つ又は複数の入力／出力（Ｉ／Ｏ）インターフェース１０８を含む。
【００２３】
バス１１０は、メモリ・バス又はメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、及び種々のバス・アーキテクチャのいずれかを用いるプロセッサ又はローカル・バスを含む、幾つかのタイプのバス構造のうちのいずれかの１つ又は複数を表す。限定ではなく例としては、このようなアーキテクチャは、業界標準アーキテクチャ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ、ＩＳＡ）バス、マイクロ・チャネル・アーキテクチャ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ、ＭＣＡ）、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカル・バス、及びＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）を含む。
【００２４】
メモリ１０６は、例えば、プロセッサ１０４のローカル・キャッシュ１２２に結合され得る、共有キャッシュのようなキャッシュ１２０を含むことができる。さらに、メモリ１０６は、１つ又は複数のプログラム又はアプリケーション１３０、オペレーティング・システム１３２、及び１つ又は複数のコンピュータ可読プログラム命令１３４を含むことができる。コンピュータ可読プログラム命令１３４は、本発明の態様の実施形態の機能を実行するように構成することができる。
【００２５】
コンピュータ・システム１０２は、例えばＩ／Ｏインターフェース１０８を介して、１つ又は複数の外部デバイス１４０、１つ又は複数のネットワーク・インターフェース１４２、及び／又は１つ又は複数のデータ・ストレージ・デバイス１４４と通信することもできる。例示的な外部デバイスとして、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディスプレイ等が挙げられる。ネットワーク・インターフェース１４２は、コンピュータ・システム１０２が、ローカル・エリア・ネットワーク（ＬＡＮ）、汎用広域ネットワーク（ＷＡＮ）、及び／又は公衆ネットワーク（例えば、インターネット）などの１つ又は複数のネットワークと通信することを可能にし、他のコンピューティング・デバイス又はシステムとの通信を提供する。
【００２６】
データ・ストレージ・デバイス１４４は、１つ又は複数のプログラム１４６、１つ又は複数のコンピュータ可読プログラム命令１４８、及び／又はデータ等を格納することができる。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成することができる。
【００２７】
コンピュータ・システム１０２は、取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体を含むこと、及び／又はそれに結合することができる。例えば、コンピュータ・システム１０２は、取り外し不能の不揮発性磁気媒体（典型的には「ハード・ドライブ」と呼ばれる）、取り外し可能な不揮発性磁気ディスク（例えば、「フロッピー・ディスク」）との間の読み出し及び書き込みのための磁気ディスク・ドライブ、及び／又はＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又は他の光媒体などの取り外し可能な不揮発性光ディスクとの間の読み出し及び書き込みのための光ディスク・ドライブを含むこと、及び／又はこれらに結合することができる。コンピュータ・システム１０２と共に他のハードウェア及び／又はソフトウェア・コンポーネントを使用できることを理解されたい。例として、これらに限定されるものではないが、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部のディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、及びデータ・アーカイブ・ストレージ・システム等が含まれる。
【００２８】
コンピュータ・システム１０２は、多数の他の汎用又は専用コンピューティング・システム環境又は構成で動作することができる。コンピュータ・システム１０２と共に使用するのに好適であり得る周知のコンピューティング・システム、環境、及び／又は構成の例として、これらに限定されるものではないが、パーソナル・コンピュータ（ＰＣ）システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式又はラップトップ型デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能民生電子機器、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、及び、上述のシステム若しくはデバイスのいずれかを含む分散型クラウド・コンピューティング環境等が含まれる。
【００２９】
図２を参照して、プロセッサ１０４の１つの例に関するさらなる詳細が説明される。プロセッサ１０４は、命令を実行するために用いられる複数の機能コンポーネントを含む。これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント１５０；フェッチされた命令をデコードし、デコードされた命令のオペランドを取得するための命令デコード・ユニット１５２；デコードされた命令を実行するための命令実行コンポーネント１５４；必要に応じて、命令実行のためにメモリにアクセスするためのメモリ・アクセス・コンポーネント１５６；及び実行した命令の結果を提供するためのライトバック・コンポーネント１６０を含む。本発明の態様によると、これらのコンポーネントの１つ又は複数を用いて、１つ又は複数のレジスタ復元操作及び／又は命令１６６、及び／又はそれと関連した他の操作／命令を実行することができる。
【００３０】
一実施形態において、プロセッサ１０４は、機能コンポーネントの１つ又は複数により用いられる１つ又は複数のレジスタ１６８も含む。プロセッサ１０４は、本明細書で与えられる例と比べて、付加的な、より少ない及び／又は他のコンポーネントを含むことができる。
【００３１】
図３を参照して、プロセッサ１０４の実行パイプラインに関するさらなる詳細が説明される。パイプラインの種々の処理段階が示され、本明細書で説明されるが、本発明の態様の趣旨から逸脱することなく、付加的な、より少ない及び／又は他の段階を用い得ることが理解されるであろう。
【００３２】
図３を参照すると、一実施形態において、命令が命令キューからフェッチされ（１７０）、命令の分岐予測１７２及び／又はデコード１７４を実行することができる。デコードされた命令を、一緒に処理される命令のグループ１７６に付加することができる。グループ化した命令は、あらゆる依存を判断し、リソースを割り当て、命令／操作のグループを適切な発行キューにディスパッチするマッパー（mapper）１７８に与えられる。例として、分岐、ロード／ストア、浮動小数点、固定小数点、ベクトル等を含む異なるタイプの実行ユニットに対して１つ又は複数の発行キューがある。発行段階１８０の間、命令／操作は、適切な実行ユニットに発行される。そのソースを取り出すために、あらゆるレジスタを読み取り（１８２）、実行段階１８４の間、命令／操作を実行する。示されるように、実行は、例として、分岐、ロード（ＬＤ）又はストア（ＳＴ）、固定小数点演算（ＦＸ）、浮動小数点演算（ＦＰ）、又はベクトル演算（ＶＸ）に対するものであり得る。ライトバック段階１８６の間、あらゆる結果が適切なレジスタに書き込まれる。その後、命令は完了する（１８８）。割り込み（interruption）又はフラッシュ１９０がある場合、処理は、命令フェッチ１７０に戻り得る。
【００３３】
さらに、本発明の１つ又は複数の態様によると、レジスタの保存／復元の際に１つ又は複数の態様において用いられるレジスタ・リネーム・ユニット１９２が、デコード・ユニットに結合される。
【００３４】
図４を参照して、プロセッサに関する付加的な詳細が説明される。一例において、プロセッサ１０４のようなプロセッサは、例として、予測ハードウェア、レジスタ、キャッシュ、デコーダ、命令シーケンス・ユニット、及び命令実行ユニットを含むことができるパイプライン・プロセッサ（pipelined processor）である。予測ハードウェアは、例えば、ローカル分岐履歴テーブル（ＢＨＴ）１０５ａ、グローバル分岐履歴テーブル（ＢＨＴ）１０５ｂ、及びブローバル・セレクタ１０５ｃを含む。予測ハードウェアは、次の命令フェッチのためのアドレスを有する命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）１０７を通じてアクセスされる。
【００３５】
同じアドレスが、命令キャッシュ１０９にも与えられ、これらは「フェッチ・グループ」と呼ばれる複数の命令をフェッチすることができる。ディレクトリ１１１が、命令キャッシュ１０９と関連付けられる。
【００３６】
キャッシュ及び予測ハードウェアは、同じアドレスでほぼ同時にアクセスされる。予測ハードウェアが、フェッチ・グループ内の命令に使用可能な予測情報を有する場合、その予測は命令シーケンス・ユニット（ＩＳＵ）１１３に転送され、次に、実行のために命令を実行ユニットに発する。予測を用いて、分岐ターゲット計算１１５及び分岐ターゲット予測ハードウェア（リンク・レジスタ予測スタック１１７ａ及びカウント・レジスタ・スタック１１７ｂ等）と共にＩＦＡＲ１０７を更新することができる。予測情報が利用可能でないが、１つ又は複数の命令デコーダ１１９がフェッチ・グループ内に分岐命令を見出した場合、そのフェッチ・グループに対して、予測が作成される。予測分岐は、分岐情報キュー（ＢＩＱ）１２５内など、予測ハードウェアないに格納され、ＩＳＵ１１３に転送される。
【００３７】
分岐実行ユニット（ＢＲＵ）１２１は、ＩＳＵ１１３によってこれに発行された命令に応答して動作する。ＢＲＵ１２１は、条件レジスタ（ＣＲ）ファイル１２３に対する読み取りアクセス権を有する。分岐実行ユニット１２１は、分岐予測の成功を判断するために、分岐情報キュー１２５内の分岐走査論理により格納される情報に対するさらなるアクセス権を有し、マイクロプロセッサによりサポートされる１つ又は複数のスレッドに対応する命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）１０７に動作可能に結合される。少なくとも１つの実施形態によると、ＢＩＱエントリが、識別子、例えば分岐タグ（ＢＴＡＧ）と関連付けられ、これにより識別される。ＢＩＱエントリと関連した分岐が完了すると、そのようにマーク付けされる。ＢＩＱエントリは、キュー内に維持され、それらが完了した分岐と関連した情報を含むものとしてマーク付けされるとき、最も古いキュー・エントリ（単数又は複数）が連続的に割り当て解除される。ＢＲＵ１２１は、ＢＲＵ１２１が分岐予測ミス（misprediction）を発見すると、予測器の更新を引き起こすようにさらに動作可能に結合される。
【００３８】
命令が実行されると、ＢＲＵ１２１は、予測が間違っているかどうかを検知する。予測が間違っている場合、予測は更新される。この目的のため、プロセッサは、予測器更新論理１２７も含む。予測器更新論理１２７は、分岐実行ユニット１２１からの更新表示に応答しており、ローカルＢＨＴ１０５ａ、グローバルＢＨＴ１０５ｂ及びグローバル・セレクタ１０５ｃの１つ又は複数におけるアレイ・エントリを更新するように構成される。予測器ハードウェア１０５ａ、１０５ｂ及び１０５ｃは、命令フェッチ及び予測演算により用いられる読み取りポートとは異なる書き込みポートを有することができ、又は単一の読み取り／書き込みポートを共有することができる。予測器更新論理１２７はさらに、リンク・スタック１１７ａ及びカウント・レジスタ・スタック１１７ｂに動作可能に結合することができる。
【００３９】
ここで条件レジスタ・ファイル（ＣＲＦ）１２３を参照すると、ＣＲＦ１２３は、ＢＲＵ１２１により読み取りアクセス可能であり、これらに限定されるものではないが、固定小数点ユニット（ＦＸＵ）１４１、浮動小数点ユニット（ＦＰＵ）１４３、及びベクトル・マルチメディア延長ユニット（ＶＭＸＵ）１４５を含む実行ユニットにより書き込まれ得る。条件レジスタ論理実行ユニット（ＣＲＬ実行）１４７（ＣＲＵとも呼ばれる）及び専用レジスタ（ＳＰＲ）処理論理１４９は、条件レジスタ・ファイル（ＣＲＦ）１２３に対する読み取り及び書き込みアクセス権を有する。ＣＲＵ１４７は、ＣＲＦファイル１２３内に格納された条件レジスタに対して論理演算を実行する。ＦＸＵ１４１は、ＣＲＦ１２３に対する書き込み更新を実行することができる。
【００４０】
プロセッサ１０４は、ロード／ストア・ユニット１５１、及び種々のマルチプレクサ１５３及びバッファ１５５、並びにアドレス変換テーブル１５７、及び他の回路をさらに含む。
【００４１】
情報を格納するためにハードウェア・レジスタを用いるプログラム（アプリケーションとも呼ばれる）が、プロセッサ１０４内で実行されている。例えば、関数、サブルーチン、又は他のタイプのルーチンのようなルーチンを呼び出すプログラムが、呼び出し元により用いられるレジスタの保存と、呼び出し先からの戻り時のそれらのレジスタの復元とを担当する。同様に以下のコードに示されるように、呼び出し先は、それが使用するレジスタの保存／復元を担当する。
【００４２】
最初に、以下は、レジスタのセットを保存し、後にそれらを復元する呼び出し元の例示的なコードである。
【数１】
2020518895.tif 000003
【００４３】
上記の呼び出し元のコードにおいて、図５を参照すると、呼び出し元保存レジスタが格納される（ステップ２００）。例えば、これは、例えば、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ命令（ＳＴＭＧ）を用いる呼び出し元保存レジスタのバルク保存（bulk save）を含む。随意的に、関数パラメータをロードし（例えば、ロード命令ＬＧＦＩを用いて）（ステップ２０２）、例えば分岐命令（ＢＲＡＳＬ）を用いて、関数呼び出しを実行する（ステップ２０４）（すなわち、呼び出し先が呼び出される）。関数から戻ると、呼び出し元保存レジスタを復元する（ステップ２０６）。一例において、これは、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令（ＬＭＧ）を用いるバルク復元（bulk restore）である。（本明細書で用いられる場合、バルク保存又はバルク・ストアは、１つ又は複数のレジスタのストアを含み、バルク復元又はバルク再ロードは、１つ又は複数のレジスタのロードを含む。一例において、バルク保存（ストア）及びバルク復元（再ロード）は、関数呼び出しに関連したレジスタの保存／復元に関連する。特定の例として、バルク保存（ストア）及びバルク復元（再ロード）は、プログラム・スタック上に値を保存し、プログラム・スタックから、値を格納した同じレジスタに値を復元することに関連する。）
【００４４】
Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ命令の一例において、命令により指定される汎用レジスタＲ１で始まり、命令により指定される汎用レジスタＲ３で終了する、汎用レジスタのセットのビット位置の内容が、ストレージ領域内に、第２のオペランド・アドレスにより指定される記憶位置（例えば、Ｂ２により指定されるレジスタの内容＋Ｄ２の内容により与えられ、Ｂ２及びＤ２の両方とも命令により指定される）から始まり、必要な数の記憶位置を通じて配置される。一例において、汎用レジスタのビット位置３２〜６３は、第２オペランド・アドレスから始まる一連の４バイトのフィールドに格納される。汎用レジスタは、汎用レジスタＲ１で始まり、汎用レジスタＲ３まで（このレジスタを含む）そのレジスタ番号の昇順に格納され、汎用レジスタ０は、汎用レジスタ１５の後に続く。
【００４５】
Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令の一例において、命令により指定される汎用レジスタＲ１から始まり、命令により指定される汎用レジスタＲ３で終了する、汎用レジスタのセットのビット位置が、ストレージから、第２オペランド・アドレスにより指定される記憶位置（例えば、Ｂ２により指定されるレジスタの内容＋Ｄ２の内容により与えられ、Ｂ２及びＤ２の両方とも命令により指定される）から始まり、必要な数の記憶位置を通じてロードされる。一例において、汎用レジスタのビット位置３２〜６３は、第２オペランド・アドレスから始まる一連の４バイトのフィールドからロードされ、ビット０〜３１は、変更されないままである。
【００４６】
次に、以下は、レジスタのセットを保存し、後にそれらを復元する呼び出し先の例示的なコードである。
【数２】
2020518895.tif 000004
【００４７】
上記の呼び出し先のコードにおいて、図６を参照すると、呼び出し先保存レジスタが格納される（ステップ２２０）。これは、例えば、プロローグにおいて行われ、例えばＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ命令（例えば、ＳＴＭＧ）を介する呼び出し先保存レジスタのバルク保存を含む。次に、処理は、戻りアドレスをもとの呼び出し元にロードすることを含む、処理が、関数本体の一部として実行される（ステップ２２２）。その後、呼び出し先保存レジスタが復元される（ステップ２２４）。一例において、これは、エピローグにおいて行われ、例えばＬｏａｄ  Ｍｕｌｔｉｐｌｅ命令（ＬＭＧ）を介する呼び出し先保存レジスタのバルク復元を含む。
【００４８】
図３に示されるように、保存／復元されるレジスタは、物理レジスタにマッピングされるアーキテクチャ上のレジスタ（architected register）又は論理レジスタとすることができる。図３を参照すると、例えば、アーキテクチャ上のレジスタ３００を参照する命令に基づいて、そのアーキテクチャ上のレジスタが、物理レジスタ３０２と関連付けられる。特に、レジスタ・リネーム論理を用いて、テーブル（又は、他のデータ構造）を検索し、どの物理レジスタがアーキテクチャ上のレジスタに対応するかを判断する。例えば、読み取りアドレスの場合、アーキテクチャ上のレジスタは、テーブル内に見出された物理レジスタと置き換えられ、書き込みアクセスの場合、フリーリストから、新しい物理レジスタが割り当てられる。
【００４９】
１つ又は複数の態様によると、リネーム論理は、プロセッサの１つ又は複数のユニットを要することがある。例えば、プロセッサ・デコード・ユニットは、命令を受け取り；例えば、アーキテクチャ上のレジスタのセットを、フリーリストから取得した物理レジスタに関連付けるルックアップ・テーブルを更新することにより、ターゲット命令をリネームし；ソース命令についてのレジスタ・リネーム・テーブルを更新し；命令又は命令のグループがロールバックをトリガできる場合（例えば、命令が例外を発生させ得るため、又は予測を誤る可能性がある分岐命令のため）、ロールバック・スナップショット（例えば、レジスタ・リネーム・テーブルのコピー）を撮り；例えば例外ハンドラ若しくは新しい分岐ターゲットのためにロールバックを要求するイベントに対応するスナップショットを復元する、又は再実行を引き起こすように適合されたロールバック論理を含む。
【００５０】
さらに、リネーム論理は、デコード・ユニットが受け取った物理レジスタ番号によりアクセスされる物理レジスタ・ファイルを含む実行論理；命令を実行し、結果を指定された物理レジスタに書き込むための論理；及び、例えば分岐予測ミス又は例外の場合には、成功裡の完了又はロールバックを示すための論理を含むことができる。
【００５１】
さらに、命令が完了したことを示す報告を受け取り、スナップショットをそれ以上必要ないものとしてマーク付けし、物理レジスタをフリーリストに付加し、イン・オーダー方式（in-order）のプログラム・カウンタ又は他のイン・オーダー方式の状態を更新する命令完了ユニットが用いられる。
【００５２】
汎用レジスタを用いる例に関して、呼び出し元保存レジスタ及び呼び出し先保存レジスタの保存及び復元が説明されてきたが、浮動小数点レジスタ、ベクトル・レジスタ、ベクトル・スカラー・レジスタ、条件レジスタ、制御レジスタ、及び／又は専用レジスタのような他のレジスタ・タイプ、並びに他のタイプのレジスタを、呼び出し元関数、呼び出し先関数、又はその両方のいずれかにより保存し、復元することができる。
【００５３】
他の付加的な及び／又はより少ないユニット及び／又は論理を用いることもできる。
【００５４】
呼び出し元及び呼び出し先のいずれか又は両方におけるレジスタの保存及び復元は、それがメモリの使用を要するので、コストがかかる。従って、本発明の態様によると、このコストを減らすための機能が与えられる。この機能は、例えば、レジスタ・スナップショットを用いて、レジスタを保存及び復元することを含み、それにより、少なくとも１つの態様において、レジスタを復元する（そして随意的に保存する）際のメモリの使用が回避される。
【００５５】
一例において、バルク・レジスタのストアが認識されると、レジスタ状態の少なくとも一部（例えば、レジスタ・リネーム・マップ、他のレジスタ復元情報、又は他の完全なレジスタ状態の少なくとも一部）のスナップショットを撮る。図８を参照すると、バルク・ストアの要求を取得する（例えば、受け取る、決定する、提供する、取り出す、有する等）（ステップ４００）。バルク・ストアは、例えば、複数のレジスタを格納するＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ命令とすることができる。バルク保存が実行され、複数のレジスタの内容がメモリに書き込まれる（ステップ４０２）。それに基づいて、スナップショットが作成される（ステップ４０４）。(別の実施形態においては、メモリへの格納は実行されない。)
【００５６】
スナップショットの一例が、図１０に示される。図示されるように、物理レジスタ５０２ａのアーキテクチャ上のレジスタ５０４へのマッピングのスナップショット５００ａが撮られる。この例において、物理レジスタ４５が、アーキテクチャ上のレジスタ０に割り当てられ、物理レジスタ８８がアーキテクチャ上のレジスタ１１に割り当てられ、物理レジスタ９６が、アーキテクチャ上のレジスタ１２に割り当てられ、物理レジスタ６７が、アーキテクチャ上のレジスタ１３に割り当てられ、物理レジスタ３８が、アーキテクチャ上のレジスタ１４に割り当てられ、そして、物理レジスタ２２が、アーキテクチャ上のレジスタ１５に割り当てられる。これらの物理レジスタのアーキテクチャ上のレジスタへのマッピングは、スナップショット５００ａによりキャプチャされる。
【００５７】
物理レジスタ・ファイル５０６は、各物理レジスタ５０２について、そのレジスタ内に格納される値５０５を示す。
【００５８】
一実施形態において、スナップショット識別子５０８（例えば、ＩＤ４）が、スナップショット５００ａに割り当てられる。さらに、一例において、同じく複数のより古いスナップショット５１０（例えば、スナップショット２及び３）がある場合もある。
【００５９】
上述のように、バルク保存が実行されることを認識することに基づいて、バルク保存に関係するレジスタのスナップショットが撮られる（例えば、スナップショット５００ａ）。次に、処理は続行し、図１１に示されるように、新しい物理レジスタ５０２ｂが割り当てられ、関数が実行される。
【００６０】
その後、関数が完了すると、スナップショットを復旧することができる。図９を参照して、バルク復元処理の一例が説明される。最初に、一例において、バルク復元要求を取得する（例えば、受け取る、決定する、提供する、有する、取り出す等）（ステップ４５０）。バルク復元要求は、例えば、複数のレジスタをロードするＬｏａｄ  Ｍｕｌｔｉｐｌｅ命令とすることができる。対応するスナップショットが利用可能かどうかについて判断する（問い合わせ４５２）。対応するスナップショットが利用不能である場合、メモリから値を再ロードする（ステップ４５４）。しかしながら、対応するスナップショットが利用可能である場合、バルク復元がバルク保存と一致するかどうかについて、さらに判断する（問い合わせ４５６）。つまり、復元されるレジスタが、保存された同じレジスタであるか。それらが同じレジスタである場合、スナップショットを復元する（ステップ４５８）。付加的に、一例において、復元されたスナップショットを検証する（ステップ４６０）。これは、図１２〜図１３に図形的に示される。
【００６１】
図１２に示されるように、物理レジスタのマッピングは、スナップショットを復旧し５２０、復元したスナップショットをもたらすことにより、復元される。復元されたスナップショット５３０は、前に保存された同じアーキテクチャ上のレジスタにマッピングされる。従って、図１１〜図１２を参照すると、ｒ０に割り当てられたｐ１２３は、ｐ４５と置き換えられ、ｒ１１に割り当てられたｐ２３は、ｐ８８と置き換えられ、ｒ１２に割り当てられたｐ５８は、ｐ９６と置き換えられ、ｒ１３に割り当てられたｐ６７は、ｐ６７と置き換えられ（又は、置き換えは実行されない）、ｒ１４に割り当てられたｐ２４５は、ｐ３８と置き換えられ、ｒ１５割り当てられたｐ１４は、ｐ２２と置き換えられる。
【００６２】
一例において、図１３に示されるように、レジスタのサブセットのみが復旧される。例えば、アーキテクチャ上のレジスタ１１〜１５が復旧されるが、アーキテクチャ上のレジスタ０は復旧されない。
【００６３】
上述のように、スナップショットを復旧する一実施形態において、対応するスナップショットがあるかどうかについて判断する。どのスナップショットが所定の保存／復元の対に対応するかを判断するために、多数の技術を用いることができる。１つの技術は、撮られた最後のスナップショットを記憶することを含む。例えば、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅに基づいて、スナップショットを撮り、そのスナップショットの識別子を記憶し、スナップショットを利用可能なものとしてマーク付けする。次に、別のｓｔｏｒｅ  ｍｕｌｔｉｐｌｅが実行される場合、別のスナップショットを撮り、スナップショットｉｄをインクリメントし、その識別子を記憶する等。さらに、バルク復元に基づいて、最後のバルク保存のスナップショットｉｄを復旧し、スナップショットを利用不能なものとしてマーク付けする。
【００６４】
単一のスナップショットの追跡は、簡略化した設計をもたらし、リーフ関数（leaf function）（すなわち、それらの関数は別の関数を呼び出さない）に対して迅速なスナップショット・ベースのレジスタ復元を可能にする。リーフ関数は、全ての関数の相当な割合（一般的には、約５０％）であり、それらは最も短い関数の間でもあり、従って、保存及び復元処理は、こうした関数のための実行時間のかなりの割合を表し、それは、スナップショットを用いて低減される。
【００６５】
別の技術は、多数のスナップショットを記憶できるスナップショット・スタックを保持することである。図１４に示されるように、スタックの先頭（top-of-stack、ＴＯＳ）ポインタ６０４により示されるように、スナップショット・スタック６００は、最新のスナップショットが上部にある状態で撮られた各スナップショットについて１つの、１つ又は複数のスナップショット識別子（スナップショットＩＤ）６０２を含む。スナップショットＩＤに加えて、１つ又は複数の実施形態において、スナップショット・スタックは、随意的に、付加的な情報を含むことができる。例えば、レジスタの値は、スナップショットが失われた場合（ステップ４５４）、又はスナップショットが最新の値を含むかどうかを確認する必要がある場合（ステップ４６０）を含む多数の状況において、メモリに保存される（ステップ４０２）。従って、付加的な情報は、スナップショットが・レジスタの値（単数又は複数）がメモリ内に格納される場所のアドレス又はアドレス範囲６０６を含むことができる。
【００６６】
さらに、別の実施形態において、スナップショットは、スナップショット内に含まれるレジスタの全てについて有効ではないが、代わりにレジスタのサブセットについてのみ有効であることがある。従って、一例において、スナップショット・スタックは、各スナップショットについて、スナップショットについて有効であるレジスタを提供する始端レジスタの表示６０８及び終端レジスタの表示６１０を含むことができる。
【００６７】
さらに、有効インジケータ６１２を随意的に提供して、スナップショットが有効かどうかを示すことができる。他の実施形態においては、他の付加的な及び／又はより少ない情報を提供することができる。
【００６８】
スナップショット・スタックを管理するために、スタック先頭ポインタが調整される。例えば、スナップショットの作成に基づいて、新しいエントリがスタックに付加され、スタック先頭ポインタがインクリメントされる。さらに、スナップショットを復元するとき、スタック先頭ポインタに対応するエントリがスタックから除去され、スタック先頭ポインタがデクリメントされる。例えば、分岐予測ミス又は例外がある場合、複数のエントリが除去されることがあり、スタック先頭ポインタが適切に調整される。
【００６９】
対応するＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ／Ｌｏａｄ  Ｍｕｌｔｉｐｌｅの対を判断するための他の技術を用いることもできる。
【００７０】
一態様において、レジスタの保存及び復元は、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ命令又はＬｏａｄ  Ｍｕｌｔｉｐｌｅ命令（又は類似の命令）の実行に基づいている。しかしながら、これらの命令は、様々な目的で用いることができ、従って、チェック及び／又は発見的手法（heuristics）を用いて、正しい実行が保存されることを保証することができる。つまり、ｓｔｏｒｅ／ｌｏａｄの対を判断し、次に、本発明の保存及び復元の態様を用いて、それらを最適化することができる。一致しないストア／ロードの対は、本発明の保存及び復元の態様を用いて最適化されない。従って、処理を容易にし、例えば、正しい実行を保証するために一致する対を見つけることと関連したチェック又は発見的手法を減らすために、ｌｏａｄ  ｍｕｌｔｉｐｌｅ／ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ命令とは異なるように挙動する新しい命令を定義する。例えば、本明細書ではＳｐｉｌｌ  Ｍｕｌｔｉｐｌｅ（Ｓｐｉｌｌｍ）及びＲｅｌｏａｄ  ｍｕｌｔｉｐｌｅ（Ｒｅｌｏａｄｍ）と呼ばれる新しい命令を定義し、これらは、スピルと再ロードとの間に生じるメモリに対する修正を考慮しない。つまり、これらの命令の１つのアーテキクチャ上の定義によると、Ｓｐｉｌｌｍ／Ｒｅｌｏａｄｍのユーザは、スピルと再ロードとの間のこれらのレジスタに対応するインメモリ値を修正してはならない。従って、インメモリ・イメージが修正される場合、新しい命令は、その値を考慮する義務はない。
【００７１】
図１５を参照して、Ｓｐｉｌｌ  Ｍｕｌｔｉｐｌｅ命令の一例が説明される。一例において、Ｓｐｉｌｌ  Ｍｕｌｔｉｐｌｅ（Ｓｐｉｌｌｍ）命令７００は、ｓｐｉｌｌ  ｍｕｌｔｉｐｌｅ操作を示すオペレーション・コード（オペコード）を含む少なくとも１つのオペレーション・コード・フィールド７０２と、第１のレジスタ（Ｒ１）フィールド（Ｄ２）７０４と、第２のレジスタ（Ｒ３）フィールド７０６と、ベース・フィールド（Ｂ２）７０８と、変位（displacement）フィールド（Ｄ２）７１０（例えば、１２ビットの符号なしバイナリ整数）とを含む。別の実施形態において、変位フィールドは、複数のフィールド（例えば、ＤＬ２及びＤＨ２）を含むことができ、例えば、２０ビットの符号なしバイナリ整数（他のサイズも可能である）とすることができる。一例において、フィールドの各々は、互いに分離している。しかしながら、他の例において、フィールドの１つ又複数を結合することもできる。さらに、一例において、フィールドと関連した下付きの数字は、そのフィールドが対応するオペランドを示す。例えば、下付き数字１を有するフィールドは、第１のオペランドに対応し、下付き数字２を有するフィールドは、第２のオペランドに対応する等である。
【００７２】
動作において、後の復元のために、汎用レジスタＲ１から始まり、汎用レジスタＲ３で終了する汎用レジスタのセットのビット位置の内容が保存される。第２オペランド・アドレス（例えば、Ｂ２で示されるレジスタの内容＋Ｄ２又はＤＬ２＋ＤＨ２の内容により与えられる）で指定される記憶位置から始まり、必要な数の記憶位置を通じて連続するストレージ領域を、レジスタの一部又は全てを格納するためのバッファとして用いることができる。対応するバッファ・ストレージ・アドレスは、対応する復旧アドレスのために指定される。一例において、汎用レジスタのビット位置３２〜６３の内容は、第２のオペランド・アドレスから始まる一連の４バイト・フィールドに格納される。後の復元のために、汎用レジスタが保存される。後の復元のために、Ｓｐｉｌｌｍの別の型式においては、後の復元のために、汎用レジスタのビット位置０〜６３の内容が保存される。レジスタ毎の４バイト（又は、他の実施形態においては、８バイト）に対応するバッファは、用いることができ、アクセス可能である。バッファの内容は、未定義であり、システムの世代ごとに変化し得る。別の実施形態において、バッファは定義され、対応するＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ命令の定義に従ったストレージ領域の値に対応する値を含む。
【００７３】
さらに、動作において、一態様によると、物理レジスタの指定されたアーキテクチャ上のレジスタへのマッピングを有するように、命令により指示される１つ又は複数のレジスタのスナップショットが撮られる。
【００７４】
図１６を参照して、Ｒｅｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令の一例が説明される。一例において、Ｒｅｌｏａｄ  Ｍｕｌｔｉｐｌｅ（Ｒｅｌｏａｄｍ）命令７５０は、ｒｅｌｏａｄ  ｍｕｌｔｉｐｌｅ操作を示すオペレーション・コード（オペコード）を含む少なくとも１つのオペレーション・コード・フィールド７５２と、第１のレジスタ（Ｒ１）フィールド７５４と、第２のレジスタ（Ｒ３）フィールド７５６と、ベース・フィールド（Ｂ２）７５８と、変位フィールド（Ｄ２）７６０（例えば、１２ビットの符号なしバイナリ整数）とを含む。別の実施形態において、変位フィールドは、複数のフィールド（例えば、ＤＬ２及びＤＨ２）を含むことができ、例えば、２０ビットの符号なしバイナリ整数とすることができる（他のサイズも可能である）。一例において、フィールドの各々は、互いに分離している。しかしながら、他の例では、フィールドの１つ又複数を結合することもできる。さらに、一例において、フィールドと関連した下付きの数字は、そのフィールドが対応するオペランドを示す。例えば、下付き数字１を有するフィールドは、第１のオペランドに対応し、下付き数字２を有するフィールドは、第２のオペランドに対応する等である。
【００７５】
動作において、本発明の態様によると、汎用レジスタＲ１から始まり、汎用レジスタＲ３で終了する汎用レジスタのセットのビット位置は、最新のスナップショットから復元され、後のＲｅｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令のために、最新のスナップショットを除去し、前のスナップショットを最新のスナップショットとして利用可能にする。一例において、汎用レジスタのビット位置３２〜６３は、前に格納された値から再ロードされ、ビット０〜３１は変更されないままである。別の実施形態において、汎用レジスタのビット位置０〜６３は、前に格納された値から復元される。汎用レジスタは、汎用レジスタＲ１から始まり、汎用レジスタＲ３まで（このレジスタを含む）そのレジスタ番号の昇順に格納され、汎用レジスタ０は、汎用レジスタ１５の後に続く。
【００７６】
スナップショットが利用可能でない場合、レジスタは、第２のオペランド・アドレス（例えば、Ｂ２で指定されるレジスタの内容＋Ｄ２（又はＤＬ２＋ＤＨ２）の内容により与えられる）により指定される記憶位置から始まるストレージからロードされる。
【００７７】
この操作の結果は、以下を含む様々な理由で定義されないことがある。すなわち：前のＳｐｉｌｌ  Ｍｕｌｔｉｐｌｅ命令が、復元のために準備される同じレジスタ範囲を指定しなかった。（別の実施形態において、前のＳｐｉｌｌ  Ｍｕｌｔｉｐｌｅ命令が復元のために準備されるレジスタ範囲の上位集合を指定しなかった場合、結果は定義されない）；Ｒｅｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令が同じバッファを指定しない（一実施形態において、これは同じアドレスとなる。別の実施形態においては、これは、レジスタのサブセットが復元されたとき、調整されたアドレスとなる）；又は、バッファが介入する命令により修正されたなど。
【００７８】
Ｒｅｌｏａｄｍを用いて、一実施形態においては、Ｒｅｌｏａｄｍのアーキテクチャ上の定義によれば、ユーザは、それらのレジスタに対応する格納されたデータを修正してはならないので、スナップショットは検証されない（図９におけるように）。従って、図１７に示されるように、スナップショットの復元の後にスナップショットの検証は存在しない。
【００７９】
例えば、図１７を参照して説明されるように、バルク復元要求（例えば、Ｒｅｌｏａｄｍ命令）を取得する（例えば、受け取る、決定する、提供する、有する、取り出す等）（ステップ８００）。対応するスナップショットが利用可能であるかどうかを判断する（問い合わせ８０２）。この判断は、最後のスナップショットｉｄを記憶する、スナップショット・スタックを用いる等の上述の技術、及び／又は他の技術を用いて行われる。
【００８０】
対応するスナップショットが利用可能でない場合、例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ又は同様の命令を用いて、メモリから値を再ロードする（ステップ８０４）。しかしながら、対応するスナップショットが利用可能である場合、バルク復元がバルク保存（例えば、Ｓｐｉｌｌｍにより実行される）と一致するかどうかについてさらに判断する（問い合わせ８０６）。つまり、復元されるべきレジスタは、保存された同じレジスタであるか。同じレジスタである場合、スナップショットを復元する（ステップ８０８）。例えば、物理レジスタのアーキテクチャ上のレジスタへのマッピングが、最後のスナップショットを反映するように変更される。Ｌｏａｄ  Ｍｕｌｔｉｐｌｅが用いられたときと同様に、復元においてＲｅｌｏａｄｍが用いられたので、スナップショットは検証されない。
【００８１】
さらに、一例において、Ｒｅｌｏａｄｍ命令は、前のＳｐｉｌｌｍ命令と一致するようアーキテクチャ上保証されるので、図１８に示されるように、照合検証を抑止することもできる。より具体的には、こうした一致がプログラマーにより保証されないときに未定義の結果を伴うペナルティにおいて、Ｓｐｉｌｌｍ及びＲｅｌｏａｄｍの対応する対を一致させるのは、プログラマーの責任である。この実施形態において、バルク復元要求（例えば、Ｒｅｌｏａｄｍ）を取得し（例えば、受け取り、決定し、提供し、有し、取り出し等）（ステップ８２０）、対応するスナップショットが利用可能かどうかについて判断する（問い合わせ８２２）。対応するスナップショットが利用可能でない場合、（例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅを用いて）メモリから値を再ロードする（ステップ８２４）。他の場合には、スナップショットを復元する（ステップ８２６）（問い合わせ８０６に対応する問い合わせは実行されない）。
【００８２】
一実施形態において、従来のｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ及びｌｏａｄ  ｍｕｌｔｉｐｌｅバルク要求によるバルク保存／復元のためのサポート（例えば、ｚ／ＡｒｃｈｉｔｅｃｔｕｒｅによるＳＴＭＧ及びＬＭＧ命令を用いる、又は例示的な実施形態における、Ｐｏｗｅｒ  ＩＳＡにおける、それぞれ、ＳＴＭ及びＬＭ−又はＳＴＭＷ及びＬＭＷ並びにＳＴＭＤ及びＬＭＤ命令を用いて）を、少なくとも１つの実施形態において、新しいＳｐｉｌｌｍ／Ｒｅｌｏａｄｍファシリティと結合することができる。こうした実施形態によれば、従来のＩＳＡ（命令セット・アーキテクチャ）定義に従ったコードは加速させ得るが、従来の命令定義とのアーキテクチャ上のコンプライアンスの順守を保証するために付加的なチェックを用いる一方で、本発明の態様による新しいＳｐｉｌｌｍ／Ｒｅｌｏａｄｍ命令を用いるコードのチェックが低減するため、さらに高い性能を提供する。
【００８３】
本発明の別の態様によると、スナップショットは、隣接するレジスタ復元ポイント間で共有することができる。これらのスナップショットは、例として、レジスタ・リネーム・マップ、他のレジスタ復元情報、又は完全なレジスタ状態の少なくとも一部が撮られる。
【００８４】
関数呼び出しは、一致したレジスタ・スピル及びレジスタ再ロードの対の２つのセット（例えば、ＳＴＭＧ及びＬＭＧ、又はＳｐｉｌｌｍ及びＲｅｌｏａｄｍ）、すなわち、呼び出し側における呼び出し元保存レジスタの保存と関連付けられたもの、及び、呼び出される関数における呼び出し先保存レジスタの保存と関連付けられる別のものと関連付けられることが多い。スピル（すなわち、複数のアーキテクチャ上のレジスタの保存）は、通常、動的に近接して実行され、同様に、レジスタの復元又は再ロードもまた、通常、動的に近接している。さらにレジスタは、相互排他的であり、第２のスピル操作により保存されるレジスタは、一般的に、第１のスピルと第２のスピルとの間コードにより修正されない。疑似コード記法における例示的なコードは、以下の通りである。
【数３】
2020518895.tif 000005
【００８５】
上記に基づいて、本発明の態様によると、レジスタ復元スナップショットの少なくとも部分を、スピル操作（例えば、Ｓｐｉｌｌｍ命令）の動的に隣接するインスタンスの間で共有することができる。一例において、プロセッサは、呼び出し元関数のｒ１０〜ｒ１５及び呼び出し先関数のｒ１６〜ｒ２０の両方を復元するために用いられるレジスタ状態の単一のスナップショットを含む復元スナップショットを作成することができる。保存したレジスタの範囲は、隣接している必要はないことに留意されたい。
【００８６】
これを達成するため、一実施形態においては、復元スナップショットは、２つの別個の記録、すなわちスピルが生じたアドレス及び復元の際に用いられるレジスタ・スナップショットを含む。レジスタ・スナップショットは共有されるが、各々のＳｐｉｌｌｍ／Ｒｅｌｏａｄｍの対について別個のアドレスの値が保持持される。：＜アドレス，スナップショット−ＩＤ＞
【００８７】
本発明の態様によると、プロセッサは、最後の復元スナップショット以来書き込まれていないレジスタ値のビットマップと共に、撮られる最後の復元スナップショット（複数のスピル操作により参照され得るレジスタを含む）への参照を保持する。従って、新しい復元スナップショットが撮られるとき、スナップショットが撮られるレジスタ範囲が最後の復元スナップショット以来変更されていない場合、現在のスピル操作は、前の復元スナップショットを再利用することができる。他の場合には、新しい復元スナップショットを作成することができる。
【００８８】
スナップショットを共有するための命令デコード及びスナップショット論理の一例が、以下に与えられる。：
【数４】
2020518895.tif 000006
【００８９】
図１９に示されるように、一実施形態において、将来のスナップショット４は、スナップショット３と同じであるので、スナップショット４を撮らず、スナップショット３が再利用される。このことは、スナップショット４の周りの点線及び撮られた最後のスナップショットの表示により示され、バルク保存スナップショット９００は３に設定される。
【００９０】
図２０〜図２４を参照して、本発明の１つ又は複数の態様による、復元スナップショットの管理に関するさらなる詳細が説明される。図２０〜図２４において、スナップショットは、復元スナップショットを指し、すなわち、１つ又は複数のバルク保存（例えば、Ｓｐｉｌｌｍ及び／又はＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ）の実行に基づいて撮られるスナップショットである。最初に、図２０を参照して、復元スナップショットの共有の一実施形態が説明される。この実施形態において、ｓｎａｐｓｈｏｔ＿ｒｅｇｓが、復元スナップショット内に含まれるそれらのレジスタに設定される（ステップ１０００）。例えば、１つ又は複数のＳｐｉｌｌｍ又はＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ命令内に含まれるもののような、含まれるレジスタを判断し、それらのレジスタの表示が、ｓｎａｐｓｈｏｔ＿ｒｅｇｓで与えられる。
【００９１】
前のスナップショットが使用可能かどうかについてチェックする（ステップ１００２）。これは、現在のスナップショットについて指定されたレジスタが、そのスナップショットが撮られて以来、前のスナップショットから修正されていないレジスタのみを含むかどうかを判断することを含む。Ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓは、最後のスナップショット以来、どのレジスタも修正されていないことを追跡するために用いられる。一例において、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ｕｓａｂｌｅは、現在のスナップショットについてのスナップショット・レジスタ及び修正されていないレジスタの共通集合、すなわち、（ｓｎａｐｓｈｏｔ＿ｒｅｇｓ＆ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓ）が、現在のスナップショットについての全てのレジスタを含むか、すなわち、ｓｎａｐｓｈｏｔ＿ｒｅｇｓと同一である（すなわち、＝＝）という表示に設定される。ｓｎａｐｓｈｏｔ＿ｒｅｇｓ内に含まれる修正されたレジスタがない場合、前のスナップショットが使用可能である。前のスナップショットが使用可能である場合（問い合わせ１００４）、ｔｈｉｓ＿ｓｎａｐｓｈｏｔ＿ＩＤは、前のスナップショット識別子、すなわちｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ＩＤの識別子と等しくなるように設定される（ステップ１００６）。
【００９２】
しかしながら、前のスナップショットが使用可能でない場合（問い合わせ１００４）、別のスナップショットが撮られ、ｔｈｉｓ＿ｓｎａｐｓｈｏｔ＿ＩＤが更新される（例えば、１だけインクリメントされる）（ステップ１０１０）。さらに、どのレジスタも修正されていないように初期化されるので、ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓは、レジスタの全てを含むように設定される（ステップ１０１２）。さらに、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ＩＤが、ｔｈｉｓ＿ｓｎａｐｓｈｏｔ＿ＩＤと等しくなるように設定され、その結果、このスナップショットは、さらなる使用のために記憶される（ステップ１０１４）。
【００９３】
さらに別の実施形態において、図２１を参照すると、命令により修正されるレジスタが追跡される。一例において、命令が１つ又は複数のレジスタの内容を変更するかどうかを判断する（問い合わせ１０２０）。１つ又は複数のレジスタが命令により修正される場合、それらのレジスタを追跡する（ステップ１０２２）。例えば、ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓは、修正されたそれらの１つ又は複数のレジスタを排除するように設定される（例えば、ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓ：＝ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓ  ＡＮＤ  ＮＯＴ  ｒｅｇｓ＿ｃｈａｎｇｅｄ＿ｂｙ  ｉｎｓｔｒｕｃｔｉｏｎ）。ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓの更新の後、又は命令がいずれのレジスタも変更しない場合（問い合わせ１０２０）、この処理は完了する（ステップ１０２４）。
【００９４】
上記に加えて、さらに別の実施形態において、イベント（例えば、フラッシュ、分岐、予測ミス、例外等）に起因して、命令パイプラインが、前のポイントにリワインドする（rewind）場合、新しいスナップショットが強制される。図２２を参照してフラッシュ／分岐予測ミス／例外に起因するスナップショットの強制と関連した処理の一例が説明される。この例において、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ｉｄは、共有できる前のスナップショットがないことを示すＮＯＮＥに設定され（ステップ１０３０）、ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓは、ｎｏ＿ｒｅｇｓに設定される（ステップ１０３２）。つまり、使用可能な前のスナップショットの表示がなく、レジスタは修正されていないと考えられる。
【００９５】
さらに、一例において、図２３を参照して説明されるように、命令が、イベント（例えば、フラッシュ、分岐予測ミス、例外等）に起因して前のポイントにリワインドする場合、前のスナップショットへのロールバックを実行することができる。最初に、処理がスナップショットにロールバックすべきかどうかを判断する（問い合わせ１０４０）。つまり、ロールバックを示唆するイベントが発生したか、そしてロールバックすべき適切なスナップショットがあるか。スナップショットへのロールバックがある場合、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ＩＤは、処理がロールバックされるスナップショットであるｒｏｌｌｂａｃｋ＿ｓｎａｐｓｈｏｔ＿ＩＤと等しくなるように設定される（ステップ１０４２）。さらに、ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓは、この時点で、いずれのレジスタも修正されていないので、レジスタの全てに設定される（ステップ１０４４）。
【００９６】
問い合わせ１０４０に戻ると、スナップショットへのロールバックがない場合、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ＩＤがＮＯＮＥに設定され（ステップ１０４６）、修正されていないレジスタは、ｎｏ  ｒｅｇｉｓｔｅｒ（レジスタなし）に設定される（ステップ１０４８）。
【００９７】
図２４を参照して、フラッシュ、分岐予測ミス、例外等のイベントに起因するスナップショットへのロールバックと関連した処理のさらに別の例が説明される。最初に、処理が最後のスナップショットに又はこれを超えてロールバックするかどうかを判断する（問い合わせ１０５０）。ロールバックしない場合、この処理は完了し、最後のスナップショットを用いることができる（ステップ１０５２）。一実施形態において、ロールバック命令の処理を用いて、図２１の技術によるロールバック命令の処理が修正されていないレジスタ・セットからレジスタを除去しているとき、修正されていないレジスタ・セットは、真に修正されていないレジスタのサブセットを含み得る。しかしながら、これは、サブセットの保守的定義であり、すなわち、最悪の場合、必要以上に多くのスナップショットがある場合があり、それにより、正確性が保持される。同時に、撮ることができるスナップショットのセットは、図２２又は図２３によるものより少なく、そこで、各スナップショット要求は、図２２の技術に従って及び図２３のステップ１０４６及び１０４８の選択に従って撮られるスナップショットをトリガする。
【００９８】
他の場合には、処理がスナップショットにロールバックするかどうかを判断する（問い合わせ１０５４）。スナップショットへのロールバックがある場合、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ＩＤは、処理がロールバックされるスナップショットであるｒｏｌｌｂａｃｋ＿ｓｎａｐｓｈｏｔ＿ＩＤと等しくなるように設定される（ステップ１０５６）。さらに、ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓは、この時点で、いずれのレジスも修正されていないので、レジスタの全てに設定される（ステップ１０５８）。
【００９９】
問い合わせ１０５４に戻ると、スナップショットへのロールバックがない場合、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ＩＤは、ＮＯＮＥに設定され（ステップ１０６０）、修正されていないレジスタは、ｎｏ  ｒｅｇｉｓｔｅｒに設定される（ステップ１０６２）。
【０１００】
種々の実施形態が上記で与えられたが、特定の状況においてどのスナップショットを用いるかを管理するために、他の実施形態を用いることができる。
【０１０１】
本発明のさらに別の態様において、復元のための共有スナップショットを用いることに加えて、復旧において共有スナップショットを用いることができる。本明細書で用いられる場合、復元のためのスナップショットは、バルク保存（例えば、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ、Ｓｐｉｌｌｍ等）に基づいて撮られるそれらのスナップショットであり、復旧のためのスナップショットは、例として、分岐又はアドレスが予測ミスされ得る状況のような例外フローへの変更に基づいて撮られるそれらのスナップショットである。
【０１０２】
以下の例示的な関数を考える：
【数５】
2020518895.tif 000007
【０１０３】
上記の例において、復旧スナップショットが、条件分岐（ｂｃｏｎｄ）命令及びジャンプ（ｊｓｒ）命令のために撮られ、復元スナップショットが、Ｓｐｉｌｌｍ命令のために撮られる。この例では、復元のためのスナップショットの共有（例えば、ｍｕｌｔｉｐｌｅ  ｓｐｉｌｌ操作）と同様に、復旧スナップショット（例えば、条件分岐及びジャンプのための）を共有することができる。これは、図２５を参照してさらに説明される。
【０１０４】
図２５を参照して、復元スナップショットを共有する一例が説明される。一例において、図２５の処理は、例えば、正確な例外（precise exception）を実施する分岐予測ミスの復旧、パイプライン・フラッシュの処理、又は他のこうしたイベントのためにロールバック・ポイントを作成するために、復旧スナップショットが作成されるときに実行される。最初に、復旧スナップショットのためにスナップショットが撮られるレジスタのセットが、レジスタの全て（ａｌｌ＿ｒｅｇｓ（））、例えば、正確な例外、分岐予測ミス、又は他のこうしたイベント（例えば、この例では、条件分岐ｂｃｏｎｄ及びサブルーチン呼び出しｊｓｒ）の場合に、復旧のために保存されるレジスタの全てと等しくなるように設定される（ステップ１０７０）。前のスナップショットが使用可能かどうかについてチェックする（ステップ１０７２）。これは、(一例において、ステップ１０７０による、全てのレジスタに対応する)現在のスナップショットのために使用されるレジスタが、前のスナップショットが撮られたため、修正されていないレジスタのみを含むかどうかを判断することを含む。一例において、インジケータ、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ｕｓａｂｌｅは、ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓ＝＝ａｌｌ＿ｒｅｇｓかどうかの表示と等しくなるように設定される。ｓｎａｐｓｈｏｔ＿ｒｅｇｓ内に修正されたレジスタがない場合、前のスナップショットが使用可能である。前のスナップショットが使用可能である場合（問い合わせ１０７４）、ｔｈｉｓ＿ｓｎａｐｓｈｏｔ＿ＩＤは、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ＩＤと等しくなるように設定される（ステップ１０７６）（すなわち、前のスナップショットは、現在のスナップショット要求に対してスナップショットを提供するために使用可能である）。他の場合には、前のスナップショットが使用可能でない場合、スナップショットが作成され、ｔｈｉｓ＿ｓｎａｐｓｈｏｔ＿ＩＤが更新される（例えば、１だけインクリメントされる）（ステップ１０７８）。さらに、ｕｎｍｏｄｉｆｉｅｄ＿ｒｅｇｓは、全てのレジスタと等しくなるように設定され（ステップ１０８０）、ｐｒｅｖ＿ｓｎａｐｓｈｏｔ＿ＩＤは、ｔｈｉｓ＿ｓｎａｐｓｈｏｔ＿ＩＤと等しくなるように設定され（ステップ１０８２）、その結果、現在のスナップショットは、例えば、少なくとも、本発明の態様の実施形態による復元及び復旧スナップショット要求の１つ又は複数を用いて、将来のスナップショット要求のために再利用することができる。
【０１０５】
一実施形態において、復旧スナップショットを共有するために実施される図２５の処理は、復元スナップショットを共有するために実施される図２０〜図２４の１つ又は複数の処理と共に動作し得る。一態様において、スナップショットは、復旧のため、復元のため、又は復旧と復元の組み合わせのために共有することができる。一例として、図２５の技術は、タイプに関係なく、スナップショットの共有のために用いることができる。
【０１０６】
図２０〜図２５は、本発明の態様の実施形態による、レジスタ・ファイルのための単一のスナップショットに関して説明されるが、本明細書で説明されるレジスタ・スナップショット技術は、これらに限定されるものではないが、汎用レジスタ、整数レジスタ、アドレス・レジスタ、データ・レジスタ、固定小数点レジスタ、浮動小数点レジスタ、ベクトル・レジスタ、ベクトル・スカラー・レジスタ、条件レジスタ、述語レジスタ（predicate register）、制御レジスタ、専用レジスタ等を含む、種々のレジスタ・タイプに対して実行することができる。一実施形態によると、単一の実装において、複数のレジスタ・タイプをサポートし、例えば、汎用及びベクトル・レジスタ（又は、レジスタ・タイプの他の組み合わせ）のためのスナップショットを提供することができる。さらに、１つ又は複数の実施形態によると、複数のレジスタ・タイプが、スナップショット機構を共有することができる。１つの例示的な実施形態において、例えば、共有されるベクトル及び浮動小数点レジスタを提供するｚ／Ａｒｃｈｉｔｅｃｔｕｒｅによる実装において、浮動小数点及びベクトル・レジスタのためのスナップショットを共有することができる。別の例示的な実施形態において、例えば、共有されるベクトル・スカラー、ベクトル及び浮動小数点レジスタを提供するＰｏｗｅｒ  ＩＳＡによる実装において、浮動小数点レジスタ、ベクトル・レジスタ及びベクトル・スカラー・レジスタのためのスナップショットを共有することができる。他の例も可能である。
【０１０７】
本発明のさらに別の態様において、メモリへの変更をイン・オーダー方式で追跡し、必要に応じて、復元されるレジスタが正しいかどうか（すなわち、レジスタを復旧するために用いられるスナップショットが最新の情報を有するかどうか）を判断する。例えば、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ及びＬｏａｄ  Ｍｕｌｔｉｐｌｅ命令（又は他のこうした命令）が用いられる一実施形態において、レジスタがメモリからではなく、レジスタ復元スナップショットから復元される場合、ロードとストアとの間で生じるメモリへの変更は、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ要求により以前に格納された、及び、ｌｏａｄ  ｍｕｌｔｉｐｌｅ命令により再ロードされる値に従って、必要に応じて、復元されるレジスタの正確さを判断することができるようにキャプチャされる。（アーキテクチャ上の定義により、メモリ変更は、プログラマーにより行われてはならず、未定義の挙動をもたらすプログラミング・エラーを表すので、インメモリ・バッファについてのレジスタ復元スナップショットの正しさをこの処理の問題としないＳｐｉｌｌｍ／Ｒｅｌｏａｄｍの使用は利点をもたらす。従って、アーキテクチャ上の定義により、これらの命令により用いられるメモリ・バッファに対して、ＳｐｉｌｌｍとＲｅｌｏａｄｍとの間でメモリ変更が行われる場合、こうした変更は、プログラミング・エラーと考えられ、Ｓｐｉｌｌｍ／Ｒｅｌｏａｄｍ命令と関連したこの処理ではなくプログラマーが、こうしたエラーの処理に対して責任を負う。）
【０１０８】
保存及び復元操作を含むコードの一例が以下に示される。：
【数６】
2020518895.tif 000008
【０１０９】
復元は、関数が入力され、呼び出し元保存レジスタの値が保存された時点における呼び出し元保存済レジスタの値を復元する。しかしながら、ＳＴＭとＬＭとの間の命令は、メモリを変更することがあり、そのことは、復元された時に呼び出し元保存レジスタに影響を与える。これは、以下の例において実証される。：
【数７】
2020518895.tif 000009
【０１１０】
メモリからレジスタをロードする代わりに、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅの受信に基づいて、スナップショットからレジスタを復元することは、レジスタｒ１６に対応するインメモリ・レジスタ復元バッファ位置内に格納される修正された値９９ではなく、ＳＴＭ命令における値に対応するスナップショット時点におけるレジスタ内のオリジナルの値を復元する。従って、メモリが変更され、スナップショットの完全性が損なわれるかどうかを判断するために、１つ又は複数の態様が与えられる。
【０１１１】
本発明の態様によると、例えば、（１）必要に応じて、復元、チェック及び復旧する、（２）定義上、メモリが保存と復元の間で修正されないＳｐｉｌｌｍ／Ｒｅｌｏａｄｍを用いる、及び（３）明示的なチェックなしにあらゆる変更を追跡することを含む、保存操作と復元操作との間の可能なメモリ変更に対処するために、種々の実施形態が与えられる。これらの態様の各々を以下にさらに説明する。
【０１１２】
上述のように、レジスタ値がストアとロードとの間でメモリにおいて変更されるシナリオに対処するための一実施形態が、本発明の態様による、復元、チェック及び復旧技術を用いるものである。この態様によると、レジスタ復元要求の受信に基づいて、レジスタ・スナップショットが復元される。さらに、スナップショットからの要求及びレジスタ復元に基づいて、レジスタ保存／復元の対に対応するメモリ・バッファから対応するレジスタ値をロードし、レジスタ・スナップショットから復元した値をメモリ・バッファからロードした値と比較することによって、レジスタ・スナップショットから復元したレジスタの各々をチェックする。不一致が検知された場合、復元されたレジスタは、インメモリ・バッファから復旧される。他の場合には、スナップショットから復元されたレジスタを用いる。有利なことに、レジスタのチェックは、復元された値を用いて計算を実行するのと並行して行うことができ、それにより、チェックが完了していない場合でも、アプリケーション・プログラムが計算を続行することが可能になる。
【０１１３】
本明細書で説明されるように、一例において、チェックが失敗した場合、メモリ値を用いて、レジスタの全てが復旧される。これは、図２６を参照してさらに説明される。
【０１１４】
最初に、復元操作を取得する（例えば、受け取る、提供する、決定する、取り出す、有する等）（ステップ１１００）。例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令を受け取る。復元操作が前の保存操作と一致するかどうか（例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅのレジスタが、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅと対になったＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅのレジスタと一致するか；アドレスが同一であるか；レジスタのサブセット又はアドレスが同一であるか等）について判断する（問い合わせ１１０２）。復元されるレジスタが、保存されたものに対応する場合、最後のスナップショットを取得し、これを用いてレジスタを復元する（ステップ１１０４）。
【０１１５】
後続チェックを行い、復元された値の正しさを判断する。後続チェックのためのシリアル化を提供し、スナップショットが復元された後にチェックが開始することを保証し（ステップ１１０６）、インジケータが、不一致と呼ばれる、メモリからの値の復旧が実行される不一致が、ＦＡＬＳＥ（偽）に初期化されるかどうかを示す（ステップ１１０８）。例えば、マイクロ・オペレーションを用いて、選択されたレジスタに対応する格納された値をメモリからロードする（ステップ１１１０）。そのロードされた値をチェックされる選択されたレジスタの復元された値と比較する（ステップ１１１２）。比較が失敗した場合、すなわち、ロードされた値が復元された値と一致しない場合、不一致がＴＲＵＥ（真）に設定される。プロセッサは、不一致インジケータをチェックし、これが比較の失敗を示す場合（問い合わせ１１１４）、パイプラインをフラッシュし、復元操作の後に、再始動を行う（ステップ１１１６）。付加的に、復元されるレジスタについての値は、メモリから再ロードされる（ステップ１１１８）。
【０１１６】
一例において、フラッシュを実行して、不一致が検知されたとき、復元されたスナップショットからの値を用いて投機的に実行された全ての命令を、メモリから取得された値により再実行させる。少なくとも１つの実施形態において、フラッシュは、より選択的であり、例えば、復元されたレジスタに応じて、命令のフラッシュ及び再実行のみをもたらすことができる。
【０１１７】
しかしながら、問い合わせ１１１４に戻ると、不一致が比較の成功を示す場合、チェックすべき復元されるレジスタがそれ以上あるかどうかについて判断する（問い合わせ１１２０）。チェックすべき復元されるレジスタがそれ以上ある場合、処理はステップ１１１０に進む。他の場合には、処理は完了する。
【０１１８】
問い合わせ１１０２に戻ると、復元要求がストア要求と一致しない場合、レジスタの値をメモリから再ロードする（ステップ１１１８）。
【０１１９】
一実施形態において、図２６の１つ又は複数のステップが、復元操作を、他の命令及び／又は他の命令に対応する内部操作に対してアウト・オブ・オーダー方式で実行できる図２６のステップの１つ又は複数に対応する１つ又は複数の内部操作（ｉｏｐ）に拡張することによって実施される。本発明の別の態様において、現在の命令に対応して生成されるｉｏｐは、互いに対してアウト・オブ・オーダー方式で実行することができる。この実装によると、アウト・オブ・オーダー方式の実行論理は、適切なインターロックを提供し、スナップショットが復元されたときにのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
【０１２０】
別の実施形態において、図２６のステップは、レジスタの復元及び検証のための専用回路のステップとして実施される。少なくとも１つの実施形態において、図２６に対応する論理は、ここでの技術を実施する回路が復元されたレジスタの検証を続行する間、復元された値を用いて後続命令を実行するのと並行して実行される。さらに、適切なインターロックが提供され、スナップショットが復元されたときのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
【０１２１】
図２７を参照して、復元、チェック及び復旧技術の別の実施形態が説明される。この実施形態において、１つ又は複数のレジスタがスナップショットから復元されるが、１つ又は複数の他のレジスタがメモリから復元されることが可能である。図２７を参照すると、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅのような復元操作を取得する（受け取る、提供する、取り出す、決定する、有する等）（ステップ１１３０）。復元操作が前の保存操作と一致するかどうか（例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅのレジスタが、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅと対になったＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅのレジスタと一致するか；アドレスが同一であるか、レジスタのサブセット又はアドレスが同一であるか等）について判断する（問い合わせ１１３２）。復元されるレジスタが、保存されたものに対応する場合、最後のスナップショットを取得し、これを用いてレジスタを復元する（ステップ１１３６）。
【０１２２】
その後、復元された値の正しさを判断するために、後続チェックを行う。後続チェックのためのシリアル化を提供し、スナップショットが復元された後にチェックが開始することを保証し（ステップ１１３８）、ｆｉｒｓｔ＿ｍｉｓｍａｔｃｈをＮＯＮＥに設定する（ステップ１１４０）。例えば、マイクロ・オペレーションを用いて、選択されたレジスタに対応する格納された値をメモリからロードする（ステップ１１４２）。そのロードされた値を、チェックする選択されたレジスタの復元された値と比較する（ステップ１１４４）。比較が失敗した場合、すなわち、ロードされた値が復元された値と一致しない場合、ｆｉｒｓｔ＿ｍｉｓｍａｔｃｈが、比較に失敗したレジスタに設定される。ｆｉｒｓｔ＿ｍｉｓｍａｔｃｈがもはやＮＯＮＥに等しくない場合、プロセッサは、不一致があると判断する（問い合わせ１１４６）。パイプラインをフラッシュし、復元操作の後、再始動を行う（ステップ１１５０）。付加的に、失敗した比較のレジスタ内の値及び後続のレジスタの値を、メモリから再ロードする（ステップ１１５２）。
【０１２３】
一例において、フラッシュをイン・オーダー方式で実行し、不一致が検知された場合、復元されたスナップショットからの値を用いて投機的に実行されたであろう全ての命令が、メモリから取得された値により再実行するようにする。少なくとも１つの実施形態において、フラッシュは、より選択的であり、復元されたレジスタに応じて、又はｆｉｒｓｔ＿ｍｉｓｍａｔｃｈレジスタから始まる、メモリから復旧した復元されたレジスタに応じて、命令のフラッシュ及び再実行のみをもたらすことができる。
【０１２４】
しかしながら、問い合わせ１１４６に戻ると、比較が成功した場合、チェックすべき復元されるレジスタがそれ以上あるかどうかについて判断する（問い合わせ１１４８）。チェックすべき復元されるレジスタがそれ以上ある場合、処理はステップ１１４２に進む。他の場合には、処理は完了する。
【０１２５】
問い合わせ１１３２に戻ると、復元要求がストア要求と一致しない場合、レジスタの値をメモリから再ロードする（ステップ１１３４）。
【０１２６】
一実施形態において、図２７の１つ又は複数のステップが、復元操作を、他の命令及び／又は他の命令に対応する内部操作に対してアウト・オブ・オーダー方式で実行できる図２７のステップの１つ又は複数に対応する１つ又は複数の内部操作（ｉｏｐ）に拡張することによって実施される。本発明の別の態様において、現在の命令に対応して生成されるｉｏｐは、互いに対してアウト・オブ・オーダー方式で実行することができる。この実装によると、アウト・オブ・オーダー方式の実行論理は、適切なインターロックを提供し、スナップショットが復元されたときにのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
【０１２７】
別の実施形態において、図２７のステップは、レジスタの復元及び検証のための専用回路のステップとして実施される。少なくとも１つの実施形態において、図２７に対応する論理は、ここでの技術を実施する回路が復元されたレジスタの検証を続行する間、復元された値を用いて後続命令を実行するのと並行して実行される。さらに、適切なインターロックが提供され、スナップショットが復元されたときのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
【０１２８】
図２８を参照して、復元、チェック及び復旧の別の実施形態が説明される。この例において、個々のレジスタを追跡し、スナップショットを用いて復元することができるが、他のものはメモリから復元され得る。
【０１２９】
図２８を参照すると、最初に、復元操作（例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ）を取得する（例えば、受け取る、提供する、決定する、取り出す、有する等）（ステップ１１６０）。復元操作が前の保存操作と一致するかどうか（例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅのレジスタが、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅと対になったＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅのレジスタと一致するか；アドレスが同一であるか、レジスタのサブセット又はアドレスが同一であるか等）についての判断する（問い合わせ１１６２）。復元されるレジスタが、保存されたものに対応する場合、最後のスナップショットを取得し、これを用いてレジスタを復元する（ステップ１１６６）。その後、復元された値の正しさを判断するために、後続チェックを行う。後続チェックのためのシリアル化を提供し、スナップショットが復元された後にチェックが開始することを保証し（ステップ１１６８）、不一致セットは空のセットに設定される（ステップ１１７０）。
【０１３０】
例えば、マイクロ・オペレーションを用いて、選択されたレジスタに対応する格納された値をメモリからロードする（ステップ１１７２）。そのロードされた値を、チェックする選択されたレジスタの復元された値と比較する（ステップ１１７４）。比較が失敗した場合、すなわち、ロードされた値が復元された値と一致しない場合（問い合わせ１１７６）、不一致のレジスタを不一致セットに付加する（ステップ１１７８）。
【０１３１】
その後、又は比較が成功した場合（問い合わせ１１７６）、チェックすべき復元されるレジスタがそれ以上あるかどうかについて判断する（問い合わせ１１８０）。チェックすべき復元されるレジスタがそれ以上ある場合、処理はステップ１１７２に進む。他の場合には、不一致セットが空であるかどうかを判断する（問い合わせ１１８２）。不一致セットが空である場合、処理は完了する。他の場合には、不一致セット内のレジスタは、メモリから値を再ロードする（ステップ１１８４）。
【０１３２】
一例において、ステップ１１８４による再ロードは、復元命令後、又は復元された値の１つに応じて、命令の幾つか又は全ての再実行をもたらし得る。一実施形態において、これは、完全な又は部分的なフラッシュをイン・オーダー方式で実行し、不一致が検知されたとき、復元されたスナップショットからの値を用いて、投機的に実行した全ての命令を、メモリから取得した値により再実行させることにより達成される。少なくとも１つの実施形態において、フラッシュは選択的であり、例えば、命令の復元されたレジスタに応じて、又は、不一致セット内のレジスタにより表されるように、メモリから復旧される復元されたレジスタに応じて、命令のフラッシュ及び再実行のみが行われる。
【０１３３】
問い合わせ１１６２に戻ると、復元要求がストア要求と一致しない場合、レジスタの値をメモリから再ロードする（ステップ１１６４）。
【０１３４】
一実施形態において、図２８の１つ又は複数のステップが、復元操作を、他の命令及び／又は他の命令に対応する内部操作に対してアウト・オブ・オーダー方式で実行することができる図２８のステップの１つ又は複数に対応する１つ又は複数の内部操作（ｉｏｐｓ）に拡張することによって実施される。本発明の別の態様において、現在の命令に対応して生成されるｉｏｐは、互いに対してアウト・オブ・オーダー方式で実行することができる。この実装によると、アウト・オブ・オーダー方式の実行論理は、適切なインターロックを提供し、スナップショットが復元されたときにのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
【０１３５】
別の実施形態において、図２８のステップは、レジスタの復元及び検証のための専用回路のステップとして実施される。少なくとも１つの実施形態において、図２８に対応する論理は、ここでの技術を実施する回路が復元されたレジスタの検証を続行する間、復元された値を用いて後続命令を実行するのと並行して実行される。さらに、適切なインターロックが提供され、スナップショットが復元されたときのみ後続操作が実行され、さらに、不一致が検知されたとき、復元された値に基づいて実行されたあらゆる投機的に実行された命令が無効化され、フラッシュされ、再実行されることを保証する。
【０１３６】
種々の技術が上述されたが、本発明の態様の趣旨から逸脱することなく、それらの技術に対する変形を行うことができる。
【０１３７】
別の態様によると、保存及び復元は、Ｓｐｉｌｌｍ及びＲｅｌｏａｄｍ命令（又は同様の命令を用いて実行され、これらの命令は、ｓｐｉｌｌｍとｒｅｌｏａｄｍとの間で、メモリ内に格納されたレジスタへのメモリ変更を許容しないようにアーキテクチャ上定義されているので、メモリ変更のチェックは行われない。この手法において、命令の定義は、メモリが修正される場合、復元されたレジスタ値は定義されないことを示す。命令の定義によれば、ユーザは、対応する格納された領域を修正しない。ユーザが領域を修正する場合、これは、プログラミング・エラーと考えられ、正確性は保証されない。
【０１３８】
Ｓｐｉｌｌｍ及びＲｅｌｏａｄｍ命令の例示的な定義が上述される。しかしながら、さらなる詳細がここに与えられる。一実施形態において、Ｓｐｉｌｌｍは、レジスタ値をメモリに保存するので、それらのレジスタの値を、例えば、スナップショットの無効化の場合のフォールバックとして用いることができる。スナップショットの無効化は、例えば、プロセッサの物理レジスタが不足した場合、プロセッサのスナップショットのためのストレージが不足した場合、コンテキスト・スイッチ（context switch）がある場合等に生じ得る。
【０１３９】
一実施形態において、Ｓｐｉｌｌｍ及びＲｅｌｏａｄｍを用いるとき、図９のスナップショットの検証は必要ないことがアーキテクチャ上定義される。従って、図１７に示されるように、スナップショットの検証は行われない。同様に、別の態様によると、ＲｅｌｏａｄｍはＳｐｉｌｌｍと一致致することがアーキテクチャ上定義され得るので、照合問い合わせ（例えば、問い合わせ８０６）を用いることなく、バルク復元を実行することができる。この一例が、照合問い合わせが実行されない図１８を参照して上述される。
【０１４０】
Ｓｐｉｌｌｍ／Ｒｅｌｏａｄｍのアーキテクチャ上の定義により、照合問い合わせをスキップすることが可能になるが、Ｓｐｉｌｌｍ／Ｒｅｌｏａｄｍが一致しない状況もあり得る。例えば、対は、ｓｅｔｊｕｍｐ及びｌｏｎｇｊｕｍｐ関数のＣ／Ｃ＋＋及びＰＯＳＩＸ定義に従ったプログラム内のｓｅｔｊｕｍｐ／ｌｏｎｇｊｕｍｐ関数に基づいて、及び、例えばＣ＋＋及びＪａｖａで表されるような例外処理に従って用いられるような、構造化例外処理に応答して、対が一致しなくなることがある。例外処理及び結果として生じる一致しないＳｐｉｌｌｍ／Ｒｅｌｏａｄｍ命令の一例が以下に示される。：
【数８】
2020518895.tif 000010
【０１４１】
本明細書での例の基づき、例外が呼び出し先関数ｃａｌｌｅｅ（）にスローされる場合、呼び出し先関数のプロローグのＲｅｌｏａｄｍ命令を実行せず、呼び出し元における後続Ｒｅｌｏａｄｍが、呼び出し元の最新のＳｐｉｌｌｍと一致しなくなることがある。
【０１４２】
同様に、以下に示されるように、不一致は、Ｓｅｔｊｕｍｐ／Ｌｏｎｇｊｕｍｐにより生じ得る。：
【数９】
2020518895.tif 000011
【０１４３】
特定のプログラミングは、Ｓｐｉｌｌｍ／Ｒｅｌｏａｄｍ命令の不一致をもたらし得るので、一態様において、特定のＲｅｌｏａｄｍが特定のＳｐｉｌｌｍと一致することを保証する機能が提供される。この機能は、必要に応じて、復旧に用いられるスナップショットを無効化すること、及び／又は、呼び出し先のＳｐｉｌｌｍスナップショットを用いて、呼び出し元のＲｅｌｏａｄｍが満たされないこととを保証することを含む。スナップショットを無効化するために、本発明の態様に従って、例えば単にスナップショットを除去するために、Ｒｅｌｏａｄｍを例えば１つの単一レジスタ内で実行すること；例えば、ｉｎｖａｌｉｄａｔｅ  ｓｎａｐｓｈｏｔ（スナップショット無効化）（Ｉｎｖｓｎａｐ）命令を用いてＳｐｉｌｌｍスナップショットをアンスタックすること；又は他の場合には、スナップショット・スタックから１つのスナップショットを除去する又はスナップショットを無視することを含む多数の技術を用いることができる。
【０１４４】
一例において、スキップされるＲｅｌｏａｄｍ命令の数は、関数のコードを走査し、次に、その数のスナップショットを無効化することによって、決定される。一実施形態において、無効化されたスナップショットについてのコード分析及びスナップショットの無効化は、例えば構造化例外処理の存在下でレジスタを復元するための、従来のアンワインド（unwind）処理と併せて実行することができる。これは、疑似コード記法において与えられる以下のコードで示される。
【数１０】
2020518895.tif 000012
【０１４５】
図２９を参照すると、疑似コード記法を参照して説明されるように、プロセッサは、Ｓｐｉｌｌｍ／Ｒｅｌｏａｄｍの対を探して関数のコードを走査する（ステップ１２００）。スキップされるＲｅｌｏａｄｍ命令の数をカウントし（ステップ１２０２）、対応する数のスナップショットを無効化する（ステップ１２０４）。
【０１４６】
一致しない対を管理する一例が与えられるが、他の技術を用いてもよい。
【０１４７】
本発明の別の態様によると、図２６〜図２８を参照して説明されるような復旧及びチェックを実行する代わりに、それが生じたときに変更を追跡する。この態様において、プロセッサがメモリを更新するたびに、チェックを行い、更新がスナップショットの有効性に影響を与えるかどうかを判断する。影響を与える場合、スナップショット・レジスタの変わりに、要求される値をメモリから取得する。
【０１４８】
一例において、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅの対象になるキャッシュ・ラインは、書き込みセット内にあるものとしてマーク付けされる。別のプロセッサからの干渉を診断すると、レジスタ復元の対象になるメモリ・バッファに対してストアが行われる。一実施形態において、イン・フライト（in-flight）の転送機会を無効化するために、干渉が用いられる。別の実施形態において、どのストア／ロードの対がレジスタ復元から排除されるかを示すように、書き込みセットのキャッシュ・ラインを対応する識別子と関連付けることができる。少なくとも１つの実施形態において、書き込みセットの表示は、全ての干渉ストア・メモリ操作（又は、他の同期動作）が完了するまでクリアされない。別の実施形態において、バッファの書き込みセットは、対応するロードが完了するまでクリアされない。少なくとも１つの弱いメモリ・オーダリング（weak memory ordering）の実施形態において、ロードの完了時、書き込みセットの予約は直ちにクリアされる。
【０１４９】
第１の保存／復元シーケンスを完了するための能力を遅延させ得る強いメモリ・オーダリング（strong memory ordering）におけるような１つの実施形態において、２つのレジスタ復元シーケンスが、同じメモリ位置に対してイン・フライトであり得る。例えば、関数が呼び出され、呼び出し先保存レジスタに対してｓｔｏｒｅ  ｍｕｌｔｉｐｌｅを実行し、ｌｏａｄ  ｍｕｌｔｉｐｌｅを用いて、呼び出し先保存レジスタを再ロードし、関数が戻り、関数が、直ちに再び呼び出され、別のｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ及びｌｏａｄ  ｍｕｌｔｉｐｌｅが同じアドレスに対して行われる。
【０１５０】
一例において、第１の対が完了するまで、第２の対が保持される。一実施形態において、書き込みセットのキャッシュ・ラインが、複数の対と関連付けられる。別の実施形態において、複数のキャッシュ・ラインが関連付けられると、単一のビットを用いて、全てのｓｔｏｒｅ／ｌｏａｄレジスタ復元の対のクリアを強制する。様々な例が存在する。
【０１５１】
さらに、別の態様において、ローカル・アクセスからの格納されたレジスタのインメモリ・バッファとの干渉が考慮される。これは、スナップショットと関連したメモリ・バッファについてのベース・アドレス及び範囲（長さとして、又はエンド・アドレスとしてのいずれか）を取得し、後のｓｔｏｒｅ操作のアドレスを、メモリ・バッファの範囲と比較し、干渉を検知することにより、達成することができる。一実施形態において、この干渉試験は、ｓｔｏｒｅ−ｍｕｌｔｉｐｌｅ  ｂｕｌｋ  ｓａｖｅのような命令に対して実行される一方で、キャッシュ・ライン又はキャッシュ・サブラインと関連したインジケータを用いて、個々のストアについての干渉が追跡される。一実施形態において、最新のストア／ロードの対に対する単一のスナップショット及び関連したインメモリ・バッファ範囲が保持される。他の実施形態において、より多くの対の保持を可能にするために、付加的なスナップショット及び関連したインメモリ・バッファ範囲がサポートされる。
【０１５２】
一実施形態において、バッファの修正を検知するために、各々のアクティブなレジスタ復元スナップショットについてのバッファ・アドレス範囲に照らして、ローカル及び遠隔アドレスがチェックされるので、アドレス・チェックは、同時チェック論理を実施することにより、又は要求が処理されるときの待ち行列遅延を招くリスクを冒して干渉のシリアル・チェックを強制することのいずれかにより、相当な領域、電力、及び遅延のコストを被ることがある。これらのコストを減らすために、本発明の態様の実施形態と共に、種々の手法を用いることができる。一実施形態において、Ｌ１キャッシュを含むとき、第１レベル・データ・キャッシュにおいてヒットする遠隔アドレスのみを、追跡されるメモリ範囲と比較する。別の実施形態においては、例えば、マーカー・ビットを用いて、特定のキャッシュ・ラインにおけるバッファの存在を追跡することにより、付加的なフィルタリングが与えられる。さらに別の実施形態において、マーカー・ビットを用いて、アクティブなバッファを示すことができ、スナップショットに対応する追跡されるアドレス範囲と比較することなく、複数のアクセス・タイプに対応するキャッシュ・ライン及びサブキャッシュ・ラインへの書き込みに応答して、バッファを非アクティブにすることができ、それにより、全てのスナップショットに対応する追跡される範囲を比較するオーバーヘッドを負うことなく、スナップショットが無効化される。さらに別の実施形態において、キャッシュ・ラインに対応するスナップショットは、キャッシュ・ディレクトリ又は別個のテーブルにより識別することができ、実行される比較の数がさらに低減する。
【０１５３】
さらに１つ又は複数の実施形態において、比較されるメモリ・アクセスの数を減らすために、メモリ・アドレス・フィルタを用いて、メモリ・アドレスをフィルタリングすることができる。本発明の１つ又は複数の態様と共にアドレス・フィルタリングのために、種々のアドレス・フィルタ（例えば、アドレス範囲フィルタ、Ｂｌｏｏｍフィルタ等）を使用することができる。アドレス・フィルタリングを用いることにより、メモリ・チェックのための領域、電力、及び遅延コストにおける相応のコストなしに、より多くのアドレス範囲を追跡することができる。従って、例えば、保守的な答えを与えるための種々のフィルタ及びダイジェストを用いて、例えば、より深いレベルの呼出し階層についての複数の範囲に対応するより多くのスナップショットを追跡することができる。一実施形態において、これは、第１のバッファから最後のバッファまでのアドレスを追跡することにより達成される。この範囲は、ヒープ、静的変数、ファイル・バッファ等に対応するメモリ要求をフィルタリングにより除外しながら、例えば、関数呼び出しにおけるレジスタ保存及び復元のためにメモリ・バッファを保持するスタック・フレームの数に対応することができる。別の実施形態において、フィルタは、付加的な情報をキャプチャしてバッファ・アクセスをローカル変数アクセスと区別し、ローカル変数アクセスをフィルタリングして、インメモリ・レジスタ・スピル・バッファに対応する追跡されるメモリ・バッファ範囲と比較されるアクセスの数をさらに減らすことができる。少なくとも１つの実施形態において、保留中のレジスタ復元スナップショットの無効化と同時に、又はレジスタ復元スナップショットがアクティブでないときに、１つ又は複数のフィルタを定期的にリセットすることができる。別の実施形態において、範囲フィルタが、１つ又は複数の周知のスヌープ・フィルタ・アーキテクチャに従って用いられる。
【０１５４】
一実施形態において、ｓｔｏｒｅ／ｌｏａｄ命令に対するバッファ・メモリの修正を検知するためのトランザクション書き込みセットの干渉の判定が、フィルタとして用いられ、次に、遠隔アクセス違反を、コア内で用いられる正確なバッファ境界と比較し、スレッド自体のストアからの干渉をチェックする。
【０１５５】
図７０に示されるような１つの特定の例において、データ・キャッシュ１３００は、複数のキャッシュ・ライン１３０２を含み、各キャッシュ・ライン１３０２（又は、別の実施形態においては、キャッシュ・ラインの選択された部分）がマーク付けされる。例えば、各キャッシュ・ライン、又はキャッシュ・ラインの部分をマーク付けする実施形態におけるキャッシュ・ラインの部分は、キャッシュ・ライン又はキャッシュ・ラインの部分が対応するメモリ・アドレスを示すアドレス・タグ１３０４；キャッシュ・ライン又は部分が有効かどうかを示す有効性（Ｖ）インジケータ１３０６；キャッシュ・ライン又は部分からのデータがメモリにライトバックされるかどうかを示すダーティ（Ｄ）インジケータ１３０８；及び、キャッシュ・ライン又は部分についてスナップショットが有効かどうかを示すために用いられる、本発明の態様によるマーク付け（Ｍ）インジケータ１３１０を有する。さらに、キャッシュ・ライン又は部分は、データ１３１２を含む。
【０１５６】
図３１〜図３３を参照して説明される例示的な技術により説明されるように、有効性インジケータ１３０６、ダーティ・インジケータ１３０８及びマーク付けインジケータ１３１０を含む種々のインジケータが設定又はリセットされる。
【０１５７】
例えば、図３１を参照して、キャッシュ再ロード中にインジケータを更新する一例が説明される。最初に、メモリからデータ・キャッシュ内にデータをフェッチする要求を取得する（例えば、受け取る、提供する、取り出す、有する、決定する等）（ステップ１３２０）。要求に基づいて、データをメモリから取得し、キャッシュ・ラインに格納する（ステップ１３２２）。メモリから取得したデータについてアドレス・タブを計算し、対応するアドレス・タグ・フィールド１３０４に格納する（ステップ１３２４）。付加的に、キャッシュ・ラインは今や有効なので、有効インジケータ１３０６は１に設定され；データは今しがたロードされたので、ダーティ・インジケータ１３０８はゼロに設定され、よって、ダーティではなく；対応するスナップショットを有するレジスタには格納されていないので、マーク付けインジケータ１３１０はゼロに設定される（ステップ１３２６）。
【０１５８】
キャッシュ再ロード中にインジケータを更新することに加えて、図３２を参照して説明されるように、インジケータは、キャッシュへのストアの際にも更新される。最初に、データ及びアドレスを取得する（例えば、受け取る、提供する、取り出す、有する、決定する等）（ステップ１３３０）。ストアがキャッシュ内の既存のキャッシュ・ラインに対応するかどうかを判断する（問い合わせ１３３２）。対応しない場合、図３１のキャッシュ再ロード手順を実行する（ステップ１３３４）。しかしながら、ストアがキャッシュ・ラインに対応する場合、データを格納し（ステップ１３３６）、対応するダーティを１に設定する（ステップ１３３８）。さらに、これが、バルク保存である、例えば、複数の呼び出し先保存又は呼び出し元保存レジスタをスタック・フレームにスピルするためのＳＴＭＧ命令である場合（問い合わせ１３４０）、マーク付けインジケータは１に設定される（ステップ１３４２）。他の場合には、それはゼロとなる。
【０１５９】
さらに、図３３を参照して説明されるように、別のプロセッサからの更新要求の受信に基づいて、インジケータの１つ又は複数を更新することができる。最初に、データ及びメモリ・アドレスを取得する（例えば、受け取る、提供する、取り出す、有する、決定する等）（ステップ１３５０）。ストアがキャッシュ内の既存のキャッシュ・ラインに対応するかどうかについて判断する（問い合わせ１３５２）。対応しない場合、図３１のキャッシュ再ロード手順を実行する（ステップ１３５４）。しかしながら、ストアがキャッシュ・ラインに対応する場合、データを格納し（ステップ１３５６）、マーク付けインジケータを０に設定する（ステップ１３５８）。遠隔プロセッサからの書き込みアクセスがインメモリ・レジスタ・バッファを修正した可能性があるので、マーク付けインジケータを０に設定し、それにより、レジスタ・スナップショットが、インメモリ・バッファに対して古く（stale）なる。
【０１６０】
別の実施形態において、キャッシュへのストアの際、キャッシュ・ライン又はキャッシュ・ラインの部分におけるバッファの存在が検知されると、要求範囲が、追跡されるスナップショットのアドレスと比較され、特定のアクセスがスナップショットを妨げるかどうかを判断する。少なくとも１つの実施形態において、このことは、更新が、メモリ・バッファに対応しない、メモリ・バッファのキャッシュ・ラインの部分に対応するとき、スナップショットの無効化の数が低減する。さらに別の実施形態において、これと関連したキャッシュ・ディレクトリ又は論理を用いて、キャッシュ・ラインに対応する複数のアクティブなスナップショットの特定のスナップショットを識別し、実行される干渉チェックの数を減らすことができる。さらに別の実施形態において、干渉チェックの数を減らすためにマーカー・ビットをフィルタとして用いることが、ローカル・プロセッサからの更新をフィルタリングするために用いられる。他の可能性も存在する。
【０１６１】
上記のキャッシュ技術の１つ又は複数は、レジスタ復元と併せて機能する。図３４を参照して、レジスタ復元技術の一例が説明される。最初に、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ（ＬＭ）命令（又は、同様の命令）を取得する（例えば、受け取る、決定する、取り出す、提供する、有する等）（ステップ１４００）。Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令が復元要求に対応するかどうかを判断する（問い合わせ１４０２）。このことは、例えば、スナップショット・スタックの付加的なフィールド（例えば、アドレス・フィールド）をチェックし、前に格納されたレジスタが復元されているかどうかを判断することにより、判断することができる。Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令が復元要求に対応しない場合、ｌｏａｄ  ｍｕｌｔｉｐｌｅ命令を実行する（ステップ１４０４）。ｌｏａｄ  ｍｕｌｔｉｐｌｅ命令が復元要求に対応する場合、１つ又は複数のレジスタ・マッピングを復旧する（ステップ１４０６）。例えば、１つ又は複数のスナップショットを用いて、指定されたレジスタを復旧することができる。その後又は並行して、ｌａｏｄ  ｍｕｌｔｉｐｌｅにより示されるレジスタに対応するキャッシュ・ライン（キャッシュ・ラインの部分）から、マーク付けインジケータ（Ｍ）が取得され（ステップ１４０８）、キャッシュ・ラインが未修正であるとしてマーク付けされる（問い合わせ１４１０）。キャッシュ・ラインが未修正であるとしてマーク付けされる場合、処理されるキャッシュ・ライン又はキャッシュ部分がそれ以上あるかどうかについてさらに判断される（問い合わせ１４１２）。処理されるキャッシュ・ライン又はキャッシュ部分がそれ以上ある場合、処理はステップ１４０８に進む。他の場合には、レジスタ復元処理は完了する。
【０１６２】
問い合わせ１４１０に戻ると、マーク付けインジケータが、修正済みとしてマーク付けされる（例えば、Ｍが０に設定される）場合、復旧ステップが実行される（例えば、キャッシュから再ロードされる）（ステップ１４１４）。つまり、メモリから値がロードされ、スナップショットの値を置換する。
【０１６３】
図３５を参照して、レジスタ復元の別の例が説明される。この例において、復元のために用いられるスナップショットの有効性についてチェックを行う。例えば、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅが、別のＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅを上書きしていることがある。これが生じたとき、第１のＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅは、もはやレジスタ復元のために用いられるＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ／Ｌｏａｄ  Ｍｕｌｔｉｐｌｅのための有効な復元候補ではない。これを判断するために、スナップショット・スタックをトラバースして、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ要求に応答して、現在のスナップショットが前のスナップショットにオーバーラップするかどうかを判断することができる。他の実施形態において、このチェックは、他のメモリ更新操作に対して、又は１つ又は複数のフィルタ基準が、チェックが実行されることを示すときの他のメモリ更新操作に対して実行される。一致が見出される場合、前のスナップショットのスタック内のエントリが無効化される。従って、一実施形態において、スタック上の各エントリについて、スナップショット上のスタック・アドレスが現在のストア要求にオーバーラップする場合、そのスナップショット・スタック・エントリについての有効インジケータは無効に設定される。次に、復元処理の際、このインジケータをチェックする。この処理の一例が、図３５を参照して説明される。
【０１６４】
最初に、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令（又は、同様の命令）を取得する（例えば、受け取る、取り出す、決定する、提供する、有する等）（ステップ１４２０）。Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令が復元要求に対応するかどうかについて判断する（問い合わせ１４２２）。このことは、例えば、スナップショット・スタックの付加的なフィールド（例えば、アドレス・フィールド）をチェックして、前に格納されたレジスタが復元されているかどうかをチェックすることにより、判断することができる。Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令が復元要求に対応しない場合、メモリから、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令によりロードされる複数のレジスタをロードすることにより、ｌｏａｄ  ｍｕｌｔｉｐｌｅ操作が実行される（ステップ１４２４）。Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令が復元要求に対応する場合、使用される１つ又は複数の復元スナップショットが有効かどうかについて判断する（すなわち、インメモリ・バッファが上書きされていないことを確認するために）（問い合わせ１４２６）。１つ又は複数の有効インジケータが、１つ又は複数の復元スナップショットが有効であると示す場合、１つ又は複数のレジスタ・マッピングを復旧する（ステップ１４２８）。例えば、１つ又は複数のスナップショットを用いて、指定されたレジスタを復旧する。その後又は並行して、ｌｏａｄ  ｍｕｌｔｉｐｌｅのレジスタに対応するキャッシュ・ライン（又はキャッシュ・ラインの部分）から、マーク付けインジケータ（Ｍ）を取得し（ステップ１４３０）、キャッシュ・ラインが未修正としてマーク付けされるかどうかを判断する（問い合わせ１４３２）。キャッシュ・ラインが未修正としてマーク付けされる場合、処理されるキャッシュ・ライン又はキャッシュ部分がそれ以上あるかどうかをさらに判断する（問い合わせ１４３４）。処理されるキャッシュ・ライン又はキャッシュ部分がそれ以上ある場合、処理はステップ１４３０に進む。他の場合には、レジスタ復元処理は完了する。
【０１６５】
問い合わせ１４３２に戻ると、マーク付けインジケータが、修正済みとしてマーク付けされる（例えば、Ｍが０に設定される）場合、復旧ステップを実行する（例えば、キャッシュから再ロードする）（ステップ１４３６）。つまり、メモリから値がロードされ、スナップショットの値を置換する。
【０１６６】
さらに別の態様によると、メモリへの修正を追跡するための別の機構が、トランザクション・メモリ・ハードウェアを用いて、メモリへの変更を追跡することを含む。トランザクション・メモリは、干渉を追跡し、トランザクション状態に対応するメモリ位置の範囲へのアクセスを追跡するための機能を有し、その機能を用いて、保存されたレジスタのインメモリ・イメージに対応するバッファが修正済みかどうかを追跡することができる。トランザクション・メモリ・ファシリティは、インメモリ変更が、特定のスナップショット内に含まれるレジスタに影響を与えるかどうかを追跡することができる。
【０１６７】
一態様において、共有されるレジスタ復元能力を用いて、トランザクション・メモリ・ロールバック復旧のためのレジスタの保存及び関数呼び出しレジスタの保持のための能力が提供される。このファシリティは、例えば、バルク保存表示命令の受信などのバルク保存表示イベントにより開始される。一実施形態において、ＴＢｅｇｉｎ（ｂｅｇｉｎ  ｔｒａｎｓａｃｔｉｏｎａｌ  ｅｘｅｃｕｔｉｏｎ命令）は、第１の表示命令であり、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ又はＳｐｉｌｌ  Ｍｕｌｔｉｐｌｅ命令は、第２の表示命令である。
【０１６８】
一実施形態において、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅを受け取った場合、ストアが即座に実行されるが、インクリメンタル・レジスタ・チェックポイントも実行される。Ｓｐｉｌｌ  Ｍｕｌｔｉｐｌｅの場合、一例においては、インコア・チェックポイントのみしか実行することができない。
【０１６９】
表示イベントの受信に基づいて、現在の要求が既存の要求と適合し得るかどうかについて試験を行う。適合性が判断されると、処理は進行する。他の場合には、最初の要求がトランザクション・メモリ・ロールバック要求に対応する場合、バルク保存が直接実行され、トランザクション・メモリのために、インコア・レジスタ保存が排他的に用いられる。第１の要求がレジスタ保存要求である場合、関数呼出しバルク復元のためのインコア・レジスタ保存は終了し、トランザクション・メモリ保存が開始される。
【０１７０】
復元イベントが発生すると、保存された追跡されるレジスタのサブセットが復元される。一実施形態において、修正されたレジスタのみが保存される。別の実施形態においては、全ての追跡されるレジスタが保存される。
【０１７１】
一実施形態によると、レジスタ復元は、修正されたトランザクション実行レジスタ・ロールバック操作として実施される。例えば、バルク・ストアが識別されると、トランザクション・メモリ（ＴＭ）レジスタ復元状態にスピルされるレジスタのスナップショットが作成される。さらに、一例において、バルク復元が識別されると、レジスタ・スナップショットは、トランザクション・アボート中に他の方法で復元される方法で復元される。
【０１７２】
一例において、複数のレジスタ・スナップショットがサポートされていない場合、新しいバルク・ストアが識別されると、前のＴＭレジスタ・スナップショットが廃棄され、ＴＭレジスタ復元を用いて、最新のバルク・ストアを受け取ることができる。例えば、ネスト化トランザクションをサポートする実施形態などの別の実施形態において、複数のネスト化トランザクションに対応するレジスタ復元スナップショット内に、複数のスピル・スナップショットが格納される。
【０１７３】
トランザクションに遭遇し、別のレジスタ復旧状態に対するストレージが利用可能になると（例えば、ネスト化トランザクションがサポートされるとき）、次のレジスタ復旧レベルが用いられる。他の場合には、バルク・ストアに対応する前のレジスタ・スナップショット（例えば、最も新しい又は最も古いスナップショットのいずれか）が無効化され、代わりにＴＭレジスタ復旧状態を保存する。別の実施形態において、バルク・ストア・スナップショットの割り当て解除を回避するために、ネスト化トランザクションを外部トランザクション内に平坦化することができる。
【０１７４】
一実施形態において、ＴＭファシリティがイネーブルにされると、スピル・レジスタ復元のためのＴＭレジスタ復旧機構の使用がディスエーブルにされる。他の変形も可能である。
【０１７５】
一実施形態において、開始イベントがＴＢｅｇｉｎであるとき、トランザクション・ロールバック、トランザクション失敗、トランザクション干渉、トランザクション・アボート、又は操作を終了及び無効化する他の操作が、復元イベントをトリガする。さらに、開始イベントがＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ、Ｓｐｉｌｌ  Ｍｕｌｔｉｐｌｅ要求、又は類似の要求であるとき、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ又はＲｅｌｏａｄ  ｍｕｌｔｉｐｌｅが、復元イベントと考えられる。
【０１７６】
トランザクションが失敗したとき（トランザクション・ロールバック、トランザクション失敗、トランザクション干渉、トランザクション・アボート、又は操作を終了及び無効化する他の操作）、又は成功するとき（Ｔｅｎｄ（トランザクション終了）の発生）、バルク保存がＴｂｅｇｉｎにより開始されたときのいずれかに、状態修正追跡が終了し、状態保存操作が終了する。
【０１７７】
少なくとも１つのインスタンスにおいて、レジスタの保存は、インクリメンタルに行われ、インクリメンタルに保存されたレジスタを復元することができる。
【０１７８】
図３６〜図４０を参照して、トランザクション・メモリ及びレジスタ復元に関するさらなる詳細が説明される。
【０１７９】
図３６を参照すると、ＴＢｅｇｉｎ命令に基づくスナップショットの開始と関連した処理が説明される。一実施形態において、ＴＢｅｇｉｎ命令を取得する（例えば、受け取る、提供する、決定する、取り出す、有する等）（ステップ１５００）。ＴＢｅｇｉｎ命令は、トランザクションを開始し、一例において図３７に示されるように、例えば、トランザクション開始操作を指定するオペコードを含むオペレーション・コード（オペコード）フィールド１５１０；ベース・フィールド（Ｂ１）１５１２；変位フィールド（Ｄ１）１５１４；及び即値フィールド（Ｉ２）１５１６を含む。
【０１８０】
Ｂ１フィールドが非ゼロのとき、Ｂ１１５１２により指定される汎用レジスタの内容がＤ１１５１４に付加され、第１のオペランド・アドレスを取得する。
【０１８１】
Ｂ１フィールドが非ゼロのとき、一例において、以下が適用される。：
＊トランザクション・ネスト化深さが最初にゼロである（トランザクションをネスト化できる）とき、第１のオペランド・アドレスは、トランザクションがアボートされる場合、種々の診断情報を格納することができる、ＴＢＥＧＩＮ指定ＴＤＢと呼ばれる２５６バイトのトランザクション診断ブロックの位置を指定する。
【０１８２】
一例において、Ｉ２フィールド１５１６のビットは、次のように定義される。：
【０１８３】
汎用レジスタ保存マスク（ＧＲＳＭ）：Ｉ２フィールドのビット０〜７は、汎用レジスタ保存マスク（ＧＲＳＭ）を含む。ＧＲＳＭの各ビットは、汎用レジスタの偶数−奇数の対を表し、ビット０がレジスタ０及び１を表し、ビット１がレジスタ２及び３を表す等である。最外ＴＢｅｇｉｎ命令のＧＲＳＭ内のビットがゼロである場合、対応するレジスタ対は保存されない。最外ＴＢｅｇｉｎ命令のＧＲＳＭ内のビットが１である場合、対応するレジスタ対は、プログラムにより直接アクセスできないモデル依存位置に保存される。
【０１８４】
トランザクション・アボートの場合、保存されるレジスタの対は、最外ＴＢｅｇｉｎ命令が実行されたときのそれらの内容に復元される。トランザクション・アボートの際、他の全ての（保存されない）汎用レジスタの内容は復元されない。
【０１８５】
汎用レジスタ保存マスクは、最外のものを除いて全てのＴＢｅｇｉｎｓにおいて無視される
【０１８６】
ＡＲ修正許可（Allow AR Modification）（Ａ）：Ａ制御（Ｉ２フィールドのビット１２）は、トランザクションがアクセス・レジスタを修正するのを許可されるかどうかを制御する。
【０１８７】
浮動小数点演算許可（Allow Floating Point Operation）（Ｆ）：Ｆ制御（Ｉ２フィールドのビット１３）は、トランザクションが指定された浮動小数点命令を実行するのを許可されるかどうかを制御する。
【０１８８】
プログラム割り込みフィルタリング制御（ＰＩＦＣ：Program Interruption Filtering Control）：Ｉ２フィールドのビット１４〜１５は、プログラム割り込みフィルタリング制御（ＰＩＦＣ）である。ＰＩＦＣは、ＣＰＵがトランザクション実行モードにある間に発生する特定のクラスのプログラム例外条件（例えば、アドレス指定例外、データ例外、演算例外、保護例外など）が割り込みをもたらすかどうかを制御する。
【０１８９】
Ｉ２フィールドは、本明細書で説明されるよりも多い、少ない、又は異なる制御を含むことができる。
【０１９０】
図３６を参照すると、ＴＢｅｇｉｎ命令の取得に基づいて、例えばレジスタ復元スナップショット・ファシリティなどのレジスタ復元ファシリティがアクティブに使用中であるかどうかを判断する（問い合わせ１５０２）。これは、例えば、特定の値（例えば、１）に設定されるファシリティ表示に基づいて、又はこうしたスナップショットが使用中かどうかをチェックすること等により、判断することができる。ファシリティがアクティブに使用中である場合、レジスタ復元を非アクティブにし、インメモリ・レジスタ復元バッファ追跡をディスエーブルにする（ステップ１５０４）。これは、この例において、ＴＢｅｇｉｎが優先されるためである。その後、又はレジスタ復元ファシリティがアクティブでない場合、トランザクション・ロールバック・スナップショットを作成する（ステップ１５０６）。例えば、ＴＢｅｇｉｎ命令（例えば、ＧＲＳＭにより指定される）により示されるように、保存されるレジスタのスナップショットを撮る。さらに、トランザクション状態干渉の追跡を開始する（ステップ１５０８）。例えば、トランザクション状態バッファ及びＴＢｅｇｉｎを追跡する。
【０１９１】
さらに別の態様において、図３８を参照して説明されるように、レジスタ保存要求に基づいて、スナップショットを撮ることができる。レジスタ保存表示（例えば、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ）を取得する（例えば、受け取る、提供する、有する、取り出す、決定する等）（ステップ１５２０）。レジスタ復元ファシリティが、トランザクション実行のために使用中であるかどうかを判断する（例えば、インジケータをチェックすることにより）（問い合わせ１５２２）。レジスタ復元ファシリティが、トランザクション実行のために使用中である場合、レジスタ状態をメモリ内に格納する（ステップ１５３０）。しかしながら、レジスタ復元ファシリティがトランザクション実行のために使用中でない場合、レジスタ復元ファシリティが、適合しない要求のレジスタ復元のために使用中であるどうかをさらに判断する（問い合わせ１５２４）。レジスタ復元ファシリティが、適合しない要求のレジスタ復元のために使用中である場合、処理はステップ１５３０に進み、そこで、レジスタ状態がメモリ内に格納される。
【０１９２】
しかしながら、レジスタ復元ファシリティがトランザクション実行のため、又は適合しない要求のレジスタ復元のために使用中でない場合、レジスタ復元スナップショットを作成し（例えば、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅにより指定されるレジスタのスナップショット）（ステップ１５２６）、例えば、メモリ内のトランザクションのトランザクション状態との干渉を識別するように適合されたトランザクション・ファシリティの論理を用いて、インメモリ・レジスタ復元バッファに対する干渉追跡を開始する（ステップ１５２８）。さらに、レジスタ状態がメモリ内に格納される（ステップ１５３０）。
【０１９３】
本発明の態様によるメモリ・バッファへの変更を追跡するためのトランザクション状態干渉追跡論理の使用によると、ステップ１５３０のインメモリ・レジスタ・バッファが、干渉チェック論理により、干渉に関して追跡される。従って、保存されるレジスタのコピーを含むインメモリ・バッファへの遠隔アクセスを受け取ると、干渉が記録される。本発明の一態様によると、干渉が記録される場合、干渉追跡論理を用いてレジスタ保存バッファの修正を判断するときに、ロールバックは生じない。本発明のこの態様によると、干渉が検知されるとき、レジスタが復元される際にインプロセッサ・レジスタ・スナップショットは用いられず、代わりに、レジスタは、インメモリ・レジスタ保存バッファから取り出される。少なくとも１つの実施形態によると、プロセッサ・ローカル・メモリ書き込み命令により、例えば書き込みを本発明の一態様による１つ又は複数のメモリ・バッファのアドレス範囲と比較することにより、インメモリ・レジスタ保存バッファ修正を追跡するように、付加的な追跡が行われる。
【０１９４】
付加的に、一態様において、図３９を参照して説明されるように、トランザクション・ロールバックに基づいて、スナップショットが復旧される。ロールバック要求（例えば、トランザクションのトランザクション状態との干渉又はＴｒａｎｓａｃｔｉｏｎ  Ａｂｏｒｔ（ＴＡｂｏｒｔ）命令の実行に応答して）ロールバック要求を取得する（例えば、受け取る、有する、提供する、取り出す、決定する等）（ステップ１５４０）。状態は、トランザクションの開始点にロールバックする（ステップ１５４２）。トランザクションのこのロールバックによると、レジスタ状態は、トランザクションの始めの状態に復元される（すなわち、そこで、図３６によるトランザクション実行のためのロールバック・スナップショットを作成するために、ＴＢｅｇｉｎが実行された）。トランザクション・ロールバックの実行は、例えば、プログラム・カウンタを復元することと、トランザクション・メモリの既知の実施によるアボートされたトランザクションのインメモリ影響をキャンセルこととを含む。トランザクション・ロールバックは、非アクティブとして示され（ステップ１５４４）、トランザクション・メモリ干渉追跡を非アクティブにする（ステップ１５４６）。
【０１９５】
さらに、一態様において、図４０を参照して説明されるように、レジスタ復元復旧要求に基づいて、スナップショットを復旧する。レジスタ復元復旧要求（例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ）を取得する（例えば、受け取る、提供する、有する等）（ステップ１５５０）、インコア・レジスタ復元ファシリティがアクティブかどうかについて判断する（ステップ１５５２）。インコア・レジスタ復元ファシリティがアクティブでない場合、メモリ状態から復旧する（ステップ１５５４）。しかしながら、インコア・レジスタ復元ファシリティがアクティブである場合、インメモリ・レジスタ復元バッファとの干渉があるか又はあったかどうかについてさらに判断する（問い合わせ１５５６）。干渉がる場合、レジスタ復元インメモリ追跡を非アクティブにし（ステップ１５５８）、処理はステップ１５５４に進む。
【０１９６】
インメモリ・レジスタ普及バッファとの干渉がない場合には、表示されるレジスタを、インコア状態（例えば、スナップショット）から復旧する（ステップ１５６０）。一例において、プログラム・カウンタ及びインメモリ効果ロールバックが排除される。レジスタ復元インメモリ追跡を非アクティブにする（ステップ１５６２）。
【０１９７】
上述のように、トランザクション・メモリ・ファシリティを用いて、変更を追跡することができる。一態様において、レジスタ復元の目標を達成するために、トランザクション実行のために用いられる動作をミラーリングすることにより、トランザクション状態が再利用されるが、トランザクション・ロールバック処理及びレジスタ復元は、異なる命令によりトリガされ、それらは、一方が復元のためにアクティブであるとき、他方がアクティブでないときに、例えば、トランザクション・ロールバック処理が行うように、レジスタ復元（例えば、ＬＭに基づいた）はプログラム・カウンタを復旧しない又はインメモリの変更をアンドゥ（undo）しないという点で、相互排他的である。
【０１９８】
１つ又は複数のさらに別の態様において、メモリ変更の追跡は、スナップショット・スタックと併せて行われる。上述のように、各エントリは、そのバッファのアドレス又はアドレス範囲を含むので、スナップショット・スタックは、バッファのリストを提供する。従って、書き込みがあるたびに、書き込みのアドレス又はアドレス範囲が、スタック内のアドレス又はアドレス範囲と比較される。少なくとも１つの実施形態において、メモリ保存変更の追跡のために用いられるスナップショット・スタックは、本発明の態様による対応するレジスタ復元操作のためのレジスタ保存操作により作成されるスナップショットＩＤを格納するために用いられる図１４によるスナップショット・スタックに対応し、これと共有される。図４１〜図４４を参照して、メモリ変更を追跡するために用いられる種々の技術の例が説明される。
【０１９９】
図４１を参照して説明される第１の技術は、新しいスナップショットを撮ることに関連する。例えば、一実施形態において、プロセッサにより、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ（ＳＴＭ）命令（又は、類似の命令）を取得する（例えば、受け取る、提供する、有する、取り出す、決定する等）（ステップ１６００）、スナップショット・スタック内に利用可能なエントリがあるかどうかについて判断する（問い合わせ１６０２）。利用可能なエントリがない場合、スナップショット・スタック・オーバーフローを実行する（ステップ１６０４）。例えば、エラーが表示される。利用可能なエントリがある場合、スタック先頭（top-of-stack)ポインタを更新する（例えば、１だけインクリメントされる（ステップ１６０６）。
【０２００】
さらに、スナップショットを作成し（ステップ１６０８）、スナップショット識別子をエントリ内に格納する（ステップ１６１０）。さらに、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅにより指定されるレジスタの内容をメモリ内に格納し（ステップ１６１２）、内容が格納される場所のメモリ・アドレス範囲を、エントリ（例えば、アドレス）に含める（ステップ１６１４）。さらに、エントリにおいて有効インジケータを（例えば、１に）設定し（ステップ１６１６）、ある場合には、他のフィールドも更新する（ステップ１６１８）。
【０２０１】
上記に加えて、図４２を参照して、個々のストア要求を実行している場合に変更を追跡するための技術が説明される。この実施形態において、このプロセッサの各ストアについて、スタックのチェックを行い、何らかのオーバーラップがあるかどうかを判断する。最初に、このプロセッサにより、ストア・アドレスと共にメモリ書き込み要求を取得する（例えば、受け取る、提供する、有する、決定する、取り出す等）（ステップ１６２０）。次に、スナップショット・スタック内の各エントリについて（ステップ１６２２）、このエントリのアドレス範囲がストア・アドレスと一致するかどうかを判断する（問い合わせ１６２４）。一致する場合、現在のエントリについての有効ビットをリセットする（例えば、ゼロに）（ステップ１６２６）。その後、又はこのエントリについてのアドレス範囲がストア・アドレスと一致しない場合、処理されるべきスナップショット・スタック内のエントリがそれ以上あるかどうかについてチェックを行う（問い合わせ１６２８）。エントリがそれ以上ある場合、処理はステップ１６２２に進む。他の場合には、処理は終了する。
【０２０２】
同様に、図４３を参照すると、他のプロセッサから受け取った書き込み要求についてチェックを行う。最初に、プロセッサは、排他的アクセス又はデータ更新を要求している別のプロセッサから、ストア・アドレスと共に遠隔メモリ書き込み要求を取得する（例えば、受け取る、提供する、取り出す、決定する、有する等）（ステップ１６４０）。次に、スナップショット・スタック内の各エントリについて（ステップ１６４２）、このエントリについてのアドレス範囲がストア要求のアドレスと一致するかどうかについて判断する（問い合わせ１６４４）。一致する場合、現在のエントリについての有効ビットをリセットする（例えば、ゼロに）（ステップ１６４６）。その後、又はこのエントリについてのアドレス範囲がストア要求のアドレスと一致しない場合、処理されるべきスナップショット・スタック内のエントリがそれ以上あるかどうかについてチェックを行う（問い合わせ１６４８）。エントリがそれ以上ある場合、処理はステップ１６４２に進む。他の場合には、処理は終了する。
【０２０３】
図４２及び図４３の技術は、スナップショット・スタック内の全てのエントリのアドレスのチェックに関して説明されるが、最適化した実施形態において、比較される書き込みの数及びスナップショット・スタック上のエントリを減らし、スナップショット無効化の試験を行うコストを減らすことができる。例えば、スヌープ・フィルタのような種々のフィルタリング技術が、スナップショット・スタック・エントリに対して比較される。幾つかの例示的なフィルタは、範囲フィルタとすることができ、例えば、図３０等によるキャッシュ等と共に、データ・キャッシュと関連したマーク・ビットとしてフィルタリングすることができる。別の最適化された実施形態において、例えば、取り出されるアドレスに基づいてどのエントリが試験されるかを判断することにより、スタック・エントリのサブセットを識別することができる。１つのこうした実施形態において、スナップショット・エントリは、対応するメモリ・バッファを含むキャッシュ・ラインに関連したエントリ・インジケータを有することができる。
【０２０４】
さらに別の実施形態において、図４４を参照して、バルク復元の受信に基づいてレジスタ復元を実行するための技術が説明される。最初に、プロセッサにより、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ（ＬＭ）命令又は類似の命令を取得する（例えば、受け取る、提供する、取り出す、有する、決定する等）（ステップ１６６０）。要求を取得するプロセッサは、ｌｏａｄ  ｍｕｌｔｉｐｌｅ操作が復元要求に対応するかどうかを判断する（問い合わせ１６６２）。ｌｏａｄ  ｍｕｌｔｉｐｌｅ操作が復元要求に対応しない場合、ｌｏａｄ  ｍｕｌｔｉｐｌｅ操作を実行する（ステップ１６６４）。しかしながら、ｌｏａｄ  ｍｕｌｔｉｐｌｅ操作が復元要求に対応する場合、対応する復元スナップショットが有効であるかどうかを判断する（問い合わせ１６６６）。対応する復元スナップショットが有効である場合、スナップショットを用いて、１つ又は複数のレジスタ・マッピングを復旧する（ステップ１６６８）。対応する復元スナップショットが有効でない場合、メモリ・バッファから、又はキャッシュ若しくはシステム・メモリから、値をロードするなどの別の技術を用いて、復旧が行なわれる（ステップ１６７０）。
【０２０５】
メモリ変更を追跡するために種々の実施形態及び／又は技術がここに提供されるが、本発明の態様の趣旨から逸脱することなく、他の変形、実施形態、及び／又は技術を提供することができる。
【０２０６】
本発明の別の態様によると、スナップショットの一部の損失を管理するための機能が提供される。インコア値からのレジスタ復元は、インコア・データ・ストアから値を復旧す技術を表す。一例において、これらのデータ・ストアは、他のプロセッサ機構（例えば、分岐予測ミス復旧及び正確な例外）を実施するために用いられるマイクロ・アーキテクチャ上の構造と共有される。インコア・データ・ストアの例は、復旧ファイル及びレジスタ・リネーム・マップ（例えば、スナップショット）である。しかしながら、一実施形態において、全ての値を復元することはできない。例えば、幾つかのレジスタは、それらが新しいアーキテクチャ化された値を保持するように再割り当てされているので、もはやそこからの復旧のために利用できないことがある。一実施形態において、割り当て時間追跡又はライブネス（liveness）の追跡により、上書きされた値が追跡される。
【０２０７】
一例において、最後の割り当て（又は、別の実施形態においては、書き込み時間）時間追跡の場合、各物理レジスタは、アーキテクチャ化された値を保持するために最後に割り当てられた（書き込まれた）時間と関連付けられる。次に、その割り当てられた時間（タグ）が作成された復元ポイントの時間（タグ）がより後である場合、値は利用可能でない。
【０２０８】
さらに別の態様において、全ての値（又はそのサブセット）のビットマップが作成されるか、又はレジスタ・リネーム・マップが構成される。レジスタが使用不能になるたびに、レジスタは、ビットマップ又はレジスタ・リネーム・マップから除去されるので、復旧の際、復元不能なレジスタは既知である。一実施形態において、ビットマップ又はレジスタ・リネーム・マップは、レジスタ復元スナップショットに対応する。
【０２０９】
本発明の態様によると、レジスタ復元のためのハイブリッド技術が提供される。ライブネス／可用性追跡機構に従って、インコア値が利用可能であると判断することができるとき、インコア値からのレジスタ復元が提供される。残りの値は、メモリからロードされる。
【０２１０】
図４５を参照して、本発明の態様による、復元要求を処理する一実施形態が説明される。最初に、復元要求（例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令）を取得し（例えば、受け取り、提供し、取り出し、決定し、有し等）（ステップ１７００）、それに基づいて、プロセッサは、復元されるレジスタに対応するスナップショットが有効であるかどうかを判断する（問い合わせ１７０２）。スナップショットが無効である場合、値がメモリから復元される（ステップ１７０４）。しかしながら、スナップショットが有効である場合、復元される各レジスタについて（ステップ１７０６）、例えば、時間追跡、ビットマップ等を介して、特定のレジスタをスナップショットから復元できるかどうかについて判断する（問い合わせ１７０８）。レジスタをスナップショットから復元できる場合、レジスタは、例えば、リネーム・マップを更新することにより、スナップショットから復元される（ステップ１７１０）。しかしながら、レジスタをスナップショットから復元できない場合、例えば、新しいリネーム・レジスタを対応するアーキテクチャ上のレジスタに割り当て、その値をメモリからロードすることにより、レジスタをメモリから復元する（ステップ１７１２）。
【０２１１】
一実施形態において、復元すべきレジスタがそれ以上あるかどうかについて判断する（問い合わせ１７１４）。復元すべき１つ又は複数のレジスタがある場合、処理は、ステップ１７０６に進む。
【０２１２】
上述のように、レジスタの復元のこの態様において、インコア値が存在する場合、インか値を取り出し、インコア値が存在しない場合、値をメモリからロードする。
【０２１３】
レジスタ・リネーム復元は、明示的な又は推定される復元ポイント・インジケータに基づいて、後の復元のためにプロセッサ状態をキャプチャする（例えば、Ｓｐｉｌｌｍ命令、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ命令、フレーム・ポインタ又はスタック・ポインタなどの明確なベース・レジスタの１つを用いるＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ命令）。さらに、レジスタ復元は、明示的な又は推定される復元要求（例えば、Ｒｅｌｏａｄｍ命令、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ命令、フレーム・ポインタ又はスタック・ポインタなどの明確なベース・レジスタの１つを用いるＬｏａｄ  Ｍｕｌｔｉｐｌｅ命令）時に実行される。
【０２１４】
しかしながら、１つのアプリケーションにより用いられる復元ポイントが、コンテキスト・スイッチ後、別のアプリケーションにより不正確に使用されることがある。特に、このことは、同じバイナリ若しくはライブラリの複数のインスタンスが実行することができ、又はフィンガープリントが一致することができ、１つのコンテキストにおける関数からの復元ポイントを、フィンガープリントに一致する同じバイナリ若しくはバイナリの別のプロセスの関数において復元を実行するために用いることができるので、例えば、バイナリの詳細なフィンガープリントを用いてさえ、スナップショット位置の識別が特定のバイナリを識別するときにも発生し得る。従って、本発明の態様によると、明示的な又は推論されるコンテキスト・スイッチ（例えば、１つのアプリケーション又は関数から別のアプリケーション又は関数へのスイッチ）の認識（cognizance）は、プロセッサ内に含まれる。一実施形態において、可能なコンテキスト・スイッチの検知に基づいて、復元ポイントの全て又はサブセットが無効化される。
【０２１５】
一例では、例えば、コンテキスト・スイッチ・ルーチンの一部として、１又は複数の復元ポイントを無効化するために用いられる無効化命令が提供される。一実施形態において、この命令は、オペレーティング・システムのコンテキスト・スイッチ・コードにより実行される。別の実施形態において、別のアプリケーション・モジュール（例えば、カーネル）へのスイッチを示す許可レベルの変更、従って、別のアプリケーションへの可能な将来のスイッチに基づいて、少なくとも１つの復元ポイントが無効化される。さらに別の実施形態において、このことは、こうしたシステム・コールが、ＰＯＳＩＸ  ｇｅｔｐｉｄシステム・コールなど短いものであり得るとき、レジスタ復元ポイントを、システム・コールを行う関数の存在下での使用を可能にするように行われない。
【０２１６】
さらに別の実施形態において、プロセス（例えば、ＬＰＩＤ（論理パーティションｉｄ）及びＰＩＤ（プロセスｉｄ）の一方又は両方）を示すレジスタの値の変更を用いて、タスク・スイッチを識別する。別の実施形態において、レジスタ・スナップショットは、特定のプロセスを示す表示（indicia）値と関連付けることができ、復元レジスタがレジスタ復元スナップショットを用いる前に、スナップショットＩＤと関連した表示とレジスタ復元を要求している現在のプロセスの表示との間の表示の一致が確認される。１つの例示的な実施形態におけるＬＰＩＤ及びＰＩＤなどの種々の表示を、実施形態において用いることができる。
【０２１７】
さらに、一実施形態において、無効化命令は、例えば、ｓｅｔｊｕｍｐ／ｌｏｎｇｊｕｍｐ処理、又はＣ＋＋／Ｊａｖａ構造化例外処理などのために、プログラム内の従来のものではない制御フローのために用いることもできる。他の例も存在する。
【０２１８】
図４６〜図４８を参照して、コンテキスト・スイッチを認識し、１つ又は複数のスナップショット（又は、その部分）を無効化するための例示的な技術に関するさらなる詳細が以下に説明される。
【０２１９】
図４６の例において、ｉｎｖａｌｉｄａｔｅ  ｒｅｓｔｏｒａｔｉｏｎ  ｓｎａｐｓｈｏｔ（復元スナップショット無効化）命令が用いられる。この命令は、例えば、それがｉｎｖａｌｉｄａｔｅ  ｒｅｓｔｏｒａｔｉｏｎ  ｓｎａｐｓｈｏｔ命令であることを示すオペレーション・コードと、無効化される１つ又は複数のスナップショットを示す又は決定するために用いられる１つ又は複数のフィールドとを有するアーキテクチャ化命令である。これは新しい命令であるので、一例において、オペレーティング・システムは、命令を認識し使用するように修正される。
【０２２０】
図４６を参照すると、プロセッサが、ｉｎｖａｌｉｄａｔｅ  ｒｅｓｔｏｒａｔｉｏｎ  ｓｎａｐｓｈｏｔ（復元スナップショット無効化）命令を取得する（例えば、受け取る、提供する、取り出す、決定する、有する等）（ステップ１８００）。本明細書で説明されるように、この命令は、コンテキスト・スイッチを判断することに基づいて開始することができる。命令の取得に基づいて、プロセッサは、無効化される１つ又は複数のスナップショットの命令による表示に基づいて、スナップショット・スタック上の少なくとも１つのエントリをクリアする（ステップ１８０２）。さらに、一例において、無効化される１つ又は複数のスナップショット内に示されるアドレスに対応するキャッシュ・エントリ内のマーク付けビットの１つ又は複数がクリアされる（例えば、ゼロに設定される）（ステップ１８０４）。
【０２２１】
図４７において、オペレーティング・システムの更新を要求するアーキテクチャ化命令を用いる代わりに、発見的手法(heuristics)を用いて、コンテキスト・スイッチがあるかどうかを判断し、従って、１つ又は複数のスナップショットが無効化される。図４７を参照すると、最初に、プロセッサが、コンテキスト・スイッチを示すプロセッサ状態の変更を検知するかどうかを判断する（問い合わせ１８２０）。例えば、プログラム状態語（program status word、ＰＳＷ）が変更され、又はアドレス変換テーブルへのポインタが変更され、その両方が、コンテキスト・スイッチを示し得る。これらの機構又は別の機構の１つによりコンテキスト・スイッチが示される場合、プロセッサは、無効化される１つ又は複数のスナップショットのスナップショット・スタック上の少なくとも１つのエントリをクリアする（ステップ１８２２）。さらに、一例において、無効化される１つ又は複数のスナップショット内に示されるアドレスに対応するキャッシュ・エントリ内のマーク付けビットの１つ又は複数がクリアされる（例えば、ゼロに設定される）（ステップ１８２４）。他の場合には、コンテキスト・スイッチが示されない場合、この処理は終了する。
【０２２２】
さらに別の実施形態において、無効化命令又は発見的手法の使用は、プロセッサにより動的に選択することができる。図４８を参照すると、プロセッサは、コンテキスト・スイッチがあったかどうかを判断するために、ｉｎｖａｌｉｄａｔｅ  ｒｅｓｔｏｒａｔｉｏｎ  ｓｎａｐｓｈｏｔ命令又は発見的手法技術のいずれかを動的に選択する（ステップ１８３０）。例えば、オペレーティング・システムが、こうした命令を認識しないバージョン・レベルにある場合、発見的手法が選択される。しかしながら、オペレーティング・システムが命令を認識する場合、オペレーティング・システムは、命令の発行を待って、又は発見的手法を用いて、スナップショットが無効化されるかどうかを判断することができる。命令を受け取ることにより、又は発見的に、無効化が実行されると判断される場合（問い合わせ１８３２）、プロセッサは、無効化されるスナップショット・スタック上の少なくとも１つのエントリをクリアする。さらに、一例において、無効化される１つ又は複数のスナップショット内に示されるアドレスに対応するキャッシュ・エントリ内のマーク付けビットの１つ又は複数がクリアされる（例えば、ゼロに設定される）（ステップ１８３６）。他の場合には、コンテキスト・スイッチが示されない場合、この処理は終了する。
【０２２３】
一態様において、レジスタ保存は、関数コール・バルク状態保存のためにインクリメンタルに行われ、レジスタは、例えば、ｒｅｇｉｓｔｅｒ  Ｓｐｉｌｌ  Ｍｕｌｔｉｐｌｅ命令の受信時に即座にメモリに保存されない。これに対応して、例えば、トランザクション・メモリ保存へのスイッチのためにインコア保存が終了するとき、レジスタが保存される。これは、例えば、移行の状態機械を用いて実施することができる。
【０２２４】
別の態様において、例として、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅの場合に、インクリメンタル状態保存が実行されると、例えば、それが書き込まれない場合でも、それを書き込みセットの一部としてマーク付けすることによって、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅのメモリ範囲を監視する。
【０２２５】
１つ又は複数の態様において、複数のバルク保存要求を受け取ることができ、従って、所定の要求が、実行されている処理と互換性がある（compatible）かどうかを判断する。例えば、既存のバルク保存要求が存在しない場合、受け取られる新しい要求は互換性がある。既存のバルク保存要求が存在し、バルク保存要求を受け取った場合、さらなる判断が行われ：レジスタが相互排他的である場合、それらは互換性があるとみなすことができる。それらが１つ又は複数のレジスタを参照し、介在する修正が生じた場合、それらは互換性があるとみなし得る。ハードウェアが複数のバルク保存／復元をサポートする場合、それらを互換性があるとみなし得る。
【０２２６】
既存のトランザクション・メモリ・ロールバック要求が存在し、トランザクション・メモリ・ロールバック要求を受け取った場合、さらなる判断が行われ：ネスト化トランザクションが平坦化されたトランザクションとして実施される場合、それらは互換性がある。ネスト化トランザクションが真のネスト化トランザクションであり、コンテキスト（例えば、スナップショット又は状態の他の保存）が利用可能である場合、それらは互換性がある。付加的な状態を保存するためのストレージがそれ以上残っていない場合、ネスト化トランザクションの平坦化を選択し、互換性を達成することができる。
【０２２７】
既存のトランザクション・メモリ・ロールバック要求が存在し、レジスタ保存要求を受け取った場合、さらなる試験が実行される。：複数のバルク要求がサポートされ、ストレージが付加的な状態のために利用可能である場合、それらは互換性があるとみなし得る。トランザクション・メモリ・ロールバック・セットとＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅセットとの間で共有されるレジスタに対して介在する変更が生じていない場合、それらは互換性がある。
【０２２８】
既存のバルク保存要求が存在し、トランザクション・メモリ・ロールバック要求を受け取った場合、さらなる試験が実行される。：複数のバルク保存がサポートされ、ストレージが付加的な状態のために利用可能である場合、それらは互換性があるとみなし得る。トランザクション・メモリ・ロールバック・セットとＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅセットとの間で共有されるレジスタに対して介在する変更が生じていない場合、それらは互換性がある。
【０２２９】
図４９を参照して、ＴＢｅｇｉｎ命令の受信に基づいた１つ又は複数のスナップショットの管理と関連した処理の一例が説明される。ＴＢｅｇｉｎ命令を取得する（例えば、受け取る、提供する、有する、取り出される、決定される）（ステップ１９００）。レジスタ復元ファシリティがアクティブに使用されているかどうかを判断する（問い合わせ１９０２）。レジスタ復元ファシリティがアクティブに使用されていない場合、トランザクション・ロールバック・スナップショットを作成し（例えば、ＴＢｅｇｉｎ命令により保存されるように指示されるレジスタのスナップショットを撮り）（ステップ１９１２）、トランザクション状態干渉の追跡を開始する（例えば、インメモリ書き込みがスナップショットのレジスタの１つに対応するかどうかを追跡する）（ステップ１９１４）。
【０２３０】
問い合わせ１９０２に戻ると、レジスタ復元ファシリティがアクティブに使用中である場合、トランザクション要求と互換性があるスナップショットが存在するかどうか（例えば、レジスタは同一か）について判断する（問い合わせ１９０４）。スナップショットが要求と互換性がある場合、トランザクション実行のために、レジスタ復元スナップショットが使用される（ステップ１９０６）。しかしながら、スナップショットが要求と互換性がある場合、それ以上のスナップショットを作成できるかどうか（例えば、スナップショット・スタック内にスペースがあるか）についてさらなるチェックを行う（問い合わせ１９０８）。それ以上のスナップショットを作成できる場合、処理はステップ１９１２に進む。他の場合には、レジスタ復元スナップショットを非アクティブにし（ステップ１９１０）、随意的に、例えば、それが前に格納されていない場合、スナップショットをメモリ内に格納する。別の実施形態において、復旧スナップショット及び復元スナップショットのための別個のスタックがある。
【０２３１】
図５０を参照して、１つ又は複数のスナップショットの管理と関連した処理の別の例が説明される。この例において、レジスタ保存指示要求（例えば、Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ）を取得する（例えば、受け取る、提供する、決定する、取り出す、有する等）（ステップ１９２０）。互換性のない要求のために、レジスタ復元ファシリティが使用中であるかどうかを判断する（問い合わせ１９２２）。ファシリティが、こうした要求のために使用中である場合、付加的なスナップショット（スナップショット・コンテキストと呼ばれる）のために、ストレージが利用可能かどうかについて判断する（問い合わせ１９２４）。利用可能でない場合、レジスタ状態をメモリ内に格納する（ステップ１９３２）。しかしながら、それ以上のスナップショット・コンテキストが利用可能である場合、又はレジスタ復元ファシリティが互換性のない要求のために使用中でない場合、レジスタ復元スナップショットを作成する（ステップ１９２６）。さらに、インメモリ・レジスタ復元バッファのための干渉追跡を開始する（ステップ１９２８）。随意的に、レジスタ状態をメモリ内に格納する（ステップ１９３２）。
【０２３２】
さらに別の態様において、復元されるレジスタの範囲を決定するために、複数のｌｏａｄ及びｓｔｏｒｅ命令を合体する（coalesce）ための機能が提供される。例えば、プロセッサは、それぞれ単一の復元及び保存操作に合体することができる個々のロード及びストア操作のシーケンスを認識するように適合される。合体は、種々の技術を用いて行うことができる。
【０２３３】
本発明の態様の１つ又は複数の実施形態によると、ロード及びストアのシーケンスの合体を用いて、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの汎用レジスタのためのＳＴＭＧ及びＬＭＧ、又はＰｏｗｅｒ  ＩＳＡ固定小数点のためのＳＴＭＷ及びＬＭＷのような、ｂｕｌｋ  ｓａｖｅ及びｒｅｓｔｏｒｅ命令なしに、レガシー・コード・シーケンスと併せて本明細書で説明されるレジスタ復元技術の使用を可能にする。特に、これは、とりわけ、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ及びＰｏｗｅｒ  ＩＳＡにおける浮動小数点レジスタ、及びｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ及びｌｏａｄ  ｍｕｌｔｉｐｌｅ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ命令が存在しないＰｏｗｅｒ  ＩＳＡにおけるベクトル・レジスタのような、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ及びＰｏｗｅｒ  ＩＳＡにおける幾つかのレジスタ・タイプのバルク保存を含む。さらに、幾つかアーキテクチャは、いずれのレジスタ・タイプに対しても、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ及びｌｏａｄ  ｍｕｌｔｉｐｌｅ命令を提供しない。
【０２３４】
一実施形態において、各ストア要求は、認識できる複数の合体シーケンスのストアを開始することができる。別の実施形態において、特定のストア要求だけが、認識することができる合体シーケンスをトリガする。これは、例えば、動作している付加的な論理と関連した電力及び他のオーバーヘッドを回避するためである。１つ又は複数の実施形態において、合体シーケンスは、例えば、フレーム・ポインタ、スタック・ポインタ、又は他の顕著なレジスタなどの特定のレジスタをベース・レジスタとして用いるストア要求によってのみ開始される。別の実施形態において、隣接するアドレスを有する少なくとも第１及び第２の命令（命令のイメージ、すなわち、データ・サイズに対応する同じベース及び変位差に基づく）がシーケンスを開始する。他の例も可能である。
【０２３５】
一実施形態において、合体シーケンスの第１のストアが行われると、レジスタ・ファイル（例えば、レジスタ・ファイル・マップ等）がスナップショットされる。一例では、ビット・マスクが初期化され、スナップショットからどのレジスタを復元できるかを示す。レジスタへの後の書き込みは、ビット・マスクにおいて、特定のレジスタが、もはやスナップショット内の値に対応しないことを示す。従って、後のストアがこうしたレジスタを参照するとき、これは、合体シーケンスと独立して別個に実行する、新しい合体シーケンスを開始するかのいずれか、又はその両方である。同様に、一実施形態は、ストアが、初めに連続したストレージに等しい（例えば、第１のストアが、レジスタｒ１の変位ｄ１において生じた場合、レジスタｒ２は、同じベースを用いて、変位ｄ２＝ｄ１＋（語のサイズ）＊（ｒ２−ｒ１）において格納される）ことを要求し得る。他の実施形態において、命令シーケンスに対して厳密な順番を課すことがあり、例えば、前の命令がレジスタＲ（Ｎ）を格納した場合、各ストアは、レジスタＲ（Ｎ＋１）を格納することになり、単一のカウンタが実施形態を追跡するのを可能にする。他の変形も可能である。一実施形態において、発見的手法を用いて、スナップショットの作成をトリガし得るストアを制限する。
【０２３６】
別の実施形態において、本発明の態様による状態のスナップショット撮影及びレジスタ復元をトリガすることができる、個々のストア及びロードのストア及びロードのグループへの合体は、グループ形成と併せて行われる。一態様によると、命令がグループ化され、ストア範囲内のレジスタの修正に介在することなく、隣接するストアを保持する。一例として、制御論理は、ストアが連続的に行われること、例えば、共通の(修正されていない)ベースに関連した変位ｄ１及びｄ２においてｄ２＝ｄ１＋（語のサイズ）＊（ｒ２−ｒ１）（及び、一例においては、インデックスない、又は同じ修正されていないインデックス）であることを保証する。
【０２３７】
一実施形態において、ロードは、ストアと類似した方法で合体される。別の実施形態において、ロードは、単独で実行され、そこで、少なくとも１つの実施形態において、レジスタ復元のオーバーヘッドは、主として、インコア復元のために格納された値を取り出すための機構を格納し保持することと関連付けられるので、各ロードについて、対応するリネーム・レジスタは、レジスタ・スナップショットから個々に取り出される。
【０２３８】
認識することは、事前デコード、グループ形成及びデコード段階の１つにおいて実行される。追跡キャッシュ、ループ・キャッシュ、又は他のこうしたキャッシュを用いる他の実施形態において、認識することは、ループ、追跡、又はｉｏｐ（内部操作）キャッシュを作成及び／又は最適化するように適合された論理に動作可能に結合することができる。
【０２３９】
一態様において、インコア値プールからレジスタを復元するための技術は、隣接するレジスタの隣接する個々のストア命令のシーケンスを認識すること、復元のために単一のスナップショットを作成し保持すること、及び単一のスナップショットを用いて、単一のスナップショットからレジスタをバイパスすることを含む。
【０２４０】
図５１を参照して、スナップショットの作成のために個々のレジスタ・ストア要求を合体する一実施形態が説明される。単一のストア要求を取得する（例えば、受け取る、有する、提供する、取り出す、決定する等）（ステップ２０００）。これがストア・シーケンス（例えば、マルチ・ストア／レジスタ・スピル・シーケンス）の可能な開始であるかどうかについて判断する（問い合わせ２００２）。これは、レジスタのサブセット、アドレッシング・モード、アドレッシング範囲、又はレジスタ・スピル・シーケンスの別の表示をチェックすることを含むことができる。これが可能なストア・シーケンスの開始ではないと判断される場合、１つ又は複数のストアを実行する（ステップ２００４）。しかしながら、これがストア・シーケンスの可能な開始である場合、現在のストア要求を用いる将来のレジスタ復元スナップショット要求を追跡する（ステップ２００６）。
【０２４１】
次の命令がストア要求の継続であるかどうかについて判断する（問い合わせ２００８）。次の命令がストア要求の継続である場合、次の命令をストア要求に付加する（ステップ２０１０）。処理すべき命令がそれ以上あるかどうかについてチェックを行う（問い合わせ２０１２）。それ以上ある場合、処理は問い合わせ２００８に進む。
【０２４２】
次の命令がストア要求の継続でない場合（問い合わせ２００８）、レジスタ復元スナップショットが望ましいかどうかについて判断する（問い合わせ２０１４）。つまり、将来のスナップショットが、スナップショットを価値のあるものにするのに十分なレジスタを有するか？スナップショットが望ましい場合、スナップショットを作成するために、レジスタ復元スナップショット技術を実行する（ステップ２０１６）。しかしながら、スナップショットが望ましくない場合、１つ又は複数のストアを実行する（ステップ２０１８）。少なくとも１つの実施形態によると、スナップショットを作成及び管理するコストを償却するために、特定の最小数のレジスタを保存するスナップショットが望ましい。従って、少なくとも１つの実施形態において、将来のスナップショットが設定された閾値よりも多くのレジスタを有するとき、これは望ましいと考えられる。別の実施形態において、スナップショットの望ましさは、可能なランタイムの改善に基づいて推定される。少なくとも１つの実施形態において、将来のスナップショットが、設定された閾値よりも多くのランタイムの改善を提供するとき、これは望ましいと考えられる。他の可能性も存在する。
【０２４３】
図５２を参照して、個々のレジスタ復元要求を合体する１つの実施形態が説明される。単一のロード要求を取得する（例えば、受け取る、有する、取り出す、決定する、提供する等）（ステップ２０４０）。これが、レジスタ復元シーケンスの可能な開始であるかどうかについて判断する（問い合わせ２０４２）。これは、レジスタのサブセット、アドレッシング・モード、アドレッシング範囲、又はレジスタ再ロードの別の表示をチェックすることを含むことができる。少なくとも１つの実施形態において、問い合わせ２０４２は、ロード要求が、復元されるレジスタ及び指定されるインメモリ記憶位置に対する最新のレジスタ・スナップショットに対応するかどうかの試験を含む。これが可能な復元シーケンスの開始ではないと判断される場合、１つ又は複数のロードを実行する（ステップ２０４４）。しかしながら、これが復元シーケンスの可能な開始である場合、現在のロード要求を用いて将来のレジスタ復元要求を追跡する（ステップ２０４６）。
【０２４４】
次の命令が復元要求の継続であるかどうかについて判断する（問い合わせ２０４８）。次の命令が復元要求の継続である場合、次の命令を復元要求に付加する（ステップ２０５０）。処理される命令がそれ以上あるかどうかについてチェックを行う（問い合わせ２０５２）。それ以上ある場合、処理は問い合わせ２０４８に進む。
【０２４５】
次の命令が復元要求の継続でない場合（問い合わせ２０４８）、復元要求がレジスタ復元スナップショットと一致するかどうかについて判断する（問い合わせ２０５４）。一致する場合、レジスタ復元スナップショット復元技術を実行する（ステップ２０５６）。他の場合には、１つ又は複数のロードを実行する（ステップ２０５８）。
【０２４６】
１つ又は複数の態様において、Ｓｐｉｌｌｍ命令に遭遇したとき、インコア・レジスタ復元スナップショットが作成される。付加的に、インコア・レジスタ復元スナップショットが無効化された場合、スピルされた（spilled）レジスタを、一時的記憶場所（一般的に、現在の関数のスタック・フレーム）に格納する。Ｓｐｉｌｌｍレジスタの内容をストア・キュー上に置き、これをメモリに書き込む。
【０２４７】
レジスタ・スナップショットが有効である場合、レジスタを、例えば、Ｒｅｌｏａｄｍ命令により、インコア・レジスタ復元スナップショットから復元する。他の場合には、Ｒｅｌｏａｄｍは、値をメモリ（例えば、現在の関数のスタック・フレーム内の一時的ストレージ領域）から再ロードする。
【０２４８】
一態様において、Ｒｅｌｏａｄｍ命令が完了すると、キャッシュに、最終的にはシステム・メモリに書き込まれる、Ｓｐｉｌｌｍ命令に基づいて格納される値が、依然としてストア・キューへの待ち行列に入れられることがある。ひとたびＲｅｌｏａｄｍが完了すると、バッファへのさらなる読み取りは行われない。従って、これらの値は、ストア・キュー内の貴重な空間を使い果たし、ストア・キュー内の後のストアに対する時間遅延、並びに、役立たないことが分かっているストアの処理中のエネルギー消費を引き起こす。従って、一例において、Ｒｅｌｏａｄｍ命令が完了すると、Ｓｐｉｌｌｍ／Ｒｅｌｏａｄｍ保存／復元シーケンスに対応するストア・キュー・エントリが無効化される。例えば、それらは、ストア・キューから除去されるか、又はそれらが、メモリ階層にコミットされるストア・キューの先頭にきたときに、書き込まれない。他の例も存在する。
【０２４９】
さらに別の実施形態において、遠隔相互無効化（cross-invalidate、ＸＩ）を受け取ると、Ｓｐｉｌｌｍで識別されたストア・キュー・エントリは提供されない。さらに、別の実施形態において、遠隔ＸＩを受け取ると、Ｒｅｌｏａｄｍが完了したＳｐｉｌｌｍで識別されるストア・キュー・エントリは提供されない。
【０２５０】
ストア・キューを管理する態様が、本発明の１つ又は複数の態様により増強されるストア・キュー・ライトバック論理により制御される。図５３に示されるように、一例において、ストア要求（ＳＲＱ）ライトバック論理２１００が、ストア・キュー２１０２内に配置され、このストア・キュー２１０２は、各ストア・キュー・エントリについてアドレス情報２１０４及びデータ２１０６をさらに含む。ストア・キュー２１０２は、中央処理ユニット（ＣＰＵ）２１１２のロード／ストア・ユニット（ＬＳＵ）２１１０からストア要求２１０８を受け取る。ＣＰＵ２１１２は、例えば、命令デコード・ユニット２１１６を用いてデコードされる命令をフェッチする命令フェッチ・ユニット（ＩＦＵ）２１１４をさらに含む。デコードされた命令は、１つ又は複数の実行ユニット２１１８を介して実行することができる。
【０２５１】
示されるように、ロード／ストア・ユニットは、ストア要求２１０８をストア・キュー２１０２上に置く。ストア要求ライトバック論理２１００は、１つ又は複数のキャッシュ２１２４及びメモリ２１２６を含むことができるメモリ・サブシステム２１２２へのライトバックを実行する。本発明の態様によると、図５４を参照すると、ライトバック論理は、以下を含む。：
【数１１】
2020518895.tif 000013
【０２５２】
上記及び図５４に示される論理は、下向きに伸びる、すなわち、スタック・ポインタの値より小さいアドレスがスタックの部分ではない、プロセッサ・スタックを参照して説明されるが（問い合わせ２１５６）、当業者であれば、本明細書での教示は、プロセッサ・スタックが上向きに伸びる、すなわち、例えば、「より小さい」場合の試験を上記の、図５４の問い合わせ２１５６の例示的なライトバック論理疑似コードにおける「より大きい」場合の試験と置換することにより、スタック・ポインタより大きいアドレスがスタックの部分ではないアーキテクチャに適合され得ることを理解するであろう。
【０２５３】
別の実施形態において、図５５を参照すると、ライトバック論理は、：
【数１２】
2020518895.tif 000014
【０２５４】
一実施形態において、図５４〜図５５の処理は、それらの命令が、バッファが特定の時点（例えば、ストアとロードとの間）における書き込みに対してプログラマーがアクセス可能でないことを示すので、Ｓｐｉｌｌｍ／Ｒｅｌｏａｄｍ命令と関連して実行される。別の実施形態において、１つ又は複数の命令又は他の機構を用いて、ｌｏａｄ  ｍｕｌｔｉｐｌｅ状態の復元後、又は別の選択された時点の後、もはやストレージ・バッファにアクセスできないことを示す。
【０２５５】
さらに他の実施形態において、スタック・ポインタの下方のスタック領域（すなわち、スタックを保持するために割り当てられたアドレス空間内のページ）内に格納されるデータは、もはや使用されないと考えられ、ストア・キューからのライトバックの際、及び／又はＸＩ相互問い合わせ（cross-interrogate）要求に応答して抑止される。こうした実施形態において、データがスタック・ポインタの下方に割り当てられる最適化は許容可能でない。データをスタック・ポインタの下方に割り当てることができる（例えば、Ｐｏｗｅｒ  ＥＬＦｖ２  ＡＢＩ、又はＬｉｎｕｘ用のＡＭＤ  Ｒｅｄ  Ｚｏｎｅ仕様のようＡＢＩにより定められる領域における）最適化をサポートする別の実施形態においては、スタック・ポインタを超えてデータを割り当て、アクセスすることができる定められた領域を超えてデータが書き込まれるとき、データのライトバックは阻止され、例えば、Ｐｏｗｅｒ  ＥＬＦｖ２  ＡＢＩに従って、スタック・ポインタの下方に５１２バイトより多いアドレスについて、ストア・キューからのライトバックを抑止することができる。
【０２５６】
本発明のさらに別の態様において、レジスタ復元スナップショットへの代案を用いることができる。この代案は、復旧ファイル（recovery file）とも呼ばれる復旧バッファである。予測ミス又は例外の場合、レジスタ値は、スナップショットではなく、復旧バッファから復旧することができる。レジストが上書きされるたびに、それらが復旧に必要とされる場合、古い値が復旧ファイル・キュー内に格納される。こうした復旧ファイルの一例が、図５６に示される。一例において、復旧バッファ２２００がキューとして実装され、実行される命令２２０２に対応する１つ又は複数のレジスタ復旧値を含む。一例として、復旧バッファ２２００は、復旧されるレジスタ番号、Ｒｎ、Ｒｋ、Ｒｍ等を有する複数のレジスタ２２０４と、復旧されるレジスタ値２２０６とを含む。命令タグ２２０８が、各レジスタ２２０４に割り当てられる。キューは、命令により上書きされる値を復旧することによりロールバックすることができる最も古い命令に対応する復旧レジスタを指し示すテール・ポインタ２２０９と、最も若い命令に対応する復旧値を指し示し、命令の実行に応答して付加的な復旧値が挿入される位置を示すヘッド・ポインタ２２１０とを有する。
【０２５７】
一態様において、格納された復旧値が、復元する命令と関連付けられる。格納される値は、命令により上書きされ、命令がフラッシュされると、復旧が実行される。フラッシュされた命令の各々について、値が復旧バッファ２２００から復旧され、命令に対応する復旧値２２０６を読み取る、状態機械を提供することができる。状態機械は、順方向又は逆方向走査を有することができる。
【０２５８】
図５７を参照して、復旧バッファに関するさらなる詳細が説明される。一例において、命令は、命令フェッチ・ユニット２２２２により命令キャッシュ２２２０からフェッチされ、命令デコード・ユニット２２２４によりデコードされる。１つ又は複数のレジスタ・ファイルから、オペランドが取得される。レジスタ・ファイルからの値が修正される場合、これは、復旧バッファのヘッドにおける復旧バッファ２２２８内に格納される。１つ又は複数の実行ユニット２２３０は、命令を実行し、完了及び復旧ユニット２２３２は、命令を完了する、又は予測ミス又は例外がある場合、処理は、後方にウォークする復旧バッファ２２２８に進み、一例において、予測ミス又は例外ポイントにおけるイン・オーダー方式のレジスタ状態が復元されるまで、復元される各値を復旧バッファ２２２８からレジスタ・ファイル２２２６にコピーする。
【０２５９】
本発明の一態様によると、高速プロセッサ・メモリ内に格納された復旧値を用いて、ｌｏａｄ  ｍｕｌｔｉｐｌｅ、ｃｏａｌｅｓｃｅｄ  ｌｏａｄ  ｍｕｌｔｉｐｌｅシーケンス、又はＲｅｌｏａｄｍ命令に対応するレジスタ復元要求に応答して値を復元する。
【０２６０】
一例において、レジスタが上書きされるとき、古い値は、復旧バッファ内に格納される。復旧の際、復旧バッファ内の値をもとのレジスタ・ファイルにコピーする。一例において、プロセッサは、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅへの入口にある値を取り出すために、復旧ファイルをステップ・スルーする。例として、レジスタ値を復元するための復旧バッファのステップ・スルーは、逆方向走査又は順方向走査を介して行われる。（１つの特定の例において、指定されたレジスタに対する保存要求に連続する最も古い復旧エントリが復元される。）順方向走査のための論理の一例が、以下に示される。：
【数１３】
2020518895.tif 000015
【０２６１】
上記の例によると、各レジスタについて、Ｒｅｓｔｏｒｅは、レジスタが依然として復元されるかどうかを追跡する。これは、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ（又は、Ｒｅｌｏａｄｍ）命令により指定されるレジスタに対応する全てのレジスタを復元するように初期化される。Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ（ＬＭ）が状態を復元する、対応するＳｔｏｒｅ  Ｍｕｌｔｉｐｌｅ（ＳＴＭ）のタグを特定できない場合、特別な処理を実行する。少なくとも１つの実施形態において、特別な処理は、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ又はＲｅｌｏａｄｍ命令内で指定されるメモリ位置から値をロードすることに対応する。
【０２６２】
次に、疑似コードが、レジスタ保存命令（例えば、ＳＴＭ  Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ又はＳｐｉｌｌｍ）のタグに対応する復旧バッファ・エントリから開始する復旧バッファを通り、命令復元レジスタ（例えば、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ又はＲｅｌｏａｄｍ）まで、順方向に走査する。
【０２６３】
各エントリについて、特定の復旧バッファ・エントリ内に含まれるレジスタ番号（図５６の２２０４）を示す少なくとも１つのフィールドＲｅｃ．ｒｅｇと、レジスタに復元される値、Ｒｅｃ．ｖａｌｕｅ（図５６のフィールド２２０６）とからなる、復旧バッファ・エントリを読み出す（すなわち、値ＲｅｃＦｉｌｅ［］により表される）。レジスタが、Ｌｏａｄ  Ｍｕｌｔｉｐｌｅ又はＲｅｌｏａｄｍのレジスタの１つに対応する場合、ＳＴＭ  Ｓｔｏｒｅ  Ｍｕｌｔｉｐｌｅ（Ｓｐｉｌｌｍ）後に上書きされた第１の（最も古い）値が復元される。
【０２６４】
復旧バッファから復元されていない、Ｒｅｓｔｏｒｅ［］内のいずれの残りのレジスタも、メモリから復元される。
【０２６５】
同様に、逆方向走査において、論理は以下を含む。：
【数１４】
2020518895.tif 000016
【０２６６】
さらに別の態様において、復旧ファイル・テールを超える値を復旧することができる。これは、値が上書きされていない場合に実行することができ、そのことは、ヘッドがテール・エントリを上書きすることに応答して移動するヘッド／第２のテールの最高水位線に対して比較することにより、判断することができる。ヘッドが第２のテールより大きいか又はこれに等しい場合、第２のテールは、ヘッドに等しい。
【０２６７】
本明細書で説明されるように、例外及び分岐予測ミス復旧、並びにレジスタ復元により復元される実際の状態が、一例において、物理レジスタ内に含まれる。新しいレジスタへの書き込みのために、物理レジスタが割り当てられ、書き込まれるアーキテクチャ上のレジスタが、割り当てられた物理レジスタにマッピングされ、物理レジスタに書き込まれる。本発明の態様によると、物理レジスタは、レジスタ復元要求に応答してジスタを復元するためのソースとして物理レジスタの有用性を最大にするように、レジスタ書き込み要求宇に応答して割り当てられる。例えば、物理レジスタ・ファイルからの新しいレジスタのための割り当て技術が、レジスタ復元スナップショットと関連付けられていないレジスタの選択を優先するように修正される。さらに、少なくとも１つの実施形態において、レジスタがレジスタ復元スナップショットから取得される場合、選択は、スナップショットから、又は最小の性能への影響を有するスナップショットから復元されるレジスタの一部とすることができない物理レジスタを選択することにより、性能への影響を最小にするように行われる。少なくとも１つの実施形態において、最小の性能への影響に対応するスナップショットは、最も古いスナップショットである。本発明の１つ又は複数の態様によると、この処理は、図５８〜図５９を参照してさらに説明される。
【０２６８】
図５８を参照すると、一例において、使用されていない物理レジスタが利用可能かどうかを判断する（問い合わせ２３００）。使用されていない物理レジスタが利用可能である場合、使用されていないレジスタを選択し、割り当てる（ステップ２３０２）。しかしながら、使用されていない物理レジスタが利用可能でない場合、本発明の態様に従って、レジスタを選択する（ステップ２３０４）。例えば、復旧（例えば、予測ミス、例外等）のためのアクティブなスナップショット内にない；すなわち、レジスタ復元スナップショット内で用いられるが、復旧スナップショット内で用いられないレジスタが選択される。一例において、例えば、最も古いスナップショットが、すぐ空けることができるレジスタを有する可能性が高いので、レジスタは最も古いスナップショットから選択され、より若いスナップショットにおけるレジスタは迅速に使用できないことがあるので、より古いスナップショットからのレジスタを選ぶのがより低コストであり得る。別の実施形態において、復元されるレジスタ、すなわち、ＳＴＭ又はＳｐｉｌｌｍ命令により保存されるように指定されたレジスタの範囲外のレジスタに対応しないレジスタが、レジスタ復元スナップショットから選択される。
【０２６９】
さらに、レジスタは、スナップショットにおいて無効としてマーク付けすることができ（ステップ２３０６）、又はレジスタ復元スナップショットを割り当て解除することができる（ステップ２３０８）。レジスタ復元スナップショットが割り当て解除されると、そのスナップショットと関連付けられたレジスタは、それらが別のスナップショット内でも使用されるレジスタに対応しないとき、利用可能になる。
【０２７０】
次に、選択されたレジスタが割り当てられる（ステップ２３１０）。
【０２７１】
図５９を参照して、レジスタを割り当てるための別の実施形態が説明される。一例において、使用されていない物理レジスタが利用可能かどうかについて判断する（問い合わせ２３３０）。使用されていない物理レジスタが利用可能である場合、使用されていないレジスタを選択し、割り当てる（ステップ２３３２）。しかしながら、使用されていない物理レジスタが利用可能でない場合、最も古いスナップショットを選択し（ステップ２３３４）、選択されたスナップショットがレジスタ復元スナップショットであるかどうかを判断する（問い合わせ２３３６）。選択されたスナップショットがレジスタ復元スナップショットである場合、それを割り当て解除し、それらが別のスナップショット内にない場合、それと関連したレジスタを利用可能にするのを可能にする（ステップ２３４０）。処理は、問い合わせ２３３０に進む。
【０２７２】
問い合わせ２３３６に戻ると、選択されたスナップショットがレジスタ復元スナップショットでない場合、処理は、最も古いスナップショットが非アクティブになるのを待つ（ステップ２３３８）。処理は、問い合わせ２３３０に戻る。
【０２７３】
他の実施形態において、最も古いスナップショットが非アクティブになるのを待つ代わりに、他のスナップショットをチェックすることができる。さらに、他の実施形態において、最初に最も古いもの以外のスナップショットを選択することができる。多くの変形が可能である。
【０２７４】
本明細書で説明されるように、分岐予測ミスの復旧及び正確な例外の実施のために、リネーム・レジスタ及びリネーム・マップ（例えば、スナップショット）を用いることができる。例外又は分岐予測ミスが発見されると、イン・オーダー方式のプログラム状態を、レジスタ・リネーム・マップ及び物理レジスタから、ストア・キュー（及び潜在的には、例えば、トランザクション・メモリを用いる実施形態における、可能なキャッシュ）内に投機的に格納された状態をフラッシュすることにより、復旧することができる。例外又は分岐予測ミスがもはや発生しない場合、命令はコミットされているので、レジスタ・リネーム・マップ及び物理レジスタを割り当て解除し、再使用することができる。
【０２７５】
少なくとも１つの実施形態によると、分岐予測ミスの復旧及び正確な例外を実施するために用いられるリネーム・レジスタ及びリネーム・マップは、プログラム状態を保存及び復元するため、例えば、関数呼び出しの文脈において、それぞれ呼び出し元及び呼び出し先における呼び出し元保存レジスタ及び呼び出し先保存レジスタを復旧するためにレジスタ復元を実施するためにも用いられる。
【０２７６】
さらに、一実施形態によると、レジスタ・スナップショットは、分岐予測ミスの復旧を実施するためにイン・オーダー方式で作成され、アウト・オブ・オーダー方式の実行の存在下で正確な例外を実施する。一実施形態において、レジスタ復元を用いて、アーキテクチャ化した状態を復旧するために、付加的なスナップショットが作成される。しかしながら、レジスタ復元のためにこうしたレジスタ・スナップショットを保持することにより、不十分な数の空いたレジスタが利用可能となり、新しいターゲット・レジスタを実行することができないとき、実行中にプロセッサが進行するのを妨げる。
【０２７７】
また、レジスタ復元スナップショットを割り当てることができるが、復旧は決して行われ得ない。例えば、構造化したＣ＋＋／Ｊａｖａ例外処理により、その状態を絶えず復元することなく、関数がアボートすることがあり、又は、ｓｅｔｊｕｍｐ／ｌｏｎｇｊｕｍｐは同様に、レジスタ復元のために割り当てられたレジスタ・スナップショットを割り当て解除できるレジスタ復元に直面するのを防止することができる。
【０２７８】
一実施形態によると、レジスタ・スナップショットは、別個のキュー内に保持され、スナップショット内で参照されるリネーム・レジスタが、割り当て解除されることを防止し、レジスタ・スナップショットは、空いたレジスタの適切な供給を保証することに基づいて、レジスタ・スナップショットを再利用することができる。従って、レジスタのフリーリスト、すなわち、新しいレジスタ割り当て要求を満たすために用いられるレジスタ・リネーム・プールは、特定の数のレジスタを下回り、フリーリストがターゲット・サイズに達するまで、レジスタ・スナップショットを割り当て解除することができる。ターゲット・サイズは、固定閾値とすることができ、又はスナップショットを割り当て解除し、利用可能な付加的なレジスタにするのに必要とされるサイクル数により潜在的に重み付けされる現在のワークロードにより割り当てられる新しいリネーム・レジスタの数の推定値に基づくことができる。（一実施形態において、その閾値は０とすることができ、スナップショットは、リネーム・レジスタ割り当て要求を満たすためにのみ割り当て解除される。しかしながら、そのポリシーは、命令が、リネーム・レジスタが利用可能になるのを待っている間、リソース・ストールをもたらし得る。）
【０２７９】
一実施形態において、レジスタ・リネーム・スナップショット及びその関連したレジスタを割り当て解除し、ＦＩＦＯ（先入れ先出し）ポリシーでリネーム・フリーリストに再利用し、そこでもまた、最も早く割り当てられたスナップショットを最初に割り当て解除する。別の実施形態において、レジスタ復元により用いられたレジスタ・スナップショットもまた即座に割り当て解除され、このことは、関数呼び出しに用いられるスタック・モデルの特定の利点を利用することができ、ここで、一番最近入力された関数が最初に終了され、従って、そのレジスタ復元状態は、最初に割り当て解除に利用可能になり得る。
【０２８０】
別の実施形態において、最新のバルク保存要求に対応する単一の（又は、最後のｎ個の、ここでｎは、２のような小さい整数）スナップショットのみが、レジスタ復元のために格納される。これは単一の関数呼び出しのためのレジスタ復元のみをサポートするが、これらがどちらも動的に最も高頻度であり（多くのワークロードにおいて、関数呼び出しの５０％以上がリーフ関数である）、性能を低下させるストール・サイクルをもたらすロード／ヒット／ストア・インターロックに関して最大の悪影響を有するとすると、設計の複雑さごとに達成される利得の関係に関して最大の利点を提供する。
【０２８１】
少なくとも１つの実施形態において、レジスタ復元のためのレジスタ・スナップショットが、マスク制御下でキャプチャされるので、スナップショットは、Ｓｐｉｌｌ／ＳＴＭ要求により列挙されるレジスタのみを含み、リネーム・レジスタが、不必要に再割り当てするのを防止することができる。
【０２８２】
別の実施形態において、レジスタ復元のために作成されたレジスタ・リネーム・マップ・スナップショット内に列挙することができるレジスタ保存／復元シーケンスに対応するレジスタは、独立して保持されない。代わりに、リネーム・レジスタは、分岐予測ミスの復旧及び正確な例外を実施するためにそれらの使用に基づいて割り当て解除される。レジスタがもはや必要とされなくなると、それらは、フリーリスト・プールに戻される（例えば、Ｂｕｔｉ他のもののような実装に従って）。
【０２８３】
一実施形態において、フリーリスト選択アルゴリズムが、レジスタ復元スナップショットにより参照されないフリーリストからレジスタを選択するように修正される。別の実施形態において、フリーリスト選択アルゴリズムは、他のリネーム・レジスタより早くレジスタ・リネーム・スナップショットに割り当てられたフリーリストからレジスタを選択するように修正される。さらに別の実施形態において、フリーリスト選択アルゴリズムは、アクティブなレジスタ・リネーム・スナップショット（すなわち、例えば対応する関数のために、レジスタ状態を復元するために既に用いられた一番最近割り当てられたスナップショットを除く）により参照されないフリーリストから、レジスタを選択する。さらに別の実施形態において、これらの３つの基準及び付加的な基準のいずれかの組み合わせを用いることができる。さらに別の実施形態において、これらの３つの基準及び付加的な基準の全ての組み合わせを用いることができる。他の可能性も存在する。
【０２８４】
本明細書で説明されるのは、レジスタ復元処理の種々の態様及び実施形態である。多数の例及び技術が提供されるが、本発明の態様の趣旨から逸脱することなく、変形及び／又は追加を作成することができる。
【０２８５】
本発明の１つ又は複数の態様は、コンピュータ技術に密接に結び付いており、コンピュータ内の処理を容易にし、その性能を改善する。これが本発明の１つ又は複数の態様に関連するとき、コンピューティング環境内の処理を容易にする１つの実施形態のさらなる詳細が、図６０〜図６１を参照して説明される。
【０２８６】
図６０を参照すると、一実施形態において、プロセッサにより、複数のアーキテクチャ上のレジスタを復元するためのロード要求を取得する（２４００）。ロード要求を取得することに基づいて、複数のアーキテクチャ上のレジスタのうちの１つ又は複数のアーキテクチャ上のレジスタを復元する（２４０２）。復元することは、例えば、アーキテクチャ上のレジスタを物理レジスタにマッピングするスナップショットを用いて、１つ又は複数のアーキテクチャ上のレジスタに現在割り当てられている１つ又は複数の物理レジスタを、１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットの１つ又は複数の物理レジスタと置換することを含む（２４０４）。一例において、メモリから１つ又は複数のアーキテクチャ上のレジスタについての値をコピーすることなく、１つ又は複数のアーキテクチャ上のレジスタが復元される（２４０６）。
【０２８７】
一実施形態において、ロード要求を取得することに基づいて、１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能であるかどうかを判断する（２４０８）。スナップショットが利用可能であることを示すとの判断に基づいて、スナップショットを用いて復元を実行する（２４１０）。
【０２８８】
さらに、一例において、１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能でないことを示すとの判断に基づいて、値をメモリから１つ又は複数のアーキテクチャ上のレジスタにロードすることにより、１つ又は複数のアーキテクチャ上のレジスタを復元する（２４１２）。
【０２８９】
図６１を参照すると、一実施形態において、スナップショットが利用可能かどうかを判断することは、スナップショット・スタックを用いて、１つ又は複数のアーキテクチャ上のレジスタに対応するスナップショットが利用可能かどうかを判断することを含む（２４２０）。一例において、スナップショット・スタックは、複数のエントリを含み（２４２２）、スナップショット・スタックのエントリは、スナップショットを識別するスナップショット識別子を含む（２４２４）。さらに別の例において、スナップショット・スタックのエントリは、１つ又は複数のアーキテクチャ上のレジスタの内容のメモリ内のアドレス、スナップショットと関連した１つ又は複数のアーキテクチャ上のレジスタの表示、及び／又はスナップショットが有効かどうかを示す有効性インジケータのうちの１つを含む付加的な情報を含むことができる（２４２６）。
【０２９０】
さらに別の態様において、スナップショットを作成し、１つ又は複数の物理レジスタの１つ又は複数のアーキテクチャ上のレジスタへのマッピングを保存する（２４２８）。スナップショットの作成は、例えば、１つ又は複数のアーキテクチャ上のレジスタの保存を要求する保存要求を取得することに基づいて実行される（２４３０）。
【０２９１】
例において、ロード要求は、ｌｏａｄ  ｍｕｌｔｉｐｌｅ命令を含み、保存要求は、ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ命令を含む（２４３２）。
【０２９２】
本発明の態様の趣旨から逸脱することなく、多くの変形が可能である。本明細書では多数の態様及び特徴が説明されるが、特に他の矛盾がない限り、各々の態様又は特徴は、他のいずれの態様又は特徴とも結合可能であることに留意されたい。
【０２９３】
他のタイプのコンピューティング環境が、これに限定されるものではないが、その例が図６２を参照して説明されるエミュレーション環境を含む、本発明の１つ又は複数の態様を組み込み、使用することもできる。この例において、コンピューティング環境２５００は、例えば、１つ又は複数のバス２５０８及び／又は他の接続を介して互いに結合された、例えば、ネイティブ中央処理ユニット（ＣＰＵ）２５０２、メモリ２５０４、及び１つ又は複数の入力／出力デバイス及び／又はインターフェース２５０６を含む。例として、コンピューティング環境２５００は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるＰｏｗｅｒＰＣ（登録商標）プロセッサ；及び／又は、インターナショナル・ビジネス・マシーンズ・コーポレーション、Ｉｎｔｅｌ又は他に会社により提供されるアーキテクチャに基づいた他のマシンを含むことができる。
【０２９４】
ネイティブ中央処理ユニット２５０２は、環境内での処理の際に用いられる、１つ又は複数の汎用レジスタ及び／又は１つ又は複数の専用レジスタなどの１つ又は複数のネイティブ・レジスタ２５１０を含む。これらのレジスタは、任意の特定の時点における環境の状態を表す情報を含む。
【０２９５】
さらに、ネイティブ中央処理ユニット２５０２は、メモリ２５０４内に格納された命令及びコードを実行する。１つの特定の例において、中央処理ユニットは、メモリ２５０４内に格納されたエミュレータ・コード２５１２を実行する。このコードにより、１つのアーキテクチャにおいて構成されたコンピューティング環境が、別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード２５１２により、ＰｏｗｅｒＰＣプロセッサ、ｐＳｅｒｉｅｓサーバ、又は他のサーバ若しくはプロセッサなどの、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ以外のアーキテクチャに基づくマシンが、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェア及び命令を実行することが可能になる。
【０２９６】
図６３を参照して、エミュレータ・コード２５１２に関する更なる詳細が説明される。メモリ２５０４内に格納されたゲスト命令２５５０が、ネイティブＣＰＵ２５０２のもの以外のアーキテクチャにおいて実行されるように開発されたソフトウェア命令（例えば、マシン命令に相関する）を含む。例えば、ゲスト命令２５５０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサ上で実行されるように設計されているが、代わりに、例えばＩｎｔｅｌプロセッサとすることができるネイティブＣＰＵ２５０２上でエミュレートされることもある。一例において、エミュレータ・コード２５１２は、メモリ２５０４から１つ又は複数のゲスト命令２５５０を取得し、取得された命令に対してローカル・バッファリングを随意的に提供するための命令フェッチ・ルーチン２５５２を含む。エミュレータ・コード２５１２また、取得されたゲスト命令のタイプを判断し、ゲスト命令を１つ又は複数の対応するネイティブ命令２５５６に変換するための命令変換ルーチン２５５４も含む。この変換は、例えば、ゲスト命令により実施される機能を識別すること、及びその機能を実施するためのネイティブ命令を選択することを含む。
【０２９７】
さらに、エミュレータ・コード２５１２は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン２５６０を含む。エミュレーション制御ルーチン２５６０は、ネイティブＣＰＵ２５０２に、１つ又は複数の以前に取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、こうした実行の最後に、次のゲスト命令又はゲスト命令のグループの取得をエミュレートするように、制御を命令フェッチ・ルーチンに戻すことができる。ネイティブ命令２５５６の実行は、データをメモリ２５０４からレジスタにロードすること、データをレジスタから再びメモリに格納すること、又は変換ルーチンによって定められるような何らかのタイプの算術演算又は論理演算を実施することを含むことができる。
【０２９８】
各ルーチンは、例えば、メモリ内に格納され、ネイティブ中央処理ユニット２５０２により実行される、ソフトウェアで実装される。他の例において、ルーチン又は操作の１つ又は複数は、ファームウェア、ハードウェア、ソフトウェア、又はそれらの幾つかの組み合わせで実装される。エミュレートされるプロセッサのレジスタは、ネイティブＣＰＵのレジスタ２５１０を用いて又はメモリ２５０４内の位置を用いて、エミュレートすることができる。実施形態において、ゲスト命令２５５０、ネイティブ命令２５５６、及びエミュレータ・コード２５１２は、同一のメモリ内に存在してもよく、又は、異なるメモリ・デバイスの間に分散されてもよい。
【０２９９】
本明細書で用いられる場合、ファームウェアは、例えば、プロセッサのマイクロコード又はミリコードを含む。ファームウェアは、例えば、より上位レベルのマシン・コードの実装に用いられる、ハードウェア・レベルの命令及び／又はデータ構造体を含む。１つの実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコード、又は基礎をなすハードウェアに特有のマイクロコードとして配信される独自のコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【０３００】
取得され、変換され、実行されるゲスト命令２５５０は、例えば、本明細書で説明される１つである。１つのアーキテクチャ（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ）のものであるこの命令が、メモリからフェッチされ、変換され、別のアーキテクチャ（例えば、ＰｏｗｅｒＰＣ、ｐＳｅｒｉｅｓ、Ｉｎｔｅｌ等）のネイティブ命令２５５６のシーケンスとして表される。次いで、これらのネイティブ命令が実行される。
【０３０１】
１つ又は複数の態様は、クラウド・コンピューティングに関連し得る。
【０３０２】
この開示は、クラウド・コンピューティングにおける詳細な説明を含むが、本明細書に記載される教示の実装は、クラウド・コンピューティング環境に限定されないことを予め理解されたい。むしろ、本発明の実施形態は、現在周知の又は後で開発される他のいずれかのタイプのコンピューティング環境と共に実施することができる。
【０３０３】
クラウド・コンピューティングは、最小限の管理労力又はサービス・プロバイダとの対話で迅速にプロビジョニング及び解放することができる構成可能なコンピューティング・リソース（例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス）の共有プールへの、便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス配信モデルである。このクラウド・モデルは、少なくとも５つの特徴、少なくとも３つのサービス・モデル、及び少なくとも４つの配備モデルを含むことができる。
【０３０４】
特徴は、以下の通りである。
オンデマンド・セルフサービス：クラウド・コンシューマは、必要に応じて、サーバ時間及びネットワーク・ストレージ等のコンピューティング機能を、人間がサービスのプロバイダと対話する必要なく自動的に、一方的にプロビジョニングすることができる。
広範なネットワーク・アクセス：機能は、ネットワーク上で利用可能であり、異種のシン又はシック・クライアント・プラットフォーム（例えば、携帯電話、ラップトップ、及びＰＤＡ）による使用を促進する標準的な機構を通じてアクセスされる。
リソースのプール化：プロバイダのコンピューティング・リソースは、マルチ・テナント・モデルを用いて、異なる物理及び仮想リソースを要求に応じて動的に割り当て及び再割り当てすることにより、複数のコンシューマにサービスを提供するためにプールされる。コンシューマは、一般に、提供されるリソースの正確な位置についての制御又は知識を持たないが、より高レベルの抽象化では位置（例えば、国、州、又はデータセンタ）を特定できる場合があるという点で、位置とは独立しているといえる。
迅速な弾力性：機能は、迅速かつ弾力的に、幾つかの場合自動的に、プロビジョニングして素早くスケール・アウトし、迅速にリリースして素早くスケール・インさせることができる。コンシューマにとって、プロビジョニングに利用可能なこれらの機能は、多くの場合、無制限であり、いつでもどんな量でも購入できるように見える。
サービスの測定：クラウド・システムは、サービスのタイプ（例えば、ストレージ、処理、帯域幅、及びアクティブなユーザ・アカウント）に適した何らかの抽象化レベルでの計量機能を用いることによって、リソースの使用を自動的に制御及び最適化する。リソース使用を監視し、制御し、報告し、利用されるサービスのプロバイダとコンシューマの両方に対して透明性をもたらすことができる。
【０３０５】
サービス・モデルは以下の通りである。
Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＳａａＳ）：クラウド・インフラストラクチャ上で動作しているプロバイダのアプリケーションを使用するために、コンシューマに提供される機能である。これらのアプリケーションは、ウェブ・ブラウザ（例えば、ウェブ・ベースの電子メール）などのシン・クライアント・インターフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定の考え得る例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーション機能をも含めて、基礎をなすクラウド・インフラストラクチャを管理又は制御しない。
Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＰａａＳ）：プロバイダによってサポートされるプログラミング言語及びツールを用いて生成された、コンシューマが生成した又は取得したアプリケーションを、クラウド・インフラストラクチャ上に配備するために、コンシューマに提供される機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージなどの基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、配備されたアプリケーション、及び場合によってはアプリケーション・ホスティング環境構成に対して制御を有する。
Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＩａａＳ）：コンシューマが、オペレーティング・システム及びアプリケーションを含み得る任意のソフトウェアを配備及び動作させることができる、処理、ストレージ、ネットワーク、及び他の基本的なコンピューティング・リソースをプロビジョニンングするために、コンシューマに提供される機能である。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理又は制御しないが、オペレーティング・システム、ストレージ、配備されたアプリケーションに対する制御、及び場合によってはネットワーク・コンポーネント（例えば、ホストのファイアウォール）選択の限定された制御を有する。
【０３０６】
配備モデルは以下の通りである。
プライベート・クラウド：クラウド・インフラストラクチャは、ある組織のためだけに運営される。このクラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
コミュニティ・クラウド：クラウド・インフラストラクチャは、幾つかの組織によって共有され、共通の関心事項（例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンス上の考慮事項）を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、その組織又は第三者によって管理することができ、オンプレミス又はオフプレミスに存在することができる。
パブリック・クラウド：クラウド・インフラストラクチャは、一般公衆又は大規模な業界グループに利用可能であり、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド：クラウド・インフラストラクチャは、固有のエンティティのままであるが、データ及びアプリケーションの移行性を可能にする標準化された又は専用の技術（例えば、クラウド間の負荷分散のためのクラウド・バースティング）によって結び付けられる２つ又はそれより多いクラウド（プライベート、コミュニティ、又はパブリック）の混成物である。
【０３０７】
クラウド・コンピューティング環境は、無国籍性、低結合性、モジュール性、及びセマンティック相互運用性に焦点を置くことを指向するサービスである。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
【０３０８】
ここで図６４を参照すると、例示的なクラウド・コンピューティング環境５０が示される。示されるように、クラウド・コンピューティング環境５０は、例えば携帯情報端末（ＰＤＡ）又は携帯電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、及び／又は自動車コンピュータ・システム５４Ｎなどといった、クラウド・コンシューマによって用いられるローカル・コンピューティング回路と通信することができる１つ又は複数のクラウド・コンピューティング・ノード１０を含む。ノード１０は、互いに通信することができる。これらのノードは、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、若しくはハイブリッド・クラウド、又はこれらの組み合わせなど、１つ又は複数のネットワークにおいて物理的又は仮想的にグループ化することができる（図示せず）。これにより、クラウド・コンピューティング環境５０は、クラウド・コンシューマがローカル・コンピューティング回路上にリソースを保持する必要のないサービスとして、インフラストラクチャ、プラットフォーム、及び／又はソフトウェアを提供することが可能になる。図６４に示されるコンピューティング回路５４Ａ〜Ｎのタイプは単に例示であることを意図し、コンピューティング・ノード１０及びクラウド・コンピューティング環境５０は、いずれのタイプのネットワーク及び／又はネットワーク・アドレス指定可能な接続上でも（例えば、ウェブ・ブラウザを用いて）、いずれのタイプのコンピュータ化された回路とも通信できることを理解されたい。
【０３０９】
ここで図６５を参照すると、クラウド・コンピューティング環境５０（図６４）によって提供される例示的な機能抽象化層のセットが示される。図６５に示されるコンポーネント、層、及び機能は単に例示であることを意図し、本発明の実施形態はそれらに限定されないことを予め理解されたい。図示されるように、以下の層及び対応する機能が提供される。
【０３１０】
ハードウェア及びソフトウェア層６０は、ハードウェア及びソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例として、メインフレーム６１と、ＲＩＳＣ（Reduced Instruction Set Computer（縮小命令セット・コンピュータ））アーキテクチャ・ベースのサーバ６２と、サーバ６３と、ブレード・サーバ６４と、ストレージ回路６５と、ネットワーク及びネットワーキング・コンポーネント６６とが含まれる。幾つかの実施形態において、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア６７及びデータベース・ソフトウェア６８を含む。
【０３１１】
仮想化層７０は、抽象化層を提供し、この層により、仮想エンティティの以下の例、すなわち、仮想サーバ７１、仮想ストレージ７２、仮想プライベート・ネットワークを含む仮想ネットワーク７３、仮想アプリケーション及びオペレーティング・システム７４、並びに仮想クライアント７５を提供することができる。
【０３１２】
一例においては、管理層８０は、以下で説明される機能を提供することができる。リソース・プロビジョニング８１は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソース及び他のリソースの動的な調達を提供する。計量及び価格決定８２は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡と、これらのリソースの消費に対する課金又は請求とを提供する。一例においては、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド・コンシューマ及びタスクに対する識別情報の検証と、データ及び他のリソースに対する保護とを提供する。ユーザ・ポータル８３は、コンシューマ及びシステム管理者のために、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理８４は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル・アグリーメント（Service Level Agreement、ＳＬＡ）の計画及び履行８５は、ＳＬＡに従って将来の要件が予測されるクラウド・コンピューティング・リソースの事前配置及び調達を提供する。
【０３１３】
ワークロード層９０は、クラウド・コンピューティング環境を利用することができる機能の例を提供する。この層から提供することができるワークロード及び機能の例には、マッピング及びナビゲーション９１、ソフトウェア開発及びライフサイクル管理９２、仮想教室教育配信９３、データ分析処理９４、トランザクション処理９５、及びレジスタ復元及び関連した処理９６が含まれる。
【０３１４】
本発明は、統合の任意の可能な技術的詳細レベルにおける、システム、方法、及び／又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体（単数又は複数）を含むことができる。
【０３１５】
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの：すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通る光パルス）、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
【０３１６】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び／又は無線ネットワークなどのネットワークを介して外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び／又はエッジ・サーバを含むことができる。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体に格納する。
【０３１７】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、及び、「Ｃ」プログラミング言語若しくは類似のプログラミング言語などの手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで記述されるソース・コード又はオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネットサービスプロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又はプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して、電子回路を個人化することができる。
【０３１８】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
【０３１９】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて機械を製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、及び／又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作の態様を実施する命令を含む製品を含むようにすることもできる。
【０３２０】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生産し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにすることもできる。
【０３２１】
図面内のフローチャート及びブロック図は、本発明の様々な実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
【０３２２】
上記に加えて、１つ又は複数の態様は、顧客環境の管理を提供するサービス・プロバイダによって供与、提供、配置、管理、サービス等を行うことができる。例えば、サービス・プロバイダは、１又は複数の顧客のために１つ又は複数の態様を実施するコンピュータ・コード及び／又はコンピュータ・インフラストラクチャの作成、保守、サポート等を行うことができる。見返りに、サービス・プロバイダは、例として、予約申し込み及び／又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、１又は複数の第三者に対する広告内容の販売から支払いを受けることができる。
【０３２３】
一態様において、１つ又は複数の実施形態を実施するために、アプリケーションを配備することができる。一例として、アプリケーションの配備は、１つ又は複数の実施形態を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０３２４】
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することができ、そこでは、コードは、コンピューティング・システムと協働して、１つ又は複数の実施形態を実施することができる。
【０３２５】
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、プロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は、１つ又は複数の実施形態を含む。コードは、コンピュータ・システムと協働して、１つ又は複数の実施形態を実施することができる。
【０３２６】
種々の実施形態が上述されたが、これらは例にすぎない。例えば、１つ又は複数の実施形態を組み込み、使用するために、他のアーキテクチャのコンピューティング環境を使用することもできる。さらに、異なる命令、命令形式、命令フィールド、及び／又は命令の値を使用することができる。多くの変形が可能である。
【０３２７】
さらに、他のタイプのコンピューティング環境の利益を得、これを使用することができる。一例として、プログラム・コードを格納及び／又は実行するのに適しており、システム・バスを介してメモリ要素に直接又は間接的に結合された少なくとも２つのプロセッサを含む、データ処理システムを使用することができる。メモリ要素は、例えば、プログラム・コードの実際の実行中に用いられるローカル・メモリ、大容量記憶装置、及び実行中に大容量記憶装置からコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリを含む。
【０３２８】
入力／出力即ちＩ／Ｏデバイス（これらに限定されるものではないが、キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サムドライブ及び他のメモリ媒体等）は、直接システムに結合することもでき、又は介在するＩ／Ｏコントローラを介してシステムに結合することができる。ネットワーク・アダプタをシステムに結合させて、データ処理システムが、介在する私的ネットワーク又は公衆ネットワークを通じて他のデータ処理システム又は遠隔プリンタ若しくはストレージ・デバイスに結合できるようにすることもできる。モデム、ケーブル・モデム及びイーサネット・カードは、ネットワーク・アダプタの利用可能なタイプのうちのほんの数例である。
【０３２９】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「１つの（a）」、「１つの（an）」及び「その（the）」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む（comprise）」及び／又は「含んでいる（comprising）」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び／又はコンポーネントの存在を指示するが、１つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び／又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
【０３３０】
以下の特許請求の範囲に存在する場合、「手段又はステップと機能との組合せ（ミーンズ又はステップ・プラス・ファンクション）」要素の対応する構造、材料、動作及び均等物は、明確に特許請求された他の請求要素と共に機能を実行するための任意の構造、材料、又は行為を含むことを意図したものである。本発明の説明は、例証及び説明のためだけに提示されたものであり、網羅的であること又は本発明を開示した形態に限定することを意図したものではない。当業者には、本発明の範囲から逸脱しない多くの修正物及び変形物が明らかとなるであろう。実施形態は、本発明の原理及び実際の用途を最もよく説明するため、及び、当業者が、企図した特定の用途に適するように種々の修正を有する種々の実施形態に関して本発明を理解することができるように、選択され記述された。
【符号の説明】
【０３３１】
１００：コンピューティング環境
１０２：コンピュータ・システム
１０４：プロセッサ又は処理ユニット
１０６、２１２６、２５０４：メモリ
１０７：命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）
１０８：１つ又は複数の入力／出力（Ｉ／Ｏ）インターフェース
１０９：命令キャッシュ
１１０、２５０２：バス
１１３：命令シーケンス・ユニット（ＩＳＵ）
１２０、２１２４：キャッシュ
１２１：分岐実行ユニット（ＢＲＵ）
１２３：条件レジスタ・ファイル（ＣＲＦ）
１２７：予測器更新論理
１３０、１４６：プログラム又はアプリケーション
１３２、１４８：オペレーティング・システム
１３４：コンピュータ可読プログラム命令
１４１：固定小数点ユニット（ＦＸＵ）
１４２：ネットワーク・インターフェース
１４３：浮動小数点ユニット（ＦＰＵ）
１４４：データ・ストレージ・デバイス
１４５：ベクトル・マルチメディア延長ユニット（ＶＭＸＵ）
１４６：プログラム
１４８：コンピュータ可読プログラム命令
１５０：命令フェッチ・コンポーネント
１５１、２１１０：ロード／ストア・ユニット（ＬＳＵ）
１５２、２１１６、２２２４：命令デコード・ユニット
１５３：マルチプレクサ
１５４：命令実行コンポーネント
１５５：バッファ
１５６：メモリ・アクセス・コンポーネント
１５７：アドレス変換テーブル
１６０：ライトバック・コンポーネント
１６６：レジスタ復元操作及び／又は命令
１６８、６０８、６１０、２２０４：レジスタ
１７０・命令フェッチ
１７２：命令分岐予測
１７８：マッパー
１９０：フラッシュ
１９２：レジスタ・リネーム・ユニット
３００：アーキテクチャ上のレジスタ
３０２、５０２：物理レジスタ
５０２ｂ：新しい物理レジスタ
５０２ａ：スナップショット
５０８、６０２：スナップショット識別子
５１０：古いスナップショット
６０６：アドレス又はアドレス範囲
６１２：有効インジケータ
７００：Ｓｐｉｌｌ  Ｍｕｌｔｉｐｌｅ（Ｓｐｉｌｌｍ）命令
７５０：Ｒｅｌｏａｄ  Ｍｕｌｔｉｐｌｅ（Ｒｅｌｏａｄｍ）命令
９００：バルク保存スナップショット
１３００：データ・キャッシュ
１３０２：キャッシュ・ライン
１３０６：有効性（Ｖ）インジケータ
１３０８：ダーティ（Ｄ）インジケータ
１３１０：マーク付け（Ｍ）インジケータ
１３１２、２１０６：データ
２１００：ストア要求（ＳＲＱ）ライトバック論理
２１０２：ストア・キュー
２１０８：ストア要求
２１１４：命令フェッチ・ユニット（ＩＦＵ）
２１１８、２２３０：実行ユニット
２２００：復旧バッファ
２２０８：命令タグ
２２０９：テール・ポインタ
２２１０：ヘッド・ポインタ
２２２６：レジスタ・ファイル
２２２８：復旧バッファ
２５００：コンピューティング環
２５０２：ネイティブ中央処理ユニット
２５１２：エミュレータ・コード
２５５０：ゲスト命令
２５５６：ネイティブ命令
【図１】
2020518895.tif 000017
【図２】
2020518895.tif 000018
【図３】
2020518895.tif 000019
【図４】
2020518895.tif 000020
【図５】
2020518895.tif 000021
【図６】
2020518895.tif 000022
【図７】
2020518895.tif 000023
【図８】
2020518895.tif 000024
【図９】
2020518895.tif 000025
【図１０】
2020518895.tif 000026
【図１１】
2020518895.tif 000027
【図１２】
2020518895.tif 000028
【図１３】
2020518895.tif 000029
【図１４】
2020518895.tif 000030
【図１５】
2020518895.tif 000031
【図１６】
2020518895.tif 000032
【図１７】
2020518895.tif 000033
【図１８】
2020518895.tif 000034
【図１９】
2020518895.tif 000035
【図２０】
2020518895.tif 000036
【図２１】
2020518895.tif 000037
【図２２】
2020518895.tif 000038
【図２３】
2020518895.tif 000039
【図２４】
2020518895.tif 000040
【図２５】
2020518895.tif 000041
【図２６】
2020518895.tif 000042
【図２７】
2020518895.tif 000043
【図２８】
2020518895.tif 000044
【図２９】
2020518895.tif 000045
【図３０】
2020518895.tif 000046
【図３１】
2020518895.tif 000047
【図３２】
2020518895.tif 000048
【図３３】
2020518895.tif 000049
【図３４】
2020518895.tif 000050
【図３５】
2020518895.tif 000051
【図３６】
2020518895.tif 000052
【図３７】
2020518895.tif 000053
【図３８】
2020518895.tif 000054
【図３９】
2020518895.tif 000055
【図４０】
2020518895.tif 000056
【図４１】
2020518895.tif 000057
【図４２】
2020518895.tif 000058
【図４３】
2020518895.tif 000059
【図４４】
2020518895.tif 000060
【図４５】
2020518895.tif 000061
【図４６】
2020518895.tif 000062
【図４７】
2020518895.tif 000063
【図４８】
2020518895.tif 000064
【図４９】
2020518895.tif 000065
【図５０】
2020518895.tif 000066
【図５１】
2020518895.tif 000067
【図５２】
2020518895.tif 000068
【図５３】
2020518895.tif 000069
【図５４】
2020518895.tif 000070
【図５５】
2020518895.tif 000071
【図５６】
2020518895.tif 000072
【図５７】
2020518895.tif 000073
【図５８】
2020518895.tif 000074
【図５９】
2020518895.tif 000075
【図６０】
2020518895.tif 000076
【図６１】
2020518895.tif 000077
【図６２】
2020518895.tif 000078
【図６３】
2020518895.tif 000079
【図６４】
2020518895.tif 000080
【図６５】
2020518895.tif 000081
【国際調査報告】
2020518895.tif 000082
2020518895.tif 000083