JP5692760B2 - 独立ロード/ストア機構およびそのための命令を実行するための方法、システム、およびコンピュータ・プログラム - Google Patents

独立ロード/ストア機構およびそのための命令を実行するための方法、システム、およびコンピュータ・プログラム Download PDF

Info

Publication number
JP5692760B2
JP5692760B2 JP2012553198A JP2012553198A JP5692760B2 JP 5692760 B2 JP5692760 B2 JP 5692760B2 JP 2012553198 A JP2012553198 A JP 2012553198A JP 2012553198 A JP2012553198 A JP 2012553198A JP 5692760 B2 JP5692760 B2 JP 5692760B2
Authority
JP
Japan
Prior art keywords
instruction
memory
operand
register
independent
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012553198A
Other languages
English (en)
Other versions
JP2013519955A (ja
Inventor
ミトラン・マルセル
スレゲル・ティモシー
ジャコビ・クリスチャン
ウェブ・チャールズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2013519955A publication Critical patent/JP2013519955A/ja
Application granted granted Critical
Publication of JP5692760B2 publication Critical patent/JP5692760B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明はコンピュータ・システムに関し、より具体的には、コンピュータ・システム・プロセッサ命令機能に関する。
商標:IBM(R)は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標であり、S/390、Z900、およびz990、ならびに他の製品名は、インターナショナル・ビジネス・マシンズ・コーポレーションまたは他の会社の登録商標または製品名とすることができる。
IBMは、多くの非常に優れたエンジニア達の働きによって、1960年代から現在までの間にIBM(R)システム360として知られるマシンを初めとする、コンピューティング・システムに対するその不可欠な性質によって「メインフレーム」と呼ばれるようになった、特別なアーキテクチャを作成してきたが、その動作原理は、長年にわたって明示されてきたようにIBMのPrinciples of Operationに含めることによる重大な寄与に対するそれらの重大な寄与により、IBM発明者等によって発明され採用されてきた命令の「メインフレーム」実装上で実行可能な命令を記述することによって、マシンのアーキテクチャを明示する。2009年2月に公開されたIBM(R) z/Architecture(R) Principlesof Operationの第8版が、SA22-7832-07として標準公開基準となっており、IBMのz10(TM)メインフレーム・サーバに組み込まれている。
1995年11月20日付出願の、IBMに譲渡された「Posting multiple reservations with a conditional store atomicoperations in a multiprocessing environment」という名称の米国特許第5742785号は、以下のことを教示している。「多重処理環境で共有される複数の変数はアトミックに(atomically)更新可能であることを教示している。多重処理環境で動作している各コンピュータ・プロセッサは、この新規な方法と共に、複数の共有変数のそれぞれについて予約を配置する際に使用される、複数の予約レジスタを含む。プログラムの実行中、複数の共有変数のそれぞれは、そのそれぞれの予約レジスタによって予約可能である。予約は、特別な命令を使用して共有変数上に配置される。予約レジスタは、予約している共有変数のアドレス、共有変数アドレス内で更新されることになる修正済み結果の値、変数が更新されたかどうか、予約が有効であるかどうか、および、予約レジスタを含むプロセッサが共有変数を更新する特権を有するかどうかを、追跡する。第2のプロセッサが予約済みの共有変数のアドレスを読み取ろうとした場合、予約を無効化することができる。共有変数を更新しようとする命令に遭遇した場合、未更新の修正済み結果を有するその命令によって指定された予約済みの修正済み共有変数は、指定されたセット内のすべての予約が有効である場合、およびその場合にのみ、アトミックに更新される。セット内のいずれかの予約が無効の場合、セット内のいかなる共有変数も更新されない。条件コードは、更新が成功したかまたは発生しなかったかを報告する。条件コードは、命令のシーケンスが成功するまで反復できるようにテストすることができる。」
図1を参照すると、従来技術のホスト・コンピュータ・システム50の代表的構成要素が図示されている。コンピュータ・システム内には、当分野で周知の構成要素の他の配置構成も使用可能である。代表的ホスト・コンピュータ50は、メイン・ストア(コンピュータ・メモリ2)、ならびに、ストレージ・デバイス11および他のコンピュータまたはSANなどと通信するためのネットワーク10へのI/Oインターフェースと通信する、1つまたは複数のCPU1を備える。CPU1は、アーキテクト命令セットおよびアーキテクト機能を有するアーキテクチャに準拠している。CPU1は、プログラム・アドレス(仮想アドレス)をメモリの実アドレスに変換するための、動的アドレス変換(DAT)3を有することができる。DATは、通常、変換をキャッシュに入れるための変換索引バッファ(TLB)7を含むため、後でコンピュータ・メモリ2のブロックへアクセスする際にアドレス変換の遅延を必要としない。通常、コンピュータ・メモリ2とプロセッサ1との間にキャッシュ9が使用される。キャッシュ9は、複数のCPUが使用可能な大型キャッシュと、大型キャッシュと各CPUとの間により小型で高速の(低位)キャッシュとを有する、階層構造とすることができる。いくつかの実装では、低位キャッシュは、命令フェッチおよびデータ・アクセスのための別々の低位キャッシュを提供するために分割される。ある実施形態では、命令は、命令フェッチ・ユニット4によってメモリ2からキャッシュ9を介してフェッチされる。命令は、命令複合ユニット(6)内で復号され、(いくつかの実施形態では他の命令と共に)命令実行ユニット8にディスパッチ(dispatch)される。通常、たとえば演算実行ユニット、浮動小数点実行ユニット、および分岐命令実行ユニットなどの、いくつかの実行ユニット8が使用される。命令は、実行ユニットによって実行され、必要に応じて、命令指定レジスタまたはメモリからのオペランドにアクセスする。メモリ2からオペランドにアクセス(ロードまたはストア)される場合、ロード・ストア・ユニット5は、通常、実行されている命令の制御の下でこのアクセスを処理する。命令は、ハードウェア回路または内部マイクロコード(ファームウェア)内で、あるいはその両方の組み合わせによって実行可能である。
図2では、ホスト・アーキテクチャのホスト・コンピュータ・システム50をエミュレートする、従来技術のエミュレートされたホスト・コンピュータ・システム21の例が提供されている。エミュレートされたホスト・コンピュータ・システム21では、ホスト・プロセッサ(CPU)1はエミュレートされたホスト・プロセッサ(または仮想ホスト・プロセッサ)であり、ホスト・コンピュータ50のプロセッサ1とは異なる固有の命令セット・アーキテクチャを有するエミュレーション・プロセッサ27を備える。エミュレートされたホスト・コンピュータ・システム21は、エミュレーション・プロセッサ27にアクセス可能なメモリ22を有する。例示的実施形態では、メモリ27は、ホスト・コンピュータ・メモリ2部分とエミュレーション・ルーチン23部分とに区分される。ホスト・コンピュータ・アーキテクチャに従ってエミュレートされたホスト・コンピュータ21のプログラムは、ホスト・コンピュータ・メモリ2を使用することができる。エミュレーション・プロセッサ27は、エミュレートされたプロセッサ1ではなく、アーキテクチャのアーキテクト命令セットの固有命令を実行し、固有命令はエミュレーション・ルーチン・メモリ23から取得され、アクセスされたホスト命令の機能をエミュレートするための固有命令実行ルーチンを決定するために、アクセスされたホスト命令を復号することが可能な、シーケンスおよびアクセス/復号ルーチンで取得された1つまたは複数の命令を使用することによって、ホスト・コンピュータ・メモリ2内のプログラムからの実行のためのホスト命令にアクセスすることができる。ホスト・コンピュータ・システム50のアーキテクチャに関して定義された他の機構は、たとえば汎用レジスタ、制御レジスタ、動的アドレス変換およびI/Oサブシステムのサポートおよびプロセッサ・キャッシュなどの機構を含む、アーキテクト機構ルーチンによってエミュレート可能である。エミュレーション・ルーチンは、エミュレーション・プロセッサ27で使用可能な機能(汎用レジスタおよび仮想アドレスの動的変換など)を利用して、エミュレーション・ルーチンの性能を向上させることもできる。ホスト・コンピュータ50の機能をエミュレートする際のプロセッサ27を支援するために、特別なハードウェアおよびオフロード・エンジンを提供することも可能である。
メインフレームでは、しばしばコンパイラ・アプリケーションを介して、通常、現在では「C」プログラマであるプログラマによって、アーキテクト・マシン命令が使用される。ストレージ・メディアに格納されたこれらの命令は、本来、z/Architecture IBMサーバ内で、あるいは他のアーキテクチャを実行するマシン内で、実行可能である。これらは、既存および将来のIBMメインフレーム・サーバ内で、および他の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に記載されたエミュレーションを使用するマシンを、使用することが可能である。エミュレーション・モードでは、エミュレート・プロセッサのアーキテクチャをエミュレートするために、固有プロセッサによってエミュレーション・ソフトウェアが実行される。
固有プロセッサ27は、通常、エミュレート・プロセッサのエミュレーションを実行するために、ファームウェアまたは固有オペレーティング・システムのいずれかを備えるエミュレーション・ソフトウェア23を実行する。エミュレーション・ソフトウェア23は、エミュレート・プロセッサ・アーキテクチャの命令をフェッチおよび実行する責務を負う。エミュレーション・ソフトウェア23は、命令境界を追跡するためのエミュレート・プログラム・カウンタを維持する。エミュレーション・ソフトウェア23は、一度に1つまたは複数のエミュレート・マシン命令をフェッチし、固有プロセッサ27による実行のために、その1つまたは複数のエミュレート・マシン命令を固有マシン命令の対応するグループに変換することができる。これらの変換済み命令はキャッシュに入れることができるため、より高速な変換が達成可能である。にもかかわらず、エミュレーション・ソフトウェアは、エミュレート・プロセッサに関して作成されたオペレーティング・システムおよびアプリケーションが正しく動作することを保証するために、エミュレート・プロセッサ・アーキテクチャのアーキテクチャ規則を維持しなければならない。さらにエミュレーション・ソフトウェアは、エミュレート・プロセッサ上で実行するように設計されたオペレーティング・システムまたはアプリケーション・プログラムが、エミュレーション・ソフトウェアを有する固有プロセッサ上で実行できるように、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、たとえばセグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、割り込みメカニズム、コンテキスト切り換えメカニズム、時刻(TOD)機構、および、I/Oサブシステムへのアーキテクト・インターフェースを含むが、これらに限定されない、エミュレート・プロセッサ1によって識別されたリソースを提供しなければならない。
エミュレートされている特定の命令が復号され、個々の命令の機能を実行するためにサブルーチンが呼び出される。エミュレート・プロセッサ1の機能をエミュレートするエミュレーション・ソフトウェア機能23が、たとえば「C」サブルーチンまたはドライバ、あるいは、好ましい実施形態の説明を理解した後に、当分野の技術範囲内に入るような特定ハードウェアに関するドライバを提供する何らかの他の方法で、実装される。Beausoleil等の「Multiprocessor for hardware emulation」に関する米国特許第5551013号、およびScalzi等の米国特許第6009261号「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等の米国特許第6308255号「Symmetrical multiprocessing bus and chipsetused for coprocessor support allowing non-native code to run in a system」、およびLethin等の米国特許第6463582号「Dynamic optimizing object code translator for architecture emulationand dynamic optimizing object code translation method」、およびEric Trautの米国特許第5790825号「Methodfor emulating guest instructions on a host computer through dynamicrecompilation of host instructions」、および他の多くを含むが、これらに限定されない、様々なソフトウェアおよびハードウェアのエミュレーション特許は、当業者が使用可能なターゲット・マシンに対して異なるマシンに関してアーキテクトされた命令形式のエミュレーション、ならびに、上記で参照された技法によって使用される商用ソフトウェア技法を達成するための、様々な知られた方法を示している。
Intel(R)社に譲渡された1997年8月29日付の米国特許第5870598号「Method and apparatus for providingan optimized compare-and-branch instruction」は、RISCタイプのマイクロプロセッサで実行するための最適化された比較および分岐(compare-and-branch)命令について記述している。マイクロプロセッサ内に実装された命令シーケンサは、効率的な実行のための比較および分岐命令に応答する。命令シーケンサは、比較および分岐命令を検出し、通常の比較命令としてこれを実行する。次のサイクルで、命令シーケンサはこの命令を分岐命令に変換し、実行ユニットのうちの1つによる実行のために変換された命令を提供する。分岐が実行され、受け入れられるか否かにかかわらず、通常のプログラム流れは続行される。Intel命令には、条件コードが実行の一部として設定され、再確立が必要な可能性のあるコンテキスト設定を破棄することを含む、いくつかの欠点がある。
2007年11月13日発行のCorrigan等による米国特許第7296120B2号「Mechanism that Provides EfficientMulti-Word Load Atomicity」は、追加のメモリ使用を発生させることなく、アトミックなマルチワード・ロード・サポートを提供する装置、方法、およびプログラム製品を開示している。ダブルワードは、1つまたは複数の追加のフィールドを使用することなく、またロックなしで、アトミックにロードされる。無効性マーカは、ロードされたダブルワードがアトミックに格納およびロードされたかどうか、すなわち有効であるかどうかを確認するために、キャッシュ・ミス時間に関連して使用される。
米国特許第5742785号 米国特許第5551013号 米国特許第6009261号 米国特許第6308255号 米国特許第6463582号 米国特許第5790825号 米国特許第5870598号 米国特許第7296120B2号
2009年2月に公開されたIBM(R) z/Architecture(R) Principles of Operationの第8版
メモリにアクセスし、アクセスがアトミックであったように見えるかどうか、すなわち、メモリからフェッチされるかまたはメモリに格納されたデータが、アクセスされたデータの修正済み部分を有する可能性のあるいかなる介入ストレージ動作もなしにアクセスされたことを示すインジケータを設定する、命令を提供する。
本発明の諸実施形態では、この命令は、ディスジョイント(disjoint)メモリ・オペランド(以下、独立メモリ・オペランドとも記載する)をフェッチするための命令を含む第1のルーチンを実行することを含む、独立メモリ・オペランドをフェッチするために使用され、当該命令は、メモリから2つの独立オペランドをロードするため、および状況コード値を設定するための、独立ペア・ロード命令を含む。2つの独立オペランドが、2つの独立オペランドのうちのいずれかに対する介入ストアと共にロードされた可能性のあることを示す当該条件コード値に応答して、メモリから独立メモリ・オペランドをフェッチするための命令を含む、第2のルーチンが実行される。2つの独立オペランドが、2つの独立オペランドのうちのいずれかに対する介入ストアなしでロードされたことを示す当該条件コード値に応答して、ロードされた2つの独立オペランドを使用するための第3のルーチンが実行される。
ある実施形態では、第2のルーチンは、当該条件コード値が、2つの独立オペランドが2つの独立オペランドのうちのいずれかに対する介入ストアなしでロードされたことを示すまで、反復される。
ある実施形態では、反復に関する制限値が設定される。2つの独立オペランドが、2つの独立オペランドのうちのいずれかに対する介入ストアと共にロードされた可能性のあることを示す当該条件コード値に応答して、第2のルーチンが制限値によって指定された回数だけ反復されるまで、または、当該条件コード値が、2つの独立オペランドが2つの独立オペランドのうちのいずれかに対する介入ストアなしでロードされたことを示すまで、第2のルーチンは反復される。
ある実施形態では、独立ペア・ロード命令によって、2つの独立オペランドが汎用レジスタのそれぞれの位置にロードされることになる。
ある実施形態では、ディスジョイント・ロード/ストア(Load/StoreDisjoint;LSD)命令(以下、独立ロード/ストア命令とも記載する)が、マルチプロセッサ・システムのプロセッサ内で実行される。独立ロード/ストア命令は実行用に取得され、この独立ロード/ストア命令は演算コード(opcode)を含み、この実行は取得された演算コードに基づいてLSD指定演算を実行することを含み、この演算はメモリ内の1つまたは複数のオペランドにアクセスすることを含む。マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の1つまたは複数のオペランドへのアクセス時に、1つまたは複数のオペランドのうちの1つを修正した可能性があるかどうかを判定することに応答して、第1のインジケータ値が設定され、当該第1のインジケータ値は、マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の1つまたは複数のオペランドへのアクセス時に、1つまたは複数のオペランドのうちの1つを修正した可能性があるかどうかを示す。
ある実施形態では、第1のインジケータ値は、第1の条件コード値または第2の条件コード値のうちのいずれか1つを含む。ストア・イベントが、当該アクセス時に1つまたは複数のオペランドのうちの、メモリ内の第1のオペランドまたはメモリ内の第2のオペランドのいずれかを修正した可能性がある旨の決定に応答して、第1の条件コード値が設定され、当該第1の条件コード値は、メモリ内の第1のオペランドまたはメモリ内の第2のオペランドのうちのいずれか1つが、当該アクセス時に修正された可能性があることを示す。いかなるストア・イベントも、当該アクセス時にメモリ内の第1のオペランドまたはメモリ内の第2のオペランドのいずれも修正していない旨の決定に応答して、第2の条件コード値が設定され、当該第2の条件コード値は、メモリ内の第1のオペランドまたはメモリ内の第2のオペランドのいずれも、当該アクセス時に修正されていないことを示す。
ある実施形態では、LSD命令はディスジョイント・ペア・ロード(Load Pair Disjoint;LPD)命令(以下、独立ペア・ロード命令とも記載する)であり、ここでメモリ内の1つまたは複数のオペランドへのアクセスは、メモリからの第1のオペランドおよび第2のオペランドのフェッチを含み、フェッチされた第1のオペランドはLPD命令によって指定された第1のレジスタ内に格納されること、および、フェッチされた第2のオペランドはLPD命令によって指定された第2のレジスタ内に格納されることを、さらに含む。
ある実施形態では、独立ペア・ロード命令は、第1の汎用レジスタを識別する第1の汎用レジスタ・フィールドと、第2の汎用レジスタを識別する第2の汎用レジスタ・フィールドと、当該第1のレジスタおよび当該第2のレジスタを識別する第3の汎用レジスタ・フィールドとを備え、第1のアドレスは第1の汎用レジスタ・フィールドによって識別された第1の汎用レジスタから取得され、取得された第1のアドレスはメモリ内の第1のオペランドをフェッチするために使用される。メモリ内の第2のオペランドの第2のアドレスは、第2の汎用レジスタ・フィールドによって識別された第2の汎用レジスタから取得され、取得された第2のアドレスはメモリ内の第2のオペランドをフェッチするために使用される。独立ペア・独立動作は、第1のオペランドを第1のレジスタ内に格納することを含み、ここで第1のレジスタは、第3の汎用レジスタ・フィールドによって識別された汎用レジスタの上位部分であり、第2のオペランドを第2のレジスタ内に格納することを含み、ここで第2のレジスタは、第3の汎用レジスタ・フィールドによって識別された汎用レジスタの下位部分である。
ある実施形態では、取得された独立ペア・ロード命令は、第1の変位フィールドおよび第2の変位フィールドをさらに備え、第1の変位フィールドは、メモリ内の第1のオペランドをフェッチするための第1のメモリ・アドレスを作成するために、取得された第1のアドレスに算術的に加算される。第2の変位フィールドは、メモリ内の第2のオペランドをフェッチするための第2のメモリ・アドレスを作成するために、取得された第2のアドレスに算術的に加算される。
ある実施形態では、マルチプロセッシング・システムの複数のプロセッサからストア・イベントが受信され、受信されたストア動作はメモリ内に格納される。
ある実施形態では、コンピュータ・アーキテクチャ向けに定義された独立ペア・ロード命令は、代替コンピュータ・アーキテクチャの中央処理ユニットによってフェッチおよび実行され、独立ペア・ロード命令は、独立ペア・ロード命令の動作をエミュレートするための所定のソフトウェア・ルーチンを識別するために解釈され、独立ペア・ロード命令を実行することは、マシン命令を実行するための方法の諸ステップを実行するために所定のソフトウェア・ルーチンを実行することを含む。
本発明の上記ならびに追加の目的、特徴、および利点は、以下に記載の説明で明らかとなろう。
次に、本発明の諸実施形態について、添付の図面を参照しながら単なる例として説明する。
従来技術のホスト・コンピュータ・システムの例を示す図である。 従来技術のホスト・コンピュータ・システムのエミュレーション例を示す図である。 従来技術のコンピュータ・システムの例を示す図である。 従来技術のコンピュータ・ネットワークの例を示す図である。 従来技術のコンピュータ・システムの要素を示す図である。 従来技術のコンピュータ・システムの詳細な要素を示す図である。 従来技術のコンピュータ・システムの詳細な要素を示す図である。 従来技術のコンピュータ・システムの詳細な要素を示す図である。 コンピュータ・システムの従来技術のマシン命令形式を示す図である。 コンピュータ・システムの従来技術のマシン命令形式を示す図である。 コンピュータ・システムの従来技術のマシン命令形式を示す図である。 コンピュータ・システムの従来技術のマシン命令形式を示す図である。 コンピュータ・システムの従来技術のマシン命令形式を示す図である。 コンピュータ・システムの従来技術のマシン命令形式を示す図である。 本発明の実施形態に従った命令形式の例を示す図である。 本発明の実施形態の例を示す流れ図である。 本発明の実施形態の例を示す流れ図である。 本発明の実施形態の例を示す流れ図である。 本発明のマルチプロセッサ・システムの要素の使用および実施形態の例を示す図である。
現在のマルチプロセッサ・コンピュータ・システムは、2つまたはそれ以上のプロセッサに、共通メモリ位置にアクセスして修正するための手段を提供する。こうした位置は共有位置と言われ、各位置は共有変数を含むものと言われる。
コンピュータ・システム内に共有変数が存在する他のコンテキストは、別々の区別できるプログラム(時に、プロセスと呼ばれる)が単一のプロセッサ内に同時に常駐する、単一のプロセッサ内にある。量子(quantum)と呼ばれる期間、各プロセスは制御し、量子の終わりに中断される一方で、他のプロセスにプロセッサへのアクセスが認められる。プロセスの実行は、それぞれの時間量子が時間内にインタレースされ、ラウンドロビン・ベースまたは優先度ベースで認められる。プロセスは共通位置にアクセスして修正することが可能であるため、単一プロセッサ内のこれらのプロセスは、論理的には、あたかも別々の区別できるプロセッサ上で実行しているかのように、共有メモリ位置上で動作する。
いずれのケースでも、2つまたはそれ以上の同時プロセスが共有変数を更新できるため、更新が一貫性なく実行される可能性が存在する。2つのプロセスに、それぞれメモリ位置を増分するタスクが割り当てられるものと考えてみる。各プロセスはこのタスクを、その位置からマシン・レジスタへの読み取り、マシン・レジスタの増分、およびマシン・レジスタの新しい値のメモリへの書き込みによって、実行することを試みる。プロセス1が、プロセス2からの介入なしに読み取り/修正/書き込みを実行し、その後、プロセス2が同じ動作を実行する場合、共有変数は2回増分されることにより、正しく修正されることになる。
2つのプロセスの読み取り/修正/書き込み動作が時間内にインタレースされた場合、不整合が生じる。すなわち、プロセス1が変数Xの値を読み取り、プロセス2が同じ値Xを読み取った後、後続の増分および書き込みが任意の順序で発生した場合、各プロセスは、1回増分されたそのオリジナルの値に等しい値Xを格納することになる。したがって、Xの最終値は単一の増分のみを反映することになる。1回の増分は失われる。
不正確な最終値を取得する理由は、2つのプロセスが一貫性のないデータ上で動作するためである。プロセス1が値Xを修正する意図でこれを読み取る場合、Xの論理的所在は、共有メモリからプロセス1に関連付けられた専用レジスタへと移行される。その後、プロセス2がXを読み取り、Xがまだプロセス1によって修正されていない場合、Xがその時点で共有メモリ内ではアクセス可能でなく、再書き込みされるまで再度アクセス可能にならないため、プロセス2によって読み取られる値は実際の値Xとは一致しない。
正確さを保証するためには、一貫性を保証する必要がある。一貫性のある挙動のために十分な条件は、動作の読み取り/修正/書き込みのシーケンスが共有変数X上で実行される場合、このシーケンスがアトミックに実行されるよう保証することである。アトミックに実行とは、Xの読み取りが実行される時間とXの書き込みが実行される時間との間に、任意の他のプロセスが値Xを変更することを許可せずに、シーケンスが実行されることを意味する。
アクションの読み取り/修正/書き込みシーケンスの正確さおよび一貫性を保証するには、多数の方法がある。その1つは、こうしたシーケンスを、クリティカル・セクション(critical section)と呼ばれるプログラムの領域内に封入することである。クリティカル・セクションの前には、ロック動作を実行する1つまたは複数の命令が先行し、アンロック動作を実行する1つまたは複数の命令が後に続く。このロック動作およびアンロック動作が、クリティカル・セクション内でコードを実行できるのは、常時、多くとも1つのプロセスであることを保証する。規則またはプロトコルにより、同じロックおよびアンロック・メカニズムによって制御されるクリティカル・セクションを用いて、すべての他のプロセスが同じ共有変数を更新した場合、1つのプロセスがクリティカル・セクション内の読み取り/修正/書き込みプロセスを実行している間、他のプロセスは共有変数への介入アクセスを実行できないため、クリティカル・セクション内の読み取り/修正/書き込み動作は、共有変数をアトミックに更新することができる。
クリティカル・セクションを作成するためには、ロック機能を有する必要がある。従来技術では、こうした機能を実装するための一般的な手段は、それ自体がロック変数に対してアトミックな読み取り/修正/書き込みを実行する旨の命令を用いることである。この目的で使用される命令の中には、テストおよび設定(Test-and-Set)命令、ならびに増分(または減分)命令がある。
テストおよび設定命令は、変数Xを読み取り、Xのビットをビットのオリジナル状態に関係なく値1に設定し、Xを書き換えて、その値が値1になるように強制される前のオリジナルビットに等しい条件コードを戻す。この命令は共有変数の読み取り/修正/書き込みを実行することから、実行の整合性を保証するために、こうした更新をアトミックに実行するように実装しなければならない。ロックは他のプロセスによる共有変数への介入アクセスを防ぐため、この1つの命令を使用して、任意の複雑さの読み取り/修正/書き込みシーケンスが一貫して実行可能なクリティカル・セクションを保護するロックを設定することができる。
ロックを作成するためにテストおよび設定命令を使用するために、各プロセスは、ロック変数にアクセスするテストおよび設定命令を用いて、クリティカル・セクションを保護する。テストおよび設定命令の実行直後、ロック変数は、その前の値に関係なく値1を保持する。各プロセスは、テストおよび設定の実行後に条件コードをテストし、(初期値0に対応する)コード0を観察するプロセスのみが、クリティカル・セクションに入り、クリティカル・セクション内で読み取り/修正/書き込みシーケンスを実行することができる。それらそれぞれのクリティカル・セクション内で読み取り/修正/書き込みコードの実行を試みる他のすべてのプロセスは、クリティカル・セクションに対するロックがアンロック(0)状態になるまで、待機するかまたはその他の何らかを実行しなければならない。プロセスが読み取り/修正/書き込みシーケンスを完了してクリティカル・セクションを離れる場合、ロック内に0を格納することでロックを解除し、それにより、0に等しい変数の初期値を用いてロック上でテストおよび設定を実行することによって、他のプロセスがクリティカル・セクションに入ることを許可する。
テストおよび設定は、IBM370で見つけられる。増分および減分は、アトミックな読み取り/修正/書き込み動作として実装可能であり、ほぼテストおよび設定の直接的な代用として、本質的にテストおよび設定が実行する内容を実行するために使用可能である。テストおよび設定がビットの設定しか実行できない一方で、それらは共有変数をアトミックに増分および減分することが可能であるため、より汎用的である。DEC VAXはアトミックな増分および減分命令を有する。
クリティカル・セクションを作成するために読み取り/修正/書き込み動作を用いることには、いくつかの問題がある。以下にその一部を示す。
1.クリティカル・セクションには、一度に多くとも1つのプロセスしか入ることができない。あるプロセスがクリティカル・セクションに入って失敗した場合、他のプロセスはいっさいクリティカル・セクションに入ることができないため、システム全体が失敗する。
2.長く複雑なクリティカル・セクションは、マルチプロセッサ・システムにおける性能上のボトルネックである。クリティカル・セクションには一度に1つのプロセスしか入ることができないため、他のプロセスが同じクリティカル・セクションに入らなければならない場合、それらは使用可能になるまで待機しなければならず、この間、強制的にアイドル状態となる可能性がある。この問題に対する望ましい解決策は、任意のクリティカル・セクションの外部で読み取り/修正/書き込みを実行する命令のシーケンスを用いて、共有変数を更新することである。この修正は、整合性が維持されるように、注意深く制御されなければならない。
3.クリティカル・セクションは多くの命令を含むため、プロセスに関する時間量子がクリティカル・セクション内で終わる可能性があり、他のプロセスがプロセッサを制御する一方で、そのプロセスは長い期間中断する可能性がある。クリティカル・セクションに対するロックを保持するプロセスの中断期間中、他のプロセスがクリティカル・セクションに入って、そのクリティカル・セクションによって制御される共有変数を更新することはできない。
この欠点を克服するために、複雑な動作をアトミックに実行される単一の命令として共有変数に実装することが可能である。例として、DEC VAXは、それぞれが4つまでの共有変数を同時かつアトミックに変更するアトミックなENQUEUEおよびDEQUEUE命令を有し、それによって一貫性のある変更が行われる。
この手法に従う場合、マシン設計者は、各データ表示に関する共有変数での各区別できる動作に対してアトミックな命令を与えなければならない。たとえばDEC VAXは、表示の異なるキューに関して、異なるENQUEUEおよびDEQUEUE命令を有する。要素当たり1つのポインタを備えるキューは、ENQUEUE/DEQUEUE命令ペアのうちの1つによって操作されなければならず、要素当たり2つのポインタを備えるキューは、異なるENQUEUE/DEQUEUE命令ペアによって操作されなければならない。
欠点は、こうした各動作はそれぞれ極端に特殊化されているため、考え得るあらゆるアトミック動作および考え得るあらゆるデータ表示を予測しなければならないことである。プログラマが各特定のコンテキストおよびデータ表示に関するカスタムメイドのアトミック動作を容易に作成および使用できないため、この手法は失敗する。
したがって、対処すべき重要な問題は、共有変数に対する複雑な更新のためにカスタマイズされたアトミック動作を生成するため、および、実際の更新が単一命令の実行中に行われるようにこれらのアトミック動作を実行するための機能である。このように、マルチプロセッサ・システムの信頼性および性能は、クリティカル・セクションに関するロックを保持するプロセスの障害または割り込みによるリスクにさらされない。
この問題に対する部分的な解決策は、IBM 370に実装されているような比較およびスワップ(Compare-and-Swap)命令の使用を通じて入手可能である。比較およびスワップ命令は、クリティカル・セクションによって保護されていない命令の読み取り/修正/書き込みシーケンスの最終ステップを提供し、一貫性およびアトミック性を保証すると思われるある条件の下でのみ書き込み動作を実行する。比較およびスワップを使用するために、プロセスは第1に、従来の非アトミック命令を用いて、共有変数の更新済み値の最終書き込みを除く、共有変数を更新するための読み取り/修正/書き込みシーケンスのすべてのアクションを実行する。最終書き込みアクションを実行するために、プロセスは、比較およびスワップ命令を使用する。比較およびスワップは、ストレージから変数を再度読み取り、ストレージ内の現行値とマシン・レジスタ内に保持されている従来値のコピーとを比較する。2つの値が同一である場合、比較およびスワップは、ストレージ内の変数を新しく計算された値によって更新する。マシン・レジスタ内に保持されている従来値のコピーと共有メモリ内に保持されている現行値とが異なる場合、比較およびスワップはストレージを更新せず、マシン・レジスタ内に保持されている従来値のコピーを、共有メモリ内に保持されている現行値のコピーに置き換える。この命令は、条件コード内で起こった内容を報告する。比較およびスワップ自体がアクションの読み取り/修正/書き込みシーケンスを実行することから、それらのアクションはプログラムの正確さを保証するためにアトミックに実行されなければならない。
比較およびスワップの考え方は、他のプロセスが、最後に読み取られた時から値を変更していない場合、共有値を更新できるというものである。これによって一貫性のある挙動が保証されるものと思われる。残念ながら、一貫性のない更新の可能性もある。第1のプロセスが比較およびスワップによって終了される読み取り/修正/書き込みシーケンスの実行中である間、同時に実行中の第2のプロセスは、変数の値(値Aと呼ぶ)を読み取ること、その値を新しい値(値Bと呼ぶ)に変更すること、および、第1のプロセスが値Aに基づいて新しい値を計算している間、さらに他のプロセスは共有変数を従来値(値A)に戻すことが可能である。第1のプロセスが比較およびスワップ命令に到達した場合、現行値および従来値がどちらもAに等しいため、比較およびスワップ命令は成功する。
しかしながら、多くのアプリケーションの場合、正確さは、共有変数の従来値および現行値が等しいことだけでなく、読み取り/修正/書き込みシーケンスの実行中に最初に読み取られた時点から、比較およびスワップが実行された時点まで、ストレージ内の変数が連続して値Aで維持されていることを必要とする。こうした値の変更を検出するための比較およびスワップの障害は、ABA問題と呼ばれる。
共有変数の同時アクセスおよび修正に関するほとんどのアルゴリズムは、ABA問題が発生した場合に失敗する可能性がある。ABA問題に起因する障害の可能性をなくすかまたは減らすために、比較およびスワップと共に使用される様々なソフトウェア・スキームがある。
この問題に対する他の手法は、更新が試行された時点で変数が連続してある値に維持されているか否かを検出するという点を除いて、比較およびスワップの使用と非常に類似している。基本的にこのスキームは、あたかも比較およびスワップが、現行値と従来値との等しさをテストする代わりに、変数が変更されたか否かに関してテストするかのような働きをする。スキームは、予約と呼ばれる概念を使用する。
スキームは、予約のロード(Load-with-Reservation)および予約時書き込み(Write-if-Reserved)という2つの命令を使用するが、命令は、これを使用する様々なプロセッサ上で異なる名前を有する。MIPS(R)のR-4000(R)プロセッサ上、およびDECALPHAプロセッサ上で、使用されている。予約のロードは、ストレージから共有変数を読み取ると同時に、その変数のアドレスを予約レジスタと呼ばれる特殊なレジスタ内に配置する。予約レジスタは他のプロセスによって実行される変数への変更を監視し、それらの他のプロセスは、同じプロセッサ上または他のプロセッサ上で実行中のものとすることができる。任意の他のプロセスが変数の値を変更した場合、予約は消える。そうでない場合、予約を配置したプロセスが予約時書き込み命令に到達するまで、予約は存在する。予約が依然として存在する場合のみ、予約時書き込み命令は更新を実行する。存在しない場合、予約時書き込みは更新を実行しない。いずれのケースでも、命令は何が起こったかを示す条件コードを戻す。多くの応用例では、その後プロセスは条件コードをテストし、更新が成功するまで、予約のロード、修正、予約時書き込みのシーケンスを反復する。
ある実施形態では、本発明は、ソフトウェア(時にライセンス付き内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれ、いずれも本発明に適合する)によって実施可能である。図1を参照すると、本発明を具体化するソフトウェア・プログラム・コードは、通常、CD−ROMドライブ、テープ・ドライブ、またはハード・ドライブなどの長期ストレージ・メディア7から、システム50のCPU(中央処理ユニット)1としても知られるプロセッサによってアクセスされる。ソフトウェア・プログラム・コードは、ディスケット、ハード・ドライブ、またはCD−ROMなどのデータ処理システムで使用するための、任意の多彩な既知のメディア上で具体化可能である。コードは、こうしたメディア上で配布するか、または他のコンピュータ・システムへのネットワークを介して、こうした他のシステムのユーザによって使用されるために、1つのコンピュータ・システムのコンピュータ・メモリ2またはストレージからユーザに配布することが可能である。
別の方法として、プログラム・コードはメモリ2内で具体化され、プロセッサ・バスを使用してプロセッサ1によってアクセスされることが可能である。こうしたプログラム・コードは、様々なコンピュータ・コンポーネントおよび1つまたは複数のアプリケーション・プログラムの機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、高密度ストレージ・メディア11から、プロセッサ1による処理に使用可能な高速メモリ2へとページングされる。ソフトウェア・プログラム・コードをメモリ内、物理メディア上で具体化する、あるいは、ネットワークを介してソフトウェア・コードを配布する、またはそれらすべてのための、技法および方法は、良く知られているため、本明細書ではこれ以上考察しない。プログラム・コードは、有形のメディア(電子メモリモジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープなどを含むがこれらに限定されない)上で作成および格納された場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品メディアは、通常、好ましくはコンピュータ・システム内の処理回路によって、処理回路による実行のために読み取り可能である。
図3は、内部で本発明が実施可能な代表的ワークステーションまたはサーバ・ハードウェア・システムを示す。図3のシステム100は、オプションの周辺デバイスを含む、パーソナル・コンピュータ、ワークステーション、またはサーバなどの、代表的コンピュータ・システム101を備える。ワークステーション101は、1つまたは複数のプロセッサ106と、既知の技法に従ってプロセッサ106とシステム101の他のコンポーネントとの間を接続して通信可能にするために採用されたバスとを含む。バスは、プロセッサ106をメモリ105と、たとえばハード・ドライブ(たとえば磁気メディア、CD、DVD、およびフラッシュ・メモリのいずれかを含む)またはテープ・ドライブを含むことが可能な長期ストレージ107とに接続する。システム101は、ユーザ・インターフェース・アダプタを含むことも可能であり、これが、バスを介してマイクロプロセッサ106を、キーボード104、マウス103、プリンタ/スキャナ110、あるいは、タッチ式スクリーン、デジタル式入力パッドなどの任意のユーザ・インターフェース・デバイスとすることが可能な他のインターフェース・デバイス、またはそれらすべてに接続する。バスは、LCDスクリーンまたはモニタなどのディスプレイ・デバイス102を、ディスプレイ・アダプタを介してマイクロプロセッサ106にも接続する。
システム101は、ネットワーク109との通信18が可能なネットワーク・アダプタを用いて、他のコンピュータまたはコンピュータのネットワークと通信可能である。ネットワーク・アダプタの例は、通信チャネル、トークン・リンク、イーサネット、またはモデムである。別の方法として、ワークステーション101は、CDPD(セルラ式デジタル・パケット・データ)カードなどのワイヤレス・インターフェースを使用して通信可能である。ワークステーション101は、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)内のこうした他のコンピュータに関連付けることが可能であるか、あるいは、ワークステーション101は、他のコンピュータなどを備えるクライアント/サーバ配置構成内のクライアントとすることができる。これらの構成、ならびに適切な通信ハードウェアおよびソフトウェアは、すべて当分野で知られている。
図4は、内部で本発明が実施可能なデータ処理ネットワーク200を示す。データ処理ネットワーク200は、それぞれが複数の個別のワークステーション101、201、202、203、204を含むことが可能な、無線ネットワークおよび有線ネットワークなどの複数の個別のネットワークを含むことができる。加えて、当業者であれば、1つまたは複数のLANを含めることが可能であることを理解され、ここでLANは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを備えることができる。
さらに図4を参照すると、ネットワークは、ゲートウェイ・コンピュータ(クライアント・サーバ206)またはアプリケーション・サーバ(データ・リポジトリにアクセス可能であり、ワークステーション205からも直接アクセス可能な、リモート・サーバ208)などの、メインフレーム・コンピュータまたはサーバを含むこともできる。ゲートウェイ・コンピュータ206は、各ネットワーク207への入力ポイントとして働く。ゲートウェイは、1つのネットワーキング・プロトコルを他に接続する場合に必要である。ゲートウェイ206は、好ましくは通信リンクを用いて他のネットワーク(たとえばインターネット207)に結合することができる。ゲートウェイ206は、通信リンクを使用して、1つまたは複数のワークステーション101、201、202、203、204に直接結合することもできる。ゲートウェイ・コンピュータは、IBM社から入手可能な、IBM eServer(TM)、zSeries(R)、z10(TM)Serverを使用して実装可能である。
本発明を具体化するソフトウェア・プログラミング・コードは、通常、CD−ROMドライブまたはハード・ドライブなどの長期ストレージ・メディア107から、システム101のプロセッサ106によってアクセスされる。ソフトウェア・プログラミング・コードは、ディスケット、ハード・ドライブ、またはCD−ROMなどの、データ処理システムで使用するための多様な既知のメディアのいずれかで、具体化可能である。コードは、こうしたメディア上で配布可能であるか、あるいは、1つのコンピュータ・システムのメモリまたはストレージからユーザ210、211へと、こうした他のシステムのユーザが使用するためにネットワークを介して他のコンピュータ・システムに配布可能である。
別の方法として、プログラミング・コード111は、メモリ105内で具体化可能であり、プロセッサ・バスを使用してプロセッサ106によってアクセス可能である。こうしたプログラミング・コードは、様々なコンピュータ・コンポーネントおよび1つまたは複数のアプリケーション・プログラム112の機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、高密度ストレージ・メディア107からプロセッサ106による処理に使用可能な高速メモリ105へとページングされる。
ソフトウェア・プログラム・コードをメモリ内、物理メディア上で具体化する、あるいは、ネットワークを介してソフトウェア・コードを配布する、またはそれらすべてのための、技法および方法は、良く知られているため、本明細書ではこれ以上考察しない。プログラム・コードは、有形のメディア(電子メモリモジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープなどを含むがこれらに限定されない)上で作成および格納された場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品メディアは、通常、好ましくはコンピュータ・システム内の処理回路によって、処理回路による実行のために読み取り可能である。
プロセッサが最も容易に使用可能なキャッシュ(通常はプロセッサの他のキャッシュよりも高速かつ小型である)は最低位(L1またはレベル1)キャッシュであり、メイン・ストア(メイン・メモリ)は最高位キャッシュ(3レベルある場合はL3)である。最低位キャッシュは、しばしば、実行されることになるマシン命令を保持する命令キャッシュ(Iキャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(Dキャッシュ)とに分割される。
図5を参照すると、プロセッサ106に関するプロセッサ実施形態の例が示されている。通常、プロセッサ性能を向上させるためにメモリ・ブロックをバッファするための1つまたは複数のレベルのキャッシュ303が採用される。キャッシュ303は、使用される可能性の高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64、128、または256バイトのメモリ・データである。データをキャッシュに入れるのではなく命令をキャッシュに入れるために、しばしば別々のキャッシュが採用される。キャッシュ・コヒーレンス(メモリおよびキャッシュ内のラインのコピーの同期化)は、しばしば、当分野で周知の様々な「スヌープ」アルゴリズムによって提供される。プロセッサ・システムのメイン・ストレージ105は、しばしばキャッシュと呼ばれる。4レベルのキャッシュ303を有するプロセッサ・システムでは、メイン・ストレージ105は、通常は、より高速であり、コンピュータ・システムが使用可能な不揮発性ストレージ(DASD、テープなど)の一部のみを保持することから、時にレベル5(L5)キャッシュと呼ばれる。メイン・ストレージ105は、オペレーティング・システムによってメイン・ストレージ105の内外へページングされたデータのページを「キャッシュ」に入れる。
プログラム・カウンタ(命令カウンタ)311は、実行されることになる現行の命令のアドレスを追跡する。z/Architectureプロセッサにおけるプログラム・カウンタは64ビットであり、以前のアドレス指定制限をサポートするために31または24ビットに切り詰めることができる。プログラム・カウンタは、通常、コンテキスト切り換え中に持続するように、コンピュータのPSW(プログラム・ステータス・ワード)で具体化される。したがって、プログラム・カウンタ値を有する進行中のプログラムは、たとえばオペレーティング・システムによって中断される可能性がある(プログラム環境からオペレーティング・システム環境へのコンテキスト切り換え)。プログラムのPSWは、プログラムがアクティブでない間もプログラム・カウンタを維持し、オペレーティング・システムのプログラム・カウンタ(PSW)は、オペレーティング・システムが実行中の間使用される。通常、プログラム・カウンタは、現行命令のバイト数に等しい量だけ増分される。RISC(縮小命令セット・コンピューティング)命令は、通常固定長であるが、CISC(複雑命令セット・コンピューティング)命令は、通常可変長である。IBM z/Architectureの命令は、2、4、または6バイト長さのCISC命令である。プログラム・カウンタ311は、コンテキスト切り換え動作、またはたとえば分岐命令の分岐実施動作のいずれかによって修正される。コンテキスト切り換え動作では、現行プログラム・カウンタ値が、実行中のプログラム(条件コードなど)に関する他の状態情報と共に、プログラム・ステータス・ワード(PSW)で保存され、実行されることになる新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐実施動作は、プログラムの意思決定またはプログラム内ループを許可するために、分岐命令の結果をプログラム・カウンタ311にロードすることによって実行される。
通常、命令フェッチ・ユニット305は、プロセッサ106の代わりに命令をフェッチするために採用される。フェッチ・ユニットは、「次の順次命令」、分岐実施命令のターゲット命令、またはコンテキスト切り換えに続くプログラムの第1の命令の、いずれかをフェッチする。現在の命令フェッチ・ユニットは、しばしばプリフェッチ技法を採用し、プリフェッチされた命令が使用される確率に基づいて、命令を投機的にプリフェッチする。たとえば、フェッチ・ユニットは、次の順次命令および他の順次命令の追加バイトを含む、16バイトの命令をフェッチすることができる。
フェッチされた命令は、その後、プロセッサ106によって実行される。ある実施形態では、フェッチされた命令はフェッチ・ユニットのディスパッチ・ユニット306に渡される。ディスパッチ・ユニットは命令を復号し、復号された命令に関する情報を適切なユニット307、308、310に転送する。実行ユニット307は、通常、復号された算術命令に関する情報を命令フェッチ・ユニット305から受け取り、命令の演算コードに従ってオペランドで算術演算を実行する。オペランドは、好ましくはメモリ105、アーキテクト・レジスタ309、または実行されている命令の即時フィールドのいずれかから、実行ユニット307に提供される。実行の結果は、格納される場合、メモリ105、レジスタ309、または他のマシン・ハードウェア(制御レジスタ、PSWレジスタなど)のいずれかに格納される。
プロセッサ106は、通常、命令の機能を実行するための1つまたは複数の実行ユニット307、308、310を有する。図6を参照すると、実行ユニット307は、インターフェース論理407を用いて、アーキテクト汎用レジスタ309、復号/ディスパッチ・ユニット306、ロード・ストア・ユニット310、およびその他401プロセッサ・ユニットと通信することができる。実行ユニット307は、いくつかのレジスタ回路403、404、405を使用して、算術論理ユニット(ALU)402の演算に関する情報を保持することができる。ALUは、加算、減算、乗算、および除算などの算術演算、ならびに、AND、OR、および排他的OR(XOR)、回転および偏移などの論理関数を実行する。好ましくは、ALUは、設計に依存した特殊な演算をサポートする。他の回路は、条件コードおよびたとえば回復支援論理を含む、他のアーキテクト機構408を提供することができる。通常、ALU演算の結果は、結果を多様な他の処理機能に転送できる、出力レジスタ回路406内に保持される。プロセッサ・ユニットの配置構成は多数存在するため、本説明は一実施形態の代表的な理解を与えることのみを意図するものである。
たとえばADD命令は、算術および論理関数を有する実行ユニット307で実行されるが、たとえば浮動小数点命令は、特殊な浮動小数点機能を有する浮動小数点実行で実行される。好ましくは、実行ユニットは、オペランドで演算コード定義済み機能を実行することにより、命令によって識別されたオペランドで動作する。たとえば、ADD命令は、命令のレジスタ・フィールドによって識別された2つのレジスタ309内で見つけられたオペランドで実行ユニット307によって実行可能である。
実行ユニット307は、2つのオペランドで算術的加算を実行し、その結果を第3のオペランドに格納するが、第3のオペランドは第3のレジスタまたは2つのソース・レジスタのうちの1つとすることができる。実行ユニットは、好ましくは、偏移、回転、AND、OR、およびXOR、ならびに、加算、減算、乗算、除算のうちのいずれかを含む多様な代数関数などの、多様な論理関数を実行することが可能な、算術論理ユニット(ALU)402を使用する。いくつかのALU402はスカラ演算用に設計され、いくつかは浮動小数点用である。データは、アーキテクチャに応じて、ビッグ・エンディアン(Big Endian)(最下位バイトが最上位バイト・アドレスにある)またはリトル・エンディアン(最下位バイトが最下位バイト・アドレスにある)とすることができる。IBM z/Architectureはビッグ・エンディアンである。符号付きフィールドは、アーキテクチャに応じて符号および絶対値、1の補数、または2の補数とすることができる。2の補数は、2の補数における負の値または正の値のいずれもALU内で単独および加算を必要とするため、ALUが減算機能を設計する必要がないという点で有利である。数字は一般に省略表現で記述され、12ビット・フィールドは4096バイト・ブロックのアドレスを定義し、たとえば一般に4Kbyte(キロバイト)ブロックとして記述される。
図7を参照すると、分岐命令を実行するための分岐命令情報は、通常、分岐ユニット308に送信され、これはしばしば、他の条件付き演算が完了する前に分岐の結果を予測するために、分岐履歴テーブル432などの分岐予測アルゴリズムを採用する。現行分岐命令のターゲットはフェッチされ、条件付き演算が完了する前に投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件および投機結果に基づいて完了または破棄される。典型的な分岐命令は、条件コードをテストし、条件コードが分岐命令の分岐要件に合致した場合はターゲット・アドレスへと分岐することが可能であり、ターゲット・アドレスは、たとえばレジスタ・フィールドまたは命令の即時フィールド内で発見されたものを含むいくつかの数値に基づいて計算することができる。分岐ユニット308は、複数の入力レジスタ回路427、428、429および出力レジスタ回路430を有する、ALU426を採用することができる。分岐ユニット308は、たとえば汎用レジスタ309、復号ディスパッチ・ユニット306、または他の回路425と通信可能である。
命令グループの実行は、たとえば、オペレーティング・システムによって開始されるコンテキスト切り換え、コンテキスト切り換えを発生させるプログラム例外またはエラー、コンテキスト切り換えを発生させるI/O割り込み信号、または(マルチスレッド環境における)複数プログラムのマルチスレッド動作を含む、多様な理由で中断される可能性がある。好ましくは、コンテキスト切り換え動作は現在実行中のプログラムに関する状態情報を保存し、呼び出し中の他のプログラムに関する状態情報をロードする。状態情報は、たとえばハードウェア・レジスタまたはメモリ内に保存可能である。状態情報は、好ましくは、実行されることになる次の命令を指し示すプログラム・カウンタ値、条件コード、メモリ変換情報、およびアーキテクト・レジスタ・コンテンツを含む。コンテキスト切り換え動作は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード(マイクロコード、ピココード、またはライセンス付き内部コード(LIC))を単独で、または組み合わせることによって、実行させることができる。
プロセッサは、命令定義方法に従ってオペランドにアクセスする。命令は、命令の一部の値を使用して即時オペランドを提供し、汎用レジスタまたは特定用途向けレジスタ(たとえば浮動小数点レジスタ)のいずれかを明示的に指し示す1つまたは複数のレジスタ・フィールドを提供することができる。命令は、演算コード・フィールドによってオペランドとして識別された暗示レジスタを使用することができる。命令は、オペランドに関するメモリ位置を使用することができる。オペランドのメモリ位置は、命令が、たとえばメモリ内のオペランドのアドレスを提供するためにまとめて加えられる基本レジスタ、インデックス・レジスタ、および即時フィールド(変位フィールド)を定義する、z/Architectureの長変位機構によって例示されるような、レジスタ、即時フィールド、またはレジスタと即時フィールドとの組み合わせによって、提供することができる。本明細書における位置とは、特に指示されていない限り、通常、メイン・メモリ(メイン・ストレージ)内の位置を暗示する。
図8を参照すると、プロセッサはロード/ストア・ユニット310を使用してストレージにアクセスする。ロード/ストア・ユニット310は、メモリ303内のターゲット・オペランドのアドレスを取得すること、および、オペランドをレジスタ309または他のメモリ303位置にロードすることによって、ロード動作を実行することが可能であるか、あるいは、メモリ303内のターゲット・オペランドのアドレスを取得すること、および、レジスタ309または他のメモリ303位置から取得されたデータをメモリ303内のターゲット・オペランド位置に格納することによって、ストア動作を実行することができる。ロード/ストア・ユニット310は投機的であり、命令シーケンスに関して順序外れのシーケンスでメモリにアクセスすることができるが、ロード/ストア・ユニット310は、命令が実行された順序でのプログラムに対する出現を維持しなければならない。ロード/ストア・ユニット310は、汎用レジスタ309、復号/ディスパッチ・ユニット306、キャッシュ/メモリ・インターフェース303、またはその他要素455と通信可能であり、ストレージ・アドレスを計算し、動作の順序を維持するためのパイプライン順序付けを提供するための、様々なレジスタ回路、ALU458、および制御論理463を備える。いくつかの動作は順序外れで良いが、ロード/ストア・ユニットは、順序外れ動作を、当分野で周知の順序で実行されたようにプログラムに対して出現させるための機能を提供する。
好ましくは、アプリケーション・プログラムが「見る」アドレスは、しばしば、仮想アドレスと呼ばれる。仮想アドレスは、時に、「論理アドレス」および「実効アドレス」と呼ばれる。これらの仮想アドレスは、単に仮想アドレスをオフセット値でプレフィックスすること、1つまたは複数の変換テーブルを介して仮想アドレスを変換することを含むが、これらに限定されない、多様な動的アドレス変換(DAT)312技術のうちの1つによって物理メモリ位置へと宛先変更されるという点で、仮想であり、変換テーブルは、好ましくは少なくともセグメント・テーブルおよびページ・テーブルを単独または組み合わせて含み、好ましくはセグメント・テーブルはページ・テーブルを指し示すエントリを有する。z/Architectureでは、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、およびオプションのページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、しばしば、仮想アドレスを関連付けられた物理メモリ位置にマッピングするエントリを備える変換索引バッファ(TLB)を使用することによって向上する。エントリは、DAT312が変換テーブルを使用して仮想アドレスを変換した場合に作成される。仮想アドレスのその後の使用では、低速逐次変換テーブル・アクセスではなく、高速TLBのエントリを使用することができる。TLBコンテンツは、LRU(最長時間未使用)を含む多様な置換アルゴリズムによって管理することができる。
プロセッサがマルチプロセッサ・システムのプロセッサである場合、各プロセッサは、コヒーレンシに関してインターロックされた、I/O、キャッシュ、TLB、およびメモリなどの共有リソースを維持する責務を負う。典型的には、キャッシュのコヒーレンシを維持するために「スヌープ」技術が使用される。スヌープ環境では、各キャッシュ・ラインは、共有を容易にするために、共有状態、排他的状態、変更済み状態、無効状態などのうちのいずれかであるようにマーク付けすることができる。
I/Oユニット304は、たとえばテープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む、周辺デバイスに接続するための手段を、プロセッサに提供する。I/Oユニットは、しばしば、ソフトウェア・ドライバによってコンピュータ・プログラムに提示される。IBMのz/Seriesなどのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタが、オペレーティング・システムと周辺デバイスとの間に通信を提供する、メインフレームのI/Oユニットである。
z/ArchitectureのPrinciples of Operationからの以下の説明で、コンピュータ・システムのアーキテクチャについて概説する。
ストレージ
コンピュータ・システムは、メイン・ストレージ内に、情報、ならびにアドレス指定、保護、参照および変更の記録を含める。アドレス指定のいくつかの態様には、アドレスの形式、アドレス・スペースの概念、様々なタイプのアドレス、および、1タイプのアドレスが他のタイプのアドレスに変換される際の様式が含まれる。メイン・ストレージの一部には、永続的に割り当てられたストレージ位置が含まれる。メイン・ストレージは、データの直接アドレス指定可能な高速アクセス・ストレージを、システムに提供する。データおよびプログラムは、どちらも処理の前に(入力デバイスから)メイン・ストレージにロードしなければならない。
メイン・ストレージは、時にキャッシュと呼ばれる、1つまたは複数のより小型の高速アクセス・バッファ・ストレージを含むことができる。キャッシュは、通常、CPUまたはI/Oプロセッサに物理的に関連付けられる。性能を除く物理的構造の効果および別個のストレージ・メディアの使用は、一般に、プログラムが監視することはできない。
命令およびデータ・オペランドに対して、別々のキャッシュを維持することができる。キャッシュ内の情報は、キャッシュ・ブロックまたはキャッシュ・ライン(または略してライン)と呼ばれる整数境界(integral boundary)上の連続バイトで維持される。モデルは、バイト単位のキャッシュ・ラインのサイズを戻す、EXTRACT CACHE ATTRIBUTE命令を提供可能である。モデルは、データまたは命令キャッシュ内へのストレージのプリフェッチ、あるいはキャッシュからのデータの解放を実行する、PREFETCH DATA命令およびPREFETCH DATA RELATIVE LONG命令も提供可能である。
ストレージは、ビットの長い水平文字列とみなされる。ほとんどの動作では、ストレージへのアクセスは左から右へと順番に進む。ビットの文字列は、8ビット単位に細分される。8ビット単位はバイトと呼ばれ、すべての情報形式の基本構築ブロックである。ストレージ内の各バイト位置は、そのバイト位置のアドレス、または単にバイト・アドレスである、固有の非負整数によって識別される。隣接するバイト位置は、左の0から始まり、左から右へと順番に進んで行く、連続アドレスを有する。アドレスは符号なしの2進整数であり、24、31、または64ビットである。
情報は、ストレージとCPUまたはチャネル・サブシステムとの間で、1バイトずつ、またはバイト・グループで伝送される。特に指定されていない限り、ストレージ内のバイト・グループは、グループの左端バイトによってアドレス指定される。グループ内のバイト数は、実行されることになる動作によって暗示されるかまたは明示的に指定される。CPU動作で使用される場合、バイト・グループはフィールドと呼ばれる。各バイト・グループ内で、ビットは左から右へと順番に番号付けされる。左端のビットは時に「高位」ビットと呼ばれ、右端のビットは「低位」ビットと呼ばれる。しかしながら、ビット番号はストレージ・アドレスではない。バイトのみがアドレス指定可能である。ストレージ内のバイトの個々のビットで動作するためには、バイト全体にアクセスする必要がある。バイト内のビットには、左から右へ0から7までの番号が付けられる。アドレス内のビットは、24ビット・アドレスの場合は8〜31または40〜63、31ビット・アドレスの場合は1〜31または33〜63と番号付けされ、64ビットの場合は0〜63と番号付けされる。複数バイトの任意の他の固定長形式では、形式を構成するビットに、0から始まる番号が連続して付けられる。エラー検出のために、また好ましくは訂正の際に、各バイトまたはバイト・グループと共に1つまたは複数のチェック・ビットを送信することができる。こうしたチェック・ビットは、マシンによって自動的に生成され、プログラムによって直接制御することはできない。ストレージ容量はバイト数で表される。ストレージ・オペランド・フィールドの長さが命令の演算コードによって暗示される場合、フィールドは1、2、4、8、または16バイトとすることが可能な固定長を有するものと言われる。いくつかの命令にはより大きなフィールドを暗示することができる。ストレージ・オペランド・フィールドの長さが暗示ではなく明示的に示される場合、そのフィールドは可変長を有するものと言われる。可変長オペランドは、1バイトずつの増分によって長さを変えることができる。ストレージに情報が配置される場合、たとえストレージへの物理経路の幅が、格納されているフィールドの長さよりも大きい可能性があっても、指定されたフィールドに含められたバイト位置のみのコンテンツが置き換えられる。
一定単位の情報がストレージ内の整数境界上になければならない。そのストレージ・アドレスがバイト単位の長さの倍数である場合、境界は、情報の単位に関する整数と呼ばれる。整数境界上の2、4、8、および16バイトのフィールドには、特別な名前が与えられる。ハーフワードとは、2バイト境界上の2つの連続するバイトのグループであり、命令の基本構築ブロックである。ワードとは、4バイト境界上の4つの連続するバイトのグループである。ダブルワードとは、8バイト境界上の8つの連続するバイトのグループである。カッドワード(quadword)とは、16バイト境界上の16の連続するバイトのグループである。ストレージ・アドレスがハーフワード、ワード、ダブルワード、およびカッドワードを指定した場合、アドレスの2進表現は、それぞれ右端に1つ、2つ、3つ、または4つのゼロ・ビットを含む。命令は2バイトの整数境界上になければならない。ほとんどの命令のストレージ・オペランドは、境界合わせ要件を持たない。
命令およびデータ・オペランドに対して別々のキャッシュを実装するモデルでは、ストアがその後フェッチされる命令を変更するかどうかにかかわらず、その後の命令のフェッチ元であるキャッシュ・ラインにプログラムを格納する場合、大幅な遅延が生じる可能性がある。
命令
通常、CPUの動作は、ストレージ・アドレスの昇順で1つずつ左から右へと順次実行される、ストレージ内の命令によって制御される。分岐、LOAD PSW、割り込み、SIGNAL PROCESSOR順序、または手動介入によって、順次動作における変更が生じる可能性がある。
好ましくは、命令には以下の2つの主要部分が含まれる。
・実行されることになる演算を指定する、演算コード(op code)
・オプションで、関与するオペランドの指定
z/Architectureの命令形式が図9〜図14に示されている。命令は単にOpcode501、あるいは、演算コードおよびレジスタ内またはメモリ内のオペランドの位置を特定するための即時オペランドまたはレジスタ指定子を含む多様なフィールドを、提供することができる。演算コードは、1つまたは複数の特定の汎用レジスタ(GPR)などの暗示リソース(オペランドなど)が使用されることになるハードウェアを指示することができる。オペランドは、レジスタ内に位置するオペランド、即時オペランド、およびストレージ内のオペランドという、3つのクラスにグループ分けすることができる。オペランドは、明示的または暗示的に指定することができる。レジスタ・オペランドは、演算コードによってレジスタのタイプが識別される、汎用、浮動小数点、アクセス、または制御のレジスタ内に位置することができる。オペランドを含むレジスタは、命令内のRフィールドと呼ばれる4ビット・フィールド内でレジスタを識別することによって指定される。いくつかの命令では、オペランドは暗黙的に指定されたレジスタ内に位置し、このレジスタは演算コードによって暗示される。即時オペランドは命令内に含められ、即時オペランドを含む8ビット、16ビット、または32ビット・フィールドはIフィールドと呼ばれる。ストレージ内のオペランドは、暗示長さを有すること、ビット・マスクによって指定されること、命令内のLフィールドと呼ばれる4ビットまたは8ビットの長さ指定によって指定されること、あるいは、汎用レジスタのコンテンツによって指定された長さを有することができる。ストレージ内のオペランドのアドレスは、汎用レジスタのコンテンツをアドレスの一部として使用する形式によって指定される。これにより、以下のことが可能になる。
省略表記を使用することによって完全なアドレスを指定する
オペランドに対して汎用レジスタを採用する命令を使用して、アドレス操作を実行する
他のプログラムから受け取ったアドレスを直接使用することによって、データ領域の位置とは無関係な命令streamOperateを変更することなく、プログラム手段によってアドレスを修正する
ストレージを参照する際に使用されるアドレスは、命令内のRフィールドによって指定されたレジスタに含まれるか、または、命令内でそれぞれB、X、およびDフィールドによって指定される基本アドレス、インデックス、および変位から計算される。CPUがアクセス・レジスタ・モードの場合、BまたはRフィールドは、アドレスの指定に使用されることに加えて、アクセス・レジスタを指定することができる。命令の実行を記述するために、好ましくは、オペランドは第1および第2のオペランド、さらにいくつかのケースでは、第3および第4のオペランドとして指定される。一般に、2つのオペランドが命令実行に関与し、その結果が第1のオペランドと置き換わる。
命令は1、2、または3ハーフワード長さであり、ハーフワード境界上のストレージ内に位置しなければならない。命令形式を示す図9〜図14を参照すると、各命令は、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の、25の基本形式のうちの1つであり、RRFには3つ、RI、RIL、RS、およびRSYには2つ、RIEおよびSSには5つの変形がある。
形式の名前は、以下のように、総称的に、動作に関与するオペランドのクラスおよびフィールドに関する何らかの詳細を示す。
・RISは、レジスタおよび即時動作、ならびにストレージ動作を示す。
・RRSは、レジスタおよびレジスタ動作、ならびにストレージ動作を示す。
・SILは、16ビットの即時フィールドを備えた、ストレージおよび即時動作を示す。
I、RR、RS、RSI、RX、SI、およびSS形式では、命令の第1のバイトが演算コードを含む。E、RRE、RRF、S、SIL、およびSSE形式では、命令の第1の2バイトが演算コードを含むが、例外としてS形式のいくつかの命令では演算コードが第1のバイトのみにある。RIおよびRIL形式では、演算コードは命令の第1のバイトおよびビット位置12〜15にある。RIE、RIS、RRS、RSL、RSY、RXE、RXF、RXY、およびSIY形式では、演算コードは命令の第1のバイトおよび第6のバイトにある。演算コードの第1またはそれのみのバイトの第1の2ビットが、命令の長さおよび形式を以下のように指定する。
RR、RRE、RRF、RRR、RX、RXE、RXF、RXY、RS、RSY、RSI、RI、RIE、およびRIL形式では、RIフィールドによって指定されたレジスタのコンテンツが第1のオペランドと呼ばれる。第1のオペランドを含むレジスタは、時に「第1オペランド位置」と呼ばれ、時に「レジスタR1」と呼ばれる。RR、RRE、RRF、およびRRR形式では、R2フィールドは第2のオペランドを含むレジスタを指定し、R2フィールドはR1フィールドと同じレジスタを指定することができる。RRF、RXF、RS、RSY、RSI、およびRIE形式では、R3フィールドの使用は命令に依存する。RSおよびRSY形式では、R3フィールドは、その代わりにマスクを指定するM3フィールドとすることができる。Rフィールドは、汎用命令では汎用またはアクセスのレジスタ、制御命令では汎用レジスタ、浮動小数点命令では浮動小数点レジスタまたは汎用レジスタを指定する。汎用および制御レジスタでは、レジスタ・オペランドは、命令に応じて64ビット・レジスタの32〜63のビット位置にあるか、またはレジスタ全体を占有する。
I形式では、命令の8ビットの即時データ・フィールド、Iフィールドのコンテンツが、オペランドとして直接使用される。SI形式では、命令の8ビットの即時データ・フィールド、I2フィールドのコンテンツが、第2のオペランドとして直接使用される。B1およびD1フィールドは、1バイト長さの第1のオペランドを指定する。SIY形式では、D1フィールドの代わりにDH1およびDL1フィールドが使用されるという点を除き、動作は同じである。命令ADD HALFWORD IMMEDIATE、COMPARE HALFWORD IMMEDIATE、LOAD HALFWORD IMMEDIATE、およびMULTIPLY HALFWORD IMMEDIATEに関するRI形式では、命令の16ビットI2フィールドのコンテンツは符号付き2進整数として直接使用され、R1フィールドは第1のオペランドを指定し、命令に応じて32または64ビット長さである。命令TEST UNDER MASK(TMHH、TMHL、TMLH、TMLL)では、I2フィールドのコンテンツがマスクとして使用され、R1フィールドは第1のオペランドを指定し、64ビット長さである。
命令INSERTIMMEDIATE、AND IMMEDIATE、OR IMMEDIATE、およびLOADLOGICAL IMMEDIATEでは、I2フィールドのコンテンツが符号なし2進整数または論理値として使用され、R1フィールドは第1のオペランドを指定し、64ビット長さである。RIおよびRSI形式の相対分岐命令では、16ビットI2フィールドのコンテンツがいくつかのハーフワードを指定する符号付き2進整数として使用される。この数字は、分岐命令のアドレスに追加された場合、分岐アドレスを指定する。RIL形式の相対分岐命令では、I2フィールドは32ビットであり、同じように使用される。
RIおよびRSI形式の相対分岐命令では、16ビットI2フィールドのコンテンツがいくつかのハーフワードを指定する符号付き2進整数として使用される。この数字は、分岐命令のアドレスに追加された場合、分岐アドレスを指定する。RIL形式の相対分岐命令では、I2フィールドは32ビットであり、同じように使用される。RIE形式の命令COMPARE IMMEDIATE AND BRANCHRELATIVEおよびCOMPARE LOGICAL IMMEDIATE ANDBRANCH RELATIVEでは、8ビットI2フィールドのコンテンツが第2のオペランドとして直接使用される。RIE形式の命令COMPARE IMMEDIATE AND BRANCH、COMPARE IMMEDIATE AND TRAP、COMPARE LOGICAL IMMEDIATE AND BRANCH、およびCOMPARE LOGICAL IMMEDIATE AND TRAPでは、16ビットI2フィールドのコンテンツが第2のオペランドとして直接使用される。RIE形式の命令COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE、およびCOMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVEでは、16ビットI4フィールドのコンテンツが、分岐アドレスを形成するために命令のアドレスに追加されるいくつかのハーフワードを指定する符号付き2進整数として使用される。
RIL形式の命令ADDIMMEDIATE、ADD LOGICAL IMMEDIATE、ADD LOGICAL WITH SIGNED IMMEDIATE、COMPARE IMMEDIATE、COMPARE LOGICAL IMMEDIATE、LOAD IMMEDIATE、およびMULTIPLYSINGLE IMMEDIATEでは、32ビットI2フィールドのコンテンツが第2のオペランドとして直接使用される。
RIS形式の命令では、8ビットI2フィールドのコンテンツが第2のオペランドとして直接使用される。SIL形式では、16ビットI2フィールドのコンテンツが第2のオペランドとして直接使用される。B1およびD1フィールドは、以下で説明するように第1のオペランドを指定する。
RSL、SI、SIL、SSE、およびほとんどのSS形式では、B1フィールドによって指定された汎用レジスタのコンテンツが、第1のオペランド・アドレスを形成するためにD1フィールドのコンテンツに追加される。RS、RSY、S、SIY、SS、およびSSE形式では、B2フィールドによって指定された汎用レジスタのコンテンツが、第2のオペランド・アドレスを形成するためにD2フィールドまたはDH2およびDL2フィールドのコンテンツに追加される。RX、RXE、RXF、およびRXY形式では、
X2およびB2フィールドによって指定された汎用レジスタのコンテンツが、第2のオペランド・アドレスを形成するためにD2フィールドまたはDH2およびDL2フィールドのコンテンツに追加される。RISおよびRRS形式、ならびに1つのSS形式では、B4フィールドによって指定された汎用レジスタのコンテンツが、第4のオペランド・アドレスを形成するためにD4フィールドのコンテンツに追加される。
単一の8ビット長さフィールドを伴うSS形式の、命令AND(NC)、EXCLUSIVE OR(XC)、MOVE(MVC)、MOVENUMERICS、MOVE ZONES、およびOR(OC)では、Lが、第1のオペランド・アドレスによって指定されるバイトの右側に追加のオペランド・バイトの数を指定する。したがって、第1のオペランドのバイト長さは、0〜255のLの長さコードに対応して、1〜256である。ストレージ結果は第1のオペランドと置き換わり、アドレスおよび長さによって指定されたフィールドの外側には決して格納されない。この形式では、第2のオペランドは第1のオペランドと同じ長さを有する。EDIT、EDIT ANDMARK、PACK ASCII、PACK UNICODE、TRANSLATE、TRANSLATE AND TEST、UNPACK ASCII、およびUNPACKUNICODEに適用する先行定義の変形がある。
2つの長さフィールドを伴うSS形式、およびRSL形式では、L1が、第1のオペランド・アドレスによって指定されるバイトの右側に追加のオペランド・バイトの数を指定する。したがって、第1のオペランドのバイト長さは、0〜15のL1の長さコードに対応して、1〜16である。同様に、L2が、第2のオペランド・アドレスによって指定される位置の右側に追加のオペランド・バイトの数を指定する。結果は第1のオペランドと置き換わり、アドレスおよび長さによって指定されたフィールドの外側には決して格納されない。第1のオペランドが第2よりも長い場合、第2のオペランドは、左側にゼロを用いて第1のオペランドの長さまで拡張される。この拡張では、ストレージ内の第2のオペランドを修正しない。2つのRフィールドを伴うSS形式では、MOVE TO PRIMARY、MOVE TO SECONDARY、およびMOVE WITH KEY命令によって使用されるように、R1フィールドによって指定された汎用レジスタのコンテンツは、真長さと呼ばれる32ビットの符号なし値である。オペランドはどちらも実効長さと呼ばれる長さである。実効長さは、どちらが短い場合でも、真長さに等しいかまたは256である。命令は、真長さによって指定されたバイトの合計数を動かすためのループをプログラミングしやすくするように、条件コードを設定する。2つのRフィールドを伴うSS形式は、LOAD MULTIPLE DISJOINT命令に関するレジスタの領域および2つのストレージ・オペランドを指定するため、ならびに、PERFORM LOCKED OPERATION命令に関する1つまたは2つのレジスタおよび1つまたは2つのストレージ・オペランドを指定するためにも使用される。
B1、B2、X2、またはB4のいずれかのフィールドにおけるゼロは、対応するアドレス・コンポーネントの欠如を示す。欠如コンポーネントについて、汎用レジスタのコンテンツ0にかかわらず、ゼロは、中間和を通知するために使用される。ゼロの変位には特別な意味はない。
現行PSWのビット31および32は、アドレス指定モード・ビットである。ビット31は拡張アドレス指定モード・ビットであり、ビット32は基本アドレス指定モード・ビットである。これらのビットは、アドレス生成によって作成される実効アドレスのサイズを制御する。現行PSWのビット31および32がどちらもゼロの場合、CPUは24ビット・アドレス指定モードにあり、24ビット命令およびオペランド実効アドレスが生成される。現行PSWのビット31がゼロであり、ビット32が1の場合、CPUは31ビット・アドレス指定モードにあり、31ビット命令およびオペランド実効アドレスが生成される。現行PSWのビット31および32がどちらも1である場合、CPUは64ビット・アドレス指定モードにあり、64ビット命令およびオペランド実効アドレスが生成される。CPUによる命令の実行には、命令およびオペランドのアドレスの生成が含まれる。
現行PSWによって指定された位置から命令がフェッチされる場合、命令アドレスは命令内のバイト数だけ増分され、命令が実行される。その後、シーケンス内の次の命令をフェッチするために、命令アドレスの新しい値を使用することによって、同じステップが繰り返される。24ビット・アドレス指定モードでは、命令アドレスがラップアラウンド(wrap around)し、命令アドレス224−2のハーフワードの後に、命令アドレス0のハーフワードが続く。したがって、24ビット・アドレス指定モードでは、命令アドレスの更新結果として、PSWビット位置104のいずれの実行も失われる。31ビットまたは64ビットのアドレス指定モードでは、命令アドレスが同様にラップアラウンドし、それぞれ命令アドレス231−2または264−2のハーフワードの後に、命令アドレス0のハーフワードが続く。PSWビット位置97または64の実行が、それぞれ失われる。
ストレージを参照するオペランド・アドレスは中間値から導出され、この値は、命令内のRフィールドによって指定されたレジスタに含まれるか、または、基本アドレス、インデックス、および変位の、3つの2進数の合計から算出される。基本アドレス(B)は、命令内で、Bフィールドと呼ばれる4ビット・フィールド内のプログラムによって指定された汎用レジスタに含まれる64ビット数である。基本アドレスは、プログラムおよびデータ領域をそれぞれ独立にアドレス指定する手段として使用可能である。アレイ・タイプの計算では、アレイの位置を指定することが可能であり、記録タイプの処理では、記録を識別することが可能である。基本アドレスは、ストレージ全体をアドレス指定する。基本アドレスは、インデックス付けにも使用可能である。
インデックス(X)は、命令内で、Xフィールドと呼ばれる4ビット・フィールド内のプログラムによって指定された汎用レジスタに含まれる64ビット数である。RX、RXE、およびRXY形式の命令によって指定されたアドレスにのみ含まれる。RX、RXE、RXF、およびRXY形式の命令は、二重インデックス付けが可能であり、すなわちインデックスを使用して、アレイ内の要素のアドレスを提供することができる。
変位(D)は、命令内で、Dフィールドと呼ばれるフィールド内に含まれる12ビットまたは20ビット数である。12ビット変位は符号なしであり、基本アドレスによって指定された位置を超えて4095バイトまでの相対アドレス指定を提供する。20ビット変位は符号付きであり、基本アドレス位置を超えて524287バイトまで、またはその前に524288バイトまでの、相対アドレス指定を提供する。アレイ・タイプの計算では、変位を使用して、要素に関連付けられた多くの項目のうちの1つを指定することができる。記録の処理では、変位を使用して記録内の項目を識別することができる。12ビット変位は、ある形式の命令のビット位置20〜31にある。いくつかの形式の命令では、第2の12ビット変位も命令内のビット位置36〜47にある。
20ビット変位は、RSY、RXY、またはSIY形式のみの命令にある。これらの命令では、Dフィールドは、ビット位置20〜31内のDL(低)フィールドと、ビット位置32〜39内のDH(高)フィールドからなる。長変位機構がインストールされた場合、変位の数値は、DLフィールドのコンテンツの左にDHフィールドのコンテンツを付加することによって形成される。長変位機構がインストールされない場合、変位の数値は、DLフィールドのコンテンツの左に8つのゼロを付加することによって形成され、DHフィールドのコンテンツは無視される。
中間和を形成する場合、基本アドレスおよびインデックスが64ビット2進整数として扱われる。12ビット変位は12ビットの符号なし2進整数として扱われ、左に52のゼロ・ビットが付加される。20ビット変位は20ビット符号付き2進整数として扱われ、符号ビットに等しい44ビットが左に付加される。3つが64ビット2進数として追加され、オーバフローは無視する。和は常に64ビット長さであり、生成済みアドレスを形成するために中間値として使用される。中間値のビットには0〜63が番号付けされる。B1、B2、X2、またはB4フィールドのいずれかにおけるゼロは、対応するアドレス・コンポーネントの欠如を示す。欠如コンポーネントについて、汎用レジスタのコンテンツ0にかかわらず、ゼロは、中間和を通知する際に使用される。ゼロの変位には特別な意味はない。
命令記述が、ストレージ内のオペランドをアドレス指定するために、Rフィールドによって指定された汎用レジスタのコンテンツが使用されることを指定する場合、レジスタ・コンテンツは64ビット中間値として使用される。
命令は、アドレス計算の場合およびオペランドの位置と同じ汎用レジスタを指定することができる。アドレス計算は、動作によってレジスタが変更されることがあれば、その前に完了する。個々の命令定義に示されていない限り、生成済みオペランド・アドレスは、ストレージ内のオペランドの左端バイトを指定する。
生成済みオペランド・アドレスは常に64ビット長さであり、ビットには0〜63が番号付けされる。生成済みアドレスが中間値から取得される方法は、現行のアドレス指定モードに依存する。24ビット・アドレス指定モードでは、中間値のビット0〜39は無視され、生成済みアドレスのビット0〜39は強制的にゼロとなり、中間値のビット40〜63は生成済みアドレスのビット40〜63となる。31ビット・アドレス指定モードでは、中間値のビット0〜32は無視され、生成済みアドレスのビット0〜32は強制的にゼロとなり、中間値のビット33〜63は生成済みアドレスのビット33〜63となる。64ビットアドレス指定モードでは、中間値のビット0〜63が生成済みアドレスのビット0〜63となる。インデックスおよび基本アドレス・レジスタでは、負の値が使用できる。これらの値のビット0〜32は31ビット・アドレス指定モードで無視され、ビット0〜39は24ビット・アドレス指定モードで無視される。
分岐命令の場合、分岐が行われた場合に実行されることになる次の命令のアドレスは分岐アドレスと呼ばれる。分岐命令に応じて、命令形式は、RR、RRE、RX、RXY、RS、RSY、RSI、RI、RIE、またはRILとすることができる。RS、RSY、RX、およびRXY形式では、分岐アドレスは基本アドレス、変位、さらにRXおよびRXY形式ではインデックスによって指定される。これらの形式では、中間値の生成は、オペランド・アドレス中間値の生成の場合と同じ規則に従う。RRおよびRRE形式では、R2フィールドによって指定された汎用レジスタのコンテンツは、分岐アドレスの形成元である中間値として使用される。汎用レジスタ0は、分岐アドレスを含むものとして指定することはできない。R2フィールド内のゼロの値によって、命令は分岐なしで実行される。
相対分岐命令は、RSI、RI、RIE、およびRIL形式である。相対分岐命令のRSI、RI、およびRIE形式では、I2フィールドのコンテンツは、ハーフワードの数を指定する16ビット符号付き2進整数として扱われる。RIL形式では、I2フィールドのコンテンツは、ハーフワードの数を指定する32ビット符号付き2進整数として扱われる。分岐アドレスは、相対分岐命令のアドレスに追加されたI2フィールドによって指定されるハーフワードの数である。
RSI、RI、RIE、またはRIL形式の相対分岐命令に関する64ビット中間値は、2つの加数の和であり、ビット位置0からのオーバフローは無視される。RSI、RI、またはRIE形式では、第1の加数は、右に1つのゼロ・ビットが付加され、左にコンテンツの符号ビットに等しい47ビットが付加された、I2フィールドのコンテンツであるが、COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE、およびCOMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVEの場合、第1の加数は、I2フィールドに関して前述したようにビットが付加された、I4フィールドのコンテンツである点を除く。RIL形式では、第1の加数は、右に1つのゼロ・ビットが付加され、左にコンテンツの符号ビットに等しい31ビットが付加された、I2フィールドのコンテンツである。すべての形式で、第2の加数は分岐命令の64ビット・アドレスである。分岐命令のアドレスは、次の順次命令をアドレス指定するためにそのアドレスが更新される前のPSW内の命令アドレスであるか、または、EXECUTEが使用される場合、EXECUTE命令のターゲットのアドレスである。EXECUTEが24ビットまたは31ビットのアドレス指定モードで使用される場合、分岐命令のアドレスは、それぞれ40または33のゼロが左に付加されたターゲット・アドレスである。
分岐アドレスは常に64ビット長さであり、ビットには0〜63が番号付けされる。分岐アドレスは現行PSWのビット64〜127と置き換わる。分岐アドレスが中間値から取得される方法は、アドレス指定モードに依存する。アドレス指定モードを変更するそれらの分岐命令では、新しいアドレス指定モードが使用される。24ビット・アドレス指定モードでは、中間値のビット0〜39は無視され、分岐アドレスのビット0〜39はゼロとされ、中間値のビット40〜63は分岐アドレスのビット40〜63となる。31ビット・アドレス指定モードでは、中間値のビット0〜32は無視され、分岐アドレスのビット0〜32はゼロとされ、中間値のビット33〜63は分岐アドレスのビット33〜63となる。64ビットアドレス指定モードでは、中間値のビット0〜63が分岐アドレスのビット0〜63となる。
いくつかの分岐命令では、分岐は指定された条件を満たすことに依存する。条件が満たされない場合、分岐は実行されず、通常の順次命令実行が続行されて、分岐アドレスは使用されない。分岐が実行された場合、分岐アドレスのビット0〜63が現行PSWのビット64〜127と置き換わる。分岐アドレスは分岐動作の一部としてストレージにアクセスするために使用されない。奇数分岐アドレスによる指定例外と分岐位置での命令のフェッチによるアクセス例外とは、分岐動作の一部としては認識されないが、代わりに、分岐位置での命令の実行に関連付けられた例外として認識される。
BRANCH ANDSAVEなどの分岐命令は、分岐アドレス計算の場合およびオペランドの位置と同じ汎用レジスタを指定することができる。分岐アドレス計算は、動作の残りが実行される前に完了される。
4章で説明されるプログラム・ステータス・ワードの「制御」は、適切なプログラム実行に必要な情報を含む。PSWは、命令順序付けを制御するため、ならびに、現在実行されているプログラムに関してCPUの状況を保持および指示するために使用される。アクティブまたは制御PSWは、現行PSWと呼ばれる。分岐命令は、意思決定、ループ制御、およびサブルーチン・リンケージの機能を実行する。分岐命令は、新しい命令アドレスを現行PSWに導入することによって命令の順序付けに影響を与える。16ビットI2フィールドを伴う相対分岐命令は、基本レジスタを使用せずに、分岐命令の位置に対してプラス64K−2バイトまたはマイナス64Kバイトまでのオフセットの位置に分岐することができる。32ビットI2フィールドを伴う相対分岐命令は、基本レジスタを使用せずに、分岐命令の位置に対してプラス4G−2バイトまたはマイナス4Gバイトまでのオフセットの位置に分岐することができる。
意思決定に関する機構は、BRANCHON CONDITION、BRANCH RELATIVE ON CONDITION、およびBRANCH RELATIVE ON CONDITION LONG命令によって提供される。これらの命令は、算術、論理、およびI/O演算の大部分の結果を反映する条件コードを検査する。2つのビットからなる条件コードは、0、1、2、および3という4つの可能な条件コード設定値を提供する。
任意の設定の特定の意味は、条件コードを設定する動作に依存する。たとえば条件コードは、こうした条件をゼロ、非ゼロ、第1オペランド高、同等、オーバフロー、およびサブチャネル・ビジーなどとして反映する。条件コードは、いったん設定されると、異なる条件コードに設定させる命令によって修正されるまで、変更されないままである。
ループ制御は、アドレス算術およびカウント演算の結果をテストするために、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にも適用する)。これらの命令はどちらも、新しい命令アドレスの導入のみならず、戻りアドレスおよび関連付けられた情報の保存も許可する。戻りアドレスは、ストレージ内の分岐命令に続く命令のアドレスであるが、そのターゲットとして分岐命令を有するEXECUTE命令に続く命令のアドレスであるという点は除く。
BRANCH ANDLINKおよびBRANCH AND SAVEは、どちらもR1フィールドを有する。これらは命令に依存するフィールドを用いて分岐アドレスを形成する。命令の動作は以下のように要約される。
・24ビット・アドレス指定モードでは、どちらの命令も、戻りアドレスを汎用レジスタR1のビット位置40〜63に配置し、そのレジスタのビット0〜31は未変更のままとする。BRANCH AND LINKは、命令に関する命令長コード、ならびに現行PSWからの条件コードおよびプログラム・マスクも、汎用レジスタR1のビット位置32〜39に配置し、BRANCH AND SAVEはそれらビット位置にゼロを配置する。
・31ビット・アドレス指定モードでは、どちらの命令も、汎用レジスタR1のビット位置33〜63に戻りアドレスを、ビット位置32に1を配置し、レジスタのビット0〜31は未変更のままとする。
・64ビット・アドレス指定モードでは、どちらの命令も、汎用レジスタR1のビット位置0〜63に戻りアドレスを配置する。
・いずれのアドレス指定モードでも、どちらの命令も、現行のアドレス指定モードの制御の下で分岐アドレスを生成する。命令は、分岐アドレスのビット0〜63をPSWのビット位置64〜127に配置する。RR形式では、命令のR2フィールドがゼロである場合、どちらの命令も分岐を実行しない。
24ビットまたは31ビットのアドレス指定モードでは、BRANCH AND SAEは、基本アドレス指定モード・ビット、PSWのビット32を、汎用レジスタR1のビット位置32に配置することがわかる。BRANCH AND LINKは31ビット・アドレス指定モードで同様に実行する。命令BRANCH AND SAVE AND SET MODEおよびBRANCH AND SET MODEは、リンケージ時にアドレス指定モードの変更が必要な場合に使用するためのものである。これらの命令はR1およびR2フィールドを有する。命令の動作は以下のように要約される。
・BRANCH ANDSAVE AND SET MODEは、BRANCH AND SAVEと同様に汎用レジスタR1のコンテンツを設定する。加えて、命令は、拡張アドレス指定モード・ビット、PSWのビット31を、レジスタのビット位置63に配置する。
・R1が非ゼロの場合、BRANCHAND SET MODEは以下のように実行する。24または31ビット・モードでは、PSWのビット32を汎用レジスタR1のビット位置32に配置し、レジスタのビット0〜31および33〜63を未変更のままとする。レジスタが命令アドレスを含む場合、レジスタのビット63はゼロとなるはずであることに留意されたい。64ビット・モードでは、命令は、PSWのビット31(1)を汎用レジスタR1のビット位置63に配置し、レジスタのビット0〜62を未変更のままとする。
・R2が非ゼロの場合、どちらの命令もアドレス指定モードを設定し、以下のように分岐を実行する。汎用レジスタR2のビット63は、PSWのビット位置31に配置される。ビット63がゼロの場合、レジスタのビット32はPSWのビット位置32に配置される。ビット63が1の場合、PSWビット32は1に設定される。次に分岐アドレスはレジスタのコンテンツから生成されるが、新しいアドレス指定モードの制御の下で、レジスタのビット63がゼロとして扱われる点を除く。命令は分岐アドレスのビット0〜63をPSWのビット位置64〜127に配置する。汎用レジスタR2のビット63は未変更のままであるため、呼び出されたプログラムに入力される際に1であってよい。R2がR1と同じである場合、指定された汎用レジスタ内の結果はR1レジスタに指定されたものと同じである。
割り込み(コンテキスト切り換え)
割り込みメカニズムは、CPUが、構成外部、構成内部、またはCPU自体の内部の条件の結果として、その状態を変更できるようにする。高優先度の条件に対する高速応答および条件タイプの即時認識を可能にするために、割り込み条件は、外部、入力/出力、マシン・チェック、プログラム、再始動、および監視者呼び出しという、6つのクラスにグループ分けされる。
割り込みは、現行PSWを古いPSWとして格納すること、割り込みの原因を識別する情報を格納すること、および新しいPSWをフェッチすることにある。処理は、新しいPSWによって指定された通りに再開する。割り込みに格納された古いPSWは、通常、割り込みが発生しなければ次に実行されることになる命令のアドレスを含むため、割り込まれたプログラムを再開することができる。プログラムおよび監視者呼び出し割り込みの場合、格納された情報は、最後に実行された命令の長さを識別するコードも含むため、プログラムは割り込みの原因に対応することができる。通常の対応が中断を発生させた命令の再実行である、いくつかのプログラム条件の場合、命令アドレスは最後に実行された命令を直接識別する。
再始動の場合を除き、割り込みはCPUが動作状態にある場合にのみ発生可能である。再始動割り込みは、CPUが停止または動作状態のいずれかにある場合に発生可能である。
アクセス例外は、例外が関連付けられた命令の実行の一部として認識される。CPUが、使用不可能な場所からのプリフェッチを試行するか、または何らかの他のアクセス例外条件を検出した場合、アクセス例外は認識されないが、分岐命令または割り込みは、命令が実行されないように命令シーケンスを変更する。あらゆる命令は、命令フェッチによってアクセス例外を認識可能にすることができる。加えて、命令実行に関連付けられたアクセス例外は、ストレージ内のオペランドへのアクセスによって発生する可能性がある。第1の命令ハーフワードが例外に遭遇せずにフェッチできない場合、命令のフェッチによるアクセス例外が示される。命令の第1のハーフワードにアクセス例外がない場合、命令の第1の2ビットによって指定された命令長さに従い、追加のハーフワードに対してアクセス例外を示すことができるが、命令の第2または第3のハーフワードにアクセスせずに動作が実行できる場合、未使用の部分に対してアクセス例外が示されるかどうかは予測不能である。命令フェッチに対するアクセス例外の指示はすべての命令に共通であるため、個々の命令定義ではカバーされていない。
他の方法で個々の命令記述に示されている場合を除き、オペランド位置へのアクセスに関連付けられた例外に対して以下の規則が適用される。フェッチ・タイプのオペランドの場合、アクセス例外は必然的に、動作を完了するために必要なオペランドのその部分に対してのみ示される。アクセス例外が、動作を完了するために必要でないフェッチ・タイプのオペランドのその部分に対して示されるかどうかは、予測不能である。
ストア・タイプのオペランドの場合、たとえオペランドのアクセス不能部分を使用せずに動作が完了できる場合であっても、アクセス例外はオペランド全体に対して認識される。ストア・タイプのオペランドの値が予測不能であると定義される状況では、アクセス例外が示されるかどうかは予測不能である。オペランド位置へのアクセスがアクセス例外を認識できるようにする場合は必ず、「アクセス」という語が命令の記述におけるプログラム例外のリストに含められる。このエントリは、どのオペランドが例外を認識できるようにするか、および、そのオペランド位置へのフェッチまたはストア・アクセスで例外が認識されるかどうかも示す。アクセス例外は、各特定の命令に対して定義されたようなオペランドの部分に対してのみ認識される。
CPUが無効の演算コードを使用して命令の実行を試行した場合、演算例外が認識される。演算コードが割り当てられていない場合があるか、または演算コードを備えた命令がCPUにインストールされない場合がある。演算が抑制される。命令長コードは1、2、または3である。演算例外は、0001hexのプログラム割り込みコードによって示される(または同時PERイベントが示される場合は0081hex)。
いくつかのモデルでは、援用あるいは特殊機能またはカスタム機能の一部として提供されるような、本公開で説明されていない命令を提供する場合がある。したがって、本公開で説明されていない演算コードが、必ずしも演算例外を認識させるとは限らない。さらに、これらの命令は演算のモードをセットアップさせるか、または、それ以外の方法で後続の命令の実行に影響を与えるようにマシンを変更する場合がある。こうした演算の実行を避けるために、本公開で説明されていない演算コードを伴う命令は、演算コードに関連付けられた特定の機能が望ましい場合にのみ実行されるべきである。
指定例外は、以下の事項のいずれかに当てはまる場合に認識される。
1.PSWの割り当てられていないビット位置(すなわち、ビット位置0、2〜4、24〜30、または33〜63のいずれか)に1が導入される。これは初期のPSW指定例外として処理される。
2.PSWのビット位置12に1が導入される。これは初期のPSW指定例外として処理される。
3.PSWは以下のいずれかの場合無効である。a.PSWのビット31が1であり、ビット32がゼロである。b.PSWのビット31および32がゼロであって、24ビット・アドレス指定モードを示し、PSWのビット64〜103がすべてゼロではない。c.PSWのビット31がゼロであり、ビット32が1であって、31ビット・アドレス指定モードを示し、PSWのビット64〜96がすべてゼロではない。これは、初期のPSW指定例外として処理される。
4.PSWが奇数命令アドレスを含む。
5.オペランド・アドレスが、整数境界を、こうした整数境界指定を必要とする命令内に指定しない。
6.奇数番号付けされた汎用レジスタが、偶数番号付けされたレジスタ指定を必要とする命令のRフィールドによって指定される。
7.0、1、4、5、8、9、12、または13以外の浮動小数点レジスタが、拡張オペランドに対して指定される。
8.10進演算の乗数または除数が15桁および符号を超える。
9.10進の乗算または除算において、第1オペランド・フィールドの長さが第2オペランド・フィールドの長さよりも短いかまたは等しい。
10.CIPHERMESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST、COMPUTE LAST MESSAGE DIGEST、またはCOMPUTE MESSAGE AUTHENTICATION CODEの実行が試行され、汎用レジスタ0のビット57〜63内の機能コードが割り当てられていないかまたは導入されていない機能コードを含む。
11.CIPHERMESSAGEまたはCIPHER MESSAGE WITH CHAININGの実行が試行され、R1またはR2フィールドが奇数番号付けされたレジスタまたは汎用レジスタ0を指定する。
12.CIPHERMESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST、またはCOMPUTE MESSAGE AUTHENTICATION CODEの実行が試行され、第2のオペランド長さが指定された機能のデータ・ブロック・サイズの倍数でない。この指定例外条件は照会機能に適用されない。
13.COMPAREAND FORM CODEWORDの実行が試行され、汎用レジスタ1、2、および3が初期に偶数値を含まない。
32.COMPAREAND SWAP AND STOREの実行が試行され、以下の条件のいずれかが存在する。
・機能コードが割り当てられていない値を指定する。
・ストア特徴が割り当てられていない値を指定する。
・機能コードが0であり、第1のオペランドがワード境界上に指定されていない。
・機能コードが1であり、第1のオペランドがダブルワード境界上に指定されていない。
・第2のオペランドが、ストア値のサイズに対応する整数境界上に指定されていない。
33.COMPARELOGICAL LONG UNICODEまたはMOVE LONG UNICODEの実行が試行され、汎用レジスタR1+1またはR3+1のいずれかのコンテンツが偶数バイトを指定しない。
34.COMPARELOGICAL STRING、MOVE STRING、またはSEARCH STRINGの実行が試行され、汎用レジスタ0のビット32〜55がすべてゼロではない。
35.COMPRESSIONCALLの実行が試行され、汎用レジスタ0のビット48〜51が2進値0000および0110〜1111のいずれかを有する。
36.COMPUTEINTERMEDIATE MESSAGE DIGEST、COMPUTE LAST MESSAGE DIGEST、またはCOMPUTE MESSAGE AUTHENTICATION CODEの実行が試行され、以下のいずれかがあてはまる。
・R2フィールドが奇数番号付けされたレジスタまたは汎用レジスタ0を指定する。
・汎用レジスタ0のビット56がゼロでない。
37.CONVERTHEP TO BFP、CONVERT TO FIXED(BFPまたはHFP)、またはLOAD FP INTEGER(BFP)の実行が試行され、M3フィールドが有効な修正子を指定しない。
38.DIVIDE TOINTEGERの実行が試行され、M4フィールドが有効な修正子を指定しない。
39.EXECUTEの実行が試行され、ターゲット・アドレスが奇数である。
40.EXTRACTSTACKED STATEの実行が試行され、汎用レジスタR2のビット位置56〜63のコードが、ASNおよびLX再使用機構がインストールされていない場合に4より大きいか、またはこの機構がインストールされている場合に5より大きい。
41.FINDLEFTMOST ONEの実行が試行され、R1フィールドが奇数番号付けされたレジスタを指定する。
42.INVALIDATEDAT TABLE ENTRYの実行が試行され、汎用レジスタR2のビット44〜51がすべてゼロではない。
43.LOAD FPCの実行が試行され、FPCレジスタ内のサポートされていないビットに対応する第2のオペランドの1つまたは複数のビットが1である。
44.LOADPAGE-TABLE-ENTRY ADDRESSの実行が試行され、命令のM4フィールドが2進0000〜0100以外のいずれかの値を含む。
45.LOAD PSWの実行が試行され、第2のオペランド・アドレスでダブルワードのビット12がゼロである。これは、この例外が認識されるか否かにかかわらず、モデルに依存している。
46.MONITORCALLの実行が試行され、命令のビット位置8〜11がゼロを含まない。
47.MOVE PAGEの実行が試行され、汎用レジスタ0のビット位置48〜51がゼロを含まないか、またはレジスタのビット52および53がどちらも1である。
48.PACKASCIIの実行が試行され、L2フィールドが31より大きい。
49.PACKUNICODEの実行が試行され、L2フィールドが63より大きいかまたは偶数である。
50.PERFORM FLOATINGPOINT OPERATIONの実行が試行され、汎用レジスタ0のビット32がゼロであり、ビット33〜63の1つまたは複数のフィールドが無効であるかまたは導入されていない機能を指定する。
51.PERFORMLOCKED OPERATIONの実行が試行され、いかのいずれかがあてはまる。・Tビット、汎用レジスタ0のビット55がゼロであR、レジスタのビット56〜63の機能コードが無効である。・汎用レジスタ0のビット32〜54がすべてゼロではない。・アクセス・レジスタ・モードで、ALETを含むパラメータ・リストを使用させる機能コードについて、R3フィールドがゼロである。
52.PERFORMTIMING FACILITY FUNCTIONの実行が試行され、以下のどちらかがあてはまる。・汎用レジスタ0のビット56がゼロでない。・汎用レジスタ0のビット57〜63が割り当てられていないかまたは導入されていない機能コードを指定する。
53.PROGRAMTRANSFERまたはPROGRAM TRANSFER WITH INSTANCEの実行が試行され、以下のすべてにあてはまる。・PSWの拡張アドレス指定モード・ビットがゼロである。・命令のR2フィールドによって指定された汎用レジスタ内の基本アドレス指定モード・ビット、ビット32がゼロである。・同じレジスタ内の命令アドレスのビット33〜39がすべてゼロではない。
54.RESUMEPROGRAMの実行が試行され、以下のどちらかがあてはまる。
・第2のオペランド内のPSWフィールドのビット31、32、および64〜127が、現行PSW内の配置に有効でない。この例外は、以下のいずれかにあてはまる場合に認識される。−ビット31および32がどちらもゼロであり、ビット64〜103がすべてゼロではない。−ビット31および32がそれぞれゼロおよび1であり、ビット64〜96がすべてゼロではない。−ビット31および32がそれぞれ1およびゼロである。−ビット127が1である。
・パラメータ・リストのビット0〜12がすべてゼロではない。
55.SEARCHSTRING UNICODEの実行が試行され、汎用レジスタ0のビット32〜47がすべてゼロではない。
56.SETADDRESS SPACE CONTROLまたはSET ADDRESS SPACE CONTROL FASTの実行が試行され、第2のオペランド・アドレスのビット52および53がどちらもゼロではない。
57.SETADDRESSING MODE(SAM24)の実行が試行され、PSW内の未更新命令アドレスのビット0〜39、PSWのビット64〜103が、すべてゼロではない。
58.SETADDRESSING MODE(SAM31)の実行が試行され、PSW内の未更新命令アドレスのビット0〜32、PSWのビット64〜96が、すべてゼロではない。
59.SET CLOCKPROGRAMMABLE FIELDの実行が試行され、汎用レジスタ0のビット32〜47がすべてゼロではない。
60.SET FPCの実行が試行され、FPCレジスタ内のサポートされていないビットに対応する第1のオペランドの1つまたは複数のビットが1である。
61.STORESYSTEM INFORMATIONの実行が試行され、汎用レジスタ0の機能コードが有効であり、以下のどちらかにあてはまる。 ・汎用レジスタ0のビット36〜55および汎用レジスタ1のビット32〜47が、すべてゼロではない。 ・第2のオペランド・アドレスが4Kバイト境界と整合しない。
62.TRANSLATETWO TO ONEまたはTRANSLATE TWO TO TWOの実行が試行され、汎用レジスタR1+1内の長さが偶数バイトを指定しない。
63.UNPACKASCIIの実行が試行され、L1フィールドが31より大きい。
64.UNPACKUNICODEの実行が試行され、L1フィールドが63より大きいかまたは偶数である。
65.UPDATETREEの実行が試行され、汎用レジスタ4および5の初期コンテンツが24ビットまたは31ビットのアドレス指定モードで8の倍数でないか、または64ビット・アドレス指定モードで16の倍数でない。古いPSWによって識別された命令の実行が抑制される。しかしながら、初期のPSW指定例外の場合(原因1〜3)、新しいPSWを導入する演算は完了するが、その後すぐに割り込みが発生する。好ましくは、命令長コード(ILC)は1、2、または3であり、例外を発生させる命令の長さを示す。命令アドレスが奇数の場合(ページ6〜33の原因4)、ILCが1、2、または3であるかどうかは予測不能である。初期のPSW指定例外によって例外が認識され(原因1〜3)、LOAD PSW、LOAD PSW EXTENDED、PROGRAM RETURN、または割り込みによって、例外が導入された場合、ILCは0である。SET ADDRESSING MODE(SAM24、SAM31)によって例外が導入された場合、ILCは1であるか、またはSET ADDRESSING MODEがEXECUTEのターゲットであった場合は2である。SET SYSTEM MASKによって、またはSTORE THEN OR SYSTEM MASKによって、例外が導入された場合、ILCは2である。
プログラム割り込みは、プログラムの実行中に発生する例外およびイベントを報告するために使用される。プログラム割り込みは、古いPSWを実位置336〜351に格納させ、新しいPSWを実位置464〜479からフェッチさせる。割り込みの原因は割り込みコードによって識別される。割り込みコードは実位置142〜143に配置され、命令長コードは実位置141のバイトのビット位置5および6に配置され、残りのビットはゼロに設定され、ゼロは実位置140に格納される。何らかの原因の場合、割り込みの理由を識別する追加情報は実位置144〜183に格納される。PER−3機構がインストールされた場合、プログラム割り込み動作の一部として、ブレーキング・イベント・アドレス・レジスタ(breaking-event-address register)のコンテンツは実ストレージ位置272〜279に配置される。PERイベントおよび暗号演算例外を除き、割り込みを発生させる条件は、割り込みコードの右端の7ビット位置に配置された符号化値によって示される。一度の1つの条件のみを示すことができる。割り込みコードのビット0〜7はゼロに設定される。PERイベントは、割り込みコードのビット8を1に設定することによって示される。これが唯一の条件である場合、ビット0〜7および9〜15もゼロに設定される。PERイベントが他のプログラム割り込み条件と同時に示される場合、ビット8は1であり、ビット0〜7および9〜15は他の条件の場合と同様に設定される。暗号演算例外は、16進0119、またはPERイベントも示される場合は16進0199の割り込みコードによって示される。
対応するマスク・ビットが存在する場合、プログラム割り込みはそのマスク・ビットが1である場合にのみ発生する。PSW内のプログラム・マスクは、FPCレジスタ内のIEEEマスクがIEEE例外を制御する、制御レジスタ0内のビット33がSET SYSTEM MASKが特別演算例外を引き起こすかどうかを制御する、制御レジスタ8内のビット48〜63が監視イベントによる割り込みを制御する、および、マスクの階層がPERイベントによる割り込みを制御する、という、4つの例外を制御する。いずれかの制御マスク・ビットがゼロである場合、条件は無視され、この条件は保留されない。
プログラム割り込みに関する新しいPSWがPSW形式エラーを有するか、または命令フェッチのプロセスにおいて例外が認識された場合、プログラム割り込みの文字列が発生する可能性がある。
プログラム例外として示される条件のいくつかは、チャネル・サブシステムによって認識される場合もあり、この場合、例外はサブチャネル・ステータス・ワードまたは拡張ステータス・ワード内に示される。
データ例外がプログラム割り込みを発生させた場合、データ例外コード(DXC)が一147に格納され、ゼロが位置144〜146に格納される。DXCは、様々なタイプのデータ例外条件を区別する。AFPレジスタ(追加の浮動小数点レジスタ)制御ビット、制御レジスタ0のビット45が1である場合、DXCは浮動小数点制御(FPC)レジスタのDXCフィールド内にも配置される。FPCレジスタ内のDXCフィールドは、任意の他のプログラム例外が報告される場合、未変更のまま残される。DXCは、データ例外の特定原因を示す8ビット・コードである。
DXC2および3は互いに排他的であり、いずれの他のDXCよりも優先度が高い。したがって、たとえばDXC2(BFP命令)はいずれのIEEE例外よりも優先され、DXC3(DFP命令)はいずれのIEEE例外またはシミュレートされたIEEE例外よりも優先される。他の例として、DXC3(DFP命令)およびDXC1(AFPレジスタ)の両方に関する条件が存在する場合、DXC3が報告される。指定例外およびAFPレジスタ・データ例外の両方が適用される場合、どちらが報告されるかは予測不能である。
アドレス指定例外は、CPUが構成内で使用できないメイン・ストレージ位置の参照を試行した場合に認識される。メイン・ストレージ位置は、位置がインストールされていない場合、ストレージ・ユニットが構成内にない場合、または、ストレージ・ユニットの電源がオフである場合、構成内で使用できない。構成内で使用できないストレージ位置を指定するアドレスは、無効であると言われる。命令のアドレスが無効である場合、演算は抑制される。同様に、EXECUTEのターゲット命令のアドレスが無効である場合、演算は抑制される。また、テーブルまたはテーブル・エントリへのアクセス時にアドレス指定例外に遭遇した場合、演算のユニットは抑制される。規則が適用されるテーブルおよびテーブル・エントリは、ディスパッチ可能ユニット制御テーブル、1次ASN第2テーブル・エントリ、ならびに、アクセス・リスト、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、ページ・テーブル、リンケージ・テーブル、リンケージ第1テーブル、リンケージ第2のテーブル、エントリ・テーブル、ASN第1テーブル、ASN第2テーブル、権限テーブル、リンケージ・スタック、および追跡テーブル内の、エントリである。アドレス指定例外は、動的アドレス変換に関する暗黙的参照と、LOAD PAGE-TABLE-ENTRY ADDRESS、LOAD REAL ADDRESS、STORE REAL ADDRESS、およびTEST PROTECTIONの実行に関連付けられた参照との両方において、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、およびページ・テーブルへの参照に遭遇した場合、結果として抑制される。同様に、ディスパッチ可能ユニット制御テーブル、1次ASN第2テーブル、アクセス・リスト、ASN第2テーブル、または権限テーブルへのアクセスのためのアドレス指定例外は、暗黙的に、あるいは、LOAD PAGE-TABLE-ENTRY ADDRESS、LOAD REAL ADDRESS、STORE REAL ADDRESS、TEST ACCESS、またはTESTPROTECTIONの一部として実行された、アクセス・レジスタ変換に遭遇した場合、結果として抑制される。実行が抑制されるいくつかの特別な命令を除き、変換可能であるが使用できない位置を指定するオペランド・アドレスの場合、演算は終了する。終了した場合、変更は結果フィールドに対してのみ実行することができる。このような状況では、「結果フィールド」という用語は、条件コード、レジスタ、ならびに、提供され、命令によって変更されるように指定された、任意のストレージ位置を含む。
ストレージ・オペランド・フェッチ参照
ストレージ・オペランドのバイトがソースとしてのみ命令実行に関与している場合、オペランドはフェッチ・タイプ・オペランドと呼ばれ、この位置への参照はストレージ・オペランド・フェッチ参照と呼ばれる。フェッチ・タイプ・オペランドは、アクセス例外がフェッチに関するものであることを示すことによって、個々の命令定義において識別される。
フェッチ・タイプ・オペランドの単一バイト内のすべてのビットは、同時にアクセスされる。オペランドが複数のバイトからなる場合、バイトはストレージから1バイトずつ漸次にフェッチすることができる。特に指定されていない限り、バイトは必ずしも任意の特定の順序でフェッチされない。
1つの命令のストレージ・オペランド・フェッチ参照は、他のCPUおよびチャネル・プログラムによって観察されるように、すべての先行する命令の後で、また後続の命令の前に、実行される。任意の1つの命令のオペランドは、その命令に対して指定された順序でフェッチされる。CPUは、命令が実行される前に命令のオペランドをフェッチすることができる。オペランドがフェッチされてからそれが使用されるまでの時間の長さに関して、制限は定義されていない。また、CPU自体が監視する場合、そのストレージ・オペランド参照は概念的順序で実行される。
ある特定の命令の場合、複数のオペランドに関するフェッチ参照は、他のCPUおよびチャネル・プログラムによるある一定のアクセスに対してロックされるように見える場合がある。こうしたフェッチ参照は、インターロック・フェッチ参照と呼ばれる。インターロック・フェッチ参照に関連付けられたフェッチ・アクセスは、必ずしも次々に続いて発生するものではないが、他のCPUによるすべてのストア・アクセスが、インターロック・フェッチ参照のフェッチ・アクセス間のインターロック・フェッチ参照と同じ位置で発生することはできない。
LOAD PAIRDISJOINT命令に関するストレージ・オペランド・フェッチ参照は、インターロック・フェッチ参照であるように見られる場合がある。LOAD PAIR DISJOINTがインターロック・フェッチを使用して両方のオペランドをフェッチできるか否かは、条件コードによって示される。
ストレージ・オペランド・ストア参照
ストレージ・オペランドのバイトが宛先としてのみ命令実行に関与している場合、その結果に置き換えられるという点で、オペランドはストア・タイプ・オペランドと呼ばれ、位置への参照はストレージ・オペランド・ストア参照と呼ばれる。ストア・タイプ・オペランドは、アクセス例外が格納に関するものであることを示すことによって、個々の命令定義内で識別される。
ストア・タイプ・オペランドの単一バイト内にあるすべてのビットは同時にアクセスされる。オペランドが複数のバイトからなる場合、バイトはストレージ内に1バイトずつ漸次に配置することができる。特に指定されていない限り、バイトは必ずしも任意の特定の順序で格納されない。
CPUは、ストレージへの結果の配置を遅延させることができる。結果を格納するまで保留にしておくことが可能な時間の長さに関して、制限は定義されていない。この遅延は、結果がストレージに配置される順番に影響を与えることはない。
1つの命令の結果は、他のCPUおよびチャネル・プログラムによって観察されるように、すべての先行する命令の結果がストレージ内に配置された後に、また後続の命令のいずれの結果が格納されるよりも前に、ストレージ内に配置される。任意の1つの命令の結果は、その命令に関して指定された順序で格納される。
CPUは、CPUによってストレージ位置に向けて送られたすべての情報が格納されるまで、オペランド、ARTテーブル・エントリ、またはDATテーブル・エントリを、その位置からフェッチしない。プリフェッチされた命令は、情報がストレージ内に出現する前に更新されるように見られる場合がある。
ストアは必然的に、シリアル化演算の結果としてのみ、またCPUが停止状態に入る前に完了される。
ブロック同時参照
いくつかの参照では、ハーフワード、ワード、ダブルワード、またはカッドワード内の、すべてのバイトへのアクセスは、他のCPUおよびチャネル・プログラムによって観察されるように、ブロック同時と見られるように指定される。ハーフワード、ワード、ダブルワード、またはカッドワードは、このセクションでブロックと呼ばれる。フェッチ・タイプ参照がブロック内で同時と見られるように指定された場合、ブロックに含まれるバイトがフェッチされている期間、他のCPUまたはチャネル・プログラムによるブロックへのストア・アクセスは許可されない。ストア・タイプ参照がブロック内で同時と見られるように指定された場合、ブロック内のバイトが格納されている期間、他のCPUまたはチャネル・プログラムによるブロックへのフェッチまたはストアのいずれかのアクセスは許可されない。
CPUシリアル化
以下の考察では、シリアル化命令という用語は、1つまたは複数のシリアル化機能を実行させる命令を言い表す。シリアル化演算という用語は、シリアル化機能を実行させる割り込みなどの、命令内の演算の単位またはマシン動作を言い表す。
シリアル化演算に関連付けられたイベントのシーケンスは以下の通りである。
1.他のCPUおよびチャネル・プログラムによって観察されるように、CPUによる概念上は以前すべてのストレージ・アクセスが完了する。これには、ストレージ・キーへの概念上は以前すべてのストアおよび変更が含まれる。
2.シリアル化演算に関連付けられた通常の機能が実行される。命令実行の場合、オペランドがフェッチされ、結果の格納が完了する。例外は、以前格納が完了する前にオペランドのフェッチが可能なLOAD PSW、LOAD PSW EXTENDED、およびSET PREFIX、ならびに、割り込みコードおよび関連付けられたフィールドがシリアル化の前に格納可能な割り込みである。シリアル化命令のフェッチは命令の実行の前に発生し、以前命令の実行よりも先行することが可能であるが、いかなる以前シリアル化演算の完了よりも先行することはできない。割り込みの場合、古いPSW、割り込みコード、および他の情報があれば格納され、新しいPSWがフェッチされるが、必ずしもその順序であるとは限らない。
3.最後に、概念上は後続の演算に関する命令フェッチおよびオペランド・アクセスが開始可能である。
シリアル化機能は、内部でシリアル化機能が実行されるCPUの制御下にある、ストレージ・アクセスのシーケンスに影響を与える。他のCPUおよびチャネル・プログラムの制御下にあるストレージ・アクセスのシーケンスには影響を与えない。
特定オペランド・シリアル化
ある一定の命令は、命令のオペランドに対して特定オペランド・シリアル化を実行させる。他のCPUおよびチャネル・プログラムによって観察されるように、特定オペランド・シリアル化演算は、命令の特定ストレージ・オペランドへの概念上は後続のアクセスが発生する前に、CPUによる概念上は以前のすべてのストレージ・アクセスを完了することにある。特定オペランド・シリアル化を発生させる命令の完了時に、他のCPUおよびチャネル・プログラムによって観察されるように、命令のストアが完了する。
インターロック命令実行
命令が実行される場合、特に、命令が他のプロセッサと共有するリソースにアクセス可能なマルチプロセッサ・システム内で実行される場合、プログラムは、命令が実行されている間に他のプロセッサがリソースにアクセスするのを防ぐために、他のプロセッサに対するリソース可用性をインターロックする必要がある。インターロックしない場合、予測不能な結果が生じる可能性がある。いくつかのアーキテクチャは、命令実行の重要な部分でリソースがインターロックされる命令機能を提供する。共有プロセッサによる混乱にさらされているリソースには、ほとんどのマルチプロセッサ内のメモリおよびメモリ・キャッシュが含まれる。共有可能なプロセッサの他のリソースは知られており、対応するアーキテクチャ文書によって指定されている。リソースをインターロックしないいくつかの命令実行機能は、たとえば、すでに説明した、ストレージ・オペランド・フェッチ参照、ストレージ・オペランド・ストア参照、ブロック同時参照、CPUシリアル化、および特定オペランド・シリアル化である。
本発明は、命令がリソース干渉の可能性にさらされていたかどうかの実装に依存する意思決定を可能にすること、ならびに、命令が、命令のアーキテクト動作に影響を与えた可能性がある介入リソース動作を有するいかなる可能性もなしに完了したか、または、介入リソース動作にさらされたかを示すように、インジケータを設定することによって、ある一定の命令に関するインターロックが不要な、アーキテクチャを提供する。したがってプログラムは、他のプロセッサからの干渉によって結果が影響を受けたかどうかを判定するためのインジケータのテストが、こうした命令の実行後に行われるように作成可能である。テストが失敗した場合、回復ルーチンが呼び出される。一実施形態では、インジケータは条件コードとすることが可能であり、テストは、条件コードのテスト、および影響を受けた命令を再実行するための分岐戻り、とすることが可能である。
独立ペア・ロード機構
Java(R)のようなマルチスレッド・プログラミング言語は、アプリケーション・スレッド全体にわたる状態の正確さおよび一貫性を保証するために、データ構造およびオブジェクトを同期化する必要がある。こうした一貫性を強化するための典型的なメカニズムの1つが、スレッド間で共有されるデータ構造またはオブジェクト内にロック・ワードを埋め込むことである。その後、比較およびスワップのようなアトミック更新命令を使用して、データ構造の所有を同期化することができる。たとえばオブジェクトOについて以下のように考察してみる。
Figure 0005692760

