特許第6234448号(P6234448)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6234448
(24)【登録日】2017年11月2日
(45)【発行日】2017年11月22日
(54)【発明の名称】トランザクション実行分岐表示
(51)【国際特許分類】
   G06F 11/07 20060101AFI20171113BHJP
   G06F 11/34 20060101ALI20171113BHJP
【FI】
   G06F11/07 178
   G06F11/34 104
   G06F11/34 185
   G06F11/34 176
【請求項の数】11
【全頁数】73
(21)【出願番号】特願2015-516605(P2015-516605)
(86)(22)【出願日】2013年6月12日
(65)【公表番号】特表2015-523652(P2015-523652A)
(43)【公表日】2015年8月13日
(86)【国際出願番号】EP2013062173
(87)【国際公開番号】WO2013186272
(87)【国際公開日】20131219
【審査請求日】2016年5月24日
(31)【優先権主張番号】13/524,779
(32)【優先日】2012年6月15日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】グライナー、ダン
(72)【発明者】
【氏名】ヤコビ、クリスチャン
(72)【発明者】
【氏名】スレゲル、ティモシー
(72)【発明者】
【氏名】シュミット、ドナルド、ウィリアム
【審査官】 多胡 滋
(56)【参考文献】
【文献】 米国特許出願公開第2012/0030518(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/07
G06F 11/34
(57)【特許請求の範囲】
【請求項1】
トランザクション・アボートに関する診断情報を提供する方法であって、前記方法は、
トランザクションを実行するステップであって、択されたトランザクションの完了まで主メモリへのトランザクション・ストアのコミットが遅延される、実行するステップと、
前記トランザクションの実行中に1つ又は複数の分岐命令が実行されるかどうかを判断するステップと、
前記トランザクションの実行中に1つ又は複数の分岐命令が実行されると判断することに基づいて、前記1つ又は複数の分岐命令に対応する1つ又は複数のビットを設定するステップであって、1つのビットは1つの分岐命令に対応し、且つ、前記分岐命令により分岐が成立したかどうかを示し、前記ビットの設定は、前記ビットに対応する前記分岐命令の分岐が成功した場合、前記ビットを第1の値に設定し、前記ビットに対応する前記分岐命令の前記分岐が成功しなかった場合、前記ビットを第2の値に設定する、設定するステップと、
前記トランザクションがアボートしたと判断するステップと、
前記トランザクションがアボートしたと判断することに基づいて、前記1つ又は複数のビットを、前記トランザクションと関連したトランザクション診断ブロック(TDB)内に格納するステップであって、前記トランザクション診断ブロックのアドレスは、前記トランザクションを実行するための命令によって指定され、前記トランザクション診断ブロックは、前記トランザクションを含むトランザクション実行モードの間に実行された分岐命令に関して、どの分岐命令により分岐が成立し、どの分岐命令により分岐が成立しなかったかを示す分岐履歴をもたらす、格納するステップと、
を含む方法。
【請求項2】
前記方法は、TRANSACTION BEGIN命令によって前記トランザクションを開始するステップをさらに含み、前記TRANSACTION BEGIN命令は、前記トランザクション診断ブロックのアドレスを指定する、請求項1に記載の方法。
【請求項3】
前記1つ又は複数のビットは複数のビットのベクトル内に含まれ、前記複数のビットは、選択されたビットを除いて、前記トランザクション内で実行される分岐命令を表し、前記選択されたビットは、前記ベクトル内のビットより多くの分岐命令があるかどうかを示すためのものである、請求項1に記載の方法。
【請求項4】
前記1つ又は複数のビットは、前記トランザクションの前記分岐命令の順序で配置される、請求項に記載の方法、
【請求項5】
複数のタイプのトランザクション診断ブロックが存在し、前記方法は、前記1つ又は複数のビットを格納するために1つ又は複数のタイプのトランザクション診断ブロックを選択するステップをさらに含み、前記選択するステップは、前記トランザクションの開始の際に与えられるアボートのタイプ又は情報のうちの1つ又は複数に基づく、請求項1に記載の方法。
【請求項6】
前記複数のタイプのトランザクション診断ブロックは、プログラム指定TDB、プログラム割り込みTDB、及びインターセプトTDBを含む、請求項5に記載の方法。
【請求項7】
前記トランザクションは、TRANSACTION BEGIN命令により開始され、前記選択するステップは、前記TRANSACTION BEGIN命令において有効トランザクション診断ブロック・アドレスが与えられるかどうかを判断するステップを含み、前記有効トランザクション診断ブロック・アドレスが与えられることに基づいて、前記プログラム指定TDB内に前記1つ又は複数のビットが格納される、請求項6に記載の方法。
【請求項8】
前記方法は、TRANSACTION BEGIN命令によってトランザクションを開始するステップをさらに含み、前記トランザクションは制約なしトランザクションである、請求項1に記載の方法。
【請求項9】
前記トランザクション診断ブロック内に格納された前記1つ又は複数のインジケータは、前記トランザクションの分岐履歴をもたらす、請求項1に記載の方法。
【請求項10】
請求項1乃至9のいずれか1項に記載の前記方法の全てのステップを実行するように適合された手段を含むシステム。
【請求項11】
請求項1乃至9のいずれか1項に記載の前記方法の全てのステップをコンピュータに実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
1つ又は複数の態様は、一般に、マルチプロセッシング・コンピューティング環境に関し、具体的には、こうしたコンピューティング環境内でのトランザクション処理に関する。
【背景技術】
【0002】
複数の中央演算処理装置(CPU)による同一のストレージ位置の更新は、マルチプロセッサ・プログラミングの長年の課題である。ANDなどの単純な論理演算さえも含めて、ストレージ位置を更新する多くの命令が、その位置への多重アクセスにより更新を行う。例えば、最初にストレージ位置をフェッチし、次いで、更新結果を戻して格納(ストア)する。
【0003】
複数のCPUが安全に同一のストレージ位置を更新するために、その位置へのアクセスがシリアル化される。1つの命令、即ちインターナショナル・ビジネス・マシーンズ・コーポレーションにより以前に提供されたS/360アーキテクチャで導入されたTEST AND SET命令が、ストレージ位置のインターロック更新を提供した。インターロック更新とは、他のCPU及び入力/出力(I/O)サブシステム(例えば、チャネル・サブシステム)が観察するとき、命令のストレージ・アクセス全体がアトミックに行われるように見えることを意味する。後にインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるS/370アーキテクチャは、インターロック更新を実行するより高度な手段を提供し、且つ、ロックワード(又は、セマフォ)として一般的に知られるものの実装を可能にするCOMPARE AND SWAP及びCOMPARE DOUBLE AND SWAP命令を導入した。COMPARE AND SWAP AND PURGE及びCOMPARE AND SWAP AND STOREを含む、近年付加された命令は、付加的なインターロック更新能力を提供している。しかしながら、これら命令は全て、単一のストレージ位置のみに対するインターロックを提供するものである。
【0004】
要素を二重連結リストに加える際などの、より複雑なプログラム技術では、複数のストレージ位置のインターロック更新が必要とされ得る。他のCPU及びI/Oサブシステムが観察するとき、こうした操作においては、正方向ポインタ及び逆方向ポインタの両方が同時に更新されるように見える。こうした複数の位置更新を行うために、プログラムは、ロックワード等の別個の単一のシリアル化ポイントを用いるように強制される。しかしながら、ロックワードは、保証されるよりかなり粗いレベルのシリアル化を提供することがあり、例えば、2つの要素だけが更新されるとしても、ロックワードは何百万の要素のキュー全体をシリアル化することがある。プログラムは、より細かい粒度のシリアル化(例えば、ロック・ポイントの階層構造)を使用するように、データを構築できるが、そのことは、階層構造に違反した場合の潜在的なデッドロック状況、及び1つ又は複数のロックを保持する間にプログラムがエラーに遭遇した場合又はロックを取得できない場合の復旧の問題といった、付加的な問題をもたらす。
【0005】
上記に加えて、プログラムは、例外条件をもたらすことも又はもたらさないこともある一連の命令を実行することができる多数のシナリオがある。例外条件が発生しない場合、プログラムは続行するが、例外条件が認識された場合、プログラムは、修正アクションをとり、その例外条件を取り除くことができる。一例として、Java(登録商標)は、例えば、投機的実行、関数の部分的インライン化、及び/又はポインタ・ヌル・チェックの再順序付けなどにおいて、こうした実行を活用することができる。
【0006】
インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるz/OS(登録商標)及びその前身のような、典型的なオペレーティング・システム環境において、プログラムは、回復環境を確立して、プログラムが遭遇し得るあらゆるプログラム例外条件をインターセプトする。プログラムが例外条件をインターセプトしない場合、典型的には、オペレーティング・システムは、対処する準備ができていない例外のために、プログラムを異常終了する。こうした環境の確立及び活用は、費用がかかり複雑である。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】米国特許第5,551,013号明細書
【特許文献2】米国特許第6,009,261号明細書
【特許文献3】米国特許第5,574,873号明細書
【特許文献4】米国特許第6,308,255号明細書
【特許文献5】米国特許第6,463,582号明細書
【特許文献6】米国特許第5,790,825号明細書
【非特許文献】
【0008】
【非特許文献1】「z/Architecture Principles of Operation」、IBM(登録商標)出版番号SA22−7832−08、第9版、2010年8月
【発明の概要】
【発明が解決しようとする課題】
【0009】
トランザクション・アボートに関する診断情報を提供するための方法、システム及びコンピュータ・プログラムを提供する。
【課題を解決するための手段】
【0010】
トランザクション・アボートに関する診断情報を提供するためのコンピュータ・プログラム製品を提供することにより、従来技術の欠点を克服し、利点がもたらされる。コンピュータ・プログラム製品は、処理回路により読み出し可能であり、且つ、方法を実施するための、処理回路により実行される命令を格納するコンピュータ可読ストレージ媒体を含む。この方法は、トランザクションを実行することであって、トランザクションは、選択されたトランザクションの完了まで主メモリへのトランザクション・ストアのコミットを効果的に遅延させる、実行することと、トランザクションを実行することに基づいて、トランザクションが1つ又は複数の分岐命令を含むかどうかを判断することと、トランザクションが1つ又は複数の分岐命令を含む判断することに基づいて、1つ又は複数の分岐命令に対応する1つ又は複数のインジケータを設定することであって、インジケータは分岐が成立したかどうかを示す、設定することと、トランザクションがアボートしたと判断することと、トランザクションがアボートしたと判断することに基づいて、1つ又は複数のインジケータを、トランザクションと関連したトランザクション診断ブロック(TDB)内に格納することとを含む。
【0011】
1つ又は複数の実施形態に関連する方法及システムも、本明細書で説明され、特許請求される。さらに、1つ又は複数の実施形態に関連するサービスも説明され、本発明で特許請求され得る。
これにより付加的な特徴及び利点が実現される。他の実施形態及び態様は、本明細書で詳細に説明され、特許請求される本発明の一部と見なされる。
1つ又は複数の態様が、例として具体的に示され、本明細書の最後にある特許請求の範囲において明確に特許請求されている。上記及び他の目的、特徴、並びに利点は、添付図面と関連して用いられる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【0012】
図1】コンピューティング環境の一実施形態を示す。
図2】TRANSACTION BEGIN(TBEGIN)命令の一例を示す。
図3図2のTBEGIN命令のフィールドのさらなる詳細の一実施形態を示す。
図4】TRANSACTION BEGIN constrained(Transaction Begin、TBEGINC)命令の一例を示す。
図5図4のTBEGINC命令のフィールドのさらなる詳細の一実施形態を示す。
図6】TRANSACTION END(TEND)命令の一例を示す。
図7】TRANSACTION ABORT(TABORT)命令の一例を示す。
図8】ネスト化されたトランザクションの一例を示す。
図9】NONTRANSACTIONAL STORE(NTSTG)命令の一例を示す。
図10】EXTRACT TRANSACTION NESTING DEPTH(ETND)命令の一例を示す。
図11】トランザクション診断ブロックの一例を示す。
図12】関連したアボート・コード及び条件コードと共に、アボートの例示的な理由を示す。
図13】TBEGINC命令の実行と関連した論理の一実施形態を示す。
図14】TBEGIN命令の実行と関連した論理の一実施形態を示す。
図15】TEND命令の実行と関連した論理の一実施形態を示す。
図16】トランザクション・アボート処理と関連した論理の一実施形態を示す。
図17】情報を1つ又は複数のトランザクション診断ブロック内に選択的に格納することに関連した論理の一実施形態を示す。
図18】分岐指示を与えることに関連した論理の一実施形態を示す。
図19】キュー要素をキュー要素の二重連結リストに挿入する例を示す。
図20】キュー要素をキュー要素の二重連結リストに挿入する例を示す。
図21】コンピュータ・プログラム製品の一実施形態を示す。
図22】ホスト・コンピュータ・システムの一実施形態を示す。
図23】コンピュータ・システムの更に別の例を示す。
図24】コンピュータ・ネットワークを含むコンピュータ・システムの別の例を示す。
図25】コンピュータ・システムの種々の要素の一実施形態を示す。
図26図25のコンピュータ・システムの実行ユニットの一実施形態を示す。
図27図25のコンピュータ・システムの分岐ユニットの一実施形態を示す。
図28図25のコンピュータ・システムのロード/ストア・ユニットの一実施形態を示す。
図29】エミュレートされたホスト・コンピュータ・システムの一実施形態を示す。
【発明を実施するための形態】
【0013】
一態様によると、トランザクション実行(TX)ファシリティが提供される。このファシリティは、命令についてのトランザクション処理を提供し、1つ又は複数の実施形態においては、以下に説明されるような異なる実行モード、並びにネスト化されたレベルのトランザクション処理を提供する。
【0014】
トランザクション実行ファシリティは、トランザクション実行(TX)モードと呼ばれるCPU状態を導入する。CPUのリセット後、CPUは、TXモードにはない。CPUは、TRANSACTION BEGIN命令によりTXモードに入る。CPUは、(a)最も外側の(最外)TRANSACTION END命令(「内」及び「外」の詳細については後述)により、又は(b)トランザクションがアボートされることにより、TXモードを終了する。TXモードにある間、他のCPU及びI/Oサブシステムが観察するとき、CPUによるストレージ・アクセスは、ブロック・コンカレントであるように見える。ストレージ・アクセスは、(a)最外トランザクションがアボートすることなく終了したときに、ストレージにコミットされる(即ち、例えば、キャッシュ又はCPUにローカルなバッファにおいて行われた更新が伝搬され、実メモリに格納され、他のCPUに可視となる)か、又は(b)トランザクションがアボートされた場合に廃棄される。
【0015】
トランザクションをネスト化することができる。つまり、CPUはがTXモードにある間、CPUは、別のTRANSACTION BEGIN命令を実行することができる。CPUがTXモードに入るようにする命令は、最外TRANSACTION BEGINと呼ばれ、同様に、プログラムは最外トランザクション内にあると言われる。TRANSACTION BEGINの後続の実行は、内部命令と呼ばれ、プログラムは、内部トランザクションを実行している。モデルは、最小ネスト化深さ及びモデル依存の最大ネスト化深さを提供する。EXTRACT TRANSACTION NESTING DEPTH命令は、現在のネスト化深さ値を返し、更に別の実施形態においては、最大ネスト化深さ値を返すことができる。この技術は、「平坦化されたネスト化」と呼ばれるモデルを使用し、そこでは、任意のネスト化深さにおけるアボート条件により、全てのレベルのトランザクションがアボートされ、制御は、最外TRANSACTION BEGINに続く命令に返される。
【0016】
トランザクションの処理中、両方のアクセスが同じキャッシュ・ライン内のいずれかの記憶場所に対するものであり、且つ、アクセスの一方又は両方がストアである場合、1つのCPUによりなされるトランザクション・アクセスは、(a)別のCPUによりなされるトランザクション・アクセス又は非トランザクション・アクセス、又は(b)I/Oサブシステムによりなされる非トランザクション・アクセスのいずれかと競合すると言われる。換言すれば、トランザクション実行が生産的であるために、CPUは、これがコミットするまで、トランザクション・アクセスを行っているように見られない。このプログラム・モデルは、例えば百万個の要素の二重連結リスト内の2つのポイントを更新するといった特定の環境においては、非常に有効であり得る。しかしながら、このプログラム・モデルは、トランザクション・アクセスが行われるストレージ位置に対する競合が多数ある場合、あまり有効ではない。
【0017】
トランザクション実行の1つのモデル(本明細書では、制約なしトランザクションと呼ぶ)においては、トランザクションがアボートされると、プログラムは、アボート条件がもはや存在しないことを期待してトランザクションの再駆動を試みること、又は、プログラムが同等の非トランザクション経路に「フォールバックすること」ができる。トランザクション実行の別のモデル(本明細書では、制約付きトランザクションと呼ぶ)においては、アボートされたトランザクションは、CPUにより自動的に再駆動され、制約違反がない限り、制約付きトランザクションが最終的に完了することが保証される。
【0018】
トランザクションを開始する際、プログラムは、(a)トランザクションがアボートされた場合、どの汎用レジスタをオリジナルの内容に復元するか、(b)トランザクションが、例えば浮動小数点レジスタ及び浮動小数点制御レジスタを含む、浮動小数点レジスタのコンテキストの変更を許可されているかどうか、(c)トランザクションは、アクセス・レジスタ(AR)の変更を許可されているかどうか、及び(d)特定のプログラム例外条件が、割り込みを発生させないようにブロックされているかどうかといった、種々の制御を指定することができる。制約なしトランザクションがアボートされた場合、種々の診断情報を提供することができる。例えば、制約なしトランザクションを開始する最外TBEGIN命令は、プログラムが指定したトランザクション診断ブロック(TDB)を指定することができる。さらに、トランザクションが、プログラム割り込み又は解釈実行を終了させる条件に起因してアボートされた場合、それぞれ、CPUのプリフィックス領域内のTDB又はホストの状態記述により指定されるTDBを用いることもできる。
【0019】
種々のタイプのレジスタが上述されている。これらは、本明細書でさらに詳細に説明される。汎用レジスタは、一般算術演算及び論理演算においてアキュムレータとして使用される。一実施形態において、各々のレジスタは、64個のビット位置を含み、16個の汎用レジスタがある。汎用レジスタは、番号0−15により識別され、命令内の4ビットのRフィールドによって指定される。ある命令は、数個のRフィールドを有することによって、複数の汎用レジスタをアドレス指定することを規定する。命令によっては、特定の汎用レジスタの使用は、命令のRフィールドによって明示的に指定されるのではなく、暗黙指定される。
【0020】
一般算術演算及び論理演算においてアキュムレータとして使用されるのに加えて、16個の汎用レジスタのうちの15個は、アドレス生成におけるベース・アドレス及び指標レジスタとしても用いられる。これらの場合、レジスタは、命令内の4ビットのBフィールド又はXフィールドによって指定される。Bフィールド又はXフィールドにおける0の値は、適用されるべきベース又は指標が存在しないことを指定し、従って、汎用レジスタ0は、ベース・アドレス又は指標を含むものとして指定されない。
【0021】
浮動小数点命令は、1組の浮動小数点レジスタを使用する。一実施形態において、CPUは、16個の浮動小数点レジスタを有する。浮動小数点レジスタは、番号0−15により識別され、浮動小数点命令内の4ビットのRフィールドによって指定される。各々の浮動小数点レジスタは、64ビットの長さであり、且つ、短い(32ビット)又は長い(64ビット)浮動小数点オペランドを含むことができる。
【0022】
浮動小数点制御(FPC)レジスタは、マスク・ビット、フラグ・ビット、データ例外コード及び丸めモード・ビットを含む32ビット・レジスタであり、浮動小数点演算の処理の際に使用される。
【0023】
さらに、一実施形態において、CPUは、各々が64ビット位置を有する16個の制御レジスタを有する。レジスタにおけるビット位置は、プログラム・イベント記録(PER)(以下に説明される)のような、システム内の特定のファシリティに割り当てられ、且つ、演算が行われることを規定するため又はファシリティが必要とする特別な情報を与えるために用いられる。一実施形態においては、以下に説明されるように、トランザクション・ファシリティについては、CR0(ビット8及び9)及びCR2(ビット61−63)が用いられる。
【0024】
例えば、CPUは、0−15の番号が付された16個のアクセス・レジスタを有する。アクセス・レジスタは、アドレス空間制御要素(ASCE)の間接的指定を含む32個のビット位置から成る。アドレス空間制御要素は、対応するアドレス空間への参照を変換するための動的アドレス変換(DAT)機構により用いられるパラメータである。CPUがアクセス・レジスタ・モード(プログラム状況ワード(PSW)内のビットにより制御される)と呼ばれるモードにあるとき、ストレージ・オペランド参照のための論理アドレスを指定するために用いられる命令のBフィールドがアクセス・レジスタを指定し、アクセス・レジスタにより指定されるアドレス空間制御要素が、行われている参照用にDATにより使用される。一部の命令では、Bフィールドの代わりにRフィールドが使用される。アクセス・レジスタの内容をロードし、格納するための命令、及び1つのアクセス・レジスタの内容を別のアクセス・レジスタに移動するための命令が与えられる。
【0025】
アクセス・レジスタ1−15の各々は、任意のアドレス空間を指定することができる。アクセス・レジスタ0は、一次命令空間を指定する。アクセス・レジスタ1−15の1つを用いてアドレス空間を指定する場合、CPUは、アクセス・レジスタの内容を変換することにより、どのアドレス空間が指定されているのかを判断する。アクセス・レジスタ0を使用してアドレス空間を指定する場合は、CPUは、そのアクセス・レジスタを、一次命令空間を指定しているものとして扱い、アクセス・レジスタの実際の内容を検査しない。従って、16個のアクセス・レジスタは、任意の一時点において、一次命令空間と、最大15個の他の空間を指定することができる。
【0026】
一実施形態において、複数のタイプのアドレス空間がある。アドレス空間は、各々の番号をストレージ内のバイト位置と関連付けることを可能にする特別な変換パラメータとともに、連続した整数番号のシーケンス(仮想アドレス)である。シーケンスは0から始まり、左から右へ進む。
【0027】
例えば、z/Architectureにおいて、主ストレージ(主メモリともいう)にアクセスするためにCPUにより仮想アドレスが使用されると、その仮想アドレスは、最初に、動的アドレス変換(DAT)により実アドレスに変換され、次に、プリフィックス付加により絶対アドレスに変換される。DATは、1乃至5レベルのテーブル(ページ・テーブル、セグメント・テーブル、領域第3テーブル、領域第2テーブル、及び領域第1テーブル)を変換パラメータとして使用することができる。特定のアドレス空間のための最高レベルのテーブルの指定(起点及び長さ)は、アドレス空間制御要素と呼ばれ、これは、DATが使用するために制御レジスタにおいて見出されるか、又はアクセス・レジスタにより指定される。代替的に、アドレス空間のためのアドレス空間制御要素は、実空間指定とすることができ、この実空間指定は、DATが、いずれのテーブルも使用することなく、単に仮想アドレスを実アドレスとして扱うことにより、仮想アドレスを変換することを示す。
【0028】
DATは、その時々において、異なる制御レジスタ内のアドレス空間制御要素又はアクセス・レジスタにより指定されるアドレス空間制御要素を使用する。その選択は、現PSWにおいて指定される変換モードによって決定される。一次空間モード、二次空間モード、アクセス・レジスタ・モード及びホーム空間モードの4つの変換モードが利用可能である。変換モードに応じて、異なるアドレス空間がアドレス指定可能である。
【0029】
CPUが一次空間モード又は二次空間モードにある何れの時点でも、CPUは、2つのアドレス空間即ち一次アドレス空間及び二次アドレス空間に属する仮想アドレスを変換することができる。CPUがアクセス・レジスタ・モードにある何れの時点でも、CPUは、最大16個のアドレス空間(一次アドレス及び最大15個のAR指定アドレス空間)に変換することができる。CPUがホーム空間モードにある何れの時点でも、CPUは、ホーム・アドレス空間の仮想アドレスを変換することができる。
【0030】
一次アドレス空間は、一次仮想アドレスからなるため、そのように識別され、一次仮想アドレスは、一次アドレス空間制御要素(ASCE)により変換される。同様に、二次アドレス空間は、二次ASCEによって変換された二次仮想アドレスからなり、AR指定アドレス空間は、AR指定ASCEによって変換されたAR指定仮想アドレスからなり、ホーム・アドレス空間は、ホームASCEによって変換されたホーム仮想アドレスからなる。一次ASCE及び二次ASCEは、それぞれ、制御レジスタ1及び7内にある。AR指定ASCEは、制御レジスタ2、5及び8を用いてアクセス・レジスタ変換(ART)と呼ばれるプロセスを通して配置されるASN第2テーブル・エントリ内にある。ホームASCEは、制御レジスタ13内にある。
【0031】
図1を参照して、本明細書で説明されるトランザクション・ファシリティの1つ又は複数の態様を組み込み、使用するためのコンピューティング環境の一実施形態を説明する。
【0032】
図1を参照すると、一例において、コンピューティング環境100は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるz/Architectureに基づいている。z/Architectureは、非特許文献1に記載されている。
【0033】
IBM、並びにZ/OS及びZ/VM(以下に参照される)は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で用いられる他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の企業の登録商標、商標、又は製品名であり得る。
【0034】
一例として、コンピューティング環境100が、1つ又は複数の制御ユニット108を介して1つ又は複数の入力/出力(I/O)デバイス106に結合された中央プロセッサ・コンプレックス(CPC)102を含む。中央プロセッサ・コンプレックス(CPC)102は、例えば、1つ又は複数の中央プロセッサ110、1つ又は複数のパーティション112(例えば論理パーティション(LP))、論理パーティション・ハイパーバイザ114、及び入力/出力サブシステム115を含み、これらの各々を以下に説明する。
【0035】
1つ又は複数の中央プロセッサ110は、論理パーティションに割り当てられる物理プロセッサ・リソースである。特に、それぞれの論理パーティション112は、各々がパーティションに割り当てられた物理プロセッサ110の全て又は割り当て分を表す、1つ又は複数の論理プロセッサを有する。特定のパーティション112の論理プロセッサは、そのパーティションに対して基礎をなすプロセッサ・リソース110が予約されるように、そのパーティション専用であっても、又は、基礎をなすプロセッサ・リソースが別のパーティションに対して潜在的に利用可能であるように、別のパーティションと共有してもよい。
【0036】
論理パーティションは、別個のシステムとして機能し、且つ、1つ又は複数のアプリケーション、及び随意的に、各々の論理パーティションについて異なり得る常駐オペレーティング・システムを有する。一実施形態において、オペレーティング・システムは、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるz/OSオペレーティング・システム、z/VMオペレーティング・システム、z/Linuxオペレーティング・システム、又はTPFオペレーティング・システムである。論理パーティション112は、プロセッサ110上で実行されているファームウェアが実装する論理パーティション・ハイパーバイザ114により管理される。本明細書で用いられるファームウェアは、例えば、プロセッサのマイクロコード及び/又はミリコードを含む。ファームウェアは、例えば、より上位レベルのマシン・コードの実装に用いられる、ハードウェア・レベルの命令及び/又はデータ構造体を含む。一実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコード又は基礎をなすハードウェアに特有のマイクロコードとして配信される独自のコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【0037】
論理パーティション及び論理パーティション・ハイパーバイザの各々は、中央プロセッサと関連した中央ストレージのそれぞれのパーティション内に常駐する1つ又は複数のプログラムを含む。論理パーティション・ハイパーバイザ114の一例は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションが提供するプロセッサ・リソース/システム・マネジャ(PR/SM)である。
【0038】
入力/出力サブシステム115は、入力/出力デバイス106と主ストレージ(主メモリともいう)との間の情報の流れを方向付ける。この入力/出力サブシステム115は、中央処理コンプレックスに結合され、中央処理コンプレックスの一部とすることも又はそれとは別個のものとすることもできる。I/Oサブシステムは、中央プロセッサを、I/Oデバイスと直接通信するタスクから解放し、データ処理が、入力/出力処理と同時に進行することを可能にする。通信を提供するために、I/Oサブシステムは、I/O通信アダプタを用いる。例えば、チャネル、I/Oアダプタ、PCIカード、イーサネット・カード、Small Computer System Interface(SCSI)カード等を含む、種々のタイプの通信アダプタがある。本明細書で説明される特定の例において、I/O通信アダプタはチャネルであり、従って、I/Oサブシステムは、本明細書ではチャネル・サブシステムと呼ばれる。しかしながら、これは一例にすぎない。他のタイプのI/Oサブシステムを用いることもできる。
【0039】
I/Oサブシステムは、入力/出力デバイス106との間の情報の流れを管理する際に、1つ又は複数の入力/出力経路を通信リンクとして使用する。この特定の例において、通信アダプタはチャネルであるので、これらの経路は、チャネル経路と呼ばれる。
【0040】
上述のコンピューティング環境は、用いることができるコンピューティング環境の一例にすぎない。これらに限定されるものではないが、区分化されていない環境、他の区分化された環境、及び/又はエミュレートされた環境を含む他の環境を用いることができ、実施形態は、いずれか1つの環境に限定されるものではない。
【0041】
1つ又は複数の態様によると、トランザクション実行ファシリティは、CPUの機能強化であり、これは、CPUが、(トランザクションとして知られる)一連の命令を実行することできる手段を提供し、それらの記憶場所の更新を含む、複数のストレージ位置にアクセスすることができる。他のCPU及びI/Oサブシステムにより観察されるとき、トランザクションは、(a)単一のアトミック操作として全体的に完了されるか、又は(b)潜在的に、トランザクションがこれまでに実行されたという証拠を残さずにアボートされる(本明細書で説明される特定の条件を除いて)。従って、成功裏に完了したトランザクションは、典型的なマルチプロセッシング・モデルにおいて必要とされるいずれのロック機構もなしに、多数のストレージ位置を更新することができる。
【0042】
トランザクション実行ファシリティは、例えば、1つ又は複数の制御、1つ又は複数の命令、制約付き実行及び制約なし実行を含むトランザクション処理、アボート処理を含み、その各々を以下にさらに説明する。
【0043】
一実施形態において、トランザクション・アボート・プログラム状況ワード(PSW)、トランザクション診断ブロック(TDB)アドレス、及びトランザクション・ネスト化深さを含む3つの特殊用途の制御、5つの制御レジスタのビット、及びTRANSACTION BEGIN(制約付き及び制約なし)、TRANSACTION END、EXTRACT TRANSACTION NESTING DEPTH、TRANSACTION ABORT、及びNONTRANSACTIONAL STOREを含む6つの一般命令を用いて、トランザクション実行ファシリティを制御する。ファシリティがインストールされる際、ファシリティは、例えば、構成内の全てのCPU内にインストールされる。ファシリティ表示は、1つの実施においてはビット73であり、1の場合、トランザクション実行ファシリティがインストールされたことを示す。
【0044】
トランザクション実行ファシリティがインストールされると、構成は、制約なしトランザクション実行ファシリティと、随意的に、制約付きトランザクション実行ファシリティとを提供し、それらの各々を以下に説明する。例証として、ファシリティ表示50及び73が共に1であるとき、制約付きトランザクション実行ファシリティがインストールされる。両方のファシリティ表示は、メモリの特定の位置に格納される。
【0045】
本明細書で用いられる場合、命令名TRANSACTION BEGINは、簡略記号TBEGIN(制約なしトランザクションに対するTRANSACTION BEGIN)及び簡略記号TBEGINC(制約付きトランザクションに対するTRANSACTION BEGIN)を有する命令を指す。特定の命令に関する説明は、命令名と、それに続く丸括弧又は角括弧内の簡略記号、又は単に簡略記号によって示される。
【0046】
TRANSACTION BEGIN(TBEGIN)命令の形式の一実施形態が、図2図3に示される。一例として、TBEGIN命令200は、制約なしトランザクション開始操作を指定するオペコードを含むオペコード・フィールド202と、ベース・フィールド(B)204と、変位フィールド(D)206と、即値フィールド(I)208とを含む。Bフィールドが0でないとき、B204が指定する汎用レジスタの内容をD206に付加して、第1のオペランド・アドレスを取得する。
【0047】
フィールドが0でないとき、以下が適用される。:
*トランザクション・ネスト化深さが最初に0のとき、第1のオペランド・アドレスは、トランザクションがアボートされた場合に種々の診断情報を格納することができる、TBEGIN指定TDB(以下にさらに説明される)と呼ばれる、256バイトのトランザクション診断ブロックの記憶位置を指定する。CPUが一次空間モード又はアクセス・レジスタ・モードにあるとき、第1のオペランド・アドレスは、一次アドレス空間内の記憶位置を指定する。CPUが二次空間モード又はホーム空間モードにあるとき、第1のオペランド・アドレスは、それぞれ、二次アドレス空間又はホーム・アドレス空間内の記憶位置を指定する。DATがオフのとき、トランザクション診断ブロック(TDB)アドレス(TDBA)は、実ストレージ内の記憶位置を指定する。
【0048】
第1のオペランドに対するストア・アクセス可能性が判断される。アクセス可能である場合、オペランドの論理アドレスは、トランザクション診断ブロック・アドレス(TDBA)内に入れられ、TDBAは有効である。
【0049】
*CPUが既に制約なしトランザクション実行モードにあるとき、TDBAは変更されず、アクセス可能性について第1のオペランドが試験されるかどうかは予測不能である。
フィールドが0のとき、第1のオペランドについてアクセス例外は検出されず、最外TBEGIN命令について、TDBAは無効である。
【0050】
一例において、Iフィールドのビットは、次のように定められる。:
汎用レジスタ保存マスク(GRSM)210(図3):Iフィールドのビット0−7は、汎用レジスタ保存マスク(GRSM)を含む。GRSMの各ビットは、汎用レジスタの偶数−奇数対を表し、ここでビット0はレジスタ0及び1を表し、ビット1はレジスタ2及び3を表し、以下同様である。最外TBEGIN命令のGRSMにおけるビットが0のとき、対応するレジスタ対は保存されない。最外TBEGIN命令のGRSMにおけるビットが1のとき、対応するレジスタ対は、プログラムが直接アクセスできないモデル依存位置に保存される。
【0051】
トランザクションがアボートした場合、最外TBEGIN命令が実行されたときに、保存されたレジスタ対は、その内容に復元される。トランザクションがアボートするとき、全ての他の(保存されていない)汎用レジスタの内容が復元されるとは限らない。
汎用レジスタ保存マスクは、最外のものを除いて、全てのTBEGIN命令において無視される。
【0052】
AR変更許可(A)212:A制御、即ちIフィールドのビット12は、トランザクションがアクセス・レジスタを変更するのを許可されるかどうかを制御する。有効なAR変更許可制御は、現在のネスト化レベル及び全ての外部レベルに対するTBEGIN命令におけるA制御の論理ANDである。
【0053】
有効なA制御が0のとき、いずれかのアクセス・レジスタを変更しようとする試みがなされた場合、トランザクションは、アボート・コード11(限定された命令)でアボートされる。有効なA制御が1のとき、アクセス・レジスタが変更される場合には、トランザクションはアボートされない(いずれの他のアボート条件もない場合)。
【0054】
浮動小数点演算許可(F)214:F制御、即ちIフィールドのビット13は、トランザクションが特定の浮動小数点命令を実行するのを許可されているかどうかを制御する。有効な浮動小数点演算許可制御は、現在のネスト化レベル及び全ての外部レベルに対するTBEGIN命令におけるF制御の論理ANDである。
【0055】
有効なF制御が0である場合、(a)浮動小数点命令を実行しようとする試みがなされた場合、トランザクションは、アボート・コード11(限定された命令)でアボートされ、且つ、(b)浮動小数点制御レジスタ(FPCR)のバイト2におけるデータ例外コード(DXC)は、いずれのデータ例外プログラム例外条件によっても設定されない。有効なF制御が1である場合、(a)浮動小数点命令を実行しようとする試みがなされた場合、トランザクションはアボートされず(いずれの他のアボート条件もない場合)、且つ、(b)データ例外プログラム例外条件によりFPCRにおけるDXCを設定することができる。
【0056】
プログラム割り込みフィルタ処理制御(PIFC)216:Iフィールドのビット14−15は、プログラム割り込みフィルタ処理制御(PIFC)である。PIFCは、CPUがトランザクション実行モードにある間に発生するプログラム例外条件(例えば、アドレス指定例外、データ例外、操作例外、保護例外等)の特定のクラスが割り込みをもたらすかどうかを制御する。
【0057】
有効なPIFCは、現在のネスト化レベル及び全ての外部レベルに対するTBEGIN命令におけるPIFCの最高値である。有効なPIFCが0のとき、全てのプログラム例外条件は、割り込みをもたらす。有効なPIFCが1のとき、1及び2のトランザクション実行クラスを有するプログラム例外条件は、割り込みをもたらす。(例外の重大度に応じて、各々のプログラム例外条件が少なくとも1つのトランザクション実行クラスに割り当てられる。重大度は、トランザクション実行の実行を反復する際の復元の尤度、及び、オペレーティング・システムが割り込みを見る必要があるかどうかに基づく。)有効なPIFCが2のとき、トランザクション実行クラスが1であるプログラム例外条件は、割り込みをもたらす。3の有効なPIFCは予約される。
【0058】
フィールドのビット8−11(命令のビット40−43)は予約され、0を含む必要があり、他の場合には、プログラムは、将来互換性をもって動作することができなくなることがある。
【0059】
図4図5を参照して、TRANSACTION BEGIN constrained(TBEGINC)命令の形式の一実施形態を説明する。一例において、TBEGINC300は、制約付きトランザクション開始操作を指定するオペコードを含むオペコード・フィールド302と、ベース・フィールド(B)304と、変位フィールド(D)306と、即値フィールド(I)308とを含む。B304が指定する汎用レジスタの内容をD306に付加して、第1のオペランド・アドレスを取得する。しかしながら、TRANSACTION BEGIN constrained命令においては、ストレージにアクセスするために、第1のオペランド・アドレスは使用されない。代わりに、命令のBフィールドは0を含み、他の場合には、指定例外が認識される。
【0060】
一実施形態において、Iフィールドは種々の制御を含み、その一例が図5に示される。
【0061】
一例において、Iフィールドのビットは、次のように定められる。:
【0062】
汎用レジスタ保存マスク(GRSM)310:Iフィールドのビット0−7は、汎用レジスタ保存マスク(GRSM)を含む。GRSMの各ビットは、汎用レジスタの偶数−奇数対を表し、ここで、ビット0はレジスタ0及び1を表し、ビット1はレジスタ2及び3を表し、以下同様である。GRSMにおけるビットが0のとき、対応するレジスタ対は保存されない。GRSMにおけるビットが1のとき、対応するレジスタ対は、プログラムが直接アクセスできないモデル依存位置に保存される。
【0063】
トランザクションがアボートした場合、最外TBEGIN命令が実行されたときに、保存されたレジスタ対は、その内容に復元される。トランザクションがアボートするとき、全ての他の(保存されていない)汎用レジスタの内容が復元されるとは限らない。
【0064】
TBEGINCを使用して制約なしトランザクション実行モードで実行を継続するとき、汎用レジスタ保存マスクは無視される。
【0065】
AR変更許可(A)312:A制御、即ちIフィールドのビット12は、トランザクションがアクセス・レジスタを変更するのを許可されるかどうかを制御する。有効なAR変更許可制御は、現在のネスト化レベル及びあらゆる外部TBEGIN又はTBEGINC命令に対するTBEGINC命令におけるA制御の論理ANDである。
【0066】
有効なA制御が0のとき、いずれかのアクセス・レジスタを変更しようとする試みがなされた場合、トランザクションは、アボート・コード11(限定された命令)でアボートされる。有効なA制御が1のとき、アクセス・レジスタが変更される場合には、トランザクションはアボートされない(いずれの他のアボート条件もない場合)。
【0067】
フィールドのビット8−11及びビット13−15(命令のビット40−43及びビット45−47)は予約され、0を含む必要がある。
【0068】
TRANSACTION BEGIN命令の終わりは、その形式を図6に示すTRANSACTION END(TEND)命令により指定される。一例として、TEND命令400は、トランザクション終了操作を指定するオペコードを含むオペコード・フィールド402を含む。
【0069】
トランザクション実行ファシリティに関して多数の用語が用いられ、従って、便宜のためだけに、用語のリストを以下にアルファベット順で提供する。一実施形態において、これらの用語は、次のように定められる。
【0070】
アボート:TRANSACTION END命令の前にトランザクションが終了し、0のトランザクション・ネスト化深さをもたらすとき、トランザクションがアボートする。一実施形態において、トランザクションがアボートすると、以下のことが行われる。
*全てのレベルのトランザクションにより行われたトランザクション・ストア・アクセスが廃棄される(即ち、コミットされない)。
*全てのレベルのトランザクションにより行われた非トランザクション・ストア・アクセスがコミットされる。
*最外TRANSACTION BEGIN命令の汎用レジスタ保存マスク(GRSM)により指定されたレジスタが、トランザクション実行より前のレジスタの内容に復元される(即ち、最外TRANSACTION BEGIN命令の実行時のレジスタの内容に)。最外TRANSACTION BEGIN命令の汎用レジスタ保存マスクにより指定されていない汎用レジスタは、復元されない。
*アクセス・レジスタ、浮動小数点レジスタ、及び浮動小数点制御レジスタは、復元されない。トランザクションがアボートすると、トランザクション実行中にこれらのレジスタに対してなされた全ての変更が保持される。
【0071】
トランザクションは、限定された命令の実行を試みること、限定されたリソースの変更を試みること、トランザクションの競合、種々のCPUリソースの超過、いずれかの解釈実行インターセプト条件、いずれかの割り込み、TRANSACTION ABORT命令及び他の理由を含む、様々な理由に起因してアボートすることがある。トランザクション・アボート・コードは、トランザクションをアボートできる具体的な理由を提供する。
【0072】
図7を参照して、TRANSACTION ABORT(TABORT)命令の形式の一例を説明する。一例として、TABORT命令500は、トランザクション・アボート操作を指定するオペコードを含むオペコード・フィールド502と、ベース・フィールド(B)504と、変位フィールド(D)506とを含む。Bフィールドが0でないとき、B504により指定される汎用レジスタの内容をD506に付加して、第2のオペランド・アドレスを取得し、他の場合には、第2のオペランド・アドレスは、Dフィールドのみから形成され、Bフィールドは無視される。第2のオペランド・アドレスは、データをアドレス指定するためには用いられず、代わりに、アドレスは、アボート処理中にトランザクション診断ブロックに配置されるトランザクション・アボート・コードを形成する。第2のオペランド・アドレスについてのアドレス計算は、アドレス算術演算の規則に従う。24ビット・アドレッシング・モードにおいては、ビット0−29が0に設定され、31ビット・アドレッシング・モードにおいては、ビット0−32が0に設定される。
【0073】
コミット:最外TRANSACTION END命令の完了時に、CPUは、トランザクション(即ち、最外トランザクション及びあらゆるネスト化レベル)によって行われたストア・アクセスをコミットし、それらが他のCPU及びI/Oサブシステムに見えるようにする。他のCPU及びI/Oサブシステムにより観察されるとき、トランザクションの全てのネスト化レベルによって行われた全てのフェッチ及びストア・アクセスは、コミットが行われたときに単一の同時操作として行われるように見える。
【0074】
汎用レジスタ、アクセス・レジスタ、浮動小数点レジスタ及び浮動小数点制御レジスタの内容は、コミット・プロセスによって変更されない。トランザクションのストアがコミットされる際、トランザクション実行中にこれらのレジスタに対して行われるいずれの変更も保持される。
【0075】
競合:1つのCPUによって行われたトランザクション・アクセスは、両方のアクセスが同じキャッシュ・ライン内のいずれかの記憶場所に対するものであり、且つ、アクセスの1つ又は複数がストアである場合、(a)別のCPUによって行われたトランザクション・アクセス若しくは非トランザクション・アクセス、又は(b)I/Oサブシステムによって行われた非トランザクション・アクセスと競合する。
【0076】
競合が概念的シーケンスにおいて検出できない場合でも、CPUの命令の投機的実行により、競合を検出することができる。
【0077】
制約付きトランザクション:制約付きトランザクションは、制約付きトランザクション実行モードで実行されるトランザクションであり、以下の制限を受ける。
*一般命令のサブセットが利用可能である。
*制限された数の命令を実行することができる。
*制限された数のストレージ・オペランド位置にアクセスすることできる。
*トランザクションは、単一のネスト化レベルに制限される。
【0078】
割り込みの反復又は他のCPU又はI/Oサブシステムとの競合がない場合、制約付きトランザクションは最終的に完了し、従って、アボート・ハンドラ・ルーチンは必要ない。制約付きトランザクションを以下に詳しく説明する。
【0079】
CPUが既に制約なしトランザクション実行モードにある間にTRANSACTION BEGIN constrained(TBEGINC)命令が実行されると、実行は、ネスト化された制約なしトランザクションとして継続する。
【0080】
制約付きトランザクション実行モード:トランザクション・ネスト化深さが0であり、トランザクションがTBEGINC命令により開始されたとき、CPUは、制約付きトランザクション実行モードに入る。CPUが制約付きトランザクション実行モードにある間、トランザクション・ネスト化深さは1である。
【0081】
ネスト化されたトランザクション:CPUが制約なしトランザクション実行モードにある間にTRANSACTION BEGIN命令が出されると、トランザクションがネスト化される。
【0082】
トランザクション実行ファシリティは、平坦化されたネスト化と呼ばれるモデルを使用する。平坦化されたネスト化モードにおいて、内部トランザクションにより行われたストアは、最外トランザクションがそのストアをコミットするまで、他のCPU及びI/Oサブシステムにより観察することができない。同様に、トランザクションがアボートした場合、全てのネスト化されたトランザクションがアボートし、全てのネスト化されたトランザクションの全てのトランザクション・ストアが廃棄される。
【0083】
ネスト化されたトランザクションの一例を図8に示す。図示されるように、第1のTBEGIN600が最外トランザクション601を開始し、TBEGIN602は第1のネスト化されたトランザクションを開始し、TBEGIN604は、第2のネスト化されたトランザクションを開始する。この例において、TBEGIN604及びTEND606は、最内トランザクション608を定める。TEND610が実行されると、トランザクション・ストアが、最外トランザクション及び全ての内部トランザクションに対してコミットされる612。
【0084】
制約なしトランザクション:制約なしトランザクションとは、制約なしトランザクション実行モードで実行されるトランザクションである。制約なしトランザクションは、制約付きトランザクションのような方法では制限されないが、依然として様々な理由によりアボートされ得る。
【0085】
制約なしトランザクション実行モード:トランザクションがTBEGIN命令により開始されると、CPUは制約なしトランザクション実行モードに入る。CPUが制約なしトランザクション実行モードにある間、トランザクション・ネスト化深さは、1から最大トランザクション・ネスト化深さまで変化し得る。
【0086】
非トランザクション・アクセス:非トランザクション・アクセスは、CPUがトランザクション実行モードにないとき、CPUにより行われるストレージ・オペランド・アクセスである(即ち、トランザクション以外の典型的なストレージ・アクセス)。さらに、I/Oサブシステムにより行われるアクセスは、非トランザクション・アクセスである。さらに、NONTRANSACTIONAL STORE命令を用いて、CPUが制約なしトランザクション実行モードにある間に非トランザクション・ストア・アクセスをもたらすことができる。
【0087】
図9を参照して、NONTRANSACTIONAL STORE命令の形式の一実施形態を説明する。一例として、NONTRANSACTIONAL STORE命令700は、非トランザクション・ストア操作を指示するオペコードを指定する複数のオペコード・フィールド702a、702bと、その内容が第1のオペランドと呼ばれるレジスタを指定するレジスタ・フィールド(R)704と、インデックス・フィールド(X)706と、ベース・フィールド(B)708と、第1の変位フィールド(DL)710と、第2の変位フィールド(DH)712とを含む。Xフィールド及びBフィールドにより指定される汎用レジスタの内容を、DHフィールド及びDLフィールドの内容の連結の内容に付加して、第2のオペランド・アドレスを形成する。Xフィールド若しくはBフィールドのいずれか又は両方が0のとき、対応するレジスタは、加算に関与しない。
【0088】
64ビットの第1のオペランドは、第2のオペランド位置において、変更されずに非トランザクション的に配置される。
DHフィールド及びDLフィールドにより形成された変位は、20ビットの符号付き2進整数として扱われる。
第2のオペランドは、ダブルワード境界上にアラインされ、他の場合には、指定例外が認識され、操作は抑止される。
【0089】
外部/最外トランザクション:外部トランザクションとは、より低い番号のトランザクション・ネスト化深さを有するトランザクションである。トランザクション・ネスト化深さが1のトランザクションが、最外トランザクションである。
【0090】
最外TRANSACTION BEGIN命令は、トランザクション・ネスト化深さが最初に0であるときに実行される。最外TRANSACTION END命令は、トランザクション・ネスト化深さを1から0に移行させるものである。本実施形態において、制約付きトランザクションは、最外トランザクションである。
【0091】
プログラム割り込みフィルタ処理:特定のプログラム例外条件が原因でトランザクションがアボートされると、プログラムは、随意的に割り込みが発生するのを防止することができる。この技術は、プログラム割り込みフィルタ処理と呼ばれる。プログラム割り込みフィルタ処理は、割り込みのトランザクション・クラス、TRANSACTION BEGIN命令からの有効なプログラム割り込みフィルタ処理制御、及び制御レジスタ0におけるトランザクション実行プログラム割り込みフィルタ処理オーバーライドを受ける。
【0092】
トランザクション:トランザクションは、CPUがトランザクション実行モードにある間に行われたストレージ・オペランド・アドレス、及び変更された選択された汎用レジスタを含む。制約なしトランザクションの場合、ストレージ・オペランド・アクセスは、トランザクション・アクセス及び非トランザクション・アクセスの両方を含むことができる。制約付きトランザクションの場合、ストレージ・オペランド・アクセスは、トランザクション・アクセスに制限される。他のCPU及びI/Oサブシステムにより観察されるとき、トランザクション実行モードにある間にCPUにより行われた全ストレージ・オペランド・アクセスは、単一の同時操作として行われるように見える。トランザクションがアボートされると、トランザクション・ストア・アクセスは廃棄され、最外TRANSACTION BEGIN命令の汎用レジスタ保存マスクにより指定されるいずれのレジスタも、トランザクション実行より前のレジスタの内容に復元される。
【0093】
トランザクション・アクセス:トランザクション・アクセスとは、NONTRANSACTIONAL STORE命令により行われたアクセスを除いた、CPUがトランザクション実行モードにある間に行われたストレージ・オぺランド・アクセスである。
【0094】
トランザクション実行モード:トランザクション実行モードという用語は、制約なしトランザクション実行モード及び制約付きトランザクション実行モードの両方の共通操作を説明する。従って、操作を説明する際、制約なし及び制約付きという用語は、トランザクション実行モードを限定するために用いられる。
【0095】
トランザクション・ネスト化深さが0のとき、CPUはトランザクション実行モードにない(非トランザクション実行モードとも呼ばれる)。
【0096】
CPUにより観察されるとき、トランザクション実行モードで行われたフェッチ及びストアは、トランザクション実行モードにない間に行われたものと変わらない。
【0097】
z/Architectureの一実施形態において、トランザクション実行ファシリティは、制御レジスタ0のビット8−9、制御レジスタ2のビット61−63、トランザクション・ネスト化深さ、トランザクション診断ブロック・アドレス及びトランザクション・アボート・プログラム状況ワード(PSW)の制御下にある。
【0098】
最初のCPUリセットに続いて、制御レジスタ0のビット位置8−9、制御レジスタ2のビット位置62−63及びトランザクション・ネスト化深さが0に設定される。トランザクション実行制御、即ち制御レジスタ0のビット8が0のとき、CPUをトランザクション実行モードに入れることはできない。
【0099】
種々の制御に関するさらなる詳細を以下に説明する。
示されるように、トランザクション実行ファシリティは、制御レジスタ0の2個のビット及び制御レジスタ2の3個のビットによって制御される。例えば:
【0100】
制御レジスタ0のビット:一実施形態において、ビット割り当ては、以下の通りである。:
【0101】
トランザクション実行制御(TXC):制御レジスタ0のビット8は、トランザクション実行制御である。このビットは、制御プログラム(例えば、オペレーティング・システム)が、トランザクション実行ファシリティがプログラムによって使用可能かどうかを示すことができる機構を提供する。ビット8は、トランザクション実行モードに成功裏に入るために、1であるべきである。
制御レジスタ0のビット8が0のとき、EXTRACT TRANSACTION NESTING DEPTH、TRANSACTION BEGIN及びTRANSACTION END命令を実行しようとする試みは、特別な操作実行をもたらす。
図10を参照して、EXTRACT TRANSACTION NESTING DEPTH命令の形式の一実施形態を説明する。一例として、EXTRACT TRANSACTION NESTING DEPTH800は、トランザクション・ネスト化深さ抽出操作を示すオペコードを指定するオペコード・フィールド802と、汎用レジスタを指定するレジスタ・フィールドR804とを含む。
現在のトランザクション・ネスト化深さは、汎用レジスタRのビット48−63に配置される。レジスタのビット0−31は変更されないままであり、レジスタのビット32−47は0に設定される。
更に別の実施形態において、最大トランザクション・ネスト化深さもまた、ビット16−31内といった、汎用レジスタR内に配置される。
【0102】
トランザクション実行プログラム割り込みフィルタ処理オーバーライドPIFO):制御レジスタ0のビット9は、トランザクション実行プログラム割り込みフィルタ処理オーバーライドである。このビットは、制御プログラムが、TRANSACTION BEGIN命令により指定又は暗黙指定された有効なプログラム割り込みフィルタ処理制御に関係なく、CPUがトランザクション実行モードにある間に発生するあらゆるプログラム例外条件が割り込みをもたらすのを保証することができる機構を提供する。
【0103】
制御レジスタ2のビット:一実施形態において、割り当ては以下の通りである。:
【0104】
トランザクション診断範囲(TDS):次のように、制御レジスタ2のビット61は、レジスタのビット62−63におけるトランザクション診断制御(TDC)の適用性を制御する。:
TDS
【表1】
【0105】
トランザクション診断制御(TDC):制御レジスタのビット62−63は、2ビットの符号なし整数であり、これを用いて、診断目的のために、トランザクションをランダムにアボートすることができる。一実施形態において、TDCの符号化は、以下の通りである。:
TDC
【表2】
【0106】
0でないTDCに起因してトランザクションがアボートしたとき、以下のいずれかを行うことができる。
*アボート・コードは、コード7−11、13−16又は255のいずれかに設定され、コードの値はCPUによりランダムに選択され、条件コードはアボート・コードに対応して設定される。アボート・コードを以下にさらに説明する。
*制約なしトランザクションの場合、条件コードは1に設定される。この場合、アボート・コードは適用可能でない。
【0107】
TDC値1が実装されるかどうかはモデル依存である。実装されない場合、1の値は、あたかも2が指定されたかのように機能する。
制約付きトランザクションの場合、1のTDC値は、あたかも2のTDC値が指定されたかのように扱われる。
3のTDC値が指定された場合、結果は予測不能である。
【0108】
トランザクション診断ブロック・アドレス(TDBA)
命令のBフィールドが0でないとき、最外TRANSACTION BEGIN(TBEGIN)命令の第1のオペランド・アドレスから、有効なトランザクション診断ブロック・アドレス(TDBA)が設定される。CPUが一次空間又はアクセス・レジスタ・モードにあるとき、TDBAは、一次アドレス空間内の記憶位置を指定する。CPUが二次空間又はホーム空間モードにあるとき、TDBAは、それぞれ、二次アドレス空間又はホーム・アドレス空間内の記憶位置を指定する。DAT(動的アドレス変換)がオフのとき、TDBAは、実ストレージ内の記憶位置を指定する。
【0109】
トランザクションが後でアボートされる場合、TBEGIN指定TDBと呼ばれるトランザクション診断ブロックを見つけるために、CPUによりTDBAが用いられる。TDBAの右端の3つのビットは0であり、TBEGIN指定TDBがダブルワード境界上にあることを意味する。
【0110】
最外TRANSACTION BEGIN(TBEGIN)命令のBフィールドが0のとき、トランザクション診断ブロック・アドレスは無効であり、トランザクションが後でアボートされる場合、TBEGIN指定TDBは格納されない。
【0111】
トランザクション・アボートPSW(TAPSW)
TRANSACTION BEGIN(TBEGIN)命令の実行中、ネスト化深さが最初に0であるとき、トランザクション・アボートPSWは現PSWの内容に設定され、トランザクション・アボートPSWの命令アドレスは、次の順次命令を指定する(即ち、最外TBEGINに続く命令)。TRANSACTION BEGIN constrained(TBEGINC)命令の実行中、ネスト化深さが最初に0であるとき、トランザクション・アボートPSWは、トランザクション・アボートPSWの命令アドレスが(TBEGINCに続く次の順次命令ではなく)TBEGINCを指定することを除いて、現PSWの内容に設定される。
【0112】
トランザクションがアボートされると、トランザクション・アボートPSWにおける条件コードが、アボート条件の重大度を示すコードに置き換えられる。その後、割り込みをもたらさない原因に起因してトランザクションがアボートされた場合、PSWは、トランザクション・アボートPSWからロードされ、割り込みをもたらす理由に起因してトランザクションがアボートされた場合、トランザクション・アボートPSWは、割り込み旧PSWとして格納される。
トランザクション・アボートPSWは、いずれの内部TRANSACTION BEGIN命令の実行中にも変更されない。
【0113】
トランザクション・ネスト化深さ(TND)
トランザクション・ネスト化深さは、例えば、TRANSACTION BEGIN命令が条件コード0で完了するたびにインクリメントし、且つ、TRANSACTION END命令が完了するたびにデクリメントする、16ビットの符号なし値である。トランザクション・ネスト化深さは、トランザクションがアボートされたとき、又はCPUのリセットにより、0に設定される。
【0114】
一実施形態において、15の最大TNDが実装される。
1つの実装において、CPUが制約付きトランザクション実行モードにあるとき、トランザクション・ネスト化深さは1である。さらに、最大TNDは4ビットの値として表すことができるが、TNDは、トランザクション診断ブロックにおける検査を容易にするために、16ビットの値となるように定められる。
【0115】
トランザクション診断ブロック(TDB)
トランザクションがアボートされた場合、種々の状態情報を、以下のようなトランザクション診断ブロック(TDB)内に保存することができる。
1.TBEGIN指定TDB:制約なしトランザクションについて、最外TBEGIN命令のBフィールドが0でないとき、命令の第1のオペランド・アドレスは、TBEGIN指定TDBを指定する。これは、アプリケーションのアボート・ハンドラにより検査することができるアプリケーション・プログラムにより指定される記憶位置である。
2.プログラム割り込み(PI)TDB:制約なしトランザクションが、非フィルタ処理(unfiltered)プログラム例外条件に起因してアボートされた場合、又は制約付きトランザクションがいずれかのプログラム例外条件に起因してアボートされた場合(即ち、プログラム割り込みをもたらすいずれかの条件が認識される)、PI−TDBは、プリフィックス領域内の記憶位置に格納される。これは、オペレーティング・システムが提供できるあらゆる診断報告において、オペレーティング・システムが検査又はログアウトするのに利用可能である。
3.インターセプトTDB:トランザクションが、インターセプトをもたらす(即ち、条件により解釈実行が終了し、制御がホスト・プログラムに戻る)いずれかのプログラム例外条件に起因してアボートされた場合、TDBは、ゲスト・オペレーティング・システムについての状態記述ブロックにおいて指定された記憶位置に格納される。
【0116】
一実施形態において、TBEGIN指定TDBは、TDBアドレスが有効であるとき(即ち、最外TBEGIN命令のBフィールドが0でないとき)にのみ格納される。
非フィルタ処理プログラム例外条件に起因するアボートの場合、PI−TDB又はインターセプトTDBのいずれか1つだけが格納される。従って、1つのアボートに対して、0、1又は2つのTDBが格納され得る。
【0117】
TDBの各々の一例に関するさらなる詳細を以下に説明する。:
TBEGIN指定TDB:有効なトランザクション診断ブロック・アドレスにより指定された256バイトの記憶位置である。トランザクション診断ブロック・アドレスが有効であるとき、TBEGIN指定TDBは、トランザクション・アボート上に格納される。TBEGIN指定TDBは、最外TRANSACTION BEGIN命令の実行時に有効である全てのストレージ保護機構の影響下にある。TBEGIN指定TDBの任意の部分についてのPER(プログラム・イベント記録)ストレージ変更イベントは、トランザクション・アボート処理中ではなく、最外TBEGINの実行中に検出される。
【0118】
PERの1つの目的は、プログラムのデバッグを支援することである。これにより、プログラムに、例示するような以下のタイプのイベントをアラートすることが可能になる。
*分岐命令の実行の成功:分岐ターゲット位置が指定したストレージ領域(記憶領域)内にあるときにのみイベントが生じるようにするための選択肢が提供される。
*指定したストレージ領域からの命令のフェッチ。
*指定したストレージ領域の内容の変更。ストレージ領域が指定したアドレス空間内にあるときにのみイベントを生じるようにするための選択肢が提供される。
*STORE USING REAL ADDRESS命令の実行。
*TRANSACTION END命令の実行。
【0119】
プログラムは、上記のイベント・タイプの1つ又は複数が認識されることを選択的に指定することができるが、STORE USING REAL ADDRESSに関するイベントは、ストレージ変更イベントと一緒にしか指定することができない。PERイベントに関する情報は、プログラム割り込みを用いてプログラムに与えられ、割り込みの原因は、割り込みコードで識別される。
【0120】
トランザクション診断ブロック・アドレスが有効でないとき、TBEGIN指定TDBは格納されない。
【0121】
プログラム割り込みTDB:実記憶位置6,144−6,399(1800−18FF hex)である。プログラム割り込みに起因してトランザクションがアボートされるとき、プログラム割り込みTDBが格納される。他の原因のためにトランザクションがアボートされるとき、プログラム割り込みTDBの内容は予測不能である。
【0122】
プログラム割り込みTDBは、いずれの保護機構の影響下にもない。プログラム割り込み中にプログラム割り込みTDBが格納されたとき、プログラム割り込みTDBについて、PERストレージ変更イベントは検出されない。
【0123】
インターセプトTDB:状態記述の記憶位置488−495により指定される256バイトのホストの実記憶位置である。インターセプトTDBは、アボートされたトランザクションが、ゲスト・プログラム割り込みインターセプト(つまり、インターセプト・コード8)をもたらすときに格納される。他の原因のためにトランザクションがアボートされるとき、インターセプトTDBの内容は予測不能である。インターセプトTDBは、いずれの保護機構の影響下にもない。
【0124】
図11に示すように、一実施形態において、トランザクション診断ブロック900のフィールドは、次のとおりである。
【0125】
形式902:バイト0は、次のように、妥当性及び形式の表示を含む。:
【表3】
【0126】
形式フィールドが0であるTDBは、ヌルTDBと呼ばれる。
【0127】
フラグ904:バイト1は、次のような種々の表示を含む。:
競合トークン妥当性(CTV):トランザクションが、フェッチ又はストア競合のためにアボートされるとき(つまり、それぞれ、アボート・コード9又は10)、バイト1のビット0は、競合トークン妥当性表示である。CTV表示が1のとき、TDBのバイト16−23における競合トークン910は、競合が検出された論理アドレスを含む。CTV表示が0であるとき、TDBのバイト16−23は予測不能である。
トランザクションが、フェッチ又はストア競合以外のいずれかの理由のためにアボートされたとき、バイト1のビット0は、0として格納される。
制約付きトランザクション表示(CTI):CPUが制約付きトランザクション実行モードにあるとき、バイト1のビット1は1に設定される。CPUが制約なしトランザクション実行モードにあるとき、バイト1のビット1は0に設定される。
予約:バイト1のビット2−7は予約され、0として格納される。
【0128】
トランザクション・ネスト化深さ(TND)906:トランザクションがアボートされたとき、バイト6−7はトランザクション・ネスト化深さを含む。
【0129】
トランザクション・アボート・コード(TAC)908:バイト8−15は、64ビットの符号なしトランザクション・アボート・コードを含む。各々のコード・ポイントは、トランザクションがアボートされる理由を示す。
【0130】
トランザクションがプログラム割り込み以外の条件のためにアボートされたとき、トランザクション・アボート・コードがプログラム割り込みTDB内に格納されるかどうかは、モデル依存である。
【0131】
競合トークン910:フェッチ又はストア競合(つまり、それぞれ、アボート・コード9及び10)に起因してアボートされたトランザクションの場合、バイト16−23は、競合が検出されたストレージ位置の論理アドレスを含む。競合トークンは、CTVビット、即ちバイト1のビット0が1であるときに意味をもつ。
CTVビットが0のとき、バイト16−23は予測不能である。
【0132】
CPUによる投機的実行のため、競合トークンは、トランザクションの概念的実行シーケンスより必ずしもアクセスされないストレージ位置を指定することができる。
【0133】
アボートされたトランザクション命令アドレス(ATIA)912:バイト24−31は、アボートが検出されたときに実行していた命令を識別する命令アドレスを含む。トランザクションがアボート・コード2、5、6、11、13若しくは256、又はこれより大きいアボート・コードに起因してアボートされたとき、或いはトランザクションがアボート・コード4又は13に起因してアボートされ、且つ、プログラム例外条件が無効化しているとき、ATIAは、実行されていた命令を直接指し示す。アボート・コード4又は12に起因してトランザクションがアボートされ、且つ、プログラム例外条件が無効化していないとき、ATIAは、実行されていた命令を超えて指し示す。
【0134】
トランザクションがアボート・コード7−10、14−16又は255に起因してアボートされたとき、ATIAは必ずしもアボートを引き起こすまさにその命令を示さないが、トランザクション内のそれより前又は後の命令を指し示し得る。
【0135】
トランザクションが、execute型命令のターゲットである命令に起因してアボートされた場合、ATIAは、execute型命令を識別し、上述のようなアボート・コードに応じて、命令を指し示すか、又は命令を超えて指し示す。ATIAは、execute型命令のターゲットを示さない。
【0136】
トランザクションがアボートされると、ATIAは、アドレッシング・モードの影響下にある。24ビット・アドレッシング・モードにおいて、フィールドのビット0−40は0を含む。31ビット・アドレッシング・モードにおいて、フィールドのビット0−32は0を含む。
【0137】
プログラム割り込み以外の条件に起因してトランザクションがアボートされたとき、アボートされたトランザクション命令アドレスがプログラム割り込みTDBに格納されるかどうかは、モデル依存である。
【0138】
アボート・コード4又は12に起因してトランザクションがアボートされ、且つ、プログラム例外条件が無効化していないとき、ATIAは、アボートを引き起こす命令を指し示さない。ATIAから、割り込み長さコード(ILC)により示されるハーフワードの数を減算することにより、抑止又は終了している条件において、又は完了している非PERイベントに対して、アボートを引き起こす命令を識別することができる。PERイベントに起因してトランザクションがアボートされ、且つ、他のプログラム例外条件が存在しないとき、ATIAは予測不能である。
【0139】
トランザクション診断ブロック・アドレスが有効であるとき、TBEGIN指定TDBのバイト36−39におけるプログラム割り込み識別(PIID)において、ILCを検査することができる。フィルタ処理が適用されないときは、実記憶装置においてPIIDの位置140−143においてILCを検査することができる。
【0140】
例外アクセス識別(EAID)914:特定のフィルタ処理済みプログラム例外条件に起因してアボートされたトランザクションについては、TBEGIN指定TDBのバイト32は、例外アクセス識別を含む。上記に引用により組み入れられた非特許文献1に述べられるように、z/Architectureの一例においては、EAIDの形式及びこれが格納される事例は、例外条件が割り込みをもたらすときの実記憶位置160に記述されるものと同じである。
【0141】
プログラム割り込みをもたらすあらゆる例外条件を含む、他の理由のためにアボートされたトランザクションの場合、バイト32は予測不能である。プログラム割り込みTDBにおいて、バイト32は予測不能である。
【0142】
このフィールドは、トランザクション診断ブロック・アドレスにより指定されるTDB内にのみ格納され、他の場合には、フィールドは予約される。EAIDは、制御されたアクセス・リスト又はDAT保護、ASCEタイプ、ページ変換、領域第1変換、領域第2変換、領域第3変換及びセグメント変換プログラムの例外条件に対してのみ格納される。
【0143】
データ例外コード(DXC)916:フィルタ処理済みデータ例外プログラム例外条件に起因してアボートされたトランザクションについては、TBEGIN指定TDBのバイト33は、データ例外コードを含む。上記に引用により組み入れられる非特許文献1に述べられるように、z/Architectureの一例において、DXCの形式及びこれが格納される事例は、例外条件をもたらすときの実記憶位置147に記述されるものと同じである。一例において、記憶位置147はDXCを含む。
【0144】
プログラム割り込みをもたらすあらゆる例外条件を含む他の理由のためにアボートされたトランザクションに対して、バイト33は予測不能である。プログラム割り込みTDBにおいて、バイト33は予測不能である。
【0145】
このフィールドは、トランザクション診断ブロック・アドレスにより指定されるTDB内にのみ格納され、他の場合には、フィールドは予約される。DXCは、データ・プログラム例外条件に対してのみ格納される。
【0146】
プログラム割り込み識別(PIID)918:フィルタ処理済みプログラム例外条件に起因してアボートされたトランザクションに対して、TBEGIN指定TDBのバイト36−39は、プログラム割り込み識別を含む。z/Architectureの一例において、PIIDの形式は、PIIDのビット13−14における命令長コードが、例外条件が検出された命令に対して個別のものであることを除いて、(上記に引用により組み入れられる非特許文献1に述べられるように)条件が割り込みをもたらすときの実記憶位置140−143に記述されるものと同じである。
【0147】
プログラム割り込みをもたらす例外条件を含む他の理由によりアボートされたトランザクションについては、バイト36−39は予測不能である。プログラム割り込みTDBにおいて、バイト36−39は予測不能である。
【0148】
このフィールドは、トランザクション診断ブロック・アドレスにより指定されたTDB内にのみ格納され、他の場合には、フィールドは予約される。プログラム割り込み識別は、プログラム例外条件に対してのみ格納される。
【0149】
変換例外識別(TEID)920:以下のフィルタ処理済みプログラム例外条件のいずれかに起因してアボートされたトランザクションに対して、TBEGIN指定TDBのバイト40−47は、変換例外識別を含む。
*制御されたアクセス・リスト又はDAT保護
*ASCEタイプ
*ページ変換
*領域第1変換
*領域第2変換
*領域第3変換
*セグメント変換例外
【0150】
上記に引用により組み入れられる非特許文献1に述べられるように、z/Architectureの一例において、条件が割り込みをもたらすとき、TEIDの形式は、実記憶位置168−175に記述されるものと同じである。
【0151】
プログラム割り込みをもたらす例外条件を含む、他の理由によりアボートされたトランザクションに対して、バイト40−47は予測不能である。プログラム割り込みTDBにおいて、バイト40−47は予測不能である。
【0152】
このフィールドは、トランザクション診断ブロック・アドレスにより指定されたTDB内にのみ格納され、他の場合には、フィールドは予約される。
【0153】
ブレーキング・イベント・アドレス922:フィルタ処理済みプログラム例外条件に起因してアボートされたトランザクションに対して、TBEGIN指定TDBのバイト48−55は、ブレーキング・イベント・アドレスを含む。上記に引用により組み入れられる非特許文献1に述べられるように、z/Architectureの一例において、ブレーキング・イベント・アドレスの形式は、例外条件が割り込みをもたらすときの実記憶位置272−279に記述されるものと同じである。
【0154】
プログラム割り込みをもたらす例外条件を含む、他の理由によりアボートされたトランザクションに対して、バイト48−55は予測不能である。プログラム割り込みTDBにおいて、バイト48−55は予測不能である。
【0155】
このフィールドは、トランザクション診断ブロック・アドレスにより指定されたTDB内にのみ格納され、他の場合には、フィールドは予約される。
【0156】
以下にブレーキング・イベントに関連するさらなる詳細を説明する。
z/Architectureの一実施形態において、PER−3ファシリティがインストールされると、このPER−3ファシリティは、プログラムに、CPUの順次実行においてブレークを生じさせる最後の命令のアドレスを与える。ブレーキング・イベント・アドレスの記録を、ワイルド分岐検出のためのデバッグ支援として用いることができる。このファシリティは、例えば、ブレーキング・イベント・アドレス・レジスタと呼ばれる、CPUにおける64ビット・レジスタを与える。TRANSACTION ABORT以外の命令が、順次命令の実行においてブレークを生じさせる(つまり、PSW内の命令アドレスが、命令長によりインクリメントされるのではなく、置き換えられる)たびに、その命令のアドレスが、ブレーキング・イベント・アドレス・レジスタ内に配置される。PERが表示されるにせよ又はされないにせよ、プログラム割り込みが発生するたびに、ブレーキング・イベント・アドレス・レジスタの現在の内容が実ストレージ位置272−279に配置される。
【0157】
ブレーキング・イベントを引き起こす命令が、execute型命令(EXECUTE又はEXECUTE RELATIVE LONG)のターゲットである場合、そのexecute型命令をフェッチするために用いられた命令アドレスが、ブレーキング・イベント・アドレス・レジスタ内に配置される。
【0158】
z/Architectureの一実施形態において、次の命令:即ち、BRANCH AND LINK(BAL、BALR);BRANCH AND SAVE(BAS、BASR);BRANCH AND SAVE AND SET MODE(BASSM);BRANCH AND SET MODE(BSM);BRANCH AND STACK(BAKR);BRANCH ON CONDITION(BC、BCR);BRANCH ON COUNT(BCT、BCTR、BCTG、BCTGR);BRANCH ON INDEX HIGH(BXH、BXHG);BRANCH ON INDEX LOW OR EQUAL(BXLE、BXLEG);BRANCH RELATIVE ON CONDITION(BRC);BRANCH RELATIVE ON CONDITION LONG(BRCL);BRANCH RELATIVE ON COUNT(BRCT、BRCTG);BRANCH RELATIVE ON INDEX HIGH(BRXH、BRXHG);BRANCH RELATIVE ON INDEX LOW OR EQUAL(BRXLE、BRXLG);COMPARE AND BRANCH(CRB、CGRB);COMPARE AND BRANCH RELATIVE(CRJ、CGRJ);COMPARE IMMEDIATE AND BRANCH(CIB、CGIB);COMPARE IMMEDIATE AND BRANCH RELATIVE(CIJ、CGIJ);COMPARE LOGICAL AND BRANCH(CLRB、CLGRB);COMPARE LOGICAL AND BRANCH RELATIVE(CLRJ、CLGRJ);COMPARE LOGICAL IMMEDIATE AND BRANCH(CLIB、CLGIB);及びCOMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE(CLIJ、CLGIJ)の1つが分岐をもたらすたびに、ブレーキング・イベントが発生すると考えられる。
【0159】
次の命令:即ち、BRANCH AND SET AUTHORITY(BSA);BRANCH IN SUBSPACE GROUP(BSG);BRANCH RELATIVE AND SAVE(BRAS);BRANCH RELATIVE AND SAVE LONG(BRASL);LOAD PSW(LPSW);LOAD PSW EXTENDED(LPSWE);PROGRAM CALL(PC);PROGRAM RETURN(PR);PROGRAM TRANSFER(PT);PROGRAM TRANSFER WITH INSTANCE(PTI);RESUME PROGRAM(RP);及びTRAP(TRAP2、TRAP4)の1つが完了するたびに、ブレーキング・イベントが発生するとも考えられる。
【0160】
ブレーキング・イベントは、(暗黙的に、又はTRANSACTION ABORT命令の結果として)トランザクションがアボートされた結果として生じるのではないと考えられる。
【0161】
モデル依存診断情報924:バイト112−127は、モデル依存診断情報を含む。
【0162】
12(フィルタ処理済みプログラム割り込み)を除く全てのアボート・コードに対して、モデル依存診断情報が、格納されるTDBの各々に保存される。
【0163】
一実施形態において、モデル依存診断情報は次のものを含む。
*バイト112−119は、トランザクション実行分岐表示TXBI)と呼ばれる64ビットのベクトルを含む。ベクトルの最初の63ビットの各々は、次のように、CPUがトランザクション実行モードにある間の分岐命令の実行の結果を示す。
【表4】
【0164】
ビット0は、最初のこうした分岐命令の結果を表し、ビット1は、第2のこうした命令の結果を表し、以下同様である。
【0165】
CPUがトランザクション実行モードにある間、63より少ない分岐命令が実行された場合、分岐命令に対応しない最右端のビットが0に設定される(ビット63を含む)。63より多い分岐命令が実行されると、TXBIのビット63は1に設定される。
【0166】
TXBI内のビットは、以下のものを除いて、上記に列挙した、ブレーキング・イベントを生じさせることができる命令によって設定される。:即ち、
−いずれの限定された命令も、TXBI内にビットを設定させない
−例えばz/Architectureの命令において、BRANCH ON CONDITION、BRANCH RELATIVE ON CONDITION、又はBRANCH RELATIVE ON CONDITION LONG命令のMフィールドが0であるとき、又は、以下の命令のRフィールドが0のとき、命令の実行により、TXBI内にビットが設定されるかどうかは、モデル依存である。
*BRANCH AND LINK(BALR);BRANCH AND SAVE(BASR);BRANCH AND SAVE AND SET MODE(BASSM);BRANCH AND SET MODE(BSM);BRANCH ON CONDITION(BCR);及びBRANCH ON COUNT(BCTR、BCTGR)
【0167】
*ホスト・アクセス例外により生じたアボート条件について、バイト127のビット位置0が1に設定される。他の全てのアボート条件について、バイト127のビット位置0が0に設定される。
【0168】
*ロード/ストア・ユニット(LSU)により検出されたアボート条件に対して、バイト127の右端の5ビットは、原因の表示を含む。LSUにより検出されなかったアボート条件に対して、バイト127が予約される。
【0169】
汎用レジスタ930:バイト128−255は、トランザクションがアボートされたときの汎用レジスタ0−15の内容を含む。レジスタは、昇順に格納され、バイト128−135の汎用レジスタ0から始まり、次にバイト136−143の汎用レジスタ1、以下同様である。
【0170】
予約:他の全てのフィールドは予約される。特に断りのない限り、予約されるフィールドの内容は予測不能である。
【0171】
他のCPU及びI/Oサブシステムにより観察されるとき、トランザクション・アボート中のTDBのストアは、あらゆる非トランザクション・ストア後に行われる多重アクセス参照である。
【0172】
トランザクションが実行する即値構成の範囲外の原因のために、トランザクションがアボートされることがある。例えば、ハイパーバイザ(LPAR又はz/VMなどの)により認識された一時的イベントにより、トランザクションがアボートされることがある。
【0173】
トランザクション診断ブロック内に与えられる情報は、診断目的であることを意図しており、且つ、実質的に正しい。しかしながら、即値構成の範囲外のイベントによりアボートが発生することがあるため、アボート・コード又はプログラム割り込み識別のような情報が構成内の条件を正確に反映しないことがあるので、プログラム・アクションを決定するのに、この情報を使用すべきではない。
【0174】
TDB内に保存された診断情報に加えて、いずれかのデータ例外プログラム例外条件に起因してトランザクションがアボートされ、且つ、AFPレジスタ制御、即ち制御レジスタ0のビット45、並びに有効な浮動小数点演算許可(F)制御の両方が1であるとき、フィルタ処理がプログラム例外条件に適用されるかどうかに関係なく、データ例外コード(DXC)が、浮動小数点制御レジスタ(FPCR)のバイト2に配置される。トランザクションがアボートされ、且つ、AFPレジスタ制御又は有効な浮動小数点演算許可制御のいずれか又は両方が0であるとき、DXCは、FPCRに配置されない。
【0175】
一実施形態においては、本明細書に示されるように、トランザクション実行ファシリティがインストールされたとき、次の一般命令が与えられる。
*EXTRACT TRANSACTION NESTING DEPTH
*NONTRANSACTIONAL STORE
*TRANSACTION ABORT
*TRANSACTION BEGIN
*TRANSACTION END
【0176】
CPUがトランザクション実行モードにあるとき、特定の命令を実行しようとする試みが制限され、トランザクションがアボートされる。
【0177】
制約付きトランザクション実行モードで発行されたとき、特定の命令を実行しようとする試みが、トランザクション制約プログラム割り込みをもたらすこともあり、又はあたかもトランザクションが制約されていないかのように実行を進行させ得る。
【0178】
z/Architectureの一例において、制限された命令は、例として、次の非特権命令:即ち、COMPARE AND SWAP AND STORE;MODIFY RUNTIME INSTRUMENTATION CONTROLS;PERFORM LOCKED OPERATION;Mフィールドのコードが6又は7であるときのPREFETCH DATA(RELATIVE LONG);Mフィールドが0であり、Rフィールドのコードが6又は7であるときのSTORE CHARACTERS UNDER MASK HIGH;STORE FACILITY LIST EXTENDED;STORE RUNTIME INSTRUMENTATION CONTROLS;SUPERVISOR CALL;及びTEST RUNTIME INSTRUMENTATION CONTROLSを含む。
【0179】
上記のリストにおいて、COMPARE AND SWAP AND STORE及びPERFORM LOCKED OPERATIONは、TXモードにおいて基本命令を用いてより効果的に実施できる複合命令である。PREFETCH DATA及びPREFETCH DATA RELATIVE LONGについての事例は、6及び7のコードがキャッシュ・ラインを解放するときに限定され、トランザクションの完了前に潜在的にデータのコミットを必要とする。SUPERVISOR CALLは、これが割り込みを発生させる(トランザクションをアボートさせる)ときに制限される。
【0180】
以下に列挙される条件下で、次の命令が制限される。:
*命令のRフィールドが0でなく、且つ、分岐トレースがイネーブルにされたときのBRANCH AND LINK(BALR)、BRANCH AND SAVE (BASR)及びBRANCH AND SAVE AND SET MODE
*命令のRフィールドが0でなく、且つ、モード・トレースがイネーブルにされたときのBRANCH AND SAVE AND SET MODE及びBRANCH AND SET MODE、モード・トレースがイネーブルにされたときのSET ADDRESSING MODE
*監視イベント条件が認識されたときのMONITOR CALL
【0181】
上記のリストは、トレース・エントリを形成できる命令を含む。これらの命令がトランザクション的に実行することを許可され、且つ、トレース・エントリを形成し、その後トランザクションがアボートされた場合、制御レジスタ12のトレース・テーブル・ポインタが進められるが、トレース・テーブルへのストアは廃棄される。このことは、トレース・テーブル内に一貫性のないギャップを残す。従って、トレース・エントリを形成する場合に、命令は制限される。
【0182】
CPUがトランザクション実行モードにあるとき、次の命令:即ち、CIPHER MESSAGE;CIPHER MESSAGE WITH CFB;CIPHER MESSAGE WITH CHAINING;CIPHER MESSAGE WITH COUNTER;CIPHER MESSAGE WITH OFB;COMPRESSION CALL;COMPUTE INTERMEDIATE MESSAGE DIGEST;COMPUTE LAST MESSAGE DIGEST;COMPUTE MESSAGE AUTHENTICATION CODE;CONVERT UNICODE−16 TO UNICODE−32;CONVERT UNICODE−16 TO UNICODE−8;CONVERT UNICODE−32 TO UNICODE−16;CONVERT UNICODE−32 TO UNICODE−8;CONVERT UNICODE−8 TO UNICODE−16;CONVERT UNICODE−8 TO UNICODE−32;PERFORM CRYPTOGRAPHIC COMPUTATION;RUNTIME INSTRUMENTATION OFF;及びRUNTIME INSTRUMENTATION ONが制限されるかどうかは、モデル依存である。
【0183】
上記命令の各々は、ハードウェア・コプロセッサにより現在実施されているか、又は過去のマシンで実施されたかのいずれかであり、従って制限されると考えられる。
【0184】
有効なAR変更許可(A)制御が0のとき、次の命令:即ち、COPY ACCESS;LOAD ACCESS MULTIPLE;LOAD ADDRESS EXTENDED;及びSET ACCESSが制限される。
【0185】
上記の命令の各々により、アクセス・レジスタの内容が変更される。TRANSACTION BEGIN命令のA制御が0である場合、プログラムは、アクセス・レジスタの変更が許可されないことを明示的に表示する。
【0186】
有効な浮動小数点演算許可(F)制御が0であるとき、浮動小数点命令が制限される。
【0187】
特定の環境下で、次の命令:即ち、EXTRACT CPU TIME;EXTRACT PSW;STORE CLOCK;STORE CLOCK EXTENDED;及びSTORE CLOCK FASTを制限することができる。
【0188】
上記の命令の各々は、解釈実行状態記述におけるインターセプト制御を受ける。ハイパーバザーが、これら命令についてのインターセプト制御を設定した場合、これら命令の実行は、ハイパーバイザの実装のために延長され、従って、インターセプトが発生する場合に制限されると考えられる。
【0189】
制限された命令を実行しようとする試みにより、制約なしトランザクションがアボートされると、トランザクション診断ブロック内のトランザクション・アボート・コードは11(制限された命令)に設定され、条件コードは3に設定されるが、次の場合を除く。即ち、制約なしトランザクションが、他の場合には特権操作例外をもたらす命令を実行しようと試みることに起因してアボートされたとき、アボート・コードが11(制限された命令)に設定されるか、又は4(特権操作プログラム割り込みの認識の結果もたらされ非フィルタ処理プログラム割り込み)に設定されるかは、予測不能である。制約なしトランザクションが、Mフィールド内のコードが6又は7のときのPREFETCH DATA(RELATIVE LONG)又はMフィールドが0であり、且つ、Rフィールド内のコードが6又は7のときのSTORE CHARACTERS UNDER MASK HIGHを実行しようとする試みに起因してアボートされたとき、アボート・コードが11(制限された命令)に設定されるか又は16(キャッシュ・アザー、その他をキャッシュに入れる)に設定されるかは、予測不能である。制約なしトランザクションが、MONITOR CALLを実行しようとする試みに起因してアボートされ、且つ、監視イベント条件及び指定例外条件の両方が存在するとき、アボート・コードが11若しくは4に、又はプログラム割り込みがフィルタ処理されている場合に12に設定されるかどうかは予測不能である。
【0190】
制約付きトランザクションにおいて、付加的な命令を制限することができる。これらの命令は、制約なしトランザクションにおいて制限されるように現在定義されていないが、将来のプロセッサ上での制約なしトランザクションにおける特定の環境下で制限され得る。
【0191】
特定の制限された命令は、将来のプロセッサ上ではトランザクション実行モードにおいて許容され得る。従って、プログラムは、制限された命令を実行しようとする試みに起因してアボートされるトランザクションに依存すべきではない。TRANSACTION ABORT命令は、安定的にトランザクションをアボートさせるために使用すべきである。
【0192】
制約なしトランザクションにおいて、プログラムは、制限された命令に起因してアボートするトランザクションを収容するための、代替的な非トランザクション・コード経路を提供しなければならない。
【0193】
動作において、トランザクション・ネスト化深さが0であるとき、条件コード0をもたらすTRANSACTION BEGIN(TBEGIN)命令の実行により、CPUが制約なしトランザクション実行モードに入る。トランザクション・ネスト化深さが0であるとき、条件コード0をもたらすTRANSACTION BEGIN constrained(TBEGINC)命令の実行により、CPUが制約付きトランザクション実行モードに入る。
【0194】
特に明示的に断りがある場合を除いて、非トランザクション実行に適用される全ての原則は、トランザクション実行にも適用される。以下はCPUがトランザクション実行モードにある間の処理の付加的な特徴である。
【0195】
CPUが制約なしトランザクション実行モードにあるとき、条件コード0をもたらすTRANSACTION BEGIN命令の実行により、CPUは制約なしトランザクション実行モードのままである。
【0196】
CPUにより観察されるとき、トランザクション実行モードで行われたフェッチ及びストアは、トランザクション実行モードでないときに行われたフェッチ及びストアと変わりがない。他のCPU及びI/Oサブシステムにより観察されるとき、CPUがトランザクション実行モードにある間に行われた全てのストレージ・オペランド・アクセスは、単一のブロック同時アクセスであるように見える。つまり、他のCPU及びI/O(例えば、チャネル)プログラムにより観察されるとき、ハーフワード、ワード、ダブルワード又はクワッドワード内の全てのバイトへのアクセスは、ブロック・コンカレントに見えるように指定される。ハーフワード、ワード、ダブルワード又はクワッドワードは、このセクションではブロックと呼ばれる。フェッチ・タイプ参照が、ブロック内でコンカレントに見えるように指定されると、ブロック内に含まれるバイトがフェッチされている間、別のCPU又はI/Oプログラムによるそのブロックへのストア・アクセスは許可されない。ストア・タイプ参照が、ブロック内でコンカレントに見えるように指定されると、ブロック内に含まれるバイトがストアされる間、別のCPU又はI/Oプログラムによるブロックへのアクセス、即ちフェッチ又はストアは許可されない。
【0197】
命令及びDATのためのストレージ・アクセス、並びにART(アクセス・レジスタ・テーブル)テーブル・フェッチは、非トランザクション原則に従う。
【0198】
CPUは、通常、トランザクション・ネスト化深さを0に移行させる、この場合はトランザクションが完了するTRANSACTION END命令により、トランザクション実行モードを終了する。
【0199】
CPUが、TRANSACTION END命令の完了によりトランザクション実行モードを終了すると、トランザクション実行モードにある間に行われた全てのストアがコミットされる。つまり、他のCPU又はI/Oサブシステムにより観察されるとき、ストアは、単一のブロック・コンカレント操作として行われるように見える。
【0200】
トランザクションは、種々の原因のために暗黙的にアボートされ得る、又はTRANSACTION ABORT命令により明示的にアボートされ得る。トランザクション・アボートの例示的な可能な原因、対応するアボート・コード、トランザクション・アボートPSWに配置される条件コードを、以下に説明する。
【0201】
外部割り込み:トランザクション・アボート・コードは2に設定され、且つ、トランザクション・アボートPSWの条件コードは2に設定される。トランザクション・アボートPSWは、外部割り込み処理の一部として外部旧PSWとして格納される。
【0202】
プログラム割り込み(非フィルタ処理):割り込みをもたらすプログラム例外条件(つまり、非フィルタ処理条件)により、トランザクションがコード4でアボートされる。トランザクション・アボートPSWの条件コードは、そのプログラム割り込みコード特有に設定される。トランザクション・アボートPSWは、プログラム割り込み処理の一部としてプログラム旧PSWとして格納される。
【0203】
他の場合には操作例外に起因してアボートされるトランザクションをもたらす命令が、代替的な結果をもたらすことがある。制約なしトランザクションにおいては、トランザクションは、代わりにアボート・コード11(制限された命令)でアボートすることができ、制約付きトランザクションの場合、操作例外の代わりに、トランザクション制約プログラム割り込みが認識され得る。
【0204】
いずれかの他の非フィルタ処理プログラム例外条件と共にPER(プログラム・イベント記録)イベントが認識されると、条件コードは3に設定される。
【0205】
マシン・チェック割り込み:トランザクション・アボート・コードは5に設定され、トランザクション・アボートPSWの条件コードは2に設定される。トランザクション・アボートPSWは、マシン・チェック割り込み処理の一部として、マシン・チェック旧PSWとして格納される。
【0206】
I/O割り込み:トランザクション・アボート・コードは6に設定され、トランザクション・アボートPSWの条件コードは2に設定される。トランザクション・アボートPSWは、I/O割り込み処理の一部としてI/O旧PSWとして格納される。
【0207】
フェッチ・オーバーフロー:トランザクションが、CPUがサポートするより多い記憶位置からフェッチしようと試みたとき、フェッチ・オーバーフロー条件が検出される。トランザクション・アボート・コードは7に設定され、条件コードは2又は3のいずれかに設定される。
【0208】
ストア・オーバーフロー:トランザクションが、CPUがサポートするより多い記憶位置にストアしようと試みたとき、ストア・オーバーフロー条件が検出される。トランザクション・アボート・コードは8に設定され、条件コードは2又は3に設定される。
【0209】
フェッチ又はストア・オーバーフローに応じて条件コードを2又は3とするのを可能にすることにより、CPUが潜在的に再試行可能な状況を示すことが可能になる(例えば、条件コード2は、トランザクションの再実行が生産的であり得ることを示し、条件コード3は、再実行を推奨しない)。
【0210】
フェッチ競合:フェッチ競合条件は、別のCPU又はI/Oサブシステムが、このCPUによってトランザクション的にフェッチされた記憶位置に格納しようと試みるときに検出される。トランザクション・アボート・コードは9に設定され、条件コードは2に設定される。
【0211】
ストア競合:ストア競合条件は、別のCPU又はI/Oサブシステムが、このCPUによりトランザクション実行中に格納された記憶位置にアクセスしようと試みるときに検出される。トランザクション・アボート・コードは10に設定され、条件コードは2に設定される。
【0212】
制限された命令:CPUがトランザクション実行モードにあるとき、制限された命令の実行を試みることにより、トランザクションがアボートされる。トランザクション・アボート・コードは11に設定され、条件コードは3に設定される。
【0213】
CPUが制約付きトランザクション実行モードにあるとき、制限された命令を実行しようとする試みは、トランザクション制約プログラム割り込みをもたらすか、又は制限された命令が原因のアボートをもたらすかは予測不能である。トランザクションは、依然としてアボートされるが、アボート・コードはいずれの原因も表示し得る。
【0214】
プログラム例外条件(フィルタ処理済み):割り込みをもたらさないプログラム例外条件(即ち、フィルタ処理済み条件)は、トランザクション・アボート・コード12でトランザクションをアボートさせる。条件コードは、3に設定される。
【0215】
ネスト化深さ超過:ネスト化深さ超過条件は、トランザクション・ネスト化深さが、構成についての最大許容可能値であり、且つ、TRANSACTION BEGIN命令が実行されたときに検出される。トランザクションは、トランザクション・アボート・コード13でアボートされ、条件コードは3に設定される。
【0216】
キャッシュ・フェッチ関連条件:トランザクションによりフェッチされたストレージ位置に関連する条件が、CPUのキャッシュ回路により検出される。トランザクションは、トランザクション・アボート・コード14でアボートされ、条件コードは2又は3のいずれかに設定される。
【0217】
キャッシュ・ストア関連条件:トランザクションにより格納されたストレージ位置に関連する条件は、CPUのキャッシュ回路により検出される。トランザクションは、トランザクション・アボート・コード15でアボートされ、条件コードは2又は3のいずれかに設定される。
【0218】
キャッシュ・アザー条件:キャッシュ・アザー条件は、CPUのキャッシュ回路により検出される。トランザクションは、トランザクション・アボート・コード16でアボートされ、条件コードは2又は3のいずれかに設定される。
【0219】
トランザクションの実行中、CPUが同じ絶対アドレスにマッピングされた異なる論理アドレスを用いて命令又はストレージ・オペランドにアクセスする場合、トランザクションがアボートされるかどうかは、モデル依存である。トランザクションが、同じ絶対アドレスにマッピングされた異なる論理アドレスを用いるアクセスに起因してアボートされた場合、条件に応じて、アボート・コード14、15又は16が設定される。
【0220】
その他の条件:その他の条件とは、トランザクションをアボートさせるCPUにより認識される任意の他の条件である。トランザクション・アボート・コードは255に設定され、且つ、条件コードは2又は3のいずれかに設定される。
【0221】
複数の構成が同じマシン(例えば、論理パーティション又は仮想マシン)内で実行されているとき、トランザクションは、外部マシン・チェック又は異なる構成で行われたI/O割り込みに起因してアボートされ得る。
【0222】
上記に例が与えられたが、対応するアボート・コード及び条件コードでのトランザクション・アボートの他の原因を提供することができる。例えば、原因が再起動割り込みである場合があり、この場合、トランザクション・アボート・コードは1に設定され、トランザクション・アボートPSWの条件コードは2に設定される。トランザクション・アボートPSWは、再起動処理の一部として再起動−旧PSWとして格納される。更に別の例として、原因は、スーパーバイザ呼び出し条件とすることができ、この場合、アボート・コードは3に設定され、トランザクション・アボートPSWの条件コードは3に設定される。他の又は異なる例も可能である。
【0223】
注記:
1.その他の条件は、以下のいずれかからもたらされ得る。
*z/Architectureにおける、COMPARE AND REPLACE DAT TABLE ENTRY、COMPARE AND SWAP AND PURGE、INVALIDATE DAT TABLE ENTRY、INVALIDATE PAGE TABLE ENTRY、NQ制御が0であり、且つ、SK制御が1であるPERFORM FRAME MANAGEMENT FUNCTION、NQ制御が0であり、構成内の別のCPUにより実行され、条件コードが2に設定されるSET STORAGE KEY EXTENDEDのような命令。
*リセット、再起動、又は停止、又は同等のSIGNAL PROCESSOR命令のようなオペレータ機能がCPU上で実行される。
*上記に列挙されないいずれかの他の条件;条件コードは2又は3に設定される。
2.フェッチ及びストア競合が検出された記憶位置は、同一キャッシュ・ライン内のどの場所であってもよい。
3.特定の条件下で、CPUは、類似のアボート条件を区別できないことがある。例えば、フェッチ又はストア・オーバーフローは、それぞれのフェッチ又はストア競合と区別できないことがある。
4.CPUによる複数の命令経路の投機的実行により、こうした条件が概念的シーケンスで行われない場合でも、競合又はオーバーフロー条件に起因して、トランザクションがアボートされる。制約付きトランザクション・モードにある間、CPUは、投機的実行を一時的に禁止し、こうした競合又はオーバーフローを投機的に検出することなく、トランザクションを完了しようと試みることを可能にする。
【0224】
TRANSACTION ABORT命令の実行により、トランザクションがアボートする。第2のオペランド・アドレスから、トランザクション・アボート・コードが設定される。条件コードは、第2のオペランド・アドレスのビット63が、0であるか又は1であるかによって、それぞれ、2又は3のいずれかに設定される。
【0225】
図12は、トランザクション診断ブロックに格納された例示的なアボート・コード及び対応する条件コード(CC)を要約する。図12の説明は、1つの特定の実施を示す。他の実施及び値の符号化も可能である。
【0226】
一実施形態において、及び上述のように、トランザクション・ファシリティは、制約付きトランザクション及び制約なしトランザクションの両方、並びにそれらと関連した処理を提供する。最初に制約付きトランザクションを、次に制約なしトランザクションを説明する。
【0227】
制約付きトランザクションは、フォールバック経路なしに、トランザクション・モードで実行される。これは、コンパクトな機能に有用な処理のモードである。他のCPU又はI/Oサブシステムとの割り込みの反復又は競合(即ち、トランザクションが成功裏に完了することを許容しない条件によりもたらされる)がない場合、制約付きトランザクションは最終的に完了し、従って、アボート・ハンドラ・ルーチンは必要とされず、且つ、指定されない。例えば、アドレス指定することができない条件の違反(例えば、0での除算)、トランザクションの完了を可能にしない条件(例えば、命令の実行を可能にしないタイマー割り込み、ホットI/O等)、又は制約付きトランザクションと関連した制限又は制約の違反がない場合、トランザクションは最終的に完了する。
【0228】
制約付きトランザクションは、トランザクション・ネスト化深さが最初に0に設定されたとき、TRANSACTION BEGIN constrained(TBEGINC)命令により開始される。一実施形態において、制約付きトランザクションは、以下の制約を受ける。
1.トランザクションは、TRANSACTION BEGIN constrained(TBEGINC)命令及びTRANSACTION END命令を含まない、32を超えない命令を実行する。
2.トランザクション内の全ての命令は、TRANSACTION BEGIN constrained(TBEGINC)命令及びあらゆるTRANSACTION END命令を含む、ストレージの256の連続バイト内にある。
3.制限された命令に加えて、次の制限が制約付きトランザクションに適用される。
a.命令は、例えば、加算、減算、乗算、除算、シフト、ローテート等を含む、一般命令と呼ばれるものに限定される。
b.分岐命令は、次のもの(列挙された命令は、一例においてz/Architectureのものである)に限定される。
*Mフィールドは0でなく、RIフィールドは正の値を含む、BRANCH RELATIVE ON CONDITION、
*Mフィールドは0でなく、RIフィールドは、アドレスのラップアラウンドを生じさせない正の値を含む、BRANCH RELATIVE ON CONDITION LONG、
*Mフィールドは0でなく、RIフィールドは正の値を含む、COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE、及びCOMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE(即ち、0でない分岐マスクを有する前方分岐(forward branch)のみ)、
c.TRANSACTION END及び特定のオペランド・シリアル化をもたらす命令を除いた、シリアル化機能をもたらす命令が制限される。
d.ストレージ間操作(SS−)命令及び拡張オペコード付きストレージ間操作(SSE−)命令は制限される。
e.以下の一般命令(この例では、z/Architectureのもの):即ち、CHECKSUM;CIPHER MESSAGE;CIPHER MESSAGE WITH CFB;CIPHER MESSAGE WITH CHAINING;CIPHER MESSAGE WITH COUNTER;CIPHER MESSAGE WITH OFB;COMPARE AND FORM CODEWORD;COMPARE LOGICAL LONG;COMPARE LOGICAL LONG EXTENDED;COMPARE LOGICAL LONG UNICODE;COMPARE LOGICAL STRING;COMPARE UNTIL SUBSTRING EQUAL;COMPRESSION CALL;COMPUTE INTERMEDIATE MESSAGE DIGEST;COMPUTE LAST MESSAGE DIGEST;COMPUTE MESSAGE AUTHENTICATION CODE;CONVERT TO BINARY;CONVERT TO DECIMAL;CONVERT UNICODE−16 TO UNICODE−32;CONVERT UNICODE−16 TO UNICODE−8;CONVERT UNICODE−32 TO UNICODE−16;CONVERT UNICODE−32 TO UNICODE−8;CONVERT UNICODE−8 TO UNICODE−16;CONVERT UNICODE−8 TO UNICODE−32;DIVIDE;DIVIDE LOGICAL;DIVIDE SINGLE;EXECUTE;EXECUTE RELATIVE LONG;EXTRACT CACHE ATTRIBUTE;EXTRACT CPU TIME;EXTRACT PSW;EXTRACT TRANSACTION NESTING DEPTH;LOAD AND ADD;LOAD AND ADD LOGICAL;LOAD AND AND;LOAD AND EXCLUSIVE OR;LOAD AND OR;LOAD PAIR DISJOINT;LOAD PAIR FROM QUADWORD;MONITOR CALL;MOVE LONG;MOVE LONG EXTENDED;MOVE LONG UNICODE;MOVE STRING;NON−TRANSACTIONAL STORE;PERFORM CRYPTOGRAPHIC COMPUTATION;PREFETCH DATA;PREFETCH DATA RELATIVE LONG;RUNTIME INSTRUMENTATION EMIT;RUNTIME INSTRUMENTATION NEXT;RUNTIME INSTRUMENTATION OFF;RUNTIME INSTRUMENTATION ON;SEARCH STRING;SEARCH;STRING UNICODE;SET ADDRESSING MODE;Mフィールドが0であり、Rフィールドが6又は7であるときのSTORE CHARACTERS UNDER MASK HIGH;STORE CLOCK;STORE CLOCK EXTENDED;STORE CLOCK FAST;STORE FACILITY LIST EXTENDED;STORE PAIR TO QUADWORD;TEST ADDRESSING MODE;TRANSACTION ABORT;TRANSACTION BEGIN(TBEGIN及びTBEGINCの両方);TRANSLATE AND TEST EXTENDED;TRANSLATE AND TEST REVERSE EXTENDED;TRANSLATE EXTENDED;TRANSLATE ONE TO ONE;TRANSLATE ONE TO TWO TRANSLATE TWO TO ONE;及びTRANSLATE TWO TO TWOの全てが制限される。
4.トランザクションのストレージ・オペランドは、4個を超えないオクトワードにアクセスする。注記:LOAD ON CONDITION及びSTORE ON CONDITIONは、条件コードに関係なく、ストレージを参照すると考えられる。オクトワードは、例えば、32バイト境界上の32の連続バイトの群である。
5.このCPU上で実行されるトランザクション、又は他のCPU又はI/Oサブシステムによるストアは、TRANSACTION BEGIN constrained(TBEGINC)命令で始まるストレージの256バイトを含む、いずれの4Kバイト・ブロック内のストレージ・オペランドにもアクセスしない。
6.トランザクションは、同じ絶対アドレスにマッピングされた異なる論理アドレスを用いて、命令又は格納位置オペランドにアクセスしない。
7.LOAD ACCESS MULTIPLE、LOAD MULTIPLE、LOAD MULTIPLE HIGH、STORE ACCESS MULTIPLE、STORE MULTIPLE及びSTORE MULTIPLE HIGHについて、オペランド参照が単一のオクトワード内にあることを除いて、トランザクションにより行われるオペランド参照は、単一のダブルワード内にある。
【0229】
制約付きトランザクションが、上記に列挙した制約1−7のいずれかに違反する場合、(a)トランザクション制約プログラム割り込みが認識されるか、又は(b)さらなる制約違反が依然としてトランザクション制約付きプログラム割り込みをもたらし得ることを除いて、あたかもトランザクションは制約されていないかのように実行が進行する、のいずれかである。どのアクションがとられるかは予測不能であり、とられるアクションは、どの制約に違反したかに基づいて異なり得る。
【0230】
上述のように、制約違反、割り込みの反復、又は他のCPU又はI/Oサブシステムとの競合がない場合、制約付きトランザクションは最終的に完了する。
【0231】
1.トランザクションが以下の基準を満たす場合、制約付きトランザクションを成功裏に完了する可能性が改善する。
a.発行された命令が、最大32より少ない、
b.ストレージ・オペランド参照が、最大4オクトワードより少ない、
c.ストレージ・オペランド参照が、同一のキャッシュ・ライン上にある、
d.同じ記憶位置に対するストレージ・オペランド参照が、全てのトランザクションによって同じ順序で行われる。
2.制約付きトランザクションは、必ずしもその最初の実行で成功裡に完了することが保証されていない。しかしながら、列挙された制約のいずれにも違反しない制約付きトランザクションがアボートされると、CPUは、回路を用いて、トランザクションの実行の反復により後で成功することを保証する。
3.制約付きトランザクション内で、TRANSACTION BEGINは制限された命令であり、従って、制約付きトランザクションをネスト化することはできない。
4.制約付きトランザクションによる上記の制約1−7のいずれかの違反は、プログラム・ループをもたらす。
5.制約付きトランザクションの制限は、compare−and−swapループのものに類似している。他のCPU及びI/Oサブシステムからの潜在的な干渉のため、COMPARE AND SWAP命令が常に条件コード0で完了するという構造上の保証はない。制約付きトランザクションは、フェッチ若しくはストア競合アボート又はホット割り込みの形の類似の干渉を受けることがある。
CPUは、フェアネス・アルゴリズムを用いて、いずれの制約違反もない場合に、制約付きトランザクションが最終的に完了することを保証する。
6.制約付きトランザクションを完了するために必要とされる反復回数を求めるために、プログラムは、汎用レジスタのカウンタを用いることができ、このカウンタは汎用レジスタ保存マスクに影響されない。一例を以下に示す。
【表5】

