(57)【要約】【課題】  低特権状態からランタイム・インストルメンテーション制御を変更すること。【解決手段】  本発明の実施形態は、低特権状態からのランタイム・インストルメンテーション制御変更（ＭＲＩＣ）に関する。ＭＲＩＣ命令がフェッチされる。ＭＲＩＣ命令は、ＲＩＣＣＢのアドレスを含む。ＭＲＩＣ命令内に含まれるアドレスに基づいて、ＲＩＣＣＢがフェッチされる。ＲＩＣＣＢは、プロセッサのランタイム・インストルメンテーション制御のサブセットを変更するための値を含む。サブセットは、ＲＩＢ位置の現在アドレス（ＲＣＡ）を含む。ＲＩＢは、プログラム実行中、プロセッサにより認識されるイベントのランタイム・インストルメンテーション情報を保持する。ＲＩＣＣＢの値が、ランタイム・インストルメンテーション制御内にロードされる。制御内にロードされた値に基づいて、イベント情報がＲＩＢに与えられる。【選択図】      図１１
2015514240.tif 000002
【特許請求の範囲】
【請求項１】
スーパーバイザ状態又は低特権状態のいずれかで実行可能なランタイム・インストラクション制御変更（ＭＲＩＣ）命令を実行するためのコンピュータ実装方法であって、前記ＭＲＩＣ命令は、ランタイム・インストルメンテーション制御のサブセットのみを設定するためのものであり、前記ランタイム・インストルメンテーション制御の全ては、ランタイム・インストルメンテーション制御ロード（ＬＲＩＣ）特権命令によってロード可能であり、前記方法は、
前記ＭＲＩＣ命令をフェッチすることであって、前記ＭＲＩＣ命令はランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）のアドレスを含む、フェッチすることと、
プロセッサにより、前記ＲＩＣＣＢをフェッチすることであって、前記ＲＩＣＣＢは、前記プロセッサの前記ランタイム・インストルメンテーション制御のサブセットを変更するための複数の値を含み、前記ランタイム・インストルメンテーション制御のサブセットは、プログラム実行中、前記プロセッサによって認識されたイベントのランタイム・インストルメンテーション情報を保持するためのランタイム・インストルメンテーション・プログラム・バッファ（ＲＩＢ）位置のランタイム・インストルメンテーション・プログラム・バッファ現在アドレス（ＲＣＡ）を含む、フェッチすることと、
前記複数の値を前記ランタイム・インストルメンテーション制御内にロードすることと、
前記ロードされた複数の値を用いて、ランタイム・インストルメンテーション・イベント情報を前記ＲＩＢに与えることと、
を含む、方法。
【請求項２】
前記ＲＩＣＣＢの前記複数の値の少なくとも１つについてのモデル依存の制限された値を得ることと、
前記モデル依存の制限された値を更新値として前記ランタイム・インストルメンテーション制御内にロードすることと、
をさらに含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
報告グループ・サイズにより前記モデル依存の制限された値がロードされ、
前記ランタイム・インストルメンテーション制御のＫフィールドが第１の値を有することに基づいて、現在アドレスを前記ＲＩＣＣＢの起点アドレスの値に設定することと、
前記ランタイム・インストルメンテーション制御のＫフィールドが第２の値を有することに基づいて、前記現在アドレスを指定されたＲＩＣＣＢの現在アドレス値の値に設定することと、
をさらに含む、請求項２に記載のコンピュータ・プログラム製品。
【請求項４】
前記ＭＲＩＣ命令内の前記アドレスがダブルワード境界と整列していないと判断すること、及び、
前記ＭＲＩＣ命令内に含まれる前記アドレスから前記ＲＩＣＣＢをフェッチできないと判断すること、
のいずれか１つ又は複数に基づいて、例外が引き起こされることをさらに含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
前記ＲＩＣＣＢ内の１つ又は複数の値が有効であると判断することをさらに含み、前記判断することは、
ランタイム・インストルメンテーションＳビットが、前記低特権状態からの前記ＭＲＩＣ命令の実行が許可されないことを示していると判断すること、
前記ランタイム・インストルメンテーション制御が有効でないと判断すること、及び
前記ランタイム・インストルメンテーションがイネーブルにされていないと判断すること、
のいずれか１つをさらに含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項６】
前記ＲＩＣＣＢの前記複数の値は、
ランタイム・インストルメンテーション・データ・サンプリングの詳細を管理するための制御と、
ランタイム・インストルメンテーション・データ収集の詳細を管理するための制御と、
プログラム・バッファへのランタイム・インストルメンテーション・データ報告の詳細を管理するための制御と、
命令キャッシュミスの検出を管理するための制御と、
データ・キャッシュミスの検出を管理するための制御と、
報告グループのサイズを管理するための制御と、
次の報告グループが格納される出力プログラム・バッファ内の現在アドレスを管理するための制御と、
呼び出しタイプ、リターン・タイプ、及び転送タイプ分岐に関するデータのデータ収集を管理するための制御と、
正しく又は誤って予測され、また成立した又は成立しなかった分岐のデータ収集を管理するための制御と、
のうちの１つ又は複数をさらに含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項７】
前記ＭＲＩＣ命令は第１のコンピュータ・アーキテクチャに対して定められ、前記フェッチすること及び構文解析することは、代替的なコンピュータ・アーキテクチャの第２のプロセッサにより実行され、前記第２のプロセッサにより前記フェッチすること及び前記構文解析することは、
前記第１のコンピュータ・アーキテクチャにおける前記ＭＲＩＣ命令の実行をエミュレートするためのソフトウェア・ルーチンを識別することと、
前記ソフトウェア・ルーチンを用いて前記ＭＲＩＣ命令を実行することと、
を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項８】
エラーに遭遇した場合、前記ランタイム・インストルメンテーション制御内の値は更新されない、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
スーパーバイザ状態又は低特権状態のいずれかからランタイム・インストルメンテーション制御変更（ＭＲＩＣ）命令を実行するためのコンピュータ実装方法であって、前記ＭＲＩＣ命令は、ランタイム・インストルメンテーション制御のサブセットのみを設定するためのものであり、前記ランタイム・インストルメンテーション制御の全ては、ランタイム・インストルメンテーション制御ロード（ＬＲＩＣ）特権命令によってロード可能であり、前記方法は、
前記ＭＲＩＣ命令をフェッチすることであって、前記ＭＲＩＣ命令はランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）のアドレスを含む、フェッチすることと、
プロセッサにより、前記ＲＩＣＣＢをフェッチすることであって、前記ＲＩＣＣＢは、前記プロセッサの前記ランタイム・インストルメンテーション制御のサブセットを変更するための複数の値を含み、前記ランタイム・インストルメンテーション制御のサブセットは、プログラム実行中、前記プロセッサによって認識されたイベントのランタイム・インストルメンテーション情報を保持するためのランタイム・インストルメンテーション・プログラム・バッファ（ＲＩＢ）位置のランタイム・インストルメンテーション・プログラム・バッファ現在アドレス（ＲＣＡ）を含む、フェッチすることと、
前記複数の値を前記ランタイム・インストルメンテーション制御内にロードすることと、
前記ロードされた複数の値を用いて、ランタイム・インストルメンテーション・イベント情報を前記ＲＩＢに与えることと、
を含む、方法。
【請求項１０】
前記ＲＩＣＣＢの前記複数の値の少なくとも１つについてのモデル依存の制限された値を得ることと、
前記モデル依存の制限された値を更新値として前記ランタイム・インストルメンテーション制御内にロードすることと、
をさらに含む、請求項９に記載の方法。
【請求項１１】
報告グループ・サイズにより前記モデル依存の制限された値がロードされ、
前記ランタイム・インストルメンテーション制御のＫフィールドが第１の値を有することに基づいて、現在アドレスを前記ＲＩＣＣＢの起点アドレスの値に設定することと、
前記ランタイム・インストルメンテーション制御のＫフィールドが第２の値を有することに基づいて、前記現在アドレスを指定されたＲＩＣＣＢの現在アドレス値の値に設定することと、
をさらに含む、請求項１０に記載の方法。
【請求項１２】
前記ＭＲＩＣ命令内の前記アドレスがダブルワード境界と整列していないと判断すること、及び、
前記ＭＲＩＣ命令内に含まれる前記アドレスから前記ＲＩＣＣＢをフェッチできないと判断すること、
のいずれか１つ又は複数に基づいて、例外が引き起こされることをさらに含む、請求項９に記載の方法。
【請求項１３】
前記ＲＩＣＣＢ内の１つ又は複数の値が有効であると判断することをさらに含み、前記判断することは、
ランタイム・インストルメンテーションＳビットが、前記低特権状態からの前記ＭＲＩＣ命令の実行が許可されないことを示していると判断すること、
前記ランタイム・インストルメンテーション制御が有効でないと判断すること、及び
前記ランタイム・インストルメンテーションがイネーブルにされていないと判断すること、
のいずれか１つをさらに含む、請求項９に記載の方法。
【請求項１４】
前記ＲＩＣＣＢの前記複数の値は、
ランタイム・インストルメンテーション・データ・サンプリングの詳細を管理するための制御と、
ランタイム・インストルメンテーション・データ収集の詳細を管理するための制御と、
プログラム・バッファへのランタイム・インストルメンテーション・データ報告の詳細を管理するための制御と、
命令キャッシュミスの検出を管理するための制御と、
データ・キャッシュミスの検出を管理するための制御と、
報告グループのサイズを管理するための制御と、
次の報告グループが格納される出力プログラム・バッファ内の現在アドレスを管理するための制御と、
呼び出しタイプ、リターン・タイプ、及び転送タイプ分岐に関するデータのデータ収集を管理するための制御と、
正しく又は誤って予測され、また成立した又は成立しなかった分岐のデータ収集を管理するための制御と、
のうちの１つ又は複数をさらに含む、請求項９に記載の方法。
【請求項１５】
前記ＭＲＩＣ命令は第１のコンピュータ・アーキテクチャに対して定められ、前記フェッチすること及び構文解析することは、代替的なコンピュータ・アーキテクチャの第２のプロセッサにより実行され、前記第２のプロセッサにより前記フェッチすること及び前記構文解析することは、
前記第１のコンピュータ・アーキテクチャにおける前記ＭＲＩＣ命令の実行をエミュレートするためのソフトウェア・ルーチンを識別することと、
前記ソフトウェア・ルーチンを用いて前記ＭＲＩＣ命令を実行することと、
を含む、請求項９に記載の方法。
【請求項１６】
エラーに遭遇した場合、前記ランタイム・インストルメンテーション制御内の値は更新されない、請求項９に記載の方法。
【請求項１７】
スーパーバイザ状態又は低特権状態のいずれかからランタイム・インストルメンテーション制御変更（ＭＲＩＣ）命令を実行するためのコンピュータ・システムであって、前記ＭＲＩＣ命令はランタイム・インストルメンテーション制御のサブセットのみを設定するためのものであり、前記ランタイム・インストルメンテーション制御の全ては、ランタイム・インストルメンテーション制御ロード（ＬＲＩＣ）特権命令によりロード可能である、前記コンピュータ・システムは、
方法を実施するように構成されたランタイム・インストルメンテーション・モジュールを含むコンピュータ・プロセッサを含み、前記方法は、
前記ＭＲＩＣ命令をフェッチすることであって、前記ＭＲＩＣ命令はランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）のアドレスを含む、フェッチすることと、
プロセッサにより、前記ＲＩＣＣＢをフェッチすることであって、前記ＲＩＣＣＢは、前記プロセッサの前記ランタイム・インストルメンテーション制御のサブセットを変更するための複数の値を含み、前記ランタイム・インストルメンテーション制御のサブセットは、プログラム実行中、前記プロセッサによって認識されたイベントのランタイム・インストルメンテーション情報を保持するためのランタイム・インストルメンテーション・プログラム・バッファ（ＲＩＢ）位置のランタイム・インストルメンテーション・プログラム・バッファ現在アドレス（ＲＣＡ）を含む、フェッチすることと、
前記複数の値を前記ランタイム・インストルメンテーション制御内にロードすることと、
前記ロードされた複数の値を用いて、ランタイム・インストルメンテーション・イベント情報を前記ＲＩＢに与えることと、
を含む、コンピュータ・システム。
【請求項１８】
前記ＲＩＣＣＢの前記複数の値の少なくとも１つについてのモデル依存の制限された値を得ることと、
前記モデル依存の制限された値を更新値として前記ランタイム・インストルメンテーション制御内にロードすることと、
をさらに含む、請求項１７に記載のシステム。
【請求項１９】
報告グループ・サイズにより前記モデル依存の制限された値がロードされ、
前記ランタイム・インストルメンテーション制御のＫフィールドが第１の値を有することに基づいて、現在アドレスを前記ＲＩＣＣＢの起点アドレスの値に設定することと、
前記ランタイム・インストルメンテーション制御のＫフィールドが第２の値を有することに基づいて、前記現在アドレスを指定されたＲＩＣＣＢの現在アドレス値の値に設定することと、
をさらに含む、請求項１８に記載のシステム。
【請求項２０】
前記ＭＲＩＣ命令内の前記アドレスがダブルワード境界とアラインしていないと判断すること、及び、
前記ＭＲＩＣ命令内に含まれる前記アドレスから前記ＲＩＣＣＢをフェッチできないと判断すること、
のいずれか１つ又は複数に基づいて、例外が引き起こされることをさらに含む、請求項１７に記載のシステム。
【請求項２１】
前記ＲＩＣＣＢ内の１つ又は複数の値が有効であると判断することをさらに含み、前記判断することは、
ランタイム・インストルメンテーションＳビットが、前記低特権状態からの前記ＭＲＩＣ命令の実行が許可されないことを示していると判断すること、
前記ランタイム・インストルメンテーション制御が有効でないと判断すること、及び
前記ランタイム・インストルメンテーションがイネーブルにされていないと判断すること、
のいずれか１つをさらに含む、請求項１７に記載のシステム。
【請求項２２】
前記ＲＩＣＣＢの前記複数の値は、
ランタイム・インストルメンテーション・データ・サンプリングの詳細を管理するための制御と、
ランタイム・インストルメンテーション・データ収集の詳細を管理するための制御と、
プログラム・バッファへのランタイム・インストルメンテーション・データ報告の詳細を管理するための制御と、
命令キャッシュミスの検出を管理するための制御と、
データ・キャッシュミスの検出を管理するための制御と、
報告グループのサイズを管理するための制御と、
次の報告グループが格納される出力プログラム・バッファ内の現在アドレスを管理するための制御と、
呼び出しタイプ、リターン・タイプ、及び転送タイプ分岐に関するデータのデータ収集を管理するための制御と、
正しく又は誤って予測され、また成立した又は成立しなかった分岐のデータ収集を管理するための制御と、
のうちの１つ又は複数をさらに含む、請求項１７に記載のシステム。
【請求項２３】
前記ＭＲＩＣ命令は第１のコンピュータ・アーキテクチャに対して定められ、前記フェッチすること及び構文解析することは、代替的なコンピュータ・アーキテクチャの第２のプロセッサにより実行され、前記第２のプロセッサにより前記フェッチすること及び前記構文解析することは、
前記第１のコンピュータ・アーキテクチャにおける前記ＭＲＩＣ命令の実行をエミュレートするためのソフトウェア・ルーチンを識別することと、
前記ソフトウェア・ルーチンを用いて前記ＭＲＩＣ命令を実行することと、
を含む、請求項１７に記載のシステム。
【請求項２４】
エラーに遭遇した場合、前記ランタイム・インストルメンテーション制御内の値は更新されない、請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピューティング環境内の処理に関し、より具体的には、低特権状態（lesser-privileged state）からランタイム・インストルメンテーション制御（run-time-instrumentation controls）を変更することに関する。
【背景技術】
【０００２】
コンピュータ・プロセッサは、ますます複雑化する分岐予測及び命令キャッシング論理を用いて、プログラム又は命令ストリームを実行する。これらのプロセスは、命令スループット、従って処理性能を高めるために導入されてきた。性能を向上させるための論理を導入すると、特定のソフトウェア・アプリケーションがコンピュータ・プロセッサ上でどのように実行されるかを確実に予測することが困難になる。ソフトウェア開発プロセスの際、多くの場合、機能性および性能の間にバランスがとられる。ソフトウェアは、そのソフトウェアを実行している基礎をなすハードウェアから１又は複数の抽象化レベルで実行される。ハードウェアが仮想化されるとき、付加的な抽象化層が導入される。性能向上論理及び種々の抽象化層が導入されると、プログラムが実行されているときにハードウェア・レベルで何が実際に行われているかを完全に理解することは困難である。この情報なしに、ソフトウェア開発者は、ソフトウェア・アプリケーションを最適化するために、実行継続時間、メモリ使用率、スレッドの数等といった、より抽象的な方法を使用する。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】「ＩＢＭ（登録商標）  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」、出版番号ＳＡ２２−７９３２−０８、第９版、２０１０年８月
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ハードウェア特有の情報が利用可能であるとき、この情報は、典型的には、事後に開発者に与えられ、且つ、高レベルで、集約された形で与えられ、及び／又は他のプログラムの活動及びオペレーティング・システムに散在されており、そのため、ソフトウェア・アプリケーションの効率性及び正確性に影響を及ぼし得る問題の識別が困難になる。
【課題を解決するための手段】
【０００５】
実施形態は、低特権状態からランタイム・インストルメンテーション制御変更（ＭＲＩＣ，Modifying Run-time-Instrumentation Controls）のための方法、システム、及びコンピュータ・プログラム製品を含む。ＭＲＩＣ命令がフェッチされる。ＭＲＩＣ命令は、ランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ，Run-time-Instrumentation Control Block）のアドレスを含む。ＭＲＩＣ命令内に含まれるアドレスに基づいて、ＲＩＣＣＢがフェッチされる。ＲＩＣＣＢは、プロセッサのランタイム・インストルメンテーション制御のサブセットを変更するための値を含む。ランタイム・インストルメンテーション制御のサブセットは、ランタイム・インストルメンテーション・プログラム・バッファ（ＲＩＢ，Runtime Instrumentation program Buffer）位置のランタイム・インストルメンテーション・プログラム・バッファ現在アドレス（ＲＣＡ，Runtime instrumentation program buffer Current Address）を含む。ＲＩＢは、プログラム実行中、プロセッサにより認識されるイベントのランタイム・インストルメンテーション情報を保持する。ＲＩＣＣＢの値が、ランタイム・インストルメンテーション制御内にロードされる。ランタイム・インストルメンテーション制御内にロードされた値に基づいて、イベント情報がＲＩＢに与えられる。
【０００６】
本発明の技術を通じて、付加的な特徴及び利点が実現される。本発明の他の実施形態及び態様は、本明細書において詳細に説明され、特許請求される本発明の一部と見なされる。利点及び特徴に関して本発明をより良好に理解するために、説明及び図面を参照されたい。
【０００７】
本発明と見なされる主題は、本明細書の最後にある特許請求の範囲において具体的に示され、明確に特許請求されている。本発明の上記及び他の特徴、並びに利点は、添付図面と関連して用いられる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【０００８】
【図１】１つの実施形態における例示的なホスト・コンピュータ・システムを示す図である。
【図２】１つの実施形態における例示的なエミュレーション・ホスト・コンピュータ・システムを示す図である。
【図３】１つの実施形態における例示的なコンピュータ・システムを示す図である。
【図４】１つの実施形態における例示的なコンピュータ・ネットワークを示す図である。
【図５】１つの実施形態におけるコンピュータ・システムの要素を示す図である。
【図６】１つの実施形態におけるコンピュータ・システムの詳細な要素を示す。
【図７】１つの実施形態におけるコンピュータ・システムの詳細な要素を示す。
【図８】１つの実施形態におけるコンピュータ・システムの詳細な要素を示す。
【図９】１つの実施形態による、プロセッサのランタイム・インストルメンテーションのためのシステムの概略図を示す。
【図１０】１つの実施形態におけるランタイム・インストルメンテーション制御変更（ＭＲＩＣ，Modify Run-time-Instrumentation controls）命令を示す。
【図１１】１つの実施形態における、低特権状態のプログラムからＭＲＩＣ命令を開始するためのプロセス・フローを示す。
【図１２】付加的な実施形態における、低特権状態のプログラムからＭＲＩＣ命令を開始するためのプロセス・フローを示す。
【図１３】１つの実施形態における、特権状態（privileged state）により設定可能な制御を含むランタイム・インストルメンテーション制御の制御ブロック（ＲＩＣＣＢ，Run-time-Instrumentation Controls Control Block）の一部を示す。
【図１４】１つの実施形態における、準特権（semi-privileged）ビット（Ｋ）が１に設定されるときのＲＩＣＣＢ制御ブロックの一部を示す。
【図１５】１つの実施形態における、準特権ビット（Ｋ）が０に設定されるときのＲＩＣＣＢ制御ブロックの一部を示す。
【図１６】１つの実施形態による報告グループ（reporting group）を示す。
【図１７】１つの実施形態におけるコンピュータ・プログラム製品を示す。
【発明を実施するための形態】
【０００９】
本発明の１つの実施形態は、低特権状態からランタイム・インストルメンテーション制御のサブセットを更新するためのシステム、方法、及びコンピュータ・プログラム製品である。１つの実施形態において、現在のランタイム・インストルメンテーション制御の有効性、ランタイム・インストルメンテーション制御の現在の状態、及びフラグ（Ｋ）が低特権状態の構成が可能であることを示すことに基づいて、低特権状態プログラムは、ランタイム・インストルメンテーション制御の大部分又は全てを変更することができる。低特権状態プログラムは、ランタイム・インストルメンテーション制御変更（ＭＲＩＣ，Modify Run-time-Instrumentation Controls）命令を実行して、ランタイム・インストルメンテーション制御を更新する。ＭＲＩＣ命令は、ランタイム・インストルメンテーション制御の許可の設定に基づいて、多数のランタイム・インストルメンテーション制御の更新を可能にするが、ランタイム・インストルメンテーション制御の大部分は、ＭＲＩＣ命令を用いて低特権状態プログラムにより更新することができる。
【００１０】
図１は、１つの実施形態におけるホスト・コンピュータ・システム５０の代表的なコンポーネントを示す。コンピュータ・システムにおいて、コンポーネントの他の構成を用いることもできる。代表的なホスト・コンピュータ・システム５０は、主ストア（コンピュータ・メモリ）２と通信する１つ又は複数のプロセッサ１、並びにストレージ・デバイス１１及び他のコンピュータ又はＳＡＮ等と通信するためのネットワーク１０へのＩ／Ｏインターフェースを含む。プロセッサ１は、アーキテクチャ化された（architected）命令セット及びアーキテクチャ化された機能を有するアーキテクチャに準拠している。プロセッサ１は、プログラム・アドレス（仮想アドレス）をメモリの実アドレスに変換するための動的アドレス変換（dynamic address translation、ＤＡＴ）３を有することができる。ＤＡＴ３は、典型的には、変換をキャッシュに入れるための変換ルックアサイド・バッファ（translation lookaside buffer、ＴＬＢ）７を含むので、コンピュータ・メモリ２のブロックへの後のアクセスでは、アドレス変換の遅延を必要としない。典型的には、キャッシュ９が、コンピュータ・メモリ２とプロセッサ１との間に用いられる。キャッシュ９は、１つより多いＣＰＵが利用可能な大型キャッシュと、大型キャッシュと各ＣＰＵとの間のより小型でより高速な（下位レベルの）キャッシュとを有する階層とすることができる。幾つかの実施形態においては、下位レベル・キャッシュが分割されて、命令のフェッチ及びデータ・アクセスのための別個の下位レベル・キャッシュを与える。１つの実施形態において、命令は、キャッシュ９を介して、命令フェッチ・ユニット４により、コンピュータ・メモリ２からフェッチされる。命令は、命令デコード・ユニット６においてデコードされ、命令実行ユニット８に（幾つかの実施形態においては、他の命令とともに）ディスパッチされる。典型的には、例えば、算術演算実行ユニット、浮動小数点実行ユニット、及び分岐命令実行ユニットなどの幾つかの命令実行ユニット８が用いられる。命令は、命令実行ユニット８により実行され、必要に応じて、命令が指定したレジスタ又はコンピュータ・メモリ２からオペランドにアクセスする。コンピュータ・メモリ２からオペランドにアクセスする（オペランドをロード又はストア（格納）する）場合、典型的には、実行される命令の制御下で、ロード・ストア・ユニット５がアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード（ファームウェア）において、又はその両方の組み合わせによって実行することができる。
【００１１】
図２において、図１のホスト・コンピュータ・システム５０などのホスト・アーキテクチャのホスト・コンピュータ・システムをエミュレートする、エミュレートされたホスト・コンピュータ・システム２１が提供される。エミュレートされたホスト・コンピュータ・システム２１において、ホスト・プロセッサ（ＣＰＵ）１は、エミュレートされたホスト・プロセッサ（又は仮想ホスト・プロセッサ）２９であり、ホスト・コンピュータ・システム５０のプロセッサ１のものとは異なるネイティブ命令セット・アーキテクチャを有するネイティブ・プロセッサ２７を含む。エミュレートされたホスト・コンピュータ・システム２１は、ネイティブ・プロセッサ２７がアクセス可能なメモリ２２を有する。１つの実施形態において、メモリ２２は、コンピュータ・メモリ２の部分と、エミュレーション・ルーチン・メモリ２３の部分とに区分化される。コンピュータ・メモリ２は、ホスト・コンピュータ・アーキテクチャに従って、エミュレートされたホスト・コンピュータ・システム２１のプログラムに利用可能である。ネイティブ・プロセッサ２７は、エミュレーション・ルーチン・メモリ２３から取得された、エミュレートされたプロセッサ２９のもの以外のアーキテクチャのアーキテクチャ化命令セットのネイティブ命令を実行し、且つ、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判断することができるシーケンス及びアクセス／デコード・ルーチンにおいて取得される１つ又は複数の命令を用いることにより、コンピュータ・メモリ２内のプログラムによる実行のためにホスト命令にアクセスすることができる。ホスト・コンピュータ・システム５０のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びＩ／Ｏサブシステムのサポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化ファシリティ・ルーチンによってエミュレートすることができる。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を高めるために、（汎用レジスタ、及び仮想アドレスの動的変換などの）ネイティブ・プロセッサ２７において利用可能な機能を利用することもできる。専用ハードウェア及びオフロード・エンジンを設けて、ホスト・コンピュータ・システム５０の機能をエミュレートする際にネイティブ・プロセッサ２７を補助することもできる。
【００１２】
メインフレームにおいて、アーキテクチャ化されたマシン命令は、プログラマ、今日では通常「Ｃ」プログラマによって、多くの場合コンパイラ・アプリケーションを介して用いられる。ストレージ媒体内に格納されたこれらの命令は、ｚ／ＡｒｃｈｉｔｅｃｔｕｒｅのＩＢＭ（登録商標）サーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存の及び将来のＩＢＭ（登録商標）メインフレーム・サーバにおいて、及び、ＩＢＭ（登録商標）の他のマシン（例えば、ｐＳｅｒｉｅｓ（登録商標）サーバ及びｘＳｅｉｒｅｓ（踏力商標）サーバ）上で、エミュレートすることができる。これらの命令は、ＩＢＭ（登録商標）、Ｉｎｔｅｌ（登録商標）、ＡＭＤ（商標）、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓなどによって製造されたハードウェアを用いた種々のマシン上でＬｉｎｕｘ（登録商標）を実行しているマシンにおいて実行することができる。Ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）下でそのハードウェア上で実行することに加えて、Ｌｉｎｕｘ（登録商標）を用いること、並びに、一般に実行がエミュレーション・モードにある、Ｈｅｒｃｕｌｅｓ、ＵＭＸ、又はＦｕｎｄａｍｅｎｔａｌ  Ｓｏｆｔｗａｒｅ，Ｉｎｃ．（ＦＳＩ）、又はＰｌａｔｆｏｒｍ  Ｓｏｌｕｔｉｏｎｓ，Ｉｎｃ．（ＰＳＩ）によるエミュレーションを用いるマシンを使用することもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサによって、エミュレーション・ソフトウェアが実行され、エミュレートされたプロセッサのアーキテクチャをエミュレートする。
【００１３】
エミュレートされたホスト・コンピュータ・システム２１のコンポーネントの１つ又は複数は、その全体を引用により本明細書に組み入れる非特許文献１にさらに記載される。ＩＢＭは、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で使用される他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名であり得る。
【００１４】
ネイティブ・プロセッサ２７は、典型的に、ファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ルーチン・メモリ２３内に格納されたエミュレーション・ソフトウェアを実行して、エミュレートされたプロセッサのエミュレーションを実施する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に１つ又は複数のエミュレートされたマシン命令をフェッチし、１つ又は複数のエミュレートされたマシン命令を、ネイティブ・プロセッサ２７により実行するための対応するネイティブ・マシン命令のグループに変換することができる。これらの変換された命令をキャッシュに入れて、より高速の変換を達成することができる。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、エミュレートされるプロセッサのために書かれたオペレーティング・システム及びアプリケーションが正確に動作することを保証する。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻（Time of Day、ＴＯＤ）クロック、及びＩ／Ｏサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、エミュレートされるプロセッサ２９上で実行するように設計されたオペレーティング・システム又はアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ２７上で実行できるようにする。
【００１５】
エミュレートされる特定の命令がデコードされ、個々の命令の機能を実施するためのサブルーチンが呼び出される。エミュレートされたプロセッサ２９の機能をエミュレートするエミュレーション・ソフトウェアの機能は、例えば、「Ｃ」サブルーチン若しくはドライバにおいて、又は好ましい実施形態の説明を理解した後で当業者の技術の範囲内にあるような特定のハードウェアのためにドライバを提供する他の何らかの方法で実装される。
【００１６】
１つの実施形態において、本発明は、ソフトウェア（ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれる場合もあるが、そのいずれも本発明の１つ又は複数の態様と整合性がある）により実施することができる。図１を参照すると、本発明を具体化するソフトウェア・プログラム・コードには、ホスト・コンピュータ・システム５０のＣＰＵ（中央演算処理ユニット）１としても知られるプロセッサにより、長期ストレージ媒体、ＣＤ−ＲＯＭドライブ、テープドライブ、又はハードドライブなどのストレージ・デバイス１１からアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はＣＤ−ＲＯＭなどの、データ処理システムと共に使用するための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させてもよく、又はコンピュータ・メモリ２からユーザに分散させてもよく、又は、こうした他のシステムのユーザが使用するために、ネットワーク１０上の１つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【００１７】
代替的に、コンピュータ・メモリ２においてプログラム・コードを具体化し、プロセッサ・バス（図示せず）を用いて、プロセッサ１によりプログラム・コードにアクセスすることができる。こうしたプログラム・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システムと、１つ又は複数のアプリケーション・プログラムとを含む。プログラム・コードは、通常、ストレージ・デバイス１１などの高密度媒体からコンピュータ・メモリ２にページングされ、そこでプロセッサ１による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び／又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、本明細書ではこれ以上論じない。プログラム・コードは、作成され、有形の媒体（これらに限定されるものではないが、電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープ等を含む）上に格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【００１８】
図３は、本発明を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。図３のシステム１００は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム１０１を含む。ベース・コンピュータ・システム１０１は、１つ又は複数のプロセッサ１０６と、周知の技術に従って１つ又は複数のプロセッサ１０６とベース・コンピュータ・システム１０１の他のコンポーネントを接続し、これらの間の通信を可能にするために用いられるバス（図示せず）とを含む。バスは、プロセッサ１０６を、メモリ１０５、及び、ハードドライブ（例えば、磁気媒体、ＣＤ、ＤＶＤ、及びフラッシュ・メモリのいずれかを含む）又はテープドライブを含むことができる長期ストレージ１０７に接続する。ベース・コンピュータ・システム１０１はまた、バスを介して、１つ又は複数のプロセッサ１０６を、キーボード１０４、マウス１０３、プリンタ／スキャナ１１０、及び／又は、タッチ・センシティブ・スクリーン、デジタル化された入力パッドなどの任意のユーザ・インターフェース機器であってもよい他のインターフェース機器といった、１つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、１つ又は複数のプロセッサを、ＬＣＤスクリーン又はモニタなどのディスプレイ装置１０２にも接続する。
【００１９】
ベース・コンピュータ・システム１０１は、ネットワーク１０９と通信する１０８ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータのネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット（登録商標）、又はモデムである。或いは、ベース・コンピュータ・システム１０１は、セルラー・デジタル・パケット・データ（ＣＤＰＤ）カードなどの無線インターフェースを用いて通信することができる。ベース・コンピュータ・システム１０１は、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）内のこうした他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント／サーバ構成におけるクライアントとすることができる。
【００２０】
図４は、本発明を実施することができるデータ処理ネットワーク２００を示す。データ処理ネットワーク２００は、各々が複数の個々のワークステーション２０１、２０２、２０３、２０４、及び／又は図３のベース・コンピュータ・システム１０１を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、１つ又は複数のＬＡＮを含ませることができ、そこで、ＬＡＮは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【００２１】
プログラミング・コード１１１をメモリ１０５において具体化し、プロセッサ・バスを用いてプロセッサ１０６により、このプログラミング・コード１１１にアクセスすることができる。こうしたプログラミング・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システムと、１つ又は複数のアプリケーション・プログラム１１２とを含む。プログラム・コードは、通常、長期ストレージ１０７から高速メモリ１０５にページングされ、そこでプロセッサ１０６による処理のために利用可能になる。ソフトウェア・プログラミング・コードをメモリ内、物理媒体上で具体化し、及び／又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、本明細書ではこれ以上論じない。プログラム・コードは、有形の媒体（これらに限定されるものではないが、電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープ等を含む）上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【００２２】
プロセッサが最も容易に利用できるキャッシュ（通常、プロセッサの他のキャッシュよりも高速で小さい）は、最下位（Ｌ１又はレベル１）のキャッシュであり、主ストア（主メモリ）は、最上位レベルのキャッシュ（３つのレベルがある場合にはＬ３）である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ（Ｉ−キャッシュ）と、データ・オペランドを保持するデータ・キャッシュ（Ｄ−キャッシュ）とに分割されることが多い。
【００２３】
引き続き図４を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ（クライアント・サーバ）２０６、又はデータ・リポジトリにアクセスすることができ、且つ、ワークステーション２０５から直接アクセスすることもできるアプリケーシ・サーバ（遠隔サーバ）２０８などの、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ２０６は、各々のネットワーク２０７へのエントリ・ポイントとして働く。ゲートウェイは、１つのネットワーキング・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ・コンピュータ２０６は、通信リンクによって、別のネットワーク（例えば、インターネット２０７）に結合できることが好ましい。ゲートウェイ・コンピュータ２０６はまた、通信リンクを用いて、１つ又は複数のワークステーション１０１、２０１、２０２、２０３及び２０４に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なＩＢＭ（登録商標）  ｅＳｅｒｖｅｒ（登録商標）  ｚＳｅｒｉｅｓ（登録商標）ｚ９（登録商標）サーバを用いて実装することができる。
【００２４】
１つの実施形態において、本発明を具体化するソフトウェア・プログラミング・コードには、図３の長期ストレージ１０７などの長期ストレージ媒体から、ベース・コンピュータ・システム１０１のプロセッサ１０６によりアクセスされる。ソフトウェア・プログラミング・コードは、ディスケット、ハードドライブ、又はＣＤ−ＲＯＭといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ２１０及び２１１に分散させてもよく、又はこうした他のシステムのユーザが用いるために、ネットワーク上で１つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【００２５】
図５を参照すると、プロセッサ１０６に関する例示的なプロセッサの実施形態が示される。プロセッサ１０６の性能を向上させるために、バッファ・メモリ・ブロックに１つ又は複数のレベルのキャッシュ３０３が用いられる。キャッシュ３０３は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、６４バイト、１２８バイト、又は２５６バイトのメモリ・データである。１つの実施形態において、命令をキャッシュに入れるために、データをキャッシュに入れるのとは別個のキャッシュが用いられる。キャッシュ・コヒーレンス（メモリ及びキャッシュ内のラインのコピーの同期）は、多くの場合、当技術分野において周知の種々の「スヌープ（snoop）」アルゴリズムによって与えられる。プロセッサ・システムのメモリ１０５などの主ストレージは、キャッシュと呼ばれることが多い。４つのレベルのキャッシュ３０３を有するプロセッサ・システムにおいて、メモリ１０５は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ（ＤＡＳＤ、テープ等）の一部だけを保持するので、レベル５（Ｌ５）のキャッシュと呼ばれることがある。メモリ１０５は、オペレーティング・システムによってメモリ１０５との間でページングされるデータのページを「キャッシュ」する。
【００２６】
プログラム・カウンタ（命令カウンタ）３１１は、実行される現在の命令（current instruction）のアドレスを常時監視している。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサのプログラム・カウンタは６４ビットであり、従来のアドレッシング制限をサポートするために、３１ビット又は２４ビットに切り捨てされ得る。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのプログラム状況ワード（program status word、ＰＳＷ）内で具体化される。従って、例えばオペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である（即ち、プログラム環境からオペレーティング・システム環境への現在のコンテキストが切り替わる。）。プログラムがアクティブでない間、プログラムのＰＳＷはプログラム・カウンタ値を維持し、オペレーティング・システムが実行されている間、オペレーティング・システムの（ＰＳＷ内の）プログラム・カウンタが用いられる。１つの実施形態において、プログラム・カウンタは、現在の命令のバイト数に等しい量だけインクリメントされる。縮小命令セット・コンピューティング（ＲＩＳＣ，Rduced Instruction Set Computing）命令は、典型的には固定長であり、複合命令セット・コンピューティング（ＣＩＳＣ，Complex Instruction Set Computing）命令は、典型的には可変長である。ＩＢＭ（登録商標）  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの命令は、２バイト、４バイト、又は６バイトの長さを有するＣＩＳＣ命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立（Branch taken）操作のいずれかにより、プログラム・カウンタ３１１が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報（条件コードなど）と共にＰＳＷ内に保存され、新しいプログラム・カウンタ値がロードされ、実行される新しいプログラム・モジュールの命令を指し示す。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ３１１にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
【００２７】
１つの実施形態において、プロセッサ１０６の代わりに命令をフェッチするために、命令フェッチ・ユニット３０５が用いられる。命令フェッチ・ユニット３０５は、「次の順次命令（next sequential instruction）」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。１つの実施形態において、命令フェッチ・ユニット３０５は、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするためのプリフェッチ技術を用いる。例えば、命令フェッチ・ユニット３０５は、次の順次命令を含む１６バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
【００２８】
次に、フェッチされた命令が、プロセッサ１０６により実行される。１つの実施形態において、フェッチされた命令は、命令フェッチ・ユニット３０５のデコード／ディスパッチ・ユニット３０６に渡される。デコード／ディスパッチ・ユニット３０６は、命令をデコードし、デコードされた命令についての情報を適切な実行ユニット３０７、３０８、及び／又は３１０に転送する。実行ユニット３０７は、命令フェッチ・ユニット３０５から、デコードされた算術命令についての情報を受け取り、命令の操作コード（オペコード）に従ってオペランドに関する算術演算を行う。オペランドは、メモリ１０５、アーキテクチャ化レジスタ３０９、又は実行されている命令の即値フィールドのいずれかから、実行ユニット３０７に与えられる。実行の結果は、格納される場合には、メモリ１０５、アーキテクチャ化レジスタ３０９、又は他のマシン・ハードウェア（制御レジスタ、ＰＳＷレジスタ等のような）内に格納される。
【００２９】
プロセッサ１０６は、典型的には、命令の機能を実行するための１つ又は複数の実行ユニット３０７、３０８、及び３１０を有する。図６を参照すると、実行ユニット３０７は、インターフェース論理４０７を介して、アーキテクチャ化レジスタ３０９、デコード／ディスパッチ・ユニット３０６、ロード・ストア・ユニット３１０、及びその他のプロセッサ・ユニット４０１と通信することができる。実行ユニット３０７は、幾つかのレジスタ回路４０３、４０４、及び４０５を用いて、算術論理演算ユニット（ＡＬＵ）４０２が演算対象とする情報を保持することができる。ＡＬＵ４０２は、加算（ａｄｄ）、減算（ｓｕｂｔｒａｃｔ）、乗算（ｍｕｌｔｉｐｌｙ）及び除算（ｄｉｖｉｄｅ）などの算術演算、並びに、論理積（ａｎｄ）、論理和（ｏｒ）及び排他的論理和（ＸＯＲ）、ローテート（ｒｏｔａｔｅ）及びシフト（ｓｈｉｆｔ）などの論理関数を実行する。１つの実施形態において、ＡＬＵ４０２は、設計に依存する専用の演算をサポートする。他の回路は、例えば条件コード及び復元サポート論理を含む、他のアーキテクチャ化ファシリティ４０８を提供することができる。典型的には、ＡＬＵ演算の結果は、出力レジスタ回路４０６内に保持され、この出力レジスタ回路４０６が、結果を種々の他の処理機能に転送することができる。他の実施形態においては、多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【００３０】
例えばＡＤＤ命令は、算術及び論理機能を有する実行ユニット３０７で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行ユニット（図示せず）で実行される。実行ユニットは、オペランドに対して操作コードが定めた関数を実行することにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ＡＤＤ命令は、命令のレジスタ・フィールドによって特定された２つのアーキテクチャ化レジスタ３０９内に見出されるオペランドに対して、実行ユニット３０７により実行することができる。
【００３１】
実行ユニット３０７は、２つのオペランドに対して算術加算を実行し、結果を第３のオペランドに格納し、ここで第３のオペランドは、第３のレジスタであっても又は２つのソース・レジスタの一方であってもよい。実行ユニット３０７は、シフト、ローテート、論理積、論理和及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除算のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット（ＡＬＵ）４０２を用いることが好ましい。スカラー演算のために設計されたＡＬＵ４０２もあり、浮動小数点のために設計されたＡＬＵ４０２もある。実施形態において、データは、アーキテクチャに応じて、ビッグエンディアン（最下位バイトが最も高いバイト・アドレスである）、又はリトルエンディアン（最下位バイトが最も低いバイト・アドレスである）とすることができる。ＩＢＭ（登録商標）  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅは、ビッグエンディアンである。符号付きフィールドは、符号及び大きさとすることができ、アーキテクチャに応じて、１の補数、又は２の補数とすることができる。２の補数における負の値又は正の値は、ＡＬＵ内で加法しか必要としないため、ＡＬＵ４０２が減算能力を設計する必要がないという点で、２の補数は有利である。数値は、通常、省略表現で記述され、１２ビット・フィールドは、４，０９６バイトブロックのアドレスを定め、通常、例えば４Ｋバイト（キロバイト）ブロックとして記述される。
【００３２】
図７を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット３０８に送られ、この分岐ユニット３０８は、分岐履歴テーブル４３２のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現在の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。１つの実施形態において、分岐ユニット３０８は、複数の入力レジスタ回路４２７、４２８及び４２９と、出力レジスタ回路４３０とを有するＡＬＵ４２６を用いることができる。分岐ユニット３０８は、例えば、汎用レジスタ、デコード／ディスパッチ・ユニット３０６、又は他の回路４２５と通信することができる。
【００３３】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるＩ／Ｏ割り込み信号、又は（マルチスレッド環境における）複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。１つの実施形態において、コンテキスト・スイッチ動作により、現在実行中のプログラムについての状態情報が保存され、次いで、起動される別のプログラムについての状態情報がロードされる。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値、条件コード、メモリ変換情報、及びアーキテクチャ化レジスタの内容を含む。コンテキスト・スイッチ活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード（マイクロコード、ピココード、又はライセンス内部コード（ＬＩＣ））により単独で又はその組み合わせで実施することができる。
【００３４】
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与え、汎用レジスタ又は専用レジスタ（例えば、浮動小数点レジスタ）のいずれかを明示的に指し示す１つ又は複数のレジスタ・フィールドを与えることができる。命令は、操作コード・フィールドによって、オペランドとして識別される暗黙指定のレジスタ（implied register）を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの長変位ファシリティ（long displacement facility）により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、インデックス・レジスタ、及び即値フィールド（変位フィールド）を定め、これらが、互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置（location）は、典型的には、特に断りのない限り、主メモリ（主ストレージ）内の記憶位置を意味する。
【００３５】
図８を参照すると、プロセッサは、ロード／ストア・ユニット３１０を用いて、ストレージにアクセスする。ロード／ストア・ユニット３１０は、キャッシュ・メモリ・インターフェースを通じてメモリ内のターゲット・オペランドのアドレスを取得し、オペランドをアーキテクチャ化レジスタ３０９若しくは別のメモリ位置にロードすることによって、ロード操作を行うことができ、又は、メモリ内のターゲット・オペランドのアドレスを取得し、アーキテクチャ化レジスタ３０９若しくは別のメモリ位置から取得したデータをメモリ内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード／ストア・ユニット３１０は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持する。ロード／ストア・ユニット３１０は、アーキテクチャ化レジスタ３０９、デコード／ディスパッチ・ユニット３０６、キャッシュ／メモリ・インターフェース若しくは他の要素４５５と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行って操作をイン・オーダー式に保持するための、種々のレジスタ回路、ＡＬＵ４５８、及び制御論理４６３を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード／ストア・ユニットは、当技術分野において周知のように、アウト・オブ・オーダー式動作が、プログラムに対してイン・オーダー式に実行されたように見えるようにする機能を提供する。
【００３６】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、仮想アドレスをオフセット値にプリフィックス付加すること、１つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、図５のＤＡＴ３１２のような種々のＤＡＴ技術の１つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含み、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅにおいては、領域第１テーブル、領域第２テーブル、領域第３テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ（ＴＬＢ）を用いることにより改善されることが多い。ＤＡＴ３１２が変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のＴＬＢのエントリを用いることがきる。ＴＬＢの内容は、最長時間未使用（Least Recently Used、ＬＲＵ）を含む種々の置換アルゴリズムによって管理することができる。
【００３７】
プロセッサ１０６がマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、Ｉ／Ｏ、キャッシュ、ＴＬＢ、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。１つの実施形態において、キャッシュ・コヒーレンシを保持する際に、「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか１つの状態にあるものとしてマーク付けすることができる。
【００３８】
図５のＩ／Ｏユニット３０４は、プロセッサ１０６に、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。Ｉ／Ｏユニット３０４は、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。ＩＢＭ（登録商標）  ｚ／Ｓｅｒｉｅｓのようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのＩ／Ｏユニットである。
【００３９】
インストルメンテーション・データは、プロセッサ１０６の動作に関連したデータである。１つの実施形態において、インストルメンテーション・データ及び他のシステム・レベル・メトリックへのアクセスが制限されていること又は利用できないことがある。コンピュータ・プロセッサは、特権状態（即ち、スーパーバイザ状態）、及び低特権状態（即ち、問題状態）の下で動作する。特権状態において、プログラムは、特権操作を介して、全てのシステム・リソースにアクセスする（例えば、全ての制御レジスタ及びスーパーバイザ・メモリ空間にアクセスする）ことができる。特権状態は、特権モード又はスーパーバイザ・モードとも呼ばれる。コンピュータ・プロセッサ上で実行されているオペレーティング・システムは、特権状態で動作し得る。低特権状態は、システム・リソースへのアクセスが制限されている非特権状態（non-privileged state）である。例えば、低特権状態で実行されているアプリケーション・プログラムは、制御レジスタへのアクセスが制限されるか又は制御レジスタにアクセスできないことがあり、且つ、オペレーティング・システムにより、アプリケーション・プログラムに割り当てられたユーザ・メモリ空間にしかアクセスすることができない。低特権状態は、典型的には、オペレーティング・システムの制御下で実行されるアプリケーション・プログラムに割り当てられ、特権操作を低特権状態で実施することはできない。低特権状態は、問題状態、問題モード、又はユーザ・モードとしても知られる。
【００４０】
低特権状態で実行されているプログラムに書き込み・アクセス可能でない１つのこうした制限されたリソースが、プログラム状況ワード（ＰＳＷ）である。ＰＳＷは、実行される次の命令のプログラム・カウンタと、分岐命令により使用可能な条件コード・フィールドと、インストルメンテーションがイネーブルにされているか又はディスエーブルにされているかを示すためのインストルメンテーション制御フィールドと、命令の順序を制御し、プログラムに割り当てられた特権状態を含むコンピュータ・プロセッサの状態を判断するために用いられる他の情報とを含むことができる。マルチスレッド処理環境においては、複数のプログラムが、利用可能なコンピュータ・プロセッサの容量を共有するか、又はタイムスライスする。プログラムの各々は、関連したＰＳＷ、プログラムに割り当てられた主ストレージにアクセスするためのアドレス変換テーブルの起点アドレス（origin address）、汎用レジスタの現在値のセット、制御レジスタ、浮動小数点レジスタ等を含む、コンテキスト情報を有する。現在アクティブな又は制御を行っているＰＳＷは、現（current）ＰＳＷと呼ばれる。この現ＰＳＷは、現在実行されているプログラムを制御する。コンピュータ・プロセッサは、割り込み能力を有し、この割り込み能力により、例外条件及び外部からの刺激に応答して、コンピュータ・プロセッサが、別のプログラムにより迅速にコンテキストを切り替えることが可能になる。割り込みが発生すると、コンピュータ・プロセッサは、現ＰＳＷを、特定のクラスの割り込みのための、旧（old）ＰＳＷ位置と呼ばれる割り当てられたストレージ位置に入れる。コンピュータ・プロセッサは、第２の割り当てられたストレージ位置から、新(new）ＰＳＷをフェッチする。この新しいコンテキストにより、実行される次のプログラムが判断される。１つの実施形態において、これらのストレージ位置は、コンピュータ・プロセッサがアクセス可能なメモリ位置に配置される。コンピュータ・プロセッサが割り込み処理を終了すると、割り込みを処理するプログラムは、旧ＰＳＷを含む旧コンテキストを再ロードし、これを再び現ＰＳＷとすることができ、これにより、割り込みを受けたプログラムが続行できるようになる。
【００４１】
ＰＳＷのフィールドは、明示的に（例えば、命令の実行がＰＳＷビットの一部を読み出す場合）、又は暗黙的に（例えば、命令フェッチ、オペランド・フェッチ、アドレス生成計算、アドレス生成ソース等の際に）参照することができる。明示的な参照は、一般に、実行時に実施されるのに対して、暗黙的な参照は、一般に、命令実行中のパイプラインの異なる段階（即ち、命令フェッチ、命令デコード、実行時、及び完了時）に実施される。ＰＳＷ内の個々のフィールドは、互いに独立して参照又は更新することができる。
【００４２】
１つの実施形態において、コンテキストを操作することにより、オペレーティング・システムは、コンピュータ・プロセッサによりランタイム・インストルメンテーションをイネーブルにすることを含む、コンピュータ処理リソースの制御を行う。ランタイム・インストルメンテーションは、オペレーティング・システムの実行の際、並びに、オペレーティング・システムにより実行されるいずれかのソフトウェア・アプリケーションにより、イネーブル又はディスエーブルにすることができる。ランタイム・インストルメンテーションのイネーブル／ディスエーブル状態は、プログラムと関連したＰＳＷ内に、コンテキスト情報として保存される。
【００４３】
ランタイム・インストルメンテーション（ＲＩ）ファシリティは、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅを実装するモデル上に組み込むことができる。ＲＩファシリティがインストールされ、イネーブルにされると、プログラム実行中、データが、ＣＰＵの１つ又は複数の収集バッファ内に収集され、次いで、プログラム・バッファに報告される。格納された情報の各単位は、報告グループと呼ばれる。報告グループの内容は、その内容がプログラム実行中ＣＰＵにより認識されたイベントを表す複数の記録から成る。
【００４４】
ランタイム・インストルメンテーション・ファシリティが構成内にインストールされている場合、ＰＳＷフィールド（ＲＩビット）がランタイム・インストルメンテーションをイネーブルにする。ランタイム・インストルメンテーション制御の有効性が、ＲＩビットをオンにする能力を決定するが、ＲＩが１のとき、ＣＰＵ制御は有効であり、ランタイム・インストルメンテーションがイネーブルにされる。ランタイム・インストルメンテーション・ファシリティは、以下の命令：ランタイム・インストルメンテーション制御ロード（load run-time-instrumentation controls）命令、ランタイム・インストルメンテーション制御変更（modify run-time-instrumentation controls）命令、ランタイム・インストルメンテーション発行（run-time-instrumentation emit）命令、ランタイム・インストルメンテーション・ネクスト（run-time-instrumentation next）命令、ランタイム・インストルメンテーション・オフ（run-time-instrumentation off）命令、ランタイム・インストルメンテーション・オン（run-time-instrumentation on）命令、ランタイム・インストルメンテーション制御ストア（store run-time-instrumentation controls）命令、及びランタイム・インストルメンテーション制御テスト（test run-time-instrumentation controls）命令を含むことができる。
【００４５】
ランタイム・インストルメンテーション制御ロード（ＬＲＩＣ，Load Run-time-Instrumentation Controls）命令は、ランタイム・インストルメンテーションを制御するランタイム・インストルメンテーション制御を初期化する。ランタイム・インストルメンテーション制御変更（ＭＲＩＣ，Modify Run-time-Instrumentation Controls）命令は、初めにＬＲＩＣによって確立されたランタイム・インストルメンテーション制御の全て又はサブセットを変更する。ランタイム・インストルメンテーション発行（ＲＩＥＭＩＴ，Run-time-Instrumentation EMIT）命令は、汎用レジスタの値を収集バッファ内に格納することにより、これを収集する。ランタイム・インストルメンテーション・ネクスト（ＲＩＮＥＸＴ，Run-time-Instrumentation NEXT）命令は、ＲＩＮＥＸＴの後の次の順次命令（ＮＳＩ，Next Sequential Instruction）の指向サンプリングを実施する。ランタイム・インストルメンテーション・オフ（ＲＩＯＦＦ，Run-time-Instrumentation OFF）命令は、ランタイム・インストルメンテーションをディスエーブルにする。ランタイム・インストルメンテーション・オン（ＲＩＯＮ，Run-time-Instrumentation ON）命令は、ランタイム・インストルメンテーションをイネーブルにする。ランタイム・インストルメンテーション制御ストア（ＳＴＲＩＣ，STore Run-time-Instrumentation Controls）命令は、ランタイム・インストルメンテーション制御の現在の値を指定されたストレージ位置に入れる。ランタイム・インストルメンテーション制御テスト（ＴＲＩＣ，Test Run-time-Instrumentation Controls）命令は、ランタイム・インストルメンテーション制御を検査する。有効である場合、制御変更インジケータの状態が設定される。
【００４６】
ランタイム・インストルメンテーション・ファシリティは、測定警報外部割り込み（measurement-alert external interruption）を保留中（pending）にする能力を含む。ランタイム・インストルメンテーションによって収集され、プログラム・バッファに報告される情報の一部はモデル依存であり、従って、定義されない。ランタイム・インストルメンテーション・ファシリティにより与えられるサンプル及びデータは、性能特性の統計的推定を目的としており、概ね正確であり、繰り返し可能でないことがある。例えば、サンプリング・モードに関係なく、例外を発生させた又は特定のシステムの内部活動と関連付けられたサンプル命令が報告グループのストアをもたらすかどうか、そして、ストアされる場合、ランタイム・インストルメンテーション・データ内に含まれるモデル依存データに影響を及ぼすかどうかは、予測不可能である。
【００４７】
収集バッファは、その内容がプログラム実行中プロセッサにより認識されるイベントについて報告する記録のセットをキャプチャするために用いられる。例として、１又は複数の成立した分岐の実行、トランザクション実行アボート（abort）イベント、及びＲＩＥＭＩＴ命令のオペランドが挙げられる。ＲＩＥＭＩＴ命令の実行は、汎用レジスタの値を収集バッファ内に格納することにより、これを収集する。付加的なデータを収集すること、及び／又は命令データ・バッファなどの他のバッファに格納することが可能である。
【００４８】
報告は、報告制御に従う。サンプル命令が識別されると、各々の報告制御は、対応する条件のチェックをイネーブルにする。対応する条件が存在する場合、報告グループが形成され、格納される。報告制御がイネーブルにされないか、又はイネーブルにされた報告制御に関して対応する条件が存在しない場合、報告グループは格納されない。サンプル命令について報告されたデータは、命令データ・バッファ及び他のモデル依存のソースから取得され、次いで、このデータを用いて報告グループの１つ又は複数の記録の内容が作成され、１つのこうした記録が命令の記録となる。
【００４９】
報告グループ・ストアにおいてキャプチャすることができる記録タイプには：フィラー（filler）、追加（extra）、開始（begin）、タイムスタンプ（timestamp）、命令（instruction）、発行（emit）、ＴＸアボート（TX abort）、呼び出し（call）、リターン（return）、及び転送（transfer）が含まれる。フィラー記録は、収集バッファ内の有効な記録の数が現在の報告グループ・サイズの報告グループを満たすのに十分でない場合に、報告グループにおいて使用される。追加記録は、報告グループの追加セクションにおいて使用することができる。開始記録は、第１の報告グループの最初の記録である。タイムスタンプ記録は、第１の報告グループ以外のあらゆる報告グループの記録０として格納される。命令記録は、サンプル命令に関して報告グループが格納されるときに、報告グループの最後の記録として作成される。発行記録は、ＲＩＥＭＩＴの正常な実行により作成される。トランザクション実行（ＴＸ，Transaction-Execution）モード・アボート記録は、暗黙的アボート、又は、トランザクション・アボート命令の実行によって作成される。呼び出し記録は、呼び出しタイプ分岐命令として分類される分岐命令の実行によって作成される。リターン記録は、リターン・タイプ命令として分類されるリターン・タイプ分岐命令の実行によって作成される。転送記録は、特定の条件コード基準を満たす分岐命令の実行によって作成される。
【００５０】
図９は、１つの実施形態において実装することができるプロセッサのランタイム・インストルメンテーションのためのシステムの概略図を示す。１つの実施形態において、システム５００は、図３のプロセッサ１０６などの中央演算処理ユニット（ＣＰＵ）を含む。１つの実施形態において、プロセッサ１０６は、シングル・プロセッサである。代替的な実施形態において、プロセッサ１０６は、マルチコア・プロセッサのシングル処理コアである。１つの実施形態において、プロセッサ１０６は、様々な速度で動作し得る。
【００５１】
１つの実施形態において、プロセッサ１０６は、レジスタ５１０をさらに含む。レジスタ５１０は、プロセッサ１０６により使用するためのデータのワードを格納することができるハードウェア・レジスタである。レジスタ５１０は、プロセッサ１０６によりアクセスが可能なデータ・ビットを格納するための１又は複数のラッチを含む。レジスタ５１０は、例えば、汎用レジスタ及び制御レジスタを含むことができる。プロセッサ１０６は、レジスタ５１０と通信するインストルメンテーション・モジュール５０６を付加的に含む。インストルメンテーション・モジュール５０６は、プロセッサ１０６のインストルメンテーションを制御する。インストルメンテーション・モジュール５０６は、１つ又は複数の成立した分岐の実行経路、トランザクション実行アボート・イベント、種々のランタイム・オペランド、タイムスタンプ情報等といったインストルメンテーション・データを、プロセッサ１０６から直接収集するように構成される。インストルメンテーション・モジュール５０６は、プロセッサ１０６からインストルメンテーション・データを収集し、そのインストルメンテーション・データを収集バッファ５０８に格納する。１つの実施形態において、収集バッファ５０８は、インストルメンテーション・モジュール５０６から受け取ったデータを収集する循環バッファ（circular buffer）であり、循環バッファが満たされると、該循環バッファは、最も古いデータを新しいデータで上書きする。
【００５２】
プロセッサ１０６は、１つ又は複数のオペレーティング・システム５１６及び１つ又は複数のアプリケーション５１８を実行する。１つ又は複数のオペレーティング・システム５１６及び１つ又は複数のアプリケーション５１８は、ハードドライブ、ＣＤ／ＲＯＭ、フラッシュ・メモリ等のようなストレージ５２０内に格納され、必要に応じてストレージ５２０からランタイム・メモリ５０４内にロードされる、ページと呼ばれる、現在実行されているオペレーティング・システム及び／又はアプリケーションの１つ又は複数のアクティブ部分を格納するために予約された主メモリ５１４のランタイム・メモリ５０４領域にロードされる。１つの実施形態において、オペレーティング・システムの各々は、ハイパーバイザ（図示せず）によって管理され、且つ、プロセッサ１０６により実行される仮想マシンとして実行される。
【００５３】
１つの実施形態において、プロセッサ１０６は、主メモリ５１４から、現在実行されているオペレーティング・システム又はアプリケーションに関する主メモリ５１４内のＰＳＷデータ５１２からのＰＳＷをレジスタ５１０にロードし、例えばレジスタ５１０において、１つ又は複数のプロセッサ設定（processor settings）を設定する。１つの実施形態において、レジスタ５１０内のＰＳＷは、インストルメンテーション・モジュール５０６をイネーブルにし、制御するための１又は複数のビットを含む。
【００５４】
１つ又は複数のアプリケーション５１８は、特定のオペレーティング・システム上で実行されるようにコンパイルされたソフトウェア・アプリケーション、インタープリタ（例えば、Ｊａｖａ（登録商標）上で実行される解釈済みコード、又はオペレーティング・システム・サポート・スレッド（例えば、プロセス管理、デーモン等）を含む。１つ又は複数のオペレーティング・システム５１６、及び／又は、１つ又は複数のアプリケーション５１８の各々は、インストルメンテーション・モジュール５０６をトリガして、インストルメンテーション・データの収集を開始又は停止するための命令を実行することができる。
【００５５】
１つの実施形態において、１つ又は複数のアプリケーション５１８の１つは、サンプル命令であると判断された命令を実行し、それにより、サンプル命令の実行の完了時にサンプル・ポイントが作成され、その結果、インストルメンテーション・モジュール５０６が、収集バッファ５０８からのアプリケーションの収集データを、アプリケーションがアクセス可能な主メモリ５１４内のプログラム・バッファ５２２に移動させる。主メモリ５１４は、当技術分野において周知の任意のアドレス指定可能メモリとすることができる。１つの実施形態において、主メモリ５１４は、キャッシュと呼ばれることもある、高速アクセス・バッファ・ストレージを含むことができる。各ＣＰＵは、関連したキャッシュを有することができる。付加的な実施形態において、主メモリ５１４は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）である。さらに別の実施形態において、主メモリは、アプリケーションによりアクセス可能な、コンピュータのハードドライブ又はフラッシュ・メモリなどのストレージ・デバイスである。
【００５６】
ランタイム・インストルメンテーション機能は、実験室環境において又はオフライン分析のために使用できるだけでなく、実行時のプログラム内のライブ・ソフトウェア環境においても、プログラム制御下でも使用できる新しいファシリティである。特権状態は、プロセッサ１０６の制御を設定し、ランタイム・インストルメンテーションを管理することができる。低特権状態から制御の大部分を変更する能力をもたらすことにより、ランタイム・インストルメンテーション・ファシリティの柔軟性が強化される。低特権状態は、ランタイム・インストルメンテーションから利益を得る可能性が最も高い。低特権状態は、（１）特権状態が、これが実行している全ての低特権状態プログラムにわたる整合性および制御を維持すること、並びに（２）オペレーティング・システム自体がランタイム・インストルメンテーションを実施しているとき、低特権状態がランタイム・インストルメンテーションを実施する場合も実施しない場合もあることを保証するように、特定の設定の変更が禁止されている。どちらも、スーパーバイザがランタイム・インストルメンテーションを一時的にディスエーブルにし、そのランタイム・インストルメンテーション・コンテキストを保存し、低特権状態プログラムのランタイム・インストルメンテーション・コンテキストを復元し、次に、ランタイム・インストルメンテーションが再びイネーブルにされた状態で低特権状態プログラムを開始する場合、ランタイム・インストルメンテーションを実施することができる。コンテキストの変更が、ランタイム・インストルメンテーション制御の適切な保存／復元を含まない場合、特権状態及び低特権状態の両方において収集されたデータの衝突により、使用できないランタイム・インストルメンテーション・データの集まりになる可能性が高い。
【００５７】
１つの実施形態において、低特権状態プログラムをより良好にサポートするために、ランタイム・インストルメンテーション制御変更（ＭＲＩＣ，Modify Run-time-Instruction）命令が定められる。ＭＲＩＣ命令は、レジスタ５１０において現在アクティブな、ランタイム・インストルメンテーションに関連した特定のプロセッサ１０６の制御を変更するために使用される準特権命令である。制御は、特権状態によるランタイム・インストルメンテーション制御ロード（ＬＲＩＣ，Load Run-time-Instruction Control）命令の正常な実行（successful execution）により、初めにロードされる。
【００５８】
ランタイム・インストルメンテーション制御と相互作用するＭＲＩＣ命令の能力は、以下で詳細に説明される。ＭＲＩＣ命令の実行が成功した場合、ＭＲＩＣ命令の実行が正常に完了したときにＭＲＩＣ命令により指定される全ての制御が設定され、さもなければ、ＭＲＩＣ命令の実行が失敗した場合、制御に影響を及ぼさない。
【００５９】
図１０は、１つの実施形態におけるＭＲＩＣ命令を示す。１つの実施形態において、ＭＲＩＣ命令６００は、操作コード６０２及び６０４を含む（この特定の場合は「オペコード」又は「分割オペコード（split opcode）」とも呼ばれる）。オペコード６０２及び６０４は、図９のプロセッサ１０６のようなプロセッサに対してＭＲＩＣ命令を識別する。ＭＲＩＣ命令６００はまた、基底レジスタ・フィールド６０６（Ｂ２）並びに変位フィールド６０８及び６１０のセットをまとめたものから決定されるオペランド・アドレスを含む。基底レジスタ＋変位レジスタの内容の和は、ＭＲＩＣ命令によって更新されるランタイム・インストルメンテーション制御設定を含むランタイム・インストルメンテーション制御制御ブロック（ＲＩＣＣＢ，Run-time-Instrumentation Controls Control Block）の位置を指し示す。変位フィールド６０８及び６１０は、基底レジスタ・フィールド６０６により示される基底レジスタ内に含まれるアドレスからの変位を示し、その和はＲＩＣＣＢに一致する。図１０は、明確にするための、ＭＲＩＣ命令の１つの実施形態を示す。当業者であれば、他の実施形態において、ＭＲＩＣ命令を異なるようにフォーマットすることができ、及び／又は、異なるオペランド及びオペコードを含み得ることを理解するであろう。
【００６０】
ＭＲＩＣ命令６００は、ＬＲＩＣ命令により更新可能な制御のうちのサブセットだけを更新するために使用される。ＭＲＩＣ命令６００によって設定される制御は、ＬＲＩＣ命令によって正常に設定された制御のサブセットに制限される。ランタイム・インストルメンテーション制御は、種々のランタイム・インストルメンテーション制御を更新する能力を含む、ＭＲＩＣ命令の動作を制御する多数のビットを含む。１つの実施形態において、これらのビットは、ＬＲＩＣ命令によってのみ設定することができる全てのランタイム・インストルメンテーション制御のサブセット内に配置される。
【００６１】
図１１は、１つの実施形態における、低特権状態プログラムからＭＲＩＣ命令を開始するためのプロセス・フローを示す。ブロック７０２において、プロセッサにより、ＭＲＩＣ命令がフェッチされる。ブロック７０４において、プロセッサにより、ＭＲＩＣ命令が実行される。ブロック７０６において、ＲＩＣＣＢ内のランタイム・インストルメンテーション制御値が、ランタイム・インストルメンテーション制御内にロードされる。ブロック７０８において、ランタイム・インストルメンテーション制御は、ロードされた設定に基づいて、情報を図９のプログラム・バッファ５２２に与える。
【００６２】
図１２は、付加的な実施形態における、低特権状態プログラムからＭＲＩＣ命令を開始するためのプロセス・フローを示す。１つの実施形態において、図１２のプロセス・フローは、図９のインストルメンテーション・モジュール５０６によって実行される。ブロック８０２において、低特権状態プログラムより発行されたＭＲＩＣ命令がフェッチされる。ＭＲＩＣ命令は、オペコード及びオペランドを含む。ＭＲＩＣ命令のオペランドは、ランタイム・インストルメンテーション制御を更新するのに使用されるランタイム・インストルメンテーション制御値を含むＲＩＣＣＢである。これらの値は、例えば、ランタイム・インストルメンテーション・データ・サンプリングの詳細を管理するための制御値、ランタイム・インストルメンテーション・データ収集の詳細を管理するための制御値、プログラム・バッファ内に報告するランタイム・インストルメンテーション・データの詳細を管理するための制御値、プログラム・バッファの位置内の現在アドレス等を含む。
【００６３】
ブロック８０４において、ＭＲＩＣの実行が許可されるかどうかが判断される。ランタイム・インストルメンテーションのＳビット（ＬＲＩＣによってのみ制御される）は、低特権状態プログラムが、ＭＲＩＣ命令の実行を可能にするどうかを決定する。ランタイム・インストルメンテーションＳビットが１に設定されていた場合、処理はブロック８０６に続く。
【００６４】
ブロック８０６において、現在のランタイム・インストルメンテーション制御の有効性ビット（Ｖビットとも呼ばれる）が１に設定されているかどうかが判断される。有効性ビットは、以前にＬＲＩＣ命令によって設定されたとおりに、プロセッサにおけるランタイム・インストルメンテーション制御のセットの有効性を示す。現在のランタイム・インストルメンテーション制御が有効でない（即ち、以前のＬＲＩＣ命令により無効とされた）場合、ブロック８１８において、ＭＲＩＣ命令の正常な実行を行うことができない。１つの実施形態において、ＭＲＩＣ命令の実行の失敗により従来の設定が変更されず、ランタイム制御は以前の値のままである。有効性ビットは、ＭＲＩＣ命令により更新することができない。ブロック８０８において、ＭＲＩＣ命令が指し示すＲＩＣＣＢがフェッチされる。
【００６５】
妥当性ビットが１に設定される（即ち、ランタイム・インストルメンテーション制御が有効である）場合、処理はブロック８１０に続く。ブロック８１０において、Ｋビットがゼロである（即ち、低特権状態プログラムが、ランタイム・インストルメンテーション制御に関して準特権状態で実行されていない）場合、ブロック８１４において、起点アドレスも制限アドレスも更新されないが、ＭＲＩＣによる更新が許可される他の全ての制御が更新される。Ｋビットが１である（即ち、低特権状態プログラムが、ランタイム・インストルメンテーション制御に関して準特権状態で実行されている）場合、ブロック８１２において、起点アドレス及び制限アドレスを含めて、ＭＲＩＣによる更新が許可される全ての制御が更新される。
【００６６】
図１３は、１つの実施形態における、特権状態により設定可能な制御を含むランタイム・インストルメンテーション制御制御ブロック（ＲＩＣＣＢ）の一部を示す。制御ブロック部分９００は、図１３を参照して説明されるもの以外の付加的な値を含むことができる。ＬＲＩＣ命令により、制御ブロック部分９００に対する変更を実施することができる。
【００６７】
制御ブロック部分は、有効性ビット９０２（Ｖビット）を含む。有効性ビット９０２は、以前にＬＲＩＣ命令により設定されたとおりに、プロセッサにおけるランタイム・インストルメンテーション制御のセットの有効性を示す。
【００６８】
制御ブロックはまた、低特権状態プログラムがＭＲＩＣ命令の実行を許可するかどうかを判断するのに使用されるＳビット９０４も含む。Ｋビット９０６は、低特権状態プログラムが、ランタイム・インストルメンテーション制御の起点アドレス及び制限アドレスなどのランタイム・インストルメンテーション制御に関して、準特権状態での実行が許可されるかどうかを示す。Ｈビット９０８は、アドレス制御（即ち、起点アドレス、制限アドレス、及び現在のアドレス）が一次仮想アドレス空間を参照するか又はホーム仮想アドレス空間を参照するかを決定する。０ビット９１０は無視され、０として扱われる。
【００６９】
低特権状態サンプル報告制御ビット９１２（Ｐｓビット）は、低特権状態プログラムと併せて使用される。低特権状態において、ランタイム・インストルメンテーション制御内のＰｓビット９１２がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているときには、ランタイム・インストルメンテーション制御の報告制御は無視され、従って、報告グループは格納されない。低特権状態にあり、ランタイム・インストルメンテーション制御のＰｓビット９１２が１である場合、報告制御がチェックされ、その定められた機能に従って使用される。
【００７０】
スーパーバイザ状態サンプル報告制御ビット９１４（Ｑｓビット）は、スーパーバイザ状態プログラムと併せて使用される。スーパーバイザ状態において、ランタイム・インストルメンテーション制御のＱｓビット９１４がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているとき、ランタイム・インストルメンテーション制御の報告制御は無視され、従って、報告グループは格納されない。スーパーバイザ状態において、ランタイム・インストルメンテーション制御のＱｓビット９１４が１である場合、報告制御がチェックされ、その定められた機能に従って使用される。
【００７１】
低特権状態収集バッファ制御ビット９１６（Ｐｃビット）は、図９の収集バッファ５０８に対する更新を制御する。低特権状態において、ランタイム・インストルメンテーション制御のＰｃビット９１６がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているときには、ランタイム・インストルメンテーション制御の収集バッファ制御は無視され、収集バッファ５０８の更新が防止される。低特権状態において、ランタイム・インストルメンテーション制御のＰｃビット９１６が１である場合、収集バッファ制御がチェックされ、その定められた機能に従って使用される。
【００７２】
スーパーバイザ状態収集バッファ制御ビット９１８（Ｑｃビット）は、収集バッファ５０８に対する更新を制御する。スーパーバイザ状態において、ランタイム・インストルメンテーション制御内のＱｃビット９１８がゼロである場合、ランタイム・インストルメンテーションがイネーブルにされているときには、ランタイム・インストルメンテーション制御の収集バッファ制御は無視され、収集バッファ５０８の更新は防止される。スーパーバイザ状態において、ランタイム・インストルメンテーション制御内のＱｃビット９１８が１である場合、指し示された収集バッファ制御がチェックされ、その定められた機能に従って使用される。
【００７３】
Ｇビット９２０は、停止割り込み（halted interruption）とも呼ばれるランタイム・インストルメンテーションの停止割り込みの保留制御である。Ｇビット９２０がゼロである場合、停止割り込みは保留中でない。Ｇビット９２０が１である場合、停止割り込みは保留中である。プログラム・バッファ５２２内の第１の報告グループが書き込まれると、Ｇビット９２０はゼロに設定される。つまり、プログラム・バッファの起点アドレスがプログラム・バッファの制限アドレスに等しい場合、Ｇビット９２０はゼロに設定される。プログラム・バッファ５２２内の第１の報告グループ以外のストアが試行された場合であって、ランタイム・インストルメンテーション停止条件が存在しないときには、Ｇビット９２０がゼロに設定され、報告グループが格納される。プログラム・バッファ５２２内の第１の報告グループ以外のストアが試行された場合であって、ランタイム・インストルメンテーション停止条件が存在するときには、Ｇビット９２０が１に設定され、報告グループは格納されない。
【００７４】
Ｕビット９２２は、バッファ・フル割り込み（buffer-full interruption）及び停止割り込みに対するイネーブルメント制御である。Ｕビット９２２がゼロであるとき、割り込み要求の生成がディスエーブルにされ、保留中の場合は、保留中のままである。
【００７５】
Ｌビット９２４は、バッファ・フル割り込みの保留制御である。Ｌビット９２４がゼロである場合、バッファ・フル割り込みは保留中でない。Ｌビット９２４が１である場合、バッファ・フル割り込みは保留中である。
【００７６】
キー・フィールド９２６は、その値が報告グループのストアのためのストレージ保護キーとして使用される、４ビットの符号なし整数である。ストレージ・キーがストレージ・アクセス要求と関連したアクセス・キーと一致する場合にのみ、報告グループのストアが許可され、フェッチは、ストレージ・キーがアクセス・キーと一致する場合又はストレージ・キーのフェッチ保護ビットがゼロである場合のみ、フェッチが許可される。ストレージ・キーの４つのアクセス制御ビットがアクセス・キーと等しい場合、又はアクセス・キーがゼロである場合、キーが一致する。
【００７７】
図１４は、ＭＲＩＣが準特権モードでの実行が許可される（即ち、Ｋビットが１である）場合のＲＩＣＣＢ制御ブロックの一部を示す。制御ブロック１０００は、図１４を参照して説明されるもの以外の付加的な値を含むことができる。１つの実施形態において、低特権状態プログラムによっては、ＭＲＩＣ命令オペランドのいずれのグレイアウトされたセクションにもアクセスすることができない。準特権モードが許可され場合、起点アドレス（ＲＯＡ）１００２及び制限アドレス１００４は、低特権状態プログラムにより、ＭＲＩＣ命令を用いて設定される。
【００７８】
１つの実施形態において、現在アドレス・フィールド（ＲＣＡ）１００６は、ＭＲＩＣ命令により更新することができる。現在アドレス・フィールド１００６は、報告グループ・サイズ（Reporting Group Size）フィールド１０４４（ＲＧＳフィールド）を検査し、プログラム・バッファのアドレスを形成するのに使用される有効ビット位置の数に影響を与える。６４ビットのランタイム・インストルメンテーション・プログラム・バッファの現在アドレスは、ワード０、ワード１のビット位置０乃至２６−ＲＧＳ、及びＲＧＳ＋右に付加された５つの２進数ゼロである。これが、プログラム・バッファ５２２内に格納されることになる後続の報告グループの、図９のプログラム・バッファ５２２における開始位置である。報告グループは、インストルメンテーション・モジュール５０６により作成され、後にプログラム・バッファ５２２内に格納される情報の単位である。１つの実施形態において、現在アドレス・フィールド１００６により指定されるＲＧＳフィールド１０４４が、ランタイム・インストルメンテーション制御の現在の報告グループ・サイズと等しくない（即ち、現在アドレス・フィールド１００６がＲＧＳフィールド１０４４を変更する）場合、現在アドレス・フィールド１００６は、起点アドレス１００２に設定される。
【００７９】
残りのサンプル間隔カウント（Remaining Sample Interval Count）フィールド１０４２（ＲＳＩＣフィールド）は、ＭＲＩＣ命令を用いて低特権プログラムにより更新することができる。ＲＳＩＣフィールド１０４２は、残りのサンプル間隔カウントを示す６４ビットの符号なし整数を含む。ランタイム・インストルメンテーション制御内のＲＳＩＣフィールド１０４２の値がゼロであるか又はスケーリング・ファクタ・フィールド１０４０（ＳＦフィールド）内の値に等しく、且つ、ランタイム・インストルメンテーションがイネーブルにされている場合、次のサンプル間隔は、サンプリング・モード・フィールド１００８（Ｍフィールド）及びＳＦフィールド１０４０の値に基づく完全な間隔（full interval）である。ＲＳＩＣフィールド１０４２が非ゼロであり、ＳＦフィールド１０４０を下回り、且つ、ランタイム・インストルメンテーションがイネーブルにされている場合、次のサンプル間隔は、部分的な間隔である。ＲＳＩＣフィールド１０４２が非ゼロであり、ＳＦフィールド１０４０の値を上回り、且つ、ランタイム・インストルメンテーションがイネーブルにされている場合、次のサンプル間隔は延長した間隔である。延長した間隔が期間満了すると、次の間隔は、ＳＦフィールド１０４０の値に基づく。ＲＳＩＣフィールド１０４２が非ゼロの値に設定されると、このＲＳＩＣフィールド１０４２は、ＳＦフィールド１０４０も従う同じモデル依存の最大限度に従う。ＲＳＩＣフィールド１０４２のオリジナル値がゼロである場合、サンプリング・モードは、ＬＲＩＣ命令及びＭＲＩＣ命令の実行中、ＲＳＩＣフィールド１０４２がＳＦフィールド１０４０内の値に設定されるかどうか、又は、ランタイム・インストルメンテーションがイネーブルにされるまで、ＲＳＩＣフィールド１０４２が引き続きゼロとして表示されるかどうかを指示する。
【００８０】
ＳＦフィールド１０４０は、その値がスケーリング・ファクタの単位のカウントである６４ビットの符号なし整数を含む。単位の大きさは、サンプリング・モード・フィールド１００８（Ｍフィールド）から決定される。ＲＳＩＣフィールド１０４２内の値がゼロである場合、ＳＦフィールド１０４０は、現在の命令がサンプル命令として認識される、ゼロまでデクリメントされるＲＳＩＣフィールド１０４２の初期値を提供し、間隔カウントがＳＦフィールド１０４０の値からリフレッシュされる。ＳＦフィールド１０４０の有効値は、１から２６４−１までの範囲内にある。ゼロが指定される場合、１の値が推定される。しかしながら、各モデルはＳＦフィールド１０４０の最小値及び最大値の両方を有し得る。最小値及び最大値はまた、サンプリング・モード・フィールド１００８に基づいて異なり得る。最小値を下回る値が指定される場合、モデル依存の最小値がロードされる。最大値を上回る値が指定される場合、モデル依存の最大値がロードされる。
【００８１】
ＤＣ制御フィールド１０３６は、その値がデータフェッチ又はストアのキャッシュミスと関連したキャッシュ待ち時間（cash-latency）レベルを指し示す、４ビットの符号なし整数である。つまり、サンプル命令がデータ・アクセス・キャッシュミスに遭遇した。別のランタイム・インストルメンテーション制御により禁止されない限り、そのデータ・アクセスによりＤＣ制御フィールド１０３６の値により指し示されるレベルを数値的に上回るか又はこれに等しいキャッシュ待ち時間レベルでミスが認識されたサンプル命令を表す報告グループのストアが試行される。データ・アクセスに関するキャッシュ構造及びキャッシュ待ち時間レベルは、モデル依存である。複数の又は長いオペランドを用いる命令については、もしあれば、どのオペランド・アクセスが報告制御に用いられるかは、モデル依存である。モデル依存の挙動は、ＤＣ制御フィールド１０３６の値を無視することがあり、従って、この値は、報告グループのストアのために使用しないことがある。
【００８２】
ＩＣフィールド１０３４は、その値が命令フェッチのキャッシュミスと関連したキャッシュ待ち時間レベルを指し示す、４ビットの符号なし整数である。つまり、サンプル命令のフェッチが命令フェッチ・キャッシュミスに遭遇した。ＩＣフィールド１０３４及びＤＣ制御フィールド１０３６の両方について、キャッシュ待ち時間レベルは、観察しているプロセッサから特定のキャッシュ・レベル・アクセスまでの距離を抽象化したものである。待ち時間レベルは、プロセッサと主ストレージとの間のネスト化されたキャッシュ・レベルの量と、こうしたキャッシュ・レベルが複数のプロセッサ間でどのように共有されるかの組み合わせに依存する。より大きい待ち時間レベルは、一般に、より時間のかかるアクセスに対応する。ＩＣフィールド１０３４及びＤＣ制御フィールド１０３６内の値は、キャッシュ待ち時間レベルのゼロを起点とした識別子と考えることができる。例えば、ゼロの値は、Ｌ１キャッシュ（即ち、プロセッサに最も近いキャッシュ）に対応する。従って、１の値は、Ｌ２キャッシュ、又は、幾つかのマシンにおいてはＬ１．５キャッシュとして知られ得る次のキャッシュ層である。２−１５の値は、主メモリに到達するまでの付加的なキャッシュ待ち時間層の論理的進行を示すが、主メモリ自体は含まない。一般に、キャッシュ構造は、１５の層の深さには至らない。従って、ＩＣフィールド１０３４及びＤＣ制御フィールド１０３６内の１５という値は、特別な場合と解釈され、命令フェッチ又はデータ・アクセスにおけるキャッシュミスは、それぞれ、キャッシュ待ち時間レベルに関係なく、報告グループのストアを発生させる目的では認識されないことを意味する。別のランタイム・インストルメンテーション制御により禁止されない限り、そのフェッチにより、ＩＣフィールド１０３４の値により指し示されるレベルを数値的に上回る又はこれに等しいキャッシュ待ち時間レベルでミスが認識されたサンプル命令を表す報告グループのストアが試行される。命令フェッチに関するキャッシュ構造及びキャッシュ待ち時間レベルは、モデル依存である。モデル依存の挙動は、ＩＣフィールド１０３４の値を無視することがあり、従って、この値は、報告グループのストアのために使用しないことがある。
【００８３】
キャッシュ待ち時間レベル・オーバーライド報告制御ビット１０３２（Ｆビット）は、非分岐命令及び分岐予測制御のためのものである。ランタイム・インストルメンテーション制御内のＦビット１０３２がゼロである場合、ランタイム・インストルメンテーション制御のキャッシュ報告制御（ＩＣフィールド１０３４及びＤＣ制御フィールド１０３６）がチェックされ、その定められた機能に従って使用される。ランタイム・インストルメンテーション制御の分岐予測制御（ＢＰｘｎビット１０２２、ＢＰｘｔビット１０２４、ＢＰｔｉビット１０２６、及びＢＰｎｉビット１０２８）がチェックされ、その定められた機能に従って使用される。Ｆビット１０３２が１である場合、別の制御によって禁止されない限り、これらの同じ制御が無視され、報告グループが格納される。
【００８４】
データ・キャッシュミス制御ビット１０３０（Ｄビット）は、報告グループを格納するかどうかを示す。Ｄビット１０３０が１である場合、追加タイプ記録が、サンプル命令についてのモデル依存データを含む報告グループの追加セクションに入れられ、又は入れられない場合がある。
【００８５】
ＭＲＩＣ命令は、分岐予測（ＢＰ）報告制御（ＢＰｘｎ１０２２、ＢＰｘｔ１０２４、ＢＰｔｉ１０２６、及びＢＰｎｉ１０２８）を含む。ランタイム・インストルメンテーション制御内のＢＰ報告制御ビットがゼロである場合、対応する条件はチェックされない。ＢＰ報告制御ビットが１であり、対応する分岐予測条件が存在する場合、報告グループが格納される。
【００８６】
ＢＰｘｎビット１０２２は、１であるとき、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立すると誤って予測されたが成立しなかった場合、報告グループが格納される。
【００８７】
ＢＰｘｔビット１０２４は、１であるとき、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立しないと誤って予測されたが成立した場合、報告グループが格納される。
【００８８】
ＢＰｔｉビット１０２６は、１であるとき、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立すると正しく予測され、分岐が成立したが、分岐ターゲットが誤って予測された場合、報告グループが格納される。
【００８９】
ＢＰｎｉビット１０２８は、１である場合、分岐予測情報のチェックをイネーブルにする。従って、サンプル分岐が成立しないと正しく予測され、分岐が成立せず、且つ、分岐ターゲットが誤って予測された場合、報告グループが格納される。
【００９０】
トランザクション実行モード記録のイネーブルメント制御ビット１０２０（Ｘビット）は、トランザクション実行モード・アボート記録の収集を制御する。ランタイム・インストルメンテーション制御内のＸビット１０２０がゼロであるとき、トランザクション実行モード・アボート記録は収集されない。Ｘビット１０２０が１であるとき、トランザクション実行モード・アボート記録が収集され、図９の収集バッファ５０８に入れられる。モデルにトランザクション実行ファシリティがインストールされていない場合、Ｘビット１０２０は無視される。
【００９１】
ＲＩＥＭＩＴ命令制御ビット１０１８（Ｅビット）は、ＲＩＥＭＩＴ命令の実行を制御する。ランタイム・インストルメンテーションがイネーブルにされるとき、ランタイム・インストルメンテーション制御内のＥビット１０１８がゼロであるか、又は無視されてゼロとして扱われる場合、ＲＩＥＭＩＴは、操作を実行しない。Ｅビット１０１８が１であり、他の形で無視されない場合、ＲＩＥＭＩＴはイネーブルにされ、その定められた機能を実行する。
【００９２】
Ｊビット１０４６は、ゼロである場合、条件付き分岐（ＢＣ，Branch on Condition）命令が、マスク値に関係なく他のタイプの分岐カテゴリ内にあることを指定する。Ｊビット１０４６が１である場合、１５のマスクを指定するＢＣ命令は、リターン・タイプ分岐カテゴリ内にある。ＢＣ命令が１−１４のマスクを指定する場合、ＢＣ命令はＪビット１０４６に影響を受けず、常にその他のタイプの分岐カテゴリ内にある。リターン・タイプ分岐カテゴリ内にある場合、Ｒビット１０１６が、図９の収集バッファ５０８への包含を制御する。他のタイプの分岐カテゴリ内にある場合、Ｂビット１０４８が収集バッファ５０８への包含を制御する。他のタイプの分岐カテゴリは、転送タイプ分岐カテゴリとして示すこともできる。
【００９３】
命令アドレス・コード・ビット１０１４（Ｃビット）は、呼び出しタイプ分岐のイネーブルメントを制御する。ランタイム・インストルメンテーション制御内のＣビット１０１４が１であり、命令が呼び出しタイプ分岐である場合、収集バッファが更新される。呼び出しタイプ分岐とリターン・タイプ分岐の両方のモデル依存検出が組み合わされる場合、Ｃビット１０１４は両方のタイプに対して動作し、Ｒビット１０１６は有効でない。
【００９４】
Ｒビット１０１６は、リターン・タイプ分岐のイネーブルメント制御である。ランタイム・インストルメンテーション制御内のＲビット１０１６が１であり、命令がリターン・タイプ分岐である場合、収集バッファ５０８が更新される。
【００９５】
Ｂビット１０４８は、呼び出しタイプ分岐及びリターン・タイプ分岐以外の分岐のイネーブルメント制御である。ランタイム・インストルメンテーション制御内のＢビット１０４８が１であり、命令が、ランタイム・インストルメンテーションにより認識される他のタイプの分岐である場合、収集バッファ５０８が更新される。
【００９６】
最大アドレス超過ビット１０１２（ＭＡＥビット）は、１に設定された場合、１に設定された命令アドレス・コード（Ｃフィールド）を有する１つ又は複数の報告グループが格納されたことを示す。ひとたびＭＡＥビット１０１２が１に設定されると、続くランタイム・インストルメンテーションを実行することによっては、ＭＡＥビット１０１２が再びゼロに設定を戻されることはない。ＭＡＥビットをゼロとして指定するＬＲＩＣ命令又はＭＲＩＣ命令の実行により、ＭＡＥビットがゼロに設定される。
【００９７】
ランタイム・インストルメンテーション・ネクスト（ＲＩＮＥＸＴ）制御ビット１０１０（Ｎビット）は、サンプル命令の実行を制御する、ランタイム・インストルメンテーション・ネクスト命令のイネーブルメントを制御する。ランタイム・インストルメンテーション制御内のＮビット１０１０がゼロであるか、又は無視されてゼロとして扱われる場合、ＲＩＮＥＸＴは、操作を実行しない。Ｎビット１０１０が１であり、他の形で無視されない場合、ＲＩＮＥＸＴがイネーブルにされ、その定められた機能を実行する。
【００９８】
サンプリング・モード・フィールド１００８（Ｍフィールド）は、ランタイム・インストルメンテーション制御内のその値がランタイム・インストルメンテーション制御に関するサンプリング・モードを指定する、４ビットの符号なし整数である。
【００９９】
報告グループ・サイズ・フィールド１０４４（ＲＧＳ）は、その値が報告グループの記録（ＲＲＧ，Records of a Reporting Group）の数を指定する、３ビットの符号なし整数である。報告グループ内の記録の数は、開始／タイムスタンプ記録及び命令の最後の記録を含む２つの記録から、最大２５６の記録まで変化し得る。１つの実施形態において、上限は、モデル依存であり得る。報告グループ内に入れられる１６バイト記録の数は、２（ＲＧＳ＋１）である。
【０１００】
一次ＣＰＵ能力抑止制御ビット１０３８（Ｙビット）及び二次ＣＰＵ能力抑止制御ビット１０３９（Ｚビット）は、まとめて抑止制御（suppression control）と呼ばれる。報告グループのストアの抑止とは、ストアする試みが実行されないことを意味する。構成内の全てのＣＰＵのＣＰＵ能力が同じであるとき、抑止制御は有効でなく、抑止は行われない。構成において、あるＣＰＵのＣＰＵ能力が別のＣＰＵの能力と異なる場合、抑止制御は有効であり、少なくとも１つのＣＰＵが、ＣＰＵ能力又は一次ＣＰＵ能力で動作していると言われ、一方、少なくとも１つの他のＣＰＵが二次ＣＰＵ能力で動作していると言われる。一次ＣＰＵ能力と二次ＣＰＵ能力は、異なる動作速度である。Ｙビット１０３８及びＺビット１０３９の両方がゼロであるとき、抑止は行われない。Ｙビット１０３８がゼロであり、Ｚビット１０３９が１であるとき、例えばプロセッサ１０６などのＣＰＵが二次ＣＰＵ能力で動作している場合、抑止が行われる。Ｙビット１０３８が１であり、Ｚビット１０３９がゼロであるとき、例えばプロセッサ１０６などのＣＰＵが一次ＣＰＵ能力で動作している場合、抑止が行われる。Ｙビット１０３８及びＺビット１０３９の両方とも１である場合、抑止が行われる。
【０１０１】
図１４の上記のフィールド及びビットは、フィールドの配置及び呼称の一例であり、明確にするために本明細書で与えられている。他の実施形態において、フィールドのサブセットだけを使用してもよいこと、及び、フィールドはいずれの順序又は位置としてもよく、及び／又は、異なる名称で表し得ることが理解されるであろう。
【０１０２】
前述のように、プログラム実行中にランタイム・インストルメンテーションがイネーブルにされると、ランタイム・インストルメンテーション・データが、プロセッサ１０６の収集バッファ５０８内に収集される。１つの実施形態において、収集バッファ５０８は、収集された最新の記録の保存に使用されるプロセッサ１０６の内部バッファである。サンプル・トリガ・ポイントが検出されると、記録は、プログラム・バッファ５２２に書き込まれた報告グループの一部として、収集バッファ５０８からプログラム・バッファ５２２にコピーされる。１つの実施形態において、記録は、収集バッファ５０８から、非破壊的方法でコピーされる。
【０１０３】
収集バッファ５０８は、これがプロセッサ内に配置され、且つ、１つの実施形態においては、所定のイベントの命令アドレス及びイベント・メタデータを格納するためのレジスタ対のアレイとして実装されるので、「ハードウェア収集バッファ」と呼ぶことができる。イベントの例は、分岐の成立であり、そこでレジスタ対は分岐の命令アドレスを保持することができ、メタデータは分岐のターゲット並びに分岐の挙動履歴（histroic behavior）に関する情報を保持することができる。１つの実施形態においては、レジスタ対が順序付けられ、命令ストリーム内でイベントが生じると順次更新される。カウンタは、アレイ内の最後に更新されたエントリのインデックスを示すように維持される。１つの実施形態において、収集バッファ５０８は循環バッファであり、収集バッファ５０８が一杯になると、次のイベントがアレイ内の最初のエントリを上書きし、後続のイベントにおいて、アレイのレジスタ対の順次更新が再開する。従って、アレイをＣＢ［０］乃至ＣＢ［Ｎ−１］で、及びカウンタｉが最新の更新インデックスを示すとすると、キャプチャされたイベントの記録は、系列ＣＢ［ｉ］、ＣＢ［ｉ−１］．．．ＣＢ［１］、ＣＢ［０］、ＣＢ［Ｎ−１］、ＣＢ［Ｎ−２］．．．ＣＢ［ｉ＋１］で表される。別の実施形態においては、バッファ内の最も古いエントリを指し示すヘッド・ポインタ、及び、バッファ内の最も新しいエントリを指し示すテール／現在ポインタの２つのポインタが使用される。
【０１０４】
任意の所定の実行点でのプロセッサ１０６の状態を表すイベントが、収集バッファ５０８内に順次キャプチャされる。収集バッファ５０８は、その内容が、プログラム実行中にプロセッサ１０６により認識されるイベント（例えば、１つ又は複数の成立した分岐の実行、トランザクション実行アボート・イベント、ＲＩＥＭＩＴ命令のオペランド等）に関して報告する記録のセットをキャプチャするために使用される。１つの実施形態において、認識されるイベントは、図１４に示されるＲＩＣＣＢの内容に依存する。示される収集バッファ５０８の実施形態におけるエントリは、イベント命令アドレスと、他の関連するイベント・メタデータとを含む。イベント・メタデータの例として、これらに限定されるものではないが、成立した分岐の命令アドレス及びその分岐の挙動履歴についての何らかの情報を含むそのターゲット；ＲＩＥＭＩＴ命令の命令アドレス及びそれぞれのレジスタ値；並びに、トランザクション・アボート命令のアドレス及びそれぞれのトランザクション復元エントリ・ポイントが挙げられる。
【０１０５】
収集バッファ５０８の１つの実施形態は、最大３２個までのエントリ（即ち、３２のイベントについての情報）を格納し、各命令アドレスは６４のビット（例えば、ビット０：６３）により指定され、イベント・メタデータは６４のビット（例えば、ビット６４：１２７）により指定される。収集バッファのサイズ（ＲＣＢ）は、記録の数を表すモデル依存のカウントである。１つの実施形態において、収集バッファ５０８のバイト・サイズは、１６バイトの記録サイズの倍数である。収集バッファのサイズ（ＲＣＢ）は、モデルの最大報告グループのカウント（ＲＲＧ）と、収集バッファから取得されない報告グループの記録のカウント（ＲＮＣ）との間の差を上回るか又はこれに等しい記録の数である。従って、１つの実施形態において、収集バッファのサイズは、
【数１】
2015514240.tif 000003
のように表される。
【０１０６】
１つの実施形態において、収集バッファ５０８及び命令データ・バッファの内容は（ひとつが使用される場合）、（１）割り込み、（２）ランタイム・インストルメンテーション・ファシリティをオン又はオフにするＰＳＷビット（例えば、ビット２４）の１からゼロへの変更、及び（３）ランタイム・インストルメンテーション・ファシリティがトランザクション実行モードであるときにサンプル命令が識別された場合（この場合、収集バッファ５０８及び命令データ・バッファの更なる更新は停止し、トランザクション終了時に再開し、この時点では、報告グループのストアは保留中であり、収集バッファ５０８及び命令データ・バッファはパージされる）というイベントによって、パージされる又は他の形で影響を受ける。
【０１０７】
図２に示されるエミュレートされたホスト・コンピュータ・システムのような１つの実施形態において、収集バッファ５０８は、レジスタ及び／又はメモリを用いて実装される。この実施形態において、随意的な命令データ・バッファもまた、存在する場合には、レジスタ及び／又はメモリを用いて実装される。
【０１０８】
実施形態において、付加的な能力は、データ収集に影響を与えることがあり、且つ、前述した通常の命令カウント又はサイクル・カウントのサンプリングを実質的に妨げずに、付加的なデータ収集ポイントをもたらすと考えることができる。これらには、収集バッファ５０８内に汎用レジスタの値を格納することにより、その値を収集するＲＩＥＭＩＴ命令の実行が含まれる。さらに、前述したランタイム・インストルメンテーション制御内のデータ収集制御ビットを用いて、収集したデータのタイプをカスタマイズすることができる（例えば、Ｅ、Ｃ、Ｒ及びＢ制御ビット）。このように、収集するデータ・タイプは、プログラム可能である。
【０１０９】
１つの実施形態において、ランタイム・インストルメンテーション命令の記録を構築するために使用されるモデル依存のサンプル命令データを収集するために、命令データ・バッファが実装される。命令データ・バッファは、命令がサンプル命令として識別されたときに利用可能になると予期して、命令からデータを収集する。１つの実施形態において、命令データ・バッファは、サンプル・ポイントとしてトリガになる命令についての情報が保存される、プロセッサ内のハードウェア・バッファ／ストレージ位置であるので、ログアウト・プロセス中、情報を収集バッファ５０８からデータと共に書き出すことができる。収集バッファ５０８と同様に、命令データ・バッファは、命令アドレス、及びその命令と関連したメタデータを含む。命令データ・バッファ内のメタデータは、多くの場合、マシンに依存し、これらに限定されるものではないが、キャッシュミス関連情報、及び分岐予測関連情報を含むことができる。
【０１１０】
実施形態によれば、収集される他のデータは、収集バッファ５０８からのものでないことも、又は命令データ・バッファからのものでないこともある。例として、（１）報告グループの最初の記録：タイムスタンプ又は開始記録、及び（２）あらゆる報告グループに関して作成することができ、従って、収集バッファ５０８内に格納されない付加的なタイプの記録の一部を形成すために使用されるデータが挙げられ、これらの記録は、存在する場合、報告グループの追加又はマシン依存セクションに入れることができる。これらの記録は、本明細書では「システム情報記録」と呼ばれる。
【０１１１】
図１５は、ＭＲＩＣが準特権モードでの実行を許可しない（即ち、Ｋビットがゼロである）場合のＲＩＣＣＢ制御ブロックの一部を示す。制御ブロック１１００は、図１５を参照して説明されるもの以外の付加的な値を含むことができる。準特権モードが許可されない場合、起点アドレス・セクション１１０２及び制限アドレス・セクション１１０４は使用されず、低特権状態プログラムによって現在の値は変更されない。
【０１１２】
１つの実施形態において、ランタイム・インストルメンテーション制御設定の全てのうちのサブセットのみが、低特権状態プログラムによるＭＲＩＣ命令の正常な実行によって更新される。
【０１１３】
ＲＩＣＣＢがフェッチされると、多数のエラーに遭遇し得る。さらに、ＭＲＩＣ命令内のＲＩＣＣＢのアドレスが適切に整列（align）されていない場合、例外が引き起こされる。同様に、エラー状態又は無効アドレスのために、ＭＲＩＣ命令内のアドレスにアクセスできない場合、例外が引き起こされる。ＭＲＩＣ命令の実行中、ＲＩＣＣＢ値がいずれかの明確な形で競合する（即ち、内部的に矛盾する）と判断された場合には、同じく例外が引き起こされる。
【０１１４】
１つの実施形態においては、ＭＲＩＣ命令が発行され、ランタイム・インストルメンテーションがイネーブルにされる；現在のランタイム制御が有効でない；及び／又は、プロセッサが低特権状態にあり、現在のランタイム・インストルメンテーション制御内のランタイム・インストルメンテーション停止ビットがゼロである、のいずれかの理由により特別操作例外が認識される。
【０１１５】
１つの実施形態において、
ＭＲＩＣのストレージ・オペランドがダブルワード（doubleword）境界に整列されていない；
プロセッサがスーパーバイザ状態にあるか、又は現在のランタイム・インストルメンテーション制御内のＫビットが１であり、且つ、以下の条件、即ち、指定された制限アドレスが指定された起点アドレスより小さい、指定された現在アドレスが指定された起点アドレスより小さい、及び指定された現在アドレスが指定の生成制限アドレスに１を足した和より大きい、のいずれかが認識される；並びに、
プロセッサが低特権状態にあり、現在のＲＩ制御の内のｋビットがゼロであり、且つ、以下の条件、即ち、指定された現在アドレスが現在の起点アドレスより小さい、指定された現在アドレスが現在の制限アドレスに１を足した和より大きい、無効なモードが指定される、のいずれかが認識される；
のいずれかの理由により指定例外が認識される。
【０１１６】
１つの実施形態において、１つのアーキテクチャの特定のプロセッサに関して定められたＭＲＩＣ命令は、異なるアーキテクチャの第２のプロセッサによって実行され得る。１つの実施形態において、第２のプロセッサは、ソフトウェア・ベースのエミュレーション・ルーチンを識別し、ソフトウェア・ベースのエミュレーション・ルーチンを用いて、ＭＲＩＣ命令を実行する。
【０１１７】
図１６は、サンプル・ポイントにおいてプログラム・バッファ５２２に格納された報告グループ１２００の高レベルの例を示す。記録内の報告グループのサイズは、２（ＲＧＳ＋１）に等しいＲＲＧで表され、ここで、ＲＧＳは、指数としての報告グループ・サイズである。収集バッファ５０８以外の位置からコピーされた記録のモデル依存数（ＲＮＣ）は、報告グループで使用されるとき、非破壊的にコピーされても又はされなくてもよい。図１６の例において、ＲＲＧ＝８、ＲＧＳ＝２、及びＲＮＣ＝４である。図１６に示される例示的な報告グループ１２００は、ヘッダ・セクション１２０２、本体セクション１２０４、追加記録セクション１２０６、及びフッタ・セクション１２０８を含む。
【０１１８】
ヘッダ・セクション１２０２は、状態情報、追跡情報、及び／又はタイミング情報を保持するための開始記録又はタイムスタンプ記録を含むことができる。開始記録は、プログラム・バッファに格納された第１の報告グループに関するヘッダ・セクション１２０２内に格納される（即ち、ＲＣＡ１００６がＲＯＡ１００２に等しいとき）。１つの実施形態において、開始記録は、「０２」の記録タイプ・フィールドと、現在幾つの報告グループがプログラム・バッファに格納されているかを示すための報告グループ数（ＮＲＧ）フィールドと、報告グループのサイズを示すためのＲＧＳフィールドと、プログラム・バッファ５２２が一杯であるかどうかを示すための停止（Ｓ：stopped）フィールドと、ランタイム・インストルメンテーションが停止されたかどうかを示すための停止（Ｈ：halted）フィールドと、いつ開始記録が書き込まれたかを示すための時刻（ＴＯＤ）クロック・フィールドとを含む。１つの実施形態において、開始記録内のフィールドの少なくとも１つのサブセットが、ＲＩ制御ブロック（例えば、ＲＩＣＣＢ）から調達される。タイムスタンプ記録の１つの実施形態は、「０３」の記録タイプを有し、その記録がいつ格納されたかを示すためのＴＯＤクロック・フィールドを含む。１つの実施形態において、タイムスタンプ記録は、第１の報告グループ以外の各報告グループについてヘッダ・セクション１２０２に格納される。
【０１１９】
報告グループの本体セクション１２０４は、収集バッファ５０８からサンプリングされたイベント及び情報に関する種々の記録を含むことができる。イベント及び情報は、例えば、発行命令、トランザクション実行アボート、呼び出し、リターン、分岐、及びフィラーによってキャプチャされた状態情報を表すことができる。
【０１２０】
１つの実施形態において、発行記録は、ＲＩＥＭＩＴ命令の正常な実行時に作成され、収集バッファ５０８に格納される。発行記録の１つの実施形態は、「１０」の記録タイプ・フィールドと、発行記録において、現ＰＳＷの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード（例えば、６４ビット、３１ビット、又は２４ビット）に応じて変わり、且つ、ＲＩＥＭＩＴ命令のアドレス、若しくはＲＩＥＭＩＴが実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、ＲＩＥＭＩＴ命令により指定される汎用レジスタからのデータを格納するための発行データ・フィールドとを含む。
【０１２１】
１つの実施形態において、トランザクション実行アボート記録が、暗黙的アボートにより、又はトランザクション・アボート命令の実行により作成され、収集バッファ５０８に格納される。アボート記録の１つの実施形態は、「１１」の記録タイプ・フィールドと、トランザクション実行アボート記録において現ＰＳＷの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード（例えば、６４ビット、３１ビット、又は２４ビット）に応じて変わり、且つ、アボートされる命令のアドレス、若しくはアボートされる命令が実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、アボートと関連したいずれかのモデル依存データに関するフィールドとを含む。
【０１２２】
１つの実施形態において、呼び出し記録は、Ｒ２フィールドが非ゼロであるときのＢＲＡＮＣＨ  ＡＮＤ  ＳＡＶＥ（ＢＡＳＲ）、ＢＲＡＮＣＨ  ＡＮＤ  ＳＡＶＥ（ＢＡＳ）、ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＡＮＤ  ＳＡＶＥ  ＬＯＮＧ、ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＡＮＤ  ＳＡＶＥ、Ｒ２フィールドが非ゼロであるときのＢＲＡＮＣＨ  ＡＮＤ  ＬＩＮＫ（ＢＡＬＲ）、ＢＲＡＮＣＨ  ＡＮＤ  ＬＩＮＫ（ＢＡＬ）、及びＲ２フィールドが非ゼロであるときのＢＲＡＮＣＨ  ＡＮＤ  ＳＡＶＥ  ＡＮＤ  ＳＥＴ  ＭＯＤＥなどの、呼び出しタイプ分岐命令の実行によって作成される。呼び出し記録の１つの実施形態は、「１２」の記録タイプ・フィールドと、呼び出し記録において現ＰＳＷの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード（例えば、６４ビット、３１ビット、又は２４ビット）に応じて変わり、且つ、分岐命令のアドレス、若しくは分岐命令が実行タイプ命令のターゲットであった場合には実行タイプ命令のアドレスを含む命令アドレス・フィールドと、分岐が正しく予測されたかどうかを示すための正常動作（well-behaved）フィールドと、分岐ターゲット・アドレス（「呼び出された位置」とも呼ばれる）を含むターゲット・アドレス・フィールドとを含む。
【０１２３】
リターン記録及び転送記録は、呼び出し記録と同じフォーマットを有することができる。１つの実施形態において、リターン記録は、「１３」の記録タイプ・フィールドを有し、Ｒ２フィールドが非ゼロであり、マスクが１５であるときのＢＲＡＮＣＨ  ＯＮ  ＣＯＮＤＩＴＩＯＮ（ＢＣＲ）などのリターン・タイプ分岐命令の実行によって作成される。リターン記録に関して、命令アドレス・フィールドは、分岐命令のアドレス、又は分岐が実行タイプ命令のターゲットである場合には実行タイプ命令のアドレスを含み、ターゲット・アドレス・フィールドはリターン位置を含む。
【０１２４】
１つの実施形態において、転送記録は、「１４」の記録タイプ・フィールドを有し、且つ、ａ．Ｒ２フィールドが非ゼロであり、マスクが１−１４の範囲内にあるときのＢＲＡＮＣＨ  ＯＮ  ＣＯＮＤＩＴＩＯＮ（ＢＣＲ）；ｂ．Ｊビットがゼロであるか又はマスクが１−１４の範囲内にあるときのＢＲＡＮＣＨ  ＯＮ  ＣＯＮＤＩＴＩＯＮ（ＢＣ）；ｃ．ＢＲＡＮＣＨ  ＯＮ  ＣＯＵＮＴ（ＢＣＴ、ＢＣＴＲ、ＢＣＴＧ、ＢＣＴＧＲ）；ｄ．ＢＲＡＮＣＨ  ＯＮ  ＩＮＤＥＸ  ＨＩＧＨ（ＢＸＨ、ＢＸＨＧ）；ｅ．ＢＲＡＮＣＨ  ＯＮ  ＩＮＤＥＸ  ＬＯＷ  ＯＲ  ＥＱＵＡＬ（ＢＸＬＥ，ＢＸＬＥＧ）；ｆ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＮＤＩＴＩＯＮ（ＢＲＣ）；ｇ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＮＤＩＴＩＯＮ  ＬＯＮＧ（ＢＲＣＬ）；ｈ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＵＮＴ（ＢＲＣＴ，ＢＲＣＴＧ）；ｉ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＣＯＵＮＴ  ＨＩＧＨ（ＢＲＣＴＨ）；ｊ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＩＮＤＥＸ  ＨＩＧＨ（ＢＲＸＨ、ＢＲＸＨＧ）；ｋ．ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ  ＯＮ  ＩＮＤＥＸ  ＬＯＷ  ＯＲ  ＥＱＵＡＬ（ＢＲＸＬＥ、ＢＲＸＬＧ）；ｌ．ＣＯＭＰＡＲＥ  ＡＮＤ  ＢＲＡＮＣＨ（ＣＲＢ、ＣＧＲＢ）；ｍ．ＣＯＭＰＡＲＥ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ（ＣＲＪ、ＣＧＲＪ）；ｎ．ＣＯＭＰＡＲＥ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ（ＣＩＢ、ＣＧＩＢ）；ｏ．ＣＯＭＰＡＲＥ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ（ＣＩＪ、ＣＧＩＪ）；ｐ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＡＮＤ  ＢＲＡＮＣＨ（ＣＬＲＢ、ＣＬＧＲＢ）；ｑ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ（ＣＬＲＪ，ＣＬＧＲＪ）；ｒ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ（ＣＬＩＢ、ＣＬＧＩＢ）；及びｓ．ＣＯＭＰＡＲＥ  ＬＯＧＩＣＡＬ  ＩＭＭＥＤＩＡＴＥ  ＡＮＤ  ＢＲＡＮＣＨ  ＲＥＬＡＴＩＶＥ（ＣＬＩＪ、ＣＬＧＩＪ）のような、リターン・タイプ分岐命令の実行により作成される。転送記録は、分岐が成立したときに作成される。転送記録に関して、命令アドレス・フィールドは、分岐命令のアドレス、又は分岐が実行タイプ命令のターゲットである場合には実行タイプ命令のアドレスを含み、ターゲット・アドレス・フィールドはリターン位置を含む。
【０１２５】
フィラー記録は、収集バッファ５０８内の有効な記録の数が、現在のＲＧＳの報告グループを満たすのに十分でない場合に、報告グループにおいて使用される。フィラー記録の１つの実施形態は、記録がフィラー記録であることを示すための「００」の記録タイプ・フィールドを含み、残りのバイトは定義されない。
【０１２６】
追加記録セクション１２０６は、存在する場合、モデル依存の記録を含むことができる。１つの実施形態において、追加記録のフォーマットは、記録が追加記録であることを示すうように、記録タイプが「０１」に設定され、追加記録の残りのバイトはモデル依存データを含むことができる点を除いて、フィラー記録に類似している。
【０１２７】
フッタ・セクション１２０８は、サンプル命令の実行についての情報を含む命令記録を含むことができる。命令記録は、サンプル命令に関して報告グループが格納されたときに作成される。命令記録の１つの実施形態は、「０４」の記録タイプ・フィールドと、命令記録において、現ＰＳＷの命令アドレス・ビット位置がどのように表されるかを示すための命令アドレス・コード・フィールドと、アドレッシング・モード（例えば、６４ビット、３１ビット、又は２４ビット）に応じて変わり、且つ、サンプル命令の命令アドレス、又はサンプル命令が実行タイプ命令のターゲットであった場合には実行タイプ命令の命令アドレスを含む命令アドレス・フィールドと、命令データ・バッファ（ＩＤＢ，Instruction-data Buffer）から収集されたいずれかのモデル依存データを含むＩＤＢフィールドとを含む。
【０１２８】
上述のように、実施形態は、コンピュータ実装プロセス及びそれらのプロセスを実施するための装置の形で具体化することができる。実施形態は、製造物品として有形媒体内に具体化された命令を含むコンピュータ・プログラム・コード論理１３０４を有するコンピュータ可読／使用可能媒体１３０２上の、図１７に示されるようなコンピュータ・プログラム製品１３００を含むことができる。コンピュータ可読／使用可能媒体１３０２に関する例示的な製造物品は、フロッピィ（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、ユニバーサル・シリアル・バス（ＵＳＢ）フラッシュ・ドライブ、又は他のいずれかのコンピュータ可読ストレージ媒体を含むことができ、ここで、コンピュータ・プログラム・コード論理１３０４がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。実施形態は、例えば、ストレージ媒体内に格納される、コンピュータにロードされる及び／又はコンピュータによって実行される、又は電気配線若しくはケーブルにより光ファイバを通じて又は電磁放射を介してといった何らかの伝送媒体上で伝送される、コンピュータ・プログラム・コード論理１３０４を含み、ここで、コンピュータ・プログラム・コード論理１３０４がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。汎用マイクロプロセッサ上に実装される場合、コンピュータ・プログラム・コード論理１３０４のセグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【０１２９】
技術的効果及び利点として、低特権状態から実行時のランタイム・インストルメンテーション設定を変更するための、低特権状態プログラムにより実行可能なＭＲＩＣ命令が挙げられる。
【０１３０】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「１つの（a）」、「１つの（an）」及び「その（the）」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む（comprise）」及び／又は「含んでいる（comprising）」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び／又はコンポーネントの存在を指定するが、１つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び／又はそれらのグループの存在又は追加を排除するものではないこともさらに理解されるであろう。
【０１３１】
下記の特許請求の範囲におけるすべての機能付き手段（ミーンズ・プラス・ファンクション）又は機能付き工程（ステップ・プラス・ファンクション）の対応する構造、材料、動作、及び均等物は、もしあれば、その機能を、明確に請求されている他の特許請求された要素と組み合わせて実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。本発明の説明は、例証及び説明のために提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。当業者には、本発明の範囲および要旨から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。
【０１３２】
当業者により認識されるように、本発明の態様は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の態様は、コンピュータ可読プログラム・コードが組み込まれた、１つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
【０１３３】
１つ又は複数のコンピュータ可読媒体の任意の組み合わせを利用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、これらに限定されるものではないが、例えば、電子的、磁気的、光学的、電磁気的、赤外線、若しくは半導体のシステム、装置、若しくはデバイス、又は上記のものの任意の組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例（網羅的なリストではない）には、以下のもの、即ち、１つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光記憶装置、磁気記憶装置、又は上記のものの任意の適切な組み合わせが含まれる。本文書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって、又はそれらとの関連で使用するためのプログラムを収容又は格納することができる任意の有形媒体とすることができる。
【０１３４】
コンピュータ可読信号媒体は、コンピュータ可読プログラム・コードが、例えばベースバンド内に又は搬送波の一部として内部に具体化された伝搬データ信号を含むことができる。このような伝搬信号は、これらに限定されるものではないが、電磁気、光、又はそれらの任意の適切な組み合わせを含む種々の形態のいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、且つ、命令実行システム、装置若しくはデバイスによって、又はこれらとの関連で使用するためのプログラムを通信し、伝搬し、又は搬送することができる任意のコンピュータ可読媒体とすることができる。
【０１３５】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等、又は上記のもののいずれかの適切な組み合わせを含む、いずれかの適切な媒体を用いて伝送することができる。
【０１３６】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（登録商標）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋等のようなオブジェクト指向型プログラミング言語、及び「Ｃ」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、１つ又は複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立したソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。後者のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は、外部コンピュータへの接続がなされる場合もある（例えば、インターネット・サービス・プロバイダを用いるインターネットを通じて）。
【０１３７】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して以下で説明される。フローチャート図及び／又はＤ−２ブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装することができることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサにより実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するための手段を生成するようにすることができる。
【０１３８】
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスに特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装する命令を含む製品を製造するようにすることもできる。
【０１３９】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、そのコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で、コンピュータ実装プロセスを生成するための一連の動作ステップを実施させて、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するためのプロセスを提供するようにすることもできる。
【０１４０】
上述のように、実施形態は、コンピュータ実装プロセス及びそれらのプロセスを実施するための装置の形で具体化することができる。実施形態において、本発明は、１つ又は複数のネットワーク要素により実行されるコンピュータ・プログラム・コードにおいて具体化される。実施形態は、製造物品として有形媒体内に具体化された、命令を含むコンピュータ・プログラム・コード論理を有するコンピュータ使用可能媒体上のコンピュータ・プログラム製品を含む。コンピュータ使用可能媒体に関する例示的な製造物品は、フロッピィ（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、ユニバーサル・シリアル・バス（ＵＳＢ）フラッシュ・ドライブ、又は他のいずれかのコンピュータ可読ストレージ媒体を含むことができ、ここで、コンピュータ・プログラム・コード論理がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。実施形態は、例えば、ストレージ媒体内に格納される、コンピュータにロードされる、及び／又はコンピュータによって実行される、又は電気配線若しくはケーブルにより、光ファイバを通じて、又は電磁放射を介してといった何らかの伝送媒体上で伝送される、コンピュータ・プログラム・コード論理を含み、ここで、コンピュータ・プログラム・コード論理がコンピュータにロードされ、コンピュータにより実行されると、コンピュータは、本発明を実施するための装置となる。汎用マイクロプロセッサ上に実装される場合、コンピュータ・プログラム・コード論理セグメントは、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【０１４１】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された２つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び／又はフローチャート図の各ブロック、並びにブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
【符号の説明】
【０１４２】
１、１０６：プロセッサ
２、２２、１０５：メモリ
１１：ストレージ・デバイス
５０：ホスト・コンピュータ・システム
１００、５００：システム
１１１：プログラミング・コード
１１２：アプリケーション・プログラム
２００：データ処理ネットワーク
３０３：キャッシュ
３０４：Ｉ／Ｏユニット
３０５：命令フェッチ・ユニット
３０６：デコード／ディスパッチ・ユニット
３０７：実行ユニット
３０８：分岐ユニット
３０９：アーキテクチャ化レジスタ
３１０：ロード・ストア・ユニット
３１１：プログラム・カウンタ
５０４：ランタイム・メモリ
５０６：インストルメンテーション・モジュール
５０８：収集バッファ
５１０：レジスタ
５１２：ＰＳＷデータ
５１４：主メモリ
５１６：オペレーティング・システム
５１８：アプリケーション
５２０：ストレージ
５２２：プログラム・バッファ
６００：ＭＲＩＣ命令
６０２、６０４：オペコード
６０６：基底レジスタ・フィールド
６０８、６１０：変位フィールド
１０００、１１００：制御ブロック
１２００：報告グループ
１２０２：ヘッダ・セクション
１２０４：本体セクション
１２０６：追加記録セクション
１２０８：フッタ・セクション
１３００：コンピュータ・プログラム製品
１３０２：コンピュータ可読／使用可能媒体
１３０４：コンピュータ・プログラム・コード論理
【図１】
2015514240.tif 000004
【図２】
2015514240.tif 000005
【図３】
2015514240.tif 000006
【図４】
2015514240.tif 000007
【図５】
2015514240.tif 000008
【図６】
2015514240.tif 000009
【図７】
2015514240.tif 000010
【図８】
2015514240.tif 000011
【図９】
2015514240.tif 000012
【図１０】
2015514240.tif 000013
【図１１】
2015514240.tif 000014
【図１２】
2015514240.tif 000015
【図１３】
2015514240.tif 000016
【図１４】
2015514240.tif 000017
【図１５】
2015514240.tif 000018
【図１６】
2015514240.tif 000019
【図１７】
2015514240.tif 000020
【手続補正書】
【提出日】平成26年10月20日(2014.10.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
スーパーバイザ状態又は低特権状態のいずれかで実行可能なランタイム・インストルメンテーション制御変更（ＭＲＩＣ）命令を実行するための方法をコンピュータに実行させるためのプログラムであって、前記ＭＲＩＣ命令は、ランタイム・インストルメンテーション制御のサブセットのみを設定するためのものであり、前記ランタイム・インストルメンテーション制御の全ては、ランタイム・インストルメンテーション制御ロード（ＬＲＩＣ）特権命令によってロード可能であり、前記方法は、前記コンピュータが、
前記ＭＲＩＣ命令をフェッチすることであって、前記ＭＲＩＣ命令はランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）のアドレスを含む、フェッチすることと、
プロセッサにより、前記ＲＩＣＣＢをフェッチすることであって、前記ＲＩＣＣＢは、前記プロセッサの前記ランタイム・インストルメンテーション制御のサブセットを変更するための複数の値を含み、前記ランタイム・インストルメンテーション制御のサブセットは、プログラム実行中、前記プロセッサによって認識されたイベントのランタイム・インストルメンテーション情報を保持するためのランタイム・インストルメンテーション・プログラム・バッファ（ＲＩＢ）位置のランタイム・インストルメンテーション・プログラム・バッファ現在アドレス（ＲＣＡ）を含む、フェッチすることと、
前記複数の値を前記ランタイム・インストルメンテーション制御内にロードすることと、
前記ロードされた複数の値を用いて、ランタイム・インストルメンテーション・イベント情報を前記ＲＩＢに与えることと、
を含む、コンピュータ・プログラム。
【請求項２】
前記方法が、
前記ＲＩＣＣＢの前記複数の値の少なくとも１つについてのモデル依存の制限された値を得ることと、
前記モデル依存の制限された値を更新値として前記ランタイム・インストルメンテーション制御内にロードすることと、
をさらに含む、請求項１に記載のコンピュータ・プログラム。
【請求項３】
報告グループ・サイズにより前記モデル依存の制限された値がロードされ、
前記ランタイム・インストルメンテーション制御のＫフィールドが第１の値を有することに基づいて、現在アドレスを前記ＲＩＣＣＢの起点アドレスの値に設定することと、
前記ランタイム・インストルメンテーション制御のＫフィールドが第２の値を有することに基づいて、前記現在アドレスを指定されたＲＩＣＣＢの現在アドレス値の値に設定することと、
をさらに含む、請求項２に記載のコンピュータ・プログラム。
【請求項４】
前記ＭＲＩＣ命令内の前記アドレスがダブルワード境界と整列していないと判断すること、及び、
前記ＭＲＩＣ命令内に含まれる前記アドレスから前記ＲＩＣＣＢをフェッチできないと判断すること、
のいずれか１つ又は複数に基づいて、例外が引き起こされることをさらに含む、請求項１〜３のいずれか１項に記載のコンピュータ・プログラム。
【請求項５】
前記ＲＩＣＣＢ内の１つ又は複数の値が有効であると判断することをさらに含み、前記判断することは、
ランタイム・インストルメンテーションＳビットが、前記低特権状態からの前記ＭＲＩＣ命令の実行が許可されないことを示していると判断すること、
前記ランタイム・インストルメンテーション制御が有効でないと判断すること、及び
前記ランタイム・インストルメンテーションがイネーブルにされていないと判断すること、
のいずれか１つをさらに含む、請求項１〜４のいずれか１項に記載のコンピュータ・プログラム。
【請求項６】
前記ＲＩＣＣＢの前記複数の値は、
ランタイム・インストルメンテーション・データ・サンプリングの詳細を管理するための制御と、
ランタイム・インストルメンテーション・データ収集の詳細を管理するための制御と、
プログラム・バッファへのランタイム・インストルメンテーション・データ報告の詳細を管理するための制御と、
命令キャッシュミスの検出を管理するための制御と、
データ・キャッシュミスの検出を管理するための制御と、
報告グループのサイズを管理するための制御と、
次の報告グループが格納される出力プログラム・バッファ内の現在アドレスを管理するための制御と、
呼び出しタイプ、リターン・タイプ、及び転送タイプ分岐に関するデータのデータ収集を管理するための制御と、
正しく又は誤って予測され、また成立した又は成立しなかった分岐のデータ収集を管理するための制御と、
のうちの１つ又は複数をさらに含む、請求項１〜５のいずれか１項に記載のコンピュータ・プログラム。
【請求項７】
前記ＭＲＩＣ命令は第１のコンピュータ・アーキテクチャに対して定められ、前記フェッチすること及び構文解析することは、代替的なコンピュータ・アーキテクチャの第２のプロセッサにより実行され、前記第２のプロセッサにより前記フェッチすること及び前記構文解析することは、
前記第１のコンピュータ・アーキテクチャにおける前記ＭＲＩＣ命令の実行をエミュレートするためのソフトウェア・ルーチンを識別することと、
前記ソフトウェア・ルーチンを用いて前記ＭＲＩＣ命令を実行することと、
を含む、請求項１〜６のいずれか１項に記載のコンピュータ・プログラム。
【請求項８】
エラーに遭遇した場合、前記ランタイム・インストルメンテーション制御内の値は更新されない、請求項１〜７のいずれか１項に記載のコンピュータ・プログラム。
【請求項９】
スーパーバイザ状態又は低特権状態のいずれかからランタイム・インストルメンテーション制御変更（ＭＲＩＣ）命令を実行するためのコンピュータ実装方法であって、前記ＭＲＩＣ命令は、ランタイム・インストルメンテーション制御のサブセットのみを設定するためのものであり、前記ランタイム・インストルメンテーション制御の全ては、ランタイム・インストルメンテーション制御ロード（ＬＲＩＣ）特権命令によってロード可能であり、前記方法は、コンピュータが、
前記ＭＲＩＣ命令をフェッチすることであって、前記ＭＲＩＣ命令はランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）のアドレスを含む、フェッチすることと、
プロセッサにより、前記ＲＩＣＣＢをフェッチすることであって、前記ＲＩＣＣＢは、前記プロセッサの前記ランタイム・インストルメンテーション制御のサブセットを変更するための複数の値を含み、前記ランタイム・インストルメンテーション制御のサブセットは、プログラム実行中、前記プロセッサによって認識されたイベントのランタイム・インストルメンテーション情報を保持するためのランタイム・インストルメンテーション・プログラム・バッファ（ＲＩＢ）位置のランタイム・インストルメンテーション・プログラム・バッファ現在アドレス（ＲＣＡ）を含む、フェッチすることと、
前記複数の値を前記ランタイム・インストルメンテーション制御内にロードすることと、
前記ロードされた複数の値を用いて、ランタイム・インストルメンテーション・イベント情報を前記ＲＩＢに与えることと、
を含む、方法。
【請求項１０】
前記ＲＩＣＣＢの前記複数の値の少なくとも１つについてのモデル依存の制限された値を得ることと、
前記モデル依存の制限された値を更新値として前記ランタイム・インストルメンテーション制御内にロードすることと、
をさらに含む、請求項９に記載の方法。
【請求項１１】
スーパーバイザ状態又は低特権状態のいずれかからランタイム・インストルメンテーション制御変更（ＭＲＩＣ）命令を実行するためのコンピュータ・システムであって、前記ＭＲＩＣ命令はランタイム・インストルメンテーション制御のサブセットのみを設定するためのものであり、前記ランタイム・インストルメンテーション制御の全ては、ランタイム・インストルメンテーション制御ロード（ＬＲＩＣ）特権命令によりロード可能である、前記コンピュータ・システムは、
方法を実施するように構成されたランタイム・インストルメンテーション・モジュールを含むコンピュータ・プロセッサを含み、前記方法は、
前記ＭＲＩＣ命令をフェッチすることであって、前記ＭＲＩＣ命令はランタイム・インストルメンテーション制御ブロック（ＲＩＣＣＢ）のアドレスを含む、フェッチすることと、
プロセッサにより、前記ＲＩＣＣＢをフェッチすることであって、前記ＲＩＣＣＢは、前記プロセッサの前記ランタイム・インストルメンテーション制御のサブセットを変更するための複数の値を含み、前記ランタイム・インストルメンテーション制御のサブセットは、プログラム実行中、前記プロセッサによって認識されたイベントのランタイム・インストルメンテーション情報を保持するためのランタイム・インストルメンテーション・プログラム・バッファ（ＲＩＢ）位置のランタイム・インストルメンテーション・プログラム・バッファ現在アドレス（ＲＣＡ）を含む、フェッチすることと、
前記複数の値を前記ランタイム・インストルメンテーション制御内にロードすることと、
前記ロードされた複数の値を用いて、ランタイム・インストルメンテーション・イベント情報を前記ＲＩＢに与えることと、
を含む、コンピュータ・システム。
【請求項１２】
前記ＲＩＣＣＢの前記複数の値の少なくとも１つについてのモデル依存の制限された値を得ることと、
前記モデル依存の制限された値を更新値として前記ランタイム・インストルメンテーション制御内にロードすることと、
をさらに含む、請求項１１に記載のシステム。
【国際調査報告】
2015514240.tif 000021