lock_idは、アンロックされた場合にNULL値を保持する。所与のスレッドがオブジェクトOの読み取りまたは書き込みを希望する場合、そのthread_idをlock_idに正常に比較およびスワップ(CAS)して、オブジェクトの所有を要求しなければならない。たとえば、以下のようになる。
Figure 0005692760
いくつかのコンピュータ・アーキテクチャでは、比較およびスワップの使用には、lock_idを保持する基礎となるキャッシュ・ラインの排他的所有が必要である。キャッシュ・ラインの排他的所有を取得するには、他のプロセッサ上のキャッシュ・ラインの無効化、あるいは所有するプロセッサ上のキャッシュ・ラインの再フェッチが必要であるため、非常に費用がかかる可能性がある。これにより、基本的に競合の窓口を増やす効果を与える可能性があり、これが本質的に、ロック動作がより時宜を得て(timelier)いれば競合することのないロックに関する競合を悪化させる可能性がある。通常、lock_idをNULLにすることによって、オブジェクトを解放するために、lock_idへの第2のストアも必要であることに留意されたい。これは事実上、lock_idのキャッシュ・ラインへの排他的アクセスの再獲得を必要とする可能性がある。
したがって、同期化されたデータ構造からフィールドを読み取るために同期化が使用される状況では、オブジェクトのフィールドの実際の同期化された読み取りが、いかなる形の排他的アクセスも必要としない場合、lock_idのキャッシュ・ラインに書き込まなければならないことは特に費用がかかる。本発明は、独立メモリ位置のペアをアトミックにロードする(独立ペア・ロード命令)ための新しいハードウェア機構を提供することが求められている。
独立ペア・ロード動作
本発明は、独立ペア・ロード(LPD)と呼ばれる新しいハードウェア機構を教示する。この機構は、独立メモリ要素のペアをアトミックに読み取るために使用される。これによって、2つの要素に一貫性があったこと、あるいはより精密に言えば、2つの独立メモリ位置がロードされた場合にこれらへの介入する更新が存在しなかったことを、保証するためのメカニズムが提供される。たとえば以下の通りである。
Figure 0005692760
オブジェクトO外のフィールドの同期化されたロードを実行する場合、lock_idは格納されないため、キャッシュ・ラインは排他的に保持する必要がないことに留意されたい。LPD機構の代替実装は、アトミック性の強化においてそれほど厳密でない可能性がある。たとえば、LPDは、条件コードの使用を通じてロード・ペアに一貫性があったか否かに関するフィードバックをユーザに提供することができる。他の追加の実装は、ロードされた際にオペランドのうちの1つがNULLであったか否かを示すための、条件コード設定を提供することができる。たとえば以下の通りである。
Figure 0005692760
独立ロード/ストア(独立ペア・ロード)使用プログラム
好ましくは(図18)、LSD命令演算コードに基づいて実行された場合903、アトミックにデータをメモリからロード/メモリへストアすること、および、演算がアトミックであるように見えるか否かを示す条件コードを設定することを試行する、1つまたは複数の独立ロード/ストア(LSD)命令を含むプログラムが実行可能である901。プロセッサが、他のプロセッサまたはI/Oデバイスからの介入ストアが、メモリからロードされる(またはメモリにストアされる)データを破損させる可能性がある旨を決定した場合、条件コードはある値(たとえばcc=3)に設定される。プログラムはこの値を(たとえば条件に応じた分岐命令を用いて)チェックし904、演算が非アトミック(cc=3)であるように見える場合、成功するまでLSD命令の試行を所定回数(たとえば10回)反復するなどの処置を講じる。この実施形態では、所定のカウント値が0でなければ906、減分され、LPD命令は再実行される901。試行回数内に成功しなかった場合、LSDストレージ動作をアトミックに実行するための他のインターロック手段を使用する、特別ルーチン909が呼び出される。異なる実施形態が、動作のロードまたは動作のストア、アトミックにアクセスされる1つまたは複数の独立オペランド、および条件コード以外のインジケータの、いずれかをサポートする。
好ましくは、この命令は、プログラム内の独立メモリ・オペランドをフェッチするために使用され、このプログラムは独立メモリ・オペランドをフェッチするための命令を備える第1のルーチン901を実行し、当該命令は独立ペア・ロード命令を備え902、実行された場合903、メモリから2つの独立オペランドをロードし、条件コード値を設定する。LPDの実行に続き、好ましくは条件に応じた分岐命令によって、テストが実行される904。このテストによって、2つの独立オペランドが2つの独立オペランドのいずれかへの介入ストアを用いてロードされた可能性があることを、当該条件コード値が示す(cc=3)ものと判定されたことに応答して905、メモリから独立メモリ・オペランドをフェッチするための命令を備える第2のルーチン909が実行される。2つの独立オペランドが2つの独立オペランドのいずれかへの介入ストアを用いずにロードされたことを示す当該条件コード値(cc=0)に応答して、ロードされた2つの独立オペランドを使用するための第3のルーチンが実行され、プログラム901は実行を続行する。
ある実施形態では、第2のルーチンは、当該条件コード値(cc=0)が、2つの独立オペランドが2つの独立オペランドのいずれかへの介入ストアを用いずにロードされたことを示すまで、反復される。
ある実施形態では、反復に関する制限値(カウント値)901が設定される。2つの独立オペランドが2つの独立オペランドのいずれかへの介入ストアを用いてロードされた可能性があることを示す、当該条件コード値(cc=3)に応答して、第2のルーチンは、第2のルーチンが制限値によって指定された回数を反復するまで906、または、2つの独立オペランドが2つの独立オペランドのいずれかへの介入ストアを用いずにロードされたことを条件コード値(cc=0)が示すまで、反復される。
ある実施形態では、独立ペア・ロード命令によって、2つの独立オペランドは汎用レジスタのそれぞれの位置にロードされる。
独立ロード/ストア(独立ペア・ロード)命令
ある実施形態では、図19のマルチプロセッサ・システムのプロセッサ内で、独立ロード/ストア(LSD)命令が実行される。図16を参照すると、独立ロード/ストア命令は、プロセッサのメモリ708から汎用レジスタ707へデータをロードするための実行用に取得され701、独立ロード/ストア命令は演算コードを備え、実行は、取得された演算コードに基づいてLSD指定の演算702を実行することを含み、演算702は、メモリ内の1つまたは複数のオペランドにアクセスすることを含む。マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の1つまたは複数のオペランドへのアクセス時に1つまたは複数のオペランドのうちの1つを修正した可能性があるかどうかの判定703に応答して、第1のインジケータ値を設定し705 706、当該第1のインジケータ値は、マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の1つまたは複数のオペランドへのアクセス時に1つまたは複数のオペランドのうちの1つを修正した可能性があるかどうかを示す。
ある実施形態では、第1のインジケータ値は、第1の条件コード値または第2の条件コード値のいずれか1つを備える。ストア・イベントが、1つまたは複数のオペランドのうちの、メモリ内の第1のオペランドまたはメモリ内の第2のオペランドのいずれかを当該アクセス時に修正した可能性がある旨の判定703に応答して、第1の条件コード値が設定され705、当該第1の条件コード値は、メモリ内の第1のオペランドまたはメモリ内の第2のオペランドのいずれか1つが当該アクセス時に修正された可能性があることを示す。メモリ内の第1のオペランドまたはメモリ内の第2のオペランドのいずれかを当該アクセス時に修正したストア・イベントはない旨の判定703に応答して、第2の条件コード値が設定され706、当該第2の条件コード値は、メモリ内の第1のオペランドまたはメモリ内の第2のオペランドのいずれも当該アクセス時に修正されていないことを示す。
ある実施形態図17では、LSD命令は独立ペア・ロード(LPD)命令であり、メモリ内の1つまたは複数のオペランドにアクセスすることは、メモリから第1のオペランドおよび第2のオペランドをフェッチすること805を含み、フェッチすることは、フェッチされた第1のオペランドがLPD命令によって指定された第1のレジスタ内に格納されること806、および、フェッチされた第2のオペランドがLPD命令によって指定された第2のレジスタ内に格納されること807、をさらに含む。
ある実施形態では、独立ペア・ロード命令は、第1の汎用レジスタを識別する第1の汎用レジスタ・フィールド(B1)と、第2の汎用レジスタを識別する第2の汎用レジスタ・フィールド(B2)と、当該第1のレジスタおよび当該第2のレジスタを識別する第3の汎用レジスタ・フィールド(B3)とを備え、第1のアドレスは第1の汎用レジスタ・フィールドによって識別された第1の汎用レジスタから取得され801、取得された第1のアドレスはメモリ内の第1のオペランドをフェッチするために使用される。
メモリ内の第2のオペランドの第2のアドレスは、第2の汎用レジスタ・フィールドによって識別された第2の汎用レジスタから取得され802、取得された第2のアドレスはメモリ内の第2のオペランドをフェッチするために使用される。独立ペア・ロード動作は、第3の汎用レジスタ・フィールドによって識別された汎用レジスタの高位部分である第1のレジスタ806内に、第1のオペランドを格納すること、および、第3の汎用レジスタ・フィールドによって識別された汎用レジスタの低位部分である第2のレジスタ807内に、第2のオペランドを格納することを含む。
ある実施形態では、取得された独立ペア・ロード命令は、第1の変位フィールドおよび第2の変位フィールドをさらに備え、第1の変位フィールドには、メモリ内の第1のオペランドをフェッチするための第1のメモリ・アドレスを作成するために、取得された第1のアドレスが算術的に加算される803。第2の変位フィールドには、メモリ内の第2のオペランドをフェッチするための第2のメモリ・アドレスを作成するために、取得された第2のアドレスが算術的に加算される804。
ある実施形態では、マルチプロセッサ・システムの複数のプロセッサからのストア・イベントが受信され、受信されたストア動作のデータはメモリ内に格納される。
ある実施形態では、コンピュータ・アーキテクチャ用に定義された独立ペア・ロード命令が、代替コンピュータ・アーキテクチャの中央処理ユニットによってフェッチおよび実行され、独立ペア・ロード命令は、独立ペア・ロード命令の動作をエミュレートするための所定のソフトウェア・ルーチンを識別するために解釈され、独立ペア・ロード命令を実行することは、マシン命令を実行するための方法の諸ステップを実行するために所定のソフトウェア・ルーチンを実行することを含む。
図15を参照すると、アーキテクチャの独立ペア・ロード・マシン命令の2つの例示的形式(LPDおよびOPDG)が示されている。命令の48ビットは、演算コード(ビット0〜8、12〜15)と、それぞれが第1(B1)、第2(B2)、および第3(B3)の汎用レジスタを指定するためのB1、B2、およびR3フィールドと、2つのオペランドがフェッチされる間、他のプロセッサからの介入ストアなしにアトミックに(ブロック同時に)フェッチされることになる2つのオペランドのメモリ・アドレスを決定するために、対応する汎用レジスタB1およびB2のコンテンツと組み合わせて使用するための変位フィールドD1およびD2とを含む。
汎用レジスタR3は、偶数/奇数レジスタ・ペアのうちの偶数番号付けされたレジスタを指定する(ペアのうち、偶数レジスタは高位ビットを含み、奇数レジスタは低位ビットを含む)。
命令が実行された場合、第1のオペランドは変更されずに、第3のオペランドのうちの偶数番号付けされたレジスタ内に配置され、第2のオペランドは変更されずに、第3のオペランドのうちの奇数番号付けされたレジスタ内に配置され、条件コード値は条件コード・レジスタ内に設定される。条件コード値は、第1および第2のオペランドが、ブロック同時インターロック・フェッチを使用してフェッチされたように見えるか否かを示す。すなわち、いかなる他のプロセッサからのいかなる介入ストアもなしに、アトミックに実行されたように見えるかどうかである。
LPDの場合、第1および第2のオペランドはストレージ内の32ビット「ワード」であり、第3のオペランドは汎用レジスタR3およびR3+1のビット32〜63内にあって、レジスタのビット0〜31は未変更である。LPDGの場合、第1および第2のオペランドはストレージ内の64ビット「ダブルワード」であり、第3のオペランドは汎用レジスタR3およびR3+1のビット0〜63内にある。
他のCPUによって観察されるように、第1および第2のオペランドが、ブロック同時インターロック・フェッチ(アトミック動作)を使用してフェッチされたように見えない場合、条件コード3が設定される。第3のオペランドは、条件コードに関係なくロードされる。
第1および第2のオペランドの変位は、12ビットの符号なし2進整数として扱われる。
LPDの第1および第2のオペランドは、ワード境界上に指定されなければならない。LPDGの第1および第2のオペランドは、ダブルワード境界上に指定されなければならない。汎用レジスタR3は、偶数番号付けされたレジスタを指定しなければならない。このように指定されない場合、指定例外が認識される。
結果として生じる条件コード
0 インターロック・フェッチによってロードされたレジスタ・ペア
1 −
2 −
3 インターロック・フェッチによってロードされないレジスタ・ペア
プログラム例外
・アクセス(フェッチ、オペランド1および2)
・オペレーション(インタロック・アクセス機構はインストールされない)
・指定
プログラミングの注意事項
1.条件コードの設定は、構成内の他のCPUによってアクセスされるストレージに依存する。
2.結果として生じる条件コードが3の場合、プログラムはLOAD PAIR DISJOINT命令を再実行するために分岐を戻ることができる。しかしながら、インターロック・フェッチを達成するために正常でない試行が繰り返された後には、プログラムは、ストレージ・オペランドへのアクセスをシリアル化する代替手段を使用しなければならない。プログラムのLOAD PAIR DISJOINT命令の再実行は、代替経路へ分岐するまでに、多くとも10回までとすることが推奨される。
3. プログラムは、条件コード0が決して設定されない状況に対処できるべきである。
図19を参照すると、本発明の実施形態は、メモリ1005を共有する、複数n個(P1からPn)のプロセッサを1001 1002 1003 1004含み、各プロセッサ1001は、メモリ・オペランドをキャッシュに入れるためのキャッシュと、メモリ内のデータにアクセスするためのロード/ストア・ユニットと、命令演算コードに基づいて命令の機能を実行するための実行ユニットと、性能を向上させるためにDAT変換をキャッシュに入れるためのTLBを含む、仮想(論理)アドレスを実(絶対)メモリ・アドレスに変換するための動的アドレス変換(DAT)とを含むことができる。プロセッサは、システム・バスを介して周辺デバイス1006(DASD/テープ)を共有するか、またはローカルな周辺デバイスを有することができる。
前述の内容は、1つのコンピュータ・システム実施形態の用語および構造を理解する際に有用である。本発明は、z/Architectureまたはその提供された説明に限定されるものではない。本発明は、本明細書の教示を用いた他のコンピュータ製造業者の他のコンピュータ・アーキテクチャに、有利に適用可能である。
本明細書では、本発明の好ましい実施形態について例示および説明してきたが、本発明が、本明細書で開示された精密な構造に限定されるものではないこと、および、添付の特許請求の範囲内に定義された本発明の範囲内に入るすべての変更および修正に対して、権利が留保されることを、理解されよう。