*ここで、R15は反復されたトランザクション試行のカウントを含む
【0232】
この例においては、レジスタ14及び15の両方とも復元されないことに留意されたい。また、幾つかのモデルでは、CPUがTBEGINC命令の完了後、AHI命令の完了前にアボート条件を検出した場合、汎用レジスタ15のカウントが低いことがある。
【0233】
CPUにより観察されるとき、トランザクション実行モードで行われるフェッチ及びストアは、トランザクション実行モードにない間に行われるフェッチ及びストアと変わりがない。
【0234】
一実施形態において、ユーザ(即ち、トランザクションを生成するもの)は、トランザクションが制約されるかどうかを選択する。制約付きトランザクションの処理、特に、図13を参照して、TBEGINC命令と関連した処理と関連した論理の一実施形態を説明する。TBEGINC命令の実行により、CPUは、制約付きトランザクション実行モードに入るか又は制約なし実行モードにとどまる。TBEGINCを実行しているCPU(即ち、プロセッサ)は、図13の論理を実行する。
【0235】
図13を参照すると、TBEGINC命令の実行に基づいて、シリアル化機能が実行される(ステップ1100)。シリアル化機能又は操作は、概念的に後のストレージ・アクセス(及び、関連ビット参照及びビット設定変更)が行われる前に、他のCPU及びI/Oサブシステムにより観察されるとき、CPUによる全ての概念的に前のストレージ・アクセス(及び、z/Architectureについては、一例として、関連ビット参照及びビット設定変更)を完了することを含む。シリアル化は、ARTテーブル・エントリ及びDATテーブル・エントリ・フェッチと関連したものを除いた、ストレージ及びストレージ・キーへの全てのCPUアクセスのシーケンスに影響を及ぼす。
【0236】
トランザクション実行モードにあるCPUにより観察されるとき、シリアル化は(上述のように)正常に働く。他のCPU及びI/Oサブシステムにより観察されるとき、CPUがトランザクション実行モードにある間に行われるシリアル化操作は、トランザクション・ネスト化深さを0にデクリメントする(正常終了)TRANSACTION END命令の結果として、又はトランザクションがアボートされた結果として、CPUがトランザクション実行モードを終了するときに行われる。
【0237】
シリアル化の実行に続いて、例外が認識されるかどうかに関する判断が行われる(問い合わせ1102)。認識される場合、例外が処理される(ステップ1104)。例えば、トランザクション実行制御、即ち制御レジスタ0のビット8が0である場合、特殊操作例外が認識され、操作が抑止される。更に別の例として、命令のBフィールド、即ちビット16−19が0でない場合、指定例外が認識され、且つ、操作が抑止され、TBEGINCがexecute型命令のターゲットである場合、実行例外が認識され、且つ、操作が抑止され、トランザクション実行ファシリティが構成内にインストールされていない場合、操作例外が認識され、且つ、操作が抑止される。CPUが既に制約付きトランザクション実行モードにある場合、制約付きトランザクション例外プログラム例外が認識され、且つ、操作は抑止される。さらに、トランザクション・ネスト化深さが1だけインクリメントされたとき、モデル依存最大トランザクション・ネスト化深さを超過した場合、トランザクションはアボート・コード13でアボートされる。他の又は異なる例外が認識され、処理されることも可能である。
【0238】
しかしながら、例外がない場合、トランザクション・ネスト化深さが0であるかどうかの判断が行われる(問い合わせ1106)。トランザクション・ネスト化深さが0である場合、トランザクション診断ブロック・アドレスが無効であると考えられ(ステップ1108)、トランザクション・アボートPSWは、トランザクション・アボートPSWの命令アドレスが次の順次命令ではなくTBEGINC命令を指定する点を除いて、現PSWの内容から設定され(ステップ1110)、汎用レジスタ保存マスクにより指定されるような汎用レジスタの対の内容は、プログラムにより直接アクセス可能ではないモデル依存の記憶位置に格納される(ステップ1112)。さらに、ネスト化深さが1に設定される(ステップ1114)。加えて、浮動小数点演算許可(F)及びプログラム割り込みフィルタ処理制御(PIFC)の有効値が0に設定される(ステップ1116)。さらに、AR変更許可(A)制御、即ち命令のIフィールドのビット12が求められる(ステップ1118)。例えば、有効なA制御は、現在のレベル及びいずれかの外部TBEGIN命令に対するTBEGINC命令におけるA制御の論理ANDである。
【0239】
問い合わせ1106に戻ると、トランザクション・ネスト化深さが0より大きい場合、ネスト化深さが1だけインクリメントされる(ステップ1120)。さらに、浮動小数点演算許可(F)の有効値は0に設定され、プログラム割り込みフィルタ処理制御(PIFC)の有効値は変更されない(ステップ1122)。次に、処理はステップ1118を続行する。一実施形態において、トランザクションの成功裡の開始は、条件コード0をもたらす。これで、TBEGINC命令の実行と関連した論理の一実施形態が終了する。
【0240】
一実施形態において、上記に与えられた例外チェックは、様々な順序で行うことができる。例外チェックについての1つの特定の順序は次の通りである。:即ち、
一般的な場合のプログラム割り込み条件の優先順位と同じ優先順位を有する例外、
フィールドが0でない値を含むことに起因する指定例外、
トランザクション・ネスト化深さ超過に起因するアボート、
正常終了に起因する条件コード0。
【0241】
さらに、1つ又は複数の実施形態において、以下が適用される。
1.汎用レジスタ保存マスクにより保存されるように指定されたレジスタは、トランザクションがアボートされた場合にのみ復元され、トランザクションがTRANSACTION ENDにより正常に終了したときには復元されない。最外TRANSACTION BEGIN命令のGRSMにより指定されたレジスタのみがアボート時に復元される。
フィールドは、制約付きトランザクションにより変更される入力値を与える全てのレジスタ対を指定しなければならない。従って、トランザクションがアボートされた場合、制約好きトランザクションが再実行されたときに入力レジスタ値がオリジナルの内容に復旧される。
2.大部分のモデルにおいて、汎用レジスタ保存マスク内に保存及び復元することが必要とされるレジスタの最小数を指定することにより、TRANSACTION BEGIN時にも、トランザクションがアボートされたときにも、性能の改善を実現することができる。
3.以下は、現在のトランザクション・ネスト化深さ(TND)に基づき、TNDが0でないとき、CPUが制約なしトランザクション実行モードにあるか又は制約付きトランザクション実行モードにあるかに関する、TRANSACTION BEGIN命令(TBEGIN及びTBEGINCの両方)の結果を示す。即ち、
【0242】
【表6】
【0243】
本明細書で述べられるように、一態様において、制約付きトランザクションは、完了を保証し、これが完了を不可能にする条件を含まないと仮定する。制約付きトランザクションの完了を保証するために、トランザクションを実行しているプロセッサ(例えば、CPU)は、特定のアクションを取ることができる。例えば、制約付きトランザクションがアボート条件を有する場合、CPUは、一時的に:
(a)アウト・オブ・オーダー式実行を禁止する、
(b)他のCPUが、競合するストレージ位置にアクセスするのを禁止する、
(c)アボート処理においてランダム遅延を引き起こす、及び/又は、
(d)成功裏の完了を容易にするために、他の手段を呼び出す、
ことができる。
【0244】
要約すると、制約付きトランザクションの処理は、以下の通りである。
*既に制約付きTXモードにある場合、制約付きトランザクション例外が認識される。
*現在のTND(トランザクション・ネスト化深さ)>0の場合、実行は、あたかも制約なしトランザクションであるかのように進行する。
)有効なF制御は0に設定される
)有効なPIFCは変更されない
)外部制約なしTXが、制約付きTXを使用することも又は使用しないこともあるサービス機能を呼び出すことを可能にする
*現在のTND=0のとき:
)トランザクション診断ブロック・アドレスは無効である
−アボート時に命令指定TDBは格納されない
)トランザクション・アボートPSWはTBEGINCのアドレスに設定される
−次の順次命令ではない
)モデル依存記憶位置に保存されたGRSMにより指定された汎用レジスタ対は、プログラムによりアクセス可能でない
)トランザクション・トークンが随意的に形成される(Dオペランドから)。トランザクション・トークンは、トランザクションの識別子である。トランザクション・トークンは、ストレージ・オペランド・アドレス又は他の値と等しい場合がある
*有効A=TBEGINC A&任意の外部A
*TNDがインクリメントされる
)TNDが0から1に移行する場合、CPUは制約付きTXモードに入る
)他の場合には、CPUは制約なしTXモードにあるままである
*命令はCC0により完了する
*例外:
)Bフィールドが0でない場合、指定例外(PIC(プログラム割り込みコード)0006)
)トランザクション実行制御(CR0.8)が0の場合、特殊操作例外(PIC 0013 hex)
)制約付きTXモードで発行された場合、トランザクション制約例外(PIC 0018 hex)
)制約付きトランザクション実行ファシリティがインストールされていない場合、操作例外(PIC 0001)
)命令がexecute型命令のターゲットである場合、実行例外(PIC 0003)
)ネスト化深さ超過の場合、アボート・コード13
*制約付きトランザクションにおけるアボート条件:
)アボートPSWはTBEGINC命令を指し示す
−これに続く命令ではない
−アボート条件により、TX全体が再駆動される
*フェイル経路なし
)CPUは、再駆動時に成功裡の完了を確実にするための特別な手段をとる
)持続的な競合、割り込み、又は制約違反がないと仮定すると、トランザクションは最終的に完了することが保証される。
*制約違反:
)PIC 0018 hex−は、トランザクション制約の違反を示す
)又は、トランザクションは、あたかも制約なしであるかのように実行される
【0245】
上述のように、随意的である制約付きトランザクション処理に加えて、一実施形態においては、トランザクション・ファシリティは、制約なしトランザクション処理も提供する。制約なしトランザクションの処理及び、特に、TBEGIN命令と関連した処理を、図14を参照して説明する。TBEGIN命令の実行により、CPUが、制約なしトランザクション実行モードに入らせる、又は制約なしトランザクション実行モードのままである。TBEGINを実行するCPU(即ち、プロセッサ)が、図16の論理を実行する。
【0246】
図14を参照すると、TBEGIN命令の実行に基づいて、シリアル化機能が実行される(ステップ1200)。シリアル化の実行に続いて、例外が認識されるかどうかに関する判断が行われる(問い合わせ1202)。認識される場合、例外が処理される(ステップ1204)。例えば、トランザクション実行制御、即ち制御レジスタ0のビット8が0である場合、特殊操作例外が認識され、操作は抑止される。さらに、プログラム割り込みフィルタ処理制御、即ち命令のIフィールドのビット14−15が3の値を含む場合、指定例外が認識され、操作は抑止される、又は第1のオペランド・アドレスはダブルワード境界を指定しない。トランザクション実行ファシリティが構成内にインストールされていない場合、操作例外が認識され、操作は抑止され、TBEGINがexecute型命令のターゲットである場合、実行例外が認識され、操作は抑止される。付加的に、CPUが制約付きトランザクション実行モードにある場合、トランザクション制約例外プログラム例外が認識され、操作は抑止される。さらに、トランザクション・ネスト化深さが、1だけインクリメントされたときに、モデル依存最大トランザクション・ネスト化深さを超えた場合、トランザクションはアボート・コード13によりアボートされる。
【0247】
さらに、命令のBフィールドが0でなく、CPUがトランザクション実行モードにないとき、即ちトランザクション・ネスト化深さが0のとき、第1のオペランドに対するストア・アクセス可能性が判断される。ストアのために第1のオペランドにアクセスできない場合、アクセス例外が認識され、操作は、特定のアクセス例外条件に応じて、無効化されるか、抑止されるか、終了されるかのいずれかである。加えて、第1のオペランドについてのいずれのPERストレージ変更イベントも認識される。Bフィールドが0でなく、且つ、CPUが既にトランザクション実行モードにあるとき、第1のオペランドに対するストア・アクセス可能性が判断されるかどうか、及び、第1のオペランドに関してPERストレージ変更イベントが検出されるかどうかは、予測不能である。Bフィールドが0である場合、第1のオペランドにアクセスできない。
【0248】
例外チェックに加えて、CPUがトランザクション実行モードにある(即ち、トランザクション・ネスト化深さが0である)かどうかの判断が行われる(問い合わせ1206)。CPUがトランザクション実行モードにない場合、選択された汎用レジスタ対の内容が保存される(ステップ1208)。特に、汎用レジスタ保存マスクにより指定される汎用レジスタ対の内容は、プログラムにより直接アクセス可能でないモデル依存記憶位置に保存される。
【0249】
さらに、命令のBフィールドが0であるかどうかの判断が行われる(問い合わせ1210)。Bフィールドが0に等しくない場合、第1のオペランド・アドレスは、トランザクション診断ブロック・アドレス内に配置され(ステップ1214)、且つ、トランザクション診断ブロック・アドレスは有効である。さらに、トランザクション・アボートPSWが、現PSWの内容から設定される(ステップ1216)。トランザクション・アボートPSWの命令アドレスは、次の順次命令(つまり、最外TBEGINに続く命令)を指定する。
【0250】
さらに、AR変更許可(A)制御の有効値、即ち命令のIフィールドのビット12が求められる(ステップ1218)。有効なA制御は、現在のレベル及び全ての外部レベルに対するTBEGIN命令におけるA制御の論理ANDである。加えて、浮動小数点演算許可(F)制御の有効値、即ち命令のIフィールドのビット13が求められる(ステップ1220)。有効なF制御は、現在のレベル及び全ての外部レベルに対するTBEGIN命令におけるF制御の論理ANDである。さらに、プログラム割り込みフィルタ処理制御(PIFC)の有効値、即ち命令のIフィールドのビット14−15が求められる(ステップ1222)。有効なPIFC値は、現在のレベル及び全ての外部レベルに対するTBEGIN命令における最高値である。
【0251】
さらに、1の値がトランザクション・ネスト化深さに加えられ(ステップ1224)、且つ、命令は条件コードを0に設定することにより完了する(ステップ1226)。トランザクション・ネスト化深さが0から1に遷移すると、CPUは制約なしトランザクション実行モードに入り、他の場合には、CPUは制約なしトランザクション実行モードにあるままである。
【0252】
問い合わせ1210に戻って、Bフィールドが0と等しいとき、トランザクション診断ブロック・アドレスは無効であり(ステップ1211)、処理はステップ1218を続行する。同様に、CPUがトランザクション実行モードにある場合(問い合わせ1206)、処理はステップ1218を続行する。
【0253】
例えば、結果として得られるTBEGINの実行の条件コードは、以下のものを含む。
0 成功裏のトランザクション開始
1 −−
2 −−
3 −−
【0254】
例えば、プログラム例外は、以下のものを含む。:即ち、
*アクセス(ストア、第1のオペランド)
*操作(トランザクション実行ファシリティがインストールされていない)
*特殊操作
*指定
*トランザクション制約(制限された命令に起因する)
【0255】
一実施形態において、上記に与えられた例外チェックは、様々な順序で行うことができる。例外チェックについての1つの特定の順序は次の通りである。:即ち、
*一般的場合のプログラム割り込み条件の優先順位と同じ優先順位を有する例外、
*予約されたPIFC値に起因する指定例外、
*第1のオペランド・アドレスがダブルワード境界上にないことに起因する指定例外、
*アクセス例外(Bフィールドが0ではないとき)
*最大トランザクション・ネスト化深さ超過に起因するアボート、
*正常終了に起因する条件コード0。
【0256】
注記
1.Bフィールドが0でないとき、以下が適用される。
*最外トランザクションが開始されると、トランザクションが決してアボートしない場合でも、アクセス可能トランザクション診断ブロック(TDB)が与えられる。
*TDBのアクセス可能性がネスト化されたトランザクションについて試験されるかどうかは予測不能であるため、任意のネスト化されたTBEGIN命令に対してアクセス可能なTDBを与えなければならない。
*Bフィールドが0でない任意のTBEGINの実行、及びBフィールドが0でない最外TBEGINにより開始されたトランザクションに対して行われる任意のアボート処理の実行は、Bフィールドが0であるときよりも低速であり得る。
2.汎用レジスタ保存マスクにより保存されるよう指定されたレジスタは、一実施形態において、トランザクションがアボートした場合にのみ復元され、トランザクションがTRANSACTION ENDにより正常に終了したときには復元されない。最外TRANSACTION BEGIN命令のGRSMにより指定されたレジスタのみがアボート時に復元される。
フィールドは、トランザクションにより変更される入力値を与える全てのレジスタ対を指定しなければならない。従って、トランザクションがアボートされた場合、アボート・ハンドラが入力されたときに、入力レジスタ値は、そのオリジナルの内容に復元される。
3.TRANSACTION BEGIN(TBEGIN)命令は、トランザクションが成功裏に開始されたかどうかを判断する条件分岐命令が後に続くと予想される。
4.トランザクションが、割り込みをもたらさない条件に起因してアボートされた場合、トランザクション・アボートPSWにより指定された命令は制御(つまり、最外TRANSACTION BEGIN(TBEGIN)に続く命令)。TRANSACTION BEGIN(TBEGIN)命令により設定された条件コードに加えて、トランザクションがアボートするとき、条件コード1−3も設定される。
従って、最外TRANSACTION BEGIN(TBEGIN)命令に続く命令シーケンスは、本例において、TBEGIN命令がコード0のみを設定したとしても、4つの条件コード全てを収容できなければならない。
5.大部分のモデルにおいて、汎用レジスタ保存マスク内に保存及び復元することが必要とされるレジスタの最小数を指定することにより、TRANSACTION BEGIN時にも、トランザクションがアボートされたときにも、性能の改善を実現することができる。
6.制約なしトランザクション実行モードにある間、プログラムは、アクセス・レジスタ又は浮動小数点レジスタ(浮動小数点制御レジスタを含む)を変更することができるサービス機能を呼び出すことができる。こうしたサービス・ルーチンは、入力時に変更されたレジスタを保存し、終了時にそれらを復元することができるが、トランザクションは、ルーチンが正常終了する前にアボートされることがある。CPUが制約なしトランザクション実行モードにある間、呼び出しプログラムが、これらのレジスタを保存する準備をしていない場合、レジスタのサービス機能の変更を許容できないことがある。
制約なしトランザクション実行モードにある間のアクセス・レジスタの不注意による変更を防止するために、プログラムは、AR変更許可制御、即ちTRANSACTION BEGIN命令のIフィールドのビット12を0に設定することができる。同様に、浮動小数点レジスタの不注意による変更を防止するために、プログラムは、浮動小数点演算許可制御、即ちTRANSACTION BEGIN命令のIフィールドのビット13を0に設定することができる。
7.TRANSACTION BEGIN(TBEGIN)命令の実行中に認識されるプログラム例外条件は、いずれかの外部TBEGIN命令により設定された有効なプログラム割り込みフィルタ処理制御を受ける。最外TBEGINの実行中に認識されるプログラム例外条件は、フィルタ処理を受けない。
8.複数のストレージ位置をシリアル化手法で更新するために、従来のコードシーケンスは、ロックワード(セマフォ)を採用することができる。(a)複数のストレージ位置の更新を実施するためにトランザクション実行を用いる場合、(b)プログラムが、トランザクションがアボートする場合に呼び出される「フォールバック」経路も提供する場合、及び(c)フォールバック経路がロックワードを採用する場合、トランザクション実行経路も、ロックの利用可能性について試験しなければならず、ロックが利用可能でない場合、TRANSACTIONEND命令によりトランザクションを終了し、フォールバック経路に分岐する。このことは、シリアル化されたリソースがトランザクション的に更新されているかどうかに関係なく、シリアル化されたリソースへの一定のアクセスを保証する。
代替的に、プログラムは、ロックが利用可能でない場合にアボートし得るが、アボート処理は、単にTENDを介してトランザクションを終了するよりも著しく遅くなり得る。
9.有効なプログラム割り込みフィルタ処理制御(PIFC)が0より大きい場合、CPUは大部分のデータ例外プログラム割り込みをフィルタ処理する。有効な浮動小数点演算許可(F)制御が0である場合、データ例外プログラム例外条件に起因するアボートの結果として、浮動小数点制御レジスタにおいて、データ例外コード(DXC)は設定されない。このシナリオ(フィルタ処理が適用され、且つ、有効なF制御が0である)において、DXCが検査される唯一の記憶位置は、TBEGIN指定TDB内である。こうした状況においてプログラムのアボート・ハンドラがDXCを検査する場合、有効なトランザクション診断ブロック・アドレス(TDBA)が設定されるように、汎用レジスタBは0以外であるべきである。
10.最外TBEGIN命令のTBEGIN指定TDBに対して、PERストレージ変更又はゼロ・アドレス検出条件が存在し、且つ、PERイベント抑止が適用されない場合、命令の実行中にPERイベントが認識され、従って、いずれかの他のアボート条件が存在するかどうかに関係なく、トランザクションが直ちにアボートされる。
【0257】
一実施形態において、TBEGIN命令は、TBEGINに続く次の順次命令となるように、トランザクション・アボート・アドレスを暗黙的に設定する。このアドレスは、条件コード(CC)に応じて分岐するかどうかを決定する条件分岐命令となることが意図される。成功裡のTBEGINは、CC0を設定し、一方、アボートされたトランザクションは、CC1、CC2又はCC3を設定する。
【0258】
一実施形態において、TBEGIN命令は、トランザクションがアボートされた場合に情報が格納される、トランザクション診断ブロック(TDB)のアドレスを指定する随意的なストレージ・オペランドを与える。
【0259】
さらに、TBEGIN命令は、以下のものを含む即値オペランドを与える。
汎用レジスタのどの対が、トランザクション実行の開始時に保存され、トランザクションがアボートされた場合に復元されるかを示す汎用レジスタ保存マスク(GRSM)、
トランザクションがアクセス・レジスタを変更する場合に、トランザクションのアボートを可能にするビット(A)、
トランザクションが浮動小数点命令を実行しようと試みる場合、トランザクションのアボートを可能にするビット(F)、
トランザクションがアボートされた場合、個々のトランザクション・レベルがプログラム割り込みの実際の提示をバイパスすることを可能にするプログラム割り込みフィルタ処理制御(PIFC)、
A、F及びPIFC制御は、様々なネスト化レベルで異なり、内部トランザクション・レベルが終了したときに前のレベルに復旧することができる。
【0260】
さらに、TBEGIN(又は、別の実施形態においてはTBEGINC)を用いてトランザクション・トークンを形成する。随意的に、トークンを、TEND命令によって形成されたトークンと照合することができる。一例として、各々のTBEGIN(又はTBEGINC)命令については、トークンは第1のオペランド・アドレスから形成することができる。このトークンは、(ベース・レジスタが0でないときにのみ行われるTDBアドレス設定と異なり)ベース・レジスタが0であるかどうかに関係なく形成することができる。0でないベース・レジスタで実行された各々のTRANSACTION END命令について、そのストレージ・オペランドから同様のトークンを形成することができる。トークンが一致しない場合、プログラム例外が認識され、対になっていない命令のプログラムに警告することができる。
【0261】
トークンの照合は、TENDステートメントがTBEGIN(又はTBEGINC)と適切に対にされることを保証することによって、ソフトウェアの信頼性を改善することを意図する機構を提供する。TBEGIN命令が特定のネスト化レベルで実行されると、トークンは、トランザクションのこのインスタンスを識別するストレージ・オペランド・アドレスから形成される。対応するTEND命令が実行されると、トークンは、その命令のストレージ・オペランド・アドレスから形成され、CPUは、ネスト化レベルについての開始トークンを終了トークンと比較する。トークンが一致しない場合、例外条件が認識される。モデルは、特定のネスト化レベル数に対してのみトークンの照合を実施する(又は、どのネスト化レベルに対しても実施しない)ことが可能である。トークンは、ストレージ・オペランド・アドレスの全てのビットに関与しないことがある、つまり、ハッシング又は他の方法を介してビットを組み合わせることができる。そのストレージ・オペランドにアクセスされていない場合でも、TBEGIN命令によりトークンを形成することができる。
【0262】
要約すると、制約なしトランザクションの処理は、以下の通りである。
*TND=0の場合:
)B=0の場合、トランザクション診断ブロック・アドレスは第1のオペランド・アドレスから設定される。
)トランザクション・アボートPSWは、次の順次命令アドレスに設定される。
)Iフィールドにより指定される汎用レジスタ対は、モデル依存記憶位置に保存される。
−プログラムにより直接アクセス可能でない
*有効なPIFC、A、&F制御が計算される
)有効なA=TBEGIN A&任意の外部A
)有効なF=TBEGIN F&任意の外部F
)有効なPIFC=最大値(TBEGIN PIFC、任意の外部PIFC)
*トランザクション・ネスト化深さ(TND)がインクリメントされる
*TNDが0から1に移行する場合、CPUはトランザクション実行モードに入る
*条件コードが0に設定される。
)TBEGINに続く命令が制御を受け取ると:
−TBEGINの成功がCC0により示される
−アボートされたトランザクションが、0でないCCにより示される
*例外:
)ネスト化深さ超過の場合、アボート・コード13
)Bフィールドが0でなく、且つ、ストア操作に関してストレージ・オペランドにアクセスできない場合、アクセス例外(種々のPICの1つ)
)TBEGIN命令がexecute型命令のターゲットである場合、実行例外(PIC 0003)
)トランザクション実行ファシリティがインストールされていない場合、操作例外(PIC 0001)
)次のいずれかの場合、PIC 0006
−PIFCが無効である(3の値)
−第2のオペランド・アドレスがダブルワードにアラインされていない
)トランザクション実行制御(CR0.8)が0である場合、PIC 0013 hex
)制約付きTXモードで発行された場合、PIC 0018 hex
【0263】
上述のように、トランザクションは、制約付きであっても又は制約なしであっても、TRANSACTION END(TEND)命令により終了させることができる。TRANSACTION END(TEND)命令の処理に関する更なる詳細を、図15を参照して説明する。TENDを実行するCPU(即ち、プロセッサ)は、図15の論理を実行する。
【0264】
図15を参照すると、初めに、TEND命令を取得する(例えば、フェッチする、受け取る等)プロセッサに基づいて、種々の例外チェックが行われ、例外がある場合(問い合わせ1300)、例外が処理される(ステップ1302)。例えば、TRANSACTION ENDがexecute型命令のターゲットである場合、操作は抑止され、実行例外が認識され、トランザクション実行制御、即ちCR0のビット8が0である場合、特殊操作例外が認識され、操作が抑止される。さらに、トランザクション実行ファシリティが構成内にインストールされていない場合、操作例外が認識され、操作は抑止される。
【0265】
問い合わせ1300に戻ると、例外が認識されない場合、トランザクション・ネスト化深さがデクリメントされる(例えば1だけ)(ステップ1304)。デクリメント後にトランザクション・ネスト化深さが0であるかどうかの判断が行われる(問い合わせ1306)。トランザクション・ネスト化深さが0の場合、トランザクション(及び、もしあれば、このトランザクションが一部である、トランザクションのネスト内の他のトランザクション)により行われる全てのストア・アクセスがコミットされる(ステップ1308)。さらに、CPUはトランザクション実行モードを終了し(ステップ1310)、命令は完了する(ステップ1312)。
【0266】
問い合わせ1306に戻ると、トランザクション・ネスト化深さが0と等しくない場合、TRANSACTION END命令は直ぐに完了する。
【0267】
操作の開始時にCPUがトランザクション実行モードにある場合、条件コードは0に設定され、他の場合には、条件コードは2に設定される。
【0268】
有効な浮動小数点許可(F)制御、AR変更許可(A)制御及びプログラム割り込みフィルタ処理制御(PIFC)は、終了されたレベルを開始したTRANSACTION BEGIN命令の前のそれぞれの値にリセットされることに留意されたい。さらに、操作の完了時に、シリアル化機能が実施される。
【0269】
最外TRANSACTION END命令の完了時に認識されるPER命令フェッチ及びトランザクション終了イベントにより、トランザクションはアボートされない。
【0270】
一例において、TEND命令はまた、ベース・フィールドB及び変位フィールドDも含み、これらを結合して(例えば、加算して)第2のオペランド・アドレスを生成する。本例において、トークンの照合を行うことができる。例えば、Bが0でないとき、第2のオペランド・アドレスの選択されたビットは、対応するTBEGINにより形成されたトランザクション・トークンと照合される。不一致がある場合、例外がある(例えば、PIC 0006)。
【0271】
上記に加えて、TRANSACTION ABORT命令により、トランザクションを暗黙的又は明示的にアボートすることができる。TABORT又は他の方法によるトランザクションのアボートには、多数のステップを実施することが含まれる。一般に、アボート処理のステップの一例を、図16を参照しながら説明する。アボートがTABORTにより開始されたのか又は他の方法により開始されたのかに基づいて処理の差がある場合、それが以下の説明に示される。一例において、プロセッサ(例えば、CPU)が、図16の論理を実行する。
【0272】
図16を参照すると、初めに、TABORT命令の実行又は暗黙的アボートに基づいて、CPUがトランザクション実行モードにある間に行われた非トランザクション・ストア・アクセスがコミットされる(ステップ1400)。CPUがトランザクション実行モードにある間に行われた他のストア(例えば、トランザクション・ストア)は廃棄される(ステップ1402)。
【0273】
CPUがトランザクション実行モードを終了し(ステップ1404)、後続のストアが非トランザクション的に行われる。条件コードが上述のように(TDBAが有効であるが、ブロックがアクセス可能でない場合に、CC=1である以下の状況以外)設定されることを除いて、現PSWは、トランザクション・アボートPSWの内容と置き換えられる(ステップ1406)。アボート処理の一部として又はアボート処理に続いて、処理は、トランザクション・アボートPSW指定位置に分岐して、アクションを実行する。トランザクションが制約付きトランザクションである一例においては、その記憶位置はTBEGINC命令であり、アクションはその命令の再実行であり、トランザクションが制約なしトランザクションである更に別の例においては、記憶位置はTBEGIN後の命令であり、アクションは、例えばアボート・ハンドラへの分岐とすることができる命令の実行である。
【0274】
次に、トランザクション診断ブロック・アドレスが有効であるかどうかの判断が行われる(問い合わせ1408)。トランザクション診断ブロック・アドレスが有効であるとき、アボートの理由を識別する診断情報及び汎用レジスタの内容が、TBEGIN指定トランザクション診断ブロックに格納される(ステップ1410)。トランザクション診断ブロックを参照して、格納されたTDBフィールド及びそれらを格納する条件が上記に説明される。
【0275】
トランザクション診断ブロック・アドレスが有効であり、且つ、最外TBEGIN命令の実行の後にブロックがアクセス不能になった場合、ブロックにアクセスできず、条件コード1が適用される。
【0276】
割り込みをもたらすプログラム例外条件に起因してアボートされたトランザクションについては、プログラム割り込みTDBが格納される。
【0277】
問い合わせ1408に戻ると、トランザクション診断ブロック・アドレスが有効でない場合、TBEGIN指定TDBは格納されず、アボートの理由に応じて、条件コード2又は3が適用される。
【0278】
上記に加えて、トランザクション・ネスト化深さが0に等しくなるように設定される(ステップ1412)。さらに、最外TBEGIN命令により保存されるように指定された全ての汎用レジスタ対が復元される(ステップ1414)。トランザクションがアボートされたとき、最外TBEGIN命令により保存されるように指定されなかった汎用レジスタ対は復元されない。
【0279】
さらに、シリアル化機能が実施される(ステップ1416)。シリアル化機能又は操作は、概念的に後のストレージ・アクセス(及び、関連ビット参照及びビット設定変更)が行われる前に、他のCPU及びI/Oサブシステムにより観察されるとき、CPUによる全ての概念的に前のストレージ・アクセス(及び、z/Architectureについては、一例として、関連ビット参照及びビット設定変更)を完了することを含む。シリアル化は、ARTテーブル・エントリ及びDATテーブル・エントリ・フェッチと関連したものを除いた、ストレージ及びストレージ・キーへの全てのCPUアクセスのシーケンスに影響を及ぼす。
【0280】
トランザクション実行モードにあるCPUにより観察されるとき、シリアル化は(上述のように)正常に働く。他のCPU及びI/Oサブシステムにより観察されるとき、CPUがトランザクション実行モードにある間に行われるシリアル化操作は、トランザクション・ネスト化深さを0にデクリメントする(正常終了)TRANSACTION END命令の結果として、又はトランザクションがアボートされた結果として、CPUがトランザクション実行モードを終了するときに行われる。
【0281】
TABORT以外により開始されたアボート処理については、トランザクションが、アボートをもたらす例外条件に起因してアボートされた場合(問い合わせ1418)、割り込みコード、又は割り込みと関連したパラメータが、割り込みのタイプに対応する割り当てられたストレージ位置に格納される(ステップ1420)。さらに、上記で設定されたような現PSWが、割り込み旧PSW内に格納される(ステップ1422)。その後、又はトランザクションが割り込みをもたらす例外条件に起因してアボートされなかった場合、命令は条件コード0で終了する。
【0282】
上記に加えて、z/Architectureの解釈実行についての一実施形態において、CPUがトランザクション実行モードにあり、且つ、通常、インターセプト・コード4、12、44、56、64、68又は72をもたらすゲスト条件が発生すると、インターセプトは発生しない。むしろ、CPUは解釈実行モードのままであり、アボート条件は、次のようにゲストに表示される。
*制約なしトランザクションについては、トランザクションが制限された命令に起因してアボートされる(アボート・コード11)。同時PERイベントが検出され、PERに対してCPUがイネーブルにされる場合、割り込みコード0280 hexによりプログラム割り込みが発生する。
*制約付きトランザクションについては、トランザクション制約例外が認識される。同時PERイベントが検出され、PERに対してCPUがイネーブルにされる場合、割り込みコード0298 hexによりプログラム割り込みが発生する。
【0283】
プログラム例外条件に起因してトランザクションがアボートされたとき、プログラム割り込みフィルタ処理が、割り込みの提示を禁止することができる。インターセプトをもたらし得るプログラム割り込みについては、フィルタ処理は、インターセプトも禁止する。
【0284】
上述のように、一実施形態によると、プログラムが制約なしトランザクション(つまり、アボート・ハンドラ復旧ルーチンが与えられるトランザクション)を開始すると、プログラムは、トランザクションがアボートした場合に診断情報が記録されるストレージ位置を指し示すことができる。診断情報は、トランザクションがプログラム割り込みに起因してアボートされた場合、又はアボートがプログラム割り込みインターセプトなどの解釈実行インターセプトをもたらした場合にも提供され得る。
【0285】
一実施形態においては、トランザクションのアボートに基づいて、診断情報は、トランザクション診断ブロック(TDB)において提供される。情報は、例えば、図11を参照して上述したような、トランザクション・ネスト化深さ、トランザクション・アボート・コード、競合トークン(競合に起因してアボートされるトランザクションに関する)、アボート・トランザクション命令アドレス、フィルタ処理されたプログラム例外条件に起因してアボートされるトランザクションに関するプログラム割り込みパラメータ、トランザクション実行分岐表示を含むモデル依存診断情報、アボート時の汎用レジスタ、及び/又は他の情報を含む。
【0286】
制約なしトランザクションに関して存在することも又はしないこともあるプログラム指定TDB(TBEGIN−TDBとしても知られる);トランザクションが非フィルタ処理プログラム例外条件(つまり、実際にプログラム割り込みをもたらす条件)に起因してアボートされたときに、制御プログラムに与えられるプログラム割り込みTDB;及び/又はトランザクションが、特定のインターセプト条件に起因してアボートされたときに、ホスト・プログラム(例えば、オペレーティング・システム)に与えられるインターセプトTDBを含む、ゼロ、1つ、又は2つのTDBを、アボート時に格納することができる。
【0287】
図17を参照して、ゼロ又はそれより多くのTDBの格納と関連した処理の一実施形態を説明する。この論理は、アボート条件を検出するプロセッサなどのプロセッサにより実施される。
【0288】
図17を参照すると、最初に、トランザクションのアボート(即ち、異常終了)が検出される(ステップ1500)。その後、有効なトランザクション診断ブロック・アドレス(TDBA)が指定されたかどうかについての判断が行われる(問い合わせ1502)。例えば、TBEGIN命令により指定される有効なトランザクション診断ブロック・アドレスか(例えば、TBEGINのB>0)である。有効なTDBAが提供された場合、上述のように、情報は、プログラム指定TDB内に格納される(ステップ1504)。
【0289】
その後、又は有効なTDBAが与えられない場合、アボート条件が割り込みに起因するかどうかについての更なる判断が行われる(問い合わせ1506)。アボート条件が割り込みに起因する場合、情報は、上述のようにプログラム割り込みTDB内に格納される。
【0290】
その後、又はアボートがプログラム割り込みに起因しない場合、アボートがインターセプトをもたらすかどうかについての判断が行われる(問い合わせ1510)。アボートがインターセプトをもたらさなかった場合、この処理は完了する。他の場合には、情報は、上述のようにインターセプトTDB内に格納される(ステップ1512)。これにより処理は終了する。
【0291】
本明細書で示されるように、アボートの結果として、1つ又は複数のTDBが格納されることも、又はTDBが格納されないこともある。しかしながら、格納される各TDBは、デバッグを容易にし得るアボートに関する診断情報を提供する。一実施形態において、診断情報は、失敗したトランザクションのデバッグに有用であり得る分岐履歴をもたらしたトランザクション実行分岐表示を含む。
【0292】
図18を参照して、分岐表示の提供に関する更なる詳細を説明する。一実施形態において、この論理は、トランザクションを実行しているプロセッサなどのプロセッサにより実施される。
【0293】
図18を参照すると、最初に、例えば、TRANSACTION BEGIN命令を介してトランザクションが開始される(ステップ1550)。一例では、トランザクションは制約なしトランザクションであり、従って、TBEGIN命令が用いられる。トランザクションの実行中、1つ又は複数の分岐命令が実行されるかどうかについての判断が行われる(問い合わせ1552)。分岐命令に遭遇すると、トランザクション実行分岐表示(TXBI)と呼ばれるベクトルの1つのビットが、分岐が成立したかどうかを示すように設定される(ステップ1554)。分岐が成立した場合、ビットは、例えば1に設定され、分岐が成立しなかった場合、ビットは例えば0に設定される。これは、遭遇した分岐命令ごとに行われる。
【0294】
特に、一例において、ベクトルは64ビットを含む。ベクトルの最初の63ビットの各々は、CPUがトランザクション実行モードにある間に分岐命令を実行した結果を、以下のように示す:0−命令は分岐なしに完了した、及び1−命令は分岐して完了した。ビット0は、最初のこうした分岐命令の結果を表し、ビット1は、第2のこうした命令の結果を表し、以下同様である。このことは、必ずしも別個の分岐命令が存在することを意味するものではない。トランザクションがループしている場合、同じ分岐を複数回実行し、複数のベクトル・ビットの設定をもたらすことがある。
【0295】
CPUがトランザクション実行モードにあった間に63より少ない分岐命令が実行された場合、分岐命令に対応しない最右端ビットがゼロに設定される(ビット63を含む)。63より多い分岐命令が実行される場合、TXBIのビット63が1に設定される。従って、一例において、トランザクションが、どれも成立しなかった多数の分岐を含む直線のコード(つまり、ループがない)で実行される場合、最右端ビットを除いて、ベクトルが全て0であることも可能である。
【0296】
トランザクションの処理中にトランザクションがアボートされた場合(問い合わせ1556)、一例において、ベクトルは、トランザクション診断ブロック内に格納される(ステップ1558)。一例において、上述のように、複数のトランザクション診断ブロックが存在し、且つ、アボートのタイプ、及び/又はTRNACTION BEGIN命令において有効なトランザクション診断ブロック・アドレスが与えられるかどうかに応じて、ベクトルを、ゼロ又はそれより多いこれらのブロックに格納することができる。例えば、TBEGINが有効TDBアドレスを与える場合、ベクトルは、上述のように、プログラム指定TDB内に格納され、及び/又はアボートがインターセプトをもたらす場合、ベクトルは、上述のようにインターセプトTDB内に格納される。
【0297】
トランザクション診断ブロック内にビットを与えることにより、トランザクションの失敗の診断に使用することができる分岐履歴が与えられる。
【0298】
上述したような診断情報を提供することに加えて、マルチプロセッサの性能を著しく向上させる可能性をもたらす、ロックのような典型的な(粗い粒度の)シリアル化を用いずに、メモリにおける複数の不連続オブジェクトを更新する有効な手段が、さらに提供される。つまり、ロック及びセマフォのような典型的な技術により与えられるより粗い粒度のストレージ・アクセス順序付けを実施することなく、複数の不連続オブジェクトが更新される。面倒な復旧のセットアップなしに投機的実行が与えられ、単純な小さいフットプリント更新のために、制約付きトランザクションが与えられる。
【0299】
トランザクション実行は、これらに限定されるものではないが、部分的インライン化、投機的処理、及びロック省略(lock elision)を含む、様々なシナリオにおいて用いることができる。部分的インライン化において、実行される経路内に含まれる部分的領域は、TBEGIN/TENDにおいてワードラップが行われる。TABORTを内部に含ませ、側部出口(side-exit)上の状態をロールバックすることができる。Javaにおけるような投機については、トランザクションを用いて、逆参照ポインタ上でのヌルチェックを遅延させて、エッジをループさせることができる。ポインタがヌルである場合、トランザクションは、TBEGIN/TEND内に含まれるTABORTを用いて安全にアボートすることができる。
【0300】
ロック省略については、その使用の一例を図19図20に説明し、コード片を以下に提供する。
【0301】
図19は、複数のキュー要素1602a−1602dの二重連結リスト1600を示す。新しいキュー要素1602eがキュー要素の二重連結リスト1600に挿入される。各々のキュー要素1602a−1602eは、正方向ポインタ1604a−1604e及び逆方向ポインタ1606a−1606eを含む。図20に示すように、キュー要素1602eをキュー要素1602bと1602cとの間に挿入するためには、(1)キュー要素1602bを指し示すように逆方向ポインタ1606eを設定する、(2)キュー要素1602cを指し示すように正方向ポインタ1604eを設定する、(3)キュー要素1602eを指し示すように逆方向ポインタ1606cを設定する、及び(4)キュー要素1602eを指し示すように正方向ポインタ1604bを設定する。
【0302】
図19図20に対応する例示的なコード片は、以下の通りである。
*R1−挿入される新しいキュー要素のアドレス
*挿入ポイントのアドレス。新しい要素は、その要素がR2により指し示される前に挿入される。
【表7】
【0303】
一例において、トランザクションがロック省略のために用いられるがフォールバック経路がロックを用いる場合、トランザクションは、少なくともそのロックワードをフェッチして、それが利用可能かどうかを確認する。プロセッサは、別のCPUがロックに非トランザクション・アクセスを行った場合、トランザクションがアボートすることを保証する。
【0304】
本明細書で用いられる場合、ストレージ、中央ストレージ、主ストレージ、メモリ及び主メモリは、慣例によって暗黙的に又は明示的に、特に断りのない限り、交換可能に用いられる。さらに、一実施形態においては、トランザクションの効果的な遅延は、選択されたトランザクションの完了まで、主メモリへのトランザクション・ストアのコミットを遅延させることを含み、別の実施形態においては、トランザクションの効果的な遅延は、メモリに対するトランザクション更新を可能にし、且つ、古い値を保持し、アボート時にメモリを古い値に復元することを含む。
【0305】
当業者であれば理解するように、1つ又は複数の態様は、システム、方法又はコンピュータ・プログラムとして具体化することができる。従って、1つ又は複数の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形態をとることができ、本明細書においては、これらは全て、一般的に「回路」、「モジュール」又は「システム」と呼ぶことがある。さらに、1つ又は複数の態様は、媒体内に具体化されたコンピュータ可読プログラム・コードを有する、1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラムの形態をとることができる。
【0306】
1つ又は複数のコンピュータ可読媒体のいずれかの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子、磁気、光学、電磁気、赤外線若しくは半導体のシステム、装置若しくはデバイス、又はこれらのいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)として、以下のもの、即ち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク型読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈においては、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって又はそれらと関連して用いるためのプログラムを収容又は格納することが可能な、任意の有形媒体とすることができる。
【0307】
図21を参照すると、一例において、コンピュータ・プログラム1700は、例えば、1つ又は複数の態様を提供し、容易にするように、その上にコンピュータ可読プログラム・コード手段又は論理1704を格納するための、1つ又は複数の一時的でないコンピュータ可読ストレージ媒体1702を含む。
【0308】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又はこれらの任意の適切な組み合わせを含む、適切な媒体を用いて伝送することができる。
【0309】
1つ又は複数の態様のための動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk(登録商標)、C++などのようなオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語などのような従来の手続き型プログラミング言語、アセンブラ、又は類似のプログラミング言語を含む、1つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。プログラム・コードは、全体をユーザのコンピュータ上で実行することができ、独立型ソフトウェア・パッケージとして部分的にユーザのコンピュータ上で実行することができ、一部をユーザのコンピュータ上で実行し、一部を遠隔コンピュータ上で実行することができ、又は全体を遠隔コンピュータ若しくはサーバ上で実行することができる。後者のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続されるか、又は、若しくはコンバージド・ネットワークを含むがこれらに限定されるものではない、いずれかのタイプのネットワーク若しくは通信システムを通じてユーザのコンピュータに接続することができ、又は(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)外部コンピュータへの接続をなすことができる。
【0310】
1つ又は複数の態様は、本明細書において、方法、装置(システム)及びコンピュータ・プログラムのフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて、マシンを製造し、その結果、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装するための手段を生成するようにすることができる。
【0311】
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、その結果、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
【0312】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、そのコンピュータ、他のプログラム可能装置、又は他のデバイス上で一連の動作ステップを行わせてコンピュータ実装プロセスを生成し、それにより、そのコンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施するためのプロセスを提供するようにすることもできる。
【0313】
図面内のフローチャート及びブロック図は、種々の実施形態による、システム、方法及びコンピュータ・プログラムの可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実行するための1つ又は複数の実行可能な命令を含む、モジュール、セグメント又はコードの一部を表すことができる。幾つかの代替的な実施において、ブロック内に記された機能は、図面内に記された順序とは異なる順序で行われることがあることにも留意すべきである。例えば、連続して示された2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックは、ときには逆の順序で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェアベースのシステム、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装することができることにも留意されたい。
【0314】
上記に加えて、1つ又は複数の態様は、顧客環境の管理を提供するサービス・プロバイダによって供与、提供、配置、管理、サービス等を行うことができる。例えば、サービス・プロバイダは、1又は複数の顧客のために1つ又は複数の態様を実施するコンピュータ・コード及び/又はコンピュータ・インフラストラクチャの作成、保守、サポート等を行うことができる。見返りに、サービス・プロバイダは、例として、予約申し込み及び/又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、1又は複数の第三者に対する広告内容の販売から支払いを受けることができる。
【0315】
1つの態様において、1つ又は複数の実施形態を実施するために、アプリケーションを配置することができる。一例として、アプリケーションの配置は、1つ又は複数の実施形態を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【0316】
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することができ、そこでは、コードは、コンピューティング・システムと協働して、1つ又は複数の実施形態を実施することができる。
【0317】
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、プロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は、1つ又は複数の実施形態を含む。コードは、コンピュータ・システムと協働して、1つ又は複数の実施形態を実施することができる。
【0318】
種々の実施形態が上述されたが、これらは例にすぎない。例えば、使用できる他のアーキテクチャのコンピューティング環境は、1つ又は複数の実施形態を組み込み、使用することができる。さらに、異なる命令、命令形式、命令フィールド、及び/又は命令の値を使用することができる。加えて、異なる他の及び/又は付加的な診断情報及び/又はトランザクション診断ブロックのタイプを提供/使用することができる。多くの変形が可能である。
【0319】
さらに、他のタイプのコンピューティング環境の恩恵を受け、これを使用することができる。一例として、プログラム・コードを格納及び/又は実行するのに適しており、システム・バスを介してメモリ要素に直接又は間接的に結合された少なくとも2つのプロセッサを含む、データ処理システムを使用することができる。メモリ要素は、例えば、プログラム・コードの実際の実行中に用いられるローカル・メモリ、大容量記憶装置、及び実行中に大容量記憶装置からコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリを含む。
【0320】
入力/出力即ちI/Oデバイス(これらに限定されるものではないが、キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サムドライブ及び他のメモリ媒体等)は、直接システムに結合することもでき、又は介在するI/Oコントローラを介してシステムに結合することができる。ネットワーク・アダプタをシステムに結合させて、データ処理システムが、介在する私的ネットワーク又は公衆ネットワークを通じて他のデータ処理システム又は遠隔プリンタ若しくはストレージ・デバイスに結合できるようにすることもできる。モデム、ケーブル・モデム及びイーサネット・カードは、ネットワーク・アダプタの利用可能なタイプのうちのほんの数例である。
【0321】
図22を参照すると、1つ又は複数の実施形態を実装するためのホスト・コンピュータ・システム5000の代表的なコンポーネントが描かれる。代表的なホスト・コンピュータ5000は、コンピュータ・メモリ(即ち、中央ストレージ)5002と通信する1つ又は複数のCPU5001と、他のコンピュータ若しくはSANなどとの通信のためのストレージ媒体デバイス5011及びネットワーク5010に対するI/Oインターフェースとを含む。CPU5001は、アーキテクチャ化命令セット及びアーキテクチャ化機能を有するアーキテクチャに準拠している。CPU5001は、アクセス・レジスタ変換(ART)5012を有し、これは、プログラム・アドレス(仮想アドレス)をメモリの実アドレスに変換するための動的アドレス変換(DAT)5003により用いられるアドレス空間を選択するためのARTルックアサイド・バッファ(ALB)5013を含む。DATは、典型的には、変換をキャッシュに入れるための変換ルックアサイド・バッファ(TLB)5007を含み、後でコンピュータ・メモリ5002のブロックにアクセスしたときにアドレス変換による遅延を必要とせずに済むように変換をキャッシュに入れるための、変換ルックアサイド・バッファ(TLB)5007を含む。典型的には、キャッシュ5009は、コンピュータ・メモリ5002とプロセッサ5001との間で用いられる。キャッシュ5009は、1つより多くのCPUが利用できる大型キャッシュと、大型キャッシュと各CPUとの間のより小型で高速な(下位レベルの)キャッシュとを有する階層構造とすることができる。いくつかの実施において、下位レベルのキャッシュは、命令フェッチ及びデータ・アクセスのための個別の下位レベル・キャッシュを提供するように分割される。一実施形態において、TXファシリティについては、トランザクション診断ブロック(TDB)5100及び1つ又は複数のバッファ5101を、キャッシュ5009及びメモリ5002の1つ又は複数に格納することができる。一例においては、TXモードにおいて、データは最初にTXバッファに格納され、TXモードが終了すると(例えば、最外TEND)、バッファ内のデータは、メモリに格納(コミット)されるか、又は、アボートがある場合、バッファ内のデータが廃棄される。
【0322】
一実施形態において、命令は、命令フェッチ・ユニット5004によりメモリ5002からキャッシュ5009を介してフェッチされる。命令は、命令デコード・ユニット5006内でデコードされ(幾つかの実施形態においては他の命令と共に)命令実行ユニット5008にディスパッチされる。典型的には、幾つかの実行ユニット5008、例えば、算術演算実行ユニット、浮動小数点実行ユニット及び分岐命令実行ユニットが用いられる。さらに、TXファシリティの一実施形態において、種々のTX制御5110を用いることができる。命令は、実行ユニットにより、必要に応じて命令が指定するレジスタ又はメモリからのオペランドにアクセスすることにより実行される。オペランドがメモリ5002からアクセスされる(ロードされる又はストアされる)場合には、典型的には、ロード/ストア・ユニット5005が、実行されている命令の制御下でアクセスを取り扱う。命令は、ハードウェア回路若しくは内部マイクロコード(ファームウェア)、又はこの両方の組み合わせにより実行することができる。
【0323】
TXファシリティの態様によると、プロセッサ5001は、PSW5102(例えばTX及び/又はアボートPSW)、ネスト化深さ5104、TDBA5106及び1つ又は複数の制御レジスタ5108も含む。
【0324】
既述のように、コンピュータ・システムは、ローカル(又は、主)ストレージ内の情報、並びにアドレス指定、保護、並びに参照及び変更記録を含む。アドレス指定の幾つかの態様は、アドレスの形式、アドレス空間の概念、アドレスの種々のタイプ及び1つのタイプのアドレスが別のタイプのアドレスに変換される方法を含む。主ストレージの一部は、恒久的に割り当てられたストレージ位置を含む。主ストレージは、システムに、直接アドレス可能なデータの高速アクセス・ストレージを提供する。データ及びプログラムの両方とも、これらが処理される前に(入力デバイスから)主ストレージにロードされる。
【0325】
主ストレージは、キャッシュと呼ばれることがある、1つ又は複数のより小型の高速アクセス・バッファ・ストレージを含むことができる。キャッシュは、典型的には、CPU又はI/Oプロセッサと物理的に関連付けられる。物理的構造の、性能を除いた効果及び別個のストレージ媒体の使用は、一般に、プログラムにより観察することができない。
【0326】
命令及びデータ・オペランドに対して、別個のキャッシュを維持することができる。キャッシュ内の情報は、キャッシュ・ブロック又はキャッシュ・ライン(又は、簡単に言えばライン)と呼ばれる整数境界上の連続バイトで維持される。モデルは、キャッシュ・ラインのサイズをバイト単位で戻すEXTRACT CACHE ATTRIBUTE命令を提供することができる。モデルはまた、データ又は命令キャッシュへのストレージのプリフェッチ又はキャッシュからのデータの解放を行うPREFETCH DATA及びPREFETCH DATA RELATIVE LONG命令も提供することができる。
【0327】
ストレージは、ビットの水平の長い文字列として見ることができる。殆どの操作では、ストレージへのアクセスは、左から右への順で進行する。ビットの文字列は、8ビット単位で細分される。この8ビットの単位はバイトと呼ばれ、これは全ての情報形式の基本構成単位である。ストレージ内の各々のバイト位置は、負でない固有の整数により識別され、この整数がバイト位置のアドレス、即ち、簡単にバイト・アドレスである。隣接するバイト位置は連続するアドレスを有し、左端の0から始まって左から右へ順に進行する。アドレスは、符号なしの2進整数であり、24ビット、31ビット又は64ビットである。
【0328】
情報は、ストレージとCPU又はチャネル・サブシステムとの間で、一度に1バイトずつ、又は1グループ分のバイトで伝送される。特に断りのない限り、例えばz/Architectureにおいて、ストレージ内のバイト・グループは、グループの左端のバイトによりアドレス指定される。グループ内のバイト数は、実行される操作により暗黙的に決定される場合、又は明示的に決定される場合がある。CPU操作に使用される場合、バイト・グループはフィールドと呼ばれる。各々のバイト・グループ内において、例えばz/Architectureにおいて、ビットは、左から右の順に番号付けされる。z/Architectureにおいて、左端のビットを「最上位」ビットと呼び、右端のビットを「最下位」ビットと呼ぶことがある。しかしながら、ビット番号はストレージ・アドレスではない。アドレス指定できるのはバイトだけである。ストレージ内の1つのバイトの個々のビットに対して操作を行うためには、そのバイト全体にアクセスされる。1バイトの中のビットには、(z/Architectureにおいて)左から右に0から7までの番号が付けられる。1つのアドレスの中のビットには、24ビット・アドレスの場合は、8−31又は40−63の番号が付けられ、又は31ビット・アドレスの場合は、1−31又は33−63の番号が付けられ、又は64ビット・アドレスの場合は、0−63の番号が付けられる。一例においては、ビット8−31及び1−31は、32ビット長の記憶位置(例えばレジスタ)にあるアドレスに適用され、一方、ビット40−63及び33−63は、64ビット長の記憶位置にあるアドレスに適用される。複数バイトの任意の他の固定長形式において、形式を構成するビットは、0から始まって連続的に番号が付けられる。エラー検出のため、また好ましくは訂正のため、各々のバイト又はバイト・グループと共に1又は複数の検査ビットを伝送することができる。こうした検査ビットは、マシンにより自動的に生成され、プログラムにより直接制御することはできない。ストレージ容量は、バイト数で表現される。ストレージ・オペランド・フィールドの長さが命令のオペコードで暗黙指定される場合、そのフィールドは固定長を有するといわれ、この長さは1バイト、2バイト、4バイト、8バイト又は16バイトとすることができる。幾つかの命令に対しては、より大きいフィールドが暗黙指定される。ストレージ・オペランドの長さが暗黙指定されず、明示的に指定される場合は、そのフィールドは可変長を有するといわれる。可変長オペランドは、1バイトのインクリメント(又は幾つかの命令では、2バイトの倍数又は他の倍数で)で長さが変化し得る。情報がストレージ内に配置されると、ストレージへの物理的パスの幅が格納されるフィールドの長さより大きい場合であっても、指定したフィールドに含まれているバイト位置の内容のみが置き換えられる。
【0329】
情報の特定の単位は、ストレージ内の整数境界上にあるべきである。境界は、そのストレージ・アドレスがバイトでの単位の長さの倍数である場合に、情報の単位に対して整数であると呼ばれる。整数境界上にある2バイト、4バイト、8バイト、16バイト及び32バイトのフィールドには、特別な名称が与えられる。ハーフワードは、2バイト境界上にある2個の連続したバイトのグループであり、これは命令の基本構成単位である。ワードは、4バイト境界上にある4個の連続したバイトのグループである。ダブルワードは、8バイト境界上にある8個の連続したバイトのグループである。クワッドワードは、16バイト境界上にある16個の連続したバイトのグループである。オクトワードは、32バイト境界上にある32個の連続したバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、クワッドワード及びオクトワードを指定するとき、そのアドレスの2進表現では、それぞれ1個、2個、3個、4個又は5個の右端の0ビットを含む。命令は、2バイト整数境界上にあるべきである。殆どの命令のストレージ・オペランドは、境界位置合わせ要件を有さない。
【0330】
命令及びデータ・オペランドに対して別個のキャッシュを実装するデバイスにおいては、ストアが後にフェッチされる命令を変更するかどうかに関係なく、プログラムが、後にフェッチされるキャッシュ・ラインに格納される場合、著しい遅延が生じ得る。
【0331】
一例において、実施形態は、ソフトウェア(ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどとも呼ばれる場合があるが、そのいずれも1つ又は複数の実施形態と整合性がある)により実施することができる。図22を参照すると、1つ又は複数の態様を具体化するソフトウェア・プログラム・コードは、CD−ROMドライブ、テープドライブ、又はハードドライブといった長期ストレージ媒体デバイス5011から、ホスト・システム5000のプロセッサ5001によりアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMのようなデータ処理システムと共に使用するための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させても、又はコンピュータ・メモリ5002からユーザに分散させても、又はこうした他のシステムのユーザが使用するために、ネットワーク5010上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0332】
ソフトウェア・プログラム・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラムの機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体デバイス5011から相対的により高速のコンピュータ・ストレージ5002にページングされ、そこでプロセッサ5001による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを配布する技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープ等)上に作成され格納されたとき、「コンピュータ・プログラム」と呼ばれることが多い。コンピュータ・プログラム媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0333】
図23は、1つ又は複数の実施形態を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。図23のシステム5020は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム5021を含む。ベース・コンピュータ・システム5021は、1つ又は複数のプロセッサ5026と、周知の技術に従ってプロセッサ5026とシステム5021の他のコンポーネントを接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ5026を、ハードドライブ(例えば、磁気媒体、CD、DVD及びフラッシュ・メモリのいずれかを含む)又はテープドライブを含むことができる、メモリ5025及び長期ストレージ5027に接続する。システム5021はまた、バスを介して、マイクロプロセッサ5026を、キーボード5024、マウス5023、プリンタ/スキャナ5030、及び/又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、1つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、LCDスクリーン又はモニタなどのディスプレイ装置5022をマイクロプロセッサ5026にも接続する。
【0334】
システム5021は、ネットワーク5029と通信する5028ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータ・ネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット又はモデムである。代替的に、システム5021は、CDPD(セルラー・デジタル・パケット・データ)カードのような無線インターフェースを用いて通信することもできる。システム5021は、ローカル・エリア・ネットワーク(LAN)又は広域ネットワーク(WAN)又はシステム5021内のこうした他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント/サーバ構成におけるクライアントとすることができる。これら構成の全て、並びに、適切な通信ハードウェア及びソフトウェアは、当技術分野において周知である。
【0335】
図24は、1つ又は複数の実施形態を実施することができるデータ処理ネットワーク5040を示す。データ処理ネットワーク5040は、各々が複数の個々のワークステーション5041、5042、5043、5044を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、1つ又は複数のLANを含ませることができ、そこで、LANは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【0336】
さらに図24を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ(クライアント・サーバ5046)、又はアプリケーション・サーバ(データ・リポジトリにアクセスすることができ、且つ、ワークステーション5045から直接アクセスすることもできる遠隔サーバ5048)のような、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ5046は、各々の個々のネットワークへの入力点のとして働く。ゲートウェイは、1つのネットワーク・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ5046は、通信リンクによって別のネットワーク(例えば、インターネット5047)に結合できることが好ましい。ゲートウェイ5046はまた、通信リンクを用いて、1つ又は複数のワークステーション5041、5042、5043、5044に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なIBM eServer System zサーバを用いて実装することができる。
【0337】
図23及び図24を同時に参照すると、1つ又は複数の態様を具体化することができるソフトウェア・プログラム・コード5031には、一般的に、CD−ROMドライブ又はハードドライブといった長期ストレージ媒体5027から、システム5020のプロセッサ5026によってアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ5050、5051に分散させても、又は、こうした他のシステムのユーザが用いるために、ネットワーク上の1つのコンピュータ・システムのメモリ若しくはストレージから他のコンピュータ・システムに分散させてもよい。
【0338】
代替的に、プログラム・コードをメモリ5025内で具体化し、プロセッサ・バスを用いてプロセッサ5026によってプログラム・コードにアクセスすることができる。このようなプログラム・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラム5032の機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体5027から高速メモリ5025にページングされ、そこでプロセッサ5026による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを配布する技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープなどを含む)に格納されたとき、「コンピュータ・プログラム」と呼ばれることが多い。コンピュータ・プログラム媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0339】
プロセッサが最も容易に利用できるキャッシュ(通常、プロセッサの他のキャッシュよりも高速で小さい)は、最下位(L1又はレベル1)のキャッシュであり、主ストア(主メモリ)は、最上位レベルのキャッシュ(3つのレベルがある場合にはL3)である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ(I−キャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(D−キャッシュ)とに分割されることが多い。
【0340】
図25を参照すると、プロセッサ5026についての例示的なプロセッサの実施形態が示される。典型的には、メモリ・ブロックをバッファに入れてプロセッサ性能を向上させるために、1つ又は複数のレベルのキャッシュ5053が用いられる。キャッシュ5053は、用いられる可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64バイト、128バイト、又は256バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス(メモリ及びキャッシュ内のラインのコピーの同期)は、多くの場合、当技術分野において周知の種々の「スヌープ」アルゴリズムによって与えられる。プロセッサ・システムの主メモリ・ストレージ5025は、キャッシュと呼ばれることが多い。4つのレベルのキャッシュ5053を有するプロセッサ・システムにおいて、主ストレージ5025は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ(DASD、テープ等)の一部だけを保持するので、レベル5(L5)のキャッシュと呼ばれることがある。主ストレージ5025は、オペレーティング・システムによって主ストレージ5025との間でページングされるデータのページを「キャッシュに入れる」。
【0341】
プログラム・カウンタ(命令カウンタ)5061は、実行される現行の命令のアドレスを常時監視している。z/Architectureプロセッサのプログラム・カウンタは64ビットであり、従来のアドレッシング制限をサポートするために、31ビット又は24ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのPSW(プログラム状況ワード)内で具体化される。従って、例えば、オペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である(プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ)。プログラムのPSWは、プログラムがアクティブでない間、プログラム・カウンタ値を保持し、オペレーティング・システムが実行されている間、オペレーティング・システムの(PSW内の)プログラム・カウンタが用いられる。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。RISC命令は、典型的には固定長であり、CISC命令は、典型的には可変長である。IBM z/Architectureの命令は、2バイト、4バイト、又は6バイトの長さを有するCISC命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立操作により、プログラム・カウンタ5061が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報(条件コードのような)と共にプログラム状況ワード内に保存され、実行される新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ5061にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
【0342】
典型的には、プロセッサ5026の代わりに命令をフェッチするために、命令フェッチ・ユニット5055が用いられる。フェッチ・ユニットは、「次の順次命令」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。今日の命令フェッチ・ユニットは、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む16バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
【0343】
次いで、フェッチされた命令が、プロセッサ5026によって実行される。一実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット5056に渡される。ディスパッチ・ユニットは命令をデコードし、デコードされた命令についての情報を適切なユニット5057、5058、5060に転送する。実行ユニット5057は、典型的には、命令フェッチ・ユニット5055からデコードされた算術命令についての情報を受け取り、命令のオペコードに従ってオペランドに関する算術演算を行う。オペランドは、好ましくは、メモリ5025、アーキテクチャ化レジスタ5059、又は実行される命令の即値フィールドのいずれかから、実行ユニット5057に与えられる。実行の結果は、格納された場合には、メモリ5025、レジスタ5059、又は他のマシン・ハードウェア(制御レジスタ、PSWレジスタなどのような)内に格納される。
【0344】
仮想アドレスは、動的アドレス変換5062、随意的にアクセス・レジスタ変換5063を用いて、実アドレスに変換される。
【0345】
プロセッサ5026は、典型的には、命令の機能を実行するための1つ又は複数の実行ユニット5057、5058、5060を有する。図26を参照すると、実行ユニット5057は、インターフェース論理5071を介して、アーキテクチャ化された汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、ロード・ストア・ユニット5060、及び他のプロセッサ・ユニット5065と通信することができる。実行ユニット5057は、幾つかのレジスタ回路5067、5068、5069を用いて、算術論理演算ユニット(ALU)5066が動作する情報を保持することができる。ALUは、加算、減算、乗算、及び除算などの算術演算、並びに、論理積、論理和、及び排他的論理和、ローテート及びシフトのような論理関数を実行する。ALUは、設計に依存する専用の演算をサポートすることが好ましい。他の回路は、例えば条件コード及び回復サポート論理を含む、他のアーキテクチャ化ファシリティ5072を提供することができる。典型的には、ALU演算の結果は、出力レジスタ回路5070に保持され、この出力レジスタ回路5070が、結果を種々の他の処理機能に転送することができる。多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【0346】
例えばADD命令は、算術及び論理機能を有する実行ユニット5057で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対してオペコードが定めた関数を行うことにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ADD命令は、命令のレジスタ・フィールドによって特定された2つのレジスタ5059内に見出されるオペランドに対して、実行ユニット5057により実行することができる。
【0347】
実行ユニット5057は、2つのオペランドに対して算術加算を実行し、結果を第3オペランドに格納し、ここで第3オペランドは、第3のレジスタであっても又は2つのソース・レジスタのいずれかであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和、及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除法のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット(ALU)5066を用いることが好ましい。スカラー演算のために設計されたALU5066もあり、浮動小数点のために設計されたものALU5066もある。データは、アーキテクチャに応じて、ビッグ・エンディアン(最下位のバイトが最も高いバイト・アドレスである)、又はリトル・エンディアン(最下位のバイトが最も低いバイト・アドレスである)とすることができる。IBM z/Architectureは、ビッグ・エンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、1の補数、又は2の補数とすることができる。2の補数における負の値又は正の値は、ALU内で加法しか必要としないため、ALUが減算能力を設計する必要がないという点で、2の補数は有利である。数値は、通常、省略表現で記述され、12ビット・フィールドは、4,096バイトブロックのアドレスを定め、通常、例えば4Kバイト(キロバイト)ブロックのように記述される。
【0348】
図27を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット5058に送られ、この分岐ユニット5058は、多くの場合、分岐履歴テーブル5082のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。分岐ユニット5058は、複数の入力レジスタ回路5075、5076、5077と、出力レジスタ回路5080とを有するALU5074を用いることができる。分岐ユニット5058は、例えば、汎用レジスタ5059、デコード・ディスパッチ・ユニット5056、又は他の回路5073と通信する5081ことができる。
【0349】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるI/O割り込み信号、又は(マルチスレッド環境における)複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報をロードすることが好ましい。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値と、条件コードと、メモリ変換情報と、アーキテクチャ化されたレジスタの内容とを含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード(マイクロコード、ピココード、又はライセンス内部コード(LIC))単独で又はその組み合わせで実施することができる。
【0350】
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与えることができ、汎用レジスタ又は専用レジスタ(例えば、浮動小数点レジスタ)のいずれかを明示的に指し示す1つ又は複数のレジスタ・フィールドを与えることができる。命令は、オペコード・フィールドによって、オペランドとして識別されるインプライド・レジスタを用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。z/Architectureの長変位ファシリティにより例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、ベース・レジスタ、索引レジスタ、及び即値フィールド(変位フィールド)を定め、これらが、例えば互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置は、典型的には、特に断りのない限り、主メモリ(主ストレージ)内の記憶位置を意味する。
【0351】
図28を参照すると、プロセッサは、ロード/ストア・ユニット5060を用いて、ストレージにアクセスする。ロード/ストア・ユニット5060は、メモリ5053内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ5059又は別のメモリ5053の記憶位置にロードすることによってロード操作を行うことができ、或いは、メモリ5053内のターゲット・オペランドのアドレスを取得し、レジスタ5059又は別のメモリ5053の記憶位置から取得したデータをメモリ5053内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード/ストア・ユニット5060は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がインオーダー式に実行されたという外観を維持することになる。ロード/ストア・ユニット5060は、汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、キャッシュ/メモリ・インターフェース5053、又は他の要素5083と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行って操作をインオーダー式に保持するための、種々のレジスタ回路、ALU5085、及び制御論理5090を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード/ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなインオーダー式に実行されたように見えるようにする機能を提供する。
【0352】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、単に仮想アドレスをオフセット値にプリフィックス付加すること、1つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、種々の動的アドレス変換(DAT)技術の1つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。z/Architectureでは、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層構成が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)を用いることにより改善されることが多い。DATが変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のTLBのエントリを用いることが可能になる。TLBの内容は、LRUを含む種々の置換アルゴリズムによって管理することができる。
【0353】
プロセッサがマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、I/O、キャッシュ、TLB、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。キャッシュ・コヒーレンシを保持する際に、一般的には「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか1つの状態にあるものとしてマーク付けすることができる。
【0354】
I/Oユニット5054(図25)は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。I/Oユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。IBMによるSystem zのようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのI/Oユニットである。
【0355】
さらに、他のタイプのコンピューティング環境が、1つ又は複数の態様から利益を得ることができる。一例として、環境は、特定のアーキテクチャ(例えば、命令実行、アドレス変換などのアーキテクチャ化された機能、及びアーキテクチャ化されたレジスタを含む)又はそのサブセットをエミュレートする(例えば、プロセッサ及びメモリを有するネイティブ・コンピュータ・システム上で)エミュレータ(例えば、ソフトウェア又は他のエミュレーション機構)を含むことができる。このような環境においては、エミュレータを実行しているコンピュータが、エミュレートされる機能とは異なるアーキテクチャを有することができたとしても、エミュレータの1又は複数のエミュレーション機能により、1つ又は複数の実施形態が実施され得る。一例として、エミュレーション・モードにおいては、エミュレートされる特定の命令又は操作がデコードされ、適切なエミュレーション機能が構築され、個々の命令又は操作を実施する。
【0356】
エミュレーション環境においては、ホスト・コンピュータは、例えば、命令及びデータを格納するためのメモリと、メモリから命令をフェッチし、随意的に、フェッチされた命令のためのローカル・バッファリングを提供するための命令フェッチ・ユニットと、フェッチされた命令を受信し、フェッチされた命令のタイプを判断するための命令デコード・ユニットと、命令を実行するための命令実行ユニットとを含む。実行は、データをメモリからレジスタ内にロードすること、データをレジスタから再びメモリに格納すること、又はデコード・ユニットにより判断されるように、何らかのタイプの算術演算又は論理演算を実行することを含むことができる。一例においては、各ユニットは、ソフトウェアで実装される。例えば、ユニットが実行する演算は、エミュレータ・ソフトウェア内の1つ又は複数のサブルーチンとして実装される。
【0357】
より具体的には、メインフレームにおいて、アーキテクチャ化されたマシン命令は、通常、プログラマによって、多くの場合コンパイラ・アプリケーションを介して、今日では「C」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、z/ArchitectureのIBMサーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存の及び将来のIBMメインフレーム・サーバにおいて、及び、IBMの他のマシン(例えば、Power Systemsサーバ及びSystem xサーバ)上で、エミュレートすることができる。これらの命令は、IBM社、Intel社、AMD社などによって製造されたハードウェアを用いて種々のマシン上でLinux(登録商標)を実行しているマシンにおいて実行することができる。Z/Architecture下でそのハードウェア上で実行することに加えて、Linuxを用いること、並びに、一般に実行がエミュレーション・モードにあるHercules、UMX、又はFSI(Fundamental Software,Inc)によるエミュレーションを用いるマシンを用いることもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサによって、エミュレーション・ソフトウェアが実行され、エミュレートされたプロセッサのアーキテクチャをエミュレートする。
【0358】
ネイティブ・プロセッサは、一般的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に1つ又は複数のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサにより実行するために、その1つ又は複数のエミュレートされたマシン命令を、対応するネイティブマシン命令のグループに変換することができる。これらの変換された命令は、より速い変換を達成できるようにキャッシュに入れることができる。それにも関わらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証しなければならない。さらに、エミュレーション・ソフトウェアは、これらに限定されるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻(TOD)クロック、及びI/Oサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、オペレーティング・システム又はエミュレートされたプロセッサ上で実行するように設計されたアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行することができる。
【0359】
エミュレートされた特定の命令がデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサの機能をエミュレートするエミュレーション・ソフトウェア機能は、例えば、「C」サブルーチン若しくはドライバにおいて、又は好ましい実施形態の説明を理解した後で当業者の技術の範囲内にあるような特定のハードウェアのためにドライバを提供する他の何らかの方法で実装される。Beausoleil他による「Multiprocessor for Hardware Emulation」という名称の特許文献1、Scalzi他による「Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor」という名称の特許文献2、Davidian他による「Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions」という名称の特許文献3、Gorishek他による「Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non−Native Code to Run in a System」という名称の特許文献4、Lethin他による「Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method」という名称の特許文献5、Eric Trautによる「Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions」という名称の特許文献6及び他の多くを含むがこれらに限定されない、種々のソフトウェア及びハードウェア・エミュレーションの特許は、当業者が利用可能なターゲット・マシンのための異なるマシン用に設計された命令形式のエミュレーションを達成する様々な既知の方法を示す。
【0360】
図29において、ホスト・アーキテクチャのホスト・コンピュータ・システム5000’をエミュレートする、エミュレートされたホスト・コンピュータ・システム5092の一例が提供される。エミュレートされたホスト・コンピュータ・システム5092では、ホスト・プロセッサ(CPU)5091は、エミュレートされたホスト・プロセッサ(又は、仮想ホスト・プロセッサ)であり、且つ、ホスト・コンピュータ5000’のプロセッサ5091のものとは異なるネイティブな命令セット・アーキテクチャを有するエミュレーション・プロセッサ5093を含む。エミュレートされたホスト・コンピュータ・システム5092は、エミュレーション・プロセッサ5093がアクセス可能なメモリ5094を有する。例示的な実施形態において、メモリ5094は、ホスト・コンピュータ・メモリ5096の部分と、エミュレーション・ルーチン5097の部分とに区分化される。ホスト・コンピュータ・メモリ5096は、ホスト・コンピュータ・アーキテクチャに従い、エミュレートされたホスト・コンピュータ・システム5092のプログラムに利用可能である。エミュレーション・プロセッサ5093は、エミュレートされたプロセッサ5091のもの以外のアーキテクチャのアーキテクチャ化された命令セットのネイティブ命令を実行し、このネイティブ命令はエミュレーション・ルーチン・メモリ5097から取得されたものであり、且つ、エミュレーション・プロセッサ5093は、シーケンス及びアクセス/デコード・ルーチンにおいて取得される1つ又は複数の命令を用いることにより、ホスト・コンピュータ・メモリ5096の中のプログラム由来の実行のためのホスト命令にアクセスすることができ、このシーケンス及びアクセス/デコード・ルーチンは、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判断することができる。ホスト・コンピュータ・システム5000’のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びI/Oサブシステムのサポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化ファシリティ・ルーチンによってエミュレートすることができる。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を高めるために、エミュレーション・プロセッサ5093において利用可能な(汎用レジスタ、及び仮想アドレスの動的変換といった)機能を利用することもできる。ホスト・コンピュータ5000’の機能をエミュレートする際にプロセッサ5093を補助するために、専用のハードウェア及びオフ・ロード・エンジンを設けることもできる。
【0361】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指示するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
【0362】
以下の特許請求の範囲に存在する場合、「手段又はステップと機能との組合せ(ミーンズ又はステップ・プラス・ファンクション)」要素の対応する構造、材料、動作及び均等物は、明確に特許請求された他の請求要素と共に機能を実行するための任意の構造体、材料、又は行為を含むことを意図したものである。本発明の説明は、例証及び説明のためだけに提示されたものであり、網羅的であること又は本発明を開示した形態に限定することを意図したものではない。当業者には、本発明の範囲から逸脱しない多くの修正物及び変形物が明らかとなるであろう。実施形態は、本発明の原理及び実際の用途を最もよく説明するため、及び、当業者が、企図した特定の用途に適するように種々の修正を有する種々の実施形態に関して本発明を理解することができるように、選択され記述された。
【符号の説明】
【0363】
100:コンピューティング環境
102:中央プロセッサ・コンプレックス(CPC)
106:I/Oデバイス
108:制御ユニット
110:中央プロセッサ
112:パーティション
114:論理パーティション・ハイパーバイザ
115:入力/出力サブシステム
200:TRANSACTION BEGIN(TBEGIN)命令
202、302、402、502、702a、702b、802:オペコード・フィールド
204、304、504、708:ベース・フィールド
206、306、506、710:変位フィールド
208、308:即値フィールド
210、310:汎用レジスタ保存マスク(GRSM)
212、312:AR変更許可(A)
214:浮動小数点演算許可(F)
216:プログラム割り込みフィルタ処理制御(PIFC)
300:TRANSACTION BEGIN constrained(TBEGINC)命令
400:TRANSACTION END(TEND)命令
500:TRANSACTION ABORT(TABORT)命令
600:ネスト化されたトランザクション
700:NONTRANSACTIONAL STORE命令
704、804:レジスタ・フィールド
706:インデックス・フィールド
800:EXTRACT TRANSACTION NESTING DEPTH命令
900:トランザクション診断ブロック(TDB)
1600:二重連結リスト
1700:コンピュータ・プログラム製品
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29