(57)【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品が、
処理回路によって読み取り可能な、方法を実行するための命令を格納しているコンピュータ可読記憶媒体を備えており、前記方法が、
読み込みおよびシフト動作を実行するための命令を取得することと、
前記命令を実行することと
を含んでおり、前記実行することが、
メモリ内の位置からデータを読み込むことであって、前記メモリ内の位置が、前記命令に関連付けられた１つまたは複数のフィールドによって指定される、前記読み込むことと、
前記データをシフト量だけシフトして、シフトされた値を取得することと、
前記シフトされた値を使用して中間結果を取得することと、
前記中間結果を使用して、前記命令が、保護されたアドレスの範囲を示す境界によって規定されたストレージの保護セクションを指定しているかどうかを判定することを含んでいる、保護ストレージ検出を実行することであって、前記命令がストレージの前記保護セクションを指定しているということの決定に基づいて、前記中間結果が前記命令を使用して指定されたレジスタに読み込まれない、前記実行することと
を含んでいる、コンピュータ・プログラム製品。
【請求項２】
前記データがポインタを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記シフトすることが、前記データを前記シフト量だけ左にシフトして、前記シフトされた値を取得することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記方法が、保護ストレージ領域の１つまたは複数の属性を指定するために使用されるレジスタから前記シフト量を取得することをさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
保護ストレージ検出を前記実行することが、
前記中間結果の第１の部分を保護ストレージ領域の原点と比較することと、
前記保護ストレージ領域の特定のセクションが保護されているかどうかを判定することであって、前記中間結果の第２の部分を使用する、前記判定することと、
前記比較することが特定の結果を示すこと、および前記判定することが前記特定のセクションが保護されていることを示すこと、に基づいて、保護ストレージ・イベントを検出することと
を含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項６】
保護ストレージ検出を前記実行することが、前記比較、および前記保護ストレージ・イベントを検出していないことの決定に基づいて、前記中間結果を、前記命令によって指定された選択された位置に配置することをさらに含んでいる、請求項５に記載のコンピュータ・プログラム製品。
【請求項７】
前記選択された位置が、前記命令のフィールドによって指定されたレジスタである、請求項６に記載のコンピュータ・プログラム製品。
【請求項８】
前記中間結果を前記取得することが、前記命令を実行するプロセッサのアドレス指定モードに基づいて、前記シフトされた値を調整することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記方法が、前記メモリ内の位置を決定することをさらに含んでおり、前記決定することが、前記命令のインデックス・フィールド、ベース・フィールド、および変位フィールドを使用する、請求項１に記載のコンピュータ・プログラム製品。
【請求項１０】
前記命令が、読み込み論理およびシフト保護動作を示すオペレーション・コードと、保護ストレージ・イベントが検出されなかったことの決定に基づいて結果を配置するためのレジスタを指定するレジスタ・フィールドと、前記メモリ内の位置を決定するための複数のフィールドとを含んでいる、単一の設計された命令である、請求項１に記載のコンピュータ・プログラム製品。
【請求項１１】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムが、
メモリと、
前記メモリと通信するプロセッサと
を備えており、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
読み込みおよびシフト動作を実行するための命令を取得することと、 
前記命令を実行することと
を含んでおり、前記実行することが、
メモリ内の位置からデータを読み込むことであって、前記メモリ内の位置が、前記命令に関連付けられた１つまたは複数のフィールドによって指定される、前記読み込むことと、
前記データをシフト量だけシフトして、シフトされた値を取得することと、
前記シフトされた値を使用して中間結果を取得することと、
前記中間結果を使用して、前記命令が、保護されたアドレスの範囲を示す境界によって規定されたストレージの保護セクションを指定しているかどうかを判定することを含んでいる、保護ストレージ検出を実行することであって、前記命令がストレージの前記保護セクションを指定しているということの決定に基づいて、前記中間結果が前記命令を使用して指定されたレジスタに読み込まれない、前記実行することと
を含んでいる、コンピュータ・システム。
【請求項１２】
保護ストレージ検出を前記実行することが、
前記中間結果の第１の部分を保護ストレージ領域の原点と比較することと、
前記保護ストレージ領域の特定のセクションが保護されているかどうかを判定することであって、前記中間結果の第２の部分を使用する、前記判定することと、
前記比較することが特定の結果を示すこと、および前記判定することが前記特定のセクションが保護されていることを示すこと、に基づいて、保護ストレージ・イベントを検出することと
を含んでいる、請求項１１に記載のコンピュータ・システム。
【請求項１３】
保護ストレージ検出を前記実行することが、前記比較、および前記保護ストレージ・イベントを検出していないことの決定に基づいて、前記中間結果を、前記命令によって指定された選択された位置に配置することをさらに含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記中間結果を前記取得することが、前記命令を実行するプロセッサのアドレス指定モードに基づいて、前記シフトされた値を調整することを含んでいる、請求項１１に記載のコンピュータ・システム。
【請求項１５】
前記命令が、読み込み論理およびシフト保護動作を示すオペレーション・コードと、保護ストレージ・イベントが検出されなかったことの決定に基づいて結果を配置するためのレジスタを指定するレジスタ・フィールドと、前記メモリ内の位置を決定するための複数のフィールドとを含んでいる、単一の設計された命令である、請求項１１に記載のコンピュータ・システム。
【請求項１６】
コンピューティング環境内の処理を容易にするコンピュータ実装方法であって、前記コンピュータ実装方法が、
読み込みおよびシフト動作を実行するための命令を取得することと、
前記命令を実行することと
を含んでおり、前記実行することが、
メモリ内の位置からデータを読み込むことであって、前記メモリ内の位置が、前記命令に関連付けられた１つまたは複数のフィールドによって指定される、前記読み込むことと、
前記データをシフト量だけシフトして、シフトされた値を取得することと、
前記シフトされた値を使用して中間結果を取得することと、
前記中間結果を使用して、前記命令が、保護されたアドレスの範囲を示す境界によって規定されたストレージの保護セクションを指定しているかどうかを判定することを含んでいる、保護ストレージ検出を実行することであって、前記命令がストレージの前記保護セクションを指定しているということの決定に基づいて、前記中間結果が前記命令を使用して指定されたレジスタに読み込まれない、前記実行することと
を含んでいる、コンピュータ実装方法。
【請求項１７】
保護ストレージ検出を前記実行することが、
前記中間結果の第１の部分を保護ストレージ領域の原点と比較することと、
前記保護ストレージ領域の特定のセクションが保護されているかどうかを判定することであって、前記中間結果の第２の部分を使用する、前記判定することと、
前記比較することが特定の結果を示すこと、および前記判定することが前記特定のセクションが保護されていることを示すこと、に基づいて、保護ストレージ・イベントを検出することと
を含んでいる、請求項１６に記載のコンピュータ実装方法。
【請求項１８】
保護ストレージ検出を前記実行することが、前記比較、および前記保護ストレージ・イベントを検出していないことの決定に基づいて、前記中間結果を、前記命令によって指定された選択された位置に配置することをさらに含んでいる、請求項１７に記載のコンピュータ実装方法。
【請求項１９】
前記中間結果を前記取得することが、前記命令を実行するプロセッサのアドレス指定モードに基づいて、前記シフトされた値を調整することを含んでいる、請求項１６に記載のコンピュータ実装方法。
【請求項２０】
前記命令が、読み込み論理およびシフト保護動作を示すオペレーション・コードと、保護ストレージ・イベントが検出されなかったことの決定に基づいて結果を配置するためのレジスタを指定するレジスタ・フィールドと、前記メモリ内の位置を決定するための複数のフィールドとを含んでいる、単一の設計された命令である、請求項１６に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピューティング環境内の処理に関し、特に、読み込みおよびシフト動作の実行に関する。
【背景技術】
【０００２】
例えばＪａｖａ（Ｒ）やＰｙｔｈｏｎ（Ｒ）などの、多くの現在のプログラミング言語は、アプリケーション・プログラムが、データ・オブジェクトを監視したり、その後データ・オブジェクトが不要になったときにメモリを解放したりする責任を負わずに、データ・オブジェクトを単に参照することによってインスタンス化できるようにする。
【０００３】
アクティブなデータ・オブジェクト（すなわち、アプリケーションによって使用されているデータ・オブジェクト）および非アクティブなデータ・オブジェクト（すなわち、アプリケーションによって必要とされなくなったデータ・オブジェクト）は、言語のメモリ・ヒープ内で混在して、メモリ空間の断片化をもたらすことがある。一般にストレージ再利用またはガベージ・コレクションと呼ばれるプロセスは、非アクティブなオブジェクトをメモリ・ヒープから削除するだけでなく、アクティブなメモリ・オブジェクトを、よりコンパクトなメモリのブロックにまとめることによって再配置する。これによって、空きメモリを、アプリケーションによってその後利用できるより大きい隣接するブロックに結合することができる。
【０００４】
アクティブなデータ・オブジェクトの再配置における課題は、データ・オブジェクトが、アクティブであるため、ストレージ再利用を実行している中央処理装置以外の他の中央処理装置によって同時に参照されることがある、ということである。したがって、ストレージ再利用を実行するために、ストレージ再利用が進行している間は、メモリを参照する可能性があるすべてのアプリケーションのプロセスの実行が一時停止される。必要なメモリの再配置の数によっては、この一時停止が、アプリケーションにおいて許容できない遅延を引き起こす可能性がある。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March 2015
【非特許文献２】“Power ISA(TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015
【発明の概要】
【発明が解決しようとする課題】
【０００６】
したがって、当技術分野において従来技術の問題に対処する必要がある。
【課題を解決するための手段】
【０００７】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が対処され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するための命令を格納しているストレージ媒体を備える。この方法は、例えば、読み込みおよびシフト動作を実行するための命令を取得することと、この命令を実行することとを含む。この実行することは、メモリ内の位置からデータを読み込むことであって、このメモリ内の位置が、命令に関連付けられた１つまたは複数のフィールドによって指定される、読み込むことと、データをシフト量だけシフトして、シフトされた値を取得することと、このシフトされた値を使用して中間結果を取得することと、この中間結果に基づいて保護ストレージ検出を実行することとを含む。
【０００８】
データ読み込みおよびシフト動作を使用して保護ストレージ・イベントを検出することによって、特定のタスクに関連付けられた処理を含む、コンピューティング環境内の処理が容易になり、それによって処理を改善する。
【０００９】
例えば、データはポインタを含んでおり、このシフトすることは、データをシフト量だけ左にシフトして、シフトされた値を取得することを含む。さらに、一実施形態では、この方法は、保護ストレージ領域の１つまたは複数の属性を指定するために使用されるレジスタからシフト量を取得することをさらに含む。
【００１０】
一実施形態では、保護ストレージ検出を実行することは、中間結果の第１の部分を保護ストレージ領域の原点と比較することと、保護ストレージ領域の特定のセクションが保護されているかどうかを判定することであって、中間結果の第２の部分を使用する、判定することと、比較することが特定の結果を示すこと、および判定することが特定のセクションが保護されていることを示すこと、に基づいて、保護ストレージ・イベントを検出することとを含む。
【００１１】
さらに、一実施形態では、保護ストレージ検出を実行することは、比較、および保護ストレージ・イベントを検出していないことの決定に基づいて、中間結果を、命令によって指定された選択された位置に配置することを含む。一例として、選択された位置は、命令のフィールドによって指定されたレジスタである。
【００１２】
さらに、一実施形態では、中間結果を取得することは、命令を実行するプロセッサのアドレス指定モードに基づいて、シフトされた値を調整することを含む。
【００１３】
さらに別の一実施形態では、この方法は、読み込まれるデータのメモリ内の位置を決定することを含む。この決定することは、例えば、命令のインデックス・フィールド、ベース・フィールド、および変位フィールドを使用する。
【００１４】
１つの特定の例では、命令は、読み込み論理およびシフト保護動作を示すオペレーション・コードと、保護ストレージ・イベントが検出されなかったことの決定に基づいて結果を配置するためのレジスタを指定するレジスタ・フィールドと、メモリ内の位置を決定するための複数のフィールドとを含んでいる、単一の設計された命令である。
【００１５】
１つまたは複数の態様に関連する方法およびシステムも本明細書に記載され、請求される。さらに、１つまたは複数の態様に関連するサービスも本明細書に記載されており、請求されてよい。
【００１６】
その他の特徴および長所が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、請求される態様の一部と見なされる。
【００１７】
１つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に指摘され、明確に請求される。前述の内容、ならびに１つまたは複数の態様の目的、特徴、および長所は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【００１８】
【図１】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例を示す図である。
【図２】本発明の態様に従って、図１のプロセッサのさらなる詳細を示す図である。
【図３】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【図４】図３のメモリのさらなる詳細を示す図である。
【図５】本発明の態様に従って、保護ストレージ指定レジスタ（guarded storage designation register）の一例を示す図である。
【図６】本発明の態様に従って、保護ストレージ特性（guarded storage characteristic）、保護ストレージ原点（Guarded Storage Origin）および保護ストレージ・セクションのサイズ間の関係の一例を示す図である。
【図７】本発明の態様に従って、保護ストレージ・セクション・マスク・レジスタ（guarded storage section mask register）の一例を示す図である。
【図８】本発明の態様に従って、保護ストレージ・イベント・パラメータ・リスト・アドレス・レジスタ（guarded storage event parameter list address register）の一例を示す図である。
【図９】本発明の態様に従って、保護ストレージ・イベント・パラメータ・リスト（guarded storage event parameter list）の一例を示す図である。
【図１０】本発明の態様に従って、保護ストレージ制御ブロック（guarded storage control block）の一例を示す図である。
【図１１】本発明の態様に従って、読み込み保護命令の一実施形態を示す図である。
【図１２】本発明の態様に従って、読み込み論理およびシフト保護命令の一例を示す図である。
【図１３】本発明の態様に従って、読み込み保護ストレージ制御命令（Load Guarded Storage Controls instruction）の一例を示す図である。
【図１４】本発明の態様に従って、格納保護ストレージ制御命令（Store Guarded Storage Controls instruction）の一例を示す図である。
【図１５】本発明の態様に従って、保護ストレージ・イベントの検出の一例を示す図である。
【図１６】本発明の態様に従って、マシン・チェック拡張保存領域（machine check extended save area）の形式の一例を示す図である。
【図１７】本発明の態様に従って、マシン・チェック拡張保存領域指定レジスタ（machine check extended save area designation register）の一例を示す図である。
【図１８】本発明の態様に従って、信号プロセッサ・パラメータ・レジスタ（signal processor parameter register）の一例を示す図である。
【図１９】本発明の態様に従って、コンピューティング環境内の処理を容易にすることに関連する態様の一実施形態を示す図である。
【図２０】本発明の態様に従って、コンピューティング環境内の処理を容易にすることに関連する態様の一実施形態を示す図である。
【発明を実施するための形態】
【００１９】
本発明の１つまたは複数の態様に従って、ストレージ再利用を含むが、これに限定されない、コンピューティング環境内の特定のタスクの実行を容易にする能力が提供される。この能力は、保護ストレージ機能と呼ばれ、ストレージ再利用が実行されるアドレスの範囲などの、保護（guarded）または防護（protected）されるアドレスの範囲を示す境界を設定する。プログラムが境界によって規定される保護セクション内のアドレスにアクセスしようとしたときに、保護ストレージ・イベントが発生し、それによって、境界内のアドレスを防護する。この機能を使用すると、コンピューティング環境内の処理が容易になり、性能が改善される。例えば、この機能を使用すると、コンピューティング環境内の１つまたは複数の中央処理装置（ＣＰＵ：central processing units）上で実行されているアプリケーションは、コンピューティング環境内の別のＣＰＵ上でストレージ再利用が進行している間に、実行を継続することができる。アプリケーションは、境界によって防護されていないアドレスにアクセスし続けることができる。
【００２０】
本発明の１つまたは複数の態様は、例として、アプリケーションが、保護ストレージ機能の動作に影響を与える制御を設定および検査できるようにすることと、保護ストレージ・イベントが検出されたときに、プロセッサの属性を識別する能力を提供することと、可変量によってシフトされ、保護ストレージ検出において使用されるデータ（例えば、圧縮ポインタ）を読み込むことと、保護ストレージ・イベントおよびその影響に起因してアボートされるトランザクションのアボートを処理することを含む、トランザクション実行中の保護ストレージ・イベントの処理を提供することとのうちの１つまたは複数を提供する。
【００２１】
本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の実施形態が、図１を参照して説明される。１つの例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づく。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の一実施形態は、“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。Ｚ／ＡＲＣＨＩＴＥＣＴＵＲＥは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（米国ニューヨーク州アーモンク）の登録商標である。
【００２２】
別の例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づく。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の一実施形態は、“Power ISA（商標） Version 2.07B,” International Business Machines Corporation, April 9, 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。ＰＯＷＥＲ  ＡＲＣＨＩＴＥＣＴＵＲＥは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（米国ニューヨーク州アーモンク）の登録商標である。
【００２３】
コンピューティング環境は、Ｉｎｔｅｌ（Ｒ）ｘ８６アーキテクチャを含むが、これに限定されない、他のアーキテクチャに基づいてもよい。その他の例も存在する。
【００２４】
図１に示されているように、コンピューティング環境１００は、例えば、汎用コンピューティング・デバイスの形態などで示されるコンピュータ・システム１０２を含んでいる。コンピュータ・システム１０２は、１つまたは複数のバスまたはその他の接続１１０あるいはその両方を介して互いに結合された、１つまたは複数のプロセッサまたはプロセッシング・ユニット１０４（例えば、中央処理装置（ＣＰＵ））、メモリ１０６（例として、メイン・メモリまたはストレージと呼ばれる）、および１つまたは複数の入出力（Ｉ／Ｏ：input/output）インターフェイス１０８を含んでよいが、これらに限定されない。
【００２５】
バス１１０は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサまたはローカル・バスを含む、任意の複数の種類のバス構造のうちの１つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）、ＭＣＡ（Micro Channel Architecture）、ＥＩＳＡ（Enhanced ISA）、ＶＥＳＡ（Video Electronics Standards Association）ローカル・バス、およびＰＣＩ（Peripheral Component Interconnect）を含む。
【００２６】
メモリ１０６は、例えば、プロセッサ１０４のローカル・キャッシュ１２２に結合されてよい、共有キャッシュなどのキャッシュ１２０を含んでよい。さらに、メモリ１０６は、１つまたは複数のプログラムまたはアプリケーション１３０、オペレーティング・システム１３２、および１つまたは複数のコンピュータ可読プログラム命令１３４を含んでよい。コンピュータ可読プログラム命令１３４は、本発明の態様の実施形態の機能を実行するように構成されてよい。
【００２７】
コンピュータ・システム１０２は、例えばＩ／Ｏインターフェイス１０８を介して、１つまたは複数の外部デバイス１４０、１つまたは複数のネットワーク・インターフェイス１４２、または１つまたは複数のデータ・ストレージ・デバイス１４４、あるいはその組み合わせと通信してもよい。外部デバイスの例としては、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディスプレイなどが挙げられる。ネットワーク・インターフェイス１４２は、コンピュータ・システム１０２が、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、一般的な広域ネットワーク（ＷＡＮ：wide area network）、またはパブリック・ネットワーク（例えば、インターネット）、あるいはその組み合わせなどの１つまたは複数のネットワークと通信できるようにし、他のコンピューティング・デバイスまたはシステムとの通信を実現する。
【００２８】
データ・ストレージ・デバイス１４４は、１つまたは複数のプログラム１４６、１つまたは複数のコンピュータ可読プログラム命令１４８、またはデータ、あるいはその組み合わせなどを格納してよい。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成されてよい。
【００２９】
コンピュータ・システム１０２は、取り外し可能／取り外し不可、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体を含むか、またはそのようなコンピュータ・システム・ストレージ媒体に結合されるか、あるいはその両方であってよい。例えば、コンピュータ・システム１０２は、取り外し不可、不揮発性の磁気媒体（通常は、「ハード・ドライブ」と呼ばれる）、取り外し可能、不揮発性の磁気ディスク（例えば、「フロッピー・ディスク」）に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、あるいはＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、またはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りまたは書き込みを行うための光ディスク・ドライブ、あるいはその組み合わせを含むか、またはこれらに結合されるか、あるいはその両方であってよい。その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム１０２と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【００３０】
コンピュータ・システム１０２は、他の多数の汎用または専用のコンピューティング・システム環境または構成で運用されてよい。コンピュータ・システム１０２での使用に適し得る周知のコンピューティング・システム、環境、または構成、あるいはその組み合わせの例としては、パーソナル・コンピュータ（ＰＣ：personal computer）システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マイクロプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークＰＣ、マイクロコンピュータ・システム、メインフレーム・コンピュータ・システム、およびこれらの任意のシステムまたはデバイスを含む分散クラウド・コンピューティング環境などが挙げられるが、これらに限定されない。
【００３１】
さらに、プロセッサ１０４の一例に関するさらなる詳細が、図２を参照して説明される。プロセッサ１０４は、命令を実行するために使用される複数の機能コンポーネントを含む。これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント１５０と、フェッチされた命令をデコードするため、およびデコードされた命令のオペランドを取得するための命令デコード・ユニット１５２と、デコードされた命令を実行するための命令実行コンポーネント１５４と、必要な場合に、命令を実行するためにメモリにアクセスするためのメモリ・アクセス・コンポーネント１５６と、実行された命令の結果を提供するための書き戻しコンポーネント１６０とを含む。これらのコンポーネントのうちの１つまたは複数は、本発明の態様に従って、下でさらに説明されている保護ストレージ機能の１つまたは複数の命令１６６を実行するために使用されてよい。
【００３２】
プロセッサ１０４は、一実施形態では、機能コンポーネントのうちの１つまたは複数によって使用される１つまたは複数のレジスタ１７０も含む。
【００３３】
１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の実施形態が、図３を参照して説明される。この例では、コンピューティング環境２００は、例えば、１つまたは複数のバス２０８またはその他の接続あるいはその両方を介して互いに結合された、ネイティブ中央処理装置（ＣＰＵ）２０２、メモリ２０４、および１つまたは複数の入出力デバイスまたはインターフェイス２０６あるいはその両方を含む。例として、コンピューティング環境２００は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒＰＣ（Ｒ）プロセッサまたはｐＳｅｒｉｅｓ（Ｒ）サーバ、あるいはＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ、Ｉｎｔｅｌ、またはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組み合わせを含んでよい。
【００３４】
ネイティブ中央処理装置２０２は、環境内で処理中に使用される１つまたは複数の汎用レジスタまたは１つまたは複数の専用レジスタあるいはその両方などの、１つまたは複数のネイティブ・レジスタ２１０を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
【００３５】
さらに、ネイティブ中央処理装置２０２は、メモリ２０４に格納された命令およびコードを実行する。１つの特定の例では、中央処理装置は、メモリ２０４に格納されたエミュレータ・コード２１２を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、別のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード２１２は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）以外のアーキテクチャに基づくマシン（ＰｏｗｅｒＰＣ（Ｒ）プロセッサ、ｐＳｅｒｉｅｓ（Ｒ）サーバ、あるいはその他のサーバまたはプロセッサなど）が、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）をエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づいて開発されたソフトウェアおよび命令を実行できるようにする。
【００３６】
エミュレータ・コード２１２に関連するさらなる詳細が、図４を参照して説明される。メモリ２０４に格納されたゲスト命令２５０は、ネイティブＣＰＵ２０２のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された（例えば、マシン命令と相互関係がある）ソフトウェア命令を含む。例えば、ゲスト命令２５０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）プロセッサ上で実行するように設計されてよいが、代わりに、例えばインテル・プロセッサであってよい、ネイティブＣＰＵ２０２上でエミュレートされる。１つの例では、エミュレータ・コード２１２は、メモリ２０４から１つまたは複数のゲスト命令２５０を取得するため、および取得された命令のローカル・バッファリングを必要に応じて提供するための命令フェッチ・ルーチン２５２を含む。エミュレータ・コード２１２は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、１つまたは複数の対応するネイティブ命令２５６に変換するための命令変換ルーチン２５４も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
【００３７】
さらに、エミュレータ・コード２１２は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン２６０を含む。エミュレーション制御ルーチン２６０は、ネイティブＣＰＵ２０２に、１つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令２５６の実行は、データをメモリ２０４からレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
【００３８】
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置２０２によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンまたは動作のうちの１つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブＣＰＵのレジスタ２１０を使用して、またはメモリ２０４内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令２５０、ネイティブ命令２５６、およびエミュレータ・コード２１２は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
【００３９】
本明細書において使用されるとき、ファームウェアは、例えば、プロセッサのマイクロコードまたはミリコードを含む。ファームウェアは、例えば、上位レベルの機械コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。
【００４０】
取得され、変換されて実行されるゲスト命令２５０は、例えば、保護ストレージ機能の命令であり、本明細書では、その複数の命令が説明される。あるアーキテクチャ（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ））の命令が、メモリからフェッチされ、変換され、別のアーキテクチャ（例えば、ＰｏｗｅｒＰＣ（Ｒ）、ｐＳｅｒｉｅｓ（Ｒ）、Ｉｎｔｅｌ（Ｒ）など）のネイティブ命令２５６のシーケンスとして表される。その後、これらのネイティブ命令が実行される。
【００４１】
以下では、保護ストレージ機能の一実施形態に関連する詳細が、保護ストレージ機能に関連付けられた命令を含めて、説明される。保護ストレージ機能は、プログラムが複数の保護ストレージ・セクション（例えば、０〜６４）を含んでいる論理ストレージの領域を指定できるようにし、例えばストレージ再利用技術を実装するさまざまなプログラミング言語によって使用されてよい、メカニズムを提供する。この機能は、例えば、読み込み保護（ＬＧＧ：Load Guarded）命令、読み込み論理およびシフト保護（ＬＬＧＦＳＧ：Load Logical and Shift Guarded）命令、読み込み保護ストレージ制御（ＬＧＳＣ：Load Guarded Storage Controls）命令、および格納保護ストレージ制御（ＳＴＧＳＣ：Store Guarded Storage Controls）命令などの複数の命令を含み、以下では、これらの命令のそれぞれがさらに説明される。
【００４２】
読み込み保護命令または読み込み論理およびシフト保護命令の第２のオペランドなどの選択されたオペランドが、保護ストレージ領域の保護セクションを指定しない場合、命令は規定された読み込み動作を実行する。しかし、命令の第２のオペランドが保護ストレージ領域の保護セクションを指定している場合、制御が、イベントの原因の指示を伴って、保護ストレージ・イベント・ハンドラに分岐する。読み込み保護命令および読み込み論理およびシフト保護命令は保護ストレージ・イベントを生成できるが、保護ストレージの範囲にアクセスする他の命令は、この機能による影響を受けず、そのようなイベントを生成しない。以下では、保護ストレージ機能の命令に関連する詳細が、この機能によって使用されるさまざまなレジスタの説明の後に、さらに説明される。
【００４３】
一実施形態では、保護ストレージ機能は、制御レジスタ（例えば、制御レジスタ２）内のビットによって、ならびに保護ストレージ指定（ＧＳＤ：guarded storage designation）レジスタ、保護ストレージ・セクション・マスク（ＧＳＳＭ：guarded storage section mask）レジスタ、および保護ストレージ・イベント・パラメータ・リスト・アドレス（ＧＳＥＰＬＡ：guarded storage event parameter list address）レジスタという３つのレジスタによって制御される。これらの３つのレジスタの内容は、読み込み保護ストレージ制御命令および格納保護ストレージ制御命令によってそれぞれ読み込まれ、検査されてよい。これらの各レジスタおよび制御レジスタ２のさらなる詳細が、以下で説明される。説明では、特定のビットまたはバイトの特定の値が説明される。これらの値、あるいは特定のビットまたはバイトあるいはその両方、あるいはその組み合わせは、単なる例である。その他の値、ビット、またはバイト、あるいはその組み合わせが使用されてよい。
【００４４】
１つの例では、保護ストレージ機能がインストールされている場合、制御レジスタ２の選択されたビット（例えば、ビット５９）が、保護ストレージ有効化（ＧＳＥ：guarded storage enablement）制御である。ビット５９が０であるときに、読み込み保護ストレージ制御（ＬＧＳＣ）命令および格納保護ストレージ制御（ＳＴＧＳＣ）命令の実行が試みられると、例外条件（例えば、特殊演算例外（special operation exception））が認識される。しかし、保護ストレージ有効化制御が１である場合、保護ストレージ機能が有効化されていると言われ、ＬＧＳＣ命令およびＳＴＧＳＣ命令の実行の試みが許可され、以下で説明されるその他の制限を受ける。
【００４５】
一実施形態では、読み込み保護命令および読み込み論理およびシフト保護命令の実行は、保護ストレージ有効化制御の影響を受けない。しかし、１つの例では、保護ストレージ・イベントは、保護ストレージ有効化制御が１である場合にのみ認識されてよい。すなわち、１つの例では、選択された機能指示（例えば、機能指示１３３）が、例えば１である場合（保護ストレージ機能が構成においてインストールされていることを示す）、プログラムは、保護ストレージ有効化制御に関わらず、読み込み保護命令および読み込み論理およびシフト保護命令を使用できる。しかし、まず保護ストレージ制御を読み込まなければ、保護ストレージ・イベントは認識されない。したがって、制御プログラム（例えば、オペレーティング・システム）は、保護ストレージ制御を読み込む読み込み保護ストレージ制御命令を正常に実行するために、保護ストレージ有効化制御を１に設定する。プログラムは、オペレーティング・システムによって提供される保護ストレージ機能有効化の指示（ＧＳＥ）（機能ビット１３３ではない）を調べて、この機能の完全な能力を利用できるかどうかを判定する。
【００４６】
上で示されたように、保護ストレージ機能有効化制御（例えば、制御レジスタ２のビット５９）に加えて、保護ストレージ機能は、例えば保護ストレージ領域の属性を規定する６４ビットレジスタである保護ストレージ指定（ＧＳＤ）レジスタを含む、複数のレジスタを使用する。
【００４７】
保護ストレージ指定（ＧＳＤ）レジスタの一実施形態が、図５を参照して説明される。保護ストレージ指定レジスタ３００は、１つの例では、次のフィールドを含む。
【００４８】
＊  保護ストレージ原点（ＧＳＯ：Guarded Storage Origin）３０２：このフィールドは、保護ストレージの防護が適用されてよいストレージのブロックのアドレスを指定する。保護ストレージ領域の位置は、ＧＳＤレジスタの左端のビットによって指定される。一実施形態では、左端のビットの数は、このレジスタのビット５８〜６３内の保護ストレージ特性（ＧＳＣ：guarded storage characteristic）の値によって決定される。保護ストレージ指定レジスタのビット位置０〜（６３−ＧＳＣ）は、その右側のビット位置（６４−ＧＳＣ）〜６３に２進ゼロが埋め込まれて、保護ストレージ領域の左端のバイトの６４ビット論理アドレスを形成する。他の実施形態では、保護ストレージ領域の原点を指定する異なるメカニズムを使用してよい。
【００４９】
一実施形態では、ＧＳＣが２５より大きい場合、ビット位置（６４−ＧＳＣ）〜３８は予備であり、０を含むべきである。そうでない場合は、保護ストレージ・イベント検出の結果が予測不可能になる。一実施形態では、ＧＳＤレジスタのビット位置３９〜５２および５６〜５７は予備であり、０を含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。他の実施形態では、ＧＳＯのサイズに対応して変化する、ＧＳＣの値の異なる範囲を許容してよい。
【００５０】
＊  保護読み込みシフト（ＧＬＳ：Guarded Load Shift）３０４：一実施形態では、保護ストレージ指定レジスタのビット５３〜５５は、読み込み論理およびシフト保護命令の中間結果の形成において使用される３ビット符号なし２進整数を含む。一実施形態では、有効なＧＬＳの値は０〜４であり、値５〜７は予備であり、予測不可能なシフト量をもたらすことがある。
【００５１】
他の実施形態では、オブジェクトを、ハーフワード、ワード、ダブルワード、クワッドワードなどのさまざまな境界上でアライメントできるようにする、ＧＬＳの値のより広い範囲を提供してよい。
【００５２】
＊  保護ストレージ特性（ＧＳＣ：Guarded Storage Characteristic）３０６：一実施形態では、保護ストレージ指定レジスタのビット位置５８〜６３は、２のべき乗として扱われる６ビット符号なし２進整数を含む。有効なＧＳＣの値は、例えば２５〜５６であり、値０〜２４および５７〜６３は予備であり、予測不可能な保護ストレージ・イベント検出をもたらすことがある。１つの例では、ＧＳＣは次を指定する。
【００５３】
・  保護ストレージ原点のアライメント。２５のＧＳＣの値は３２Ｍバイトのアライメントを示し、２６の値は６４Ｍバイトのアライメントを示す、などとなる。
【００５４】
・  保護ストレージ・セクションのサイズ。２５のＧＳＣの値は５１２Ｋバイトのセクションを示し、２６の値は１Ｍバイトのセクションを示す、などとなる。他の実施形態では、保護ストレージ原点および保護ストレージ・セクションのサイズの指定に対応して変化する、ＧＳＣを指定する異なるメカニズムを許容してよい。
【００５５】
保護ストレージ特性、保護ストレージ原点、および保護ストレージ・セクションのサイズの間の関係が、図６に示されている。図６では、Ｇはギガバイト（２３０）、ＧＳＣは保護ストレージ特性、ＧＳＤは保護ストレージ指定、ＧＳＯは保護ストレージ原点、Ｍはメガバイト（２２０）、Ｐはペタバイト（２５０）、およびＴはテラバイト（２４０）である。
【００５６】
保護ストレージ指定レジスタに加えて、保護ストレージ機能は保護ストレージ・セクション・マスク・レジスタを含んでおり、保護ストレージ・セクション・マスク・レジスタの一実施形態が、図７を参照して説明される。１つの例では、保護ストレージ・セクション・マスク（ＧＳＳＭ）レジスタ５００は６４ビット・レジスタであり、各ビット５０２は、保護ストレージ領域内の６４個の保護ストレージ・セクションのうちの１つに対応する。一例として、このレジスタのビット０は左端のセクションに対応し、ビット６３は右端のセクションに対応する。セクション保護ビットと呼ばれる各ビットは、下で説明されているように、読み込み保護（ＬＧＧ）命令および読み込み論理およびシフト保護（ＬＬＧＦＳＧ）命令による、保護ストレージ領域の各セクションへのアクセスを制御する。
【００５７】
ＧＳＳＭレジスタの６４ビットがすべて０である場合、保護ストレージ・イベントは認識されない。他の実施形態では、ＧＳＳＭレジスタ５００は、異なる数の保護セクションに対応する異なる数のビットを含んでよく、または１ビットが２つ以上の保護セクションを表すために使用されてよく、あるいはその両方が行われてよい。多くの変形が可能である。
【００５８】
保護ストレージ機能の第３のレジスタは、保護ストレージ・イベント・パラメータ・リスト・アドレス（ＧＳＥＰＬＡ）レジスタであり、このレジスタの例が図８に示されている。図に示されているように、保護ストレージ・イベント・パラメータ・リスト・アドレス・レジスタ６００は、例えば、保護ストレージ・イベントが認識されたときに、保護ストレージ・イベント・パラメータ・リスト（ＧＳＥＰＬ）の位置を特定するために使用される、６４ビット・アドレス６０２を含んでいる。一実施形態では、ＣＰＵがアクセス・レジスタ・モードでない場合、ＧＳＥＰＬＡは論理アドレスであり、ＣＰＵがアクセス・レジスタ・モードである場合、ＧＳＥＰＬＡは一次仮想アドレスである。
【００５９】
保護ストレージ・イベントが認識された場合、ＣＰＵの現在のアドレス指定モードに関わらず、ＧＳＥＰＬＡの６４ビットを使用して、ＧＳＥＰＬがアクセスされる。ＧＳＥＰＬは、現在の変換モードを使用してアクセスされるが、ＣＰＵがアクセス・レジスタ・モードである場合に、ＧＳＥＰＬが一次アドレス空間を使用してアクセスされるということを除く。
【００６０】
１つの例では、保護ストレージ・イベントが認識された場合、さまざまな情報がＧＳＥＰＬに配置され、制御がＧＳＥハンドラに渡される。このハンドラ・ルーチンは、ＧＳＥＰＬを使用して、それに応じてポインタを調整し、オブジェクトの再配置をもたらすことができる。
【００６１】
保護ストレージ・イベント・パラメータ・リストの一例が、図９を参照して説明される。保護ストレージ・イベントが検出されたときに、保護ストレージ・イベント・ハンドラ・アドレス（guarded storage event handler address）を除く、保護ストレージ・イベント・パラメータ・リストのフィールドが、保護ストレージ・イベント・パラメータ・リストに格納される。
【００６２】
図９を参照すると、１つの例では、保護ストレージ・イベント・パラメータ・リスト６１０の内容は次を含む。
【００６３】
予備：ＧＳＥＰＬのバイト０および４〜７は予備であり、１つの例では、保護ストレージ・イベントが認識されたときに、０に設定される。
【００６４】
保護ストレージ・イベント・アドレス指定モード（ＧＳＥＡＭ：Guarded Storage Event Addressing Mode）６１２：ＧＳＥＰＬのバイト１は、保護ストレージ・イベントが認識されたときに、次のようにＣＰＵのアドレス指定モードの指示を含む。
【００６５】
予備：ＧＳＥＡＭのビット０〜５は予備であり、０が格納される。
【００６６】
拡張アドレス指定モード（Ｅ）６１４：ＧＳＥＡＭのビット６は、拡張アドレス指定モード・ビット（例えば、プログラム状態ワードのビット３１）を含む。プログラム状態ワードは、状態レジスタおよびプログラム・カウンタの機能を実行する制御レジスタである。プログラム状態ワードは、本明細書に記載されているように、条件コード、命令アドレス、およびその他の情報を含むが、これらに限定されない、プログラムを適切に実行するために使用される情報を含む。
【００６７】
基本アドレス指定モード（Ｂ）６１６：ＧＳＥＡＭのビット７は、基本アドレス指定モード・ビット（例えば、プログラム状態ワードのビット３２）を含む。
【００６８】
保護ストレージ・イベントが認識されたときに（すなわち、一実施形態では、下で説明されているように、ビット３１および３２がトランザクション・アボートＰＳＷに置き換えられる前に）、ビット６および７が、例えばＰＳＷのビット３１および３２に設定される。
【００６９】
保護ストレージ・イベント原因指示（ＧＳＥＣＩ：Guarded Storage Event Cause Indications）６２０：ＧＳＥＰＬのバイト２は、保護ストレージ・イベント原因指示を含む。１つの例では、ＧＳＥＣＩは次のようにエンコードされる。
【００７０】
トランザクション実行モード指示（ＴＸ）６２２：ＧＳＥＣＩのビット０が０である場合、保護ストレージ・イベントが認識されたときに、ＣＰＵはトランザクション実行モードではなかった。ＧＳＥＣＩのビット０が１である場合、保護ストレージ・イベントが認識されたときに、ＣＰＵはトランザクション実行モードだった。
【００７１】
ＣＰＵは、非トランザクション実行モードであるか、またはトランザクション実行モードであることがあり、トランザクション実行モードである場合、ＣＰＵは、制約付きトランザクション実行モードであるか、または制約なしトランザクション実行モードであることがある。ＣＰＵは、トランザクション開始命令によってトランザクション実行モードに移行し、トランザクション終了命令または命令のアボートのいずれかによってトランザクション実行モードを終了する。トランザクション開始命令は、制約なしトランザクション実行モードのトランザクション開始（ＴＢＥＧＩＮ：Transaction Begin）命令、または制約付きトランザクション実行モードの制約付きトランザクション開始（ＴＢＥＧＩＮＣ：Transaction Begin Constrained）命令であってよい。トランザクション開始命令が制約付きトランザクション実行モードである場合、ＣＰＵは、複数の制限を受ける制約付きトランザクション実行モードに移行する（例えば、汎用命令のサブセットを利用できる、限られた数の命令を実行できる、限られた数のストレージ・オペランドの位置にアクセスできる、またはトランザクションが単一のネスト・レベルに制限される、あるいはその組み合わせになる）。制約なしトランザクション実行モード（単に、トランザクション実行モードと呼ばれる）では、制約付きトランザクション実行モードの制限が適用されない。
【００７２】
一実施形態では、ネスト深度が最初に０であるときに（トランザクションはネストされることがある）、ＴＢＥＧＩＮ命令の実行中に、トランザクション・アボート・プログラム状態ワード（ＰＳＷ）は現在のプログラム状態ワード（ＰＳＷ）の内容に設定され、トランザクション・アボートＰＳＷの命令アドレスは、次の順次命令（すなわち、最も外側のＴＢＥＧＩＮに続く命令）を指定する。ネスト深度が最初に０であるときに、ＴＥＧＩＮＣ命令の実行中に、トランザクション・アボートＰＳＷは、トランザクション・アボートＰＳＷの命令アドレスが（ＴＢＥＧＩＮＣに続く次の順次命令ではなく）ＴＢＥＧＩＮＣ命令を指定することを除き、現在のＰＳＷの内容に設定される。
【００７３】
トランザクションがアボートされた場合、さまざまな状態情報がトランザクション診断ブロック（ＴＤＢ：transaction diagnostic block）に保存されてよい。
【００７４】
制約付きトランザクション実行モード指示（ＣＸ）６２４：ＧＳＥＣＩのビット１が０である場合、保護ストレージ・イベントが認識されたときに、ＣＰＵは制約付きトランザクション実行モードではなかった。ＧＳＥＣＩのビット１が１である場合、保護ストレージ・イベントが認識されたときに、ＣＰＵは制約付きトランザクション実行モードだった。ＧＳＥＣＩのビット１は、ビット０が１である場合に意味を持つ。
【００７５】
予備：ＧＳＥＣＩのビット２〜６は予備であり、１つの例では、保護ストレージ・イベントが認識されたときに、０に設定される。
【００７６】
原因命令（Instruction Cause）（ＩＮ）６２６：ＧＳＥＣＩのビット７は、保護ストレージ・イベントを引き起こした命令を示す。ビット７が０である場合、イベントは読み込み保護命令の実行によって引き起こされた。ビット７が１である場合、イベントは読み込み論理およびシフト保護命令の実行によって引き起こされた。２つ以上のビットを使用することによって、その他の原因が同様に示されてよい。
【００７７】
保護ストレージ・イベント・アクセス情報（ＧＳＥＡＩ：Guarded Storage Event Access Information）６３０：ＧＳＥＰＬのバイト３は、例えば次のＣＰＵ属性を表す情報を含む。
【００７８】
予備：ＧＳＥＡＩのビット０は予備であり、１つの例では、保護ストレージ・イベントが認識されたときに、０に設定される。
【００７９】
ＤＡＴモード（Ｔ）６３２：ＧＳＥＡＩのビット１は、現在の動的アドレス変換（ＤＡＴ：dynamic address translation）モードを示す（すなわち、ＴビットはＰＳＷのビット５のコピーである）。
【００８０】
アドレス空間指示（ＡＳ）６３４：ＧＳＥＡＩのビット２〜３は、現在のアドレス空間制御を示す（すなわち、ＡＳフィールドはＰＳＷのビット１６〜１７のコピーである）。ＡＳフィールドは、ＤＡＴが有効化されている（すなわち、Ｔビットが１である）場合に意味を持ち、そうでない場合、ＡＳフィールドは予測不可能である。
【００８１】
アクセス・レジスタ数（ＡＲ）６３６：ＣＰＵがアクセス・レジスタ・モードである場合、ＧＳＥＡＩのビット４〜７は、イベントを引き起こすＬＧＧ命令またはＬＬＧＦＳＧ命令によって使用されるアクセス・レジスタ数を示す（すなわち、ＡＲフィールドは、ＬＧＧ命令またはＬＬＧＦＳＧ命令のＢ２フィールドのコピーである）。ＣＰＵがアクセス・レジスタ・モードでない場合、ＡＲフィールドは予測不可能である。
【００８２】
保護ストレージ・イベント・ハンドラ・アドレス（ＧＳＥＨＡ：Guarded Storage Event Handler Address）６４０：ＧＳＥＰＬのバイト８〜１５は、保護ストレージ・イベント・ハンドラ・アドレスを含む。ＧＳＥＨＡフィールドの内容は、プログラム状態ワード（ＰＳＷ）内の現在のアドレス指定モードの影響を受ける分岐アドレスであると見なされる。保護ストレージ・イベントが認識されたときに、ＧＳＥＨＡフィールドは、読み込み保護命令または読み込み論理およびシフト保護命令の実行を完了するために使用される分岐アドレスを形成する。
【００８３】
ＰＳＷ内の命令アドレスは、ＧＳＥＨＡの内容に置き換えられる。
【００８４】
保護ストレージ・イベント・ハンドラ・アドレスは、読み込み保護ストレージ制御命令の実行中にプログラムによって指定される。
【００８５】
保護ストレージ・イベントは、正常なプログラム・イベント記録（ＰＥＲ：program event recording）分岐イベントであると見なされる。例えばＰＳＷ内でＰＥＲが有効化されている場合、ＰＥＲ分岐アドレス制御は、例えば制御レジスタ９内で１であり、ＧＳＥＨＡは、例えば制御レジスタ１０および１１と比較される値である。
【００８６】
保護ストレージ・イベント命令アドレス（ＧＳＥＩＡ：Guarded Storage Event Instruction Address）６５０：ＧＳＥＰＬのバイト１６〜２３は、保護ストレージ・イベント命令アドレスを含む。保護ストレージ・イベントが認識された場合、イベントを引き起こす命令のアドレスがＧＳＥＩＡフィールドに格納される。ＧＳＥＩＡに配置されるアドレスは、例えば、読み込み保護命令または読み込み論理およびシフト保護命令のアドレスであるか、あるいはターゲットが読み込み保護命令または読み込み論理およびシフト保護命令である実行タイプ命令のアドレスである。
【００８７】
ＧＳＥＩＡフィールドの格納は、イベントが検出されたときの現在のアドレス指定モードの影響を受ける。２４ビット・アドレス指定モードでは、ＧＳＥＩＡのビット０〜３９は０に設定される。３１ビット・アドレス指定モードでは、ＧＳＥＩＡのビット０〜３２は０に設定される。
【００８８】
保護ストレージ・イベント・オペランド・アドレス（ＧＳＥＯＡ：Guarded Storage Event Operand Address）６６０：ＧＳＥＰＬのバイト２４〜３１は、保護ストレージ・イベント・オペランド・アドレスを含む。保護ストレージ・イベントが認識された場合、イベントを引き起こす読み込み保護命令または読み込み論理およびシフト保護命令の第２のオペランド・アドレスがＧＳＥＯＡフィールドに格納される。
【００８９】
ＧＳＥＯＡフィールドの格納は、イベントが検出されたときの現在のアドレス指定モードの影響を受ける。２４ビット・アドレス指定モードでは、ＧＳＥＯＡのビット０〜３９は０に設定される。３１ビット・アドレス指定モードでは、ＧＳＥＯＡのビット０〜３２は０に設定される。
【００９０】
保護ストレージ・イベントの認識に起因してトランザクション実行がアボートされた場合、ＧＳＥＯＡフィールドは、トランザクション実行中に形成されたオペランド・アドレスを含む。これは、オペランド・アドレスが、トランザクション実行中に変更された１つまたは複数の汎用レジスタを使用して形成された場合にも当てはまり、トランザクション実行がアボートされたときにレジスタが復元されたかどうかに関わらない。
【００９１】
保護ストレージ・イベント中間結果（ＧＳＥＩＲ：Guarded Storage Event Intermediate Result）６７０：ＧＳＥＰＬのバイト３２〜３９は、保護ストレージ・イベント中間結果を含む。保護ストレージ・イベントが認識された場合、読み込み保護命令または読み込み論理およびシフト保護命令によって形成された中間結果がＧＳＥＩＲフィールドに格納される。
【００９２】
保護ストレージ・イベントの認識に起因してトランザクション実行がアボートされた場合、ＧＳＥＩＲフィールドは、ＣＰＵがトランザクション実行モードを終了した後（例えば、トランザクションがアボートされた後）に第２のオペランドの位置から形成された中間結果を含む。
【００９３】
保護ストレージ・イベント復帰アドレス（ＧＳＥＲＡ：Guarded Storage Event Return Address）６８０：ＧＳＥＰＬのバイト４０〜４７は、保護ストレージ・イベント復帰アドレスを含む。
【００９４】
ＣＰＵがトランザクション実行モードである間に、保護ストレージ・イベントが認識された場合、トランザクション・アボートＰＳＷの命令アドレスがＧＳＥＲＡに配置される。制約付きトランザクション実行モードでは、命令アドレス（すなわち、ＧＳＥＲＡ）がＴＢＥＧＩＮＣ命令を指定する。制約なしトランザクション実行モードでは、命令アドレス（すなわち、ＧＳＥＲＡ）がＴＢＥＧＩＮ命令の次の命令を指定する。
【００９５】
ＣＰＵがトランザクション実行モードでない間に、保護ストレージ・イベントが認識された場合、ＧＳＥＲＡの内容はＧＳＥＩＡと同一である。
【００９６】
読み込み保護命令または読み込み論理およびシフト保護命令の実行中に、保護ストレージ・イベントが認識された場合、ＧＳＥＰＬがアクセスされる。保護ストレージ・イベントが認識された場合、複数のアクセスがＧＳＥＰＬの任意のフィールドに対して行われてよい。
【００９７】
保護ストレージ・イベント処理中のＧＳＥＰＬへのアクセスは、副作用アクセス（side effect accesses）と見なされる。ＧＳＥＨＡフィールドおよび予備フィールドを含んでいるＧＳＥＰＬのいずれかのバイトに関して、格納タイプ・アクセス例外（Store type access exceptions）が認識される。ＧＳＥＰＬへのアクセス中にアドレス指定以外のアクセス例外が認識された場合、副作用アクセスの指示（例えば、実位置１６８〜１７５での変換例外識別情報のビット５４）が１に設定され、保護ストレージ・イベントを引き起こす読み込み保護命令または読み込み論理およびシフト保護命令が無効化される。
【００９８】
ＤＡＴがオンである場合、ＣＰＵがアクセス・レジスタ・モードである場合を除き、ＧＳＥＰＬは現在のアドレス空間制御（ＡＳＣ：address space control）モードを使用してアクセスされ、アクセス・レジスタ・モードでは、ＧＳＥＰＬは一次アドレス空間内でアクセスされる。
【００９９】
３つの保護ストレージ・レジスタ（guarded storage registers）は、読み込み保護ストレージ制御命令および格納保護ストレージ制御命令を用いてそれぞれ設定され、検査されてよい。これらの命令ごとのストレージ・オペランドは、例えば３２バイトの保護ストレージ制御ブロック（ＧＳＣＢ：guarded storage control block）であり、保護ストレージ・レジスタの内容は、図１０に示されているように、このブロックの最後の３つの８バイト・フィールドを占める。
【０１００】
図に示されているように、１つの例では、保護ストレージ制御ブロック（ＧＳＣＢ）７００は、保護ストレージ指定レジスタの内容７０２、保護ストレージ・セクション・マスク・レジスタの内容７０４、およびＧＳＥパラメータ・リスト・アドレス・レジスタの内容７０６を含んでいる。
【０１０１】
ＧＳＣＢがダブルワード境界上でアライメントされた場合、これら３つの規定された各フィールドへのＣＰＵのアクセスは、ブロック・コンカレントになる。
【０１０２】
読み込み保護ストレージ制御命令の場合、ＧＳＣＢの予備のビット位置は、１つの例では０を含むべきであり、そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。
【０１０３】
格納保護ストレージ制御命令の場合、０以外の値が読み込まれる予備のビット位置には、０が格納されても格納されなくてもよく、ＧＳＤレジスタのＧＬＳフィールドおよびＧＳＣフィールドの予備の値は、モデルに依存する値に修正されても修正されなくてもよい。
【０１０４】
代替の実施形態では、ＧＳＥＰＬにおいて説明された値のうちの１つまたは複数は、代わりに追加のレジスタ内で保持され、ＧＳＣＢに含まれ、読み込み保護ストレージ制御命令および格納保護ストレージ制御命令によって読み込まれて格納されてよい。その他の例も存在する。
【０１０５】
一実施形態では、予想される使用法は、プログラムが保護ストレージ制御の確立と保護ストレージ・イベントの認識の間でＡＳＣモードを切り替えないことである。プログラムがＡＳＣモードを切り替える場合、１つの例では、ＧＳＥＰＬは、保護ストレージ制御が確立された空間内と、保護ストレージ・イベントが認識された空間内の両方で共通のアドレスにマッピングされるべきである。保護ストレージ・イベントがアクセス・レジスタ・モードにおいて認識された場合、保護ストレージ・イベント・ハンドラ・プログラムは、ＧＳＥＡＩフィールドを調べて、保護ストレージのオペランドにアクセスするための適切なＡＬＥＴ（アクセス・リスト・エントリ・トークン：access list entry token）を決定することが必要になることがある。
【０１０６】
さらに、保護ストレージ・イベントに起因して制約なしトランザクションがアボートされた場合、トランザクション・アボートＰＳＷからのアドレス指定モードが有効になる。保護ストレージ・イベントの時点で有効だったアドレス指定モードは、ＧＳＥパラメータ・リスト内のＧＳＥＡＭフィールドを検査することによって決定され得る。
【０１０７】
一実施形態では、アドレス指定モードは、制約付きトランザクションによって変更され得ない。したがって、一実施形態では、保護ストレージ・イベントに起因して制約付きトランザクションがアボートされた場合、アドレス指定モードは、ＴＢＥＧＩＮＣ命令が実行されたときと必然的に同じである。
【０１０８】
以下では、例えば読み込み保護、読み込み論理およびシフト保護、読み込み保護ストレージ制御、および格納保護ストレージ制御を含む、保護ストレージ機能の各命令のさらなる詳細が説明される。各命令は、ハードウェア／ソフトウェア・インターフェイスでの単一の設計されたマシン命令であってよい。さらに、各命令は複数のフィールドを含んでよい。一実施形態では、命令のフィールドは、互いに分離し、独立している。しかし、別の実施形態では、２つ以上のフィールドが結合されてよい。さらに、命令のフィールドに関連付けられた下付きの数字は、そのフィールドが適用されるオペランドを示す。例えば、下付きの１を有するすべてのフィールドは第１のオペランドに関連付けられ、下付きの２を有するすべてのフィールドは第２のオペランドに関連付けられる、などとなる。
【０１０９】
読み込み保護（ＬＧＧ）命令の一例が、図１１を参照して説明される。読み込み保護命令８００は、例えば、読み込み保護動作を指定するためのオペレーション・コード（オペコード）フィールド８０２ａ、８０２ｂ、レジスタ・フィールド（Ｒ１）８０４、インデックス・フィールド（Ｘ２）８０６、ベース・フィールド（Ｂ２）８０８、ならびに第１の変位（ＤＬ２）フィールド８１０ａおよび第２の変位（ＤＨ２）フィールド８１０ｂを含んでいる変位フィールドを含む。第２の変位フィールドおよび第１の変位フィールドの内容が連結されて、１つの例では、２０ビット符号付き２進整数として扱われる変位を提供する。
【０１１０】
Ｘ２８０６フィールドおよびＢ２８０８フィールドが、レジスタ０以外の汎用レジスタを指定している場合、各レジスタの内容が変位に追加されて、第２のオペランドを含んでいるストレージ内のアドレスを提供する。第２のオペランドは、例えばストレージ内のダブルワードである。１つの例では、第２のオペランド・アドレスがダブルワード境界でない場合、指定例外が認識され、動作が抑制される。
【０１１１】
読み込み保護命令の動作において、６４ビットの中間結果が次のように形成される。
【０１１２】
例えば、２４ビット・アドレス指定モードにおいて、中間結果は、４０個の２進ゼロと第２のオペランドのビット４０〜６３との連結から形成される。３１ビット・アドレス指定モードにおいて、中間結果は、３３個の２進ゼロと第２のオペランドのビット３３〜６３との連結から形成される。６４ビット・アドレス指定モードにおいて、中間結果は、第２のオペランド全体から形成される。
【０１１３】
保護ストレージ機能が有効化されている場合、一例として、保護ストレージ・イベント検出において中間結果が使用される。保護ストレージ・イベントが認識された場合、下でさらに説明されているように、汎用レジスタＲ１は変更されず、命令が完了する。
【０１１４】
保護ストレージ機能が有効化されていないか、または保護ストレージ機能が有効化されているが、保護ストレージ・イベントが認識されない場合、６４ビットの中間結果が汎用レジスタＲ１に配置され、命令が完了する。
【０１１５】
保護ストレージ・イベントが認識された場合、保護ストレージ・イベント・パラメータ・リスト（ＧＳＥＰＬ）がアクセスされる。格納タイプ・アクセス（Store type accesses）がＧＳＥＰＬ全体に適用される。条件コードは変更されない。
【０１１６】
上で示されたように、読み込み保護命令に加えて、保護ストレージ機能は、本発明の態様に従って、読み込み論理およびシフト保護命令を含む。読み込み論理およびシフト保護命令は、データをストレージから読み込み、データをシフト量だけシフトしてシフトされた値を取得し、このシフトされた値を使用して中間結果を取得し、この中間結果を使用して保護ストレージ検出を実行する、単一の命令（例えば、単一の設計されたハードウェア命令）である。
【０１１７】
１つの特定の例では、データは、例えば中間的な６４ビット値を形成するために、保護ストレージ指定レジスタで指定された数のビット位置だけ左にシフトされた、３２ビット値である。この６４ビット値は、アドレス指定モードに応じて調整される。すなわち、２４ビット・アドレス指定モードでは、ビット０〜３９が０に設定され、３１ビット・アドレス指定モードでは、ビット０〜３２が０に設定され、６４ビット・アドレス指定モードでは、値は変更されない。中間的な値の選択されたビットは、（ＧＳＤレジスタ内の）保護ストレージ原点と比較され、中間的な値のその他の選択されたビットは、保護ストレージ・セクション・マスク（ＧＳＳＭ）レジスタ内のビットをインデックスで示すために使用される。この比較が等しく、インデックスで示されたＧＳＳＭビットが１である場合、保護ストレージ・イベントが検出される。そうでない場合、命令は単に中間的な値をレジスタに読み込む。
【０１１８】
読み込み論理およびシフト保護（ＬＬＧＦＳＧ）命令の一例が、図１２を参照して説明される。読み込み論理およびシフト保護命令９００は、例えば、読み込み論理およびシフト保護動作を指定するためのオペコード・フィールド９０２ａ、９０２ｂ、レジスタ・フィールド（Ｒ１）９０４、インデックス・フィールド（Ｘ２）９０６、ベース・フィールド（Ｂ２）９０８、ならびに第１の変位（ＤＬ２）フィールド９１０ａおよび第２の変位（ＤＨ２）フィールド９１０ｂを含んでいる変位フィールドを含む。第２の変位フィールドおよび第１の変位フィールドの内容が連結されて、１つの例では、２０ビット符号付き２進整数として扱われる変位を提供する。
【０１１９】
Ｘ２９０６フィールドおよびＢ２９０８フィールドが、レジスタ０以外の汎用レジスタを指定している場合、各レジスタの内容が変位に追加されて、第２のオペランドを含んでいるストレージ内のアドレスを提供する。第２のオペランドは、例えばストレージ内のワードである。１つの例では、第２のオペランド・アドレスがワード境界上にない場合、指定例外が認識され、動作が抑制される。
【０１２０】
読み込み論理およびシフト保護命令の動作において、６４ビットの中間結果が次のように形成される。
【０１２１】
保護ストレージ機能が（例えば、制御レジスタ２のビット５９を用いて）有効化されている場合、保護読み込みシフト値（保護ストレージ指定レジスタのビット５３〜５５内のＧＬＳ）を使用して中間結果が形成される。保護ストレージ機能が有効化されていない場合、ＧＬＳ値は０であると仮定される。
【０１２２】
例えば、２４ビット・アドレス指定モードでは、中間結果は、４０個の２進ゼロ、第２のオペランドのビット（８＋ＧＬＳ）〜３１、およびＧＬＳ個の２進ゼロ（すなわち、ＧＬＳ個の０に等しい数値）の連結から形成される。３１ビット・アドレス指定モードでは、中間結果は、３３個の２進ゼロ、第２のオペランドのビット（１＋ＧＬＳ）〜３１、およびＧＬＳ個の２進ゼロの連結から形成される。６４ビット・アドレス指定モードでは、中間結果は、（３２−ＧＬＳ）個の２進ゼロ、３２ビットの第２のオペランド全体、およびＧＬＳ個の２進ゼロの連結から形成される。
【０１２３】
保護ストレージ機能が有効化されている場合、一例として、保護ストレージ・イベント検出において中間結果が使用される。保護ストレージ・イベントが認識された場合、下でさらに説明されているように、汎用レジスタＲ１は変更されず、命令が完了する。
【０１２４】
保護ストレージ機能が有効化されていないか、または保護ストレージ機能が有効化されているが、保護ストレージ・イベントが認識されない場合、６４ビットの中間結果が汎用レジスタＲ１に配置され、命令が完了する。
【０１２５】
保護ストレージ・イベントが認識された場合、保護ストレージ・イベント・パラメータ・リスト（ＧＳＥＰＬ）がアクセスされる。格納タイプ・アクセスがＧＳＥＰＬ全体に適用される。条件コードは変更されない。
【０１２６】
読み込み保護命令または読み込み論理およびシフト保護命令のいずれかの実行に伴って、次のプログラム例外が発生することがある：アクセス（第２のオペランドのフェッチ、保護ストレージ・イベントが認識された場合は、ＧＳＥＰＬフィールドのフェッチおよび格納）、演算（保護ストレージ機能がインストールされていない）、および指定。
【０１２７】
読み込み保護命令および読み込み論理およびシフト保護命令ごとの実行の優先度は、次のとおりである。
【０１２８】
１．〜７．  一般的なケースに関する、プログラム割り込み条件の優先度と同じ優先度を持つ例外。
【０１２９】
８．  ストレージ内の第２のオペランドに関するアクセス例外。
【０１３０】
９．  保護ストレージ・イベントが認識されない状態での完了。
【０１３１】
１０．  保護ストレージ・イベント・パラメータ・リストに関する、副作用アクセス例外。
【０１３２】
１１．  保護ストレージ・イベントが認識された状態での完了。
【０１３３】
読み込み論理およびシフト保護命令は、圧縮ポインタと呼ばれることがあるものの読み込みにおいて役立つことがあり、圧縮ポインタでは、ポインタ・アドレスの右端のいくつかのビットがストレージ内に存在せず、０であると仮定される。例えば、Ｊａｖａ（Ｒ）などのさまざまな言語は、アプリケーションのデータ・オブジェクトをストレージの整数境界上（すなわち、２のべき乗である境界上）に割り当てることがある。例えば、オブジェクトは、ワード（４バイト）境界、ダブルワード（８バイト）境界、またはクワッドワード（１６バイト）境界上に割り当てられることがある。オブジェクトがそのような境界に割り当てられる場合、オブジェクトのアドレスの右端のいくつかのビットは０である。プログラミングの効率のためには、３２ビット・ポインタを使用してそのようなオブジェクトへのポインタを表すのが有利であることがあるが、そうすることによって、６４ビット・アドレス指定モードで実行する場合でも、アドレス指定可能な範囲が４ギガバイトに制限される（または、３１ビット・アドレスを使用するｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の場合は、アドレス指定可能な範囲が２ギガバイトに制限される）。
【０１３４】
そのような（整数境界上でアライメントされた）オブジェクトの右端のいくつかのビットが０であることが分かっているため、ポインタを予想される０ビットの数だけ右にシフトすることによって、それらのビットを、メモリ内のポインタの表現から除外することができる。これによって、左端の対応する数のビットをストレージ内のポインタに追加することができ、このようにして、ポインタが、シフトされないポインタを使用して可能なメモリ量よりも大きいメモリ量をアドレス指定できるようにする。例えば、ポインタがダブルワードを示していることが分かっている場合、ポインタを３ビットだけ右にシフトすることによって、アドレス指定可能な範囲を左に３ビットだけ拡張することができ、このようにして、３２ビット・ポインタが、（シフトされないポインタを使用してアドレス指定できる４ギガバイトとは対照的に）最大３２ギガバイトのメモリまでアドレス指定できるようにする。さらに、ポインタが、ＣＰＵのメモリ・サブシステムで使用するために読み込まれた場合、そのポインタは、左に３ビットシフトされて、３５ビット・ポインタを形成する。
【０１３５】
プログラミング・モデルが同じ形式の圧縮ポインタを使用している（すなわち、圧縮ポインタがすべて同じビット数だけ右にシフトされている）と仮定すると、読み込みおよびシフト動作を実行する命令は、シフト量を指定するオペランドを含む必要がない。むしろこのシフト量は、まれに（例えば、タスクがディスパッチされたときに）しか読み込まれない、相対的に静的な値であり得る。一実施形態では、圧縮ポインタがシフトされるビット数は、保護ストレージ指定（ＧＳＤ）レジスタの保護読み込みシフト（ＧＬＳ）フィールドで指定される。別の実施形態では、このシフト量は、命令のオペランドで指定されてよい。その他の変形も可能である。
【０１３６】
保護ストレージ機能が構成においてインストールされている場合、保護ストレージ有効化制御（例えば、制御レジスタ２のビット５９）の内容に関わらず、読み込み保護（ＬＧＧ）命令および読み込み論理およびシフト保護（ＬＬＧＦＳＧ）命令を実行できる。しかし、保護ストレージ・イベントは、（ａ）ＧＳＥ制御が１であり、かつ（ｂ）保護ストレージ選択マスク（guarded storage selection mask）が０以外である場合に、ＬＧＧまたはＬＬＧＦＳＧの実行の結果として認識されてよい。保護ストレージ選択マスクは、ＧＳＥ制御が１になることなく、読み込まれない。
【０１３７】
保護ストレージ選択マスク（ＧＳＳＭ）の６４ビットがすべて０である場合、保護ストレージ・イベントは認識されない。プログラムは、（ａ）保護ストレージ制御を読み込まないことによって（その場合、ＧＳＳＭは０のリセット状態を含む）、または（ｂ）０をＧＳＳＭに読み込むことによって、保護ストレージ・イベントが認識されないことを保証できる。
【０１３８】
読み込み保護ストレージ制御（ＬＧＳＣ）命令の一例が、図１３を参照して説明される。読み込み保護ストレージ制御命令は、保護ストレージ・イベントの動作を制御するパラメータをＣＰＵに提供し、保護ストレージ・イベント発生時のＣＰＵの状態を表す情報をプログラムに提供する。
【０１３９】
図１３を参照すると、読み込み保護ストレージ制御命令１０００は、読み込み保護ストレージ制御動作を指定するためのオペコード・フィールド１００２ａ、１００２ｂ、レジスタ・フィールド（Ｒ１）１００４、インデックス・フィールド（Ｘ２）１００６、ベース・フィールド（Ｂ２）１００８、ならびに第１の変位（ＤＬ２）フィールド１０１０ａおよび第２の変位（ＤＨ２）フィールド１０１０ｂを含んでいる変位フィールドを含む。第２の変位フィールドおよび第１の変位フィールドの内容が連結されて、１つの例では、２０ビット符号付き２進整数として扱われる変位を提供する。
【０１４０】
Ｘ２１００６フィールドおよびＢ２１００８フィールドが、レジスタ０以外の汎用レジスタを指定している場合、各レジスタの内容が変位に追加されて、第２のオペランドを含んでいるストレージ内のアドレスを提供する。
【０１４１】
動作中に、第２のオペランド・アドレスでの保護ストレージ制御ブロック（ＧＳＣＢ）の内容が、３つの保護ストレージ・レジスタに読み込まれる。保護ストレージ制御ブロック（ＧＳＣＢ）の形式は、図１０に示されている。この命令のＲ１フィールドは予備であり、０を含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。
【０１４２】
ＧＳＣＢの３２バイトすべてに関して、アクセス例外が認識される。
【０１４３】
読み込まれているＧＳＤレジスタのＧＬＳフィールドまたはＧＳＣフィールドのいずれかが無効な値を含んでいる場合、またはこのレジスタの予備のビット位置が０を含んでいない場合、結果は予測不可能である。第２のオペランドが、（ａ）無効なＧＬＳ値またはＧＳＣ値、あるいは（ｂ）予備のビット位置での０以外の値を含んでいる場合、ＣＰＵが無効な値または０以外の値を修正された値に置き換えるかどうかは、モデルに依存する。さらに、そのような修正された値が、その後、格納保護ストレージ制御命令によって格納されるかどうかは、予測不可能である。
【０１４４】
保護ストレージ有効化制御（例えば、制御レジスタ２のビット５９）が０である場合、特殊演算例外が認識され、動作が抑制される。
【０１４５】
条件コードは変更されず、次のプログラム例外が発生することがある：アクセス（第２のオペランドのフェッチ）、演算（保護ストレージ機能がインストールされていない場合）、特殊演算、およびトランザクション制約。
【０１４６】
ＧＳＤレジスタのＧＳＣフィールドが無効な値を含んでいる場合、保護ストレージ・イベントが発生しないことがあるか、または誤った保護ストレージ・イベントが検出されることがある。
【０１４７】
ＧＳＤレジスタのＧＬＳフィールドが無効な値を含んでいる場合、読み込み論理およびシフト保護命令によって使用される中間結果が、予測不可能なビット数だけシフトされて、第２のオペランド内のビットの予測不可能な範囲から形成されることがある。
【０１４８】
格納保護ストレージ制御命令の一例が、図１４を参照して説明される。格納保護ストレージ制御命令１１００は、例えば、格納保護ストレージ制御動作を指定するためのオペコード・フィールド１１０２ａ、１１０２ｂ、レジスタ・フィールド（Ｒ１）１１０４、インデックス・フィールド（Ｘ２）１１０６、ベース・フィールド（Ｂ２）１１０８、ならびに第１の変位（ＤＬ２）フィールド１１１０ａおよび第２の変位（ＤＨ２）フィールド１１１０ｂを含んでいる変位フィールドを含む。第２の変位フィールドおよび第１の変位フィールドの内容が連結されて、１つの例では、２０ビット符号付き２進整数として扱われる変位を提供する。
【０１４９】
Ｘ２１１０６フィールドおよびＢ２１１０８フィールドが、レジスタ０以外の汎用レジスタを指定している場合、各レジスタの内容が変位に追加されて、第２のオペランドを含んでいるストレージ内のアドレスを提供する。
【０１５０】
動作中に、３つの保護ストレージ・レジスタの内容が第２のオペランドの位置に格納される。第２のオペランドは、図１０に示されている保護ストレージ制御ブロック（ＧＳＣＢ）の形式を含む。一実施形態では、ＧＳＣＢの最初の８バイトに０が格納される。
【０１５１】
ＧＳＣＢの３２バイトすべてに関して、アクセス例外が認識される。
【０１５２】
この命令のＲ１フィールドは予備であり、０を含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。
【０１５３】
保護ストレージ有効化制御（例えば、制御レジスタ２のビット５９）が０である場合、特殊演算例外が認識され、命令が抑制される。
【０１５４】
条件コードは変更されず、次のプログラム例外が発生することがある：アクセス（第２のオペランドの格納）、演算（保護ストレージ機能がインストールされていない場合）、特殊演算、およびトランザクション制約。
【０１５５】
命令ごとに、さまざまなフィールドおよびレジスタが説明されたが、本発明の１つまたは複数の態様は、その他のより多いか、またはより少ないフィールドまたはレジスタ、あるいはその他のサイズのフィールドおよびレジスタなどを使用してよい。多くの変形が可能である。例えば、命令の明示的に指定されるレジスタまたはフィールドの代わりに、暗黙のレジスタが使用されてよい。やはり、その他の変形も可能である。
【０１５６】
前述した命令またはレジスタあるいはその両方のうちの１つまたは複数が、保護ストレージ・イベントを検出するために使用される保護ストレージ・イベント検出において採用されてよい。図１５に示されているように、一実施形態では、保護ストレージ・イベント検出１２００は、例えば保護ストレージ・オペランド被比較数（ＧＳＯＣ：guarded storage operand comparand）１２０４および保護ストレージ・マスク・インデックス（ＧＳＭＸ：guarded storage mask index）１２０６を含む、例えば読み込み保護（ＬＧＧ）命令または読み込み論理およびシフト保護（ＬＬＧＦＳＧ）命令の中間結果１２０２から形成される２つの値を使用する。
【０１５７】
保護ストレージ・オペランド被比較数（ＧＳＯＣ）１２０４は、読み込み保護命令または読み込み論理およびシフト保護命令の中間結果から形成される。例えば、ＧＳＯＣは、中間結果のビット位置０〜（６３−ＧＳＣ）をすべて含む（ＧＳＣは、例えば保護ストレージ指定レジスタのビット位置５８〜６３内の、保護ストレージ特性である）。
【０１５８】
ＧＳＯＣは、保護ストレージ特性１２１６も含んでいるＧＳＤレジスタ１２１４の対応するビット位置での保護ストレージ原点１２１２（ＧＳＯ）と比較される（１２１０）。ＧＳＯＣがＧＳＯに等しくない場合、保護ストレージ・イベントが認識されず、中間結果を汎用レジスタＲ１に配置することによって、読み込み保護命令または読み込み論理およびシフト保護命令の実行が完了する。
【０１５９】
ＧＳＯＣがＧＳＯ１２２０に等しい場合、ＧＳＯＣの右にある中間結果の６ビットが、保護ストレージ・マスク・インデックス（ＧＳＭＸ）と呼ばれる符号なし２進整数を形成する。ＧＳＭＸに対応する保護ストレージ・セクション・マスク（ＧＳＭＸ）レジスタ１２２６のセクション保護ビット（Ｇ）１２２４が調べられる（１２２２）。セクション保護ビットが０である場合、保護ストレージ・イベントが認識されず、中間結果を汎用レジスタＲ１に配置することによって、読み込み保護命令または読み込み論理およびシフト保護命令の実行が完了する。しかし、セクション保護ビットが１である場合、保護ストレージ・イベントが認識される（１２２８）。
【０１６０】
例えば、（ａ）（例えば、制御レジスタ２のビット５９を用いて）保護ストレージ機能が有効化されていないか、または（ｂ）保護ストレージ・セクション・マスク（ＧＳＳＭ）レジスタのすべてのビット位置が０を含んでいる場合、保護ストレージ・イベント検出は実行されない。
【０１６１】
一実施形態では、マシン・チェックで、またはアドレス演算での信号プロセッサ（ＳＩＧＰ）の格納追加状態（store additional status）で、保護ストレージ制御が取得され得る。例えば、マシン・チェックがＣＰＵで発生した場合、ＣＰＵの設計されたレジスタ・コンテキストがストレージに記録される。設計されたレジスタ・コンテキスト（プログラム状態ワード（ＰＳＷ）、汎用レジスタ、アクセス・レジスタ、制御レジスタ、浮動小数点レジスタ、浮動小数点制御レジスタ、クロック比較器、ＣＰＵタイマ、ＴＯＤ（時刻：Time-Of-Day）プログラム可能レジスタ、停止イベント・アドレス・レジスタ、およびプレフィックス・レジスタを含む）のほとんどは、実ストレージの下位２ブロック内の割り当てられたストレージ位置に（すなわち、プレフィックス領域に）格納される。さらに、アーキテクチャは、本発明の態様に従って保護ストレージ・レジスタを含む追加情報を保存するために、プレフィックス領域に隣接していないマシン・チェック拡張保存領域（ＭＣＥＳＡ：machine check extended save area）を含むように拡張されている。
【０１６２】
図１６に示されているように、１つの例では、マシン・チェック拡張保存領域１３００は、保存された情報を示す内容１３０４を含んでいる。１つの例では、この内容のオフセットが１３０２に示されており、格納される拡張保存領域の量は、１３０６に示されている長さ特性（ＬＣ：length characteristic）に基づく。
【０１６３】
１つの例では、内容１３０４は、保護ストレージ指定レジスタの内容１３０６、保護ストレージ・セクション・マスク・レジスタの内容１３０８、および保護ストレージ・イベント・パラメータ・リスト・レジスタの内容１３１０を含んでいる、保護ストレージ・レジスタの内容を含む。１つの例では、保護ストレージ・レジスタは、保護ストレージ制御ブロックの形式と同じ形式で格納される。
【０１６４】
マシン・チェック拡張保存領域の位置１０２４〜１０５５の内容の有効性は、例えば、保護ストレージ・レジスタ有効性ビット（guarded storage register validity bit）（例えば、実位置２３２〜２３９に格納されたマシン・チェック割り込みコード（ＭＣＩＣ：machine check interruption code）のビット３６）によって示される。このビットは、１である場合、これらの位置の内容が、割り込みの時点での保護ストレージ・レジスタの正しい状態を反映していることを示す。
【０１６５】
マシン・チェック拡張保存領域は、マシン・チェック拡張保存領域指定（ＭＣＥＳＡＤ）によって指定され、マシン・チェック拡張保存領域指定の例が図１７に示されている。マシン・チェック拡張保存領域指定１３５０は、例えば、マシン・チェック拡張保存領域の原点を示すために使用されるマシン・チェック拡張保存領域原点（ＭＣＥＳＡＯ：machine check extended save area origin）１３５２、ならびにＭＣＥＳＡのサイズおよびアライメントを表す長さ特性（ＬＣ）１３５４を含む。
【０１６６】
１つの例では、長さ特性は２のべき乗であり、長さ特性の影響は、例えば以下を含む。
【０１６７】
＊  保護ストレージ機能がインストールされていない場合、または保護ストレージ機能がインストールされているが、ＬＣフィールドが０である場合、マシン・チェック拡張保存領域のサイズは、１，０２４バイトであると仮定され、これによって、保護ストレージ機能を認識しない古いソフトウェアの互換性のある動作を保証する。
【０１６８】
＊  保護ストレージ機能がインストールされていて、ＬＣフィールドが例えば１〜９のいずれかの値である場合、エラーであると仮定され、ＭＣＥＳＡＯ全体が０を含んでいる（すなわち、ＭＣＥＳＡは格納されない）かのように扱われる。
【０１６９】
＊  保護ストレージ機能がインストールされていて、ＬＣフィールドが例えば１０以上の値を含んでいる場合、ＭＣＥＳＡのサイズおよびアライメントは２ＬＣバイトである。その場合、ＭＣＥＳＡＤのビット０〜６３−ＬＣがマシン・チェック拡張保存領域原点（ＭＣＥＳＡＯ）を形成する。ＭＣＥＳＡＯは、ＬＣ個の０ビットが右に追加されて、マシン・チェック拡張保存領域の６４ビット・アドレスを形成する。
【０１７０】
マシン・チェック拡張保存領域と同様に、保護ストレージ機能がインストールされている場合、ＣＰＵの選択されたレジスタの内容を取得するために使用される、例えば信号プロセッサ（ＳＩＧＰ）命令のパラメータ・レジスタが、追加の状態情報を含むように拡張される。図１８に示されているように、アドレス命令での格納追加状態のためのＳＩＧＰパラメータ・レジスタ１３８０は、追加領域の原点を示すために使用される追加状態領域原点（additional status area origin）１３８２および追加状態領域のサイズおよびアライメントを表す長さ特性（ＬＣ）１３８４を含んでいる。
【０１７１】
１つの例では、保護ストレージ機能がインストールされているときに、予備のＬＣ値が指定された場合、またはパラメータ・レジスタ内のいずれかの予備のビット位置が０でない場合、ＳＩＧＰ命令が、アドレス指定されたＣＰＵによって許容されず、ＳＩＧＰ命令のＲ１フィールドによって指定された状態レジスタ内で、無効なパラメータ・ビット（例えば、ビット５５）が示され、条件コード１を設定することによって命令が完了する。
【０１７２】
以下では、保護ストレージ・イベントに関連付けられた処理に関するさらなる詳細が、説明される。一部の処理は、プロセッサの実行モードに応じて変わる。例えば、プロセッサは、非トランザクション実行モードまたはトランザクション実行モードであることがある。さらに、プロセッサは、トランザクション・モードである場合、制約なしトランザクション・モードまたは制約付きトランザクション・モードであることがあり、処理がそれに応じて変わってよい。特定の詳細はｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）を参照して説明されているが、１つまたは複数の態様が、その他のアーキテクチャに適用される。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）は、一例にすぎない。
【０１７３】
ＣＰＵがトランザクション実行モードである間に、保護ストレージ・イベントが認識された場合、以下が発生する。
【０１７４】
１．  トランザクションが、例えばアボート・コード１９を伴って、アボートされる。トランザクション診断ブロック（ＴＤＢ）アドレスが有効でない場合、またはＴＤＢアドレスが有効でアクセス可能である場合、トランザクション・アボートＰＳＷ内で、一例として、条件コード２が設定される。ＴＤＢアドレスが有効であるが、ＴＤＢがアクセス可能でない場合、トランザクション・アボートＰＳＷ内で、一例として、条件コード１が設定される。
【０１７５】
２．  モデルに応じて、読み込み保護命令または読み込み論理およびシフト保護命令の第２のオペランドが再フェッチされて、保護ストレージ・イベント条件がまだ存在するかどうかを判定してよい。
【０１７６】
・  第２のオペランドが再フェッチされ、保護ストレージ・イベント条件が存在しなくなった場合、トランザクション・アボートＰＳＷの読み込みによって、正常なトランザクション・アボート処理が完了する。この場合、保護ストレージ・イベント処理は発生しない。
【０１７７】
・  第２のオペランドが再フェッチされない場合、または第２のオペランドが再フェッチされ、保護ストレージ・イベント条件が持続している場合、本明細書に記載されているように、（トランザクション・アボートＰＳＷを読み込む代わりに）保護ストレージ・イベント処理が発生する。（すなわち、保護ストレージ機能なしで、トランザクション実行がアボートされた場合、制御が、トランザクション・アボートＰＳＷによって指定された命令に渡される。制約なしトランザクションの場合、この命令は、トランザクション実行を開始した最も外側のＴＢＥＧＩＮ命令に続く命令である。通常、この命令は制御をトランザクション・アボート・ハンドラに移動し、このトランザクション・アボート・ハンドラは、プログラム条件を変更し、トランザクション実行でのその後の試みを成功させることができる可能性がある。制約付きトランザクションの場合、トランザクション・アボートＰＳＷは、ＴＢＥＧＩＮＣ命令を指定する。したがって、トランザクションは、アボート・ハンドラからの介入なしで再実行される。）トランザクション実行中にＧＳＥが認識された場合、トランザクションがアボートされる。ＧＳＥを解決しないでトランザクションを再実行することは、生産的ではない。したがって、トランザクション・アボートの後に、制御がＧＳＥハンドラに渡され、本明細書に記載されているように、ＧＳＥハンドラがイベントを管理する。
【０１７８】
その場合、ＧＳＥＣＩフィールド内のＴＸビットが設定され、ＣＰＵが制約付きトランザクション実行モードだった場合は、ＣＸビットも設定される。
【０１７９】
保護ストレージ・イベントが発生した場合、ＧＳＥ命令アドレス（ＧＳＥＩＡ）は、このイベントを引き起こしたＬＧＧ命令またはＬＬＧＦＳＧ命令のアドレスを含む。通常、プログラムは、ＧＳＥを解決した後に、このアドレスに分岐して戻り、このイベントを最初に引き起こしたオブジェクトへのアクセスを続行しようと試みることができる。しかし、トランザクション実行（ＴＸ：transactional execution）モードでは、保護ストレージ・イベントによってトランザクションがアボートされ、ＬＧＧ／ＬＬＧＦＳＧ命令に分岐して戻ることは、ＧＳＥをもたらすトランザクション内の他の命令が破棄されているため、不適切である。したがって、本発明の態様に従って、ＧＳＥに起因するアボートに基づき、処理は、例えば、ＧＳＥを解決するためのトランザクション・アボートの後にＧＳＥハンドラに分岐することと、ＣＰＵがトランザクション・モードだったことの指示をＧＳＥハンドラに提供することと、ＧＳＥハンドラがトランザクションを再実行できるように、ＧＳＥを引き起こすトランザクションを開始したＴＢＥＧＩＮ／ＴＢＥＧＩＮＣ命令のアドレスを提供することとを含む。
【０１８０】
保護ストレージ・イベントが認識されたときに、ＣＰＵがトランザクション実行モードだったかどうかに関わらず、保護ストレージ・イベント・パラメータ・リスト・アドレス（ＧＳＥＰＬＡ）レジスタが、保護ストレージ・イベント・パラメータ・リスト（ＧＳＥＰＬ）の位置を特定するために使用される。ＧＳＥＰＬＡレジスタの内容は６４ビット・アドレスであり、現在のアドレス指定モードに関わらず、６４ビットのアドレスが使用される。ＧＳＥＰＬは、現在の変換モードを使用してアクセスされるが、ＣＰＵがアクセス・レジスタ・モードである場合に、ＧＳＥＰＬが一次アドレス空間を使用してアクセスされるということを除く。
【０１８１】
ＧＳＥＰＬにアクセスしているときに、アクセス例外が認識された場合、処理は次のようになる。
【０１８２】
・  プログラム割り込みが発生する。
【０１８３】
・  ＣＰＵがトランザクション実行モードでない場合、プログラムの旧ＰＳＷ内の命令アドレスが次のように設定される。
【０１８４】
−  例外条件が無効化をもたらす場合、命令アドレスは、保護ストレージ・イベントを引き起こす命令を指す（すなわち、例えば、ＬＧＧまたはＬＬＧＦＳＧのアドレス、あるいはターゲットがＬＧＧまたはＬＬＧＦＳＧである実行タイプ命令のアドレス）。
【０１８５】
−  例外条件が抑制または終了をもたらす場合、命令アドレスは、保護ストレージ・イベントを引き起こした命令に続く次の順次命令を指す。
【０１８６】
ＣＰＵがトランザクション実行モードだった場合、トランザクション・アボートＰＳＷがプログラムの旧ＰＳＷに配置される。
【０１８７】
・  アドレス指定を除くすべてのアクセス例外条件の場合、副作用アクセスの指示（例えば、実位置１６８〜１７５での変換例外識別情報（ＴＥＩＤ：translation exception identification）のビット５４）が、１に設定される（アドレス指定例外の場合、ＴＥＩＤは格納されない）。
【０１８８】
・  ＧＳＥＰＬがアクセス可能でない場合、後述される残りの保護ストレージ・イベント処理は発生しない。
【０１８９】
ＧＳＥＰＬがアクセス可能である場合、ＧＳＥＰＬのフィールドを使用して以下の動作が実行される。
【０１９０】
・  ＧＳＥＰＬのバイト０および４〜７が０に設定される。
【０１９１】
・  アドレス指定モードの指示が、次のように保護ストレージ・イベント・アドレス指定モード（ＧＳＥＡＭ、ＧＳＥＰＬのバイト１）に配置される。
【０１９２】
−  ＧＳＥＡＭのビット０〜５が０に設定される。
【０１９３】
−  保護ストレージ・イベントが認識された時点で、ＧＳＥＡＭのビット６および７が、ＰＳＷのビット３１および３２に設定される。
【０１９４】
・  イベントの原因の指示が、次のように保護ストレージ・イベント原因指示フィールド（ＧＳＥＣＩ、ＧＳＥＰＬのバイト２）に配置される。
【０１９５】
−  保護ストレージ・イベントが認識されたときに、ＣＰＵがトランザクション実行モードだった場合、ＧＳＥＣＩのビット０が１に設定され、そうでない場合、バイト２のビット０が０に設定される。
【０１９６】
−  保護ストレージ・イベントが認識されたときに、ＣＰＵが制約付きトランザクション実行モードだった場合、ＧＳＥＣＩのビット１が１に設定され、そうでない場合、ＧＳＥＣＩのビット１が０に設定される。
【０１９７】
−  ＧＳＥＣＩのビット２〜６が０に設定される。
【０１９８】
−  ＧＳＥＣＩのビット７が、保護ストレージ・イベントを引き起こした命令を指定するように設定される。例えば、０の値は、イベントがＬＧＧ命令によって引き起こされたことを意味し、１の値は、イベントがＬＬＧＦＳＧ命令によって引き起こされたことを意味する。
【０１９９】
・  ＰＳＷ  ＤＡＴ、アドレス指定モード、およびアドレス空間制御の指示が、次のように保護ストレージ・イベント・アクセス指示フィールド（ＧＳＥＡＩ、ＧＳＥＰＬのバイト３）に配置される。
【０２００】
−  ＧＳＥＡＩのビット０は予備であり、０に設定される。
【０２０１】
−  現在の変換モード（ＰＳＷのビット５）が、ＧＳＥＡＩのビット１に配置される。
【０２０２】
−  ＤＡＴがオンである場合、ＰＳＷのビット１６〜１７が、ＧＳＥＡＩのビット２〜３に配置される。ＤＡＴがオフである場合、ＧＳＥＡＩのビット２〜３は予測不可能である。
【０２０３】
−  ＣＰＵがアクセス・レジスタ・モードである場合、イベントを引き起こすＬＧＧ命令またはＬＬＧＦＳＧ命令のＢ２フィールドに対応するアクセス・レジスタ数が、ＧＳＥＡＩのビット４〜７に配置される。ＣＰＵがＡＲモードでない場合、ＧＳＥＡＩのビット４〜７は予測不可能である。
【０２０４】
・  ＰＳＷ内の命令アドレスが、保護ストレージ・イベント・ハンドラ・アドレス・フィールド（ＧＳＥＨＡ、ＧＳＥＰＬのバイト８〜１５）の内容に置き換えられる。ＧＳＥＨＡフィールドは、分岐アドレスであると見なされる。現在のアドレス指定モードは変更されない。
【０２０５】
・  保護ストレージ・イベントを引き起こす命令のアドレスが、保護ストレージ・イベント命令アドレス・フィールド（ＧＳＥＩＡ、ＧＳＥＰＬのバイト１６〜２３）に配置される。ＧＳＥＩＡに配置されるアドレスは、例えば、ＬＧＧ命令またはＬＬＧＦＳＧ命令のアドレス、あるいはターゲットがＬＧＧまたはＬＬＧＦＳＧである実行タイプ命令のアドレスである。ＧＳＥＩＡは、停止イベント・アドレス・レジスタにも配置される。
【０２０６】
・  ＬＧＧ命令またはＬＬＧＦＳＧ命令の第２のオペランド・アドレスが、保護ストレージ・イベント・オペランド・アドレス（ＧＳＥＯＡ、ＧＳＥＰＬのバイト２４〜３１）に配置される。保護ストレージ・イベントの認識に起因してトランザクション実行がアボートされた場合、ＧＳＥＯＡフィールドは、トランザクション実行中に形成されたオペランド・アドレスを含む。
【０２０７】
・  ＬＧＧ命令またはＬＬＧＦＳＧ命令の中間結果が、保護ストレージ・イベント中間結果フィールド（ＧＳＥＩＲ、ＧＳＥＰＬのバイト３２〜３９）に配置される。保護ストレージ・イベントの認識に起因してトランザクション実行がアボートされた場合、ＧＳＥＩＲフィールドは、保護ストレージ・オペランド・アドレス（ＧＳＥＯＡ）フィールドを使用して形成される。しかし、トランザクション実行中に保護ストレージ・イベントが認識された場合、ＧＳＥＩＲが、トランザクションにおいてフェッチされた値を含むのか、それともトランザクションがアボートされた後にフェッチされた値を含むのかは、モデルに依存する。
【０２０８】
・  トランザクションがアボートされた後に、ＧＳＥ中間アドレス（GSE intermediate address）（すなわち、ＬＧＧまたはＬＬＧＦＳＧによって読み込まれたポインタ）が形成される。一実施形態では、トランザクション中に、ＬＧＧ／ＬＬＧＦＳＧのオペランドがトランザクションにおいて変更された場合、ＧＳＥＩＡはそれらの変更を示さない。
【０２０９】
・  保護ストレージ・イベントが認識されたときに、ＣＰＵがトランザクション実行モードだった場合、トランザクション・アボートＰＳＷの命令アドレスが、保護ストレージ・イベント復帰アドレス・フィールド（ＧＳＥＲＡ、ＧＳＥＰＬのバイト４０〜４７）に配置される。ＣＰＵが制約付きトランザクション実行モードだった場合、ＧＳＥＲＡは、ＴＢＥＧＩＮＣ（制約付きトランザクション開始）命令を指定する。ＣＰＵが制約なしトランザクション実行モードだった場合、ＧＳＥＲＡは、ＴＢＥＧＩＮ（トランザクション開始）命令に続く命令を指定する。ＧＳＥ処理の後に、ハンドラは、このアドレスに分岐してトランザクションを再試行することができる。
【０２１０】
保護ストレージ・イベントが認識されたときに、ＣＰＵがトランザクション実行モードでなかった場合、ＧＳＥＲＡフィールドの内容は、ＧＳＥＩＡフィールドの内容と同一である。
【０２１１】
最後に、ＬＧＧ命令またはＬＬＧＦＳＧ命令は、汎用レジスタＲ１を変更せずに完了したと見なされる。
【０２１２】
本明細書に記載されているように、ストレージ再利用またはガベージ・コレクションと呼ばれるストレージ合体技術（storage coalescing technique）を実装するプログラミング言語は、保護ストレージ機能から恩恵を受けることができる。そのようなプログラミング・モデルでは、最初にポインタをオブジェクトに読み込むことによって、プログラム・オブジェクトへの参照が実行される。読み込み保護命令および読み込み論理およびシフト保護命令は、プログラムがポインタをオブジェクトに読み込んで、このポインタが使用可能であるかどうかを判定できるようにする、手段を提供する。保護ストレージ・イベント（ＧＳＥ）が認識されない場合、このポインタを使用してオブジェクトを参照することができる。しかし、ＧＳＥが認識された場合、それは、現在のポインタが、再編成されているストレージ位置を指定しているということを示していることがあり、その場合、オブジェクトは他の場所に再配置されていることがある。その後、ＧＳＥハンドラ・ルーチンが、オブジェクトの新しい位置を指定するようにポインタを変更してから、ＧＳＥＩＡによって指定された位置に分岐して、正常なプログラム実行を再開することができる。
【０２１３】
ＣＰＵがトランザクション実行モードであるときに、認識されたＧＳＥに応答して、プログラムのＧＳＥハンドラは、イベントを引き起こした条件を修正して（すなわち、ＬＧＧまたはＬＬＧＦＳＧのオペランドを更新して）から、ＧＳＥＲＡによって指定された位置に分岐することによって、トランザクションを再実行しようとすることができる。制約なしトランザクション実行がアボートされた場合、プログラムは、ＧＳＥＲＡに分岐する前に、イベントを引き起こしている条件が修正されているかどうかに応じて、条件コードを２または３にそれぞれ設定する。制約付きトランザクション実行がアボートされた場合、プログラムは、イベントを引き起こしている条件が修正されていない限り、ＧＳＥＲＡによって指定された位置に分岐しない。そうしないと、プログラムのループが発生することがある。
【０２１４】
保護ストレージ・イベント中間結果（ＧＳＥＩＲ）フィールドの信頼できる内容を保証するために、トランザクション実行モードでのプログラム実行では、同じトランザクション内でその後実行される読み込み保護命令の第２のオペランドの位置を変更する場合、（非トランザクション格納アクセスを実行する）非トランザクション格納命令を使用する。
【０２１５】
ＰＳＷ命令アドレスを変更する他の命令と同様に、保護ストレージ・イベントの後に、（ＧＳＥＨＡフィールドから読み込まれた）ＰＳＷ命令アドレスが奇数である場合、指定例外が認識される。
【０２１６】
ＧＳＥ処理中に、ＣＰＵは、保護ストレージ・イベント・パラメータ・リスト（ＧＳＥＰＬ）を更新しようとしているときに、アクセス例外を認識することがある。例えばオペレーティング・システムによってＧＳＥＰＬが一時的に補助ストレージにページアウトすることに起因する、そのようなアクセス例外は、全く無害であることがある。オペレーティング・システムが例外を修正すると仮定すると、オペレーティング・システムは、プログラムの旧ＰＳＷを読み込んで、割り込まれたプログラムの実行を再開する。
【０２１７】
ＧＳＥＰＬにアクセスしているときに、アクセス例外が認識された場合、ＣＰＵはトランザクション実行モードではなく、１つの例では、プログラムの旧ＰＳＷの命令アドレスが次のように設定される。
【０２１８】
・  例外が無効化をもたらした場合、命令アドレスは、例えば、ＧＳＥを引き起こしたＬＧＧ命令またはＬＬＧＦＳＧ命令（または、ＬＧＧまたはＬＬＧＦＳＧであるオペランドを持つ実行タイプ命令）を指す。
【０２１９】
・  例外が抑制または終了をもたらした場合、命令アドレスは、抑制する例外または終了する例外のＧＳＥを引き起こした命令に続く次の順次命令を指す。
【０２２０】
ＧＳＥＰＬにアクセスしているときに、アクセス例外が認識され、ＣＰＵが制約なしトランザクション実行モードだった場合、プログラムの旧ＰＳＷは、最も外側のＴＢＥＧＩＮに続く命令を指定し、ＣＰＵが制約付きトランザクション実行モードだった場合、プログラムの旧ＰＳＷは、ＴＢＥＧＩＮＣ命令を指定する。
【０２２１】
ＣＰＵが制約なしトランザクション実行モードだった場合に、ＴＤＢ（トランザクション診断ブロック）が格納されていれば、アボート・コード１９が、ＧＳＥに起因してトランザクション実行がアボートされたことを示す。しかし、トランザクション・アボート・ハンドラ・ルーチンは、アボート・コード１９が、ＧＳＥハンドラ・ルーチンがＧＳＥの原因を修正したことを必然的に示しているということを、仮定できない（ＧＳＥＰＬにアクセスしているときの、アクセス例外条件の可能性があるため）。この状況では、アボート・ハンドラ・ルーチンは、オペレーティング・システムによる１つまたは複数の変換例外の解決を可能にするため、およびＧＳＥハンドラがＧＳＥの原因を修正できるようにするために、トランザクションを複数回再実行してよい。
【０２２２】
上では、保護ストレージ機能の動作を調整する制御を読み込み、格納するための命令を含む、コンピューティング環境内の処理を容易にするために使用される保護ストレージ機能が説明された。本発明の１つまたは複数の態様は、コンピュータ技術に密接に関係しており、コンピュータ内の処理を容易にし、その性能を改善する。
【０２２３】
コンピューティング環境内の処理を容易にすることに関連する本発明の態様の一実施形態が、図１９〜２０を参照して説明される。図１９を参照すると、１つの例では、読み込みおよびシフト動作を実行するための命令が取得され（１４００）、この命令が実行される（１４０２）。この実行することは、例えば、データ（例えば、ポインタ）をメモリ内の位置から読み込むことであって、このメモリ内の位置が、命令に関連付けられた１つまたは複数のフィールドによって指定される、読み込むことと（１４０４）、データをシフト量だけ（例えば左に）シフトして、シフトされた値を取得することと（１４０６）、このシフトされた値を使用して中間結果を取得することと（１４０８）、この中間結果に基づいて保護ストレージ検出を実行することと（１４１０）を含む。
【０２２４】
一実施形態では、保護ストレージ検出を実行することは、中間結果の第１の部分を保護ストレージ領域の原点と比較することと（１４１１）、保護ストレージ領域の特定のセクションが保護されているかどうかを判定することであって、中間結果の第２の部分を使用する、判定することと（１４１２）、比較することが特定の結果を示すこと、および判定することが特定のセクションが保護されていることを示すこと、に基づいて、保護ストレージ・イベントを検出することと（１４１４）を含む。
【０２２５】
保護ストレージ検出を実行することは、一実施形態では、比較、および保護ストレージ・イベントを検出していないことの決定に基づいて、中間結果を、命令によって指定された選択された位置（例えば、命令のフィールドによって指定されたレジスタ）に配置することをさらに含む（１４１６）。
【０２２６】
さらに、一実施形態では、図２０を参照すると、シフト量は、保護ストレージ領域の１つまたは複数の属性を指定するために使用されるレジスタから取得される（１４２０）。
【０２２７】
さらに、１つの例では、中間結果を取得することは、命令を実行するプロセッサのアドレス指定モードに基づいて、シフトされた値を調整することを含む（１４２２）。
【０２２８】
さらに別の実施形態では、読み込まれるデータのメモリ内の位置が決定され（１４３０）、この決定することが、例えば、命令のインデックス・フィールド、ベース・フィールド、および変位フィールドを使用することを含む（１４３２）。
【０２２９】
１つの特定の例として、命令は、読み込み論理およびシフト保護動作を示すオペレーション・コードと、保護ストレージ・イベントが検出されなかったことの決定に基づいて結果を配置するためのレジスタを指定するレジスタ・フィールドと、メモリ内の位置を決定するための複数のフィールドとを含んでいる、単一の設計された命令である（１４４０）。
【０２３０】
多くの変形が可能である。
【０２３１】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【０２３２】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-only memory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
【０２３３】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【０２３４】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide area network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【０２３５】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【０２３６】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【０２３７】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータ実装プロセスを生成するべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれ、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【０２３８】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも留意されたい。
【０２３９】
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、１つまたは複数の態様が提供されること、提示されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、１人または複数人の顧客のために１つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、１つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
【０２４０】
１つの態様では、１つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。１つの例として、アプリケーションのデプロイは、１つまたは複数の実施形態を実行するよう動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０２４１】
別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・インフラストラクチャでは、コンピューティング・システムと組み合わせたコードが、１つまたは複数の実施形態を実行できる。
【０２４２】
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が１つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、１つまたは複数の実施形態を実行できる。
【０２４３】
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、１つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、異なる命令、命令形式、命令フィールド、または命令値、あるいはその組み合わせが使用されてよい。多くの変形が可能である。
【０２４４】
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも２つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
【０２４５】
入出力デバイスまたはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない）は、直接的に、または介在するＩ／Ｏコントローラを通じて、システムに結合できる。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
【０２４６】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える（ｃｏｍｐｒｉｓｅ）」または「備えている（ｃｏｍｐｒｉｓｉｎｇ）」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、１つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【０２４７】
添付の特許請求の範囲内のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および均等なものは、もしあれば、具体的に請求されるとき、その他の請求される要素と組み合わせて、機能を実行するための任意の構造、材料、または動作を含むことが意図されている。１つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。多くの変更および変形が、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。
【図１】
0006909298.tif 000002
【図２】
0006909298.tif 000003
【図３】
0006909298.tif 000004
【図４】
0006909298.tif 000005
【図５】
0006909298.tif 000006
【図６】
0006909298.tif 000007
【図７】
0006909298.tif 000008
【図８】
0006909298.tif 000009
【図９】
0006909298.tif 000010
【図１０】
0006909298.tif 000011
【図１１】
0006909298.tif 000012
【図１２】
0006909298.tif 000013
【図１３】
0006909298.tif 000014
【図１４】
0006909298.tif 000015
【図１５】
0006909298.tif 000016
【図１６】
0006909298.tif 000017
【図１７】
0006909298.tif 000018
【図１８】
0006909298.tif 000019
【図１９】
0006909298.tif 000020
【図２０】
0006909298.tif 000021