Claims (19)

  1. マルチプロセッサ・システムのプロセッサ内で独立ロード/ストア(LSD)命令を実行するためのコンピュータ実装方法であって、
    実行のための独立ロード/ストア(LSD)命令を取得することを含み、前記独立ロード/ストア(LSD)命令は演算コードを含み、且つ、メモリ内の互いに異なるオペランドとして扱われる複数のオペランドにアクセスするためのものであり、前記実行は、
    前記取得された演算コードに基づいてLSD指定演算を実行することであって、前記演算は、メモリ内の前記複数のオペランドにアクセスすることを含む、前記実行することと、
    前記マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の前記複数のオペランドへの前記アクセス時に前記複数のオペランドのうちの1つを修正した可能性があるかどうかの判定に応答して、第1のインジケータ値を設定することであって、前記第1のインジケータ値は、前記マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の前記複数のオペランドへの前記アクセス時に前記複数のオペランドのうちの1つを修正した可能性があるかどうかを示す、前記設定することと
    を含む、前記方法。
  2. 前記第1のインジケータ値は、第1の条件コード値または第2の条件コード値のいずれか1つを備え、
    前記方法はさらに、
    ストア・イベントが、前記複数のオペランドのうちの、前記メモリ内の第1のオペランドまたは前記メモリ内の第2のオペランドのうちのいずれか1つを前記アクセス時に修正した可能性がある旨の判定に応答して、前記第1の条件コード値を設定することであって、前記第1の条件コード値は、前記メモリ内の前記第1のオペランドまたは前記メモリ内の前記第2のオペランドのいずれかが前記アクセス時に修正された可能性があることを示す、前記設定することと、
    前記メモリ内の前記第1のオペランドまたは前記メモリ内の前記第2のオペランドのいずれかを前記アクセス時に修正したストア・イベントはない旨の判定に応答して、前記第2の条件コード値を設定することであって、前記第2の条件コード値は、前記メモリ内の前記第1のオペランドまたは前記メモリ内の前記第2のオペランドのいずれも前記アクセス時に修正されていないことを示す、前記設定すること
    含む、請求項1に記載の方法。
  3. 前記LSD命令は独立ペア・ロード(LPD)命令であり、メモリ内の前記複数のオペランドにアクセスすることは、メモリから第1のオペランドおよび第2のオペランドをフェッチすることを含み、
    前記方法はさらに、
    前記フェッチされた第1のオペランドおよび前記フェッチされた第2のオペランドを、前記LPD命令によって指定された1つまたは複数のレジスタ内に格納すること
    含む、請求項2に記載の方法。
  4. 前記独立ペア・ロード(LPD)命令によって指定された前記1つまたは複数のレジスタは、第1のレジスタおよび第2のレジスタからなるレジスタ・ペアであり、
    前記独立ペア・ロード(LPD)命令は、第1の汎用レジスタを識別する第1の汎用レジスタ・フィールドと、第2の汎用レジスタを識別する第2の汎用レジスタ・フィールドと、前記第1のレジスタおよび前記第2のレジスタを識別する第3の汎用レジスタ・フィールドとを備え、
    前記第1のレジスタは前記第3の汎用レジスタ・フィールドによって指定された偶数アドレスにより番号付けされるレジスタであり、
    前記第2のレジスタは前記第3の汎用レジスタ・フィールドによって指定された偶数アドレスの次のアドレスである奇数アドレスにより番号付けされるレジスタであり、
    前記方法はさらに、前記独立ペア・ロード(LPD)命令に応じて、
    前記第1の汎用レジスタ・フィールドによって識別された前記第1の汎用レジスタから第1のアドレスを取得することと、
    前記取得された第1のアドレスを、前記メモリ内の前記第1のオペランドをフェッチするために使用することと、
    前記第2の汎用レジスタ・フィールドによって識別された前記第2の汎用レジスタから第2のアドレスを取得することと、
    前記取得された第2のアドレスを、前記メモリ内の前記第2のオペランドをフェッチするために使用することと、
    前記第1のオペランドを前記第1のレジスタに格納することと、
    前記第2のオペランドを前記第2のレジスタに格納することと、からなる独立ペア・ロード(LPD)演算を実行することを含む、請求項3に記載の方法。
  5. 前記取得された独立ペア・ロード(LPD)命令は、第1の変位フィールドおよび第2の変位フィールドをさらに備え、
    前記方法はさらに、
    前記メモリ内の前記第1のオペランドフェッチするための第1のメモリ・アドレスを作成するために、前記第1の変位フィールドおよび前記取得された第1のアドレスを算術的に加算することと、
    前記メモリ内の前記第2のオペランドフェッチするための第2のメモリ・アドレスを作成するために、前記第2の変位フィールドおよび前記取得された第2のアドレスを算術的に加算すること
    含む、請求項4に記載の方法。
  6. 前記方法はさらに、
    前記マルチプロセッサ・システムの複数のプロセッサからストア・イベントを受信することと、
    前記受信したストア・イベントに係るストア動作のデータを前記メモリに格納すること
    含む、請求項1に記載の方法。
  7. コンピュータ・アーキテクチャ用に定義された前記独立ペア・ロード(LPD)命令が、代替コンピュータ・アーキテクチャの中央処理ユニットによってフェッチおよび実行され、
    前記独立ペア・ロード(LPD)命令を、前記独立ペア・ロード(LPD)命令の動作をエミュレートするための所定のソフトウェア・ルーチンを識別するために解釈することと、
    マシン命令を実行するための方法の諸ステップを実行するために前記所定のソフトウェア・ルーチンを実行することを含む、前記独立ペア・ロード(LPD)命令を実行すること
    をさらに含む、請求項5に記載の方法。
  8. マルチプロセッサ・システムのプロセッサ内で独立ロード/ストア(LSD)命令を実行するためのコンピュータ・システムであって、
    メモリと、
    前記メモリと通信する処理ユニットとを備え、前記処理ユニットは、メモリから命令をフェッチするための命令フェッチ・ユニットと、フェッチされた命令を実行するための1つまたは複数の実行ユニットとを備え、
    前記コンピュータ・システムは、
    実行のための独立ロード/ストア(LSD)命令を取得することを含む方法を実行することが可能であり、前記独立ロード/ストア(LSD)命令は演算コードを含み、前記実行は、
    前記取得された演算コードに基づいてLSD指定演算を実行することを含み、前記演算は、メモリ内の互いに異なるオペランドとして扱われる複数のオペランドにアクセスすることを含み、
    前記方法は、
    前記マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の前記複数のオペランドへの前記アクセス時に前記複数のオペランドのうちの1つを修正した可能性があるかどうかの判定に応答して、第1のインジケータ値を設定することであって、前記第1のインジケータ値は、前記マルチプロセッサ・システムの他のプロセッサからのストア・イベントが、メモリ内の前記複数のオペランドへの前記アクセス時に前記複数のオペランドのうちの1つを修正した可能性があるかどうかを示す、前記設定すること
    を含む、前記コンピュータ・システム。
  9. 前記第1のインジケータ値は、第1の条件コード値または第2の条件コード値のいずれか1つを備え、前記方法は、
    ストア・イベントが、前記複数のオペランドのうちの、前記メモリ内の第1のオペランドまたは前記メモリ内の第2のオペランドのうちのいずれか1つを前記アクセス時に修正した可能性がある旨の判定に応答して、前記第1の条件コード値を設定することであって、前記第1の条件コード値は、前記メモリ内の前記第1のオペランドまたは前記メモリ内の前記第2のオペランドのいずれかが前記アクセス時に修正された可能性があることを示す、設定すること、および
    前記メモリ内の前記第1のオペランドまたは前記メモリ内の前記第2のオペランドのいずれかを前記アクセス時に修正したストア・イベントはない旨の判定に応答して、前記第2の条件コード値を設定することであって、前記第2の条件コード値は、前記メモリ内の前記第1のオペランドまたは前記メモリ内の前記第2のオペランドのいずれも前記アクセス時に修正されていないことを示す、設定すること、
    をさらに含む、請求項8に記載のコンピュータ・システム。
  10. 前記LSD命令は独立ペア・ロード(LPD)命令であり、メモリ内の前記複数のオペランドにアクセスすることは、メモリから第1のオペランドおよび第2のオペランドをフェッチすることを含み、前記方法は、
    前記フェッチされた第1のオペランドおよび前記フェッチされた第2のオペランドを、前記LPD命令によって指定された1つまたは複数のレジスタ内に格納すること、をさらに含む、請求項9に記載のコンピュータ・システム。
  11. 前記独立ペア・ロード(LPD)命令によって指定された前記1つまたは複数のレジスタは、第1のレジスタおよび第2のレジスタからなるレジスタ・ペアであり、
    前記独立ペア・ロード(LPD)命令は、第1の汎用レジスタを識別する第1の汎用レジスタ・フィールドと、第2の汎用レジスタを識別する第2の汎用レジスタ・フィールドと、前記第1のレジスタおよび前記第2のレジスタを識別する第3の汎用レジスタ・フィールドとを備え、
    前記第1のレジスタは前記第3の汎用レジスタ・フィールドによって指定された偶数アドレスにより番号付けされるレジスタであり、
    前記第2のレジスタは前記第3の汎用レジスタ・フィールドによって指定された偶数アドレスの次のアドレスである奇数アドレスにより番号付けされるレジスタであり、
    前記方法はさらに、前記独立ペア・ロード(LPD)命令に応じて、
    前記第1の汎用レジスタ・フィールドによって識別された前記第1の汎用レジスタから第1のアドレスを取得することと、
    前記取得された第1のアドレスを、前記メモリ内の前記第1のオペランドをフェッチするために使用することと、
    前記第2の汎用レジスタ・フィールドによって識別された前記第2の汎用レジスタから第2のアドレスを取得することと、
    前記取得された第2のアドレスを、前記メモリ内の前記第2のオペランドをフェッチするために使用することと、
    前記第1のオペランドを前記第1のレジスタに格納することと、
    前記第2のオペランドを前記第2のレジスタに格納することと、からなる独立ペア・ロード(LPD)演算を実行することを含む、請求項10に記載のコンピュータ・システム。
  12. 前記取得された独立ペア・ロード(LPD)命令は、第1の変位フィールドおよび第2の変位フィールドをさらに備え、前記方法は、
    前記メモリ内の前記第1のオペランドフェッチするための第1のメモリ・アドレスを作成するために、前記第1の変位フィールドおよび前記取得された第1のアドレスを算術的に加算することと、
    前記メモリ内の前記第2のオペランドフェッチするための第2のメモリ・アドレスを作成するために、前記第2の変位フィールドおよび前記取得された第2のアドレスを算術的に加算すること
    をさらに含む、請求項11に記載のコンピュータ・システム。
  13. 前記マルチプロセッサ・システムの複数のプロセッサからストア・イベントを受信することと、
    前記受信したストア・イベントに係るストア動作のデータを前記メモリに格納することと
    をさらに実行するものである、請求項8に記載のコンピュータ・システム。
  14. コンピュータ・アーキテクチャ用に定義された前記独立ペア・ロード(LPD)命令が、代替コンピュータ・アーキテクチャの中央処理ユニットによってフェッチおよび実行され、前記方法は、
    前記独立ペア・ロード(LPD)命令を、前記独立ペア・ロード(LPD)命令の動作をエミュレートするための所定のソフトウェア・ルーチンを識別するために解釈することと、
    マシン命令を実行するための方法の諸ステップを実行するために前記所定のソフトウェア・ルーチンを実行することを含む、前記独立ペア・ロード(LPD)命令を実行すること
    をさらに含む、請求項12に記載のコンピュータ・システム。
  15. 独立メモリ・オペランドをフェッチするためのコンピュータ実装方法であって、
    プロセッサにより、独立メモリ・オペランドをフェッチするための1つまたは複数の命令を備える第1のルーチンを実行することであって、前記命令は、メモリから互いに異なるオペランドとして扱われる2つの独立オペランドをロードするため、および条件コード値を設定するための、独立ペア・ロード(LPD)命令を備える、前記実行することと、
    前記2つの独立オペランドが他のプロセッサからの前記2つの独立オペランドのいずれかへの介入ストアを伴ってロードされた可能性があることを示す前記条件コード値に応答して、前記独立メモリ・オペランドをメモリからフェッチするための命令を含む第2のルーチンを実行させることと、
    前記2つの独立オペランドが前記2つの独立オペランドのいずれかへの介入ストアを伴わずにロードされたことを示す前記条件コード値に応答して、前記ロードされた2つの独立オペランドを使用するための第3のルーチンへ進むこと
    を含む、前記方法。
  16. 前記条件コード値が、前記2つの独立オペランドが前記2つの独立オペランドのいずれかへの介入ストアを伴わずにロードされたことを示すまで、前記第2のルーチンを反復させることをさらに含む、請求項15に記載の方法
  17. 反復の制限値を設定すること、
    前記2つの独立オペランドが、前記2つの独立オペランドのいずれかへの介入ストアを伴ってロードされた可能性があることを示す、前記条件コード値に応答して、前記第2のルーチンを、前記第2のルーチンの実行を前記制限値によって指定された回数だけ反復するまで、または、前記2つの独立オペランドが前記2つの独立オペランドのいずれかへの介入ストアを伴わずにロードされたことを前記条件コード値が示すまで、反復させること
    をさらに含む、請求項15に記載の方法。
  18. 前記方法は、前記2つの独立オペランドを汎用レジスタのそれぞれの位置にロードすることをさらに含む、請求項15に記載の方法
  19. 前記プロセッサに、請求項1乃至のいずれか一項に記載の方法、または、請求項15乃至18のいずれか一項に記載の方法を実行させるための、コンピュータ・プログラム。
