(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-04
(45)【発行日】2024-01-15
(54)【発明の名称】部分的に完了された命令の移行
(51)【国際特許分類】
G06F 9/30 20180101AFI20240105BHJP
G06F 9/48 20060101ALI20240105BHJP
【FI】
G06F9/30 380R
G06F9/48 140A
(21)【出願番号】P 2021520996
(86)(22)【出願日】2019-11-05
(86)【国際出願番号】 EP2019080163
(87)【国際公開番号】W WO2020094603
(87)【国際公開日】2020-05-14
【審査請求日】2022-04-18
(32)【優先日】2018-11-06
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】ギアメイ、ブルース、コンラッド
(72)【発明者】
【氏名】レクテンバルト、マーティン
(72)【発明者】
【氏名】シュミット、ドナルド、ウィリアム
(72)【発明者】
【氏名】スリゲル、ティモシー
(72)【発明者】
【氏名】プラニック、アディティア、ニティン
(72)【発明者】
【氏名】ファレル、マーク
(72)【発明者】
【氏名】ジャコビ、クリスチャン
(72)【発明者】
【氏名】ブラッドベリー、ジョナサン
(72)【発明者】
【氏名】ゼッリン、クリスチャン、ゲルハルト
【審査官】坂東 博司
(56)【参考文献】
【文献】欧州特許出願公開第03118738(EP,A1)
【文献】米国特許出願公開第2017/0017486(US,A1)
【文献】米国特許出願公開第2014/0089646(US,A1)
【文献】米国特許出願公開第2015/0370558(US,A1)
【文献】米国特許第5274826(US,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
コンピューティング
構成内の処理を容易にするためのコンピュータ・プログラム
を記録し、
コンピュータによって読み取り可能な、方法を実行するための命令を格納しているコンピュータ可読ストレージ媒体
であって、前記方法が、
プロセッサ上で実行されている命令の動作の処理が、完了の前に
前記プロセッサが割り込んで前記命令が割り込まれたということを決定することと、
前記命令の前
記割り込まれた時点からの処理を再開するために、選択されたプロセッサ上で前記命令を再実行することと
を含み、前記再実行することが、
前記命令を再実行することにおいて、前記選択されたプロセッサによって、モデルに依存するメタデータが使用されるかどうかを判定すること
であって、前記選択されたプロセッサが前記モデルに依存するメタデータを解釈できるかどうかを判定することを含む、前記判定することと、
前記モデルに依存するメタデータが使用されるということの判定に基づいて、前記命令を再実行することにおいて、前記モデルに依存するメタデータを使用することと、
前記モデルに依存するメタデータが使用されないということの判定に基づいて、前記モデルに依存するメタデータを使用せずに、前記命令の前記再実行を進めることと
を含む、コンピュータ
可読ストレージ媒体。
【請求項2】
前記モデルに依存するメタデータが使用されるかどうかを前記判定することが、割り込まれた前記プロセッサのモデル・バージョンの指示を、前記選択されたプロセッサのモデル・バージョンの指示と比較することを含み、前記プロセッサの前記モデル・バージョンの指示が、前記選択されたプロセッサの前記モデル・バージョンの指示との定義済みの関係を持っていることに基づいて、前記命令を再実行することにおいて、前記モデルに依存するメタデータが使用される、請求項1に記載のコンピュータ
可読ストレージ媒体。
【請求項3】
前記定義済みの関係が等しいことである、請求項2に記載のコンピュータ
可読ストレージ媒体。
【請求項4】
前記プロセッサの前記モデル・バージョンの指示が、前記命令によって指定された位置に格納されているモデル・バージョン番号である、請求項2に記載のコンピュータ
可読ストレージ媒体。
【請求項5】
前記位置がメモリ内のパラメータ・ブロックを含む、請求項4に記載のコンピュータ
可読ストレージ媒体。
【請求項6】
メモリ内の前記パラメータ・ブロックが前記モデルに依存するメタデータをさらに含む、請求項5に記載のコンピュータ
可読ストレージ媒体。
【請求項7】
前記再実行することが、継続インジケータをチェックして、前記動作が部分的に完了しているかどうかを判定することをさらに含み、前記継続インジケータが、前記動作が部分的に完了していることを示すように設定されていることに基づいて、前記モデルに依存するメタデータが使用されるかどうかの前記判定が実行され、前記継続インジケータがメモリ内の前記パラメータ・ブロックに格納されている、請求項6に記載のコンピュータ
可読ストレージ媒体。
【請求項8】
前記再実行することが、継続インジケータをチェックして、前記動作が部分的に完了しているかどうかを判定することをさらに含み、前記継続インジケータが、前記動作が部分的に完了していることを示すように設定されていることに基づいて、前記モデルに依存するメタデータが使用されるかどうかの前記判定が実行される、請求項1に記載のコンピュータ
可読ストレージ媒体。
【請求項9】
前記モデルに依存するメタデータを前記使用することが、
前記命令によって指定された位置から前記モデルに依存するメタデータを抽出することと、
前記位置から抽出された前記モデルに依存するメタデータを前記選択されたプロセッサの1つまたは複数の選択された位置に読み込むことと
を含み、前記モデルに依存するメタデータを生成するための1つまたは複数のタスクを繰り返すことなしに、前記モデルに依存するメタデータが前記選択されたプロセッサに提供される、請求項1に記載のコンピュータ
可読ストレージ媒体。
【請求項10】
前記命令によって指定された前記位置が、前記命令によって指定されたメモリ内のパラメータ・ブロックの継続状態バッファを含む、請求項9に記載のコンピュータ
可読ストレージ媒体。
【請求項11】
コンピューティング
構成内の処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムが、
メモリと、
前記メモリと通信する1つまたは複数のプロセッサとを備え、前記コンピュータ・システムが、方法を実行するように構成されており、前記方法が、
プロセッサ上で実行されている命令の動作の処理が、完了の前に
前記プロセッサが割り込んで前記命令が割り込まれたということを決定することと、
前記命令の前
記割り込まれた時点からの処理を再開するために、選択されたプロセッサ上で前記命令を再実行することと
を含み、前記再実行することが、
前記命令を再実行することにおいて、前記選択されたプロセッサによって、モデルに依存するメタデータが使用されるかどうかを判定すること
であって、前記選択されたプロセッサが前記モデルに依存するメタデータを解釈できるかどうかを判定することを含む、前記判定することと、
前記モデルに依存するメタデータが使用されるということの判定に基づいて、前記命令を再実行することにおいて、前記モデルに依存するメタデータを使用することと、
前記モデルに依存するメタデータが使用されないということの判定に基づいて、前記モデルに依存するメタデータを使用せずに、前記命令の前記再実行を進めることと
を含む、コンピュータ・システム。
【請求項12】
前記モデルに依存するメタデータが使用されるかどうかを前記判定することが、割り込まれた前記プロセッサのモデル・バージョンの指示を、前記選択されたプロセッサのモデル・バージョンの指示と比較することを含み、前記プロセッサの前記モデル・バージョンの指示が、前記選択されたプロセッサの前記モデル・バージョンの指示との定義済みの関係を持っていることに基づいて、前記命令を再実行することにおいて、前記モデルに依存するメタデータが使用される、請求項11に記載のコンピュータ・システム。
【請求項13】
前記プロセッサの前記モデル・バージョンの指示が、前記命令によって指定された位置に格納されているモデル・バージョン番号であり、前記位置がメモリ内のパラメータ・ブロックを含み、メモリ内の前記パラメータ・ブロックが前記モデルに依存するメタデータをさらに含む、請求項12に記載のコンピュータ・システム。
【請求項14】
前記再実行することが、継続インジケータをチェックして、前記動作が部分的に完了しているかどうかを判定することをさらに含み、前記継続インジケータが、前記動作が部分的に完了していることを示すように設定されていることに基づいて、前記モデルに依存するメタデータが使用されるかどうかの前記判定が実行される、請求項11に記載のコンピュータ・システム。
【請求項15】
前記モデルに依存するメタデータを前記使用することが、
前記命令によって指定された位置から前記モデルに依存するメタデータを抽出することと、
前記位置から抽出された前記モデルに依存するメタデータを前記選択されたプロセッサの1つまたは複数の選択された位置に読み込むことと
を含み、前記モデルに依存するメタデータを生成するための1つまたは複数のタスクを繰り返すことなしに、前記モデルに依存するメタデータが前記選択されたプロセッサに提供される、請求項11に記載のコンピュータ・システム。
【請求項16】
コンピューティング
構成内の処理を容易にするコンピュータ実装方法であって、前記コンピュータ実装方法が、
プロセッサ上で実行されている命令の動作の処理が、完了の前に
前記プロセッサが割り込んで前記命令が割り込まれたということを決定することと、
前記命令の前
記割り込まれた時点からの処理を再開するために、選択されたプロセッサ上で前記命令を再実行することと
を含み、前記再実行することが、
前記命令を再実行することにおいて、前記選択されたプロセッサによって、モデルに依存するメタデータが使用されるかどうかを判定すること
であって、前記選択されたプロセッサが前記モデルに依存するメタデータを解釈できるかどうかを判定することを含む、前記判定することと、
前記モデルに依存するメタデータが使用されるということの判定に基づいて、前記命令を再実行することにおいて、前記モデルに依存するメタデータを使用することと、
前記モデルに依存するメタデータが使用されないということの判定に基づいて、前記モデルに依存するメタデータを使用せずに、前記命令の前記再実行を進めることと
を含む、コンピュータ実装方法。
【請求項17】
前記モデルに依存するメタデータが使用されるかどうかを前記判定することが、割り込まれた前記プロセッサのモデル・バージョンの指示を、前記選択されたプロセッサのモデル・バージョンの指示と比較することを含み、前記プロセッサの前記モデル・バージョンの指示が、前記選択されたプロセッサの前記モデル・バージョンの指示との定義済みの関係を持っていることに基づいて、前記命令を再実行することにおいて、前記モデルに依存するメタデータが使用される、請求項16に記載のコンピュータ実装方法。
【請求項18】
前記プロセッサの前記モデル・バージョンの指示が、前記命令によって指定された位置に格納されているモデル・バージョン番号であり、前記位置がメモリ内のパラメータ・ブロックを含み、メモリ内の前記パラメータ・ブロックが前記モデルに依存するメタデータをさらに含む、請求項17に記載のコンピュータ実装方法。
【請求項19】
前記再実行することが、継続インジケータをチェックして、前記動作が部分的に完了しているかどうかを判定することをさらに含み、前記継続インジケータが、前記動作が部分的に完了していることを示すように設定されていることに基づいて、前記モデルに依存するメタデータが使用されるかどうかの前記判定が実行される、請求項16に記載のコンピュータ実装方法。
【請求項20】
前記モデルに依存するメタデータを前記使用することが、
前記命令によって指定された位置から前記モデルに依存するメタデータを抽出することと、
前記位置から抽出された前記モデルに依存するメタデータを前記選択されたプロセッサの1つまたは複数の選択された位置に読み込むことと
を含み、前記モデルに依存するメタデータを生成するための1つまたは複数のタスクを繰り返すことなしに、前記モデルに依存するメタデータが前記選択されたプロセッサに提供される、請求項16に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【0001】
1つまたは複数の態様は、一般に、コンピューティング環境内の処理を容易にすることに関しており、特に、命令処理を容易にすることに関している。
【背景技術】
【0002】
コンピューティング環境内の命令の実行は、動作を完了するために、かなりの数の実行サイクルを必要とすることがある。命令が、完了するためにかなりの数の実行サイクルを必要とする場合、その命令は、割り込み可能であると定義され得る。したがって、命令を最終的に完了するために、追加の処理が実行される。
【発明の概要】
【0003】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が克服され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するための命令を格納しているコンピュータ可読ストレージ媒体を含む。この方法は、プロセッサ上で実行されている命令の動作の処理が完了の前に割り込まれたということを決定することと、命令の前方への処理を再開するために、選択されたプロセッサ上で命令を再実行することとを含む。この再実行することは、命令を再実行することにおいて、選択されたプロセッサによって、モデルに依存するメタデータが使用されるかどうかを判定することを含む。モデルに依存するメタデータが使用されるということの判定に基づいて、命令を再実行することにおいて、モデルに依存するメタデータを使用する。モデルに依存するメタデータが使用されないということの判定に基づいて、モデルに依存するメタデータを使用せずに、命令の再実行を進める。
【0004】
モデルに依存するメタデータを使用することによって、ストレージ・アクセスが減少し、命令を実行する動作およびプロセッサの性能を改善する。
【0005】
1つの実施形態では、モデルに依存するメタデータが使用されるかどうかの判定は、割り込まれたプロセッサのモデル・バージョンの指示を、選択されたプロセッサのモデル・バージョンの指示と比較することを含む。プロセッサのモデル・バージョンの指示が、選択されたプロセッサのモデル・バージョンの指示との定義済みの関係を持っていることに基づいて、命令を再実行することにおいて、モデルに依存するメタデータが使用される。一例として、定義済みの関係は、等しいことである。
【0006】
1つの実施形態では、プロセッサのモデル・バージョンの指示は、命令によって指定された位置に格納されているモデル・バージョン番号である。この位置は、例えば、メモリ内のパラメータ・ブロックである。さらに、メモリ内のパラメータ・ブロックは、モデルに依存するメタデータも含む。
【0007】
一例として、命令を再実行することは、継続インジケータをチェックして、動作が部分的に完了しているかどうかを判定することをさらに含む。継続インジケータが、動作が部分的に完了していることを示すように設定されていることに基づいて、モデルに依存するメタデータが使用されるかどうかの判定が実行される。継続インジケータは、例えば、メモリ内のパラメータ・ブロックに格納される。
【0008】
1つの実施形態では、モデルに依存するメタデータを使用することは、命令によって指定された位置からモデルに依存するメタデータを抽出することと、この位置から抽出されたモデルに依存するメタデータを、選択されたプロセッサの1つまたは複数の選択された位置に読み込むこととを含み、これらの位置で、モデルに依存するメタデータを生成するために1つまたは複数のタスクを繰り返すことなく、モデルに依存するメタデータが選択されたプロセッサに提供される。一例として、命令によって指定された位置は、命令によって指定されたメモリ内のパラメータ・ブロックの継続状態バッファを含む。
【0009】
1つまたは複数の態様に関するコンピュータ実装方法およびシステムも本明細書に記載され、請求される。さらに、1つまたは複数の態様に関するサービスも本明細書に記載されており、請求されてよい。
【0010】
その他の特徴および利点が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、請求される態様の一部と見なされる。
【0011】
1つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に指摘され、明確に請求される。前述の内容、ならびに1つまたは複数の態様の目的、特徴、および利点は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【0012】
【
図1A】本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例を示す図である。
【
図1B】本発明の1つまたは複数の態様に従って、
図1Aのプロセッサの詳細をさらに示す図である。
【
図2】本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【
図3A】本発明の態様に従って、リスト並べ替え命令の1つの形式を示す図である。
【
図3B】本発明の態様に従って、リスト並べ替え命令によって使用される暗黙のレジスタ(implied register)(汎用レジスタ0)のフィールドの一例を示す図である。
【
図3C】本発明の態様に従って、リスト並べ替え命令の機能コードの一例を示す図である。
【
図3D】本発明の態様に従って、リスト並べ替え命令によって使用される暗黙のレジスタ(汎用レジスタ1)のフィールドの一例を示す図である。
【
図3E】本発明の態様に従って、リスト並べ替え命令によって指定されるレジスタ(R
1)の内容の一例を示す図である。
【
図3F】本発明の態様に従って、リスト並べ替え命令によって使用されるレジスタ(R
1+1)の内容の一例を示す図である。
【
図3G】本発明の態様に従って、リスト並べ替え命令によって指定されるレジスタ(R
2)の内容の一例を示す図である。
【
図3H】本発明の態様に従って、リスト並べ替え命令によって使用されるレジスタ(R
2+1)の内容の一例を示す図である。
【
図3I】本発明の態様に従って、リスト並べ替え命令のSORTL-QAF機能によって使用されるパラメータ・ブロックの内容の一例を示す図である。
【
図3J】本発明の態様に従って、リスト並べ替え命令によって使用される固定長レコード形式の一例を示す図である。
【
図3K】本発明の態様に従って、リスト並べ替え命令のSORTL-SFLR機能によって使用されるパラメータ・ブロックの内容の一例を示す図である。
【
図4A】本発明の1つまたは複数の態様に従って、SORTL-SFLRの例を示す図である。
【
図4B】本発明の1つまたは複数の態様に従って、SORTL-SFLRの例を示す図である。
【
図5A】本発明の態様に従って、SORTL-SFLR機能への入力の値の要約の一例を示す図である。
【
図5B】本発明の態様に従って、SORTL-SFLR機能の入力リストのアドレスおよび長さフィールドに対する変更に関する制限の一例を示す図である。
【
図6A】本発明の態様に従って、マージ・モード指示を0に設定してSORTLを実行する前の第1のオペランドの位置/第1のオペランドの一例を示す図である。
【
図6B】本発明の態様に従って、マージ・モード指示を0に設定してSORTLを実行した後の第1のオペランドの位置/第1のオペランドの一例を示す図である。
【
図6C】本発明の態様に従って、マージ・モード指示を0に設定してSORTLを実行する前の第2のオペランドの位置/第2のオペランドの一例を示す図である。
【
図6D】本発明の態様に従って、マージ・モード指示を0に設定してSORTLを実行した後の第2のオペランドの位置/第2のオペランドの一例を示す図である。
【
図7A】本発明の態様に従って、マージ・モード指示を1に設定してSORTLを実行する前の第1のオペランドの位置/第1のオペランドの一例を示す図である。
【
図7B】本発明の態様に従って、マージ・モード指示を1に設定してSORTLを実行した後の第1のオペランドの位置/第1のオペランドの一例を示す図である。
【
図8】本発明の態様に従って使用されるパラメータ・ブロックの特定のフィールドの一例を示す図である。
【
図9】本発明の態様に従って、リスト並べ替え命令によって使用される可変長レコード形式の一例を示す図である。
【
図10A】本発明の態様に従って、命令の割り込みに関連する処理の一例を示す図である。
【
図10B】本発明の態様に従って、命令の再実行に関連する処理の一例を示す図である。
【
図11A】本発明の態様に従って、コンピューティング環境内の処理を容易にする一例を示す図である。
【
図11B】本発明の態様に従って、コンピューティング環境内の処理を容易にする一例を示す図である。
【
図12A】本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【
図13】クラウド・コンピューティング環境の一実施形態を示す図である。
【
図14】抽象モデル・レイヤの一例を示す図である。
【発明を実施するための形態】
【0013】
本発明の態様に従って、コンピューティング環境内の処理を容易にするための能力が提供される。1つの例として、データ・レコードの並べ替えまたはマージあるいはその両方などの動作を実行するために、単一の命令(例えば、ハードウェア/ソフトウェア・インターフェイスでの単一の設計されたハードウェア・マシン命令)が提供される。例えば、命令は、汎用プロセッサ上で実行される。
【0014】
命令の実行中に、動作を完了するために、かなりの数の実行サイクルが必要になることがある。したがって、1つの態様では、命令が割り込み可能であると定義される。命令が割り込まれた場合、動作(例えば、並べ替えまたはマージあるいはその両方)が部分的にのみ完了される。条件コードを、動作の部分的完了をプログラム(例えば、命令を発行するプログラム)に知らせる値に設定して、命令の実行が終了する。その後、プログラムが命令を再実行して、処理を再開し得る。
【0015】
命令は、1つの実施形態では、結果が生成される前にプロセッサにメタデータを事前に教えるために、複数の数の(例えば、かなりの数の)実行サイクルを採用する。プロセッサにメタデータを事前に教えることは、命令が実行されるか、または再実行されるたびに実行される。したがって、本発明の態様に従って、命令が再実行される時点で、以前に生成されたメタデータが再生される必要がないように、以前に生成されたメタデータが格納されて使用される。
【0016】
1つの例では、命令は、命令に入力された1つまたは複数の入力リストのレコードを並べ替えるか、またはマージするか、あるいはその両方を実行する、並べ替え命令である。そのような例の場合、メタデータは、例えば、行われる次の比較を決定するための、入力リストのレコードの前の比較に関する情報などの、入力リストに関する情報を含んでいる、プロセッサの内部状態を含む。
【0017】
プロセッサは、メタデータを抽出し、プログラムによって提供された位置に格納する。次に、割り込みの後に命令が再実行されるときに、メタデータを再生するためのタスクを使用せずに、メタデータがこの位置から抽出され、プロセッサに読み込まれる。これによって、動作のメタデータを生成するために必要な時間を節約する。
【0018】
1つの例では、メタデータは、異なるモデルのマシンまたはプロセッサを含んでいることがあるコンピューティング環境内で実行されている命令(例えば、並べ替え命令)の実行中に蓄積された、モデルに依存するメタデータである。一例として、モデルに依存するメタデータは、行われる次の比較を決定するための、入力リストのレコードの前の比較に関する情報などの、入力リストに関する情報を含み、メタデータは、例えばプロセッサごとに異なって(例えば、異なる形式で)格納されることがあるため、モデルに依存する。モデルに依存するメタデータは、命令の再実行を必要とせず、特定の状況において、命令の部分的に完了された動作を再開するときのオーバーヘッドを最小限に抑えるために使用される。例えば、モデルに依存するメタデータは、動作を再開するプロセッサが、捕捉されたモデルに依存するメタデータを解釈できる場合に、使用される。
【0019】
本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態が、
図1Aを参照して説明される。コンピューティング環境100は、例えば、1つまたは複数のバス108またはその他の接続あるいはその両方を介して互いに結合された、例えば、プロセッサ102(例えば、中央処理装置)と、メモリ104(例えば、メイン・メモリであり、システム・メモリ、主記憶装置、中央記憶装置、ストレージとも呼ばれる)と、1つまたは複数の入出力(I/O:input/output)デバイスまたはインターフェイス106あるいはその両方とを含む。
【0020】
1つの例では、プロセッサ102は、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるz/Architecture(R)ハードウェア・アーキテクチャに基づき、やはりInternational Business Machines Corporationによって提供されてz/Architectureハードウェア・アーキテクチャを実装するIBM Z(R)サーバなどのサーバに含まれる。z/Architectureハードウェア・アーキテクチャの一実施形態は、“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-11, 12th edition, September 2017という公開文献に記載されており、この公開文献は本明細書において参照によってその全体が本明細書に組み込まれている。しかし、z/Architectureハードウェア・アーキテクチャは1つの例示的なアーキテクチャにすぎず、他のアーキテクチャまたは他の種類のコンピューティング環境あるいはその両方が、本発明の1つまたは複数の態様を含むか、または使用するか、あるいはその両方であってよい。1つの例では、プロセッサは、やはりInternational Business Machines Corporationによって提供されるz/OS(R)オペレーティング・システムなどのオペレーティング・システムを実行する。
【0021】
プロセッサ102は、命令を実行するために使用される複数の機能コンポーネントを含む。
図1Bに示されているように、これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント120と、フェッチされた命令をデコードするため、およびデコードされた命令のオペランドを取得するための命令デコード・ユニット122と、デコードされた命令を実行するための命令実行コンポーネント124と、必要な場合に、命令を実行するためにメモリにアクセスするためのメモリ・アクセス・コンポーネント126と、実行された命令の結果を提供するための書き戻しコンポーネント130とを含む。これらのコンポーネントのうちの1つまたは複数は、本発明の1つまたは複数の態様に従って、並べ替え/マージ処理(または本発明の1つまたは複数の態様を使用できるその他の処理)を提供する1つまたは複数の他のコンポーネントの少なくとも一部を含むか、またはそれらのコンポーネントにアクセスすることができてよい。1つまたは複数の他のコンポーネントは、例えば、並べ替え/マージ・コンポーネント(またはその他のコンポーネント)136を含む。コンポーネント136によって提供される機能が、下でさらに詳細に説明される。
【0022】
本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例が、
図2を参照して説明される。1つの例では、コンピューティング環境はz/Architectureハードウェア・アーキテクチャに基づくが、コンピューティング環境は、International Business Machines Corporationまたはその他の企業によって提供される他のアーキテクチャに基づいてよい。
【0023】
図2を参照すると、1つの例では、コンピューティング環境は中央電子回路複合体(CEC:central electronics complex)200を含む。CEC200は、例えば、1つまたは複数のプロセッサ(中央処理装置(CPU:central processing unit)とも呼ばれる)204および入出力サブシステム206に結合されたメモリ202(システム・メモリ、メイン・メモリ、主記憶装置、中央記憶装置、ストレージとも呼ばれる)などの、複数のコンポーネントを含んでいる。
【0024】
メモリ202は、例えば、1つまたは複数の論理パーティション208、論理パーティションを管理するハイパーバイザ210、およびプロセッサ・ファームウェア212を含んでいる。ハイパーバイザ210の1つの例は、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるプロセッサ・リソース/システム管理機構(PR/SM(TM):Processor Resource/System Manager)ハイパーバイザである。本明細書において使用されるとき、ファームウェアは、例えば、プロセッサのマイクロコードを含む。ファームウェアは、例えば、上位レベルのマシン・コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。
【0025】
各論理パーティション208は、別々のシステムとして機能することができる。すなわち、各論理パーティションは、独立してリセットされて、z/OS(R)オペレーティング・システムなどのゲスト・オペレーティング・システム220または他のオペレーティング・システムを実行し、異なるプログラム222と共に動作することができる。論理パーティション内で実行されるオペレーティング・システムまたはアプリケーション・プログラムは、完全なシステム全体にアクセスできるように見えるが、実際は、その一部のみが利用可能である。
【0026】
メモリ202は、論理パーティションに割り当てることができる物理プロセッサ・リソースであるプロセッサ(例えば、CPU)204に結合される。例えば、論理パーティション208は、1つまたは複数の論理プロセッサを含み、それらの論理プロセッサの各々は、論理パーティションに動的に割り当てることができる物理プロセッサ・リソース204の全部または一部を表す。
【0027】
さらに、メモリ202は、I/Oサブシステム206に結合される。I/Oサブシステム206は、中央電子回路複合体の一部であるか、または中央電子回路複合体から分離してよい。I/Oサブシステム206は、主記憶装置202と、中央電子回路複合体に結合された入出力制御ユニット230および入出力(I/O)デバイス240との間の情報の流れを方向付ける。
【0028】
多くの種類のI/Oデバイスが使用されてよい。1つの特定の種類は、データ・ストレージ・デバイス250である。データ・ストレージ・デバイス250は、1つまたは複数のプログラム252、1つまたは複数のコンピュータ可読プログラム命令254、またはデータ、あるいはその組み合わせなどを格納してよい。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成されてよい。
【0029】
1つの例では、プロセッサ204は、並べ替えまたはマージあるいはその両方(または、本発明の1つまたは複数の態様を使用できるその他の動作)のうちの1つまたは複数を実行するために、並べ替え/マージ・コンポーネント(またはその他のコンポーネント)260を含む。さまざまな例では、これらのタスクを実行する1つまたは複数のコンポーネントが存在してよい。多くの変形が可能である。
【0030】
中央電子回路複合体200は、取り外し可能/取り外し不可、揮発性/不揮発性のコンピュータ・システム・ストレージ媒体を含むか、またはそのようなコンピュータ・システム・ストレージ媒体に結合されるか、あるいはその両方であってよい。例えば、中央電子回路複合体200は、取り外し不可、不揮発性の磁気媒体(通常は、「ハード・ドライブ」と呼ばれる)、取り外し可能、不揮発性の磁気ディスク(例えば、「フロッピー(R)・ディスク」)に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、あるいはCD-ROM、DVD-ROM、またはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブ、あるいはその組み合わせを含むか、またはこれらに結合されるか、あるいはその両方であってよい。その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、中央電子回路複合体200と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【0031】
さらに、中央電子回路複合体200は、他の多数の汎用または専用のコンピューティング・システム環境または構成で運用されてよい。中央電子回路複合体200での使用に適し得る周知のコンピューティング・システム、環境、または構成、あるいはその組み合わせの例としては、パーソナル・コンピュータ(PC:personal computer)システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マイクロプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークPC、マイクロコンピュータ・システム、メインフレーム・コンピュータ・システム、およびこれらの任意のシステムまたはデバイスを含む分散クラウド・コンピューティング環境などが挙げられるが、これらに限定されない。
【0032】
本明細書ではコンピューティング環境のさまざまな例が説明されるが、本発明の1つまたは複数の態様が、多くの種類の環境と共に使用されてよい。本明細書で提供されるコンピューティング環境は、例にすぎない。さらに、本発明の1つまたは複数の態様が、並べ替え命令を参照して説明されたが、態様のうちの1つまたは複数は、かなりの数の実行サイクルを使用する、割り込み可能な他の処理または命令あるいはその両方に適用可能である。並べ替え命令は、一例にすぎない。
【0033】
本発明の態様に従って、プロセッサ102または204などのプロセッサは、並べ替えられていない入力データの複数のリストを、並べ替えられた出力データの1つまたは複数のリストに並べ替えるためのメカニズムを提供する、改良された並べ替え機能を採用する。1つの例では、機能インジケータが例えば1に設定されたときに、改良された並べ替え機能がシステムにインストールされる。z/Architectureハードウェア・アーキテクチャの1つの特定の例として、z/Architectureアーキテクチャ・モードで改良された並べ替え機能がインストールされたときに、機能ビット150が例えば1に設定される。この機能は、1つの実施形態では、並べ替えられた入力データの複数のリストを並べ替えられた出力データの単一のリストにマージするためのメカニズムも提供する。この機能は、例えば、リスト並べ替え命令を含み、リスト並べ替え命令の実施形態が以下で説明される。
【0034】
リスト並べ替え命令に関する詳細の一実施形態が、
図3A~3Kを参照して説明される。この命令は、1つの例では、汎用プロセッサ(例えば、プロセッサ102または204)上で実行される。本明細書における説明では、フィールドの特定の位置、特定のフィールド、またはフィールドの特定のサイズ、あるいはその組み合わせが(例えば、特定のバイトまたはビットあるいはその両方で)示される。しかし、他の位置、フィールド、またはサイズ、あるいはその組み合わせが提供されてよい。さらに、特定の値(例えば、1または0)へのビットの設定が指定されるが、これは単なる例である。ビットは、他の例では、反対の値または他の値などの異なる値に設定されてよい。多くの変形が可能である。
【0035】
図3Aを参照すると、1つの例では、リスト並べ替え(SORTL)命令300の形式は、拡張されたオペレーション・コード(オペコード)を使用してレジスタおよびレジスタの動作を示すRRE形式である。一例として、この命令は、並べ替えまたはマージあるいはその両方の動作を示すオペレーション・コードを含んでいるオペレーション・コード・フィールド302(例えば、ビット0~15)と、汎用レジスタの第1の対を指定する第1のレジスタ・フィールド(R
1)304(例えば、ビット24~27)と、汎用レジスタの第2の対を指定する第2のレジスタ・フィールド(R
2)306(例えば、ビット28~31)とを含む。R
1フィールド304によって指定されたレジスタの内容は、(ストレージ内の)第1のオペランドの位置を指定し、R
2フィールド306によって指定されたレジスタの内容は、(ストレージ内の)第2のオペランドの位置を指定する。R
1+1の内容は第1のオペランドの長さを指定し、R
2+1の内容は第2のオペランドの長さを指定する。1つの例では、命令のビット16~23は予備であり、ゼロを含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。本明細書において使用されるとき、プログラムは、リスト並べ替え命令の発行元である。プログラムは、ユーザ・プログラム、オペレーティング・システム、または他の種類のプログラムであってよい。
【0036】
1つの実施形態では、命令の実行は1つまたは複数の暗黙の汎用レジスタ(すなわち、命令によって明示的に指定されないレジスタ)の使用を含む。例えば、本明細書において説明されているように、リスト並べ替え命令の実行では汎用レジスタ0および1が使用される。汎用レジスタ0は、1つの例では、マージが実行されるかどうかを指定するため、および命令によって実行される並べ替え機能を指定するために使用され、汎用レジスタ1は、命令によって使用されるパラメータ・ブロックの位置を提供するために使用される。別の例では、汎用レジスタ0は、マージが実行されるかどうかを指定するために使用されず、代わりに、マージがマシン(例えば、プロセッサ)によって設定され/設定されず、モード・インジケータによって変更できない。その他の変形が可能である。
【0037】
一例として、
図3Bを参照すると、汎用レジスタ0(308)がマージ・モード・フィールド310(以下で説明される)および機能コード・フィールド312を含んでいる。1つの特定の例では、汎用レジスタ0のビット位置57~63が機能コードを含むが、他の実施形態では、機能コードを含むために他のビットが使用されてよい。汎用レジスタ0のビット57~63が割り当てられていないか、またはインストールされていない機能コードを指定している場合、1つの例では、指定例外が認識される。
【0038】
リスト並べ替え命令の例示的な割り当てられた機能コードが、
図3Cに示されており、例えば、SORTL-QAF(使用可能な機能の照会)機能を示す機能コード0(313)、SORTL-SFLR(固定長レコード並べ替え)機能を示す機能コード1(315)、およびSORTL-SVLR(可変長レコード並べ替え)機能を示す機能コード2(317)を含んでいる。各コードはパラメータ・ブロックを使用し、パラメータ・ブロックのサイズは、1つの例では、機能によって決まる。例えば、SORTL-QAF機能の場合、パラメータ・ブロックは32バイトであり、SORTL-SFLRおよびSORTL-SVLRの場合、パラメータ・ブロックは576+16×N
ISであり、N
ISは、インターフェイス・サイズによって指定される入力リストの数である。他の機能コードは、この例では割り当てられない。例示的な機能および機能コードが説明されているが、他の機能または機能コードあるいはその両方が使用されてよい。
【0039】
前に示したように、汎用レジスタ0はマージ・モード・フィールド310も含む。1つの例では、汎用レジスタ0のビット56は、例えばSORTL-SFLR機能およびSORTL-SVLR機能に適用される動作モード(マージ・モード)を指定する。1つの例では、指定された機能がSORTL-QAFである場合、汎用レジスタ0のビット56は無視される。さらに、1つの例では、汎用レジスタ0のビット位置0~55は無視される。
【0040】
リスト並べ替え命令によって使用される他の暗黙のレジスタ(汎用レジスタ1)に関する詳細が、
図3Dを参照してさらに説明される。汎用レジスタ1(314)の内容は、例えば、ストレージ内のパラメータ・ブロックの左端のバイトの論理アドレス316を指定する。1つの例では、パラメータ・ブロックはダブルワード境界上で指定され、そうでない場合、指定例外が認識される。以下では、パラメータ・ブロックに関する詳細がさらに説明される。
【0041】
指定された機能(例えば、SORTL-QAF、SORTL-SFLR、SORTL-SVLR)の場合、汎用レジスタ0および1の内容は変更されない。さらに、1つの例では、R
1フィールド304が、偶数と奇数の汎用レジスタ対を指定する。これは、偶数番号が付けられたレジスタを指定することであり、汎用レジスタ0を指定することではなく、そうでない場合、指定例外が認識される。指定された機能がSORTL-SFLRまたはSORTL-SVLRである場合、
図3E~3Fに示されているように、汎用レジスタR
1318の内容は、例えば、第1のオペランドの左端のバイトの論理アドレス320を指定し、汎用レジスタR
1+1(322)の内容は、第1のオペランドの長さ324を例えばバイト単位で指定する。指定された機能がSORTL-SFLRまたはSORTL-SVLRである場合、例えば、第1のオペランドがダブルワード境界上で指定され、そうでない場合、指定例外が認識される。レコードの形態でのデータが、入力リストのセットから選択され、(例えば、R
1を使用して指定されたアドレスで開始する)第1のオペランドの位置に格納される。SORTL-QAF機能が指定された場合、汎用レジスタR
1およびR
1+1の内容は無視される。
【0042】
さらに、指定された機能(例えば、SORTL-QAF、SORTL-SFLR、SORTL-SVLR)の場合、1つの例では、R
2フィールド306が偶数と奇数の汎用レジスタ対を指定する。これは、偶数番号が付けられたレジスタを指定することであり、汎用レジスタ0を指定することではなく、そうでない場合、指定例外が認識される。指定された機能がSORTL-SFLRまたはSORTL-SVLRであり、マージ・モード(MM:merge mode)が0である場合、
図3G~3Hに示されているように、汎用レジスタR
2326の内容は、例えば、第2のオペランドの左端のバイトの論理アドレス328を指定し、汎用レジスタR
2+1(330)の内容は、第2のオペランドの長さ332を例えばバイト単位で指定する。指定された機能がSORTL-SFLRまたはSORTL-SVLRであり、マージ・モード(MM)が0である場合、第2のオペランドがダブルワード境界上で指定されるべきであり、そうでない場合、1つの例では、指定例外が認識される。MMが0である場合、出力リストの概要説明(OLD:output list delineations)と呼ばれる、各出力リストの開始アドレスおよび長さが、(例えば、R
2を使用して指定されたアドレスで開始する)第2のオペランドの位置に格納される。SORTL-QAF機能が指定された場合、またはMMが1である場合、汎用レジスタR
2およびR
2+1の内容は無視される。
【0043】
実行中に、1つの実施形態では、汎用レジスタ0内の機能コードによって指定された機能が実行される。指定された機能がSORTL-SFLRまたはSORTL-SVLRである場合、1つの実施形態では、動作の一部として以下が発生する。
汎用レジスタR1内のアドレスが、第1のオペランドの位置に格納されたバイト数だけインクリメントされ、汎用レジスタR1+1内の長さが同じ数だけデクリメントされる。
MMが0である場合、汎用レジスタR2内のアドレスが、第2のオペランドの位置に格納されたバイト数だけインクリメントされ、汎用レジスタR2+1内の長さが同じ数だけデクリメントされる。
【0044】
1つの例では、アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【0045】
1つの実施形態では、24ビット・アドレス指定モードにおいて以下が当てはまる。
汎用レジスタ1、R1、およびR2のビット位置40~63の内容は、パラメータ・ブロック、第1のオペランド、および第2のオペランドのアドレスをそれぞれ構成し、ビット位置0~39の内容が無視される。
更新された第1のオペランドおよび第2のオペランドのアドレスのビット40~63は、汎用レジスタR1およびR2内の対応するビットをそれぞれ置き換える。更新されたアドレスのビット位置40からの繰り上げが無視され、汎用レジスタR1およびR2のビット位置32~39の内容が0に設定される。汎用レジスタR1およびR2のビット位置0~31の内容は変化しない。
汎用レジスタR1+1およびR2+1のビット位置32~63の内容は、第1および第2のオペランド内のバイト数をそれぞれ指定する32ビットの符号なし2進整数を形成する。汎用レジスタR1+1およびR2+1のビット位置0~31の内容は無視される。
更新された第1のオペランドおよび第2のオペランドの長さのビット32~63は、汎用レジスタR1+1およびR2+1内の対応するビットをそれぞれ置き換える。汎用レジスタR1+1およびR2+1のビット位置0~31の内容は変化しない。
【0046】
1つの実施形態では、31ビット・アドレス指定モードにおいて以下が当てはまる。
汎用レジスタ1、R1、およびR2のビット位置33~63の内容は、パラメータ・ブロック、第1のオペランド、および第2のオペランドのアドレスをそれぞれ構成し、ビット位置0~32の内容が無視される。
更新された第1のオペランドおよび第2のオペランドのアドレスのビット33~63は、汎用レジスタR1およびR2内の対応するビットをそれぞれ置き換える。更新されたアドレスのビット位置33からの繰り上げが無視され、汎用レジスタR1およびR2のビット位置32の内容が0に設定される。汎用レジスタR1およびR2のビット位置0~31の内容は変化しない。
汎用レジスタR1+1およびR2+1のビット位置32~63の内容は、第1および第2のオペランド内のバイト数をそれぞれ指定する32ビットの符号なし2進整数を形成する。汎用レジスタR1+1およびR2+1のビット位置0~31の内容は無視される。
更新された第1のオペランドおよび第2のオペランドの長さのビット32~63は、汎用レジスタR1+1およびR2+1内の対応するビットをそれぞれ置き換える。汎用レジスタR1+1およびR2+1のビット位置0~31の内容は変化しない。
【0047】
1つの実施形態では、64ビット・アドレス指定モードにおいて以下が当てはまる。
汎用レジスタ1、R1、およびR2のビット位置0~63の内容は、パラメータ・ブロック、第1のオペランド、および第2のオペランドのアドレスをそれぞれ構成する。
更新された第1のオペランドおよび第2のオペランドのアドレスのビット0~63は、汎用レジスタR1およびR2内の対応するビットをそれぞれ置き換える。更新されたアドレスのビット位置0からの繰り上げは無視される。
汎用レジスタR1+1およびR2+1のビット位置0~63の内容は、第1および第2のオペランド内のバイト数をそれぞれ指定する64ビットの符号なし2進整数を形成する。
更新された第1のオペランドおよび第2のオペランドの長さのビット0~63は、汎用レジスタR1+1およびR2+1内の対応するビットをそれぞれ置き換える。
アクセス・レジスタ・モードでは、アクセス・レジスタ1、R1、およびR2が、パラメータ・ブロック、第1のオペランド、および第2のオペランドを含んでいるアドレス空間をそれぞれ指定する。
【0048】
以下では、さまざまな機能に関する詳細がさらに説明される。
【0049】
機能コード0:SORTL-QAF(使用可能な機能の照会)
SORTL-QAF(照会)機能は、すべてのインストールされた機能、インストールされたパラメータ・ブロック形式、および使用可能なインターフェイス・サイズの使用可能性を示すためのメカニズムを提供する。インターフェイス・サイズは、プログラムで使用できる入力リストの数である。SORTL-SFLR機能およびSORTL-SVLR機能のパラメータ・ブロックのサイズは、プログラムによって指定されるインターフェイス・サイズに比例する。
【0050】
SORTL-QAF機能のパラメータ・ブロックの1つの例示的な形式が、
図3Iを参照して説明される。1つの例では、SORTL-QAF機能(例えば、機能コード0)のパラメータ・ブロック340は、インストール済み機能ベクトル342、インストール済みインターフェイス・サイズ・ベクトル344、およびインストール済みパラメータ・ブロック形式ベクトル346を含む。1つの特定の例では、これらのベクトルは、パラメータ・ブロックのバイト0~15、バイト16、およびバイト24~25にそれぞれ格納される。これらのベクトルの各々が、以下でさらに説明される。
【0051】
一例として、インストール済み機能ベクトル342のビット0~127は、リスト並べ替え命令の機能コード0~127にそれぞれ対応する。あるビットが例えば1である場合、対応する機能がインストールされており、そうでない場合、その機能はインストールされていない。
【0052】
さらに、1つの例では、インストール済みインターフェイス・サイズ・ベクトル344のビット0~7は、プログラムで使用できるインターフェイス・サイズを示す。インターフェイス・サイズは、SORTL-SFLR機能およびSORTL-SVLR機能の場合にプログラムによって指定される入力リストの数である。1つの例では、インストール済みインターフェイス・サイズ・ベクトル344のビット0~7は、次のインターフェイス・サイズに対応する:ビット0、1、5~7-予備、ビット2-32個の入力リスト、ビット3-64個の入力リスト、およびビット4-128個の入力リスト。その他の例も可能である。
【0053】
インストール済みインターフェイス・サイズ・ベクトル344のあるビットが例えば1である場合、対応するインターフェイス・サイズがプログラムで使用可能である。1つまたは複数のビットが1として格納されてよい。例えば、2進数00101000の値は、32個および128個の入力リストのインターフェイス・サイズが使用可能であるということを示す。1つの例では、ビット0~1および5~7が予備であり、0として格納される。さらに、1つの例では、並べ替え強化機能がインストールされている場合、32個の入力リストのインターフェイス・サイズが使用可能である。したがって、ビット2が1として格納される。その他の例も可能である。
【0054】
上記に加えて、1つの例では、インストール済みパラメータ・ブロック形式ベクトル346のビット0~15は、パラメータ・ブロック形式0~15にそれぞれ対応する。あるビットが例えば1である場合、対応するパラメータ・ブロック形式がインストールされており、そうでない場合、そのパラメータ・ブロック形式はインストールされていない。1つの例では、パラメータ・ブロックの予備のバイト17~23および26~31には0が格納される。
【0055】
汎用レジスタR1、R2、R1+1、およびR2+1の内容は、SORTL-QAF機能によって無視される。
【0056】
パラメータ・ブロックでは、適用可能な場合、PER(program event recording:プログラム・イベント記録)ストレージ変更イベントが認識される。パラメータ・ブロックでは、適用可能な場合、PERゼロ・アドレス検出イベントが認識される。
【0057】
1つの例では、SORTL-QAF機能の実行が完了したときに、条件コード0が設定され、条件コード1、2、および3は、照会機能には適用できない。
【0058】
機能コード1:SORTL-SFLR(固定長レコード並べ替え)
1つの例では、入力リストのセットが並べ替えられ、出力リストのセットとして第1のオペランドの位置に格納される。各リストはレコードのセットであり、
図3Jを参照すると、各レコード350は、キー352(例えば、固定長のキー)およびペイロード354(例えば、固定長のペイロード)を含んでいる。
【0059】
キーの値に基づいて、入力リストからのレコードが並べ替えられる。レコードは、以下で説明される機能コード1に関連付けられたパラメータ・ブロックの並べ替え順序(SO:sort order)フィールドでの指定に従って、昇順または降順に並べ替えられてよい。入力リストのレコードは、並べ替えられた順序でリスト化されていることもあれば、そうでないこともある。
【0060】
出力リストのレコードは、複数の入力リストから供給されてよく、並べ替えられた順序で格納される。第1のオペランドの位置に格納される出力リストの数は、入力データによって決まる。1つの例では、すべてのアクティブな入力リストが、SOフィールドで指定された順序と同じ順序でリスト化されたレコードを含んでいる場合、1つの出力リストのみが生成される。
【0061】
上で示したように、汎用レジスタ0のビット56は、SORTL-SFLR機能に適用される、マージ・モード(MM)と呼ばれる動作モードを指定する。マージ・モードが例えば0である場合、第1のオペランドの位置に格納された出力リストごとに、対応する出力リストの概要説明(OLD)が第2のオペランドの位置に格納される。各OLDは、例えば、対応する出力リスト内の最初のレコードの位置を指定する8バイトのOLDアドレス、および対応する出力リストの長さを例えばバイト単位で指定する8バイトのOLD長を含む。マージ・モードが1である場合、入力リストは、事前に並べ替えられていると見なされる。すなわち、すべてのアクティブな入力リストは、パラメータ・ブロックのSOフィールドによって指定された順序と同じ順序でレコードを含んでいると見なされる。
【0062】
MMが1であり、各入力リストが事前に並べ替えられている場合、第1のオペランドの位置に格納される結果は、並べ替えられた順序でのレコードの単一の出力リストになる。MMが1であり、各入力リストが事前に並べ替えられていない場合、結果が予測不可能になる。
【0063】
MMが例えば1である場合、汎用レジスタR2およびR2+1の内容が無視され、第2のオペランドの位置に情報が格納されない。MMが1である場合、出力リスト間の分離を区別するために使用される手順が実行されなくてよく、それによって、動作の性能を改善する可能性がある。MMが1である場合、データが、下で説明される継続レコード再呼び出しバッファ(continuation record recall buffer)に格納されない。
【0064】
ランダムな順序のレコードのセットから、並べ替えられた順序のレコードの単一のリストを生成するために、1つの例では、プログラムは以下の手順を実行してよい。
1.リストの初期セット間でレコードのセットを均等に分割し、各リストがランダムな順序でレコードを含む。入力リストとしてのリストの初期セットおよび0に等しいマージ・モードを使用してリスト並べ替え命令を実行し、リストの中間セット(リストの各々が、並べ替えられた順序でレコードを含む)、ならびにリストの中間セットのリストごとの格納位置および長さを生成する。
2.入力リストとしてのリストの中間セットおよび1に等しいマージ・モードを使用してリスト並べ替え命令を実行し、並べ替えられた順序でレコードを含む最終的な単一のリストを生成する。
【0065】
0に等しいマージ・モードを使用するSORTL-SFLRの一例が、
図4Aに示されている。この例には、入力および得られた出力が含まれている。図に示されているように、3つの入力リスト400(入力リスト0、入力リスト1、および入力リスト2)が存在している。さらに、得られた第1のオペランド402および第2のオペランド404の例が示されている。1つの例では、第1のオペランド402には3つのリストが存在しており(
図4A)、第2のオペランド404に示されているように、1つのリストがアドレス1000で開始し、18の長さを有しており、もう1つのリストがアドレス1018で開始し、28の長さを有しており、第3のリストがアドレス1040で開始し、20の長さを有している。
【0066】
1つの例では、2つの動作が、並べ替えられていない入力レコードの同じセットに対して、0に等しいマージ・モードを使用して同じSORTL-SFLR機能を実行し、2つの動作の間の違いが、入力データを指定するために使用される入力リストの数のみである場合、動作で使用する入力リストの数が多いほど、出力リストの数が少なくなる。
図4Bは、3つの入力リストを使用する
図4Aの例と同じ入力データに対して、6つの入力リスト450を使用して動作する例を示している。3つではなく2つの出力リストを含む得られた第1のオペランド452、および2つの出力リストの概要説明を提供する第2のオペランド454も示されている。
【0067】
示されているように、SORTL-SFLR機能はパラメータ・ブロックを使用し、その例が
図3Kを参照して説明される。本明細書に記載された例示的なパラメータ・ブロックでは、特定のフィールドのパラメータ・ブロック内の特定の位置、およびフィールドの特定のサイズが(例えば、特定のバイトまたはビットあるいはその両方で)示される。しかし、フィールドのうちの1つまたは複数の他の位置またはサイズあるいはその両方が提供されてよい。さらに、特定の値(例えば、1または0)へのビットの設定が指定されるが、これは単なる例である。ビットは、他の例では、反対の値または他の値などの異なる値に設定されてよい。多くの変形が可能である。
【0068】
1つの例では、SORTL-SFLR機能の場合、パラメータ・ブロック360は以下を含む。
パラメータ・ブロック・バージョン番号(PBVN:Parameter Block Version Number)362:パラメータ・ブロックのバイト0~1は、パラメータ・ブロックのバージョンおよびサイズを指定する。PBVNのビット0~7は、SORTL-QAF(照会)機能の場合のパラメータ・ブロックのインストール済みインターフェイス・サイズ・リスト・ベクトル(バイト16)のビット0~7と同じ形式および定義を有する。ビット0~7は、パラメータ・ブロック内に記述される入力リストの数(NIS)を指定する。パラメータ・ブロックのサイズは、式(576+16×NIS)を評価することによって、バイト単位で決定される。ビット0~7のうちの1ビットは1の値を有するべきであり、そうでない場合、一般オペランド・データ例外が認識される。PBVNのビット8~11は予備であり、ゼロを含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。PBVNのビット12~15は、パラメータ・ブロックの形式を指定する符号なし2進整数を含む。SORTL-QAF機能は、使用可能なパラメータ・ブロック形式を示すメカニズムを提供する。指定されたパラメータ・ブロックのサイズまたは形式がモデルによってサポートされていない場合、一般オペランド・データ例外が認識される。PBVNは、プログラムによって指定され、命令の実行中に変更されない。
【0069】
モデル・バージョン番号(MVN:Model Version Number)364:パラメータ・ブロックのバイト2は、命令を実行するモデルを識別する符号なし2進整数である。MVNは、命令の実行中に、例えばプロセッサによって更新される。MVNに格納される値は、モデルに依存する。
【0070】
下で説明される継続フラグ(CF:continuation flag)368が1である場合、MVNは動作への入力である。CFが1であり、MVNが、命令を現在実行しているモデルと同じモデルを識別する場合、下で説明される継続状態バッファ(CSB:continuation state buffer)390からのデータが、動作を再開するために使用されてよい。CFが1であり、MVNが、命令を現在実行しているモデルと異なるモデルを識別する場合、CSBフィールドの一部または全部が無視されてよい。
【0071】
1つの例では、プログラムがMVNを0に初期化する。動作を再開する目的で命令が再実行される場合に、プログラムがMVNを変更しないということが期待され、そうでない場合、結果が予測不可能になる。
【0072】
並べ替え順序(SO)366:パラメータ・ブロックのビット56は、0である場合、昇順の並べ替え順序を指定し、1である場合、降順の並べ替え順序を指定する。昇順の並べ替え順序が指定された場合、出力リストの各レコードは、同じ出力リスト内の例えば左側に隣接するレコードのキー以上のキーを含む。降順の並べ替え順序が指定された場合、出力リストの各レコードは、同じ出力リスト内の例えば左側に隣接するレコードのキー以下のキーを含む。SOは、命令の実行中に更新されない。
【0073】
継続フラグ(CF)368:パラメータ・ブロックのビット63は、1である場合、動作が部分的に完了していることを示し、継続状態バッファ390の内容、およびマージ・モード(MM)が0である場合は、継続レコード再呼び出しバッファの内容が、動作を再開するために使用されてよい。プログラムは、継続フラグ(CF)を0に初期化し、動作を再開する目的で命令が再実行される場合にCFを変更しないようにするべきであり、そうでない場合、結果が予測不可能になる。1つの例では、命令が再実行される場合、プロセッサがCFを変更する。
【0074】
レコード・キー長370:パラメータ・ブロックのバイト10~11は、動作中に処理されるレコード内のキーのサイズをバイト単位で指定する符号なし2進整数を含む。1つの例では、次の条件のいずれかを満たす場合、一般オペランド・データ例外が認識される。
0バイトのキー・サイズが指定された。
8の倍数でないキー・サイズが指定された。
4096バイトより大きいキー・サイズが指定された。
レコード・キー長は、命令の実行中に更新されない。
【0075】
レコード・ペイロード長(Record Payload Length)372:SORTL-SFLR機能が指定された場合、パラメータ・ブロックのバイト14~15は、動作中に処理されるレコード内のペイロードのサイズをバイト単位で指定する符号なし2進整数を含む。1つの例では、次の条件のいずれかを満たす場合、一般オペランド・データ例外が認識される。
8の倍数でないペイロード・サイズが指定された。
指定されたキー・サイズおよびペイロード・サイズの合計が4096バイトより大きい。
0のペイロード・サイズは有効である。
【0076】
SORTL-SVLR機能が指定された場合、パラメータ・ブロックのレコード・ペイロード長フィールドは無視される。レコード・ペイロード長は、命令の実行中に更新されない。
【0077】
オペランド・アクセス意図(OAI:Operand Access Intent)374:パラメータ・ブロックのバイト32のビット0~1は、入力リストおよび第1のオペランドに対する将来のアクセス意図をCPUに知らせる。提供されたアクセス意図は、ストレージ階層内のキャッシュのさまざまなレベルでの対応する格納位置に関して、キャッシュ・ラインのインストールおよび置換ポリシーを変更するために使用されてよい。
【0078】
OAIフィールドのビット0が1である場合、いずれかのアクティブな入力リストのデータを含むように指定された格納位置は、その後の命令の1つまたは複数のオペランドとして参照される。OAIフィールドのビット0が0である場合、いずれかのアクティブな入力リストのデータを含むように指定された格納位置は、その後の命令の1つまたは複数のオペランドとして参照されない。
【0079】
OAIフィールドのビット1が1である場合、第1のオペランドを含むように指定された格納位置は、その後の命令の1つまたは複数のオペランドとして参照される。OAIフィールドのビット1が0である場合、第1のオペランドを含むように指定された格納位置は、その後の命令の1つまたは複数のオペランドとして参照されない。
【0080】
CPUがこの情報を使用することは保証されない。この情報を使用できる期間は定義されないが、有限である。
【0081】
次の命令のアクセス意図(NIAI:Next Instruction Access Intent)の後の次の順次命令がリスト並べ替え(SORTL)である場合、SORTLの実行はNIAIによる影響を受けない。
【0082】
OAIは、命令の実行中に更新されない。
【0083】
アクティブな入力リストのカウント・コード(AILCC:Active Input Lists Count Code)376:パラメータ・ブロックのバイト33のビット1~7は、アクティブな入力リストと非アクティブな入力リストの間の境界を示す入力リストの番号を指定する、7ビットの符号なし整数である。例えば、AILCCフィールドの値以下のリスト番号を有する入力リストは、アクティブな状態にある。例えば、AILCCフィールドの値より大きいリスト番号を有する入力リストは、非アクティブな状態にある。アクティブな状態にある入力リストの数は、AILCCフィールド内の値よりも1つ多い。
【0084】
アクティブな状態にある入力リストは、動作に関与する。非アクティブな状態にある入力リストは、動作に関与しない。
【0085】
パラメータ・ブロックのバイト33のビット0は予備であり、ゼロを含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。
【0086】
AILCCフィールドの値に1を加えた値が、PBVNフィールドのビット0~7によって指定されている、パラメータ・ブロック内に記述された入力リストの数よりも大きい場合、1つの例では、一般オペランド・データ例外が認識される。
【0087】
AILCCフィールド内で指定された値は、パラメータ・ブロックのサイズに影響を与えない。非アクティブな状態にある入力リストに対応する入力リストのアドレスまたは長さを指定するパラメータ・ブロックのフィールドへの参照には、アクセス例外が適用される。
【0088】
AILCCは、命令の実行中に更新されない。
【0089】
空入力リスト制御(EILCL:Empty Input Lists Control)378:パラメータ・ブロックのバイト40のビット0が1である場合、動作中に入力リスト0の長さが0になったときに、動作が終了する。パラメータ・ブロックのバイト40のビット0が0である場合、動作中に入力リスト0の長さが0になったときに、動作が続行する。パラメータ・ブロックのバイト40のビット1が1である場合、動作中に入力リスト0以外のアクティブな入力リストの長さが0になったときに、動作が終了する。パラメータ・ブロックのバイト40のビット1が0である場合、動作中に入力リスト0以外のアクティブな入力リストの長さが0になったときに、動作が続行する。
【0090】
命令の実行前にアクティブな入力リストの長さが最初に0である場合、EILCLの対応するビットは適用されない。
【0091】
EILCLは、命令の実行中に更新されない。
【0092】
動作を再開する目的で命令が再実行される場合に、プログラムがEILCLを変更しないということが期待され、そうでない場合、結果が予測不可能になる。
【0093】
空入力リスト・フラグ(EILF:Empty Input List Flag)380:EILCLが2進数11であり、アクティブな入力リストの更新された長さが0に等しいため動作が終了し、条件コード2が設定された場合、例えばプロセッサによって、パラメータ・ブロックのバイト40のビット2に1の値が格納され、そうでない場合、パラメータ・ブロックのバイト40のビット2に0の値が格納される。EILFが1の値を含んでいる場合、動作中に空になった入力リストの入力リスト番号が、パラメータ・ブロックのEILNフィールドに配置される。1つの例では、プログラムがEILFを0に初期化する。
【0094】
EILFは、動作が再開されているときに、命令の実行の開始時に参照されてよい。動作を再開する目的で命令が再実行される場合に、プログラムがEILFを変更しないということが期待され、そうでない場合、結果が予測不可能になる。
【0095】
空入力リスト番号(EILN:Empty Input List Number)382:条件が、1の値がEILFフィールドに格納されることを引き起こした場合、例えばプロセッサによって、動作中に空になった入力リストの入力リスト番号がパラメータ・ブロックのバイト41に格納され、そうでない場合、0の値がパラメータ・ブロックのバイト41に格納される。
【0096】
動作の開始時に、EILNは無視される。1つの例では、プログラムがEILNを0に初期化する。
【0097】
不完全入力リスト・フラグ(IILF:Incomplete Input List Flag)384:不完全な入力リストを処理しようとした結果として動作が終了した場合、例えばプロセッサによって、パラメータ・ブロックのバイト46のビット0に1の値が格納され、そうでない場合、パラメータ・ブロックのバイト46のビット0に0の値が格納される。対応する入力リストの長さが0よりも大きく、入力リストのアドレスによって指定されたレコードのバイト数よりも小さい場合、アクティブな入力リストは不完全であると見なされる。この条件は、動作の開始時に存在することがあり、または動作中に発生することもある。IILFが1の値を含んでいる場合、発生した不完全な入力リストの入力リスト番号が、パラメータ・ブロックのIILNフィールドに配置される。1つの例では、プログラムがIILFを0に初期化する。
【0098】
条件コード2を設定して動作が終了し、IILFフィールド内の得られた値が0である場合、空の入力リストに起因して動作が終了した。条件コード2を設定して動作が終了し、IILFフィールド内の得られた値が1である場合、不完全な入力リストに起因して動作が終了した。
【0099】
IILFは、動作が再開されているときに、命令の実行の開始時に参照されてよい。動作を再開する目的で命令が再実行される場合に、プログラムがIILFを変更しないということが期待され、そうでない場合、結果が予測不可能になる。
【0100】
不完全入力リスト番号(IILN:Incomplete Input List Number)386:条件が、1の値がIILFフィールドに格納されることを引き起こした場合、例えばプロセッサによって、発生した不完全な入力リストの入力リスト番号がパラメータ・ブロックのバイト47に格納され、そうでない場合、0の値がパラメータ・ブロックのバイト47に格納される。複数の入力リストが不完全である場合、どの不完全な入力リストの番号がIILNフィールドに格納されるかは、モデルに依存する。1つの例では、プログラムがIILNを0に初期化する。
【0101】
動作の開始時に、IILNは無視される。
【0102】
継続レコード再呼び出しバッファ原点388:継続レコード再呼び出しバッファと呼ばれる、ストレージ内の4Kバイトのバッファは、動作が終了して後で再開され得る場合に、CPUが同じリスト並べ替え命令の2つの実行の間でデータを格納して参照するために、プログラムによって提供される。パラメータ・ブロックのバイト56のビット0から開始して、バイト62のビット3まで続く52ビットは、4Kバイト境界上でアライメントされた継続レコード再呼び出しアドレス(continuation record recall address)の形成において使用される符号なし2進整数を含む。継続レコード再呼び出しアドレスは、例えば、継続レコード再呼び出しバッファの左端のバイトの論理アドレスである。
【0103】
24ビット・アドレス指定モードでは、12個の0が右側に追加された継続レコード再呼び出しバッファ原点のビット40~51が、継続レコード再呼び出しアドレスを形成する。31ビット・アドレス指定モードでは、12個の0が右側に追加された継続レコード再呼び出しバッファ原点のビット33~51が、継続レコード再呼び出しアドレスを形成する。64ビット・アドレス指定モードでは、12個の0が右側に追加された継続レコード再呼び出しバッファ原点のビット0~51が、継続レコード再呼び出しアドレスを形成する。
【0104】
アクセス・レジスタ・モードでは、アクセス・レジスタ1が、ストレージ内に継続レコード再呼び出しバッファを含んでいるアドレス空間を指定する。
【0105】
マージ・モード(MM)が0であり、1つまたは複数のレコードを格納した後に動作が終了し、正常完了が発生しなかった場合、第1のオペランドに格納された最後のレコードのキーも、継続レコード再呼び出しバッファに格納される。MMが1である場合、継続レコード再呼び出しバッファ原点は無視される。
【0106】
命令の実行中に、継続レコード再呼び出しバッファ原点は変更されない。
【0107】
動作を再開する目的で命令が再実行される場合に、プログラムが継続レコード再呼び出しバッファ原点を変更しないということが期待され、そうでない場合、結果が予測不可能になる。
【0108】
継続状態バッファ(CSB)390:条件が、1の値がCFフィールドに格納されることを引き起こした場合、例えばプロセッサによって、内部状態データがパラメータ・ブロックのバイト64~575に格納され、そうでない場合、パラメータ・ブロックのバイト64~575が定義されず、変更されてよい。格納される内部状態データは、モデルに依存し、命令が再実行されるときに動作を再開するために、その後使用されてよい。1つの例では、プログラムが継続状態バッファを0に初期化する。動作を再開する目的で命令が再実行される場合に、プログラムが継続状態バッファを変更しないということが期待され、そうでない場合、結果が予測不可能になる。
【0109】
一例として、内部状態データは、行われる次の比較を決定するための、入力リストのレコードの前の比較に関する情報などの、入力リストに関する情報を含む。内部状態データは、プロセッサ・モデルに応じて異なって格納されるか、または提示されることがあるという点において、モデルに依存する。その他の変形が可能である。
【0110】
1つの実施形態では、命令は、構成内の1つのモデルによって部分的に完了されてよく、構成内の異なるモデルで実行が再開してよい。1つの実施形態では、異なるモデルが異なる内部状態を維持してよいが、1つの例では、各モデルは、動作を再開するために採用されるCSBの内容がもしあれば、それらの内容を解釈することができる。動作が再開するときに、MVNは、CSBの内容がもしあれば、CSBのどの内容をマシンが解釈できるかを示す。
【0111】
入力リストNのアドレス392、394、396:パラメータ・ブロックは、複数の入力リストを定義する。パラメータ・ブロック内で定義される入力リストの数(NIS)は、PBVN362のビット0~7によって指定される。入力リストには、0~(NIS-1)の番号が付けられる。パラメータ・ブロックは、入力リストごとに、例えば8バイトの入力リストのアドレスを指定する。入力リスト番号Nの場合、パラメータ・ブロックのバイト576+16×N~583+16×Nの内容が、例えば、ストレージ内の入力リスト番号Nの左端のバイトの論理アドレスを指定する。
【0112】
AILCCフィールドによって指定された、アクティブな状態にある入力リストに対応する各入力リストのアドレスが、動作への入力になり、動作によって更新される。AILCCフィールドによって指定された、非アクティブな状態にある入力リストに対応する各入力リストのアドレスは、動作によって無視される。
【0113】
入力リストのアドレスが動作への入力である場合、1つの実施形態では、以下が当てはまる。
24ビット・アドレス指定モードでは、入力リストのアドレスのビット40~63が、ストレージ内の入力リストの左端のバイトの位置を指定し、入力リストのアドレスのビット0~39の内容が0として扱われる。
31ビット・アドレス指定モードでは、入力リストのアドレスのビット33~63が、ストレージ内の入力リストの左端のバイトの位置を指定し、入力リストのアドレスのビット0~32の内容が0として扱われる。
64ビット・アドレス指定モードでは、入力リストのアドレスのビット0~63が、ストレージ内の入力リストの左端のバイトの位置を指定する。
【0114】
アクセス・レジスタ・モードでは、アクセス・レジスタ1が、ストレージ内にアクティブな入力リストを含んでいるアドレス空間を指定する。
【0115】
アクティブな状態にある入力リストの場合、対応する入力リストのアドレスがダブルワード境界上で指定されるべきであり、そうでない場合、1つの例では、一般オペランド・データ例外が認識される。
【0116】
入力リストのアドレスが動作によって更新される場合、1つの実施形態では、以下が当てはまる。
入力リストの1つまたは複数のレコードが動作の一部として処理された場合、対応する入力リストのアドレスが、処理されたレコードがストレージ内で占めるバイト数だけインクリメントされる。入力リストのアドレスの形成および更新は、アドレス指定モードによって決まる。
24ビット・アドレス指定モードでは、更新された入力リストのアドレスのビット40~63が、パラメータ・ブロックの入力リストのアドレス・フィールド内の対応するビットを置き換え、更新された入力リストのアドレスのビット位置40からの繰り上げが無視され、パラメータ・ブロックの入力リストのアドレス・フィールドのビット位置0~39の内容が0に設定される。
31ビット・アドレス指定モードでは、更新された入力リストのアドレスのビット33~63が、パラメータ・ブロックの入力リストのアドレス・フィールド内の対応するビットを置き換え、更新された入力リストのアドレスのビット位置33からの繰り上げが無視され、パラメータ・ブロックの入力リストのアドレス・フィールドのビット位置0~32の内容が0に設定される。
64ビット・アドレス指定モードでは、更新された入力リストのアドレスのビット0~63が、パラメータ・ブロックの入力リストのアドレス・フィールド内の対応するビットを置き換え、更新された入力リストのアドレスのビット位置0からの繰り上げが無視される。
【0117】
24ビット・アドレス指定モードおよび31ビット・アドレス指定モードでは、命令の実行が終了し、命令が抑制されることも、無効化されることも、打ち切られることもなかった場合、アクティブな入力リストに対応する64ビットの入力リストのアドレスは、それらのアドレスがインクリメントされない場合でも、それぞれ更新される。
【0118】
入力リストNの長さ393、395、397:パラメータ・ブロックは、入力リストごとに、8バイトの入力リストの長さを指定する。入力リスト番号Nの場合、パラメータ・ブロックのバイト584+16×N~591+16×Nは、入力リスト番号N内のバイト数を指定する符号なし整数を含む。
【0119】
AILCCフィールドによって指定された、アクティブな状態にある入力リストに対応する各入力リストの長さが、動作への入力になり、動作によって更新される。AILCCフィールドによって指定された、非アクティブな状態にある入力リストに対応する各入力リストの長さは、動作によって無視される。
【0120】
さまざまなアドレス指定モードでは、入力リストの長さフィールドのビット位置0~63の内容が、対応する入力リストの長さを指定する。
【0121】
入力リストの1つまたは複数のレコードが動作の一部として処理された場合、対応する入力リストの長さが、処理されたレコードがストレージ内で占めるバイト数だけデクリメントされる。さまざまなアドレス指定モードでは、更新された入力リストの長さのビット0~63が、パラメータ・ブロックの対応する入力リストの長さフィールド内のビット0~63を置き換える。
【0122】
予備:パラメータ・ブロック内には、複数の予備フィールド(例えば、他の情報を含まないフィールド)が存在する。動作への入力として、予備フィールドはゼロを含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。動作が終了するときに、予備フィールドは、0として格納されてよく、または変化しなくてよい。
【0123】
図5A~5Bは、パラメータ・ブロック内のフィールドを含む、SORTL-SFLR機能への入力の元の値および最終的な値の一例をまとめている。
【0124】
1つの実施形態では、条件コード3が設定されて動作を終了することと、動作を再開する目的で、命令に分岐して戻り、命令を再実行することとの間で、プログラムがパラメータ・ブロックを変更することは、必要とされず、期待されていない。
【0125】
1つの実施形態では、SORTL-SFLR機能は、異なる入力リストからのレコードのキー間の複数の比較を含む。キーを比較するときに、1つの例では、以下が当てはまる。
キーは、符号なし2進整数として扱われ、非構造化データとも呼ばれる。
どのキーが最小値または最大値を含んでいるかを決定するときに、比較されている各キーのすべてのバイトにアクセスすることは、必要でなくてよい。一度に比較される各キーのバイト数は、キー比較の単位と呼ばれ、モデルに依存する。アクセスされるキーのバイト数は、キー比較の単位の整数である。
等しい値のキーを比較する場合、1つの例では、最高の入力リスト番号を有する入力リストからのキーが、並べ替え順序において同じ値を有する他のキーの前になるように選択される。この場合、最高の入力リスト番号を有する入力リストからの対応するレコードが、同じキー値を有する他のレコードの前に、第1のオペランドに格納される。これは、昇順および降順の並べ替え順序に当てはまる。
【0126】
1つの実装は、アクティブな入力リストからのレコード間の以前の比較の履歴を維持してよい。この履歴が使用可能かつ適用可能である場合、以前に比較されたレコードにアクセスして比較する代わりに、この履歴が参照されてよい。履歴を参照することによって、結果を生成するために必要な実行時間を削減し、コンピューティング環境内の処理を改善する。
【0127】
SORTL-SFLR機能は、指定された並べ替え順序で、入力リストのセットからレコードを選択すること、および選択されたレコードを第1のオペランドの位置に配置することを含む。動作が進むときに、第1のオペランドのアドレスおよびアクティブな入力リストのアドレスの現在の値が維持される。機能は、動作の単位で進む。動作の各単位の間、アクティブな入力リストごとに、対応する現在の入力リストのアドレスによって指定されたキーが調べられ、1つのレコードが第1のオペランドの位置に配置される。
【0128】
マージ・モード(MM)が0である場合、アクティブな入力リストがリストを指定し、これらのリストの各々が、ランダムな順序で、例えば左から右にレコードを含んでいるとして扱われる。MMが0である場合、第1のオペランドの位置に格納されたレコードが、1つまたは複数の出力リストを構成し、各出力リストの開始アドレスおよび長さが第2のオペランドの位置に格納される。MMが0である場合、動作の各単位は、1つの例として、指定された順序で以下のステップを含む。
1.第1のオペランドの位置に格納する次のレコードが最新の出力リスト(直前に第1のオペランドの位置に格納されたレコードを含む出力リスト)に含まれてよいかどうかを、次のように決定する。
継続フラグ(CF)が0であり、動作の最初の単位が処理されている場合、第1のオペランドの位置にレコードが格納されておらず、格納する次のレコードが出力リストの最初のレコードになる。
CFが1であり、命令の以前の実行が条件コード1を伴って終了しており、命令の現在の実行のための動作の最初の単位が処理されている場合、格納する次のレコードが出力リストの最初のレコードになる。
CFが1、IILFが0、EILFが0であり、命令の以前の実行が条件コード2を伴って終了しており、命令の現在の実行のための動作の最初の単位が処理されている場合、格納する次のレコードが出力リストの最初のレコードになる。
CFが1、IILFまたはEILFが1であり、命令の以前の実行が条件コード2を伴って終了しており、命令の現在の実行のための動作の最初の単位が処理されている場合、格納する次のレコードが最新の出力リストに含まれてよい。
CFが1であり、命令の以前の実行が条件コード3を伴って終了しており、命令の現在の実行のための動作の最初の単位が処理されている場合、格納する次のレコードが最新の出力リストに含まれてよい。
処理されている動作の単位が、命令の現在の実行のための動作の最初の単位でない場合、格納する次のレコードが最新の出力リストに含まれてよい。
2.格納する次のレコードが最新の出力リストに含まれてよい場合、最新の出力リストに含まれる資格があるレコードのセットを決定する。アクティブであり、空でなく、不完全でない入力リストごとに、現在の入力リストのアドレスによって指定されたレコードのキー(現在の入力キー)を、直前に第1のオペランドの位置に格納されたレコードのキー(以前に格納されたキー)と比較する。そのために、以前に格納されたキーへの参照は、第1のオペランドの位置への参照ではない。代わりに、この参照は、キーが選択された入力リストへの参照であるか、または継続レコード再呼び出しバッファへの参照である。動作が再開されており、命令の現在の実行が第1のオペランドの位置にまだレコードを何も配置していない場合、この参照は継続レコード再呼び出しバッファへの参照である。
並べ替え順序が昇順であり、現在の入力キーの値が以前に格納されたキーの値以上である場合、現在の入力キーが、最新の出力リストに含まれる資格があるキーのセットに属していると見なす。並べ替え順序が降順であり、現在の入力キーの値が以前に格納されたキーの値以下である場合、現在の入力キーが、最新の出力リストに含まれる資格があるキーのセットに属していると見なす。最新の出力リストに含まれる資格があるキーのセット内のキーの数が0である場合、格納する次のレコードが出力リストの最初のレコードになる。最新の出力リストに含まれる資格があるキーのセット内のキーの数が0でない場合、格納する次のレコードが最新の出力リストに含められる。
3.格納する次のレコードが最新の出力リストに含められる場合、最新の出力リストに含まれる資格があるキーのセット内のキーを比較する。並べ替え順序が昇順である場合、最小のキー値および対応するレコードを選択する。並べ替え順序が降順である場合、最大のキー値および対応するレコードを選択する。
4.格納する次のレコードが出力リストの最初のレコードになる場合、アクティブであり、空でなく、不完全でない入力リストに対応する現在の入力リストのアドレスによって指定されたレコードのキーを比較する。並べ替え順序が昇順である場合、最小のキー値および対応するレコードを選択する。並べ替え順序が降順である場合、最大のキー値および対応するレコードを選択する。
5.選択されたレコードが、現在の第1のオペランドの位置に配置される。
6.現在の第1のオペランドのアドレスが、選択されたレコードの長さに等しいバイト数だけインクリメントされる。
7.選択されたレコードを含んでいる入力リストに対応する現在の入力リストのアドレスが、選択されたレコードの長さに等しいバイト数だけインクリメントされる。
【0129】
マージ・モードが0である場合の動作の一部として、第1のオペランドの位置に格納された出力リストごとに、対応する出力リストの概要説明(OLD)が第2のオペランドの位置に格納される。各OLDは、例えば、対応する出力リスト内の最初のレコードの位置を指定する8バイトのOLDアドレス、および例えば、対応する出力リストの長さをバイト単位で指定する8バイトのOLD長を含む。条件コード3、条件コード2および1に等しいEILF、または条件コード2および1に等しいIILFを伴って動作が終了した場合、動作の終了時に処理されている最新の出力リストが部分的に処理されており、完全に処理されていないことがある。すなわち、部分的に処理された出力リスト内のレコードの数は、中間値であり、動作が再開するときに増やされることがある。その場合、動作が再開された後に出力リストが完全に処理されるまで、部分的に処理された出力リストに対応する出力リストの概要説明(OLD)が第2のオペランドの位置に配置されない。
【0130】
マージ・モードが0であり、1つまたは複数のレコードを格納した後に動作が終了し、正常完了が発生しなかった場合、第1のオペランドの位置に格納された最後のレコードのキーも、継続レコード再呼び出しバッファに格納される。
【0131】
マージ・モードが0であり、正常完了に起因して動作が終了した場合、1つまたは複数の出力リストが第1のオペランドの位置に配置されており、出力リストの概要説明が第2のオペランドの位置に配置されている。プログラムは、その後のSORTL動作のために、出力リストの概要説明をパラメータ・ブロック内の入力リストのアドレスおよび長さの値として使用してよい。
【0132】
図6A~6Dは、0に等しいマージ・モードを使用してSORTL-SFLRを実行する前および後の、第1および第2のオペランドを示している。
図6A~6Bを参照すると、FOSA600は第1のオペランドの開始アドレス(R
1によって指定された位置)であり、FOEA602は第1のオペランドの終了アドレス(R
1+(R
1+1)-1によって指定された位置)であり、OL604は出力リスト(例えば、出力リスト1...出力リストN)である。さらに、
図6C~6Dを参照すると、SOSA610は第2のオペランドの開始アドレス(R
2によって指定された位置)であり、SOEA612は第2のオペランドの終了アドレス(R
2+(R
2+1)-1によって指定された位置)であり、OLD614は出力リストの指定(例えば、出力リストの指定1...出力リストの指定N)である。
【0133】
マージ・モード(MM)が1である場合、アクティブな入力リストがリストを指定し、これらのリストの各々が、パラメータ・ブロックのSOフィールドによる指定に従って並べ替えられた順序で、左から右にレコードを含んでいるとして扱われる。MMが1である場合、第1のオペランドの位置に格納されたレコードは、単一の出力リストを構成する。MMが1である場合、動作の各単位は、例えば1つの例として、指定された順序で以下のステップを含む。
1.アクティブであり、空でなく、不完全でない入力リストに対応する現在の入力リストのアドレスによって指定されたレコードのキーを比較する。並べ替え順序が昇順である場合、最小のキー値および対応するレコードを選択する。並べ替え順序が降順である場合、最大のキー値および対応するレコードを選択する。
2.選択されたレコードが、現在の第1のオペランドの位置に配置される。
3.現在の第1のオペランドのアドレスが、選択されたレコードの長さに等しいバイト数だけインクリメントされる。
4.選択されたレコードを含んでいる入力リストに対応する現在の入力リストのアドレスが、選択されたレコードの長さに等しいバイト数だけインクリメントされる。
【0134】
図7A~7Bは、1に等しいマージ・モードを使用してSORTL-SFLRを実行する前および後の、第1のオペランドを示している。
図7A~7Bを参照すると、FOSA700は第1のオペランドの開始アドレス(R
1によって指定された位置)であり、FOEA702は第1のオペランドの終了アドレス(R
1+(R
1+1)-1によって指定された位置)であり、OL704は出力リスト(例えば、出力リスト1)である。
【0135】
マージ・モードが0または1である場合の動作の一部として、アクティブな状態にある入力リストのアドレスおよび長さが更新される。アクティブな状態にある入力リストごとに、入力リストのアドレスが、動作中に選択されて第1のオペランドの位置に配置された入力リストからのレコードのバイト数だけインクリメントされ、入力リストの長さが、同じ数だけデクリメントされる。入力リストのアドレスの形成および更新は、アドレス指定モードによって決まる。
【0136】
動作が進むときに、不完全な入力リストが発生することがある。不完全な入力リストからのレコードを参照しようとする動作の単位の間に、不完全な入力リストが認識される。不完全な入力リストを認識する前に、動作の複数の単位が完了されることがある。これは、マージ・モードが0または1である場合に当てはまる。
【0137】
動作が進むときに、入力リスト、第1のオペランド、または第2のオペランドに対するアクセスに関するアクセス例外が適用可能である場合、そのようなアクセス例外が発生することがある。格納位置にアクセスしようとする動作の単位の間に、その位置にアクセス例外が存在する場合、アクセス例外が認識される。アクセス例外を認識する前に、動作の複数の単位が完了されることがある。これは、マージ・モードが0または1である場合に当てはまる。
【0138】
部分的完了を伴って動作が終了した場合、レコード間の以前の比較の履歴を含むことがある内部状態データが、パラメータ・ブロックの継続状態バッファ(CSB)フィールドに格納される。その後、動作を再開する目的で命令が再実行される場合、動作が再開するときに、CSBの内容が実装に読み込まれてよく、履歴が参照されてよい。これは、マージ・モードが0または1である場合に当てはまる。
【0139】
アクティブな入力リストからのレコードが並べ替えられて、第1のオペランドに格納されたときに、正常完了が発生する。
【0140】
正常完了に起因して動作が終了した場合、1つの実施形態では、以下が発生する。
汎用レジスタR1内のアドレスおよび汎用レジスタR1+1内の長さが更新される。
MMが0である場合、汎用レジスタR2内のアドレスおよび汎用レジスタR2+1内の長さが更新される。
アクティブな状態にある入力リストに関して、入力リストNのアドレス・フィールドおよび入力リストNの長さフィールドが更新される。
モデル・バージョン番号が設定される。
継続フラグが0に設定される。
空入力リスト・フラグが0に設定される。
空入力リスト番号が0に設定される。
不完全入力リスト・フラグが0に設定される。
不完全入力リスト番号が0に設定される。
条件コード0が設定される。
【0141】
アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【0142】
正常完了が発生した場合、動作の終了後に、パラメータ・ブロックのCSBフィールドが定義されない。
【0143】
CPUによって決定されたバイト数が処理されたときに動作が終了し、1つの実施形態では、以下が発生する。
汎用レジスタR1内のアドレスおよび汎用レジスタR1+1内の長さが更新される。
MMが0である場合、汎用レジスタR2内のアドレスおよび汎用レジスタR2+1内の長さが更新される。
アクティブな状態にある入力リストに関して、入力リストNのアドレス・フィールドおよび入力リストNの長さフィールドが更新される。
モデル・バージョン番号が設定される。
継続フラグが1に設定される。
MMが0であり、命令の実行中に1つまたは複数のレコードが第1のオペランドの位置に配置された場合、キー値が継続レコード再呼び出しバッファに格納される。
継続状態バッファが更新される。
空入力リスト・フラグが0に設定される。
空入力リスト番号が0に設定される。
不完全入力リスト・フラグが0に設定される。
不完全入力リスト番号が0に設定される。
条件コード3が設定される。
【0144】
アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【0145】
CPUによって決定されたバイト数は、モデルによって決まり、命令が実行されるたびに異なる数であってよい。CPUによって決定されたバイト数は、通常、0以外である。この数は0になり、進行しない状況のように見えることがあるが、CPUは、この進行しない状況の無限の再発を防ぐ。
【0146】
例えば条件コード3が設定されて命令が終了した後に、プログラムが命令に関する入力の仕様も、出力の仕様も変更せずに、分岐して戻り、命令を再実行して動作を再開することが期待される。
【0147】
空入力リスト制御(EILCL)のビット0が1であり、動作中に入力リスト0の長さが0になり、正常完了が当てはまらない場合、1つの実施形態では、動作が終了して以下が発生する。
汎用レジスタR
1内のアドレスおよび汎用レジスタR
1+1内の長さが更新される。
MMが0である場合、汎用レジスタR
2内のアドレスおよび汎用レジスタR
2+1内の長さが更新される。
アクティブな状態にある入力リストに関して、入力リストNのアドレス・フィールドおよび入力リストNの長さフィールドが更新される。
モデル・バージョン番号が設定される。
継続フラグが1に設定される。
EILCLが2進数10であり、MMが0である場合、キー値が継続レコード再呼び出しバッファに格納されてよい。EILCLが2進数11であり、MMが0である場合、キー値が継続レコード再呼び出しバッファに格納される。いずれの場合も、命令の実行中に、1つまたは複数のレコードが第1のオペランドの位置に配置されている。
継続状態バッファが更新される。
空入力リスト・フラグが設定される(動作が終了するときのさまざまなパラメータ・ブロックのフィールドを示している
図8を参照)。
空入力リスト番号が設定される(
図8を参照)。
不完全入力リスト・フラグが0に設定される。
不完全入力リスト番号が0に設定される。
条件コード2が設定される。
【0148】
アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【0149】
空入力リスト制御(EILCL)のビット1が1であり、動作中に入力リスト0以外のアクティブな入力リストの長さが0になり、正常完了が当てはまらない場合、1つの実施形態では、動作が終了して以下が発生する。
汎用レジスタR
1内のアドレスおよび汎用レジスタR
1+1内の長さが更新される。
MMが0である場合、汎用レジスタR
2内のアドレスおよび汎用レジスタR
2+1内の長さが更新される。
アクティブな状態にある入力リストに関して、入力リストNのアドレス・フィールドおよび入力リストNの長さフィールドが更新される。
モデル・バージョン番号が設定される。
継続フラグが1に設定される。
EILCLが2進数01であり、MMが0である場合、キー値が継続レコード再呼び出しバッファに格納されてよい。EILCLが2進数11であり、MMが0である場合、キー値が継続レコード再呼び出しバッファに格納される。いずれの場合も、命令の実行中に、1つまたは複数のレコードが第1のオペランドの位置に配置されている。
継続状態バッファが更新される。
空入力リスト・フラグが設定される(
図8を参照)。
空入力リスト番号が設定される(
図8を参照)。
不完全入力リスト・フラグが0に設定される。
不完全入力リスト番号が0に設定される。
条件コード2が設定される。
【0150】
アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【0151】
アクティブな状態にある不完全な入力リストが発生した場合、動作が終了し、1つの実施形態では、以下が発生する。
汎用レジスタR1内のアドレスおよび汎用レジスタR1+1内の長さが更新される。
MMが0である場合、汎用レジスタR2内のアドレスおよび汎用レジスタR2+1内の長さが更新される。
アクティブな状態にある入力リストに関して、入力リストNのアドレス・フィールドおよび入力リストNの長さフィールドが更新される。
モデル・バージョン番号が設定される。
継続フラグが1に設定される。
MMが0であり、命令の実行中に1つまたは複数のレコードが第1のオペランドの位置に配置された場合、キー値が継続レコード再呼び出しバッファに格納される。
継続状態バッファが更新される。
空入力リスト・フラグが0に設定される。
空入力リスト番号が0に設定される。
不完全入力リスト・フラグ(IILF)が1に設定される。
発生した不完全な入力リストの入力リスト番号が、パラメータ・ブロックの不完全入力リスト番号(IILN)フィールドに配置される。
条件コード2が設定される。
【0152】
アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【0153】
第1のオペランドの長さが、他のレコードを格納するのに不十分である場合、動作が終了し、1つの実施形態では、以下が発生する。
汎用レジスタR1内のアドレスおよび汎用レジスタR1+1内の長さが更新される。
MMが0である場合、汎用レジスタR2内のアドレスおよび汎用レジスタR2+1内の長さが更新される。
アクティブな状態にある入力リストに関して、入力リストNのアドレス・フィールドおよび入力リストNの長さフィールドが更新される。
モデル・バージョン番号が設定される。
継続フラグが1に設定される。
MMが0であり、命令の実行中に1つまたは複数のレコードが第1のオペランドの位置に配置された場合、キー値が継続レコード再呼び出しバッファに格納されてよい。
継続状態バッファが更新される。
空入力リスト・フラグが0に設定される。
空入力リスト番号が0に設定される。
不完全入力リスト・フラグが0に設定される。
不完全入力リスト番号が0に設定される。
条件コード1が設定される。
【0154】
アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【0155】
マージ・モード(MM)が0であり、第2のオペランドの長さが16未満である場合、動作が終了し、1つの実施形態では、以下が発生する。
汎用レジスタR1内のアドレスおよび汎用レジスタR1+1内の長さが更新される。
汎用レジスタR2内のアドレスおよび汎用レジスタR2+1内の長さが更新される。
アクティブな状態にある入力リストに関して、入力リストNのアドレス・フィールドおよび入力リストNの長さフィールドが更新される。
モデル・バージョン番号が設定される。
継続フラグが1に設定される。
命令の実行中に1つまたは複数のレコードが第1のオペランドの位置に配置された場合、キー値が継続レコード再呼び出しバッファに格納されてよい。
継続状態バッファが更新される。
空入力リスト・フラグが0に設定される。
空入力リスト番号が0に設定される。
不完全入力リスト・フラグが0に設定される。
不完全入力リスト番号が0に設定される。
条件コード1が設定される。
【0156】
アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【0157】
命令の実行が完了で終了し(抑制、無効化、または打ち切りで終了しない)、正常完了が発生しない場合、動作終了条件は、部分的完了と呼ばれる。
【0158】
第1のオペランドの位置、第2のオペランドの位置、継続レコード再呼び出しバッファ、および格納されているパラメータ・ブロックの一部に対して、適用可能な場合、PER(プログラム・イベント記録)ストレージ変更イベントが認識される。PERストレージ変更イベントが認識された場合、イベントが報告される前に、4K未満の追加のバイトが、指定されたPERストレージ領域と交差するオペランドの位置に格納される。
【0159】
パラメータ・ブロック、第1のオペランドの位置、および第2のオペランドの位置に対して、適用可能な場合、PERゼロ・アドレス検出イベントが認識される。ゼロ・アドレス検出は、パラメータ・ブロック内で指定された入力リストのアドレスおよび継続レコード再呼び出しバッファ原点には適用されない。
【0160】
SORTL-SFLR機能に適用されるその他の条件の例の説明については、下の「その他の条件」を参照する。
【0161】
条件コード1を伴って命令が終了した場合、プログラムは、必要に応じて、第1のオペランドのアドレス、第1のオペランドの長さ、第2のオペランドのアドレス、第2のオペランドの長さ、任意のアクティブな入力リストのアドレス、および任意のアクティブな入力リストの長さを変更し、その後、動作を再開してよい。
【0162】
条件コード2を伴って命令が終了し、IILFが0に等しく、EILFが0に等しい場合、プログラムは、必要に応じて、第1のオペランドのアドレス、第1のオペランドの長さ、第2のオペランドのアドレス、第2のオペランドの長さ、任意のアクティブな入力リストのアドレス、および任意のアクティブな入力リストの長さを変更し、その後、動作を再開してよい。
【0163】
条件コード2を伴って命令が終了し、EILFが1に等しい場合、プログラムは、必要に応じて、EILNによって指定された入力リストのアドレスおよび長さを変更し、その後、動作を再開してよい。この場合、マージ・モード(MM)が1であるとき、プログラムは、第1のオペランドのアドレスおよび第1のオペランドの長さを変更してもよい。
【0164】
条件コード2を伴って命令が終了し、IILFが1に等しい場合、プログラムは、必要に応じて、IILNによって指定された入力リストのアドレスおよび長さを変更し、その後、動作を再開してよい。この場合、マージ・モード(MM)が1であるとき、プログラムは、第1のオペランドのアドレスおよび第1のオペランドの長さを変更してもよい。
【0165】
命令が条件コード3を伴って終了し、命令を再実行して動作を再開する前に、プログラムが、任意のアクティブな入力リストのアドレスまたは長さ、第1のオペランドのアドレスまたは長さ、あるいは第2のオペランドのアドレスまたは長さを変更した場合、結果が予測不可能になる。
【0166】
機能コード2:SORTL-SVLR(可変長レコード並べ替え)
SORTL-SVLR機能は、以下を除いて、SORTL-SFLR機能と同じように動作する。
レコードは、例えば
図9に示されているように、固定長のキー900、8バイトのペイロード長(PL:payload length)902、および可変長のペイロード904を含む。したがって、レコードは可変長を有する。
SORTL-SVLR機能の場合のパラメータ・ブロックのバイト14~15は、無視される。
各レコードのペイロード長フィールドの最下位の例えば2バイトは、同じレコード内のペイロードの長さをバイト単位で指定する符号なし2進整数を含む。0のペイロード長は有効である。ペイロード長は、例えば8の倍数であるべきであり、そうでない場合、1つの例では、一般オペランド・データ例外が認識される。ペイロード長フィールドの(例えば)最上位の6バイトは予備であり、ゼロを含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。キー長(8)およびペイロード長の合計は、例えば4096より大きくなるべきではなく、そうでない場合、1つの例では、一般オペランド・データ例外が認識される。不適切なペイロード長の結果として一般オペランド・データ例外が認識された場合、この例外が発生したアクティブな入力リストに対応する入力リストのアドレスは、誤ったレコードの左端のバイトの論理アドレスを指定する。可変長レコードが第1のオペランドの位置に格納される場合、ペイロード長フィールドの予備のバイトは変更されない。
キー・サイズより大きく、レコード・サイズより小さい入力リスト長を有する入力リストからのレコードのキーのみを参照しようとする動作の単位の間に、不完全な入力リストが認識されないことがある。この場合、不完全な入力リストからのレコードを第1のオペランドの位置に格納しようとするときに、不完全な入力リストが認識される。
【0167】
SORTL-SVLR機能の場合のパラメータ・ブロックは、上で示されたバイト14~15を除いて、SORTL-SFLR機能の場合のパラメータ・ブロックと同じである。
【0168】
SORTL-SVLR機能に適用されるその他の条件の説明については、下の「その他の条件」を参照する。
【0169】
特殊な条件
1つの実施形態では、リスト並べ替えの実行が試みられ、次のいずれかが当てはまる場合、指定例外が認識される。
汎用レジスタ0のビット57~63が、割り当てられていないか、またはインストールされていない機能コードを指定する。
R1フィールドが、奇数番号が付けられたレジスタまたは汎用レジスタ0を指定する。
R2フィールドが、奇数番号が付けられたレジスタまたは汎用レジスタ0を指定する。これは、マージ・モード(MM)が0または1である場合に当てはまる。
パラメータ・ブロックが、ダブルワード境界上で指定されない。
SORTL-SFLR機能またはSORTL-SVLR機能が指定され、第1のオペランドがダブルワード境界上で指定されない。
MMが0である場合に、SORTL-SFLR機能またはSORTL-SVLR機能が指定され、第2のオペランドがダブルワード境界上で指定されない。
【0170】
1つの実施形態では、リスト並べ替えの実行が試みられ、次のいずれかが当てはまる場合、一般オペランド・データ例外が認識される。
SORTL-SFLR機能またはSORTL-SVLR機能が指定され、パラメータ・ブロック・バージョン番号のビット0~7のうちのどのビットも1の値を含んでいないか、または複数のビットが1の値を含んでおり、その場合、動作が抑制される。
SORTL-SFLR機能またはSORTL-SVLR機能が指定され、パラメータ・ブロック・バージョン番号によって指定されたパラメータ・ブロックのサイズまたは形式がモデルによってサポートされておらず、その場合、動作が抑制される。
SORTL-SFLR機能またはSORTL-SVLR機能が指定され、レコード・キー長が、0のキー・サイズ、8の倍数でないキー・サイズ、または4096より大きいキー・サイズを指定し、その場合、動作が抑制される。
SORTL-SFLR機能が指定され、レコード・ペイロード長が、8の倍数でないペイロード・サイズを指定するか、またはペイロード・サイズが、キー・サイズに加算されたときに4096よりも大きくなり、その場合、動作が抑制される。
SORTL-SVLR機能が指定され、レコード・ペイロード長が、8の倍数でないペイロード・サイズを指定するか、またはペイロード・サイズが、キー・サイズに加算されたときに4088よりも大きくなり、その場合、動作が抑制されるか、または打ち切られるかは、モデルに依存する。
SORTL-SFLR機能またはSORTL-SVLR機能が指定され、アクティブな入力リストのカウント・コード(AILCC)の値に1を加えた値が、パラメータ・ブロックによって表された入力リストの数よりも大きく、その場合、動作が抑制される。
SORTL-SFLR機能またはSORTL-SVLR機能が指定され、アクティブな入力リストに対応する入力リストのアドレスがダブルワード境界上で指定されず、その場合、動作が抑制される。
【0171】
その他の条件
1つの実施形態では、次の条件が当てはまる。
命令の実行が割り込み可能である。割り込みが発生した場合、命令が再実行されるときに割り込みの時点で再開するように、汎用レジスタR1およびR2内のアドレス、汎用レジスタR1+1およびR2+1内の長さ、およびパラメータ・ブロックの特定のフィールドが更新される。
【0172】
第1のオペランドのアドレスによって指定された位置の右から4Kバイトを超える位置に対して、アクセス例外が認識されない。入力リストのアドレスによって指定された位置の右から4Kバイトを超える位置に対して、アクセス例外が認識されない。
【0173】
アクセス例外が、第1のオペランド、第2のオペランド、またはいずれかの入力リストに対して認識されることになっている場合、その結果は、例外が認識されるか、または条件コード3が設定されるかのいずれかである。条件コード3が設定された場合、例外条件がまだ存在するということを仮定すると、同じオペランドの処理を続行するために命令が再実行されるときに、例外が認識される。
【0174】
レコードのキーがページ境界と交差し、両方のページにアクセス例外条件が存在する場合、いずれかのアクセス例外が認識されてよい。
【0175】
動作の単一の単位の間に処理されている複数のキーにアクセス例外条件が存在する場合、これらの条件のいずれかが認識されてよい。
【0176】
パラメータ・ブロックがページ境界と交差し、両方のページにアクセス例外条件が存在する場合、最も左のページに対してアクセス例外が認識される。
【0177】
部分的完了を伴って動作が終了した場合、最大4Kバイトのデータが、更新された第1のオペランドのアドレスによって指定された位置、またはその位置の右にある第1のオペランド内の位置に、格納されていてよい。そのような格納は、適用可能な場合、変更ビットの設定、および適用可能な場合、PERストレージ変更イベントの認識をもたらす。同じオペランドの処理を続行するために命令が再実行される場合、これらの位置への格納が繰り返される。
【0178】
このCPU、他のCPU、およびチャネル・プログラムによって観察されるとき、パラメータ・ブロック、第1のオペランド、出力リストの概要説明バッファ、およびアクティブな状態にある入力リストへの参照は、多重アクセス参照であってよく、これらの格納位置へのアクセスは、必ずしもブロック・コンカレントではなく、これらのアクセスまたは参照のシーケンスは定義されない。
【0179】
1つの実施形態では、指定された機能がSORTL-SFLRまたはSORTL-SVLRであり、以下のいずれかが当てはまる場合、結果が予測不可能になる。
パラメータ・ブロックが、いずれかのアクティブな入力リストまたは第1のオペランドに重なる。
いずれかのアクティブな入力リストが、第1のオペランドに重なる。
マージ・モードが0であり、パラメータ・ブロックが第2のオペランドまたは継続レコード再呼び出しバッファに重なる。
マージ・モードが0であり、いずれかのアクティブな入力リストが第2のオペランドまたは継続レコード再呼び出しバッファに重なる。
マージ・モードが0であり、第1のオペランドが第2のオペランドまたは継続レコード再呼び出しバッファに重なる。
マージ・モードが0であり、第2のオペランドが継続レコード再呼び出しバッファに重なる。
他のCPUまたはチャネル・プログラムが、入力リストまたは継続レコード再呼び出しバッファ内のレコードのキーに格納する。
【0180】
生成される条件コードの例:
0 正常完了
1 第1のオペランドの長さがレコードのサイズ未満であるか、またはマージ・モードが0であり、第2のオペランドの長さが16未満である(すなわち、第1または第2のオペランドの長さが、続行するのに不十分である)
2 不完全な入力リストが発生したか(IILF=1)、またはEILCLが0以外であり、動作中に入力リストの長さが0に等しくなった(すなわち、不完全な入力リストまたは空の入力リストが発生した)
3 CPUによって決定されたデータ量が処理された(すなわち、CPUによって決定された完了)
【0181】
プログラム例外:
アクセス(入力リストのフェッチ、パラメータ・ブロックおよび継続レコード再呼び出しバッファのフェッチおよび格納、オペランド1および2の格納)
DXC(Data Exception Code:データ例外コード)0を伴うデータ、一般オペランド
演算(改良された並べ替え機能がインストールされていない場合)
指定
トランザクション制約
【0182】
リスト並べ替え命令の実行の優先度が以下に示される。13で始まる優先度の値を有する複数の条件が存在する場合、認識される条件は、動作が進むときに最初に発生した条件である。動作が再開されている(命令の実行の開始時に、継続フラグが1である)場合、アクティブな空でない入力リストに最初にアクセスする代わりに、キー間の以前の比較の履歴が使用されてよい。その結果、以前の比較の履歴が使用されない場合と比較して、処理の同じ時点で、特定の入力リストへのアクセスに関するアクセス例外が発生しないことがある。可変長レコードが処理されるときに、レコード長の関数である条件が、ペイロード長が決定される前に部分的に評価され、ペイロード長が決定された後に完全に評価されてよい。その結果、すべての要件を完全に評価した後ではなく、要件を部分的に評価した後にのみ、条件が存在するということが決定された場合、観察された優先度は、そのような条件間で異なることがある。
【0183】
実行の優先度(SORTL)
1.~6. 一般的なケースに関する、プログラム割り込み条件の優先度と同じ優先度を持つ例外。
7.A 第2の命令のハーフワードに関するアクセス例外。
7.B 演算例外。
7.C トランザクション制約。
8.A 無効な機能コードまたは無効なレジスタ番号に起因する指定例外。
8.B ダブルワード境界上で指定されない第1のオペランドに起因する指定例外。
8.C ダブルワード境界上で指定されない第1のオペランドに起因する指定例外。
8.D ダブルワード境界上で指定されない第2のオペランドに起因する指定例外であり、マージ・モードが0である。
9. パラメータ・ブロックのバイト0~7へのアクセスに関するアクセス例外。
10. パラメータ・ブロック内のPBVNフィールドのサポートされていない値に起因する一般オペランド・データ例外。
11. バイト0~7以外のパラメータ・ブロックのバイトへのアクセスに関するアクセス例外。
12. PBVN以外のパラメータ・ブロック内のフィールドの無効な値に起因する一般オペランド・データ例外。
13.A アクティブな入力リストへのアクセスに関するアクセス例外。
13.B マージ・モードが0である場合の継続レコード再呼び出しバッファへのアクセスに関するアクセス例外。
13.C 第1のオペランドへのアクセスに関するアクセス例外。
13.D マージ・モードが0である場合の第2のオペランドへのアクセスに関するアクセス例外。
13.E 不完全な入力リストに起因する条件コード2。
13.F 第1のオペランドの不十分な長さに起因する条件コード1。
13.G マージ・モードが0である場合の第2のオペランドの不十分な長さに起因する条件コード1。
13.H 可変長レコードの無効なペイロード長に起因する一般オペランド・データ例外。
13.I 空の入力リストに起因する条件コード2。
14. 条件コード3。
【0184】
プログラミングに関する注意。1つの実施形態では、
1.空入力リスト制御(EILCL)の意図された使用は、次のとおりである。
EILCL(0:1)
(2進数) 説明
00 アクティブな入力リストからのレコード(例えば、すべてのアクティブな入力リストからのすべてのレコード)が格納された後に停止する。
10 入力リスト0(常にアクティブ)が空になった後に停止する。
11 いずれかのアクティブな入力リストが空になった後に停止する。
2. アクティブな入力リストのカウント・コード(AILCC)が0である場合、例えば1つのアクティブな入力リストのみが存在し、第1のオペランドの位置に格納された結果が、入力リスト0からフェッチされたデータと同じである。
3. 別々の命令およびデータ・キャッシュを実装するモデルが、命令キャッシュを使用して、アクティブな入力リスト内のデータへのストレージ・オペランド・フェッチ参照を実行してよい。
4. プログラムが、大きいデータ・セットの処理の一部として、0に等しいマージ・モードを使用して複数回、リスト並べ替えを呼び出す予定である場合、プログラムは、1つの例では、使用可能な入力リストを利用して、入力リスト間で均等にレコードを分割する。これによって、データ・セット全体を並べ替えるときにデータがアクセスされる回数を減らす。
5. 0に等しいマージ・モードを使用するリスト並べ替えが、設定された条件コード0および第2のオペランド内の複数の出力リストの概要説明(OLD)を伴って終了した後に、並べ替えられた順序でレコードの単一のリストを生成しようとするプログラムは、以前のリスト並べ替えの呼び出しから得られたOLDであると指定された入力リストを使用して、他のリスト並べ替え動作を呼び出す。この場合、1つの例では、リスト並べ替えの第2の呼び出しは、1に等しいマージ・モードを指定する。
同様に、1つの実施形態では、0に等しいマージ・モードを使用するリスト並べ替えを、必要な回数または望ましい回数呼び出して、多数のランダムな順序のレコードから並べ替えられたリストの完全なセットを生成した後に、1つの例では、1に等しいマージ・モードを使用して、リスト並べ替えが必要な回数または望ましい回数、呼び出され、単一の並べ替えられたリストを生成する。
6. (例えば)昇順の並べ替え順序で、複数の並べ替えられたリストを単一のリストにマージするときに、各レコードがアクセスされる回数を減らすために、プログラムは、1つの実施形態では、次のプロセスを実行する。
リスト並べ替えに使用できる入力リストの最大数(N)を決定する。
単一のリストにまだマージされていない並べ替えられたリストの最初のレコードのキーを比較する。最小の最初のキー値を含むN個のリストを選択する。
1に等しいマージ・モード(MM)、2進数10に等しい空入力リスト制御(EILCL)、選択されたN個のリストのうちの最大の最初のキー値を含むリストの最初のレコードのみを指定する入力リスト0、および他のN-1個の選択されたリストを指定する残りの入力リストを使用して、リスト並べ替えを実行する。
条件コード2、0に等しいIILF、および0に等しいEILFを伴ってリスト並べ替えが終了した後に、このプロセスを繰り返す。
【0185】
7. 条件コード1が設定されてリスト並べ替えが終了した後に、プログラムは、1つの例では、動作を再開するためにリスト並べ替えを再び呼び出す前に、次のアクションを実行する。
第1のオペランドの長さが、処理されているレコードの最大レコード長未満である場合、必要に応じて、第1のオペランドの長さまたは第1のオペランドのアドレスおよび長さが更新されるべきである。
マージ・モード(MM)が0であり、第2のオペランドの長さが16未満である場合、必要に応じて、第2のオペランドの長さまたは第2のオペランドのアドレスおよび長さが更新されるべきである。
いずれかのアクティブな入力リストの長さが0に等しい場合、レコードの他のリストを並べ替え動作に含めることを指定するように、対応する入力リストのアドレスおよび長さが更新されてよい。
8. 条件コード2が設定されてリスト並べ替えが終了した後に、プログラムは、1つの例では、動作を再開するためにリスト並べ替えを再び呼び出す前に、次のアクションを実行する。
不完全入力リスト・フラグ(IILF)が1である場合、必要に応じて、不完全入力リスト番号(IILN)によって識別された入力リストの長さまたは入力リストのアドレスおよび長さが更新されるべきである。
空入力リスト・フラグ(EILF)が1である場合、必要に応じて、空入力リスト番号(EILN)によって識別された入力リストの長さまたは入力リストのアドレスおよび長さが更新されるべきである。
IILFが0、EILFが0、かつ入力リスト0の長さが0である場合、必要に応じて、入力リスト0の長さまたは入力リスト0のアドレスおよび長さが更新されるべきである。さらに、アクティブな入力リストのアドレスおよび長さが更新されてよく、これは、入力リスト0によって指定された1つのレコードのみが最初に存在しており、空入力リスト制御(EILCL)が2進数10である場合に、適切なアクションであってよい。
マージ・モード(MM)が1であり、第1のオペランドの長さが、処理されているレコードの最大レコード長未満である場合、必要に応じて、第1のオペランドの長さまたは第1のオペランドのアドレスおよび長さが更新されるべきである。
MMが0であり、IILFが1またはEILFが1のいずれかである場合、第1のオペランドのアドレスおよび長さ、ならびに第2のオペランドのアドレスおよび長さが更新されるべきではない。
MMが0、IILFが0、EILFが0であり、第1のオペランドの長さが、処理されているレコードの最大レコード長未満である場合、必要に応じて、第1のオペランドの長さまたは第1のオペランドのアドレスおよび長さが更新されるべきである。
MMが0、IILFが0、EILFが0であり、第2のオペランドの長さが16未満である場合、必要に応じて、第2のオペランドの長さまたは第2のオペランドのアドレスおよび長さが更新されるべきである。
【0186】
本明細書において説明されているように、1つの態様では、汎用プロセッサ上で並べ替えまたはマージあるいはその両方の動作を実行するための単一の命令(例えば、単一の設計されたマシン命令(リスト並べ替え))が提供される。1つの例では、データベースに対する並べ替えまたはマージあるいはその両方の動作を実施し、汎用プロセッサ上で実行されるプログラムは、基本命令のかなりのサブセットを置き換え、単一の命令を使用して動作を実施することができる。例えば、この命令は、命令セット・アーキテクチャ(ISA:Instruction Set Architecture)において定義されたハードウェア命令である。その結果、並べ替えまたはマージあるいはその両方の動作に関するプログラムの複雑さが低減される。さらに、動作(したがって、プロセッサ)の性能が改善される。
【0187】
リスト並べ替え命令は、グラフィックス・プロセッシング・ユニット(GPU:graphical processing unit)、データベース・エンジン(DBE:database engine)、またはその他の種類の専用プロセッサなどの専用プロセッサではなく、有利に、汎用プロセッサ(例えば、本明細書ではプロセッサと呼ばれる中央処理装置)上で実行される。
【0188】
さまざまなフィールドおよびレジスタが説明されたが、本発明の1つまたは複数の態様は、その他のより多いか、またはより少ないフィールドまたはレジスタ、あるいはその他のサイズのフィールドおよびレジスタなどを使用してよい。多くの変形が可能である。例えば、命令の明示的に指定されたレジスタまたはフィールドの代わりに、暗黙のレジスタが使用されてよく、または暗黙のレジスタまたはフィールドの代わりに、明示的に指定されたレジスタまたはフィールドが使用されてよく、あるいはその両方であってよい。その他の変形も可能である。
【0189】
1つの例では、リスト並べ替え命令は、メガバイトまたはテラバイトのデータなどの、データベース(例えば、商用データベース)の大量のデータに対して有効である。したがって、この命令は割り込み可能であり、割り込まれたところから処理を再開することができる。
【0190】
命令が割り込まれた場合、動作(例えば、並べ替えまたはマージあるいはその両方)が部分的にのみ完了される。条件コードを、動作の部分的完了をプログラム(例えば、命令を発行するプログラム)に知らせる値に設定して、命令の実行が終了する。その後、プログラムが命令を再実行して、処理を再開してよい。
【0191】
命令は、1つの実施形態では、結果が生成される前にプロセッサにメタデータを事前に教えるために、複数の数の(例えば、かなりの数の)実行サイクルを採用する。プロセッサにメタデータを事前に教えることは、命令が実行されるか、または再実行されるたびに実行される。したがって、本発明の態様に従って、命令が再実行される時点で、以前に生成されたメタデータが再生される必要がないように、以前に生成されたメタデータが格納されて使用される。
【0192】
1つの例では、メタデータは、例えば、行われる次の比較を決定するための、入力リストのレコードの前の比較に関する情報などの、入力リストに関する情報を含んでいる、プロセッサの内部状態を含む。
【0193】
プロセッサは、メタデータを抽出し、プログラムによって提供された位置に格納する。次に、割り込みの後に命令が再実行されるときに、メタデータを再生するためのタスクを使用せずに、メタデータがこの位置から抽出され、プロセッサに読み込まれる。これによって、動作のメタデータを生成するために必要な時間を節約する。
【0194】
1つの特定の例では、コンピューティング環境は、単一のシステム・イメージとして機能するように一緒にリンクされることがある複数のシステムを含んでいる計算複合体である。個々のシステム(例えば、プロセッサ)は、同じモデル・タイプまたはバージョンでなくてよい。プログラムが、計算複合体内の任意のプロセッサ上で実行するために、発行されてよい。さらに、個々の命令が、1つのプロセッサ上で実行され、部分的に完了した状態で終了し、動作を再開するために異なるプロセッサ上で再実行されてよい。この命令は、1つの実施形態では、動作の再開を必要とせず、動作の再開に関連するオーバーヘッドを最小限に抑えるために使用されてよい、モデルに依存するデータの保存および読み込みをサポートする。モデルに依存するメタデータは、プロセッサのモデルに応じて格納され/読み込まれ、命令(例えば、並べ替え命令)の実行中に蓄積されるメタデータである。モデルに依存するメタデータは、例えば、命令を再実行するプロセッサがモデルに依存するメタデータを解釈できる場合に、命令の再実行において使用される。命令の再実行に基づいて、プロセッサがモデルに依存するメタデータを解釈できるかどうかに関する判定が行われる。プロセッサがモデルに依存するメタデータを解釈できる場合、このメタデータは、1つの例では、動作の処理およびコンピューティング環境内の性能を改善するために、命令の再実行において使用される。
【0195】
1つの実施形態では、割り込まれる前に命令を実行していたプロセッサのバージョンの指示(例えば、モデル・バージョン番号)が、命令によって指定された位置(例えば、パラメータ・ブロック内)に保存される。命令が再実行され、以前に命令を実行していたプロセッサのモデル・バージョン番号が、命令を再実行するために選択されたプロセッサのモデル・バージョン番号との定義済みの関係(例えば、等しい)を持っている場合、命令の再実行において、モデルに依存するメタデータが使用される。
【0196】
動作の実行を再開する一実施形態の詳細が、
図10A~10Bを参照してさらに説明される。例えば、
図10Aは、部分的に完了された命令に関連する処理を示しており、
図10Bは、部分的に完了された命令の実行を再開することに関連する処理を示している。この例では、命令は、リスト並べ替え命令などの、並べ替えまたはマージあるいはその両方を実行する命令であるが、他の例では、割り込み可能な他の命令であってよい。例えば、プロセッサ(例えば、プロセッサ102または204)によって
図10A~10Bの処理が実行される。
【0197】
最初に
図10Aを参照すると、プロセッサ上で実行される、並べ替えまたはマージあるいはその両方などの動作を実行する命令が、動作を完了する前に割り込まれる(ステップ1000)。部分的完了に基づいて、継続インジケータ(例えば、パラメータ・ブロック360の継続フラグ368)が例えば1に設定され、部分的完了を示す(ステップ1002)。さらに、並べ替え動作またはマージ動作、入力リストのレコードの前の比較に関する情報などの、プロセッサのモデルに依存するデータが、パラメータ・ブロック(例えば、継続状態バッファ390)に格納される(ステップ1004)。
【0198】
図10Bを参照すると、その後、選択されたプロセッサ上で命令(例えば、並べ替え/マージ命令)が実行される(ステップ1050)。この実行が命令の再実行である場合、プロセッサは、例えば、以前に命令を実行したプロセッサと同じプロセッサであるか、または計算複合体の異なるプロセッサである。この実行が命令の再実行であることを示すように継続インジケータが設定されているかどうかに関する判定が行われる(照会1052)。継続インジケータが、動作の再開を示すように設定されている場合(ステップ1053)、1つの実施形態では、選択されたプロセッサのモデル・タイプまたはバージョンが、命令が割り込まれたときに命令を実行していたプロセッサのモデル・タイプまたはバージョンと同じであるか、または互換性を持っているかどうかに関する判定がさらに行われる。例えば、前のプロセッサのモデル・バージョン番号が選択されたプロセッサのモデル・バージョン番号と同じであるかどうかに関する判定が行われる(照会1054)。モデル・バージョン番号が同じである場合(または、プロセッサが互換性を持っているという別の指示が存在する場合)、例えば、継続状態バッファ390に保存されているモデルに依存するデータが抽出され(ステップ1056)、プロセッサ内の1つまたは複数の選択された位置に読み込まれる(ステップ1058)。次に、抽出されて読み込まれたモデルに依存するデータが、命令の再実行において使用される(ステップ1060)。例えば、以前に実行された比較を繰り返す代わりに、行われる次の比較を決定するためにモデルに依存するデータが使用され、それによって実行時間を短縮し、性能を改善する。
【0199】
照会1054に戻り、モデル・バージョン番号が同じでない場合、1つの実施形態では、モデルに依存するデータを使用せずに、命令の再実行が続行する(ステップ1062)。さらに、1つの実施形態では、継続インジケータが設定されていない場合(照会1052)、この命令は、動作を再開するのではなく、動作を開始する(ステップ1064)。したがって1つの実施形態では、パラメータ・ブロック360の継続状態バッファ390からのデータ(例えば、モデルに依存するデータ)を使用せずに、動作が進む(ステップ1066)。
【0200】
本発明の1つまたは複数の態様は、コンピュータ技術に密接に関係しており、コンピュータ内の処理を容易にし、その性能を改善する。メタデータを再生する代わりに、割り込み後に命令が再実行されるときに、抽出されて保存されたメタデータを使用することによって、時間を節約し、コンピューティング環境内の性能を改善する。
【0201】
1つの特定の例では、再実行される命令がリスト並べ替え命令であり、リスト並べ替え命令は、データベースの多数のデータベース・レコードの並べ替えまたはマージあるいはその両方を実行するための単一の設計されたマシン命令であり、多くのソフトウェア命令を置き換え、コンピューティング環境内の性能を改善する。これらの並べ替えられたか、またはマージされたか、あるいはその両方のレコードは、コンピュータ処理、医用情報処理、セキュリティなどの、大量のデータの管理または使用あるいはその両方を行う多くの技術分野において使用されてよい。並べ替え/マージにおいて最適化を提供することで、情報の取得および情報の使用において実行時間を削減し、ストレージ要件を低減することによって、これらの技術分野が改善される。
【0202】
コンピューティング環境内の処理が、本発明の1つまたは複数の態様に関係している場合、その処理を容易にする一実施形態の詳細が、
図11A~11Bを参照してさらに説明される。
【0203】
図11Aを参照すると、1つの実施形態では、プロセッサ上で実行されている命令の動作の処理が完了の前に割り込まれたということの決定が、行われる(1100)。この命令は、命令の前方への処理を再開するために、選択されたプロセッサ上で再実行される(1102)。この再実行することは、命令を再実行することにおいて、選択されたプロセッサによって、モデルに依存するメタデータが使用されるかどうかを判定することを含む(1104)。モデルに依存するメタデータが使用されるということの判定に基づいて、命令を再実行することにおいて、モデルに依存するメタデータが使用される(1106)。モデルに依存するメタデータが使用されないということの判定に基づいて、モデルに依存するメタデータを使用せずに、命令の再実行を進める(1108)。
【0204】
1つの実施形態では、モデルに依存するメタデータが使用されるかどうかの判定は、割り込まれたプロセッサのモデル・バージョンの指示を、選択されたプロセッサのモデル・バージョンの指示と比較することを含む(1110)。プロセッサのモデル・バージョンの指示が、選択されたプロセッサのモデル・バージョンの指示との定義済みの関係を持っていることに基づいて、命令を再実行することにおいて、モデルに依存するメタデータが使用される(1112)。一例として、定義済みの関係は、等しいことである(1114)。
【0205】
1つの実施形態では、プロセッサのモデル・バージョンの指示は、命令によって指定された位置に格納されているモデル・バージョン番号である(1116)。この位置は、例えば、メモリ内のパラメータ・ブロックである(1118)。さらに、メモリ内のパラメータ・ブロックは、モデルに依存するメタデータも含む(1120)。
【0206】
一例として、
図11Bを参照すると、命令を再実行することは、継続インジケータをチェックして、動作が部分的に完了しているかどうかを判定することをさらに含む(1122)。継続インジケータが、動作が部分的に完了していることを示すように設定されていることに基づいて、モデルに依存するメタデータが使用されるかどうかの判定が実行される(1124)。継続インジケータは、例えば、メモリ内のパラメータ・ブロックに格納される(1126)。
【0207】
1つの実施形態では、モデルに依存するメタデータを使用することは、命令によって指定された位置からモデルに依存するメタデータを抽出することと(1128)、この位置から抽出されたモデルに依存するメタデータを、選択されたプロセッサの1つまたは複数の選択された位置に読み込むことと(1130)を含む。モデルに依存するメタデータは、モデルに依存するメタデータを生成するために1つまたは複数のタスクを繰り返すことなしに、選択されたプロセッサに提供される(1132)。一例として、命令によって指定された位置は、命令によって指定されたメモリ内のパラメータ・ブロックの継続状態バッファを含む(1134)。
【0208】
その他の変形および実施形態が可能である。
【0209】
本発明の態様は、多くの種類のコンピューティング環境によって使用されてよい。本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の実施形態が、
図12Aを参照して説明される。この例では、コンピューティング環境10は、例えば、1つまたは複数のバス18またはその他の接続あるいはその両方を介して互いに結合された、ネイティブ中央処理装置(CPU)12、メモリ14、および1つまたは複数の入出力デバイスまたはインターフェイスあるいはその両方16を含む。例として、コンピューティング環境10は、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるPowerPC(R)プロセッサ、ヒューレット・パッカード社(カリフォルニア州パロアルト市)によって提供されるインテルItanium IIプロセッサ内蔵HP Superdome、あるいはInternational Business Machines Corporation、ヒューレット・パッカード社、インテル社、Oracle社、またはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組み合わせを含んでよい。IBM、z/Architecture、IBM Z、z/OS、PR/SM、およびPowerPCは、少なくとも1つの管轄区域内のInternational Business Machines Corporationの商標または登録商標である。インテルおよびItaniumは、米国およびその他の国における、インテル社またはその子会社の商標または登録商標である。
【0210】
ネイティブ中央処理装置12は、環境内で処理中に使用される1つまたは複数の汎用レジスタまたは1つまたは複数の専用レジスタあるいはその両方などの、1つまたは複数のネイティブ・レジスタ20を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
【0211】
さらに、ネイティブ中央処理装置12は、メモリ14に格納された命令およびコードを実行する。1つの特定の例では、中央処理装置は、メモリ14に格納されたエミュレータ・コード22を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、他のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード22は、z/Architectureハードウェア・アーキテクチャ以外のアーキテクチャに基づくマシン(PowerPCプロセッサ、HP Superdomeサーバなど)が、z/Architectureハードウェア・アーキテクチャをエミュレートし、z/Architectureハードウェア・アーキテクチャに基づいて開発されたソフトウェアおよび命令を実行できるようにする。
【0212】
エミュレータ・コード22に関する詳細が、
図12Bを参照してさらに説明される。メモリ14に格納されたゲスト命令30は、ネイティブCPU12のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された(例えば、マシン命令と相互関係がある)ソフトウェア命令を含む。例えば、ゲスト命令30は、z/Architectureハードウェア・アーキテクチャに基づくプロセッサ上で実行するように設計されてよいが、代わりに、例えばインテルItanium IIプロセッサであってよい、ネイティブCPU12上でエミュレートされる。1つの例では、エミュレータ・コード22は、メモリ14から1つまたは複数のゲスト命令30を取得するため、および取得された命令のローカル・バッファリングを任意選択的に提供するための命令フェッチ・ルーチン32を含む。エミュレータ・コード22は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、1つまたは複数の対応するネイティブ命令36に変換するための命令変換ルーチン34も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
【0213】
さらに、エミュレータ・コード22は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン40を含む。エミュレーション制御ルーチン40は、ネイティブCPU12に、1つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令36の実行は、データをメモリ14からレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
【0214】
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置12によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンまたは動作のうちの1つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ20を使用して、またはメモリ14内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令30、ネイティブ命令36、およびエミュレータ・コード22は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
【0215】
前述されたコンピューティング環境は、使用可能なコンピューティング環境の例にすぎない。その他の分割されない環境、その他の分割された環境、またはその他のエミュレートされた環境、あるいはその組み合わせを含むが、これらに限定されない、その他の環境が使用されてよく、実施形態はいずれか1つの環境に限定されない。
【0216】
各コンピューティング環境は、本発明の1つまたは複数の態様を含むように構成されることができる。例えば、各コンピューティング環境は、本発明の1つまたは複数の態様に従って、並べ替えまたはマージあるいはその両方を提供するように構成されてよい。
【0217】
1つまたは複数の態様がクラウド・コンピューティングに関係してよい。
【0218】
本開示にはクラウド・コンピューティングに関する詳細な説明が含まれているが、本明細書において示された内容の実装は、クラウド・コンピューティング環境に限定されないと理解されるべきである。本発明の実施形態は、現在既知であるか、または今後開発される任意のその他の種類のコンピューティング環境と組み合わせて実装できる。
【0219】
クラウド・コンピューティングは、構成可能な計算リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス提供モデルであり、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つのデプロイメント・モデルを含むことができる。
【0220】
特徴は、次のとおりである。
オンデマンドのセルフ・サービス:クラウドの利用者は、サーバの時間、ネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に応じて自動的にプロビジョニングすることができる。
幅広いネットワーク・アクセス:クラウドの能力は、ネットワークを経由して利用可能であり、標準的なメカニズムを使用してアクセスできるため、異種のシン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による利用を促進する。
リソース・プール:プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供される。さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象レベルでは、場所(例えば、国、州、またはデータセンター)を指定できる場合がある。
迅速な順応性:クラウドの能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、任意の量をいつでも無制限に購入できるように見える。
測定されるサービス:クラウド・システムは、計測機能を活用することによって、サービスの種類(例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント)に適した抽象レベルで、リソースの使用を自動的に制御および最適化する。リソースの使用量は監視、制御、および報告することができ、利用されるサービスのプロバイダと利用者の両方に透明性が提供される。
【0221】
サービス・モデルは、次のとおりである。
SaaS(Software as a Service):利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションの利用である。それらのアプリケーションは、Webブラウザ(例えば、Webベースの電子メール)などのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能を含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定を行う可能性を除き、管理することも制御することもない。
PaaS(Platform as a Service):利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御することができる。
IaaS(Infrastructure as a Service):利用者に提供される能力は、処理、ストレージ、ネットワーク、およびその他の基本的な計算リソースのプロビジョニングであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、オペレーティング・システム、ストレージ、およびデプロイされたアプリケーションを制御することができ、場合によっては、選択されたネットワーク・コンポーネント(例えば、ホスト・ファイアウォール)を限定的に制御できる。
【0222】
デプロイメント・モデルは、次のとおりである。
プライベート・クラウド:このクラウド・インフラストラクチャは、ある組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
コミュニティ・クラウド:このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項)を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
パブリック・クラウド:このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術(例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト)によって固有の実体を残したまま互いに結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の複合である。
【0223】
クラウド・コンピューティング環境は、ステートレス、疎結合、モジュール性、および意味的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心になるのは、相互接続されたノードのネットワークを含んでいるインフラストラクチャである。
【0224】
ここで
図13を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示されているように、クラウド・コンピューティング環境50は、クラウドの利用者によって使用されるローカル・コンピューティング・デバイス(例えば、パーソナル・デジタル・アシスタント(PDA:personal digital assistant)または携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはその組み合わせなど)が通信できる1つまたは複数のクラウド・コンピューティング・ノード52を含んでいる。ノード52は、互いに通信してよい。ノード52は、1つまたは複数のネットワーク内で、本明細書において前述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはこれらの組み合わせなどに、物理的または仮想的にグループ化されてよい(図示されていない)。これによって、クラウド・コンピューティング環境50は、クラウドの利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないインフラストラクチャ、プラットフォーム、またはSaaS、あるいはその組み合わせを提供できる。
図12に示されたコンピューティング・デバイス54A~Nの種類は、例示のみが意図されており、コンピューティング・ノード52およびクラウド・コンピューティング環境50は、任意の種類のネットワークまたはネットワーク・アドレス可能な接続(例えば、Webブラウザを使用した接続)あるいはその両方を経由して任意の種類のコンピュータ制御デバイスと通信することができると理解される。
【0225】
ここで
図14を参照すると、クラウド・コンピューティング環境50(
図13)によって提供される機能的抽象レイヤのセットが示されている。
図13に示されたコンポーネント、レイヤ、および機能は、例示のみが意図されており、本発明の実施形態がこれらに限定されないということが、あらかじめ理解されるべきである。図示されているように、次のレイヤおよび対応する機能が提供される。
ハードウェアおよびソフトウェア・レイヤ60は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例は、メインフレーム61、RISC(Reduced Instruction Set Computer)アーキテクチャベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65、ならびにネットワークおよびネットワーク・コンポーネント66を含む。一部の実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
仮想化レイヤ70は、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75などの仮想的実体を提供できる抽象レイヤを提供する。
【0226】
1つの例では、管理レイヤ80は、以下で説明される機能を提供することができる。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用される計算リソースおよびその他のリソースの動的調達を行う。計測および価格設定82は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡、およびそれらのリソースの利用に対する請求書の作成と送付を行う。1つの例では、それらのリソースは、アプリケーション・ソフトウェア・ライセンスを含んでよい。セキュリティは、クラウドの利用者およびタスクのID検証を行うとともに、データおよびその他のリソースの保護を行う。ユーザ・ポータル83は、クラウド・コンピューティング環境へのアクセスを利用者およびシステム管理者に提供する。サービス・レベル管理84は、必要なサービス・レベルを満たすように、クラウドの計算リソースの割り当てと管理を行う。サービス水準合意(SLA:Service Level Agreement)計画および実行85は、今後の要求が予想されるクラウドの計算リソースの事前準備および調達を、SLAに従って行う。
【0227】
ワークロード・レイヤ90は、クラウド・コンピューティング環境で利用できる機能の例を示している。このレイヤから提供されてよいワークロードおよび機能の例としては、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育の配信93、データ解析処理94、トランザクション処理95、および並べ替えまたはマージあるいはその両方の処理96が挙げられる。
【0228】
本発明の態様は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読ストレージ媒体を含んでよい。
【0229】
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー(R)・ディスク、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【0230】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。
【0231】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide areanetwork)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【0232】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【0233】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【0234】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
【0235】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【0236】
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、1つまたは複数の態様が提供されること、提示されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、1人または複数人の顧客のために1つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、1つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
【0237】
1つの態様では、1つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。1つの例として、アプリケーションのデプロイは、1つまたは複数の実施形態を実行するよう機能するコンピュータ・インフラストラクチャを提供することを含む。
【0238】
さらに別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・インフラストラクチャでは、コンピューティング・システムと組み合わせたコードが、1つまたは複数の実施形態を実行できる。
【0239】
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が1つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、1つまたは複数の実施形態を実行できる。
【0240】
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、1つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、さまざまな命令または動作が使用されてよい。さらに、さまざまなレジスタが使用されてよく、またはその他の種類の(レジスタ番号以外の)指示が指定されてよく、あるいはその両方が行われてよい。多くの変形が可能である。
【0241】
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも2つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
【0242】
入出力デバイスまたはI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない)は、直接的に、または介在するI/Oコントローラを通じて、システムに結合できる。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット(R)・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
【0243】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「a」、「an」、および「the」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える(comprise)」または「備えている(comprising)」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、1つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【0244】
下の特許請求の範囲内のすべての手段またはステップおよび機能要素の対応する構造、材料、動作、および等価なものは、もしあれば、具体的に請求されるとき、その他の請求される要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。1つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。多くの変更および変形が可能であるということは、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。