(57)【要約】【課題】【解決手段】独立ロード／ストア命令は、ＣＰＵによって実行された場合、２つの独立メモリ位置からのオペランドにアクセスし、２つのオペランドが、他のＣＰＵからのオペランドへの介入ストアなしに、ブロック同時インターロック・フェッチを使用してアトミックにアクセスされたように見えるか否かを示すように、条件コード・インジケータを設定する。独立ペア・ロード形式の命令では、アクセスはロードであり、独立データは汎用レジスタに格納される。【選択図】  図１５
2013519955.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサ・システムのプロセッサ内で独立ロード／ストア（ＬＳＤ）命令を実行するためのコンピュータ実装方法であって、
実行のための独立ロード／ストア命令を取得することを含み、前記独立ロード／ストア命令は演算コードを含み、前記実行は、
前記取得された演算コードに基づいてＬＳＤ指定演算を実行することを含み、前記演算は、メモリ内の１つまたは複数のオペランドにアクセスすることを含み、
前記マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の１つまたは複数のオペランドへの前記アクセス時に前記１つまたは複数のオペランドのうちの１つを修正した可能性があるかどうかの判定に応答して、第１のインジケータ値を設定することであって、前記第１のインジケータ値は、前記マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の前記１つまたは複数のオペランドへの前記アクセス時に前記１つまたは複数のオペランドのうちの１つを修正した可能性があるかどうかを示す、設定することを含む、
方法。
【請求項２】
前記第１のインジケータ値は、第１の条件コード値または第２の条件コード値のいずれか１つを備え、
ストア・イベントが、前記１つまたは複数のオペランドのうちの、前記メモリ内の第１のオペランドまたは前記メモリ内の第２のオペランドのうちのいずれか１つを前記アクセス時に修正した可能性がある旨の判定に応答して、前記第１の条件コード値を設定することであって、前記第１の条件コード値は、前記メモリ内の前記第１のオペランドまたは前記メモリ内の前記第２のオペランドのいずれかが前記アクセス時に修正された可能性があることを示す、設定すること、および
前記メモリ内の前記第１のオペランドまたは前記メモリ内の前記第２のオペランドのいずれかを前記アクセス時に修正したストア・イベントはない旨の判定に応答して、前記第２の条件コード値を設定することであって、前記第２の条件コード値は、前記メモリ内の前記第１のオペランドまたは前記メモリ内の前記第２のオペランドのいずれも前記アクセス時に修正されていないことを示す、設定すること、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記ＬＳＤ命令は独立ペア・ロード（ＬＰＤ）命令であり、メモリ内の前記１つまたは複数のオペランドにアクセスすることは、メモリから第１のオペランドおよび第２のオペランドをフェッチすることを含み、
前記フェッチされた第１のオペランドおよび前記フェッチされた第２のオペランドを、前記ＬＰＤ命令によって指定された１つまたは複数のレジスタ内に格納すること、をさらに含む、請求項２に記載の方法。
【請求項４】
前記独立ペア・ロード命令は、第１の汎用レジスタを識別する第１の汎用レジスタ・フィールドと、第２の汎用レジスタを識別する第２の汎用レジスタ・フィールドと、前記第１のレジスタおよび前記第２のレジスタを識別する第３の汎用レジスタ・フィールドとを備え、
前記第１の汎用レジスタ・フィールドによって識別された前記第１の汎用レジスタから第１のアドレスを取得すること、および
前記取得された第１のアドレスを、前記メモリ内の前記第１のオペランドをフェッチするために使用すること、および
前記メモリ内の前記第２のオペランドの第２のアドレスを、前記第２の汎用レジスタ・フィールドによって識別された第２の汎用レジスタから取得すること、および
前記取得された第２のアドレスを、メモリ内の前記第２のオペランドをフェッチするために使用すること、
をさらに含む方法であって、
前記ＬＳＤ指定演算は、独立ペア・ロード演算であり、前記１つまたは複数のレジスタは第１のレジスタおよび第２のレジスタからなるレジスタ・ペアであり、前記第１のレジスタは前記第３のレジスタ・フィールド（Ｒ３）によって指定された偶数アドレスにあり、前記第２のレジスタは増分された第３のレジスタ・フィールド（Ｒ３＋１）によって指定された奇数アドレスにあって、前記第１のオペランドは前記第１のレジスタ内に格納され、前記第２のオペランドは前記第２のレジスタ内に格納される、
請求項３に記載の方法。
【請求項５】
前記取得された独立ペア・ロード命令は、第１の変位フィールドおよび第２の変位フィールドをさらに備え、
前記第１のオペランドを前記メモリ内にフェッチするための第１のメモリ・アドレスを作成するために、前記第１の変位フィールドおよび前記取得された第１のアドレスを算術的に加算すること、および
前記第２のオペランドを前記メモリ内にフェッチするための第２のメモリ・アドレスを作成するために、前記第２の変位フィールドおよび前記取得された第２のアドレスを算術的に加算すること、
をさらに含む、請求項４に記載の方法。
【請求項６】
前記マルチプロセッサ・システムの複数のプロセッサからストア・イベントを受信すること、および
前記受信したストア動作のデータを前記メモリに格納すること、
をさらに含む、請求項１に記載の方法。
【請求項７】
コンピュータ・アーキテクチャ用に定義された前記独立ペア・ロード命令が、代替コンピュータ・アーキテクチャの中央処理ユニットによってフェッチおよび実行され、
前記独立ペア・ロード命令を、前記独立ペア・ロード命令の前記動作をエミュレートするための所定のソフトウェア・ルーチンを識別するために解釈すること、および
マシン命令を実行するための方法の諸ステップを実行するために前記所定のソフトウェア・ルーチンを実行することを含む、前記独立ペア・ロード命令を実行すること、
をさらに含む、請求項５に記載の方法。
【請求項８】
マルチプロセッサ・システムのプロセッサ内で独立ロード／ストア（ＬＳＤ）命令を実行するためのコンピュータ・システムであって、
メモリと、
前記メモリと通信する処理ユニットとを備え、前記処理ユニットは、メモリから命令をフェッチするための命令フェッチ・ユニットと、フェッチされた命令を実行するための１つまたは複数の実行ユニットとを備え、
前記コンピュータ・システムは、
実行のための独立ロード／ストア命令を取得することを含む方法を実行することが可能であり、前記独立ロード／ストア命令は演算コードを含み、前記実行は、
前記取得された演算コードに基づいてＬＳＤ指定演算を実行することを含み、前記演算は、メモリ内の１つまたは複数のオペランドにアクセスすることを含み、
前記マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の１つまたは複数のオペランドへの前記アクセス時に前記１つまたは複数のオペランドのうちの１つを修正した可能性があるかどうかの判定に応答して、第１のインジケータ値を設定することであって、前記第１のインジケータ値は、前記マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の前記１つまたは複数のオペランドへの前記アクセス時に前記１つまたは複数のオペランドのうちの１つを修正した可能性があるかどうかを示す、設定することを含む、
コンピュータ・システム。
【請求項９】
前記第１のインジケータ値は、第１の条件コード値または第２の条件コード値のいずれか１つを備え、前記方法は、
ストア・イベントが、前記１つまたは複数のオペランドのうちの、前記メモリ内の第１のオペランドまたは前記メモリ内の第２のオペランドのうちのいずれか１つを前記アクセス時に修正した可能性がある旨の判定に応答して、前記第１の条件コード値を設定することであって、前記第１の条件コード値は、前記メモリ内の前記第１のオペランドまたは前記メモリ内の前記第２のオペランドのいずれかが前記アクセス時に修正された可能性があることを示す、設定すること、および
前記メモリ内の前記第１のオペランドまたは前記メモリ内の前記第２のオペランドのいずれかを前記アクセス時に修正したストア・イベントはない旨の判定に応答して、前記第２の条件コード値を設定することであって、前記第２の条件コード値は、前記メモリ内の前記第１のオペランドまたは前記メモリ内の前記第２のオペランドのいずれも前記アクセス時に修正されていないことを示す、設定すること、
をさらに含む、請求項８に記載のコンピュータ・システム。
【請求項１０】
前記ＬＳＤ命令は独立ペア・ロード（ＬＰＤ）命令であり、メモリ内の前記１つまたは複数のオペランドにアクセスすることは、メモリから第１のオペランドおよび第２のオペランドをフェッチすることを含み、前記方法は、
前記フェッチされた第１のオペランドおよび前記フェッチされた第２のオペランドを、前記ＬＰＤ命令によって指定された１つまたは複数のレジスタ内に格納すること、をさらに含む、請求項９に記載のコンピュータ・システム。
【請求項１１】
前記独立ペア・ロード命令は、第１の汎用レジスタを識別する第１の汎用レジスタ・フィールドと、第２の汎用レジスタを識別する第２の汎用レジスタ・フィールドと、前記第１のレジスタおよび前記第２のレジスタを識別する第３の汎用レジスタ・フィールドとを備え、前記方法は、
前記第１の汎用レジスタ・フィールドによって識別された前記第１の汎用レジスタから第１のアドレスを取得すること、および
前記取得された第１のアドレスを、前記メモリ内の前記第１のオペランドをフェッチするために使用すること、および
前記メモリ内の前記第２のオペランドの第２のアドレスを、前記第２の汎用レジスタ・フィールドによって識別された第２の汎用レジスタから取得すること、および
前記取得された第２のアドレスを、メモリ内の前記第２のオペランドをフェッチするために使用すること、
をさらに含み、
前記ＬＳＤ指定演算は、独立ペア・ロード演算であり、前記１つまたは複数のレジスタは第１のレジスタおよび第２のレジスタからなるレジスタ・ペアであり、前記第１のレジスタは前記第３のレジスタ・フィールド（Ｒ３）によって指定された偶数アドレスにあり、前記第２のレジスタは増分された第３のレジスタ・フィールド（Ｒ３＋１）によって指定された奇数アドレスにあって、前記第１のオペランドは前記第１のレジスタ内に格納され、前記第２のオペランドは前記第２のレジスタ内に格納される、
請求項１０に記載のコンピュータ・システム。
【請求項１２】
前記取得された独立ペア・ロード命令は、第１の変位フィールドおよび第２の変位フィールドをさらに備え、前記方法は、
前記第１のオペランドを前記メモリ内にフェッチするための第１のメモリ・アドレスを作成するために、前記第１の変位フィールドおよび前記取得された第１のアドレスを算術的に加算すること、および
前記第２のオペランドを前記メモリ内にフェッチするための第２のメモリ・アドレスを作成するために、前記第２の変位フィールドおよび前記取得された第２のアドレスを算術的に加算すること、
をさらに含む、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記マルチプロセッサ・システムの複数のプロセッサからストア・イベントを受信すること、および
前記受信したストア動作のデータを前記メモリに格納すること、
をさらに含む、請求項８に記載のコンピュータ・システム。
【請求項１４】
コンピュータ・アーキテクチャ用に定義された前記独立ペア・ロード命令が、代替コンピュータ・アーキテクチャの中央処理ユニットによってフェッチおよび実行され、前記方法は、
前記独立ペア・ロード命令を、前記独立ペア・ロード命令の前記動作をエミュレートするための所定のソフトウェア・ルーチンを識別するために解釈すること、および
マシン命令を実行するための方法の諸ステップを実行するために前記所定のソフトウェア・ルーチンを実行することを含む、前記独立ペア・ロード命令を実行すること、
をさらに含む、請求項１２に記載のコンピュータ・システム。
【請求項１５】
独立メモリ・オペランドをフェッチするためのコンピュータ実装方法であって、
プロセッサにより、独立メモリ・オペランドをフェッチするための１つまたは複数の命令を備える第１のルーチンを実行することであって、前記命令は、メモリから２つの独立オペランドをロードするため、および条件コード値を設定するための、独立ペア・ロード命令を備える、実行すること、
２つの独立オペランドが、他のプロセッサからの前記２つの独立オペランドのいずれかへの介入ストアを用いてロードされた可能性があることを示す、前記条件コード値に応答して、前記独立メモリ・オペランドをメモリからフェッチするための命令を含む第２のルーチンを実行させること、
２つの独立オペランドが、前記２つの独立オペランドのいずれかへの介入ストアを用いずにロードされたことを示す、前記条件コード値に応答して、前記ロードされた２つの独立オペランドを使用するための第３のルーチンへ進むこと、
を含む、コンピュータ実装方法。
【請求項１６】
前記条件コード値が、前記２つの独立オペランドが前記２つの独立オペランドのいずれかへの介入ストアを用いずにロードされたことを示すまで、前記第２のルーチンを反復させることをさらに含む、請求項１５に記載のコンピュータ・プログラム。
【請求項１７】
反復の制限値を設定すること、
前記２つの独立オペランドが、前記２つの独立オペランドのいずれかへの介入ストアを伴ってロードされた可能性があることを示す、前記条件コード値に応答して、前記第２のルーチンを、前記第２のルーチンが前記制限値によって指定された回数を反復するまで、または、前記２つの独立オペランドが前記２つの独立オペランドのいずれかへの介入ストアを用いずにロードされたことを前記条件コード値が示すまで、反復させること、
をさらに含む、請求項１５に記載のコンピュータ・プログラム。
【請求項１８】
前記方法は、前記２つの独立オペランドを汎用レジスタのそれぞれの位置にロードすることをさらに含む、請求項１５に記載のコンピュータ・プログラム。
【請求項１９】
マルチプロセッサ・システムのプロセッサ内で独立ロード／ストア（ＬＳＤ）命令を実行するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、処理回路によって読み取り可能な有形のストレージ・メディアを備え、前記請求項１から７または１５から１８のいずれか一項に記載の方法を実行するための前記処理回路による実行のための命令を格納する、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ・システムに関し、より具体的には、コンピュータ・システム・プロセッサ命令機能に関する。
【背景技術】
【０００２】
商標：ＩＢＭ（Ｒ）は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標であり、Ｓ／３９０、Ｚ９００、およびｚ９９０、ならびに他の製品名は、インターナショナル・ビジネス・マシンズ・コーポレーションまたは他の会社の登録商標または製品名とすることができる。
【０００３】
ＩＢＭは、多くの非常に優れたエンジニア達の働きによって、１９６０年代から現在までの間にＩＢＭ（Ｒ）システム３６０として知られるマシンを初めとする、コンピューティング・システムに対するその不可欠な性質によって「メインフレーム」と呼ばれるようになった、特別なアーキテクチャを作成してきたが、その動作原理は、長年にわたって明示されてきたようにＩＢＭのPrinciples of Operationに含めることによる重大な寄与に対するそれらの重大な寄与により、ＩＢＭ発明者等によって発明され採用されてきた命令の「メインフレーム」実装上で実行可能な命令を記述することによって、マシンのアーキテクチャを明示する。２００９年２月に公開されたIBM(R) z/Architecture(R) Principlesof Operationの第８版が、SA22-7832-07として標準公開基準となっており、ＩＢＭのz10(TM)メインフレーム・サーバに組み込まれている。
【０００４】
１９９５年１１月２０日付出願の、ＩＢＭに譲渡された「Posting multiple reservations with a conditional store atomicoperations in a multiprocessing environment」という名称の米国特許第５７４２７８５号は、以下のことを教示している。「多重処理環境で共有される複数の変数はアトミックに（atomically）更新可能であることを教示している。多重処理環境で動作している各コンピュータ・プロセッサは、この新規な方法と共に、複数の共有変数のそれぞれについて予約を配置する際に使用される、複数の予約レジスタを含む。プログラムの実行中、複数の共有変数のそれぞれは、そのそれぞれの予約レジスタによって予約可能である。予約は、特別な命令を使用して共有変数上に配置される。予約レジスタは、予約している共有変数のアドレス、共有変数アドレス内で更新されることになる修正済み結果の値、変数が更新されたかどうか、予約が有効であるかどうか、および、予約レジスタを含むプロセッサが共有変数を更新する特権を有するかどうかを、追跡する。第２のプロセッサが予約済みの共有変数のアドレスを読み取ろうとした場合、予約を無効化することができる。共有変数を更新しようとする命令に遭遇した場合、未更新の修正済み結果を有するその命令によって指定された予約済みの修正済み共有変数は、指定されたセット内のすべての予約が有効である場合、およびその場合にのみ、アトミックに更新される。セット内のいずれかの予約が無効の場合、セット内のいかなる共有変数も更新されない。条件コードは、更新が成功したかまたは発生しなかったかを報告する。条件コードは、命令のシーケンスが成功するまで反復できるようにテストすることができる。」
【０００５】
図１を参照すると、従来技術のホスト・コンピュータ・システム５０の代表的構成要素が図示されている。コンピュータ・システム内には、当分野で周知の構成要素の他の配置構成も使用可能である。代表的ホスト・コンピュータ５０は、メイン・ストア（コンピュータ・メモリ２）、ならびに、ストレージ・デバイス１１および他のコンピュータまたはＳＡＮなどと通信するためのネットワーク１０へのＩ／Ｏインターフェースと通信する、１つまたは複数のＣＰＵ１を備える。ＣＰＵ１は、アーキテクト命令セットおよびアーキテクト機能を有するアーキテクチャに準拠している。ＣＰＵ１は、プログラム・アドレス（仮想アドレス）をメモリの実アドレスに変換するための、動的アドレス変換（ＤＡＴ）３を有することができる。ＤＡＴは、通常、変換をキャッシュに入れるための変換索引バッファ（ＴＬＢ）７を含むため、後でコンピュータ・メモリ２のブロックへアクセスする際にアドレス変換の遅延を必要としない。通常、コンピュータ・メモリ２とプロセッサ１との間にキャッシュ９が使用される。キャッシュ９は、複数のＣＰＵが使用可能な大型キャッシュと、大型キャッシュと各ＣＰＵとの間により小型で高速の（低位）キャッシュとを有する、階層構造とすることができる。いくつかの実装では、低位キャッシュは、命令フェッチおよびデータ・アクセスのための別々の低位キャッシュを提供するために分割される。ある実施形態では、命令は、命令フェッチ・ユニット４によってメモリ２からキャッシュ９を介してフェッチされる。命令は、命令複合ユニット（６）内で復号され、（いくつかの実施形態では他の命令と共に）命令実行ユニット８にディスパッチ（dispatch）される。通常、たとえば演算実行ユニット、浮動小数点実行ユニット、および分岐命令実行ユニットなどの、いくつかの実行ユニット８が使用される。命令は、実行ユニットによって実行され、必要に応じて、命令指定レジスタまたはメモリからのオペランドにアクセスする。メモリ２からオペランドにアクセス（ロードまたはストア）される場合、ロード・ストア・ユニット５は、通常、実行されている命令の制御の下でこのアクセスを処理する。命令は、ハードウェア回路または内部マイクロコード（ファームウェア）内で、あるいはその両方の組み合わせによって実行可能である。
【０００６】
図２では、ホスト・アーキテクチャのホスト・コンピュータ・システム５０をエミュレートする、従来技術のエミュレートされたホスト・コンピュータ・システム２１の例が提供されている。エミュレートされたホスト・コンピュータ・システム２１では、ホスト・プロセッサ（ＣＰＵ）１はエミュレートされたホスト・プロセッサ（または仮想ホスト・プロセッサ）であり、ホスト・コンピュータ５０のプロセッサ１とは異なる固有の命令セット・アーキテクチャを有するエミュレーション・プロセッサ２７を備える。エミュレートされたホスト・コンピュータ・システム２１は、エミュレーション・プロセッサ２７にアクセス可能なメモリ２２を有する。例示的実施形態では、メモリ２７は、ホスト・コンピュータ・メモリ２部分とエミュレーション・ルーチン２３部分とに区分される。ホスト・コンピュータ・アーキテクチャに従ってエミュレートされたホスト・コンピュータ２１のプログラムは、ホスト・コンピュータ・メモリ２を使用することができる。エミュレーション・プロセッサ２７は、エミュレートされたプロセッサ１ではなく、アーキテクチャのアーキテクト命令セットの固有命令を実行し、固有命令はエミュレーション・ルーチン・メモリ２３から取得され、アクセスされたホスト命令の機能をエミュレートするための固有命令実行ルーチンを決定するために、アクセスされたホスト命令を復号することが可能な、シーケンスおよびアクセス／復号ルーチンで取得された１つまたは複数の命令を使用することによって、ホスト・コンピュータ・メモリ２内のプログラムからの実行のためのホスト命令にアクセスすることができる。ホスト・コンピュータ・システム５０のアーキテクチャに関して定義された他の機構は、たとえば汎用レジスタ、制御レジスタ、動的アドレス変換およびＩ／Ｏサブシステムのサポートおよびプロセッサ・キャッシュなどの機構を含む、アーキテクト機構ルーチンによってエミュレート可能である。エミュレーション・ルーチンは、エミュレーション・プロセッサ２７で使用可能な機能（汎用レジスタおよび仮想アドレスの動的変換など）を利用して、エミュレーション・ルーチンの性能を向上させることもできる。ホスト・コンピュータ５０の機能をエミュレートする際のプロセッサ２７を支援するために、特別なハードウェアおよびオフロード・エンジンを提供することも可能である。
【０００７】
メインフレームでは、しばしばコンパイラ・アプリケーションを介して、通常、現在では「Ｃ」プログラマであるプログラマによって、アーキテクト・マシン命令が使用される。ストレージ・メディアに格納されたこれらの命令は、本来、z/Architecture IBMサーバ内で、あるいは他のアーキテクチャを実行するマシン内で、実行可能である。これらは、既存および将来のＩＢＭメインフレーム・サーバ内で、および他のＩＢＭマシン（たとえば、pSeries(R)サーバおよびxSeries(R)サーバ）上で、エミュレート可能である。これらは、IBM(R)、Intel(R)、AMD(TM)、SunMicrosystemsなどによって製造されるハードウェアを使用する多種多様なマシン上のLinuxを実行するマシン内で実行可能である。Z/Architecture(R)の下でのそのハードウェア上での実行に加えて、Linux、ならびにhttp://www.turbohercules.com、http://www.hercules-390.org、およびhttp://www.funsoft.comに記載されたエミュレーションを使用するマシンを、使用することが可能である。エミュレーション・モードでは、エミュレート・プロセッサのアーキテクチャをエミュレートするために、固有プロセッサによってエミュレーション・ソフトウェアが実行される。
【０００８】
固有プロセッサ２７は、通常、エミュレート・プロセッサのエミュレーションを実行するために、ファームウェアまたは固有オペレーティング・システムのいずれかを備えるエミュレーション・ソフトウェア２３を実行する。エミュレーション・ソフトウェア２３は、エミュレート・プロセッサ・アーキテクチャの命令をフェッチおよび実行する責務を負う。エミュレーション・ソフトウェア２３は、命令境界を追跡するためのエミュレート・プログラム・カウンタを維持する。エミュレーション・ソフトウェア２３は、一度に１つまたは複数のエミュレート・マシン命令をフェッチし、固有プロセッサ２７による実行のために、その１つまたは複数のエミュレート・マシン命令を固有マシン命令の対応するグループに変換することができる。これらの変換済み命令はキャッシュに入れることができるため、より高速な変換が達成可能である。にもかかわらず、エミュレーション・ソフトウェアは、エミュレート・プロセッサに関して作成されたオペレーティング・システムおよびアプリケーションが正しく動作することを保証するために、エミュレート・プロセッサ・アーキテクチャのアーキテクチャ規則を維持しなければならない。さらにエミュレーション・ソフトウェアは、エミュレート・プロセッサ上で実行するように設計されたオペレーティング・システムまたはアプリケーション・プログラムが、エミュレーション・ソフトウェアを有する固有プロセッサ上で実行できるように、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、たとえばセグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、割り込みメカニズム、コンテキスト切り換えメカニズム、時刻（ＴＯＤ）機構、および、Ｉ／Ｏサブシステムへのアーキテクト・インターフェースを含むが、これらに限定されない、エミュレート・プロセッサ１によって識別されたリソースを提供しなければならない。
【０００９】
エミュレートされている特定の命令が復号され、個々の命令の機能を実行するためにサブルーチンが呼び出される。エミュレート・プロセッサ１の機能をエミュレートするエミュレーション・ソフトウェア機能２３が、たとえば「Ｃ」サブルーチンまたはドライバ、あるいは、好ましい実施形態の説明を理解した後に、当分野の技術範囲内に入るような特定ハードウェアに関するドライバを提供する何らかの他の方法で、実装される。Beausoleil等の「Multiprocessor for hardware emulation」に関する米国特許第５５５１０１３号、およびScalzi等の米国特許第６００９２６１号「Preprocessing of stored target routines foremulating incompatible instructions on a target processor」、およびDavidian等の「Decodingguest instruction to directly access emulation routines that emulate the guestinstructions」、Gorishek等の米国特許第６３０８２５５号「Symmetrical multiprocessing bus and chipsetused for coprocessor support allowing non-native code to run in a system」、およびLethin等の米国特許第６４６３５８２号「Dynamic optimizing object code translator for architecture emulationand dynamic optimizing object code translation method」、およびEric Trautの米国特許第５７９０８２５号「Methodfor emulating guest instructions on a host computer through dynamicrecompilation of host instructions」、および他の多くを含むが、これらに限定されない、様々なソフトウェアおよびハードウェアのエミュレーション特許は、当業者が使用可能なターゲット・マシンに対して異なるマシンに関してアーキテクトされた命令形式のエミュレーション、ならびに、上記で参照された技法によって使用される商用ソフトウェア技法を達成するための、様々な知られた方法を示している。
【００１０】
Intel(R)社に譲渡された１９９７年８月２９日付の米国特許第５８７０５９８号「Method and apparatus for providingan optimized compare-and-branch instruction」は、ＲＩＳＣタイプのマイクロプロセッサで実行するための最適化された比較および分岐（compare-and-branch）命令について記述している。マイクロプロセッサ内に実装された命令シーケンサは、効率的な実行のための比較および分岐命令に応答する。命令シーケンサは、比較および分岐命令を検出し、通常の比較命令としてこれを実行する。次のサイクルで、命令シーケンサはこの命令を分岐命令に変換し、実行ユニットのうちの１つによる実行のために変換された命令を提供する。分岐が実行され、受け入れられるか否かにかかわらず、通常のプログラム流れは続行される。Intel命令には、条件コードが実行の一部として設定され、再確立が必要な可能性のあるコンテキスト設定を破棄することを含む、いくつかの欠点がある。
【００１１】
２００７年１１月１３日発行のCorrigan等による米国特許第７２９６１２０Ｂ２号「Mechanism that Provides EfficientMulti-Word Load Atomicity」は、追加のメモリ使用を発生させることなく、アトミックなマルチワード・ロード・サポートを提供する装置、方法、およびプログラム製品を開示している。ダブルワードは、１つまたは複数の追加のフィールドを使用することなく、またロックなしで、アトミックにロードされる。無効性マーカは、ロードされたダブルワードがアトミックに格納およびロードされたかどうか、すなわち有効であるかどうかを確認するために、キャッシュ・ミス時間に関連して使用される。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】米国特許第５７４２７８５号
【特許文献２】米国特許第５５５１０１３号
【特許文献３】米国特許第６００９２６１号
【特許文献４】米国特許第６３０８２５５号
【特許文献５】米国特許第６４６３５８２号
【特許文献６】米国特許第５７９０８２５号
【特許文献７】米国特許第５８７０５９８号
【特許文献８】米国特許第７２９６１２０Ｂ２号
【非特許文献】
【００１３】
【非特許文献１】２００９年２月に公開されたIBM(R) z/Architecture(R) Principles of Operationの第８版
【発明の概要】
【発明が解決しようとする課題】
【００１４】
メモリにアクセスし、アクセスがアトミックであったように見えるかどうか、すなわち、メモリからフェッチされるかまたはメモリに格納されたデータが、アクセスされたデータの修正済み部分を有する可能性のあるいかなる介入ストレージ動作もなしにアクセスされたことを示すインジケータを設定する、命令を提供する。
【課題を解決するための手段】
【００１５】
本発明の諸実施形態では、この命令は、独立（disjoint）メモリ・オペランドをフェッチするための命令を含む第１のルーチンを実行することを含む、独立メモリ・オペランドをフェッチするために使用され、当該命令は、メモリから２つの独立オペランドをロードするため、および状況コード値を設定するための、独立ペア・ロード命令を含む。２つの独立オペランドが、２つの独立オペランドのうちのいずれかに対する介入ストアと共にロードされた可能性のあることを示す当該条件コード値に応答して、メモリから独立メモリ・オペランドをフェッチするための命令を含む、第２のルーチンが実行される。２つの独立オペランドが、２つの独立オペランドのうちのいずれかに対する介入ストアなしでロードされたことを示す当該条件コード値に応答して、ロードされた２つの独立オペランドを使用するための第３のルーチンが実行される。
【００１６】
ある実施形態では、第２のルーチンは、当該条件コード値が、２つの独立オペランドが２つの独立オペランドのうちのいずれかに対する介入ストアなしでロードされたことを示すまで、反復される。
【００１７】
ある実施形態では、反復に関する制限値が設定される。２つの独立オペランドが、２つの独立オペランドのうちのいずれかに対する介入ストアと共にロードされた可能性のあることを示す当該条件コード値に応答して、第２のルーチンが制限値によって指定された回数だけ反復されるまで、または、当該条件コード値が、２つの独立オペランドが２つの独立オペランドのうちのいずれかに対する介入ストアなしでロードされたことを示すまで、第２のルーチンは反復される。
【００１８】
ある実施形態では、独立ペア・ロード命令によって、２つの独立オペランドが汎用レジスタのそれぞれの位置にロードされることになる。
【００１９】
ある実施形態では、独立ロード／ストア（ＬＳＤ）命令が、マルチプロセッサ・システムのプロセッサ内で実行される。独立ロード／ストア命令は実行用に取得され、この独立ロード／ストア命令は演算コード（opcode）を含み、この実行は取得された演算コードに基づいてＬＳＤ指定演算を実行することを含み、この演算はメモリ内の１つまたは複数のオペランドにアクセスすることを含む。マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の１つまたは複数のオペランドへのアクセス時に、１つまたは複数のオペランドのうちの１つを修正した可能性があるかどうかを判定することに応答して、第１のインジケータ値が設定され、当該第１のインジケータ値は、マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の１つまたは複数のオペランドへのアクセス時に、１つまたは複数のオペランドのうちの１つを修正した可能性があるかどうかを示す。
【００２０】
ある実施形態では、第１のインジケータ値は、第１の条件コード値または第２の条件コード値のうちのいずれか１つを含む。ストア・イベントが、当該アクセス時に１つまたは複数のオペランドのうちの、メモリ内の第１のオペランドまたはメモリ内の第２のオペランドのいずれかを修正した可能性がある旨の決定に応答して、第１の条件コード値が設定され、当該第１の条件コード値は、メモリ内の第１のオペランドまたはメモリ内の第２のオペランドのうちのいずれか１つが、当該アクセス時に修正された可能性があることを示す。いかなるストア・イベントも、当該アクセス時にメモリ内の第１のオペランドまたはメモリ内の第２のオペランドのいずれも修正していない旨の決定に応答して、第２の条件コード値が設定され、当該第２の条件コード値は、メモリ内の第１のオペランドまたはメモリ内の第２のオペランドのいずれも、当該アクセス時に修正されていないことを示す。
【００２１】
ある実施形態では、ＬＳＤ命令は独立ペア・ロード（ＬＰＤ）命令であり、ここでメモリ内の１つまたは複数のオペランドへのアクセスは、メモリからの第１のオペランドおよび第２のオペランドのフェッチを含み、フェッチされた第１のオペランドはＬＰＤ命令によって指定された第１のレジスタ内に格納されること、および、フェッチされた第２のオペランドはＬＰＤ命令によって指定された第２のレジスタ内に格納されることを、さらに含む。
【００２２】
ある実施形態では、独立ペア・ロード命令は、第１の汎用レジスタを識別する第１の汎用レジスタ・フィールドと、第２の汎用レジスタを識別する第２の汎用レジスタ・フィールドと、当該第１のレジスタおよび当該第２のレジスタを識別する第３の汎用レジスタ・フィールドとを備え、第１のアドレスは第１の汎用レジスタ・フィールドによって識別された第１の汎用レジスタから取得され、取得された第１のアドレスはメモリ内の第１のオペランドをフェッチするために使用される。メモリ内の第２のオペランドの第２のアドレスは、第２の汎用レジスタ・フィールドによって識別された第２の汎用レジスタから取得され、取得された第２のアドレスはメモリ内の第２のオペランドをフェッチするために使用される。独立ペア・独立動作は、第１のオペランドを第１のレジスタ内に格納することを含み、ここで第１のレジスタは、第３の汎用レジスタ・フィールドによって識別された汎用レジスタの上位部分であり、第２のオペランドを第２のレジスタ内に格納することを含み、ここで第２のレジスタは、第３の汎用レジスタ・フィールドによって識別された汎用レジスタの下位部分である。
【００２３】
ある実施形態では、取得された独立ペア・ロード命令は、第１の変位フィールドおよび第２の変位フィールドをさらに備え、第１の変位フィールドは、メモリ内の第１のオペランドをフェッチするための第１のメモリ・アドレスを作成するために、取得された第１のアドレスに算術的に加算される。第２の変位フィールドは、メモリ内の第２のオペランドをフェッチするための第２のメモリ・アドレスを作成するために、取得された第２のアドレスに算術的に加算される。
【００２４】
ある実施形態では、マルチプロセッシング・システムの複数のプロセッサからストア・イベントが受信され、受信されたストア動作はメモリ内に格納される。
【００２５】
ある実施形態では、コンピュータ・アーキテクチャ向けに定義された独立ペア・ロード命令は、代替コンピュータ・アーキテクチャの中央処理ユニットによってフェッチおよび実行され、独立ペア・ロード命令は、独立ペア・ロード命令の動作をエミュレートするための所定のソフトウェア・ルーチンを識別するために解釈され、独立ペア・ロード命令を実行することは、マシン命令を実行するための方法の諸ステップを実行するために所定のソフトウェア・ルーチンを実行することを含む。
【００２６】
本発明の上記ならびに追加の目的、特徴、および利点は、以下に記載の説明で明らかとなろう。
【００２７】
次に、本発明の諸実施形態について、添付の図面を参照しながら単なる例として説明する。
【図面の簡単な説明】
【００２８】
【図１】従来技術のホスト・コンピュータ・システムの例を示す図である。
【図２】従来技術のホスト・コンピュータ・システムのエミュレーション例を示す図である。
【図３】従来技術のコンピュータ・システムの例を示す図である。
【図４】従来技術のコンピュータ・ネットワークの例を示す図である。
【図５】従来技術のコンピュータ・システムの要素を示す図である。
【図６】従来技術のコンピュータ・システムの詳細な要素を示す図である。
【図７】従来技術のコンピュータ・システムの詳細な要素を示す図である。
【図８】従来技術のコンピュータ・システムの詳細な要素を示す図である。
【図９】コンピュータ・システムの従来技術のマシン命令形式を示す図である。
【図１０】コンピュータ・システムの従来技術のマシン命令形式を示す図である。
【図１１】コンピュータ・システムの従来技術のマシン命令形式を示す図である。
【図１２】コンピュータ・システムの従来技術のマシン命令形式を示す図である。
【図１３】コンピュータ・システムの従来技術のマシン命令形式を示す図である。
【図１４】コンピュータ・システムの従来技術のマシン命令形式を示す図である。
【図１５】本発明の実施形態に従った命令形式の例を示す図である。
【図１６】本発明の実施形態の例を示す流れ図である。
【図１７】本発明の実施形態の例を示す流れ図である。
【図１８】本発明の実施形態の例を示す流れ図である。
【図１９】本発明のマルチプロセッサ・システムの要素の使用および実施形態の例を示す図である。
【発明を実施するための形態】
【００２９】
現在のマルチプロセッサ・コンピュータ・システムは、２つまたはそれ以上のプロセッサに、共通メモリ位置にアクセスして修正するための手段を提供する。こうした位置は共有位置と言われ、各位置は共有変数を含むものと言われる。
【００３０】
コンピュータ・システム内に共有変数が存在する他のコンテキストは、別々の区別できるプログラム（時に、プロセスと呼ばれる）が単一のプロセッサ内に同時に常駐する、単一のプロセッサ内にある。量子（quantum）と呼ばれる期間、各プロセスは制御し、量子の終わりに中断される一方で、他のプロセスにプロセッサへのアクセスが認められる。プロセスの実行は、それぞれの時間量子が時間内にインタレースされ、ラウンドロビン・ベースまたは優先度ベースで認められる。プロセスは共通位置にアクセスして修正することが可能であるため、単一プロセッサ内のこれらのプロセスは、論理的には、あたかも別々の区別できるプロセッサ上で実行しているかのように、共有メモリ位置上で動作する。
【００３１】
いずれのケースでも、２つまたはそれ以上の同時プロセスが共有変数を更新できるため、更新が一貫性なく実行される可能性が存在する。２つのプロセスに、それぞれメモリ位置を増分するタスクが割り当てられるものと考えてみる。各プロセスはこのタスクを、その位置からマシン・レジスタへの読み取り、マシン・レジスタの増分、およびマシン・レジスタの新しい値のメモリへの書き込みによって、実行することを試みる。プロセス１が、プロセス２からの介入なしに読み取り／修正／書き込みを実行し、その後、プロセス２が同じ動作を実行する場合、共有変数は２回増分されることにより、正しく修正されることになる。
【００３２】
２つのプロセスの読み取り／修正／書き込み動作が時間内にインタレースされた場合、不整合が生じる。すなわち、プロセス１が変数Ｘの値を読み取り、プロセス２が同じ値Ｘを読み取った後、後続の増分および書き込みが任意の順序で発生した場合、各プロセスは、１回増分されたそのオリジナルの値に等しい値Ｘを格納することになる。したがって、Ｘの最終値は単一の増分のみを反映することになる。１回の増分は失われる。
【００３３】
不正確な最終値を取得する理由は、２つのプロセスが一貫性のないデータ上で動作するためである。プロセス１が値Ｘを修正する意図でこれを読み取る場合、Ｘの論理的所在は、共有メモリからプロセス１に関連付けられた専用レジスタへと移行される。その後、プロセス２がＸを読み取り、Ｘがまだプロセス１によって修正されていない場合、Ｘがその時点で共有メモリ内ではアクセス可能でなく、再書き込みされるまで再度アクセス可能にならないため、プロセス２によって読み取られる値は実際の値Ｘとは一致しない。
【００３４】
正確さを保証するためには、一貫性を保証する必要がある。一貫性のある挙動のために十分な条件は、動作の読み取り／修正／書き込みのシーケンスが共有変数Ｘ上で実行される場合、このシーケンスがアトミックに実行されるよう保証することである。アトミックに実行とは、Ｘの読み取りが実行される時間とＸの書き込みが実行される時間との間に、任意の他のプロセスが値Ｘを変更することを許可せずに、シーケンスが実行されることを意味する。
【００３５】
アクションの読み取り／修正／書き込みシーケンスの正確さおよび一貫性を保証するには、多数の方法がある。その１つは、こうしたシーケンスを、クリティカル・セクション（critical section）と呼ばれるプログラムの領域内に封入することである。クリティカル・セクションの前には、ロック動作を実行する１つまたは複数の命令が先行し、アンロック動作を実行する１つまたは複数の命令が後に続く。このロック動作およびアンロック動作が、クリティカル・セクション内でコードを実行できるのは、常時、多くとも１つのプロセスであることを保証する。規則またはプロトコルにより、同じロックおよびアンロック・メカニズムによって制御されるクリティカル・セクションを用いて、すべての他のプロセスが同じ共有変数を更新した場合、１つのプロセスがクリティカル・セクション内の読み取り／修正／書き込みプロセスを実行している間、他のプロセスは共有変数への介入アクセスを実行できないため、クリティカル・セクション内の読み取り／修正／書き込み動作は、共有変数をアトミックに更新することができる。
【００３６】
クリティカル・セクションを作成するためには、ロック機能を有する必要がある。従来技術では、こうした機能を実装するための一般的な手段は、それ自体がロック変数に対してアトミックな読み取り／修正／書き込みを実行する旨の命令を用いることである。この目的で使用される命令の中には、テストおよび設定（Test-and-Set）命令、ならびに増分（または減分）命令がある。
【００３７】
テストおよび設定命令は、変数Ｘを読み取り、Ｘのビットをビットのオリジナル状態に関係なく値１に設定し、Ｘを書き換えて、その値が値１になるように強制される前のオリジナルビットに等しい条件コードを戻す。この命令は共有変数の読み取り／修正／書き込みを実行することから、実行の整合性を保証するために、こうした更新をアトミックに実行するように実装しなければならない。ロックは他のプロセスによる共有変数への介入アクセスを防ぐため、この１つの命令を使用して、任意の複雑さの読み取り／修正／書き込みシーケンスが一貫して実行可能なクリティカル・セクションを保護するロックを設定することができる。
【００３８】
ロックを作成するためにテストおよび設定命令を使用するために、各プロセスは、ロック変数にアクセスするテストおよび設定命令を用いて、クリティカル・セクションを保護する。テストおよび設定命令の実行直後、ロック変数は、その前の値に関係なく値１を保持する。各プロセスは、テストおよび設定の実行後に条件コードをテストし、（初期値０に対応する）コード０を観察するプロセスのみが、クリティカル・セクションに入り、クリティカル・セクション内で読み取り／修正／書き込みシーケンスを実行することができる。それらそれぞれのクリティカル・セクション内で読み取り／修正／書き込みコードの実行を試みる他のすべてのプロセスは、クリティカル・セクションに対するロックがアンロック（０）状態になるまで、待機するかまたはその他の何らかを実行しなければならない。プロセスが読み取り／修正／書き込みシーケンスを完了してクリティカル・セクションを離れる場合、ロック内に０を格納することでロックを解除し、それにより、０に等しい変数の初期値を用いてロック上でテストおよび設定を実行することによって、他のプロセスがクリティカル・セクションに入ることを許可する。
【００３９】
テストおよび設定は、IBM370で見つけられる。増分および減分は、アトミックな読み取り／修正／書き込み動作として実装可能であり、ほぼテストおよび設定の直接的な代用として、本質的にテストおよび設定が実行する内容を実行するために使用可能である。テストおよび設定がビットの設定しか実行できない一方で、それらは共有変数をアトミックに増分および減分することが可能であるため、より汎用的である。DEC VAXはアトミックな増分および減分命令を有する。
【００４０】
クリティカル・セクションを作成するために読み取り／修正／書き込み動作を用いることには、いくつかの問題がある。以下にその一部を示す。
【００４１】
１．クリティカル・セクションには、一度に多くとも１つのプロセスしか入ることができない。あるプロセスがクリティカル・セクションに入って失敗した場合、他のプロセスはいっさいクリティカル・セクションに入ることができないため、システム全体が失敗する。
２．長く複雑なクリティカル・セクションは、マルチプロセッサ・システムにおける性能上のボトルネックである。クリティカル・セクションには一度に１つのプロセスしか入ることができないため、他のプロセスが同じクリティカル・セクションに入らなければならない場合、それらは使用可能になるまで待機しなければならず、この間、強制的にアイドル状態となる可能性がある。この問題に対する望ましい解決策は、任意のクリティカル・セクションの外部で読み取り／修正／書き込みを実行する命令のシーケンスを用いて、共有変数を更新することである。この修正は、整合性が維持されるように、注意深く制御されなければならない。
３．クリティカル・セクションは多くの命令を含むため、プロセスに関する時間量子がクリティカル・セクション内で終わる可能性があり、他のプロセスがプロセッサを制御する一方で、そのプロセスは長い期間中断する可能性がある。クリティカル・セクションに対するロックを保持するプロセスの中断期間中、他のプロセスがクリティカル・セクションに入って、そのクリティカル・セクションによって制御される共有変数を更新することはできない。
【００４２】
この欠点を克服するために、複雑な動作をアトミックに実行される単一の命令として共有変数に実装することが可能である。例として、DEC VAXは、それぞれが４つまでの共有変数を同時かつアトミックに変更するアトミックなENQUEUEおよびDEQUEUE命令を有し、それによって一貫性のある変更が行われる。
【００４３】
この手法に従う場合、マシン設計者は、各データ表示に関する共有変数での各区別できる動作に対してアトミックな命令を与えなければならない。たとえばDEC VAXは、表示の異なるキューに関して、異なるENQUEUEおよびDEQUEUE命令を有する。要素当たり１つのポインタを備えるキューは、ENQUEUE/DEQUEUE命令ペアのうちの１つによって操作されなければならず、要素当たり２つのポインタを備えるキューは、異なるENQUEUE/DEQUEUE命令ペアによって操作されなければならない。
【００４４】
欠点は、こうした各動作はそれぞれ極端に特殊化されているため、考え得るあらゆるアトミック動作および考え得るあらゆるデータ表示を予測しなければならないことである。プログラマが各特定のコンテキストおよびデータ表示に関するカスタムメイドのアトミック動作を容易に作成および使用できないため、この手法は失敗する。
【００４５】
したがって、対処すべき重要な問題は、共有変数に対する複雑な更新のためにカスタマイズされたアトミック動作を生成するため、および、実際の更新が単一命令の実行中に行われるようにこれらのアトミック動作を実行するための機能である。このように、マルチプロセッサ・システムの信頼性および性能は、クリティカル・セクションに関するロックを保持するプロセスの障害または割り込みによるリスクにさらされない。
【００４６】
この問題に対する部分的な解決策は、IBM 370に実装されているような比較およびスワップ（Compare-and-Swap）命令の使用を通じて入手可能である。比較およびスワップ命令は、クリティカル・セクションによって保護されていない命令の読み取り／修正／書き込みシーケンスの最終ステップを提供し、一貫性およびアトミック性を保証すると思われるある条件の下でのみ書き込み動作を実行する。比較およびスワップを使用するために、プロセスは第１に、従来の非アトミック命令を用いて、共有変数の更新済み値の最終書き込みを除く、共有変数を更新するための読み取り／修正／書き込みシーケンスのすべてのアクションを実行する。最終書き込みアクションを実行するために、プロセスは、比較およびスワップ命令を使用する。比較およびスワップは、ストレージから変数を再度読み取り、ストレージ内の現行値とマシン・レジスタ内に保持されている従来値のコピーとを比較する。２つの値が同一である場合、比較およびスワップは、ストレージ内の変数を新しく計算された値によって更新する。マシン・レジスタ内に保持されている従来値のコピーと共有メモリ内に保持されている現行値とが異なる場合、比較およびスワップはストレージを更新せず、マシン・レジスタ内に保持されている従来値のコピーを、共有メモリ内に保持されている現行値のコピーに置き換える。この命令は、条件コード内で起こった内容を報告する。比較およびスワップ自体がアクションの読み取り／修正／書き込みシーケンスを実行することから、それらのアクションはプログラムの正確さを保証するためにアトミックに実行されなければならない。
【００４７】
比較およびスワップの考え方は、他のプロセスが、最後に読み取られた時から値を変更していない場合、共有値を更新できるというものである。これによって一貫性のある挙動が保証されるものと思われる。残念ながら、一貫性のない更新の可能性もある。第１のプロセスが比較およびスワップによって終了される読み取り／修正／書き込みシーケンスの実行中である間、同時に実行中の第２のプロセスは、変数の値（値Ａと呼ぶ）を読み取ること、その値を新しい値（値Ｂと呼ぶ）に変更すること、および、第１のプロセスが値Ａに基づいて新しい値を計算している間、さらに他のプロセスは共有変数を従来値（値Ａ）に戻すことが可能である。第１のプロセスが比較およびスワップ命令に到達した場合、現行値および従来値がどちらもＡに等しいため、比較およびスワップ命令は成功する。
【００４８】
しかしながら、多くのアプリケーションの場合、正確さは、共有変数の従来値および現行値が等しいことだけでなく、読み取り／修正／書き込みシーケンスの実行中に最初に読み取られた時点から、比較およびスワップが実行された時点まで、ストレージ内の変数が連続して値Ａで維持されていることを必要とする。こうした値の変更を検出するための比較およびスワップの障害は、ＡＢＡ問題と呼ばれる。
【００４９】
共有変数の同時アクセスおよび修正に関するほとんどのアルゴリズムは、ＡＢＡ問題が発生した場合に失敗する可能性がある。ＡＢＡ問題に起因する障害の可能性をなくすかまたは減らすために、比較およびスワップと共に使用される様々なソフトウェア・スキームがある。
【００５０】
この問題に対する他の手法は、更新が試行された時点で変数が連続してある値に維持されているか否かを検出するという点を除いて、比較およびスワップの使用と非常に類似している。基本的にこのスキームは、あたかも比較およびスワップが、現行値と従来値との等しさをテストする代わりに、変数が変更されたか否かに関してテストするかのような働きをする。スキームは、予約と呼ばれる概念を使用する。
【００５１】
スキームは、予約のロード（Load-with-Reservation）および予約時書き込み（Write-if-Reserved）という２つの命令を使用するが、命令は、これを使用する様々なプロセッサ上で異なる名前を有する。MIPS(R)のR-4000(R)プロセッサ上、およびDECALPHAプロセッサ上で、使用されている。予約のロードは、ストレージから共有変数を読み取ると同時に、その変数のアドレスを予約レジスタと呼ばれる特殊なレジスタ内に配置する。予約レジスタは他のプロセスによって実行される変数への変更を監視し、それらの他のプロセスは、同じプロセッサ上または他のプロセッサ上で実行中のものとすることができる。任意の他のプロセスが変数の値を変更した場合、予約は消える。そうでない場合、予約を配置したプロセスが予約時書き込み命令に到達するまで、予約は存在する。予約が依然として存在する場合のみ、予約時書き込み命令は更新を実行する。存在しない場合、予約時書き込みは更新を実行しない。いずれのケースでも、命令は何が起こったかを示す条件コードを戻す。多くの応用例では、その後プロセスは条件コードをテストし、更新が成功するまで、予約のロード、修正、予約時書き込みのシーケンスを反復する。
【００５２】
ある実施形態では、本発明は、ソフトウェア（時にライセンス付き内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれ、いずれも本発明に適合する）によって実施可能である。図１を参照すると、本発明を具体化するソフトウェア・プログラム・コードは、通常、ＣＤ−ＲＯＭドライブ、テープ・ドライブ、またはハード・ドライブなどの長期ストレージ・メディア７から、システム５０のＣＰＵ（中央処理ユニット）１としても知られるプロセッサによってアクセスされる。ソフトウェア・プログラム・コードは、ディスケット、ハード・ドライブ、またはＣＤ−ＲＯＭなどのデータ処理システムで使用するための、任意の多彩な既知のメディア上で具体化可能である。コードは、こうしたメディア上で配布するか、または他のコンピュータ・システムへのネットワークを介して、こうした他のシステムのユーザによって使用されるために、１つのコンピュータ・システムのコンピュータ・メモリ２またはストレージからユーザに配布することが可能である。
【００５３】
別の方法として、プログラム・コードはメモリ２内で具体化され、プロセッサ・バスを使用してプロセッサ１によってアクセスされることが可能である。こうしたプログラム・コードは、様々なコンピュータ・コンポーネントおよび１つまたは複数のアプリケーション・プログラムの機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、高密度ストレージ・メディア１１から、プロセッサ１による処理に使用可能な高速メモリ２へとページングされる。ソフトウェア・プログラム・コードをメモリ内、物理メディア上で具体化する、あるいは、ネットワークを介してソフトウェア・コードを配布する、またはそれらすべてのための、技法および方法は、良く知られているため、本明細書ではこれ以上考察しない。プログラム・コードは、有形のメディア（電子メモリモジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むがこれらに限定されない）上で作成および格納された場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品メディアは、通常、好ましくはコンピュータ・システム内の処理回路によって、処理回路による実行のために読み取り可能である。
【００５４】
図３は、内部で本発明が実施可能な代表的ワークステーションまたはサーバ・ハードウェア・システムを示す。図３のシステム１００は、オプションの周辺デバイスを含む、パーソナル・コンピュータ、ワークステーション、またはサーバなどの、代表的コンピュータ・システム１０１を備える。ワークステーション１０１は、１つまたは複数のプロセッサ１０６と、既知の技法に従ってプロセッサ１０６とシステム１０１の他のコンポーネントとの間を接続して通信可能にするために採用されたバスとを含む。バスは、プロセッサ１０６をメモリ１０５と、たとえばハード・ドライブ（たとえば磁気メディア、ＣＤ、ＤＶＤ、およびフラッシュ・メモリのいずれかを含む）またはテープ・ドライブを含むことが可能な長期ストレージ１０７とに接続する。システム１０１は、ユーザ・インターフェース・アダプタを含むことも可能であり、これが、バスを介してマイクロプロセッサ１０６を、キーボード１０４、マウス１０３、プリンタ／スキャナ１１０、あるいは、タッチ式スクリーン、デジタル式入力パッドなどの任意のユーザ・インターフェース・デバイスとすることが可能な他のインターフェース・デバイス、またはそれらすべてに接続する。バスは、ＬＣＤスクリーンまたはモニタなどのディスプレイ・デバイス１０２を、ディスプレイ・アダプタを介してマイクロプロセッサ１０６にも接続する。
【００５５】
システム１０１は、ネットワーク１０９との通信１８が可能なネットワーク・アダプタを用いて、他のコンピュータまたはコンピュータのネットワークと通信可能である。ネットワーク・アダプタの例は、通信チャネル、トークン・リンク、イーサネット、またはモデムである。別の方法として、ワークステーション１０１は、ＣＤＰＤ（セルラ式デジタル・パケット・データ）カードなどのワイヤレス・インターフェースを使用して通信可能である。ワークステーション１０１は、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）内のこうした他のコンピュータに関連付けることが可能であるか、あるいは、ワークステーション１０１は、他のコンピュータなどを備えるクライアント／サーバ配置構成内のクライアントとすることができる。これらの構成、ならびに適切な通信ハードウェアおよびソフトウェアは、すべて当分野で知られている。
【００５６】
図４は、内部で本発明が実施可能なデータ処理ネットワーク２００を示す。データ処理ネットワーク２００は、それぞれが複数の個別のワークステーション１０１、２０１、２０２、２０３、２０４を含むことが可能な、無線ネットワークおよび有線ネットワークなどの複数の個別のネットワークを含むことができる。加えて、当業者であれば、１つまたは複数のＬＡＮを含めることが可能であることを理解され、ここでＬＡＮは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを備えることができる。
【００５７】
さらに図４を参照すると、ネットワークは、ゲートウェイ・コンピュータ（クライアント・サーバ２０６）またはアプリケーション・サーバ（データ・リポジトリにアクセス可能であり、ワークステーション２０５からも直接アクセス可能な、リモート・サーバ２０８）などの、メインフレーム・コンピュータまたはサーバを含むこともできる。ゲートウェイ・コンピュータ２０６は、各ネットワーク２０７への入力ポイントとして働く。ゲートウェイは、１つのネットワーキング・プロトコルを他に接続する場合に必要である。ゲートウェイ２０６は、好ましくは通信リンクを用いて他のネットワーク（たとえばインターネット２０７）に結合することができる。ゲートウェイ２０６は、通信リンクを使用して、１つまたは複数のワークステーション１０１、２０１、２０２、２０３、２０４に直接結合することもできる。ゲートウェイ・コンピュータは、ＩＢＭ社から入手可能な、IBM eServer(TM)、zSeries(R)、z10(TM)Serverを使用して実装可能である。
【００５８】
本発明を具体化するソフトウェア・プログラミング・コードは、通常、ＣＤ−ＲＯＭドライブまたはハード・ドライブなどの長期ストレージ・メディア１０７から、システム１０１のプロセッサ１０６によってアクセスされる。ソフトウェア・プログラミング・コードは、ディスケット、ハード・ドライブ、またはＣＤ−ＲＯＭなどの、データ処理システムで使用するための多様な既知のメディアのいずれかで、具体化可能である。コードは、こうしたメディア上で配布可能であるか、あるいは、１つのコンピュータ・システムのメモリまたはストレージからユーザ２１０、２１１へと、こうした他のシステムのユーザが使用するためにネットワークを介して他のコンピュータ・システムに配布可能である。
【００５９】
別の方法として、プログラミング・コード１１１は、メモリ１０５内で具体化可能であり、プロセッサ・バスを使用してプロセッサ１０６によってアクセス可能である。こうしたプログラミング・コードは、様々なコンピュータ・コンポーネントおよび１つまたは複数のアプリケーション・プログラム１１２の機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、高密度ストレージ・メディア１０７からプロセッサ１０６による処理に使用可能な高速メモリ１０５へとページングされる。
ソフトウェア・プログラム・コードをメモリ内、物理メディア上で具体化する、あるいは、ネットワークを介してソフトウェア・コードを配布する、またはそれらすべてのための、技法および方法は、良く知られているため、本明細書ではこれ以上考察しない。プログラム・コードは、有形のメディア（電子メモリモジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むがこれらに限定されない）上で作成および格納された場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品メディアは、通常、好ましくはコンピュータ・システム内の処理回路によって、処理回路による実行のために読み取り可能である。
【００６０】
プロセッサが最も容易に使用可能なキャッシュ（通常はプロセッサの他のキャッシュよりも高速かつ小型である）は最低位（Ｌ１またはレベル１）キャッシュであり、メイン・ストア（メイン・メモリ）は最高位キャッシュ（３レベルある場合はＬ３）である。最低位キャッシュは、しばしば、実行されることになるマシン命令を保持する命令キャッシュ（Ｉキャッシュ）と、データ・オペランドを保持するデータ・キャッシュ（Ｄキャッシュ）とに分割される。
【００６１】
図５を参照すると、プロセッサ１０６に関するプロセッサ実施形態の例が示されている。通常、プロセッサ性能を向上させるためにメモリ・ブロックをバッファするための１つまたは複数のレベルのキャッシュ３０３が採用される。キャッシュ３０３は、使用される可能性の高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、６４、１２８、または２５６バイトのメモリ・データである。データをキャッシュに入れるのではなく命令をキャッシュに入れるために、しばしば別々のキャッシュが採用される。キャッシュ・コヒーレンス（メモリおよびキャッシュ内のラインのコピーの同期化）は、しばしば、当分野で周知の様々な「スヌープ」アルゴリズムによって提供される。プロセッサ・システムのメイン・ストレージ１０５は、しばしばキャッシュと呼ばれる。４レベルのキャッシュ３０３を有するプロセッサ・システムでは、メイン・ストレージ１０５は、通常は、より高速であり、コンピュータ・システムが使用可能な不揮発性ストレージ（ＤＡＳＤ、テープなど）の一部のみを保持することから、時にレベル５（Ｌ５）キャッシュと呼ばれる。メイン・ストレージ１０５は、オペレーティング・システムによってメイン・ストレージ１０５の内外へページングされたデータのページを「キャッシュ」に入れる。
【００６２】
プログラム・カウンタ（命令カウンタ）３１１は、実行されることになる現行の命令のアドレスを追跡する。z/Architectureプロセッサにおけるプログラム・カウンタは６４ビットであり、以前のアドレス指定制限をサポートするために３１または２４ビットに切り詰めることができる。プログラム・カウンタは、通常、コンテキスト切り換え中に持続するように、コンピュータのＰＳＷ（プログラム・ステータス・ワード）で具体化される。したがって、プログラム・カウンタ値を有する進行中のプログラムは、たとえばオペレーティング・システムによって中断される可能性がある（プログラム環境からオペレーティング・システム環境へのコンテキスト切り換え）。プログラムのＰＳＷは、プログラムがアクティブでない間もプログラム・カウンタを維持し、オペレーティング・システムのプログラム・カウンタ（ＰＳＷ）は、オペレーティング・システムが実行中の間使用される。通常、プログラム・カウンタは、現行命令のバイト数に等しい量だけ増分される。RISC（縮小命令セット・コンピューティング）命令は、通常固定長であるが、CISC（複雑命令セット・コンピューティング）命令は、通常可変長である。IBM z/Architectureの命令は、２、４、または６バイト長さのＣＩＳＣ命令である。プログラム・カウンタ３１１は、コンテキスト切り換え動作、またはたとえば分岐命令の分岐実施動作のいずれかによって修正される。コンテキスト切り換え動作では、現行プログラム・カウンタ値が、実行中のプログラム（条件コードなど）に関する他の状態情報と共に、プログラム・ステータス・ワード（ＰＳＷ）で保存され、実行されることになる新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐実施動作は、プログラムの意思決定またはプログラム内ループを許可するために、分岐命令の結果をプログラム・カウンタ３１１にロードすることによって実行される。
【００６３】
通常、命令フェッチ・ユニット３０５は、プロセッサ１０６の代わりに命令をフェッチするために採用される。フェッチ・ユニットは、「次の順次命令」、分岐実施命令のターゲット命令、またはコンテキスト切り換えに続くプログラムの第１の命令の、いずれかをフェッチする。現在の命令フェッチ・ユニットは、しばしばプリフェッチ技法を採用し、プリフェッチされた命令が使用される確率に基づいて、命令を投機的にプリフェッチする。たとえば、フェッチ・ユニットは、次の順次命令および他の順次命令の追加バイトを含む、１６バイトの命令をフェッチすることができる。
【００６４】
フェッチされた命令は、その後、プロセッサ１０６によって実行される。ある実施形態では、フェッチされた命令はフェッチ・ユニットのディスパッチ・ユニット３０６に渡される。ディスパッチ・ユニットは命令を復号し、復号された命令に関する情報を適切なユニット３０７、３０８、３１０に転送する。実行ユニット３０７は、通常、復号された算術命令に関する情報を命令フェッチ・ユニット３０５から受け取り、命令の演算コードに従ってオペランドで算術演算を実行する。オペランドは、好ましくはメモリ１０５、アーキテクト・レジスタ３０９、または実行されている命令の即時フィールドのいずれかから、実行ユニット３０７に提供される。実行の結果は、格納される場合、メモリ１０５、レジスタ３０９、または他のマシン・ハードウェア（制御レジスタ、ＰＳＷレジスタなど）のいずれかに格納される。
【００６５】
プロセッサ１０６は、通常、命令の機能を実行するための１つまたは複数の実行ユニット３０７、３０８、３１０を有する。図６を参照すると、実行ユニット３０７は、インターフェース論理４０７を用いて、アーキテクト汎用レジスタ３０９、復号／ディスパッチ・ユニット３０６、ロード・ストア・ユニット３１０、およびその他４０１プロセッサ・ユニットと通信することができる。実行ユニット３０７は、いくつかのレジスタ回路４０３、４０４、４０５を使用して、算術論理ユニット（ＡＬＵ）４０２の演算に関する情報を保持することができる。ＡＬＵは、加算、減算、乗算、および除算などの算術演算、ならびに、ＡＮＤ、ＯＲ、および排他的ＯＲ（ＸＯＲ）、回転および偏移などの論理関数を実行する。好ましくは、ＡＬＵは、設計に依存した特殊な演算をサポートする。他の回路は、条件コードおよびたとえば回復支援論理を含む、他のアーキテクト機構４０８を提供することができる。通常、ＡＬＵ演算の結果は、結果を多様な他の処理機能に転送できる、出力レジスタ回路４０６内に保持される。プロセッサ・ユニットの配置構成は多数存在するため、本説明は一実施形態の代表的な理解を与えることのみを意図するものである。
【００６６】
たとえばＡＤＤ命令は、算術および論理関数を有する実行ユニット３０７で実行されるが、たとえば浮動小数点命令は、特殊な浮動小数点機能を有する浮動小数点実行で実行される。好ましくは、実行ユニットは、オペランドで演算コード定義済み機能を実行することにより、命令によって識別されたオペランドで動作する。たとえば、ＡＤＤ命令は、命令のレジスタ・フィールドによって識別された２つのレジスタ３０９内で見つけられたオペランドで実行ユニット３０７によって実行可能である。
【００６７】
実行ユニット３０７は、２つのオペランドで算術的加算を実行し、その結果を第３のオペランドに格納するが、第３のオペランドは第３のレジスタまたは２つのソース・レジスタのうちの１つとすることができる。実行ユニットは、好ましくは、偏移、回転、ＡＮＤ、ＯＲ、およびＸＯＲ、ならびに、加算、減算、乗算、除算のうちのいずれかを含む多様な代数関数などの、多様な論理関数を実行することが可能な、算術論理ユニット（ＡＬＵ）４０２を使用する。いくつかのＡＬＵ４０２はスカラ演算用に設計され、いくつかは浮動小数点用である。データは、アーキテクチャに応じて、ビッグ・エンディアン（Big Endian）（最下位バイトが最上位バイト・アドレスにある）またはリトル・エンディアン（最下位バイトが最下位バイト・アドレスにある）とすることができる。IBM z/Architectureはビッグ・エンディアンである。符号付きフィールドは、アーキテクチャに応じて符号および絶対値、１の補数、または２の補数とすることができる。２の補数は、２の補数における負の値または正の値のいずれもＡＬＵ内で単独および加算を必要とするため、ＡＬＵが減算機能を設計する必要がないという点で有利である。数字は一般に省略表現で記述され、１２ビット・フィールドは４０９６バイト・ブロックのアドレスを定義し、たとえば一般に４Kbyte（キロバイト）ブロックとして記述される。
【００６８】
図７を参照すると、分岐命令を実行するための分岐命令情報は、通常、分岐ユニット３０８に送信され、これはしばしば、他の条件付き演算が完了する前に分岐の結果を予測するために、分岐履歴テーブル４３２などの分岐予測アルゴリズムを採用する。現行分岐命令のターゲットはフェッチされ、条件付き演算が完了する前に投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件および投機結果に基づいて完了または破棄される。典型的な分岐命令は、条件コードをテストし、条件コードが分岐命令の分岐要件に合致した場合はターゲット・アドレスへと分岐することが可能であり、ターゲット・アドレスは、たとえばレジスタ・フィールドまたは命令の即時フィールド内で発見されたものを含むいくつかの数値に基づいて計算することができる。分岐ユニット３０８は、複数の入力レジスタ回路４２７、４２８、４２９および出力レジスタ回路４３０を有する、ＡＬＵ４２６を採用することができる。分岐ユニット３０８は、たとえば汎用レジスタ３０９、復号ディスパッチ・ユニット３０６、または他の回路４２５と通信可能である。
【００６９】
命令グループの実行は、たとえば、オペレーティング・システムによって開始されるコンテキスト切り換え、コンテキスト切り換えを発生させるプログラム例外またはエラー、コンテキスト切り換えを発生させるＩ／Ｏ割り込み信号、または（マルチスレッド環境における）複数プログラムのマルチスレッド動作を含む、多様な理由で中断される可能性がある。好ましくは、コンテキスト切り換え動作は現在実行中のプログラムに関する状態情報を保存し、呼び出し中の他のプログラムに関する状態情報をロードする。状態情報は、たとえばハードウェア・レジスタまたはメモリ内に保存可能である。状態情報は、好ましくは、実行されることになる次の命令を指し示すプログラム・カウンタ値、条件コード、メモリ変換情報、およびアーキテクト・レジスタ・コンテンツを含む。コンテキスト切り換え動作は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード（マイクロコード、ピココード、またはライセンス付き内部コード（ＬＩＣ））を単独で、または組み合わせることによって、実行させることができる。
【００７０】
プロセッサは、命令定義方法に従ってオペランドにアクセスする。命令は、命令の一部の値を使用して即時オペランドを提供し、汎用レジスタまたは特定用途向けレジスタ（たとえば浮動小数点レジスタ）のいずれかを明示的に指し示す１つまたは複数のレジスタ・フィールドを提供することができる。命令は、演算コード・フィールドによってオペランドとして識別された暗示レジスタを使用することができる。命令は、オペランドに関するメモリ位置を使用することができる。オペランドのメモリ位置は、命令が、たとえばメモリ内のオペランドのアドレスを提供するためにまとめて加えられる基本レジスタ、インデックス・レジスタ、および即時フィールド（変位フィールド）を定義する、z/Architectureの長変位機構によって例示されるような、レジスタ、即時フィールド、またはレジスタと即時フィールドとの組み合わせによって、提供することができる。本明細書における位置とは、特に指示されていない限り、通常、メイン・メモリ（メイン・ストレージ）内の位置を暗示する。
【００７１】
図８を参照すると、プロセッサはロード／ストア・ユニット３１０を使用してストレージにアクセスする。ロード／ストア・ユニット３１０は、メモリ３０３内のターゲット・オペランドのアドレスを取得すること、および、オペランドをレジスタ３０９または他のメモリ３０３位置にロードすることによって、ロード動作を実行することが可能であるか、あるいは、メモリ３０３内のターゲット・オペランドのアドレスを取得すること、および、レジスタ３０９または他のメモリ３０３位置から取得されたデータをメモリ３０３内のターゲット・オペランド位置に格納することによって、ストア動作を実行することができる。ロード／ストア・ユニット３１０は投機的であり、命令シーケンスに関して順序外れのシーケンスでメモリにアクセスすることができるが、ロード／ストア・ユニット３１０は、命令が実行された順序でのプログラムに対する出現を維持しなければならない。ロード／ストア・ユニット３１０は、汎用レジスタ３０９、復号／ディスパッチ・ユニット３０６、キャッシュ／メモリ・インターフェース３０３、またはその他要素４５５と通信可能であり、ストレージ・アドレスを計算し、動作の順序を維持するためのパイプライン順序付けを提供するための、様々なレジスタ回路、ＡＬＵ４５８、および制御論理４６３を備える。いくつかの動作は順序外れで良いが、ロード／ストア・ユニットは、順序外れ動作を、当分野で周知の順序で実行されたようにプログラムに対して出現させるための機能を提供する。
【００７２】
好ましくは、アプリケーション・プログラムが「見る」アドレスは、しばしば、仮想アドレスと呼ばれる。仮想アドレスは、時に、「論理アドレス」および「実効アドレス」と呼ばれる。これらの仮想アドレスは、単に仮想アドレスをオフセット値でプレフィックスすること、１つまたは複数の変換テーブルを介して仮想アドレスを変換することを含むが、これらに限定されない、多様な動的アドレス変換（ＤＡＴ）３１２技術のうちの１つによって物理メモリ位置へと宛先変更されるという点で、仮想であり、変換テーブルは、好ましくは少なくともセグメント・テーブルおよびページ・テーブルを単独または組み合わせて含み、好ましくはセグメント・テーブルはページ・テーブルを指し示すエントリを有する。z/Architectureでは、領域第１テーブル、領域第２テーブル、領域第３テーブル、セグメント・テーブル、およびオプションのページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、しばしば、仮想アドレスを関連付けられた物理メモリ位置にマッピングするエントリを備える変換索引バッファ（ＴＬＢ）を使用することによって向上する。エントリは、ＤＡＴ３１２が変換テーブルを使用して仮想アドレスを変換した場合に作成される。仮想アドレスのその後の使用では、低速逐次変換テーブル・アクセスではなく、高速ＴＬＢのエントリを使用することができる。ＴＬＢコンテンツは、ＬＲＵ（最長時間未使用）を含む多様な置換アルゴリズムによって管理することができる。
【００７３】
プロセッサがマルチプロセッサ・システムのプロセッサである場合、各プロセッサは、コヒーレンシに関してインターロックされた、Ｉ／Ｏ、キャッシュ、ＴＬＢ、およびメモリなどの共有リソースを維持する責務を負う。典型的には、キャッシュのコヒーレンシを維持するために「スヌープ」技術が使用される。スヌープ環境では、各キャッシュ・ラインは、共有を容易にするために、共有状態、排他的状態、変更済み状態、無効状態などのうちのいずれかであるようにマーク付けすることができる。
【００７４】
Ｉ／Ｏユニット３０４は、たとえばテープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む、周辺デバイスに接続するための手段を、プロセッサに提供する。Ｉ／Ｏユニットは、しばしば、ソフトウェア・ドライバによってコンピュータ・プログラムに提示される。ＩＢＭのz/Seriesなどのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタが、オペレーティング・システムと周辺デバイスとの間に通信を提供する、メインフレームのＩ／Ｏユニットである。
【００７５】
z/ArchitectureのPrinciples of Operationからの以下の説明で、コンピュータ・システムのアーキテクチャについて概説する。
【００７６】
ストレージ
コンピュータ・システムは、メイン・ストレージ内に、情報、ならびにアドレス指定、保護、参照および変更の記録を含める。アドレス指定のいくつかの態様には、アドレスの形式、アドレス・スペースの概念、様々なタイプのアドレス、および、１タイプのアドレスが他のタイプのアドレスに変換される際の様式が含まれる。メイン・ストレージの一部には、永続的に割り当てられたストレージ位置が含まれる。メイン・ストレージは、データの直接アドレス指定可能な高速アクセス・ストレージを、システムに提供する。データおよびプログラムは、どちらも処理の前に（入力デバイスから）メイン・ストレージにロードしなければならない。
【００７７】
メイン・ストレージは、時にキャッシュと呼ばれる、１つまたは複数のより小型の高速アクセス・バッファ・ストレージを含むことができる。キャッシュは、通常、ＣＰＵまたはＩ／Ｏプロセッサに物理的に関連付けられる。性能を除く物理的構造の効果および別個のストレージ・メディアの使用は、一般に、プログラムが監視することはできない。
【００７８】
命令およびデータ・オペランドに対して、別々のキャッシュを維持することができる。キャッシュ内の情報は、キャッシュ・ブロックまたはキャッシュ・ライン（または略してライン）と呼ばれる整数境界（integral boundary）上の連続バイトで維持される。モデルは、バイト単位のキャッシュ・ラインのサイズを戻す、EXTRACT CACHE ATTRIBUTE命令を提供可能である。モデルは、データまたは命令キャッシュ内へのストレージのプリフェッチ、あるいはキャッシュからのデータの解放を実行する、PREFETCH DATA命令およびPREFETCH DATA RELATIVE LONG命令も提供可能である。
【００７９】
ストレージは、ビットの長い水平文字列とみなされる。ほとんどの動作では、ストレージへのアクセスは左から右へと順番に進む。ビットの文字列は、８ビット単位に細分される。８ビット単位はバイトと呼ばれ、すべての情報形式の基本構築ブロックである。ストレージ内の各バイト位置は、そのバイト位置のアドレス、または単にバイト・アドレスである、固有の非負整数によって識別される。隣接するバイト位置は、左の０から始まり、左から右へと順番に進んで行く、連続アドレスを有する。アドレスは符号なしの２進整数であり、２４、３１、または６４ビットである。
【００８０】
情報は、ストレージとＣＰＵまたはチャネル・サブシステムとの間で、１バイトずつ、またはバイト・グループで伝送される。特に指定されていない限り、ストレージ内のバイト・グループは、グループの左端バイトによってアドレス指定される。グループ内のバイト数は、実行されることになる動作によって暗示されるかまたは明示的に指定される。ＣＰＵ動作で使用される場合、バイト・グループはフィールドと呼ばれる。各バイト・グループ内で、ビットは左から右へと順番に番号付けされる。左端のビットは時に「高位」ビットと呼ばれ、右端のビットは「低位」ビットと呼ばれる。しかしながら、ビット番号はストレージ・アドレスではない。バイトのみがアドレス指定可能である。ストレージ内のバイトの個々のビットで動作するためには、バイト全体にアクセスする必要がある。バイト内のビットには、左から右へ０から７までの番号が付けられる。アドレス内のビットは、２４ビット・アドレスの場合は８〜３１または４０〜６３、３１ビット・アドレスの場合は１〜３１または３３〜６３と番号付けされ、６４ビットの場合は０〜６３と番号付けされる。複数バイトの任意の他の固定長形式では、形式を構成するビットに、０から始まる番号が連続して付けられる。エラー検出のために、また好ましくは訂正の際に、各バイトまたはバイト・グループと共に１つまたは複数のチェック・ビットを送信することができる。こうしたチェック・ビットは、マシンによって自動的に生成され、プログラムによって直接制御することはできない。ストレージ容量はバイト数で表される。ストレージ・オペランド・フィールドの長さが命令の演算コードによって暗示される場合、フィールドは１、２、４、８、または１６バイトとすることが可能な固定長を有するものと言われる。いくつかの命令にはより大きなフィールドを暗示することができる。ストレージ・オペランド・フィールドの長さが暗示ではなく明示的に示される場合、そのフィールドは可変長を有するものと言われる。可変長オペランドは、１バイトずつの増分によって長さを変えることができる。ストレージに情報が配置される場合、たとえストレージへの物理経路の幅が、格納されているフィールドの長さよりも大きい可能性があっても、指定されたフィールドに含められたバイト位置のみのコンテンツが置き換えられる。
【００８１】
一定単位の情報がストレージ内の整数境界上になければならない。そのストレージ・アドレスがバイト単位の長さの倍数である場合、境界は、情報の単位に関する整数と呼ばれる。整数境界上の２、４、８、および１６バイトのフィールドには、特別な名前が与えられる。ハーフワードとは、２バイト境界上の２つの連続するバイトのグループであり、命令の基本構築ブロックである。ワードとは、４バイト境界上の４つの連続するバイトのグループである。ダブルワードとは、８バイト境界上の８つの連続するバイトのグループである。カッドワード（quadword）とは、１６バイト境界上の１６の連続するバイトのグループである。ストレージ・アドレスがハーフワード、ワード、ダブルワード、およびカッドワードを指定した場合、アドレスの２進表現は、それぞれ右端に１つ、２つ、３つ、または４つのゼロ・ビットを含む。命令は２バイトの整数境界上になければならない。ほとんどの命令のストレージ・オペランドは、境界合わせ要件を持たない。
【００８２】
命令およびデータ・オペランドに対して別々のキャッシュを実装するモデルでは、ストアがその後フェッチされる命令を変更するかどうかにかかわらず、その後の命令のフェッチ元であるキャッシュ・ラインにプログラムを格納する場合、大幅な遅延が生じる可能性がある。
【００８３】
命令
通常、ＣＰＵの動作は、ストレージ・アドレスの昇順で１つずつ左から右へと順次実行される、ストレージ内の命令によって制御される。分岐、LOAD PSW、割り込み、SIGNAL PROCESSOR順序、または手動介入によって、順次動作における変更が生じる可能性がある。
【００８４】
好ましくは、命令には以下の２つの主要部分が含まれる。
・実行されることになる演算を指定する、演算コード（op code）
・オプションで、関与するオペランドの指定
【００８５】
z/Architectureの命令形式が図９〜図１４に示されている。命令は単にOpcode５０１、あるいは、演算コードおよびレジスタ内またはメモリ内のオペランドの位置を特定するための即時オペランドまたはレジスタ指定子を含む多様なフィールドを、提供することができる。演算コードは、１つまたは複数の特定の汎用レジスタ（ＧＰＲ）などの暗示リソース（オペランドなど）が使用されることになるハードウェアを指示することができる。オペランドは、レジスタ内に位置するオペランド、即時オペランド、およびストレージ内のオペランドという、３つのクラスにグループ分けすることができる。オペランドは、明示的または暗示的に指定することができる。レジスタ・オペランドは、演算コードによってレジスタのタイプが識別される、汎用、浮動小数点、アクセス、または制御のレジスタ内に位置することができる。オペランドを含むレジスタは、命令内のＲフィールドと呼ばれる４ビット・フィールド内でレジスタを識別することによって指定される。いくつかの命令では、オペランドは暗黙的に指定されたレジスタ内に位置し、このレジスタは演算コードによって暗示される。即時オペランドは命令内に含められ、即時オペランドを含む８ビット、１６ビット、または３２ビット・フィールドはＩフィールドと呼ばれる。ストレージ内のオペランドは、暗示長さを有すること、ビット・マスクによって指定されること、命令内のＬフィールドと呼ばれる４ビットまたは８ビットの長さ指定によって指定されること、あるいは、汎用レジスタのコンテンツによって指定された長さを有することができる。ストレージ内のオペランドのアドレスは、汎用レジスタのコンテンツをアドレスの一部として使用する形式によって指定される。これにより、以下のことが可能になる。
省略表記を使用することによって完全なアドレスを指定する
オペランドに対して汎用レジスタを採用する命令を使用して、アドレス操作を実行する
他のプログラムから受け取ったアドレスを直接使用することによって、データ領域の位置とは無関係な命令streamOperateを変更することなく、プログラム手段によってアドレスを修正する
【００８６】
ストレージを参照する際に使用されるアドレスは、命令内のＲフィールドによって指定されたレジスタに含まれるか、または、命令内でそれぞれＢ、Ｘ、およびＤフィールドによって指定される基本アドレス、インデックス、および変位から計算される。ＣＰＵがアクセス・レジスタ・モードの場合、ＢまたはＲフィールドは、アドレスの指定に使用されることに加えて、アクセス・レジスタを指定することができる。命令の実行を記述するために、好ましくは、オペランドは第１および第２のオペランド、さらにいくつかのケースでは、第３および第４のオペランドとして指定される。一般に、２つのオペランドが命令実行に関与し、その結果が第１のオペランドと置き換わる。
【００８７】
命令は１、２、または３ハーフワード長さであり、ハーフワード境界上のストレージ内に位置しなければならない。命令形式を示す図９〜図１４を参照すると、各命令は、E 501、I 502、RI 503 504、RIE 505 551 552 553 554、RIL 506 507、RIS 555、RR 510、RRE 511、RRF 512 513 514、RRS、RS 516 517、RSI 520、RSL 521、RSY 522 523、RX 524、RXE 525、RXF 526、RXY 527、S 530、SI 531、SIL 556、SIY 532、SS 533 534 535 536 537、SSE 541、およびSSF 542の、２５の基本形式のうちの１つであり、ＲＲＦには３つ、ＲＩ、ＲＩＬ、ＲＳ、およびＲＳＹには２つ、ＲＩＥおよびＳＳには５つの変形がある。
【００８８】
形式の名前は、以下のように、総称的に、動作に関与するオペランドのクラスおよびフィールドに関する何らかの詳細を示す。
・ＲＩＳは、レジスタおよび即時動作、ならびにストレージ動作を示す。
・ＲＲＳは、レジスタおよびレジスタ動作、ならびにストレージ動作を示す。
・ＳＩＬは、１６ビットの即時フィールドを備えた、ストレージおよび即時動作を示す。
【００８９】
Ｉ、ＲＲ、ＲＳ、ＲＳＩ、ＲＸ、ＳＩ、およびＳＳ形式では、命令の第１のバイトが演算コードを含む。Ｅ、ＲＲＥ、ＲＲＦ、Ｓ、ＳＩＬ、およびＳＳＥ形式では、命令の第１の２バイトが演算コードを含むが、例外としてＳ形式のいくつかの命令では演算コードが第１のバイトのみにある。ＲＩおよびＲＩＬ形式では、演算コードは命令の第１のバイトおよびビット位置１２〜１５にある。ＲＩＥ、ＲＩＳ、ＲＲＳ、ＲＳＬ、ＲＳＹ、ＲＸＥ、ＲＸＦ、ＲＸＹ、およびＳＩＹ形式では、演算コードは命令の第１のバイトおよび第６のバイトにある。演算コードの第１またはそれのみのバイトの第１の２ビットが、命令の長さおよび形式を以下のように指定する。
【００９０】
ＲＲ、ＲＲＥ、ＲＲＦ、ＲＲＲ、ＲＸ、ＲＸＥ、ＲＸＦ、ＲＸＹ、ＲＳ、ＲＳＹ、ＲＳＩ、ＲＩ、ＲＩＥ、およびＲＩＬ形式では、ＲＩフィールドによって指定されたレジスタのコンテンツが第１のオペランドと呼ばれる。第１のオペランドを含むレジスタは、時に「第１オペランド位置」と呼ばれ、時に「レジスタＲ１」と呼ばれる。ＲＲ、ＲＲＥ、ＲＲＦ、およびＲＲＲ形式では、Ｒ２フィールドは第２のオペランドを含むレジスタを指定し、Ｒ２フィールドはＲ１フィールドと同じレジスタを指定することができる。ＲＲＦ、ＲＸＦ、ＲＳ、ＲＳＹ、ＲＳＩ、およびＲＩＥ形式では、Ｒ３フィールドの使用は命令に依存する。ＲＳおよびＲＳＹ形式では、Ｒ３フィールドは、その代わりにマスクを指定するＭ３フィールドとすることができる。Ｒフィールドは、汎用命令では汎用またはアクセスのレジスタ、制御命令では汎用レジスタ、浮動小数点命令では浮動小数点レジスタまたは汎用レジスタを指定する。汎用および制御レジスタでは、レジスタ・オペランドは、命令に応じて６４ビット・レジスタの３２〜６３のビット位置にあるか、またはレジスタ全体を占有する。
【００９１】
Ｉ形式では、命令の８ビットの即時データ・フィールド、Ｉフィールドのコンテンツが、オペランドとして直接使用される。ＳＩ形式では、命令の８ビットの即時データ・フィールド、Ｉ２フィールドのコンテンツが、第２のオペランドとして直接使用される。Ｂ１およびＤ１フィールドは、１バイト長さの第１のオペランドを指定する。ＳＩＹ形式では、Ｄ１フィールドの代わりにＤＨ１およびＤＬ１フィールドが使用されるという点を除き、動作は同じである。命令ADD HALFWORD IMMEDIATE、COMPARE HALFWORD IMMEDIATE、LOAD HALFWORD IMMEDIATE、およびMULTIPLY HALFWORD IMMEDIATEに関するＲＩ形式では、命令の１６ビットＩ２フィールドのコンテンツは符号付き２進整数として直接使用され、Ｒ１フィールドは第１のオペランドを指定し、命令に応じて３２または６４ビット長さである。命令TEST UNDER MASK（TMHH、TMHL、TMLH、TMLL）では、Ｉ２フィールドのコンテンツがマスクとして使用され、Ｒ１フィールドは第１のオペランドを指定し、６４ビット長さである。
【００９２】
命令INSERTIMMEDIATE、AND IMMEDIATE、OR IMMEDIATE、およびLOADLOGICAL IMMEDIATEでは、Ｉ２フィールドのコンテンツが符号なし２進整数または論理値として使用され、Ｒ１フィールドは第１のオペランドを指定し、６４ビット長さである。ＲＩおよびＲＳＩ形式の相対分岐命令では、１６ビットＩ２フィールドのコンテンツがいくつかのハーフワードを指定する符号付き２進整数として使用される。この数字は、分岐命令のアドレスに追加された場合、分岐アドレスを指定する。ＲＩＬ形式の相対分岐命令では、Ｉ２フィールドは３２ビットであり、同じように使用される。
【００９３】
ＲＩおよびＲＳＩ形式の相対分岐命令では、１６ビットＩ２フィールドのコンテンツがいくつかのハーフワードを指定する符号付き２進整数として使用される。この数字は、分岐命令のアドレスに追加された場合、分岐アドレスを指定する。ＲＩＬ形式の相対分岐命令では、Ｉ２フィールドは３２ビットであり、同じように使用される。ＲＩＥ形式の命令COMPARE IMMEDIATE AND BRANCHRELATIVEおよびCOMPARE LOGICAL IMMEDIATE ANDBRANCH RELATIVEでは、８ビットＩ２フィールドのコンテンツが第２のオペランドとして直接使用される。ＲＩＥ形式の命令COMPARE IMMEDIATE AND BRANCH、COMPARE IMMEDIATE AND TRAP、COMPARE LOGICAL IMMEDIATE AND BRANCH、およびCOMPARE LOGICAL IMMEDIATE AND TRAPでは、１６ビットＩ２フィールドのコンテンツが第２のオペランドとして直接使用される。ＲＩＥ形式の命令COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE、およびCOMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVEでは、１６ビットＩ４フィールドのコンテンツが、分岐アドレスを形成するために命令のアドレスに追加されるいくつかのハーフワードを指定する符号付き２進整数として使用される。
【００９４】
ＲＩＬ形式の命令ADDIMMEDIATE、ADD LOGICAL IMMEDIATE、ADD LOGICAL WITH SIGNED IMMEDIATE、COMPARE IMMEDIATE、COMPARE LOGICAL IMMEDIATE、LOAD IMMEDIATE、およびMULTIPLYSINGLE IMMEDIATEでは、３２ビットＩ２フィールドのコンテンツが第２のオペランドとして直接使用される。
【００９５】
ＲＩＳ形式の命令では、８ビットＩ２フィールドのコンテンツが第２のオペランドとして直接使用される。ＳＩＬ形式では、１６ビットＩ２フィールドのコンテンツが第２のオペランドとして直接使用される。Ｂ１およびＤ１フィールドは、以下で説明するように第１のオペランドを指定する。
【００９６】
ＲＳＬ、ＳＩ、ＳＩＬ、ＳＳＥ、およびほとんどのＳＳ形式では、Ｂ１フィールドによって指定された汎用レジスタのコンテンツが、第１のオペランド・アドレスを形成するためにＤ１フィールドのコンテンツに追加される。ＲＳ、ＲＳＹ、Ｓ、ＳＩＹ、ＳＳ、およびＳＳＥ形式では、Ｂ２フィールドによって指定された汎用レジスタのコンテンツが、第２のオペランド・アドレスを形成するためにＤ２フィールドまたはＤＨ２およびＤＬ２フィールドのコンテンツに追加される。ＲＸ、ＲＸＥ、ＲＸＦ、およびＲＸＹ形式では、
Ｘ２およびＢ２フィールドによって指定された汎用レジスタのコンテンツが、第２のオペランド・アドレスを形成するためにＤ２フィールドまたはＤＨ２およびＤＬ２フィールドのコンテンツに追加される。ＲＩＳおよびＲＲＳ形式、ならびに１つのＳＳ形式では、Ｂ４フィールドによって指定された汎用レジスタのコンテンツが、第４のオペランド・アドレスを形成するためにＤ４フィールドのコンテンツに追加される。
【００９７】
単一の８ビット長さフィールドを伴うＳＳ形式の、命令AND(NC)、EXCLUSIVE OR(XC)、MOVE(MVC)、MOVENUMERICS、MOVE ZONES、およびOR(OC)では、Ｌが、第１のオペランド・アドレスによって指定されるバイトの右側に追加のオペランド・バイトの数を指定する。したがって、第１のオペランドのバイト長さは、０〜２５５のＬの長さコードに対応して、１〜２５６である。ストレージ結果は第１のオペランドと置き換わり、アドレスおよび長さによって指定されたフィールドの外側には決して格納されない。この形式では、第２のオペランドは第１のオペランドと同じ長さを有する。EDIT、EDIT ANDMARK、PACK ASCII、PACK UNICODE、TRANSLATE、TRANSLATE AND TEST、UNPACK ASCII、およびUNPACKUNICODEに適用する先行定義の変形がある。
【００９８】
２つの長さフィールドを伴うＳＳ形式、およびＲＳＬ形式では、Ｌ１が、第１のオペランド・アドレスによって指定されるバイトの右側に追加のオペランド・バイトの数を指定する。したがって、第１のオペランドのバイト長さは、０〜１５のＬ１の長さコードに対応して、１〜１６である。同様に、Ｌ２が、第２のオペランド・アドレスによって指定される位置の右側に追加のオペランド・バイトの数を指定する。結果は第１のオペランドと置き換わり、アドレスおよび長さによって指定されたフィールドの外側には決して格納されない。第１のオペランドが第２よりも長い場合、第２のオペランドは、左側にゼロを用いて第１のオペランドの長さまで拡張される。この拡張では、ストレージ内の第２のオペランドを修正しない。２つのＲフィールドを伴うＳＳ形式では、MOVE TO PRIMARY、MOVE TO SECONDARY、およびMOVE WITH KEY命令によって使用されるように、Ｒ１フィールドによって指定された汎用レジスタのコンテンツは、真長さと呼ばれる３２ビットの符号なし値である。オペランドはどちらも実効長さと呼ばれる長さである。実効長さは、どちらが短い場合でも、真長さに等しいかまたは２５６である。命令は、真長さによって指定されたバイトの合計数を動かすためのループをプログラミングしやすくするように、条件コードを設定する。２つのＲフィールドを伴うＳＳ形式は、LOAD MULTIPLE DISJOINT命令に関するレジスタの領域および２つのストレージ・オペランドを指定するため、ならびに、PERFORM LOCKED OPERATION命令に関する１つまたは２つのレジスタおよび１つまたは２つのストレージ・オペランドを指定するためにも使用される。
【００９９】
Ｂ１、Ｂ２、Ｘ２、またはＢ４のいずれかのフィールドにおけるゼロは、対応するアドレス・コンポーネントの欠如を示す。欠如コンポーネントについて、汎用レジスタのコンテンツ０にかかわらず、ゼロは、中間和を通知するために使用される。ゼロの変位には特別な意味はない。
【０１００】
現行ＰＳＷのビット３１および３２は、アドレス指定モード・ビットである。ビット３１は拡張アドレス指定モード・ビットであり、ビット３２は基本アドレス指定モード・ビットである。これらのビットは、アドレス生成によって作成される実効アドレスのサイズを制御する。現行ＰＳＷのビット３１および３２がどちらもゼロの場合、ＣＰＵは２４ビット・アドレス指定モードにあり、２４ビット命令およびオペランド実効アドレスが生成される。現行ＰＳＷのビット３１がゼロであり、ビット３２が１の場合、ＣＰＵは３１ビット・アドレス指定モードにあり、３１ビット命令およびオペランド実効アドレスが生成される。現行ＰＳＷのビット３１および３２がどちらも１である場合、ＣＰＵは６４ビット・アドレス指定モードにあり、６４ビット命令およびオペランド実効アドレスが生成される。ＣＰＵによる命令の実行には、命令およびオペランドのアドレスの生成が含まれる。
【０１０１】
現行ＰＳＷによって指定された位置から命令がフェッチされる場合、命令アドレスは命令内のバイト数だけ増分され、命令が実行される。その後、シーケンス内の次の命令をフェッチするために、命令アドレスの新しい値を使用することによって、同じステップが繰り返される。２４ビット・アドレス指定モードでは、命令アドレスがラップアラウンド（wrap around）し、命令アドレス２２４−２のハーフワードの後に、命令アドレス０のハーフワードが続く。したがって、２４ビット・アドレス指定モードでは、命令アドレスの更新結果として、ＰＳＷビット位置１０４のいずれの実行も失われる。３１ビットまたは６４ビットのアドレス指定モードでは、命令アドレスが同様にラップアラウンドし、それぞれ命令アドレス２３１−２または２６４−２のハーフワードの後に、命令アドレス０のハーフワードが続く。ＰＳＷビット位置９７または６４の実行が、それぞれ失われる。
【０１０２】
ストレージを参照するオペランド・アドレスは中間値から導出され、この値は、命令内のＲフィールドによって指定されたレジスタに含まれるか、または、基本アドレス、インデックス、および変位の、３つの２進数の合計から算出される。基本アドレス（Ｂ）は、命令内で、Ｂフィールドと呼ばれる４ビット・フィールド内のプログラムによって指定された汎用レジスタに含まれる６４ビット数である。基本アドレスは、プログラムおよびデータ領域をそれぞれ独立にアドレス指定する手段として使用可能である。アレイ・タイプの計算では、アレイの位置を指定することが可能であり、記録タイプの処理では、記録を識別することが可能である。基本アドレスは、ストレージ全体をアドレス指定する。基本アドレスは、インデックス付けにも使用可能である。
【０１０３】
インデックス（Ｘ）は、命令内で、Ｘフィールドと呼ばれる４ビット・フィールド内のプログラムによって指定された汎用レジスタに含まれる６４ビット数である。ＲＸ、ＲＸＥ、およびＲＸＹ形式の命令によって指定されたアドレスにのみ含まれる。ＲＸ、ＲＸＥ、ＲＸＦ、およびＲＸＹ形式の命令は、二重インデックス付けが可能であり、すなわちインデックスを使用して、アレイ内の要素のアドレスを提供することができる。
【０１０４】
変位（Ｄ）は、命令内で、Ｄフィールドと呼ばれるフィールド内に含まれる１２ビットまたは２０ビット数である。１２ビット変位は符号なしであり、基本アドレスによって指定された位置を超えて４０９５バイトまでの相対アドレス指定を提供する。２０ビット変位は符号付きであり、基本アドレス位置を超えて５２４２８７バイトまで、またはその前に５２４２８８バイトまでの、相対アドレス指定を提供する。アレイ・タイプの計算では、変位を使用して、要素に関連付けられた多くの項目のうちの１つを指定することができる。記録の処理では、変位を使用して記録内の項目を識別することができる。１２ビット変位は、ある形式の命令のビット位置２０〜３１にある。いくつかの形式の命令では、第２の１２ビット変位も命令内のビット位置３６〜４７にある。
【０１０５】
２０ビット変位は、ＲＳＹ、ＲＸＹ、またはＳＩＹ形式のみの命令にある。これらの命令では、Ｄフィールドは、ビット位置２０〜３１内のＤＬ（低）フィールドと、ビット位置３２〜３９内のＤＨ（高）フィールドからなる。長変位機構がインストールされた場合、変位の数値は、ＤＬフィールドのコンテンツの左にＤＨフィールドのコンテンツを付加することによって形成される。長変位機構がインストールされない場合、変位の数値は、ＤＬフィールドのコンテンツの左に８つのゼロを付加することによって形成され、ＤＨフィールドのコンテンツは無視される。
【０１０６】
中間和を形成する場合、基本アドレスおよびインデックスが６４ビット２進整数として扱われる。１２ビット変位は１２ビットの符号なし２進整数として扱われ、左に５２のゼロ・ビットが付加される。２０ビット変位は２０ビット符号付き２進整数として扱われ、符号ビットに等しい４４ビットが左に付加される。３つが６４ビット２進数として追加され、オーバフローは無視する。和は常に６４ビット長さであり、生成済みアドレスを形成するために中間値として使用される。中間値のビットには０〜６３が番号付けされる。Ｂ１、Ｂ２、Ｘ２、またはＢ４フィールドのいずれかにおけるゼロは、対応するアドレス・コンポーネントの欠如を示す。欠如コンポーネントについて、汎用レジスタのコンテンツ０にかかわらず、ゼロは、中間和を通知する際に使用される。ゼロの変位には特別な意味はない。
【０１０７】
命令記述が、ストレージ内のオペランドをアドレス指定するために、Ｒフィールドによって指定された汎用レジスタのコンテンツが使用されることを指定する場合、レジスタ・コンテンツは６４ビット中間値として使用される。
【０１０８】
命令は、アドレス計算の場合およびオペランドの位置と同じ汎用レジスタを指定することができる。アドレス計算は、動作によってレジスタが変更されることがあれば、その前に完了する。個々の命令定義に示されていない限り、生成済みオペランド・アドレスは、ストレージ内のオペランドの左端バイトを指定する。
【０１０９】
生成済みオペランド・アドレスは常に６４ビット長さであり、ビットには０〜６３が番号付けされる。生成済みアドレスが中間値から取得される方法は、現行のアドレス指定モードに依存する。２４ビット・アドレス指定モードでは、中間値のビット０〜３９は無視され、生成済みアドレスのビット０〜３９は強制的にゼロとなり、中間値のビット４０〜６３は生成済みアドレスのビット４０〜６３となる。３１ビット・アドレス指定モードでは、中間値のビット０〜３２は無視され、生成済みアドレスのビット０〜３２は強制的にゼロとなり、中間値のビット３３〜６３は生成済みアドレスのビット３３〜６３となる。６４ビットアドレス指定モードでは、中間値のビット０〜６３が生成済みアドレスのビット０〜６３となる。インデックスおよび基本アドレス・レジスタでは、負の値が使用できる。これらの値のビット０〜３２は３１ビット・アドレス指定モードで無視され、ビット０〜３９は２４ビット・アドレス指定モードで無視される。
【０１１０】
分岐命令の場合、分岐が行われた場合に実行されることになる次の命令のアドレスは分岐アドレスと呼ばれる。分岐命令に応じて、命令形式は、ＲＲ、ＲＲＥ、ＲＸ、ＲＸＹ、ＲＳ、ＲＳＹ、ＲＳＩ、ＲＩ、ＲＩＥ、またはＲＩＬとすることができる。ＲＳ、ＲＳＹ、ＲＸ、およびＲＸＹ形式では、分岐アドレスは基本アドレス、変位、さらにＲＸおよびＲＸＹ形式ではインデックスによって指定される。これらの形式では、中間値の生成は、オペランド・アドレス中間値の生成の場合と同じ規則に従う。ＲＲおよびＲＲＥ形式では、Ｒ２フィールドによって指定された汎用レジスタのコンテンツは、分岐アドレスの形成元である中間値として使用される。汎用レジスタ０は、分岐アドレスを含むものとして指定することはできない。Ｒ２フィールド内のゼロの値によって、命令は分岐なしで実行される。
【０１１１】
相対分岐命令は、ＲＳＩ、ＲＩ、ＲＩＥ、およびＲＩＬ形式である。相対分岐命令のＲＳＩ、ＲＩ、およびＲＩＥ形式では、Ｉ２フィールドのコンテンツは、ハーフワードの数を指定する１６ビット符号付き２進整数として扱われる。ＲＩＬ形式では、Ｉ２フィールドのコンテンツは、ハーフワードの数を指定する３２ビット符号付き２進整数として扱われる。分岐アドレスは、相対分岐命令のアドレスに追加されたＩ２フィールドによって指定されるハーフワードの数である。
【０１１２】
ＲＳＩ、ＲＩ、ＲＩＥ、またはＲＩＬ形式の相対分岐命令に関する６４ビット中間値は、２つの加数の和であり、ビット位置０からのオーバフローは無視される。ＲＳＩ、ＲＩ、またはＲＩＥ形式では、第１の加数は、右に１つのゼロ・ビットが付加され、左にコンテンツの符号ビットに等しい４７ビットが付加された、Ｉ２フィールドのコンテンツであるが、COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE、およびCOMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVEの場合、第１の加数は、Ｉ２フィールドに関して前述したようにビットが付加された、Ｉ４フィールドのコンテンツである点を除く。ＲＩＬ形式では、第１の加数は、右に１つのゼロ・ビットが付加され、左にコンテンツの符号ビットに等しい３１ビットが付加された、Ｉ２フィールドのコンテンツである。すべての形式で、第２の加数は分岐命令の６４ビット・アドレスである。分岐命令のアドレスは、次の順次命令をアドレス指定するためにそのアドレスが更新される前のＰＳＷ内の命令アドレスであるか、または、ＥＸＥＣＵＴＥが使用される場合、ＥＸＥＣＵＴＥ命令のターゲットのアドレスである。ＥＸＥＣＵＴＥが２４ビットまたは３１ビットのアドレス指定モードで使用される場合、分岐命令のアドレスは、それぞれ４０または３３のゼロが左に付加されたターゲット・アドレスである。
【０１１３】
分岐アドレスは常に６４ビット長さであり、ビットには０〜６３が番号付けされる。分岐アドレスは現行ＰＳＷのビット６４〜１２７と置き換わる。分岐アドレスが中間値から取得される方法は、アドレス指定モードに依存する。アドレス指定モードを変更するそれらの分岐命令では、新しいアドレス指定モードが使用される。２４ビット・アドレス指定モードでは、中間値のビット０〜３９は無視され、分岐アドレスのビット０〜３９はゼロとされ、中間値のビット４０〜６３は分岐アドレスのビット４０〜６３となる。３１ビット・アドレス指定モードでは、中間値のビット０〜３２は無視され、分岐アドレスのビット０〜３２はゼロとされ、中間値のビット３３〜６３は分岐アドレスのビット３３〜６３となる。６４ビットアドレス指定モードでは、中間値のビット０〜６３が分岐アドレスのビット０〜６３となる。
【０１１４】
いくつかの分岐命令では、分岐は指定された条件を満たすことに依存する。条件が満たされない場合、分岐は実行されず、通常の順次命令実行が続行されて、分岐アドレスは使用されない。分岐が実行された場合、分岐アドレスのビット０〜６３が現行ＰＳＷのビット６４〜１２７と置き換わる。分岐アドレスは分岐動作の一部としてストレージにアクセスするために使用されない。奇数分岐アドレスによる指定例外と分岐位置での命令のフェッチによるアクセス例外とは、分岐動作の一部としては認識されないが、代わりに、分岐位置での命令の実行に関連付けられた例外として認識される。
【０１１５】
BRANCH ANDSAVEなどの分岐命令は、分岐アドレス計算の場合およびオペランドの位置と同じ汎用レジスタを指定することができる。分岐アドレス計算は、動作の残りが実行される前に完了される。
【０１１６】
４章で説明されるプログラム・ステータス・ワードの「制御」は、適切なプログラム実行に必要な情報を含む。ＰＳＷは、命令順序付けを制御するため、ならびに、現在実行されているプログラムに関してＣＰＵの状況を保持および指示するために使用される。アクティブまたは制御ＰＳＷは、現行ＰＳＷと呼ばれる。分岐命令は、意思決定、ループ制御、およびサブルーチン・リンケージの機能を実行する。分岐命令は、新しい命令アドレスを現行ＰＳＷに導入することによって命令の順序付けに影響を与える。１６ビットＩ２フィールドを伴う相対分岐命令は、基本レジスタを使用せずに、分岐命令の位置に対してプラス６４Ｋ−２バイトまたはマイナス６４Ｋバイトまでのオフセットの位置に分岐することができる。３２ビットＩ２フィールドを伴う相対分岐命令は、基本レジスタを使用せずに、分岐命令の位置に対してプラス４Ｇ−２バイトまたはマイナス４Ｇバイトまでのオフセットの位置に分岐することができる。
【０１１７】
意思決定に関する機構は、BRANCHON CONDITION、BRANCH RELATIVE ON CONDITION、およびBRANCH RELATIVE ON CONDITION LONG命令によって提供される。これらの命令は、算術、論理、およびＩ／Ｏ演算の大部分の結果を反映する条件コードを検査する。２つのビットからなる条件コードは、０、１、２、および３という４つの可能な条件コード設定値を提供する。
【０１１８】
任意の設定の特定の意味は、条件コードを設定する動作に依存する。たとえば条件コードは、こうした条件をゼロ、非ゼロ、第１オペランド高、同等、オーバフロー、およびサブチャネル・ビジーなどとして反映する。条件コードは、いったん設定されると、異なる条件コードに設定させる命令によって修正されるまで、変更されないままである。
【０１１９】
ループ制御は、アドレス算術およびカウント演算の結果をテストするために、BRANCH ON CONDITION、BRANCH RELATIVE ON CONDITION、およびBRANCH RELATIVE ON CONDITION LONGを使用することによって実行可能である。いくつかの特に頻度の高い算術およびテストの組み合わせでは、BRANCH ON COUNT、BRANCH ON INDEX HIGH、およびBRANCH ON INDEX LOW OR EQUALが提供され、これらの命令の相対分岐等価物も提供される。これらの分岐が特殊化され、これらのタスクに対する性能を向上させる。
【０１２０】
アドレス指定モードの変更が不要な場合、サブルーチン・リンケージは、BRANCH AND LINKおよびBRANCHAND SAVE命令によって提供される。（BRANCH AND SAVEのこの考察は、BRANCH RELATIVE AND SAVEおよびBRANCH RELATIVE AND SAVE LONGにも適用する）。これらの命令はどちらも、新しい命令アドレスの導入のみならず、戻りアドレスおよび関連付けられた情報の保存も許可する。戻りアドレスは、ストレージ内の分岐命令に続く命令のアドレスであるが、そのターゲットとして分岐命令を有するＥＸＥＣＵＴＥ命令に続く命令のアドレスであるという点は除く。
【０１２１】
BRANCH ANDLINKおよびBRANCH AND SAVEは、どちらもＲ１フィールドを有する。これらは命令に依存するフィールドを用いて分岐アドレスを形成する。命令の動作は以下のように要約される。
・２４ビット・アドレス指定モードでは、どちらの命令も、戻りアドレスを汎用レジスタＲ１のビット位置４０〜６３に配置し、そのレジスタのビット０〜３１は未変更のままとする。BRANCH AND LINKは、命令に関する命令長コード、ならびに現行ＰＳＷからの条件コードおよびプログラム・マスクも、汎用レジスタＲ１のビット位置３２〜３９に配置し、BRANCH AND SAVEはそれらビット位置にゼロを配置する。
・３１ビット・アドレス指定モードでは、どちらの命令も、汎用レジスタＲ１のビット位置３３〜６３に戻りアドレスを、ビット位置３２に１を配置し、レジスタのビット０〜３１は未変更のままとする。
・６４ビット・アドレス指定モードでは、どちらの命令も、汎用レジスタＲ１のビット位置０〜６３に戻りアドレスを配置する。
・いずれのアドレス指定モードでも、どちらの命令も、現行のアドレス指定モードの制御の下で分岐アドレスを生成する。命令は、分岐アドレスのビット０〜６３をＰＳＷのビット位置６４〜１２７に配置する。ＲＲ形式では、命令のＲ２フィールドがゼロである場合、どちらの命令も分岐を実行しない。
【０１２２】
２４ビットまたは３１ビットのアドレス指定モードでは、ＢＲＡＮＣＨ  ＡＮＤ  ＳＡＥは、基本アドレス指定モード・ビット、ＰＳＷのビット３２を、汎用レジスタＲ１のビット位置３２に配置することがわかる。BRANCH AND LINKは３１ビット・アドレス指定モードで同様に実行する。命令BRANCH AND SAVE AND SET MODEおよびBRANCH AND SET MODEは、リンケージ時にアドレス指定モードの変更が必要な場合に使用するためのものである。これらの命令はＲ１およびＲ２フィールドを有する。命令の動作は以下のように要約される。
・BRANCH ANDSAVE AND SET MODEは、BRANCH AND SAVEと同様に汎用レジスタＲ１のコンテンツを設定する。加えて、命令は、拡張アドレス指定モード・ビット、ＰＳＷのビット３１を、レジスタのビット位置６３に配置する。
・Ｒ１が非ゼロの場合、BRANCHAND SET MODEは以下のように実行する。２４または３１ビット・モードでは、ＰＳＷのビット３２を汎用レジスタＲ１のビット位置３２に配置し、レジスタのビット０〜３１および３３〜６３を未変更のままとする。レジスタが命令アドレスを含む場合、レジスタのビット６３はゼロとなるはずであることに留意されたい。６４ビット・モードでは、命令は、ＰＳＷのビット３１（１）を汎用レジスタＲ１のビット位置６３に配置し、レジスタのビット０〜６２を未変更のままとする。
・Ｒ２が非ゼロの場合、どちらの命令もアドレス指定モードを設定し、以下のように分岐を実行する。汎用レジスタＲ２のビット６３は、ＰＳＷのビット位置３１に配置される。ビット６３がゼロの場合、レジスタのビット３２はＰＳＷのビット位置３２に配置される。ビット６３が１の場合、ＰＳＷビット３２は１に設定される。次に分岐アドレスはレジスタのコンテンツから生成されるが、新しいアドレス指定モードの制御の下で、レジスタのビット６３がゼロとして扱われる点を除く。命令は分岐アドレスのビット０〜６３をＰＳＷのビット位置６４〜１２７に配置する。汎用レジスタＲ２のビット６３は未変更のままであるため、呼び出されたプログラムに入力される際に１であってよい。Ｒ２がＲ１と同じである場合、指定された汎用レジスタ内の結果はＲ１レジスタに指定されたものと同じである。
【０１２３】
割り込み（コンテキスト切り換え）
割り込みメカニズムは、ＣＰＵが、構成外部、構成内部、またはＣＰＵ自体の内部の条件の結果として、その状態を変更できるようにする。高優先度の条件に対する高速応答および条件タイプの即時認識を可能にするために、割り込み条件は、外部、入力／出力、マシン・チェック、プログラム、再始動、および監視者呼び出しという、６つのクラスにグループ分けされる。
【０１２４】
割り込みは、現行ＰＳＷを古いＰＳＷとして格納すること、割り込みの原因を識別する情報を格納すること、および新しいＰＳＷをフェッチすることにある。処理は、新しいＰＳＷによって指定された通りに再開する。割り込みに格納された古いＰＳＷは、通常、割り込みが発生しなければ次に実行されることになる命令のアドレスを含むため、割り込まれたプログラムを再開することができる。プログラムおよび監視者呼び出し割り込みの場合、格納された情報は、最後に実行された命令の長さを識別するコードも含むため、プログラムは割り込みの原因に対応することができる。通常の対応が中断を発生させた命令の再実行である、いくつかのプログラム条件の場合、命令アドレスは最後に実行された命令を直接識別する。
【０１２５】
再始動の場合を除き、割り込みはＣＰＵが動作状態にある場合にのみ発生可能である。再始動割り込みは、ＣＰＵが停止または動作状態のいずれかにある場合に発生可能である。
【０１２６】
アクセス例外は、例外が関連付けられた命令の実行の一部として認識される。ＣＰＵが、使用不可能な場所からのプリフェッチを試行するか、または何らかの他のアクセス例外条件を検出した場合、アクセス例外は認識されないが、分岐命令または割り込みは、命令が実行されないように命令シーケンスを変更する。あらゆる命令は、命令フェッチによってアクセス例外を認識可能にすることができる。加えて、命令実行に関連付けられたアクセス例外は、ストレージ内のオペランドへのアクセスによって発生する可能性がある。第１の命令ハーフワードが例外に遭遇せずにフェッチできない場合、命令のフェッチによるアクセス例外が示される。命令の第１のハーフワードにアクセス例外がない場合、命令の第１の２ビットによって指定された命令長さに従い、追加のハーフワードに対してアクセス例外を示すことができるが、命令の第２または第３のハーフワードにアクセスせずに動作が実行できる場合、未使用の部分に対してアクセス例外が示されるかどうかは予測不能である。命令フェッチに対するアクセス例外の指示はすべての命令に共通であるため、個々の命令定義ではカバーされていない。
【０１２７】
他の方法で個々の命令記述に示されている場合を除き、オペランド位置へのアクセスに関連付けられた例外に対して以下の規則が適用される。フェッチ・タイプのオペランドの場合、アクセス例外は必然的に、動作を完了するために必要なオペランドのその部分に対してのみ示される。アクセス例外が、動作を完了するために必要でないフェッチ・タイプのオペランドのその部分に対して示されるかどうかは、予測不能である。
【０１２８】
ストア・タイプのオペランドの場合、たとえオペランドのアクセス不能部分を使用せずに動作が完了できる場合であっても、アクセス例外はオペランド全体に対して認識される。ストア・タイプのオペランドの値が予測不能であると定義される状況では、アクセス例外が示されるかどうかは予測不能である。オペランド位置へのアクセスがアクセス例外を認識できるようにする場合は必ず、「アクセス」という語が命令の記述におけるプログラム例外のリストに含められる。このエントリは、どのオペランドが例外を認識できるようにするか、および、そのオペランド位置へのフェッチまたはストア・アクセスで例外が認識されるかどうかも示す。アクセス例外は、各特定の命令に対して定義されたようなオペランドの部分に対してのみ認識される。
【０１２９】
ＣＰＵが無効の演算コードを使用して命令の実行を試行した場合、演算例外が認識される。演算コードが割り当てられていない場合があるか、または演算コードを備えた命令がＣＰＵにインストールされない場合がある。演算が抑制される。命令長コードは１、２、または３である。演算例外は、0001hexのプログラム割り込みコードによって示される（または同時ＰＥＲイベントが示される場合は0081hex）。
【０１３０】
いくつかのモデルでは、援用あるいは特殊機能またはカスタム機能の一部として提供されるような、本公開で説明されていない命令を提供する場合がある。したがって、本公開で説明されていない演算コードが、必ずしも演算例外を認識させるとは限らない。さらに、これらの命令は演算のモードをセットアップさせるか、または、それ以外の方法で後続の命令の実行に影響を与えるようにマシンを変更する場合がある。こうした演算の実行を避けるために、本公開で説明されていない演算コードを伴う命令は、演算コードに関連付けられた特定の機能が望ましい場合にのみ実行されるべきである。
【０１３１】
指定例外は、以下の事項のいずれかに当てはまる場合に認識される。
１．ＰＳＷの割り当てられていないビット位置（すなわち、ビット位置０、２〜４、２４〜３０、または３３〜６３のいずれか）に１が導入される。これは初期のＰＳＷ指定例外として処理される。
２．ＰＳＷのビット位置１２に１が導入される。これは初期のＰＳＷ指定例外として処理される。
３．ＰＳＷは以下のいずれかの場合無効である。ａ．ＰＳＷのビット３１が１であり、ビット３２がゼロである。ｂ．ＰＳＷのビット３１および３２がゼロであって、２４ビット・アドレス指定モードを示し、ＰＳＷのビット６４〜１０３がすべてゼロではない。ｃ．ＰＳＷのビット３１がゼロであり、ビット３２が１であって、３１ビット・アドレス指定モードを示し、ＰＳＷのビット６４〜９６がすべてゼロではない。これは、初期のＰＳＷ指定例外として処理される。
４．ＰＳＷが奇数命令アドレスを含む。
５．オペランド・アドレスが、整数境界を、こうした整数境界指定を必要とする命令内に指定しない。
６．奇数番号付けされた汎用レジスタが、偶数番号付けされたレジスタ指定を必要とする命令のＲフィールドによって指定される。
７．０、１、４、５、８、９、１２、または１３以外の浮動小数点レジスタが、拡張オペランドに対して指定される。
８．１０進演算の乗数または除数が１５桁および符号を超える。
９．１０進の乗算または除算において、第１オペランド・フィールドの長さが第２オペランド・フィールドの長さよりも短いかまたは等しい。
１０．CIPHERMESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST、COMPUTE LAST MESSAGE DIGEST、またはCOMPUTE MESSAGE AUTHENTICATION CODEの実行が試行され、汎用レジスタ０のビット５７〜６３内の機能コードが割り当てられていないかまたは導入されていない機能コードを含む。
１１．CIPHERMESSAGEまたはCIPHER MESSAGE WITH CHAININGの実行が試行され、Ｒ１またはＲ２フィールドが奇数番号付けされたレジスタまたは汎用レジスタ０を指定する。
１２．CIPHERMESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST、またはCOMPUTE MESSAGE AUTHENTICATION CODEの実行が試行され、第２のオペランド長さが指定された機能のデータ・ブロック・サイズの倍数でない。この指定例外条件は照会機能に適用されない。
１３．COMPAREAND FORM CODEWORDの実行が試行され、汎用レジスタ１、２、および３が初期に偶数値を含まない。
３２．COMPAREAND SWAP AND STOREの実行が試行され、以下の条件のいずれかが存在する。
・機能コードが割り当てられていない値を指定する。
・ストア特徴が割り当てられていない値を指定する。
・機能コードが０であり、第１のオペランドがワード境界上に指定されていない。
・機能コードが１であり、第１のオペランドがダブルワード境界上に指定されていない。
・第２のオペランドが、ストア値のサイズに対応する整数境界上に指定されていない。
３３．COMPARELOGICAL LONG UNICODEまたはMOVE LONG UNICODEの実行が試行され、汎用レジスタＲ１＋１またはＲ３＋１のいずれかのコンテンツが偶数バイトを指定しない。
３４．COMPARELOGICAL STRING、MOVE STRING、またはSEARCH STRINGの実行が試行され、汎用レジスタ０のビット３２〜５５がすべてゼロではない。
３５．COMPRESSIONCALLの実行が試行され、汎用レジスタ０のビット４８〜５１が２進値００００および０１１０〜１１１１のいずれかを有する。
３６．COMPUTEINTERMEDIATE MESSAGE DIGEST、COMPUTE LAST MESSAGE DIGEST、またはCOMPUTE MESSAGE AUTHENTICATION CODEの実行が試行され、以下のいずれかがあてはまる。
・Ｒ２フィールドが奇数番号付けされたレジスタまたは汎用レジスタ０を指定する。
・汎用レジスタ０のビット５６がゼロでない。
３７．CONVERTHEP TO BFP、CONVERT TO FIXED（ＢＦＰまたはＨＦＰ）、またはLOAD FP INTEGER（ＢＦＰ）の実行が試行され、Ｍ３フィールドが有効な修正子を指定しない。
３８．DIVIDE TOINTEGERの実行が試行され、Ｍ４フィールドが有効な修正子を指定しない。
３９．EXECUTEの実行が試行され、ターゲット・アドレスが奇数である。
４０．EXTRACTSTACKED STATEの実行が試行され、汎用レジスタＲ２のビット位置５６〜６３のコードが、ＡＳＮおよびＬＸ再使用機構がインストールされていない場合に４より大きいか、またはこの機構がインストールされている場合に５より大きい。
４１．FINDLEFTMOST ONEの実行が試行され、Ｒ１フィールドが奇数番号付けされたレジスタを指定する。
４２．INVALIDATEDAT TABLE ENTRYの実行が試行され、汎用レジスタＲ２のビット４４〜５１がすべてゼロではない。
４３．LOAD FPCの実行が試行され、ＦＰＣレジスタ内のサポートされていないビットに対応する第２のオペランドの１つまたは複数のビットが１である。
４４．LOADPAGE-TABLE-ENTRY ADDRESSの実行が試行され、命令のＭ４フィールドが２進００００〜０１００以外のいずれかの値を含む。
４５．LOAD PSWの実行が試行され、第２のオペランド・アドレスでダブルワードのビット１２がゼロである。これは、この例外が認識されるか否かにかかわらず、モデルに依存している。
４６．MONITORCALLの実行が試行され、命令のビット位置８〜１１がゼロを含まない。
４７．MOVE PAGEの実行が試行され、汎用レジスタ０のビット位置４８〜５１がゼロを含まないか、またはレジスタのビット５２および５３がどちらも１である。
４８．PACKASCIIの実行が試行され、Ｌ２フィールドが３１より大きい。
４９．PACKUNICODEの実行が試行され、Ｌ２フィールドが６３より大きいかまたは偶数である。
５０．PERFORM FLOATINGPOINT OPERATIONの実行が試行され、汎用レジスタ０のビット３２がゼロであり、ビット３３〜６３の１つまたは複数のフィールドが無効であるかまたは導入されていない機能を指定する。
５１．PERFORMLOCKED OPERATIONの実行が試行され、いかのいずれかがあてはまる。・Ｔビット、汎用レジスタ０のビット５５がゼロであＲ、レジスタのビット５６〜６３の機能コードが無効である。・汎用レジスタ０のビット３２〜５４がすべてゼロではない。・アクセス・レジスタ・モードで、ＡＬＥＴを含むパラメータ・リストを使用させる機能コードについて、Ｒ３フィールドがゼロである。
５２．PERFORMTIMING FACILITY FUNCTIONの実行が試行され、以下のどちらかがあてはまる。・汎用レジスタ０のビット５６がゼロでない。・汎用レジスタ０のビット５７〜６３が割り当てられていないかまたは導入されていない機能コードを指定する。
５３．PROGRAMTRANSFERまたはPROGRAM TRANSFER WITH INSTANCEの実行が試行され、以下のすべてにあてはまる。・ＰＳＷの拡張アドレス指定モード・ビットがゼロである。・命令のＲ２フィールドによって指定された汎用レジスタ内の基本アドレス指定モード・ビット、ビット３２がゼロである。・同じレジスタ内の命令アドレスのビット３３〜３９がすべてゼロではない。
５４．RESUMEPROGRAMの実行が試行され、以下のどちらかがあてはまる。
・第２のオペランド内のＰＳＷフィールドのビット３１、３２、および６４〜１２７が、現行ＰＳＷ内の配置に有効でない。この例外は、以下のいずれかにあてはまる場合に認識される。−ビット３１および３２がどちらもゼロであり、ビット６４〜１０３がすべてゼロではない。−ビット３１および３２がそれぞれゼロおよび１であり、ビット６４〜９６がすべてゼロではない。−ビット３１および３２がそれぞれ１およびゼロである。−ビット１２７が１である。
・パラメータ・リストのビット０〜１２がすべてゼロではない。
５５．SEARCHSTRING UNICODEの実行が試行され、汎用レジスタ０のビット３２〜４７がすべてゼロではない。
５６．SETADDRESS SPACE CONTROLまたはSET ADDRESS SPACE CONTROL FASTの実行が試行され、第２のオペランド・アドレスのビット５２および５３がどちらもゼロではない。
５７．SETADDRESSING MODE（ＳＡＭ２４）の実行が試行され、ＰＳＷ内の未更新命令アドレスのビット０〜３９、ＰＳＷのビット６４〜１０３が、すべてゼロではない。
５８．SETADDRESSING MODE（ＳＡＭ３１）の実行が試行され、ＰＳＷ内の未更新命令アドレスのビット０〜３２、ＰＳＷのビット６４〜９６が、すべてゼロではない。
５９．SET CLOCKPROGRAMMABLE FIELDの実行が試行され、汎用レジスタ０のビット３２〜４７がすべてゼロではない。
６０．SET FPCの実行が試行され、ＦＰＣレジスタ内のサポートされていないビットに対応する第１のオペランドの１つまたは複数のビットが１である。
６１．STORESYSTEM INFORMATIONの実行が試行され、汎用レジスタ０の機能コードが有効であり、以下のどちらかにあてはまる。  ・汎用レジスタ０のビット３６〜５５および汎用レジスタ１のビット３２〜４７が、すべてゼロではない。  ・第２のオペランド・アドレスが４Ｋバイト境界と整合しない。
６２．TRANSLATETWO TO ONEまたはTRANSLATE TWO TO TWOの実行が試行され、汎用レジスタＲ１＋１内の長さが偶数バイトを指定しない。
６３．UNPACKASCIIの実行が試行され、Ｌ１フィールドが３１より大きい。
６４．UNPACKUNICODEの実行が試行され、Ｌ１フィールドが６３より大きいかまたは偶数である。
６５．UPDATETREEの実行が試行され、汎用レジスタ４および５の初期コンテンツが２４ビットまたは３１ビットのアドレス指定モードで８の倍数でないか、または６４ビット・アドレス指定モードで１６の倍数でない。古いＰＳＷによって識別された命令の実行が抑制される。しかしながら、初期のＰＳＷ指定例外の場合（原因１〜３）、新しいＰＳＷを導入する演算は完了するが、その後すぐに割り込みが発生する。好ましくは、命令長コード（ＩＬＣ）は１、２、または３であり、例外を発生させる命令の長さを示す。命令アドレスが奇数の場合（ページ６〜３３の原因４）、ＩＬＣが１、２、または３であるかどうかは予測不能である。初期のＰＳＷ指定例外によって例外が認識され（原因１〜３）、LOAD PSW、LOAD PSW EXTENDED、PROGRAM RETURN、または割り込みによって、例外が導入された場合、ＩＬＣは０である。SET ADDRESSING MODE（ＳＡＭ２４、ＳＡＭ３１）によって例外が導入された場合、ＩＬＣは１であるか、またはSET ADDRESSING MODEがEXECUTEのターゲットであった場合は２である。SET SYSTEM MASKによって、またはSTORE THEN OR SYSTEM MASKによって、例外が導入された場合、ＩＬＣは２である。
【０１３２】
プログラム割り込みは、プログラムの実行中に発生する例外およびイベントを報告するために使用される。プログラム割り込みは、古いＰＳＷを実位置３３６〜３５１に格納させ、新しいＰＳＷを実位置４６４〜４７９からフェッチさせる。割り込みの原因は割り込みコードによって識別される。割り込みコードは実位置１４２〜１４３に配置され、命令長コードは実位置１４１のバイトのビット位置５および６に配置され、残りのビットはゼロに設定され、ゼロは実位置１４０に格納される。何らかの原因の場合、割り込みの理由を識別する追加情報は実位置１４４〜１８３に格納される。ＰＥＲ−３機構がインストールされた場合、プログラム割り込み動作の一部として、ブレーキング・イベント・アドレス・レジスタ（breaking-event-address register）のコンテンツは実ストレージ位置２７２〜２７９に配置される。ＰＥＲイベントおよび暗号演算例外を除き、割り込みを発生させる条件は、割り込みコードの右端の７ビット位置に配置された符号化値によって示される。一度の１つの条件のみを示すことができる。割り込みコードのビット０〜７はゼロに設定される。ＰＥＲイベントは、割り込みコードのビット８を１に設定することによって示される。これが唯一の条件である場合、ビット０〜７および９〜１５もゼロに設定される。ＰＥＲイベントが他のプログラム割り込み条件と同時に示される場合、ビット８は１であり、ビット０〜７および９〜１５は他の条件の場合と同様に設定される。暗号演算例外は、１６進０１１９、またはＰＥＲイベントも示される場合は１６進０１９９の割り込みコードによって示される。
【０１３３】
対応するマスク・ビットが存在する場合、プログラム割り込みはそのマスク・ビットが１である場合にのみ発生する。ＰＳＷ内のプログラム・マスクは、ＦＰＣレジスタ内のＩＥＥＥマスクがＩＥＥＥ例外を制御する、制御レジスタ０内のビット３３がSET SYSTEM MASKが特別演算例外を引き起こすかどうかを制御する、制御レジスタ８内のビット４８〜６３が監視イベントによる割り込みを制御する、および、マスクの階層がＰＥＲイベントによる割り込みを制御する、という、４つの例外を制御する。いずれかの制御マスク・ビットがゼロである場合、条件は無視され、この条件は保留されない。
【０１３４】
プログラム割り込みに関する新しいＰＳＷがＰＳＷ形式エラーを有するか、または命令フェッチのプロセスにおいて例外が認識された場合、プログラム割り込みの文字列が発生する可能性がある。
【０１３５】
プログラム例外として示される条件のいくつかは、チャネル・サブシステムによって認識される場合もあり、この場合、例外はサブチャネル・ステータス・ワードまたは拡張ステータス・ワード内に示される。
【０１３６】
データ例外がプログラム割り込みを発生させた場合、データ例外コード（ＤＸＣ）が一１４７に格納され、ゼロが位置１４４〜１４６に格納される。ＤＸＣは、様々なタイプのデータ例外条件を区別する。ＡＦＰレジスタ（追加の浮動小数点レジスタ）制御ビット、制御レジスタ０のビット４５が１である場合、ＤＸＣは浮動小数点制御（ＦＰＣ）レジスタのＤＸＣフィールド内にも配置される。ＦＰＣレジスタ内のＤＸＣフィールドは、任意の他のプログラム例外が報告される場合、未変更のまま残される。ＤＸＣは、データ例外の特定原因を示す８ビット・コードである。
【０１３７】
ＤＸＣ２および３は互いに排他的であり、いずれの他のＤＸＣよりも優先度が高い。したがって、たとえばＤＸＣ２（ＢＦＰ命令）はいずれのＩＥＥＥ例外よりも優先され、ＤＸＣ３（ＤＦＰ命令）はいずれのＩＥＥＥ例外またはシミュレートされたＩＥＥＥ例外よりも優先される。他の例として、ＤＸＣ３（ＤＦＰ命令）およびＤＸＣ１（ＡＦＰレジスタ）の両方に関する条件が存在する場合、ＤＸＣ３が報告される。指定例外およびＡＦＰレジスタ・データ例外の両方が適用される場合、どちらが報告されるかは予測不能である。
【０１３８】
アドレス指定例外は、ＣＰＵが構成内で使用できないメイン・ストレージ位置の参照を試行した場合に認識される。メイン・ストレージ位置は、位置がインストールされていない場合、ストレージ・ユニットが構成内にない場合、または、ストレージ・ユニットの電源がオフである場合、構成内で使用できない。構成内で使用できないストレージ位置を指定するアドレスは、無効であると言われる。命令のアドレスが無効である場合、演算は抑制される。同様に、EXECUTEのターゲット命令のアドレスが無効である場合、演算は抑制される。また、テーブルまたはテーブル・エントリへのアクセス時にアドレス指定例外に遭遇した場合、演算のユニットは抑制される。規則が適用されるテーブルおよびテーブル・エントリは、ディスパッチ可能ユニット制御テーブル、１次ＡＳＮ第２テーブル・エントリ、ならびに、アクセス・リスト、領域第１テーブル、領域第２テーブル、領域第３テーブル、セグメント・テーブル、ページ・テーブル、リンケージ・テーブル、リンケージ第１テーブル、リンケージ第２のテーブル、エントリ・テーブル、ＡＳＮ第１テーブル、ＡＳＮ第２テーブル、権限テーブル、リンケージ・スタック、および追跡テーブル内の、エントリである。アドレス指定例外は、動的アドレス変換に関する暗黙的参照と、LOAD PAGE-TABLE-ENTRY ADDRESS、LOAD REAL ADDRESS、STORE REAL ADDRESS、およびTEST PROTECTIONの実行に関連付けられた参照との両方において、領域第１テーブル、領域第２テーブル、領域第３テーブル、セグメント・テーブル、およびページ・テーブルへの参照に遭遇した場合、結果として抑制される。同様に、ディスパッチ可能ユニット制御テーブル、１次ＡＳＮ第２テーブル、アクセス・リスト、ＡＳＮ第２テーブル、または権限テーブルへのアクセスのためのアドレス指定例外は、暗黙的に、あるいは、LOAD PAGE-TABLE-ENTRY ADDRESS、LOAD REAL ADDRESS、STORE REAL ADDRESS、TEST ACCESS、またはTESTPROTECTIONの一部として実行された、アクセス・レジスタ変換に遭遇した場合、結果として抑制される。実行が抑制されるいくつかの特別な命令を除き、変換可能であるが使用できない位置を指定するオペランド・アドレスの場合、演算は終了する。終了した場合、変更は結果フィールドに対してのみ実行することができる。このような状況では、「結果フィールド」という用語は、条件コード、レジスタ、ならびに、提供され、命令によって変更されるように指定された、任意のストレージ位置を含む。
【０１３９】
ストレージ・オペランド・フェッチ参照
ストレージ・オペランドのバイトがソースとしてのみ命令実行に関与している場合、オペランドはフェッチ・タイプ・オペランドと呼ばれ、この位置への参照はストレージ・オペランド・フェッチ参照と呼ばれる。フェッチ・タイプ・オペランドは、アクセス例外がフェッチに関するものであることを示すことによって、個々の命令定義において識別される。
【０１４０】
フェッチ・タイプ・オペランドの単一バイト内のすべてのビットは、同時にアクセスされる。オペランドが複数のバイトからなる場合、バイトはストレージから１バイトずつ漸次にフェッチすることができる。特に指定されていない限り、バイトは必ずしも任意の特定の順序でフェッチされない。
【０１４１】
１つの命令のストレージ・オペランド・フェッチ参照は、他のＣＰＵおよびチャネル・プログラムによって観察されるように、すべての先行する命令の後で、また後続の命令の前に、実行される。任意の１つの命令のオペランドは、その命令に対して指定された順序でフェッチされる。ＣＰＵは、命令が実行される前に命令のオペランドをフェッチすることができる。オペランドがフェッチされてからそれが使用されるまでの時間の長さに関して、制限は定義されていない。また、ＣＰＵ自体が監視する場合、そのストレージ・オペランド参照は概念的順序で実行される。
【０１４２】
ある特定の命令の場合、複数のオペランドに関するフェッチ参照は、他のＣＰＵおよびチャネル・プログラムによるある一定のアクセスに対してロックされるように見える場合がある。こうしたフェッチ参照は、インターロック・フェッチ参照と呼ばれる。インターロック・フェッチ参照に関連付けられたフェッチ・アクセスは、必ずしも次々に続いて発生するものではないが、他のＣＰＵによるすべてのストア・アクセスが、インターロック・フェッチ参照のフェッチ・アクセス間のインターロック・フェッチ参照と同じ位置で発生することはできない。
【０１４３】
LOAD PAIRDISJOINT命令に関するストレージ・オペランド・フェッチ参照は、インターロック・フェッチ参照であるように見られる場合がある。LOAD PAIR DISJOINTがインターロック・フェッチを使用して両方のオペランドをフェッチできるか否かは、条件コードによって示される。
【０１４４】
ストレージ・オペランド・ストア参照
ストレージ・オペランドのバイトが宛先としてのみ命令実行に関与している場合、その結果に置き換えられるという点で、オペランドはストア・タイプ・オペランドと呼ばれ、位置への参照はストレージ・オペランド・ストア参照と呼ばれる。ストア・タイプ・オペランドは、アクセス例外が格納に関するものであることを示すことによって、個々の命令定義内で識別される。
【０１４５】
ストア・タイプ・オペランドの単一バイト内にあるすべてのビットは同時にアクセスされる。オペランドが複数のバイトからなる場合、バイトはストレージ内に１バイトずつ漸次に配置することができる。特に指定されていない限り、バイトは必ずしも任意の特定の順序で格納されない。
【０１４６】
ＣＰＵは、ストレージへの結果の配置を遅延させることができる。結果を格納するまで保留にしておくことが可能な時間の長さに関して、制限は定義されていない。この遅延は、結果がストレージに配置される順番に影響を与えることはない。
【０１４７】
１つの命令の結果は、他のＣＰＵおよびチャネル・プログラムによって観察されるように、すべての先行する命令の結果がストレージ内に配置された後に、また後続の命令のいずれの結果が格納されるよりも前に、ストレージ内に配置される。任意の１つの命令の結果は、その命令に関して指定された順序で格納される。
【０１４８】
ＣＰＵは、ＣＰＵによってストレージ位置に向けて送られたすべての情報が格納されるまで、オペランド、ＡＲＴテーブル・エントリ、またはＤＡＴテーブル・エントリを、その位置からフェッチしない。プリフェッチされた命令は、情報がストレージ内に出現する前に更新されるように見られる場合がある。
【０１４９】
ストアは必然的に、シリアル化演算の結果としてのみ、またＣＰＵが停止状態に入る前に完了される。
【０１５０】
ブロック同時参照
いくつかの参照では、ハーフワード、ワード、ダブルワード、またはカッドワード内の、すべてのバイトへのアクセスは、他のＣＰＵおよびチャネル・プログラムによって観察されるように、ブロック同時と見られるように指定される。ハーフワード、ワード、ダブルワード、またはカッドワードは、このセクションでブロックと呼ばれる。フェッチ・タイプ参照がブロック内で同時と見られるように指定された場合、ブロックに含まれるバイトがフェッチされている期間、他のＣＰＵまたはチャネル・プログラムによるブロックへのストア・アクセスは許可されない。ストア・タイプ参照がブロック内で同時と見られるように指定された場合、ブロック内のバイトが格納されている期間、他のＣＰＵまたはチャネル・プログラムによるブロックへのフェッチまたはストアのいずれかのアクセスは許可されない。
【０１５１】
ＣＰＵシリアル化
以下の考察では、シリアル化命令という用語は、１つまたは複数のシリアル化機能を実行させる命令を言い表す。シリアル化演算という用語は、シリアル化機能を実行させる割り込みなどの、命令内の演算の単位またはマシン動作を言い表す。
【０１５２】
シリアル化演算に関連付けられたイベントのシーケンスは以下の通りである。
１．他のＣＰＵおよびチャネル・プログラムによって観察されるように、ＣＰＵによる概念上は以前すべてのストレージ・アクセスが完了する。これには、ストレージ・キーへの概念上は以前すべてのストアおよび変更が含まれる。
２．シリアル化演算に関連付けられた通常の機能が実行される。命令実行の場合、オペランドがフェッチされ、結果の格納が完了する。例外は、以前格納が完了する前にオペランドのフェッチが可能なLOAD PSW、LOAD PSW EXTENDED、およびSET PREFIX、ならびに、割り込みコードおよび関連付けられたフィールドがシリアル化の前に格納可能な割り込みである。シリアル化命令のフェッチは命令の実行の前に発生し、以前命令の実行よりも先行することが可能であるが、いかなる以前シリアル化演算の完了よりも先行することはできない。割り込みの場合、古いＰＳＷ、割り込みコード、および他の情報があれば格納され、新しいＰＳＷがフェッチされるが、必ずしもその順序であるとは限らない。
３．最後に、概念上は後続の演算に関する命令フェッチおよびオペランド・アクセスが開始可能である。
【０１５３】
シリアル化機能は、内部でシリアル化機能が実行されるＣＰＵの制御下にある、ストレージ・アクセスのシーケンスに影響を与える。他のＣＰＵおよびチャネル・プログラムの制御下にあるストレージ・アクセスのシーケンスには影響を与えない。
【０１５４】
特定オペランド・シリアル化
ある一定の命令は、命令のオペランドに対して特定オペランド・シリアル化を実行させる。他のＣＰＵおよびチャネル・プログラムによって観察されるように、特定オペランド・シリアル化演算は、命令の特定ストレージ・オペランドへの概念上は後続のアクセスが発生する前に、ＣＰＵによる概念上は以前のすべてのストレージ・アクセスを完了することにある。特定オペランド・シリアル化を発生させる命令の完了時に、他のＣＰＵおよびチャネル・プログラムによって観察されるように、命令のストアが完了する。
【０１５５】
インターロック命令実行
命令が実行される場合、特に、命令が他のプロセッサと共有するリソースにアクセス可能なマルチプロセッサ・システム内で実行される場合、プログラムは、命令が実行されている間に他のプロセッサがリソースにアクセスするのを防ぐために、他のプロセッサに対するリソース可用性をインターロックする必要がある。インターロックしない場合、予測不能な結果が生じる可能性がある。いくつかのアーキテクチャは、命令実行の重要な部分でリソースがインターロックされる命令機能を提供する。共有プロセッサによる混乱にさらされているリソースには、ほとんどのマルチプロセッサ内のメモリおよびメモリ・キャッシュが含まれる。共有可能なプロセッサの他のリソースは知られており、対応するアーキテクチャ文書によって指定されている。リソースをインターロックしないいくつかの命令実行機能は、たとえば、すでに説明した、ストレージ・オペランド・フェッチ参照、ストレージ・オペランド・ストア参照、ブロック同時参照、ＣＰＵシリアル化、および特定オペランド・シリアル化である。
【０１５６】
本発明は、命令がリソース干渉の可能性にさらされていたかどうかの実装に依存する意思決定を可能にすること、ならびに、命令が、命令のアーキテクト動作に影響を与えた可能性がある介入リソース動作を有するいかなる可能性もなしに完了したか、または、介入リソース動作にさらされたかを示すように、インジケータを設定することによって、ある一定の命令に関するインターロックが不要な、アーキテクチャを提供する。したがってプログラムは、他のプロセッサからの干渉によって結果が影響を受けたかどうかを判定するためのインジケータのテストが、こうした命令の実行後に行われるように作成可能である。テストが失敗した場合、回復ルーチンが呼び出される。一実施形態では、インジケータは条件コードとすることが可能であり、テストは、条件コードのテスト、および影響を受けた命令を再実行するための分岐戻り、とすることが可能である。
【０１５７】
独立ペア・ロード機構
Java(R)のようなマルチスレッド・プログラミング言語は、アプリケーション・スレッド全体にわたる状態の正確さおよび一貫性を保証するために、データ構造およびオブジェクトを同期化する必要がある。こうした一貫性を強化するための典型的なメカニズムの１つが、スレッド間で共有されるデータ構造またはオブジェクト内にロック・ワードを埋め込むことである。その後、比較およびスワップのようなアトミック更新命令を使用して、データ構造の所有を同期化することができる。たとえばオブジェクトＯについて以下のように考察してみる。
【数１】
2013519955.tif 000003
lock_idは、アンロックされた場合にNULL値を保持する。所与のスレッドがオブジェクトＯの読み取りまたは書き込みを希望する場合、そのthread_idをlock_idに正常に比較およびスワップ（ＣＡＳ）して、オブジェクトの所有を要求しなければならない。たとえば、以下のようになる。
【数２】
2013519955.tif 000004
【０１５８】
いくつかのコンピュータ・アーキテクチャでは、比較およびスワップの使用には、lock_idを保持する基礎となるキャッシュ・ラインの排他的所有が必要である。キャッシュ・ラインの排他的所有を取得するには、他のプロセッサ上のキャッシュ・ラインの無効化、あるいは所有するプロセッサ上のキャッシュ・ラインの再フェッチが必要であるため、非常に費用がかかる可能性がある。これにより、基本的に競合の窓口を増やす効果を与える可能性があり、これが本質的に、ロック動作がより時宜を得て（timelier）いれば競合することのないロックに関する競合を悪化させる可能性がある。通常、lock_idをNULLにすることによって、オブジェクトを解放するために、lock_idへの第２のストアも必要であることに留意されたい。これは事実上、lock_idのキャッシュ・ラインへの排他的アクセスの再獲得を必要とする可能性がある。
【０１５９】
したがって、同期化されたデータ構造からフィールドを読み取るために同期化が使用される状況では、オブジェクトのフィールドの実際の同期化された読み取りが、いかなる形の排他的アクセスも必要としない場合、lock_idのキャッシュ・ラインに書き込まなければならないことは特に費用がかかる。本発明は、独立メモリ位置のペアをアトミックにロードする（独立ペア・ロード命令）ための新しいハードウェア機構を提供することが求められている。
【０１６０】
独立ペア・ロード動作
本発明は、独立ペア・ロード（ＬＰＤ）と呼ばれる新しいハードウェア機構を教示する。この機構は、独立メモリ要素のペアをアトミックに読み取るために使用される。これによって、２つの要素に一貫性があったこと、あるいはより精密に言えば、２つの独立メモリ位置がロードされた場合にこれらへの介入する更新が存在しなかったことを、保証するためのメカニズムが提供される。たとえば以下の通りである。
【数３】
2013519955.tif 000005
【０１６１】
オブジェクトＯ外のフィールドの同期化されたロードを実行する場合、ｌｏｃｋ＿ｉｄは格納されないため、キャッシュ・ラインは排他的に保持する必要がないことに留意されたい。ＬＰＤ機構の代替実装は、アトミック性の強化においてそれほど厳密でない可能性がある。たとえば、ＬＰＤは、条件コードの使用を通じてロード・ペアに一貫性があったか否かに関するフィードバックをユーザに提供することができる。他の追加の実装は、ロードされた際にオペランドのうちの１つがＮＵＬＬであったか否かを示すための、条件コード設定を提供することができる。たとえば以下の通りである。
【数４】
2013519955.tif 000006
【０１６２】
独立ロード／ストア（独立ペア・ロード）使用プログラム
好ましくは（図１８）、ＬＳＤ命令演算コードに基づいて実行された場合９０３、アトミックにデータをメモリからロード／メモリへストアすること、および、演算がアトミックであるように見えるか否かを示す条件コードを設定することを試行する、１つまたは複数の独立ロード／ストア（ＬＳＤ）命令を含むプログラムが実行可能である９０１。プロセッサが、他のプロセッサまたはＩ／Ｏデバイスからの介入ストアが、メモリからロードされる（またはメモリにストアされる）データを破損させる可能性がある旨を決定した場合、条件コードはある値（たとえばｃｃ＝３）に設定される。プログラムはこの値を（たとえば条件に応じた分岐命令を用いて）チェックし９０４、演算が非アトミック（ｃｃ＝３）であるように見える場合、成功するまでＬＳＤ命令の試行を所定回数（たとえば１０回）反復するなどの処置を講じる。この実施形態では、所定のカウント値が０でなければ９０６、減分され、ＬＰＤ命令は再実行される９０１。試行回数内に成功しなかった場合、ＬＳＤストレージ動作をアトミックに実行するための他のインターロック手段を使用する、特別ルーチン９０９が呼び出される。異なる実施形態が、動作のロードまたは動作のストア、アトミックにアクセスされる１つまたは複数の独立オペランド、および条件コード以外のインジケータの、いずれかをサポートする。
【０１６３】
好ましくは、この命令は、プログラム内の独立メモリ・オペランドをフェッチするために使用され、このプログラムは独立メモリ・オペランドをフェッチするための命令を備える第１のルーチン９０１を実行し、当該命令は独立ペア・ロード命令を備え９０２、実行された場合９０３、メモリから２つの独立オペランドをロードし、条件コード値を設定する。ＬＰＤの実行に続き、好ましくは条件に応じた分岐命令によって、テストが実行される９０４。このテストによって、２つの独立オペランドが２つの独立オペランドのいずれかへの介入ストアを用いてロードされた可能性があることを、当該条件コード値が示す（ｃｃ＝３）ものと判定されたことに応答して９０５、メモリから独立メモリ・オペランドをフェッチするための命令を備える第２のルーチン９０９が実行される。２つの独立オペランドが２つの独立オペランドのいずれかへの介入ストアを用いずにロードされたことを示す当該条件コード値（ｃｃ＝０）に応答して、ロードされた２つの独立オペランドを使用するための第３のルーチンが実行され、プログラム９０１は実行を続行する。
【０１６４】
ある実施形態では、第２のルーチンは、当該条件コード値（ｃｃ＝０）が、２つの独立オペランドが２つの独立オペランドのいずれかへの介入ストアを用いずにロードされたことを示すまで、反復される。
【０１６５】
ある実施形態では、反復に関する制限値（カウント値）９０１が設定される。２つの独立オペランドが２つの独立オペランドのいずれかへの介入ストアを用いてロードされた可能性があることを示す、当該条件コード値（ｃｃ＝３）に応答して、第２のルーチンは、第２のルーチンが制限値によって指定された回数を反復するまで９０６、または、２つの独立オペランドが２つの独立オペランドのいずれかへの介入ストアを用いずにロードされたことを条件コード値（ｃｃ＝０）が示すまで、反復される。
【０１６６】
ある実施形態では、独立ペア・ロード命令によって、２つの独立オペランドは汎用レジスタのそれぞれの位置にロードされる。
【０１６７】
独立ロード／ストア（独立ペア・ロード）命令
ある実施形態では、図１９のマルチプロセッサ・システムのプロセッサ内で、独立ロード／ストア（ＬＳＤ）命令が実行される。図１６を参照すると、独立ロード／ストア命令は、プロセッサのメモリ７０８から汎用レジスタ７０７へデータをロードするための実行用に取得され７０１、独立ロード／ストア命令は演算コードを備え、実行は、取得された演算コードに基づいてＬＳＤ指定の演算７０２を実行することを含み、演算７０２は、メモリ内の１つまたは複数のオペランドにアクセスすることを含む。マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の１つまたは複数のオペランドへのアクセス時に１つまたは複数のオペランドのうちの１つを修正した可能性があるかどうかの判定７０３に応答して、第１のインジケータ値を設定し７０５ ７０６、当該第１のインジケータ値は、マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の１つまたは複数のオペランドへのアクセス時に１つまたは複数のオペランドのうちの１つを修正した可能性があるかどうかを示す。
【０１６８】
ある実施形態では、第１のインジケータ値は、第１の条件コード値または第２の条件コード値のいずれか１つを備える。ストア・イベントが、１つまたは複数のオペランドのうちの、メモリ内の第１のオペランドまたはメモリ内の第２のオペランドのいずれかを当該アクセス時に修正した可能性がある旨の判定７０３に応答して、第１の条件コード値が設定され７０５、当該第１の条件コード値は、メモリ内の第１のオペランドまたはメモリ内の第２のオペランドのいずれか１つが当該アクセス時に修正された可能性があることを示す。メモリ内の第１のオペランドまたはメモリ内の第２のオペランドのいずれかを当該アクセス時に修正したストア・イベントはない旨の判定７０３に応答して、第２の条件コード値が設定され７０６、当該第２の条件コード値は、メモリ内の第１のオペランドまたはメモリ内の第２のオペランドのいずれも当該アクセス時に修正されていないことを示す。
【０１６９】
ある実施形態図１７では、ＬＳＤ命令は独立ペア・ロード（ＬＰＤ）命令であり、メモリ内の１つまたは複数のオペランドにアクセスすることは、メモリから第１のオペランドおよび第２のオペランドをフェッチすること８０５を含み、フェッチすることは、フェッチされた第１のオペランドがＬＰＤ命令によって指定された第１のレジスタ内に格納されること８０６、および、フェッチされた第２のオペランドがＬＰＤ命令によって指定された第２のレジスタ内に格納されること８０７、をさらに含む。
【０１７０】
ある実施形態では、独立ペア・ロード命令は、第１の汎用レジスタを識別する第１の汎用レジスタ・フィールド（Ｂ１）と、第２の汎用レジスタを識別する第２の汎用レジスタ・フィールド（Ｂ２）と、当該第１のレジスタおよび当該第２のレジスタを識別する第３の汎用レジスタ・フィールド（Ｂ３）とを備え、第１のアドレスは第１の汎用レジスタ・フィールドによって識別された第１の汎用レジスタから取得され８０１、取得された第１のアドレスはメモリ内の第１のオペランドをフェッチするために使用される。
メモリ内の第２のオペランドの第２のアドレスは、第２の汎用レジスタ・フィールドによって識別された第２の汎用レジスタから取得され８０２、取得された第２のアドレスはメモリ内の第２のオペランドをフェッチするために使用される。独立ペア・ロード動作は、第３の汎用レジスタ・フィールドによって識別された汎用レジスタの高位部分である第１のレジスタ８０６内に、第１のオペランドを格納すること、および、第３の汎用レジスタ・フィールドによって識別された汎用レジスタの低位部分である第２のレジスタ８０７内に、第２のオペランドを格納することを含む。
【０１７１】
ある実施形態では、取得された独立ペア・ロード命令は、第１の変位フィールドおよび第２の変位フィールドをさらに備え、第１の変位フィールドには、メモリ内の第１のオペランドをフェッチするための第１のメモリ・アドレスを作成するために、取得された第１のアドレスが算術的に加算される８０３。第２の変位フィールドには、メモリ内の第２のオペランドをフェッチするための第２のメモリ・アドレスを作成するために、取得された第２のアドレスが算術的に加算される８０４。
【０１７２】
ある実施形態では、マルチプロセッサ・システムの複数のプロセッサからのストア・イベントが受信され、受信されたストア動作のデータはメモリ内に格納される。
【０１７３】
ある実施形態では、コンピュータ・アーキテクチャ用に定義された独立ペア・ロード命令が、代替コンピュータ・アーキテクチャの中央処理ユニットによってフェッチおよび実行され、独立ペア・ロード命令は、独立ペア・ロード命令の動作をエミュレートするための所定のソフトウェア・ルーチンを識別するために解釈され、独立ペア・ロード命令を実行することは、マシン命令を実行するための方法の諸ステップを実行するために所定のソフトウェア・ルーチンを実行することを含む。
【０１７４】
図１５を参照すると、アーキテクチャの独立ペア・ロード・マシン命令の２つの例示的形式（ＬＰＤおよびＯＰＤＧ）が示されている。命令の４８ビットは、演算コード（ビット０〜８、１２〜１５）と、それぞれが第１（Ｂ１）、第２（Ｂ２）、および第３（Ｂ３）の汎用レジスタを指定するためのＢ１、Ｂ２、およびＲ３フィールドと、２つのオペランドがフェッチされる間、他のプロセッサからの介入ストアなしにアトミックに（ブロック同時に）フェッチされることになる２つのオペランドのメモリ・アドレスを決定するために、対応する汎用レジスタＢ１およびＢ２のコンテンツと組み合わせて使用するための変位フィールドＤ１およびＤ２とを含む。
【０１７５】
汎用レジスタＲ３は、偶数／奇数レジスタ・ペアのうちの偶数番号付けされたレジスタを指定する（ペアのうち、偶数レジスタは高位ビットを含み、奇数レジスタは低位ビットを含む）。
【０１７６】
命令が実行された場合、第１のオペランドは変更されずに、第３のオペランドのうちの偶数番号付けされたレジスタ内に配置され、第２のオペランドは変更されずに、第３のオペランドのうちの奇数番号付けされたレジスタ内に配置され、条件コード値は条件コード・レジスタ内に設定される。条件コード値は、第１および第２のオペランドが、ブロック同時インターロック・フェッチを使用してフェッチされたように見えるか否かを示す。すなわち、いかなる他のプロセッサからのいかなる介入ストアもなしに、アトミックに実行されたように見えるかどうかである。
【０１７７】
ＬＰＤの場合、第１および第２のオペランドはストレージ内の３２ビット「ワード」であり、第３のオペランドは汎用レジスタＲ３およびＲ３＋１のビット３２〜６３内にあって、レジスタのビット０〜３１は未変更である。ＬＰＤＧの場合、第１および第２のオペランドはストレージ内の６４ビット「ダブルワード」であり、第３のオペランドは汎用レジスタＲ３およびＲ３＋１のビット０〜６３内にある。
【０１７８】
他のＣＰＵによって観察されるように、第１および第２のオペランドが、ブロック同時インターロック・フェッチ（アトミック動作）を使用してフェッチされたように見えない場合、条件コード３が設定される。第３のオペランドは、条件コードに関係なくロードされる。
【０１７９】
第１および第２のオペランドの変位は、１２ビットの符号なし２進整数として扱われる。
【０１８０】
ＬＰＤの第１および第２のオペランドは、ワード境界上に指定されなければならない。ＬＰＤＧの第１および第２のオペランドは、ダブルワード境界上に指定されなければならない。汎用レジスタＲ３は、偶数番号付けされたレジスタを指定しなければならない。このように指定されない場合、指定例外が認識される。
【０１８１】
結果として生じる条件コード
０  インターロック・フェッチによってロードされたレジスタ・ペア
１  −
２  −
３  インターロック・フェッチによってロードされないレジスタ・ペア
プログラム例外
・アクセス（フェッチ、オペランド１および２）
・オペレーション（インタロック・アクセス機構はインストールされない）
・指定
【０１８２】
プログラミングの注意事項
１．条件コードの設定は、構成内の他のＣＰＵによってアクセスされるストレージに依存する。
２．結果として生じる条件コードが３の場合、プログラムはLOAD PAIR DISJOINT命令を再実行するために分岐を戻ることができる。しかしながら、インターロック・フェッチを達成するために正常でない試行が繰り返された後には、プログラムは、ストレージ・オペランドへのアクセスをシリアル化する代替手段を使用しなければならない。プログラムのLOAD PAIR DISJOINT命令の再実行は、代替経路へ分岐するまでに、多くとも１０回までとすることが推奨される。
３．  プログラムは、条件コード０が決して設定されない状況に対処できるべきである。
【０１８３】
図１９を参照すると、本発明の実施形態は、メモリ１００５を共有する、複数ｎ個（Ｐ１からＰｎ）のプロセッサを１００１ １００２ １００３ １００４含み、各プロセッサ１００１は、メモリ・オペランドをキャッシュに入れるためのキャッシュと、メモリ内のデータにアクセスするためのロード／ストア・ユニットと、命令演算コードに基づいて命令の機能を実行するための実行ユニットと、性能を向上させるためにＤＡＴ変換をキャッシュに入れるためのＴＬＢを含む、仮想（論理）アドレスを実（絶対）メモリ・アドレスに変換するための動的アドレス変換（ＤＡＴ）とを含むことができる。プロセッサは、システム・バスを介して周辺デバイス１００６（ＤＡＳＤ／テープ）を共有するか、またはローカルな周辺デバイスを有することができる。
【０１８４】
前述の内容は、１つのコンピュータ・システム実施形態の用語および構造を理解する際に有用である。本発明は、z/Architectureまたはその提供された説明に限定されるものではない。本発明は、本明細書の教示を用いた他のコンピュータ製造業者の他のコンピュータ・アーキテクチャに、有利に適用可能である。
【０１８５】
本明細書では、本発明の好ましい実施形態について例示および説明してきたが、本発明が、本明細書で開示された精密な構造に限定されるものではないこと、および、添付の特許請求の範囲内に定義された本発明の範囲内に入るすべての変更および修正に対して、権利が留保されることを、理解されよう。
【図１】
2013519955.tif 000007
【図２】
2013519955.tif 000008
【図３】
2013519955.tif 000009
【図４】
2013519955.tif 000010
【図５】
2013519955.tif 000011
【図６】
2013519955.tif 000012
【図７】
2013519955.tif 000013
【図８】
2013519955.tif 000014
【図９】
2013519955.tif 000015
【図１０】
2013519955.tif 000016
【図１１】
2013519955.tif 000017
【図１２】
2013519955.tif 000018
【図１３】
2013519955.tif 000019
【図１４】
2013519955.tif 000020
【図１５】
2013519955.tif 000021
【図１６】
2013519955.tif 000022
【図１７】
2013519955.tif 000023
【図１８】
2013519955.tif 000024
【図１９】
2013519955.tif 000025
2013519955.tif 000026
2013519955.tif 000027
2013519955.tif 000028
2013519955.tif 000029
2013519955.tif 000030
2013519955.tif 000031
2013519955.tif 000032
2013519955.tif 000033
2013519955.tif 000034
2013519955.tif 000035
2013519955.tif 000036
2013519955.tif 000037
2013519955.tif 000038
2013519955.tif 000039
2013519955.tif 000040
2013519955.tif 000041
2013519955.tif 000042
2013519955.tif 000043
2013519955.tif 000044
【国際調査報告】
2013519955.tif 000045
2013519955.tif 000046
2013519955.tif 000047