JP2012553198A 2010-02-18 2010-11-08 独立ロード/ストア機構およびそのための命令を実行するための方法、システム、およびコンピュータ・プログラム Active JP5692760B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/708,284 2010-02-18
US12/708,284 US8850166B2 (en) 2010-02-18 2010-02-18 Load pair disjoint facility and instruction therefore
PCT/EP2010/067049 WO2011101048A1 (en) 2010-02-18 2010-11-08 Load/store disjoint facility and instruction therefore

Publications (2)

Publication Number Publication Date
JP2013519955A JP2013519955A (ja) 2013-05-30
JP5692760B2 true JP5692760B2 (ja) 2015-04-01

Family

ID=43736136

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012553198A Active JP5692760B2 (ja) 2010-02-18 2010-11-08 独立ロード/ストア機構およびそのための命令を実行するための方法、システム、およびコンピュータ・プログラム

Country Status (6)

Country Link
US (2) US8850166B2 (ja)
EP (1) EP2430525B1 (ja)
JP (1) JP5692760B2 (ja)
CN (1) CN102754069B (ja)
RU (1) RU2554546C2 (ja)
WO (1) WO2011101048A1 (ja)

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8914619B2 (en) 2010-06-22 2014-12-16 International Business Machines Corporation High-word facility for extending the number of general purpose registers available to instructions
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US8468284B2 (en) 2010-06-23 2013-06-18 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US9710277B2 (en) * 2010-09-24 2017-07-18 Intel Corporation Processor power management based on class and content of instructions
US9384004B2 (en) 2012-06-15 2016-07-05 International Business Machines Corporation Randomized testing within transactional execution
US9336046B2 (en) 2012-06-15 2016-05-10 International Business Machines Corporation Transaction abort processing
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US10437602B2 (en) * 2012-06-15 2019-10-08 International Business Machines Corporation Program interruption filtering in transactional execution
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US8688661B2 (en) 2012-06-15 2014-04-01 International Business Machines Corporation Transactional processing
US9436477B2 (en) 2012-06-15 2016-09-06 International Business Machines Corporation Transaction abort instruction
US9361115B2 (en) 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US8682877B2 (en) 2012-06-15 2014-03-25 International Business Machines Corporation Constrained transaction execution
US9772854B2 (en) * 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US20130339680A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Nontransactional store instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9513906B2 (en) * 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9424034B2 (en) * 2013-06-28 2016-08-23 Intel Corporation Multiple register memory access instructions, processors, methods, and systems
US11029997B2 (en) * 2013-07-15 2021-06-08 Texas Instruments Incorporated Entering protected pipeline mode without annulling pending instructions
GB2518613A (en) 2013-09-25 2015-04-01 Ibm Multiple core processing with high throughput atomic memory operations
US9459931B2 (en) * 2014-01-06 2016-10-04 International Business Machines Corporation Administering a lock for resources in a distributed computing environment
US10209992B2 (en) * 2014-04-25 2019-02-19 Avago Technologies International Sales Pte. Limited System and method for branch prediction using two branch history tables and presetting a global branch history register
CN104063329B (zh) * 2014-06-30 2017-04-12 龙芯中科技术有限公司 64位立即数处理方法及装置
GB2529892B (en) * 2014-09-08 2017-04-12 Imagination Tech Ltd Efficient loading and storing of data
US9710398B2 (en) * 2014-11-18 2017-07-18 International Business Machines Corporation RE-MRU of metadata tracks to reduce lock contention
US20160232006A1 (en) * 2015-02-09 2016-08-11 Qualcomm Incorporated Fan out of result of explicit data graph execution instruction
CN104809079B (zh) * 2015-04-14 2018-01-16 昆腾微电子股份有限公司 分页寄存器的访问方法和装置
US10191747B2 (en) * 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
WO2017006235A1 (en) * 2015-07-09 2017-01-12 Centipede Semi Ltd. Processor with efficient memory access
US10061584B2 (en) * 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
KR102457183B1 (ko) * 2016-01-05 2022-10-21 한국전자통신연구원 공유 번역 블록 캐시 기반의 멀티-코어 시뮬레이션 시스템 및 방법
US10521351B2 (en) * 2017-01-12 2019-12-31 International Business Machines Corporation Temporarily suppressing processing of a restrained storage operand request
US10621090B2 (en) 2017-01-12 2020-04-14 International Business Machines Corporation Facility for extending exclusive hold of a cache line in private cache
US10732858B2 (en) * 2017-01-19 2020-08-04 International Business Machines Corporation Loading and storing controls regulating the operation of a guarded storage facility
US10901738B2 (en) * 2017-11-14 2021-01-26 International Business Machines Corporation Bulk store and load operations of configuration state registers
US10572387B2 (en) 2018-01-11 2020-02-25 International Business Machines Corporation Hardware control of CPU hold of a cache line in private cache where cache invalidate bit is reset upon expiration of timer
CN111656335B (zh) * 2018-01-29 2023-11-17 美光科技公司 存储器控制器
US10719387B2 (en) * 2018-04-25 2020-07-21 Oracle International Corporation Memory interface with tamper-evident features to enhance software security
CN111258950B (zh) * 2018-11-30 2022-05-31 上海寒武纪信息科技有限公司 原子访存方法、存储介质、计算机设备、装置和系统
GB2580664B (en) * 2019-01-22 2021-01-13 Graphcore Ltd Double load instruction
RU2713709C1 (ru) * 2019-06-20 2020-02-06 Федеральное государственное унитарное предприятие "Научно-производственный центр автоматики и приборостроения имени академика Н.А. Пилюгина" (ФГУП "НПЦАП") Устройство преобразования информации
CN110515660B (zh) * 2019-08-28 2021-08-06 中国人民解放军国防科技大学 一种加速原子指令执行的方法和装置
CN110781016B (zh) * 2019-10-30 2021-04-23 支付宝(杭州)信息技术有限公司 一种数据处理方法、装置、设备及介质
US11422932B2 (en) 2019-12-20 2022-08-23 Microsoft Technology Licensing, Llc Integrated reference and secondary marking
US11392427B2 (en) * 2020-01-06 2022-07-19 Microsoft Technology Licensing, Llc Lock-free reading of unitary value sets
US11314509B2 (en) * 2020-03-19 2022-04-26 Arm Limited Processing of plural-register-load instruction
US11914511B2 (en) 2020-06-22 2024-02-27 Apple Inc. Decoupling atomicity from operation size
US11748101B2 (en) * 2021-07-13 2023-09-05 Arm Limited Handling of single-copy-atomic load/store instruction with a memory access request shared by micro-operations
US11934255B2 (en) 2022-01-04 2024-03-19 Bank Of America Corporation System and method for improving memory resource allocations in database blocks for executing tasks

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3603934A (en) * 1968-07-15 1971-09-07 Ibm Data processing system capable of operation despite a malfunction
JPS5368530A (en) * 1976-12-01 1978-06-19 Hitachi Ltd Order retrial control unit
US4439828A (en) * 1981-07-27 1984-03-27 International Business Machines Corp. Instruction substitution mechanism in an instruction handling unit of a data processing system
JP2500101B2 (ja) * 1992-12-18 1996-05-29 インターナショナル・ビジネス・マシーンズ・コーポレイション 共用変数の値を更新する方法
WO1994027215A1 (en) * 1993-05-07 1994-11-24 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5551013A (en) * 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
US5748950A (en) * 1994-09-20 1998-05-05 Intel Corporation Method and apparatus for providing an optimized compare-and-branch instruction
US5694587A (en) * 1995-03-31 1997-12-02 International Business Machines Corporation Specialized millicode instructions for test PSW validity, load with access test, and character translation assist
US5790825A (en) * 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US6785803B1 (en) * 1996-11-13 2004-08-31 Intel Corporation Processor including replay queue to break livelocks
JPH10149285A (ja) * 1996-11-18 1998-06-02 Hitachi Ltd 命令実行制御方法および情報処理装置
US5860126A (en) * 1996-12-17 1999-01-12 Intel Corporation Controlling shared memory access ordering in a multi-processing system using an acquire/release consistency model
US6009261A (en) * 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6308255B1 (en) * 1998-05-26 2001-10-23 Advanced Micro Devices, Inc. Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system
US6463582B1 (en) * 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US6408380B1 (en) * 1999-05-21 2002-06-18 Institute For The Development Of Emerging Architectures, L.L.C. Execution of an instruction to load two independently selected registers in a single cycle
US7089404B1 (en) * 1999-06-14 2006-08-08 Transmeta Corporation Method and apparatus for enhancing scheduling in an advanced microprocessor
US6681317B1 (en) * 2000-09-29 2004-01-20 Intel Corporation Method and apparatus to provide advanced load ordering
JP3729064B2 (ja) * 2000-11-29 2005-12-21 日本電気株式会社 データ依存関係検出装置
US6922666B2 (en) * 2000-12-22 2005-07-26 Bull Hn Information Systems Inc. Method and data processing system for performing atomic multiple word reads
US7302380B2 (en) * 2002-12-12 2007-11-27 Matsushita Electric, Industrial Co., Ltd. Simulation apparatus, method and program
US7020746B2 (en) 2003-01-28 2006-03-28 Microsoft Corporation Method and system for an atomically updated, central cache memory
US7680990B2 (en) * 2003-05-30 2010-03-16 Hewlett-Packard Development Company, L.P. Superword memory-access instructions for data processor
US20050120185A1 (en) * 2003-12-01 2005-06-02 Sony Computer Entertainment Inc. Methods and apparatus for efficient multi-tasking
GB2409066B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US7296120B2 (en) * 2004-11-18 2007-11-13 International Business Machines Corporation Mechanism that provides efficient multi-word load atomicity
JP4228241B2 (ja) * 2006-12-13 2009-02-25 ソニー株式会社 演算処理装置
US8321637B2 (en) 2007-05-14 2012-11-27 International Business Machines Corporation Computing system with optimized support for transactional memory
US20090182992A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Load Relative and Store Relative Facility and Instructions Therefore
JP2010102623A (ja) * 2008-10-27 2010-05-06 Nec Electronics Corp キャッシュメモリ及びその制御方法
US8438340B2 (en) 2010-02-18 2013-05-07 International Business Machines Corporation Executing atomic store disjoint instructions

Also Published As

Publication number Publication date
US20110202748A1 (en) 2011-08-18
EP2430525B1 (en) 2019-03-27
JP2013519955A (ja) 2013-05-30
CN102754069A (zh) 2012-10-24
EP2430525A1 (en) 2012-03-21
US9052889B2 (en) 2015-06-09
CN102754069B (zh) 2014-12-24
US8850166B2 (en) 2014-09-30
US20130117546A1 (en) 2013-05-09
RU2554546C2 (ru) 2015-06-27
WO2011101048A1 (en) 2011-08-25
RU2012147005A (ru) 2014-05-20

Similar Documents

Publication Publication Date Title
JP5692760B2 (ja) 独立ロード/ストア機構およびそのための命令を実行するための方法、システム、およびコンピュータ・プログラム
JP5357181B2 (ja) コンピュータ・システム、その動作方法、及び、コンピュータ・プログラム
JP5039905B2 (ja) 2つのオペランドに対して演算を行い、その後オペランドの元の値を格納するための命令
US8516195B2 (en) Extract cache attribute facility and instruction therefore
US10963391B2 (en) Extract target cache attribute facility and instruction therefor
US20090182983A1 (en) Compare and Branch Facility and Instruction Therefore
US20140164739A1 (en) Modify and Execute Next Sequential Instruction Facility and Instructions Therefore
US20090182988A1 (en) Compare Relative Long Facility and Instructions Therefore
JP2011509475A5 (ja)
KR20110139098A (ko) 명령어가 이용할 수 있는 범용 레지스터의 수를 확장하는 상위-워드 기능
KR101285072B1 (ko) 실행 관련 명령어
US20090182992A1 (en) Load Relative and Store Relative Facility and Instructions Therefore
US20090182985A1 (en) Move Facility and Instructions Therefore
KR20100106436A (ko) 선택된 비트를 회전 후 삽입하는 기능 및 그 기능을 위한 명령어

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130802

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140827

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140902

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20141106

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141106

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20141106

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20141107

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141211

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20141211

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141211

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150109

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20150113

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20150113

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150128

R150 Certificate of patent or registration of utility model

Ref document number: 5692760

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150