(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムであって、
シングル・スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で切換え構成可能なコアを含む構成であって、前記ＳＴモードは一次スレッドを扱い、前記ＭＴモードは前記一次スレッドと前記コアの共用資源上の１つまたは複数の二次スレッドとを扱う、前記構成と、
前記構成の利用を制御して方法を実行するよう構成されたマルチスレッディング機構とを含み、
前記方法は、
前記構成のリセットまたは非活動化に応答した前記ＭＴモードから前記ＳＴモードへの切換えに基づいて、前記１つまたは複数の二次スレッドのプログラム・アクセス可能レジスタ値とプログラム・カウンタ値とを含むスレッド・コンテキストをプログラムが利用することができないようにして前記１つまたは複数の二次スレッドを無効化することと、
前記１つまたは複数の二次スレッドの前記スレッド・コンテキストが前記切換え後にアクセス可能であるか否かを示す前記構成の直前設定プログラム指定最大スレッドｉｄを判断するために、前記ＳＴモードで実行中に直前指定最大ＭＴレベルを問い合わせることと、
前記直前設定プログラム指定最大スレッドｉｄが、前記１つまたは複数の二次スレッドの前記スレッド・コンテキストが前記切換え後にアクセス可能であることを示していることに基づいて、
ａ）前記ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行すること、および
ｂ）再開された前記ＭＴモードになっていることに基づいて前記１つまたは複数の二次スレッドの前記スレッド・コンテキストにアクセスすること、
を実行することによって前記１つまたは複数の二次スレッドの前記スレッド・コンテキストを取得することとを含む、コンピュータ・システム。
【請求項２】
前記ＭＴ設定命令（instruction）は、ＭＴ設定命令（order）とＭＴを示すプログラム指定最大スレッドｉｄとを含むシグナル・プロセッサ命令である、請求項１に記載のコンピュータ・システム。
【請求項３】
前記ＳＴモードへの切換えに基づいて前記１つまたは複数の二次スレッドの前記スレッド・コンテキストをセーブすることをさらに含む、請求項１に記載のコンピュータ・システム。
【請求項４】
前記ＭＴモードから前記ＳＴモードへの切換えは非クリア・リセット動作に応答しており、前記ＭＴモードを再開するための前記ＭＴ設定命令（instruction）の実行と、前記１つまたは複数の二次スレッドの前記スレッド・コンテキストへのアクセスとがスタンドアロン・ダンプ・プログラムによって行われる、請求項１に記載のコンピュータ・システム。
【請求項５】
前記ＭＴモードを再開するためにＭＴ設定命令（order）を発行する際に、前記スタンドアロン・ダンプ・プログラムが前記直前設定プログラム指定最大スレッドｉｄをプログラム指定最大スレッドｉｄとして指定する、請求項４に記載のコンピュータ・システム。
【請求項６】
スタンドアロン・ダンプ・プログラムが前記構成から二次スレッドのダンプを試みるのを防止するために、前記構成においてＭＴをサポートしないオペレーティング・システムをロードする前にクリア・リセットが実行される、請求項１に記載のコンピュータ・システム。
【請求項７】
前記構成のためにスタンドアロン・ダンプ・プログラムを実行する前に、ＭＴを利用しない制御プログラムが、プログラム指定最大スレッドｉｄとして単一スレッドを示す値とともにＭＴ設定命令（order）を発行する、請求項１に記載のコンピュータ・システム。
【請求項８】
前記直前設定プログラム指定最大スレッドｉｄは、前記構成のクリア・リセットまたは非活動化が行われるまで保持される、請求項１に記載のコンピュータ・システム。
【請求項９】
シングル・スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で切換え構成可能なコアを含む構成においてスレッド・コンテキストを復元するためのコンピュータ実装方法であって、前記ＳＴモードは一次スレッドを扱い、前記ＭＴモードは前記一次スレッドと前記コアの共用資源上の１つまたは複数の二次スレッドとを扱い、前記方法は、
前記構成のリセットまたは非活動化に応答した前記ＭＴモードから前記ＳＴモードへの切換えに基づいて、前記１つまたは複数の二次スレッドのプログラム・アクセス可能レジスタ値とプログラム・カウンタ値とを含むスレッド・コンテキストをプログラムが利用することができないようにして前記１つまたは複数の二次スレッドを無効化することと、
前記１つまたは複数の二次スレッドの前記スレッド・コンテキストが前記切換え後にアクセス可能であるか否かを示す前記構成の直前設定プログラム指定最大スレッドｉｄを判断するために、前記ＳＴモードで実行中に直前指定最大ＭＴレベルを問い合わせることと
、
前記直前設定プログラム指定最大スレッドｉｄが、前記１つまたは複数の二次スレッドの前記スレッド・コンテキストが前記切換え後にアクセス可能であることを示していることに基づいて、
ａ）前記ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行すること、
および
ｂ）再開された前記ＭＴモードになっていることに基づいて前記１つまたは複数の二次スレッドの前記スレッド・コンテキストにアクセスすること、
を実行することによって前記１つまたは複数の二次スレッドの前記スレッド・コンテキストを取得することとを含む、コンピュータ実装方法。
【請求項１０】
前記ＭＴ設定命令（instruction）は、ＭＴ設定命令（order）とＭＴを示すプログラム指定最大スレッドｉｄとを含むシグナル・プロセッサ命令である、請求項９に記載の方法。
【請求項１１】
前記ＳＴモードへの切換えに基づいて前記１つまたは複数の二次スレッドの前記スレッド・コンテキストをセーブすることをさらに含む、請求項９に記載の方法。
【請求項１２】
前記ＭＴモードから前記ＳＴモードへの切換えは非クリア・リセット動作に応答しており、前記ＭＴモードを再開するための前記ＭＴ設定命令（instruction）の実行と、前記１つまたは複数の二次スレッドの前記スレッド・コンテキストへのアクセスとがスタンドアロン・ダンプ・プログラムによって行われる、請求項９に記載の方法。
【請求項１３】
前記ＭＴモードを再開するためにＭＴ設定命令（order）を発行する際に、前記スタンドアロン・ダンプ・プログラムが前記直前設定プログラム指定最大スレッドｉｄをプログラム指定最大スレッドｉｄとして指定する、請求項１２に記載の方法。
【請求項１４】
スタンドアロン・ダンプ・プログラムが前記構成から二次スレッドのダンプを試みるのを防止するために、前記構成においてＭＴをサポートしないオペレーティング・システムをロードする前にクリア・リセットが実行される、請求項９に記載の方法。
【請求項１５】
前記構成のためにスタンドアロン・ダンプ・プログラムを実行する前に、ＭＴを利用しない制御プログラムが、単一スレッドを示す値をプログラム指定最大スレッドｉｄとして指定したＭＴ設定命令（order）を発行する、請求項９に記載の方法。
【請求項１６】
シングル・スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で切換え構成可能なコアを含む構成においてスレッド・コンテキストを復元するためのコンピュータ・プログラムであって、前記ＳＴモードは一次スレッドを扱い、前記ＭＴモードは前記一次スレッドと前記コアの共用資源上の１つまたは複数の二次スレッドとを扱い、前記コンピュータ・プログラムはコンピュータに、
前記構成のリセットまたは非活動化に応答した前記ＭＴモードから前記ＳＴモードへの切換えに基づいて、前記１つまたは複数の二次スレッドのプログラム・アクセス可能レジスタ値とプログラム・カウンタ値とを含むスレッド・コンテキストをプログラムが利用することができないようにして前記１つまたは複数の二次スレッドを無効化することと、
前記１つまたは複数の二次スレッドの前記スレッド・コンテキストが前記切換え後にアクセス可能であるか否かを示す前記構成の直前設定プログラム指定最大スレッドｉｄを判断するために、前記ＳＴモードで実行中に直前指定最大ＭＴレベルを問い合わせることと、
前記直前設定プログラム指定最大スレッドｉｄが、前記１つまたは複数の二次スレッドの前記スレッド・コンテキストが前記切換え後にアクセス可能であることを示していることに基づいて、
ａ）前記ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行すること、
および
ｂ）再開された前記ＭＴモードになっていることに基づいて前記１つまたは複数の二次スレッドの前記スレッド・コンテキストにアクセスすること、
を実行することによって前記１つまたは複数の二次スレッドの前記スレッド・コンテキストを取得することとを実行させる、コンピュータ・プログラム。
【請求項１７】
前記ＭＴ設定命令（instruction）は、ＭＴ設定命令（order）オーダとＭＴを示すプログラム指定最大スレッドｉｄとを含むシグナル・プロセッサ命令である、請求項１６に記載のコンピュータ・プログラム。
【請求項１８】
前記ＳＴモードへの切換えに基づいて前記１つまたは複数の二次スレッドの前記スレッド・コンテキストをセーブすることをさらに前記コンピュータに実行させる、請求項１６に記載のコンピュータ・プログラム。
【請求項１９】
前記ＭＴモードから前記ＳＴモードへの切換えは非クリア・リセット動作に応答しており、前記ＭＴモードを再開するための前記ＭＴ設定命令（instruction）の実行と、前記１つまたは複数の二次スレッドの前記スレッド・コンテキストへのアクセスとがスタンドアロン・ダンプ・プログラムによって行われる、請求項１６に記載のコンピュータ・プログラム。
【請求項２０】
前記直前設定プログラム指定最大スレッドｉｄは、前記構成のクリア・リセットまたは非活動化が行われるまで保持される、請求項１６に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般には複数のスレッドをサポートするコンピュータ・システムに関し、より詳細には、マルチスレッディング・コンピュータ・システムにおけるスレッド・コンテキスト復元に関する。
【背景技術】
【０００２】
最近数十年でコンピュータ・システムのプロセッサ速度は高速化しているが、このようなコンピュータ・システムのメモリへのアクセス速度はそれに応じて高速化はしていない。したがって、プロセッサのサイクル時間が速いほど、メモリからのデータ・フェッチ待ち遅延が顕著になる。このような遅延の影響は、様々なレベルのキャッシングによって軽減され、さらに最近のプロセッサではマルチスレッディング（ＭＴ）によって軽減されてきた。
【０００３】
ＭＴは、プロセッサの様々なコア資源をスレッドと呼ばれる複数の命令ストリームが共用できるようにする。コア資源は、実行ユニット、キャッシュ、トランスレーション・ルックアサイド・バッファ（ＴＬＢ）などを含むことができ、これらは一般にコアと総称されることがある。１つのスレッドにおけるキャッシュ・ミスまたはその他の遅延によって生じるレイテンシ中に、１つまたは複数の他のスレッドがコア資源を使用することができ、これによりコア資源の利用率が高くなる。スーパースカラー・プロセッサ同時マルチスレッディング（ＳＭＴ）実装形態では、複数のスレッドに１つまたは複数のコアのコア資源によって同時に対応することができる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】「z/Architecture Principles ofOperation」（IBM Publication No.SA22-7832-09、２０１２年８月）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
現在のハードウェア・プラットフォームでは、ＭＴは、典型的には、ＭＴハードウェア上で稼働するオペレーティング・システム（ＯＳ）には透過な方式で実装される。この特徴の１つの側面は、ＯＳがＭＴハードウェアを利用するための変更を必要としないことである。しかし、ＯＳに関して透過なＭＴ動作によって、応答時間、容量プロビジョニング、容量プランニング、およびビリングの変動性が大きくなることがある。この変動性は、ＯＳのタスクがコアの排他的制御権を持っているか、またはＯＳのタスクがコアを共用するスレッドとして実行中であるかがＯＳにはわからないために生じる場合がある。設計上、ＭＴ対応ハードウェア上のメモリ多用ワークロードのための最大容量は、コアの使用時に平均スレッド密度が高いときに達成可能である。ＭＴによって生じるキャッシュ利用の増加により、追加容量が生じることがある。ＯＳが、使用コアの高平均スレッド密度を一定して維持しない場合、ＭＴによって生じる追加の処理能力全体を利用することができなくなる。例えば、低演算処理使用率のときにハードウェアが１コアにつき１つのＭＴスレッドを実行し、高演算処理使用率のときに高いスレッド密度で実行する場合、ワークロードにどれだけの合計ＭＴ演算処理容量が利用可能であるかを判断するのはきわめて困難な場合がある。容量に関して前述したのと同様にして、ＭＴスレッド利用におけるこのハードウェアの変動性の結果、トランザクション応答時間とビリングの両方に変動性が生じる可能性がある。
【課題を解決するための手段】
【０００６】
実施形態には、マルチスレッディング・コンピュータ・システムにおけるスレッド・コンテキスト復元のためのシステム、方法、およびコンピュータ・プログラム製品が含まれる。一態様は、シングル・スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとを切換え構成可能なコアを含む構成である。ＳＴモードは一次スレッドを扱い、ＭＴモードは一次スレッドとコアの共用資源上の１つまたは複数の二次スレッドとを扱う。マルチスレッディング機構が、構成の利用を制御して、ＭＴモードからＳＴモードへの切換えに基づいて１つまたは複数の二次スレッドを無効化することを含む方法を実行するように構成される。１つまたは複数の二次スレッドのプログラム・アクセス可能なレジスタ値およびプログラム・カウンタ値を含むスレッド・コンテキストに、プログラムを使用することができないようにする。構成の直前設定プログラム指定最大スレッドｉｄを判断するために、ＳＴモードで直前指定最大ＭＴレベルを問い合わせる。直前設定プログラム指定最大スレッドｉｄがＭＴモードを示していることに基づき、ａ）ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行することと、ｂ）再開されたＭＴモードになっていることに基づいて１つまたは複数の二次スレッドのスレッド・コンテキストにアクセスすることとを実行することによって、１つまたは複数の二次スレッドのスレッド・コンテキストを取得する。
【０００７】
別の態様によると、構成においてスレッド・コンテキストを復元するためのコンピュータ実装方法が提供される。構成は、シングル・スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で切換え構成可能なコアを含み、ＳＴモードは一次スレッドを扱い、ＭＴモードは一次スレッドと、コアの共用資源上の１つまたは複数の二次スレッドとを扱う。方法は、ＭＴモードからＳＴモードへの切換えに基づいて１つまたは複数の二次スレッドを無効化することを含む。１つまたは複数の二次スレッドのプログラム・アクセス可能レジスタ値とプログラム・カウンタ値とを含むスレッド・コンテキストを、プログラムが利用することができないようにする。構成の直前設定プログラム指定最大スレッドｉｄを判断するためにＳＴモードで直前指定最大ＭＴレベルを問い合わせる。直前設定プログラム指定最大スレッドｉｄがＭＴを示していることに基づき、ａ）ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行することと、ｂ）再開されたＭＴモードになっていることに基づいて１つまたは複数の二次スレッドのスレッド・コンテキストにアクセスすることとを実行することによって、１つまたは複数の二次スレッドのスレッド・コンテキストを取得する。
【０００８】
さらに他の態様は、構成においてスレッド・コンテキストを復元するためのコンピュータ・プログラム製品を含む。構成は、シングル・スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で切換え構成可能なコアを含み、ＳＴモードは一次スレッドを扱い、ＭＴモードは一次スレッドと、コアの共用資源上の１つまたは複数の二次スレッドとを扱う。このコンピュータ・プログラム製品は、プログラム命令が具現化されたコンピュータ可読記憶媒体を含み、このコンピュータ可読記憶媒体は信号ではない。プログラム命令は、処理回路に方法を実行させるように処理回路によって読取り可能である。方法は、ＭＴモードからＳＴモードへの切換えに基づき、１つまたは複数の二次スレッドを無効化することを含む。１つまたは複数の二次スレッドのプログラム・アクセス可能レジスタ値およびプログラム・カウンタ値を含むスレッド・コンテキストに、プログラムを使用することができないようにする。構成の直前設定プログラム指定最大スレッドｉｄを判断するために、ＳＴモードで直前指定最大ＭＴレベルを問い合わせる。直前設定プログラム指定最大スレッドｉｄがＭＴを示していることに基づき、ａ）ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行することと、ｂ）再開されたＭＴモードになっていることに基づき１つまたは複数の二次スレッドのスレッド・コンテキストにアクセスすることとを実行することによって、１つまたは複数の二次スレッドのスレッド・コンテキストを取得する。
【０００９】
実施形態とみなされる主題は、添付の特許請求の範囲で具体的に示され、明確に請求されている。実施形態の前記およびその他の特徴および利点は、以下の詳細な説明を添付図面と共に読めば明らかになる。
【図面の簡単な説明】
【００１０】
【図１】一実施形態により実施可能なコンピューティング環境を示す図である。
【図２】一実施形態により実施可能なコンピューティング環境を示す図である。
【図３】一実施形態により実施可能なコアの処理回路を示す図である。
【図４】一実施形態により実施可能なコンピューティング環境を示す図である。
【図５】一実施形態により実施可能なコンピューティング環境におけるハイパーバイザ・コンテキスト保持を示す図である。
【図６】一実施形態によるマルチスレッディングの動的有効化処理の流れを示す図である。
【図７】一実施形態によるＣＰＵアドレス拡張処理の一例を示す図である。
【図８】一実施形態によるＣＰＵアドレス縮小処理の一例を示す図である。
【図９】一実施形態によるマルチスレッディング設定命令（order）の処理の流れを示す図である。
【図１０】一実施形態によるマルチスレッディング機能情報の格納の一例を示す図である。
【図１１】一実施形態によるマルチスレッディング機能を判断するための処理の流れを示す図である。
【図１２】一実施形態による様々なスレッド・コンテキスト記憶場所の一例を示す図である。
【図１３】一実施形態によるマルチスレッディング・レジスタ保存の一例を示す図である。
【図１４】一実施形態によるマルチスレッディング・レジスタ保存処理の流れを示す図である。
【図１５】一実施形態によるマルチスレッディング・レジスタ復元の一例を示す図である。
【図１６】一実施形態によるマルチスレッディング・レジスタ復元処理の流れを示す図である。
【図１７】一実施形態によるコンピュータ可読媒体を示す図である。
【発明を実施するための形態】
【００１１】
例示の実施形態は、シングル・スレッド動作モードとマルチスレッディング動作モードとをサポートするコンピュータ・システムにおけるマルチスレッディング動作を提供する。本明細書では、論理スレッドとは、単一の命令ストリームとそれに関連づけられた状態とを指す。すなわち、アーキテクチャ・レベルでは、各論理スレッドは、独立した中央演算処理装置（ＣＰＵ）またはプロセッサを表す。ハードウェア・レベルでは、スレッドは、そのスレッドがディスパッチされる際の、ゲスト状態の維持と組み合わされた論理スレッドに関連づけられた命令ストリームの実行である。したがって、本明細書では「スレッド」という用語と「ＣＰＵ」という用語は交換可能に使用される場合がある。
【００１２】
例示の一実施形態では、ＣＰＵは命令実行、割込み動作、タイミング機能、初期プログラム・ロード、およびその他のマシン関連機能のための、順序付けおよび処理機構を備える。ＣＰＵは、基礎となる様々な物理実装形態に対応付け可能な論理機能を定義する。ＣＰＵは、命令を実行する際に、固定長の２進整数および浮動小数点数（例えば２進数、１０進数および１６進数）、可変長の１０進整数、および固定長または可変長の論理情報を処理することができる。処理は、並列または順次処理とすることができる。処理要素の幅、シフト・パスの多重度、異なる種類の演算処理における同時度は、ＣＰＵのモデルごとに異なる場合があるが、論理的結果には影響を及ぼさない。
【００１３】
ＣＰＵが実行する命令は、汎用命令、浮動小数点サポート（ＦＰＳ）命令、２進浮動小数点（ＢＦＰ）命令、１０進浮動小数点（ＤＦＰ）命令、１６進浮動小数点（ＨＦＰ）命令、制御命令、およびＩ／Ｏ命令など、複数の命令クラスを含むことができる。汎用命令は、２進整数算術演算および論理演算、分岐演算およびその他の非算術演算の実行に使用することができる。１０進命令は１０進形式のデータに対して作用する。ＢＦＰ、ＤＦＰおよびＨＦＰ命令は、それぞれ、ＢＦＰ、ＤＦＰおよびＨＦＰ形式のデータに対して作用し、ＦＰＳ命令は、形式とは独立した浮動小数点データに対して作用するか、またはある形式から別の形式に変換する。適切な権限付与機構に従い、ＣＰＵがスーパバイザ状態のときに、特権制御命令およびＩ／Ｏ命令を実行することができ、問題状態のときに準特権制御命令を実行することができる。
【００１４】
ＣＰＵは、プログラムにとって利用可能であるが主記憶装置でアドレス指定可能表現を持たないレジスタを提供する。レジスタは、例えば、現在のプログラム状態ワード（ＰＳＷ）と、汎用レジスタと、浮動小数点レジスタおよび浮動小数点制御レジスタと、ベクトル・レジスタと、制御レジスタと、アクセス・レジスタと、プレフィックス・レジスタと、時刻（ＴＯＤ）プログラマブル・レジスタと、クロック比較器およびＣＰＵタイマ用レジスタとを含み得る。このレジスタの集合を、ＣＰＵのアーキテクテッド・レジスタ・コンテキストと呼ぶ場合がある。構成内の各ＣＰＵは、ＴＯＤクロックへのアクセスを行わせることができ、ＴＯＤクロックは構成内のすべてのＣＰＵが共用することができる。命令演算コードにより、ある演算でどの種類のレジスタを使用するかを決定することができる。
【００１５】
各ＣＰＵは、ＣＰＵが機能および機構の全装備を提供するか（例えば汎用ＣＰＵ）、または特殊なタイプのワークロードの処理向けであるか（例えば特殊ＣＰＵ）を示すタイプ属性を有することができる。一次ＣＰＵは、汎用ＣＰＵまたは、最後の初期プログラム・ロード（ＩＰＬ）動作の後に起動されるＣＰＵ（ＩＰＬ  ＣＰＵ）と同じタイプを有するＣＰＵである。二次ＣＰＵは、ＩＰＬ  ＣＰＵとは異なるＣＰＵタイプを有する汎用ＣＰＵ以外のＣＰＵである。
【００１６】
サポートするアーキテクチャを実装するコンピュータ・システム上では、マルチスレッディング機構が利用可能な場合がある。マルチスレッディング機構はマルチスレッディングのサポートを提供して、ＣＰＵとも呼ばれることがあるコアを共用するスレッドのグループを可能にする。マルチスレッディング機構が有効化されている場合、コア内のＣＰＵは、実行ユニットまたはキャッシュなどの特定のハードウェア資源を共用することができる。コア内の１つのＣＰＵが、ハードウェア資源を待っている場合（典型的にはメモリアクセスを待っている間）、共用資源を遊休状態にしておくのではなく、そのコア内の他のＣＰＵが共用資源を利用することができる。マルチスレッディング機構がインストールされ有効化されている場合、スレッドはコアに属するＣＰＵと同義である。マルチスレッディング機構がインストールされていない場合、またはマルチスレッディング機構がインストールされているが有効化されていない場合、コアは単一のＣＰＵまたはスレッドを含む。
【００１７】
マルチスレッディング機構がインストールされている場合、マルチスレッディング設定シグナル・プロセッサ（ＳＩＧＰ）命令（order）の実行により、マルチスレッディング機構を有効化することができる。例示の一実施形態では、マルチスレッディング機構が有効化されている場合、構成内のＣＰＵの数が倍数だけ増加し、倍数の値はプログラム指定最大スレッド識別情報（ＰＳＭＴＩＤ）によって決まる。コア内のＣＰＵの数は、ＰＳＭＴＩＤより多い場合もある。この倍数に対応する数のＣＰＵが１つのコアにグループ化される。構成内の同じＣＰＵタイプの各コアは、同じ数のＣＰＵを有することができる。コア内の各ＣＰＵは同じＣＰＵタイプである。ただし、モデルおよびＣＰＵタイプによって、コア内のいくつかのＣＰＵが動作状態でない場合がある。
【００１８】
例示の一実施形態では、オペレーティング・システム（ＯＳ）が管理する構成がマルチスレッディングを使用することができるようにするために、ＯＳなどの制御プログラムがマルチスレッディングを明示的に有効化する。あるいは、ハイパーバイザが、マルチスレッディングを有効化することができ、ハイパーバイザのゲストおよびそれらゲストのアプリケーションが透過的に恩恵を受けることができる。アプリケーション・プログラムは一般に、マルチスレッディングが有効化されたか否かを認識しない。マルチスレッディングが有効化されると、構成内のすべてのＣＰＵのＣＰＵアドレスが、アドレスの左端ビットにコア識別情報（またはコアＩＤ）を含み、アドレスの右端ビットにスレッド識別情報（スレッドＩＤまたはＴＩＤ）を含むように調整される。コアＩＤは、コア・アドレス値とも呼ぶことがあり、ＴＩＤはスレッド・アドレス値とも呼ぶことがある。コア内のＣＰＵは、実行ユニットまたは低次キャッシュなどの特定のハードウェア機構を共有することができ、したがって、コアのあるＣＰＵ内での実行がそのコア内の他のＣＰＵのパフォーマンスに影響を及ぼすことがある。
【００１９】
構成の１つまたは複数のコアをシングル・スレッド・モードとマルチスレッディング・モードとの間で動的に切り換えることに伴う変更を管理するために、いくつかのサポート機能が備えられる。マルチスレッディングをサポートしないプログラムとの互換性を維持するために、シングル・スレッド・モードを、リセット時または非活動化時のデフォルト・モードとしてもよい。実施形態の例としては、マルチスレッディング・モードからシングル・スレッド・モードへの移行後のスレッド・コンテキストの分析または復元あるいはその両方をサポートするために、マルチスレッディング・モードからのスレッド・コンテキストの保存、伝達、および復元を行う機能がある。
【００２０】
例示の一実施形態によって実装可能なコンピューティング環境は、例えば米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションが提供するｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づくことができる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅは、「z/Architecture Principles of Operation」（IBMPublication No.SA22-7832-09、２０１２年８月）という名称のＩＢＭ（Ｒ）刊行物に記載されている。一例では、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づくコンピューティング環境は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションが提供するｅＳｅｒｖｅｒ  ｚＳｅｒｉｅｓを含む。コンピューティング環境は、例えば１つまたは複数のコア（例えばプロセッサコア）を備える１つまたは複数の区画（例えば論理区画）を備えたプロセッサ複合体と、本明細書で詳述するような１つまたは複数のレベルのハイパーバイザとを含み得る。
【００２１】
図１に、マルチスレッディング（ＭＴ）をサポートするコンピューティング環境の一例として、コンピュータ・システム１００を示す。図１の例では、コンピュータ・システム１００は、複数のプロセッサ・コア１０２と、入出力（Ｉ／Ｏ）サブシステム１０４と、システム・メモリ１０６とを含む。入出力サブシステム１０４は、当技術分野で周知のＩ／Ｏ装置へのアクセスを提供することができる。プロセッサ・コア１０２は、本明細書では単に「コア」とも呼び、サポート要素を備えた処理回路を含み得る。図１の例では、５個のコア１０２が、コア１  １１０、コア２  １２０、コア３  １３０、コア４  １４０、コア５  １５０として図示されている。ただし、これより多いかまたは少ない数のコア１０２も企図される。ＭＴ機構１０３は、各コア１０２のそれぞれのハードウェア構成要素であってよい。この例では、コア１０２のそれぞれは、最大４個のスレッドをサポートすることができる。例えば、コア１  １１０は、スレッド１１１、１１２、１１３および１１４をサポートすることができる。コア２  １２０は、スレッド１２１、１２２、１２３、および１２４をサポートすることができる。コア３  １３０は、スレッド１３１、１３２、１３３および１３４をサポートすることができる。コア４  １４０は、スレッド１４１、１４２、１４３および１４４をサポートすることができる。コア５  １０５は、スレッド１５１、１５２、１５３および１５４をサポートすることができる。なお、任意の時点において各ＣＰＵ１０２の４個のスレッドすべてが動作状態であるとは限らない。例えば、コア３  １３０では、スレッド１３１と１３２が動作状態であってよく、スレッド１３３と１３４は動作状態にすることが可能である（陰影付きで図示）。
【００２２】
図１には、コンピュータ・システム１００のシステム・メモリ１６０も図示されており、システム・メモリ１６０の各部は論理区画１（ＬＰＡＲ１）１７０、ＬＰＡＲ２  １８０、およびＬＰＡＲ３  １９０に割り当てられている。ＬＰＡＲ  １７０、１８０、１９０は、Ｌｉｎｕｘ（ＴＭ）またはＩＢＭ（Ｒ）ｚ／ＯＳ（ＴＭ）、ｚ／ＶＭ、またはｚＴＰＦオペレーティング・システムなどのオペレーティング・システムを実行することができる仮想コンピューティングシステム（構成とも呼ばれる）を表す。図１は、ＬＰＡＲ１７０、１８０および１９０へのコア１０２の割当ても示す。この図では、コア１  １１０とコア２  １２０とがＬＰＡＲ１  １７０専用とされている。コア３  １３０はＬＰＡＲ２  １８０専用とされ、コア５  １５０はＬＰＡＲ３  １９０専用とされている。コア４  １４０はＬＰＡＲ２  １８０とＬＰＡＲ３  １９０との間で共用することができるが、図１ではＬＰＡＲ２  １８０に割り当てられているものとして示されている。ＬＰＡＲ３  １９０は、この区画によって使用されているコア１０２の２つの異なるタイプの例を示し、コア４  １４０は、複数のスレッドを動作させることができるが、コア５  １５０はこの例では複数のスレッドを動作させることはできない。図１の例では、ＬＰＡＲ１  １７０はＯＳ１７１と、プログラム１７２、１７３、１７４および１７５とに処理資源を提供する。ＬＰＡＲ２  １８０は、ＯＳ１８１と、プログラム１８２、１８３および１８４とに処理資源を提供する。ＬＰＡＲ４  １９０はＯＳ１９１と、プログラム１９２および１９３とに処理資源を提供する。
【００２３】
ＬＰＡＲで実行されているオペレーティング・システムの制御下で、コアのスレッド上でプログラムが実行される。例示の一実施形態では、個々のスレッドは一度に１つのプログラムのみを実行する。ただし、リエントラントするように設計されているプログラムは、同時に複数のスレッドまたはコア上で実行してよい。例えば、ＬＰＡＲ１  １７０のＯＳ１７１のプログラム１７２は、コア１  １１０のスレッド１１１および１１３上と、コア２  １２０のスレッド１２１および１２４とで実行することができる。ＯＳの制御下で、ディスパッチ規則およびサービス品質契約に従って同一または異なるスレッド上に異なるプログラムをディスパッチすることができる。
【００２４】
システム・メモリ１６０には、例えばミリコード１６２およびＬＰＡＲハイパーバイザ１６３を含む、様々なレベルのファームウェアが常駐する。ミリコード１６２は、低レベルのシステム機能をサポートするようにファームウェアとして実施することができる。ＬＰＡＲハイパーバイザ１６３は、例えば、ＩＢＭ  Ｐｒｏｃｅｓｓｏｒ−Ｒｅｓｏｕｒｃｅ／Ｓｙｓｔｅｍ  Ｍａｎａｇｅｒ（ＴＭ）（ＰＲ／ＳＭ（ＴＭ））など、ライセンス供与された内部コードであってもよい。ＬＰＡＲハイパーバイザ１６３は、ＬＰＡＲ  １７０、１８０、１９０を設定することができ、コア１０２上でのディスパッチを管理してもよい。コンピュータにＭＴ機構１０３がインストールされている場合、ミリコード１６２およびＬＰＡＲハイパーバイザ１６３は、それぞれ、ＭＴ機構サポート・コード１６４および１６５も含む。ＭＴをサポートするための論理をミリコード１６２とＬＰＡＲハイパーバイザ１６３とコア１０２とに分散させることができるため、ＭＴ機構サポート・コード１６４および１６５は、ＭＴ機構１０３の一部とみなすことができる。図示されていないが、ＯＳ１７１、１８１、１９１のそれぞれは、それぞれのＬＰＡＲ１７０、１８０、１９０においてＭＴを有効化し利用するために、ＭＴ機構サポート・コードも含むことができる。
【００２５】
図２に、図２のコンピューティング環境ではコア４  １４０に現在、ＬＰＡＲ２  １８０ではなくＬＰＡＲ３  １９０が割り当てられている点を除き、図１と同様のコンピューティング・システムを示す。また、スレッド１４３および１４４が動作状態となっていない図１とは異なり、図２では、コア４  １４０上にＬＰＡＲ３  １９０がディスパッチされている場合、４個のスレッド１４１〜１４４がすべて現在、動作状態である。コア１０２上でのＬＰＡＲのディスパッチとディスパッチ解除とは動的に行われ、またある時点には他のＬＰＡＲ（図示せず）が同じコア１０２上で動作していてもよい。
【００２６】
次に図３を参照すると、一実施形態により、図１および図２におけるコア１０２のうちの１つなどの処理コアを実装するための処理回路２００のブロック図が、概略的に示されている。処理回路２００は、ＭＴ環境で１つまたは複数のスレッドを同時にサポートすることができる処理回路の一例である。図３に示す処理回路２００は、処理回路２００を他のプロセッサおよび周辺装置に接続することができるシステム・コントローラ・インターフェース・ユニット２０２を含む。システム・コントローラ・インターフェース・ユニット２０２は、データ値の読出しと格納を行うＤキャッシュ２０４と、プログラム命令を読み出すＩキャッシュ２０８と、キャッシュ・インターフェース・ユニット２０６とを外部のメモリ、プロセッサおよびその他の周辺装置に接続することもできる。
【００２７】
Ｉキャッシュ２０８は、命令をプリフェッチする命令フェッチ・ユニット（ＩＦＵ）２１０と連係して命令ストリームのロードを行うことができ、投機的ロード機能および分岐予測機能を備えてもよい。フェッチされた命令は、命令処理データにデコードするために、命令デコード・ユニット（ＩＤＵ）２１２に供給することができる。
【００２８】
ＩＤＵ２１２は、汎用演算を実行するための１つまたは複数の固定小数点ユニット（ＦＸＵ）２１６、浮動小数点演算を実行するための浮動小数点ユニット（ＦＰＵ）２１８などの様々な実行ユニットへの命令の発行を制御することができる発行ユニット２１４に、命令を供給することができる。ＦＰＵ２１８は、２進浮動小数点ユニット（ＢＦＵ）２２０、１０進浮動小数点ユニット（ＤＦＵ）２２２、またはその他の浮動小数点ユニットを含むことができる。発行ユニット２１４は、１つまたは複数のロード・ストア・ユニット（ＬＳＵ）パイプラインを介して１つまたは複数のＬＳＵ２２８にも接続することができる。複数のＬＳＵパイプラインは、ロードおよび格納と、分岐のためのアドレス生成とを行うための実行ユニットとして扱われる。ＬＳＵ２２８とＩＦＵ２１０は両方とも、オペランドおよび命令アドレスのバッファ変換を行うためにトランスレーション・ルックアサイド・バッファ（ＴＬＢ）２３０を利用することができる。
【００２９】
ＦＸＵ２１６およびＦＰＵ２１８は、汎用レジスタ（ＧＰＲ）２２４および浮動小数点レジスタ（ＦＰＲ）２２６などの様々な資源に接続することができる。ＧＰＲ２２４およびＦＰＲ２２６は、ＬＳＵ２２８によってＤキャッシュ２０４からロードおよび格納されたデータ値のためのデータ値ストレージを提供する。
【００３０】
処理回路２００は、システム時間基準生成および診断動作をサポートするために、カウンタまたはタイマ２５０あるいはその両方も含むことができる。例えば、カウンタまたはタイマ２５０あるいはその両方は、時刻と、様々な診断機能および測定機能とをサポートするために使用してもよい。
【００３１】
次に、図４を参照すると、図４ではコンピュータ・システム１００のＬＰＡＲ２  １８０において第２レベル・ハイパーバイザ３００が実行されている点を除き図１に類似したコンピューティング環境が図示されている。第２レベル・ハイパーバイザ３００、例えばＩＢＭ  ｚ／ＶＭオペレーティング・システムは、ＬＰＡＲ（第１レベル）ハイパーバイザ１６３によって提供されるＭＴサポート・コード１６５に類似したＭＴサポート・コード３０１を含む。第２レベル・ハイパーバイザ３００は、ゲスト・オペレーティング・システム３１１、３２１および３３１がそれぞれ動作する複数の仮想マシン３１０、３２０および３３０（構成とも呼ぶ）のサポートを提供する。ゲスト・オペレーティング・システム３１１、３２１および３３１は、例えばＬｉｎｕｘ（ＴＭ）、またはＩＢＭ（Ｒ）ｚ／ＯＳ（ＴＭ）、ｚ／ＶＭ、またはｚ／ＴＰＦ  ＯＳを含んでよく、またはＩＢＭ会話型モニタ・システム（ＣＭＳ）などのゲスト開発環境を含んでもよい。各ゲストＯＳ３１１、３２１および３３１は、マルチスレッディングを有効化してもしなくてもよく、その場合、第２レベル・ハイパーバイザ３００は、第２レベル・ハイパーバイザ３００が動作するＬＰＡＲ２  １８０にとって利用可能な物理処理資源（コア１３０、１４０およびスレッド１３１〜１３４、１４１〜１４４）を使用して、ゲストＯＳ３１１、３２１、３３１および付随するプログラム３１２、３１３、３２２、３２３、３３２および３３３のディスパッチを行う役割を果たしてもよい。様々な仮想マシン３１０、３２０、３３０のプログラム３１２、３２２、３２３、３３２、３３３は、それぞれのゲストＯＳ３１１、３２１および３３１にとって利用可能なスレッド１３１〜１３４、１４１〜１４４上で実行することができる。第２レベル・ハイパーバイザ３００がマルチスレッディングを利用する場合、ゲストＯＳ３１１、３２１および３３１は、ＭＴから透過的に恩恵を受けることができるため、ＭＴサポート・コードを含む必要がない。
【００３２】
次に図５を参照すると、一実施形態により実装可能なコンピューティング環境におけるハイパーバイザ・コンテキスト保持の一例が図示されている。図５の例では、図１および図２のＬＰＡＲハイパーバイザ１６３内にいくつかのサポート構造体が図示されている。例えば、構造体４１０は、図１に示すように物理スレッド１１１、１１２、１１３、１１４、１２１、１２２、１２３、１２４上で現在稼働している論理スレッド４１１、４１２、４１３、４１４、４２１、４２２、４２３、４２４のためのアーキテクテッド・レジスタ・コンテキスト（すなわちスレッド・コンテキスト）を格納する状態記述ブロックとサテライト・ブロックとを含む、図１のＬＰＡＲ１  １７０をサポートすることができる。これらの論理スレッドがディスパッチされている間、物理スレッドはこれらのスレッドの現在のアーキテクテッド・レジスタ・コンテキストを保持する。ディスパッチされなくなると、このアーキテクテッド・レジスタ・コンテキストは、状態記述ブロックおよびサテライト・ブロックに保持されることになる。構造体４３０は、図１に示すように物理スレッド１３１、１３２、１４１、１４２上で現在稼働している論理スレッド４３１、４３２、４４１、４４２のためのアーキテクテッド・レジスタ・コンテキストを格納する状態記述ブロックおよびサテライト・ブロックを含む、図１のＬＰＡＲ２  １８０をサポートすることができる。構造体４５０は、図１に示すように物理スレッド１５１上で現在稼働している論理スレッド４５１のためのアーキテクテッド・レジスタ・コンテキストを格納する状態記述ブロックとサテライト・ブロックとを含む、図１のＬＰＡＲ３  １９０をサポートすることができる。また、構造体４５０は、物理プロセッサ（陰影付きで示す）上に現在ディスパッチされていない論理スレッド４６１、４６２、４６３および４６４のためのアーキテクテッド・レジスタ・コンテキストを格納する状態記述ブロックおよびサテライト・ブロックも含む。論理スレッド４７１、４７２、４７３および４７４のための状態記述ブロックおよびサテライト構造体を含むＬＰＡＲ  Ａ（図１には図示せず）のための構造体４７０など、物理コア上でディスパッチされないＬＰＡＲをサポートする他の構造体も、ＬＰＡＲハイパーバイザ１６３によって保持することができる。さらに他の構造体の例としては、論理スレッド４８１および４８２のための状態記述ブロックおよびサテライト・ブロックを含むディスパッチされていないＬＰＡＲ  Ｂ（図１には図示せず）をサポートする構造体４８０と、論理スレッド４８５のためのディスパッチされないＬＰＡＲ  Ｃのための構造体４８４とがある。
【００３３】
図５の例ではいくつかの構造体が図示されているが、マルチスレッディングを管理するために追加の構造体もＬＰＡＲハイパーバイザ１６３およびコンピュータ・システム１００内の他の場所でサポートすることができることがわかるであろう。例えば、図４の仮想マシン３１０、３２０、３３０のマルチスレッディングをサポートするための構造体を、図４の第２レベル・ハイパーバイザ３００によって保持することができる。
【００３４】
次に図６を参照すると、一実施形態によるマルチスレッディングの動的有効化のための処理の流れ５００が図示されている。ブロック５０２で、一次スレッドがシングル・スレッド（ＳＴ）モードで実行される。ブロック５０４で、マルチスレッディング（ＭＴ）モード設定命令がＳＴモードでフェッチされる。５０５にまとめて示すようにこの命令を実行する際、ＭＴモード設定命令によって指定された記憶場所から、要求されたいくつかのスレッドがブロック５０６で取得される。この記憶場所は、ＭＴモード設定命令を発行するときにパラメータ・レジスタによって指定することができる。ＭＴモード設定命令（instruction）は、ＭＴ設定命令（order）と、要求スレッド数に関連づけられたプログラム指定最大スレッドｉｄ（ＰＳＭＴＩＤ）とを含む、シグナル・プロセッサ（ＳＩＧＰ）命令とすることができる。ＳＩＧＰ命令のＭＴ設定命令（order）に付随する処理の一例については、本明細書で図９を参照しながら詳述する。
【００３５】
処理５００の説明を続けると、ブロック５０８で、要求スレッド数が複数スレッドを示しているか否かが判断される。例えば、複数スレッドは１より大きい値によって示すことができる。値ゼロが単一スレッドを示す実施形態では、値１または１より大きい値によって複数スレッドを示すことができる。要求スレッド数が複数スレッドを示していないとの判断に基づいて、ブロック５１０でコアはＳＴモードのままとなり、ＭＴ設定モード命令の実行は完了し、ブロック５０２に制御が戻る。要求スレッド数が複数スレッドを示しているとの判断に基づいて、ブロック５１２でＭＴモードが有効化され、ＭＴ設定モード命令の実行は完了する。ブロック５１４で、一次スレッドと１つまたは複数の二次スレッドとを含む複数スレッドが実行される。ブロック５１６で、リセットまたは非活動化が行われない場合、処理５００はブロック５１４にループバックする。それ以外の場合、ブロック５１８で、ＳＴモードに復帰する構成のリセットまたは非活動化に基づき、ＭＴモードが無効化される。ＭＴモードの無効化の一部として、非クリア・リセットの場合はスレッド数（ＰＳＭＴＩＤ）が保持され、クリア・リセットの場合はスレッド数（ＰＳＭＴＩＤ）がゼロにされる。処理５００はブロック５０２に戻る。
【００３６】
通常ロード（load-normal）、ダンプありロード（load-with-dump）、ロード・クリア(load-clear)、またはロード・クリア・リスト指示（load-clear-list-directed）キーが起動されると、ＣＰＵはロード状態になる。チャネル・コマンド・ワード（ＣＣＷ）タイプの初期プログラム・ロード動作が正常に完了した場合、ＣＰＵはロード状態から動作状態に移行する。
【００３７】
装置チェック標識とその結果のＣＰＵ状態の予測不能要素とを、情報破壊を最小限に抑えてクリアするために、ＣＰＵリセットを使用することができる。特に、動作の分析または動作の再開のためにＣＰＵ状態を保存する場合、チェック状況をクリアするためにＣＰＵリセットを使用することができる。通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）キーによってＣＰＵリセットが行われた場合、（ａ）アーキテクチャ・モードをデフォルト・モードに設定することができ、（ｂ）マルチスレッディング機構がインストールされて有効化されている場合にはマルチスレッディングが無効化される。ＣＰＵリセットによってデフォルト・モードが設定されると、それによって、ＰＳＷを復元することができるように現在のＰＳＷを保存することができる。
【００３８】
初期ＣＰＵリセットは、ＣＰＵリセットの各機能を、現在のＰＳＷ、ＣＰＵタイマ、クロック比較器、およびその他のレジスタ、すなわちブレーキング・イベント・アドレス、キャプチャされたＰＳＷ、制御、浮動小数点制御、プレフィックスおよびＴＯＤプログラマブル・レジスタなどのレジスタの初期化の機能と共に提供する。通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）キーによって行われた場合、初期ＣＰＵリセットは、アーキテクチャ・モードをデフォルト・モードに設定することができる。通常ロード（load-normal）キーまたはダンプありロード(load-with-dump)キーの起動により初期ＣＰＵリセットが行われるときにマルチスレッディングが有効化されている場合、コアのうちの最小番号が付されたＣＰＵについては初期ＣＰＵリセット機能を実行することができ、コア内の他のすべてのＣＰＵについてはＣＰＵリセットが行われる。クリア・リセットによって、初期ＣＰＵリセットおよびサブシステム・リセットが行われ、さらに、ＴＯＤクロック以外の構成内のすべてのＣＰＵにおけるすべての記憶場所およびレジスタがクリアまたは初期化される。クリアは、制御プログラムがアドレス指定不能ページの内容を保持するために使用するダイレクト・アクセス記憶装置などの外部記憶装置には影響を及ぼさない。
【００３９】
ＣＰＵ電源投入リセットにより、初期ＣＰＵリセットが行われ、汎用レジスタ、アクセス・レジスタ、制御レジスタ、および浮動小数点レジスタの内容がクリアされてゼロ／デフォルト値が有効検査ブロック（valid checking-block）コードと共に設定される。なお、状態のクリアまたは初期化は値をゼロにするものである必要はなく、クリアされた状態で非ゼロ値にデフォルト設定することもできる。ＣＰＵ電源投入リセットによって構成が設定される場合、それによってアーキテクチャ・モードをデフォルト・モードに設定することができる。それ以外の場合、アーキテクチャ・モードをすでに構成内にあるＣＰＵのモードに設定してもよい。ＣＰＵリセット、初期ＣＰＵリセット、サブシステム・リセットおよびクリア・リセットは手動で開始されてもよい。
【００４０】
例示の実施形態では、各ＣＰＵに番号が割り当てられ、ＣＰＵアドレスと呼ばれる。ＣＰＵアドレスは、１つのＣＰＵを構成内で一意に識別する。ＳＩＧＰ命令のＣＰＵアドレス・フィールドでこのアドレスを指定することによって、ＣＰＵが指定される。割込みによりＣＰＵアドレス・フィールドにこのアドレスを格納することによって、誤動作アラート、緊急信号、または外部呼出しを発信しているＣＰＵを識別することができる。ＣＰＵアドレスは、構成定義処理によって割り当てられ、典型的には再構成変更の結果として変更されない。プログラムは、ＣＰＵアドレス・ストア命令を使用してＣＰＵのアドレスを判断することができる。ＣＰＵアドレス・ストア命令は、マルチスレッディング構成内でＣＰＵを識別するＣＰＵアドレスを指定するためにも使用することができる。
【００４１】
マルチスレッディングが有効化されている場合、ＣＰＵアドレスは、コア内のＣＰＵの識別情報に連結されたコア識別情報（コアＩＤ）を含むことができる。コア内のＣＰＵ識別情報は、スレッド識別情報（スレッドＩＤまたはＴＩＤ）である。構成内では、すべてのコアが同じ数のＣＰＵを提供する。ただし、モデルおよびＣＰＵタイプによっては、コア内の一部のＣＰＵが動作状態でない場合がある。
【００４２】
シグナル・プロセッサ・マルチスレッディング設定命令（order）によって使用されるパラメータ・レジスタのＰＳＭＴＩＤに基づき、固定数のビットによりスレッド識別情報を表す。このビット数をＴＩＤ幅と呼ぶ。
【００４３】
コアＩＤは、マルチスレッディングを有効化する前にＣＰＵアドレスの右端ビットから形成することができる。コアＩＤは、ＴＩＤ幅ビットだけ左にシフトされ、その結果、マルチスレッディングが利用可能になった後にはＣＰＵアドレスの左端ビットとなる。スレッドＩＤは同じＴＩＤ幅ビット数を有し、マルチスレッディングが有効化された後はＣＰＵアドレスの右端ビットを占める。スレッドＩＤは、連続した一連の数字で割り当てることができる。表１に、ＰＳＭＴＩＤと、ＴＩＤ幅と、コア識別情報およびスレッド識別情報を含むＣＰＵアドレス・ビットとの関係を例示する。
【００４４】
【表１】
0006509246.tif 000002
【００４５】
図７に、アドレス拡張を、一実施形態によるＣＰＵアドレス拡張処理６００Ａの一例として示す。ブロック６０２において、コア・アドレス値６０４を数ビットのＣＰＵアドレス・ビットとして使用して、ＳＴモードで一次スレッドにアクセスすることができる。矢印６０６はＳＴモードからＭＴモードへの切換えを示す。ブロック６０８において、拡張アドレス値６１０を使用して、ＭＴモードで一次スレッドまたは１つまたは複数の二次スレッドにアクセスすることができる。拡張アドレス値６１０は、シフト・コア・アドレス値６１２としてシフトされてスレッド・アドレス値６１４と連結された、コア・アドレス値６０４を含む。シフト・コア・アドレス値６１２はコア識別子（コアＩＤ）であり、スレッド・アドレス値６１４はスレッド識別子（ＴＩＤ）である。シフト・コア・アドレス値６１２は、要求された最大識別子、例えばＰＳＭＴＩＤに基づく量だけシフトすることができる。スレッド・アドレス値６１４内の数ビットのＴＩＤビットは、上記の表１に示すようにＰＳＭＴＩＤに基づいて決定することができる。スレッド・アドレス値６１４をシフト・コア・アドレス値６１２の下位ビットに連結して、拡張アドレス値６１０を形成することができる。すべてゼロのスレッド・アドレス値６１４は一次スレッドを指定し、ゼロより大きい値は二次スレッドを識別し、アドレス指定する。
【００４６】
ＭＴモードとＳＴモードとを切り換える場合、コア・アドレス値６０４（ＳＴモード）または拡張アドレス値６１０（ＭＴモード）を選択して、それぞれＳＴモードまたはＭＴモードでのＣＰＵアドレスとして使用する。コア・アドレス値６０４は、ＳＴモードで使用される標準形式アドレスの一例であり、コアは、ＭＴモードの無効化に基づいてＭＴモードからＳＴモードに復帰する。例示の一実施形態では、ＭＴモードの無効化に基づいて一次スレッドのみがアクセス可能（すなわち二次スレッドはアクセス不能）になる。図８に、一実施形態によるＣＰＵアドレス縮小処理６００Ｂの一例を示す。図８の矢印６１６は、ブロック６０８のＭＴモードからブロック６０２のＳＴモードへの切換えを示す。ＭＴモードからＳＴモードへの復帰は、拡張アドレス値６１０を右にシフトすることと、スレッド・アドレス値６１４を削除して、シフト・コア・アドレス値６１２からコア・アドレス値６０４（コアＩＤ）をＣＰＵアドレスとして含む標準形式アドレスを形成することとを含むことができる。
【００４７】
リセット機能によってマルチスレッディングを無効化する場合、（ａ）スレッドＩＤゼロを有するＣＰＵのＣＰＵアドレスが、有効化の際に使用したＴＩＤ幅ビット数と同じビット数だけ右にシフトされ、（ｂ）アドレスの左側のＴＩＤ幅ビット数にゼロが挿入され、（ｃ）ＣＰＵアドレスが元の非マルチスレッディング形式（すなわち標準形式アドレス）に戻る。マルチスレッディングが無効化されると、マルチスレッディングが有効なときに非ゼロのスレッドＩＤを有するコア内のすべてのＣＰＵが、動作状態でなくなる。
【００４８】
マルチスレッディングが有効化されていない場合、ＣＰＵアドレスは構成定義処理によって割り当てられた値から変化しない。この場合、スレッド識別情報は存在しない。
【００４９】
いくつかのシグナル・プロセッサ命令（order）が、例えば開始、停止、再開、停止および状態ストア、初期ＣＰＵリセット、ＣＰＵリセット、アドレス指定時状態ストア、アーキテクチャ設定、稼働状態センス、マルチスレッディング設定、アドレス指定時追加状態ストアなどを含む命令（order）をＣＰＵに供給することができる。初期ＣＰＵリセットまたはＣＰＵリセットは、シグナル・プロセッサ命令によって開始することができ、アーキテクチャ・モードまたは他のＣＰＵに影響を及ぼさず、マルチスレッディングを無効化せず、Ｉ／Ｏをリセットさせない。
【００５０】
アーキテクチャ設定命令（order）は、構成内のすべてのＣＰＵがそのモードに設定されるアーキテクチャ・モードを指定する。アーキテクチャの相違には、ＣＰＵによってサポートされる異なるアドレス指定モード、レジスタ定義、および命令が含まれ得る。アーキテクチャ・モードを変更すると、レジスタのビット選択フィールドをデフォルト状態に設定する（例えばゼロにする）ことができ、構成内のすべてのＣＰＵのアクセス・レジスタ・トランスレーション・ルックアサイド・バッファ（ＡＬＢ）およびトランスレーション・ルックアサイド・バッファ（ＴＬＢ）がクリアされ、順序付け機能およびチェックポイント同期機能を構成内のすべてのＣＰＵについて実行することができる。
【００５１】
稼働状態センス命令（order）は、アドレス指定されたＣＰＵが稼働しているか否かを示すことができる。ＳＴモードでは、稼働／非稼働状態として標識を返すことができる。ＭＴモードでは、アドレス指定されたＣＰＵが属するコアのいずれかのＣＰＵが稼働中であるか、または、アドレス指定されたＣＰＵが属するコアのすべてのＣＰＵが稼働状態ではないかを識別するための標識を使用することができる。
【００５２】
ＭＴモード設定命令（order）は、マルチスレッディング機構を有効化する。パラメータ・レジスタのビット位置が、構成内で付与されるＰＳＭＴＩＤを含むことができる。ＰＳＭＴＩＤは、各コアにおいてアドレス指定可能にされるＣＰＵの数よりも１だけ少なく定義することができる。例えば、指定されたビット位置における値３は、最大４個のスレッドが提供されることを示す。構成内のすべてのＣＰＵがアドレス指定されるとみなされるため、ＳＩＧＰ命令のＣＰＵアドレス・レジスタの内容は無視することができる。ＭＴ設定命令（order）が受け付けられた場合、ＭＴ設定命令（order）はＳＩＧＰ命令の実行中にすべてのＣＰＵによって完了される。図９を参照すると、ＳＩＧＰ  ＭＴ設定命令（order）７０２の処理７００が図示されている。図９の処理７００を参照しながら本明細書で詳述するように、無効な命令（order）、不正な状態、および無効なパラメータのうちの１つまたは複数と共にＳＩＧＰ  ＭＴ設定命令（order）７０２が発行されたとの判断に基づき、エラー標識を出力し、ＭＴモードの有効化を防止することができる。
【００５３】
ブロック７０４でマルチスレッディング機構がインストールされていない場合、または、有効なアーキテクチャ・モードでＣＰＵが有効化されていない場合７０８、ＭＴ設定命令（order）は受け付けられず、それぞれブロック７０６または７１０で無効命令（order）標識が返されてもよい。ブロック７１２で構成内の他のＣＰＵが停止状態またはチェック停止状態でない場合、またはブロック７１６で構成がマルチスレッディング用にすでに有効化されている場合、ＭＴ設定命令（order）は受け付けられず、それぞれブロック７１４または７１８で不正状態標識が返されてもよい。
【００５４】
ブロック７２０でＰＳＭＴＩＤが無効な場合、ＭＴ設定命令（order）は受け付けられず、ブロック７２２で無効パラメータ標識が返されてもよい。ブロック７２４でＰＳＭＴＩＤがゼロにされると、構成はマルチスレッディング用としては有効化されず、ＳＴモードのままとなり、ブロック７２８で条件コードとしていずれかの状態を出力する。例示の一実施形態では、ＰＳＭＴＩＤは有効で、ゼロ以外であり、ブロック７２６で構成がマルチスレッディング用として有効化され、その結果、ＣＰＵアドレス拡張が行われ、構成内のすべてのＣＰＵのＡＬＢおよびＴＬＢの内容がクリアされ、構成内のすべてのＣＰＵに対して順序付けおよびチェックポイント同期機能が実行される。ブロック７２８で、状態を条件コードで出力することができる。正常に完了すると、ＭＴ設定命令（order）を実行しているＣＰＵ以外のすべてのＣＰＵは停止またはチェック停止状態のままとなる。ただし、マルチスレッディングが有効化される前にＣＰＵがチェック停止状態だった場合、同じコア内で非ゼロのスレッドＩＤを有するＣＰＵが停止またはチェック停止状態になっているか否かは予測不能な場合がある。
【００５５】
スレッド・コンテキストはアーキテクテッド・レジスタ・コンテキストとも呼ばれる。マルチスレッディングが有効化される前の各ＣＰＵのアーキテクテッド・レジスタ・コンテキスト（すなわち、ＰＳＷ、ＣＰＵタイマ、クロック比較器、汎用レジスタ、浮動小数点レジスタおよび浮動小数点制御レジスタ、ベクトル・レジスタ、制御レジスタ、アクセス・レジスタ、プレフィックス・レジスタ、ならびにＴＯＤプログラマブル・レジスタなどの内容）は、マルチスレッディングが有効化された後で、それぞれのコアのＴＩＤゼロを有するＣＰＵのアーキテクテッド・レジスタ・コンテキストになる。同様に、ＭＴ有効化構成の各コアのＴＩＤゼロを有するＣＰＵのアーキテクテッド・レジスタ・コンテキストは、通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）キーの起動の結果としてマルチスレッディングが無効化されるとそれぞれのＣＰＵのアーキテクテッド・レジスタ・コンテキストとなる。
【００５６】
通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）
キー動作の結果としてマルチスレッディング機構が無効化される場合、非ゼロスレッド識別情報を有するすべてのＣＰＵのアーキテクテッド・レジスタ・コンテキストを保持することができる。クリア・リセットの介在なしにマルチスレッディング機構が後で再度有効化される場合、非ゼロのスレッド識別情報を有するすべてのＣＰＵのアーキテクテッド・レジスタ・コンテキストが復元される。
【００５７】
マルチスレッディングが通常ロード（load-normal）キーまたはダンプありロード（load-with-dump）キーの起動により無効化された後で再度有効化される場合に、パラメータ・レジスタのビット内のＰＳＭＴＩＤの値が前回の有効化で使用されたものと異なる場合、非ゼロのスレッドＩＤを有するすべてのＣＰＵのアーキテクテッド・レジスタ・コンテキストは予測不能な場合がある。
【００５８】
システム情報ストア命令を使用して、構成の構成要素に関する情報をシステム情報ブロック（ＳＹＳＩＢ）に格納することができる。ＳＹＳＩＢは、ＭＴインストール済みフィールド、ＭＴ汎用フィールド、総ＣＰＵ／コア数、構成済みＣＰＵ／コア数、待機ＣＰＵ／コア数、予約ＣＰＵ／コア数、およびその他のフィールドを含むことができる。ＭＴインストール済みフィールドは、マルチスレッディング機構がインストールされているか否かを示すことができ、第１のコア・タイプ、例えば特殊コア・タイプのための最高サポートＴＩＤも示してよい。ＭＴ汎用フィールドは、第２のコア・タイプ、例えば汎用コア・タイプのための最高サポートＴＩＤを示すことができる。ＭＴ汎用フィールド内の最高サポートＴＩＤは、ＭＴインストール済みフィールド内の最高サポートＴＩＤ以下に制限されてもよい。総ＣＰＵ／コア数は、構成済み状態か待機状態か予約状態かを問わず、構成内の汎用ＣＰＵまたは汎用ＣＰＵを含むコアの総数を示すことができる。構成済みＣＰＵ／コア数は、構成済み状態、すなわち、構成内にあり、プログラムを実行する準備が整っている状態の汎用ＣＰＵまたは汎用ＣＰＵを含むコアの数を示すことができる。待機ＣＰＵ／コア数は、待機状態、すなわち、構成済み状態になるまではプログラムを実行するための使用に供することができない汎用ＣＰＵまたは汎用ＣＰＵを含むコアの数を示す。予約ＣＰＵ／コア数は、予約状態、すなわち、プログラムを実行するための使用に供することができず、構成済み状態にされることができない汎用ＣＰＵまたは汎用ＣＰＵを含むコアの数を示す。
【００５９】
図１０に、一実施形態によるマルチスレッディング機能情報の格納の一例を示す。コア８００Ａのスレッド１などのスレッドにおいて実行されるプログラムが、ＬＰＡＲなどの構成８５０のメモリ８０１からシステム情報ストア（STORE SYSTEM INFORMATION （ＳＴＳＩ））命令８３０をフェッチすることができる。ＳＴＳＩ命令の実行の結果、システム情報ブロック（ＳＹＳＩＢ）８０２の格納８３２が行われる。図１０の例では、ＳＹＳＩＢ８０２は、構成８５０がマルチスレッディングをサポートしているか否かを示すＭＴインストール済み識別子８０４を含む。ＳＹＳＩＢ８０２は、特殊コアの１コア当たりの最大ＴＩＤ８０６および汎用コアの最大ＴＩＤ８０８として与えることができる、コア８００Ａ／８００Ｂの最高サポート・スレッドの最大スレッド識別子も含む。ＳＹＳＩＢ８０２は、現在のプログラム指定最大スレッド識別子（ＰＳＭＴＩＤ）８０９も含むことができる。現在のＰＳＭＴＩＤ８０９は、プログラムによって構成８５０内で有効化されたときのマルチスレッディング・モードを反映する。ＳＴＳＩ命令８３０が基本マシン・レベルで実行される場合、現在のＰＳＭＴＩＤ８０９は定義されない場合がある。
【００６０】
コア８００Ｂのスレッド２などのスレッドで実行されているプログラムは、構成８５０のメモリ８０１からサービス呼出し（SERVICE CALL（ＳＥＲＶＣ））命令８３４もフェッチすることができ、その場合、この命令はシステム制御プログラム情報読取り（read-system-control-program-information: read-SCP-infoまたはＲＳＣＰＩ）コマンドを指定する。ＲＳＣＰＩコマンドの実行により、サービス呼出し制御ブロック（ＳＣＣＢ）８１０をメモリ８０１に格納させる８３６ことができる。例示の一実施形態では、ＲＳＣＰＩコマンドの実行により格納されたＳＣＣＢ８１０は、ＳＹＳＩＢ８０２では利用可能ではない場合がある類似および追加の情報を提供する。図１０の例では、ＳＣＣＢ８１０は、コア８００Ｂがマルチスレッディングをサポートしているか否かを示すＭＴインストール済み識別子８１２を含む。ＳＣＣＢ８１０は、特殊コアの１コア当たり最大ＴＩＤ８１４および汎用コアの最大ＴＩＤ８１６として与えることができる、コア８００Ｂの最高サポート・スレッドの最大スレッド識別子も含む。ＳＣＣＢ８１０の８１２〜８１６の値は、ＳＹＳＩＢ８０２でアクセス可能な値８０４〜８０８に相当する。さらに、ＳＣＣＢ８１０は、コア８０８Ｂの最高サポート・スレッドの最後に設定されたプログラム指定最大スレッド識別子を含むことができ、これを直前設定プログラム指定最大スレッド識別子（ＰＳＭＴＩＤ）８１８とも呼ぶ。ＳＣＣＢ８１０は、ＰＳＭＴＩＤサポート・マスク８２０としてＭＴ設定命令（order）で受付け可能なＰＳＭＴＩＤ値のマスクも含むことができる。ＰＳＭＴＩＤサポート・マスク８２０は、１コア当たり最大ＴＩＤ８１４によって定義された数よりも少ない数が望まれる場合に、サポートされるＣＰＵ／スレッドを識別するために使用することができる。
【００６１】
なお、コア８００Ａおよび８００Ｂは、この例で示されていない他の態様も含むことがわかるであろう。また、ＳＹＳＩＢ８０２およびＳＣＣＢ８１０は、図１０の例に示されていない追加の値も含むことができる。
【００６２】
図１１に、一実施形態によるマルチスレッディング機能を判断するための処理の流れ９００を示す。ブロック９０２で、コアがマルチスレッディング機能情報取出し（ＲＭＴＣＩ）命令を実行する。この命令は、例えばＳＥＲＶＣ命令またはＳＴＳＩ命令のうちのいずれか一方とすることができる。ブロック９０４で、構成のマルチスレッディング機能を識別するスレッド識別情報を取得する。ブロック９０６で、取得したスレッド識別情報を格納する。ブロック９０８で、取得したスレッド識別情報に基づき、構成が以前にマルチスレッディング有効化されていたか否かを判断する。
【００６３】
前述のように、ＳＥＲＶＣ命令はスレッド識別情報をメモリ内の応答ブロック（例えば図１０のＳＣＣＢ８１０）に格納するように構成され、ＳＴＳＩ命令はスレッド識別情報をメモリ内のＳＹＳＩＢ（例えば図１０のＳＹＳＩＢ８０２）に格納するように構成されている。取得したスレッド情報は、コアがマルチスレッディングをサポートしているか否かを示すＭＴインストール済み識別子（例えば図１０のＭＴインストール済み識別子８０４または８１２）を含むことができる。取得したスレッド情報は、コアの最高サポート・スレッドの最大スレッド識別子（例えば図１０の最大ＴＩＤ値８０６、８０８、８１４または８１６）も含んでよい。取得したスレッド情報は、現在のプログラム指定最大スレッド識別子（例えば図１０の現在のＰＳＭＴＩＤ８０９）および最終設定プログラム指定最大スレッド識別子（例えば図１０のＰＳＭＴＩＤ８１８）を含むことができる。応答ブロックは、個々にサポートされる特定のスレッド識別子（例えば図１０のＰＳＭＴＩＤサポート・マスク８２０）を示すビットのマスクを含むことができる。構成が以前にＭＴ有効化されたか否かの判断は、直前設定プログラム指定最大スレッド識別子がゼロ以外の値（例えば直前設定ＰＳＭＴＩＤ＞０）であることに基づくことができる。例示の一実施形態では、構成は複数のコア・タイプをサポートする。
【００６４】
例示の一実施形態では、プログラム・カウンタ値などのレジスタおよび値は、レジスタに含まれるかまたは別個に管理されてよく、スレッド・コンテキストとしてキャプチャされる。ＭＴモードでアドレス拡張が行われると、追加のスレッド・コンテキストがアクセス可能になる。図７、図８を参照して前述したように、構成内のコアごとにＣＰＵアドレスが作成される。ＣＰＵアドレスは、ＣＰＵアドレス・ストア命令によって調べることができ、他の構造体で示され、様々なＳＩＧＰ命令（order）で使用される。ＭＴが有効化されない場合、このアドレス方式は変化しない。ＭＴが有効化される場合、ＣＰＵアドレスは拡張処理が施される。前述のように、ＣＰＵアドレスの非ＭＴ有効化部分を、ＴＩＤを収容するのに十分なビット数だけ左にシフトすることができる。例えば、オペレーティング・システムがＰＳＭＴＩＤ値１を指定したＳＩＧＰ  ＭＴ設定命令（order）を発行した場合、ＣＰＵアドレスは１ビットだけ左にシフトされることになる。ＰＳＭＴＩＤが２または３の場合、ＣＰＵアドレスは２ビットだけ左にシフトされることになる。ＰＳＭＴＩＤが４ないし７の場合、ＣＰＵアドレスは３ビットだけ左にシフトされることになる、という具合である。
【００６５】
（通常ロード（load-normal）動作によって行われたクリア・リセットまたはＣＰＵリセットの結果として）マルチスレッディングが後で無効化される場合、ＣＰＵアドレス縮小が行われる。ＭＴ有効化ＣＰＵアドレスを、ＭＴを有効化したＳＩＧＰ  ＭＴ設定命令（order）で使用したＰＳＭＴＩＤビット数と同じビット数だけ右にシフトすることができ、アドレスのスレッドＩＤ部分が消える。ＭＴモードでアクセス可能なスレッド・コンテキストは、図１２に示す例などのように、１つまたは複数の記憶場所に存在することができる。図１２の例では、構成１０００がコア１００２を含み、さらに他のコア（図示せず）を含んでもよい。メモリ１００６は、構成１０００の一部として構成メモリ１００５を含むことができ、構成１０００とは別個のホスト／ファームウェア・メモリ１００７を含むことができる。ホスト／ファームウェア・メモリ１００７は、ホストによって維持される状態記述ブロック１００８を含むことができ、状態記述ブロック１００８はスレッド（例えば図１２のスレッドｎ）のスレッド・コンテキスト１０１０を格納することができる。サテライト・ブロック１０１２が、ホスト／ファームウェア・メモリ１００７の一部としてメモリ１００６内の状態記述ブロック１００８にアンカーされることができ、この場合、サテライト・ブロック１０１２は、スレッド・コンテキスト１０１０の代替として、またはスレッド・コンテキスト１０１０と組み合わせて、スレッド・コンテキスト１０１４を含むことができる。各スレッドは、対応する状態記述ブロック１００８と、さらに任意でサテライト・ブロック１０１２とを有することができ、これらのブロックにスレッド・コンテキスト１０１０またはスレッド・コンテキスト１０１４を格納することができる。さらに他の代替態様として、例えばコア１００２にスレッド・コンテキスト１０１８を格納するためにハードウェア・コンテキスト・レジスタ１０１６を使用することができる。スレッド・コンテキスト１０１０、１０１４および１０１８のこれらの例は、ストレージ・オプションとして、組み合わせて、または別々に使用することができる。スレッド・コンテキストが維持されるか否かにかかわらず、アドレス縮小が行われるとスレッド・コンテキストは直接アクセスすることができなくなるが、ダンプ・プログラムによるアクセスのために保存することができる。
【００６６】
ＭＴが無効化されると、ＣＰＵアドレス縮小処理によって、コアのスレッド１〜ｎがアドレス指定不能にされる。同様に、アーキテクテッド・レジスタを含むスレッド・コンテキストはプログラムにとって見えなくなる。非クリア・ロード動作によるＣＰＵリセットの結果としてＭＴが無効化された場合、スレッド１〜ｎのレジスタ・コンテキストが保持される。これらのデータは、構成がＭＴモードに戻される場合に後で調べることができる。図１２に示すように、ホストによって各ゲスト・スレッドのレジスタ・コンテキストを、そのスレッドの状態記述ブロック１００８で（またはベクトル・レジスタの場合のように、状態記述にアンカーされたサテライト・ブロック１０１２で）維持することができる。
【００６７】
ＭＴの無効化中のスレッド１〜ｎのコンテキストの保持は、ＯＳ障害発生後にスレッドの状態をダンプする診断機能である。ＯＳ障害発生後、オペレータは、障害発生時点でのシステムのメモリとスレッド・コンテキストとをキャプチャするために、スタンドアロン・ダンプ（ＳＡＤＭＰ）プログラムを実行することを選択することができる。ただし、ＳＡＤＭＰプログラムをロードすると、構成はＳＴモードが有効化されたデフォルトのアーキテクチャ・モードに復帰する可能性があり、したがってＭＴが無効化される。しかし、ＳＡＤＭＰは非クリア・ロード動作によってロードされるため、各コアのスレッド１〜ｎのレジスタ・コンテキストは保持される。ＳＡＤＭＰは、ＳＥＲＶＣ  ＳＣＰ情報読取りコマンドの応答ブロックの結果を調べることによって、ダンプされる構成においてＭＴが有効化されていたか否かを判断することができる。この数は、続いて、前と同じレベルでＭＴを再有効化するためにＳＩＧＰ  ＭＴ設定命令（order）への入力として使用することができる。
【００６８】
図１３に、一実施形態によるマルチスレッディング・レジスタ保存の例を示す。図１３のコンピュータ・システム１１００などのシステムは、複数の構成１１０２および１１０４を含み得る。図１３の例では、構成１１０２はコア１１０６およびコア１１０８を含み、構成１１０４はコア１１１０および１１１２を含む。構成１１０２および１１０４はそれぞれ独立して別々の時点でＳＴモードとＭＴモードとの間で切り換えることができる。コンピュータ・システム１１００の構成１１０２および１１０４はそれぞれ、構成１１０２および１１０４のそれぞれにおいて同時に有効化された異なる数のスレッドをサポートするように、異なる数の最大スレッドＩＤを使用して構成可能である。図１３の例では、構成１１０２がＭＴモード１１１４である間、コア１１０６および１１０８はそれぞれ最大２個のスレッドをサポートするのに対して、構成１１０４がＭＴモード１１１６である間、コア１１１０および１１１２はそれぞれ最大４個のスレッドをサポートする。
【００６９】
構成１１０２においてＭＴモード１１１４が有効になっている間、ＴＩＤ０とＴＩＤ１の両方が、スレッド・コンテキスト１１１５の別々のインスタンスなど別々のスレッド・コンテキストとしてアクセス可能である。時点１１１８において、構成１１０２に対する通常ロード（load-normal）動作または非クリア・リセットにより、ＭＴモード１１１４を無効化することができ、それによって、コア１１０６および１１０８の両方がＳＴモード１１２０に切り換えられる。前述のようなアドレス縮小のため、ＴＩＤ０レジスタはＳＴモード１１２０でアクセス可能である。しかし、ＭＴモード１１１４でアクセス可能であったＴＩＤ１レジスタは、保持はされるがアクセス可能ではなくなる。例えば、ＴＩＤ１レジスタは、図１２のスレッド・コンテキスト１０１０、１０１４または１０１８として実施してもよく、その場合、アドレス拡張により利用可能であったアドレスはＳＴモード１１２０への切換え時のアドレス縮小の後はもはやアクセス可能でなくなる。
【００７０】
構成１１０４は、ＭＴモード１１１６が有効化されている間、ＴＩＤ０、ＴＩＤ１、ＴＩＤ２およびＴＩＤ３レジスタに、図１２のスレッド・コンテキストの別個のインスタンス１０１０、１０１４または１０１８などのように別個のスレッド・コンテキストとしてアクセス可能である。この例では、ＴＩＤ０は一次スレッドを表し、ＴＩＤ１〜ＴＩＤ３は、コア１１１０および１１１２のそれぞれのために別々に維持される二次スレッドを表す。時点１１２２において、構成１１０４に対するクリア・リセットによってＭＴモード１１１６を無効化することができ、それによってコア１１１０および１１１２の両方がＳＴモード１１２４に切り換えられる。時点１１２２におけるクリア・リセットにより、ＴＩＤ０、ＴＩＤ１、ＴＩＤ２およびＴＩＤ３のレジスタのすべてをクリアすることができる。前述のようなアドレス縮小により、ＴＩＤ０レジスタはＳＴモード１１２４でアクセス可能である。しかし、ＭＴモード１１１６でアクセス可能であったＴＩＤ１、ＴＩＤ２およびＴＩＤ３レジスタは、クリアされた状態で保持されるがアクセス可能ではなくなる。図１３に示すように、作用を各構成１１０２および１１０４に局在化させた状態で、異なる時点１１１８および１１２２において各構成１１０２および１１０４上で動作を独立して実行することができる。したがって、構成１１０２はＳＴモード１１２０とすることができると同時に、構成１１０４はＭＴモード１１１６とすることができ、ＳＴ／ＭＴモードをコンピュータ・システム１１００のすべての構成について一致させる必要はない。
【００７１】
図１４に、一実施形態によるマルチスレッディング・レジスタ保存の処理の流れ１２００を示す。ブロック１２０２で、ＭＴをコア内で無効化するとのＭＴモードのコアによる判断に基づき、ＭＴモードからＳＴモードへの切換えが行われる。ＭＴモードの一次スレッドをＳＴモードの唯一のスレッドとして維持することができる。二次スレッドのプログラム・アクセス可能レジスタ値およびプログラム・カウンタ値を含む１つまたは複数のスレッド・コンテキストに、アプリケーション・プログラムがアクセスすることができないようにする。ブロック１２０４で、この切換えに基づき、動作タイプ（例えば、クリアか非クリアか）が、プログラム・アクセス可能レジスタ値をクリアすることであるか、またはプログラム・アクセス可能レジスタ値を保持することであると判断される。ブロック１２０６で、非クリア動作に基づき、プログラム・アクセス可能レジスタ値を保持するとの判断がなされる。ブロック１２０８で、クリア動作に基づき、プログラム・アクセス可能レジスタをクリアするとの判断がなされる。
【００７２】
前述のように、スレッド・コンテキストのプログラム・アクセス可能レジスタ値およびプログラム・カウンタ値は、プログラム汎用レジスタ、浮動小数点レジスタ、制御レジスタ、アクセス・レジスタ、プレフィックス・レジスタ、およびＴＯＤプログラマブル・レジスタを含むことができる。制御レジスタは、浮動小数点制御レジスタ、ランタイム・インストルメンテーション（runtime-instrumentation）制御、ＣＰＵ測定制御などを含むことができる。スレッド・コンテキストに含まれ得るレジスタの他の例としては、プログラム状態ワード（例えばプログラム・カウンタ／命令アドレスと、条件コードと、命令の順序付けを制御しＣＰＵ状態を判断するためのその他の情報とを含む）、ベクトル・レジスタ、ＣＰＵタイマ、クロック比較器、ブレーキング・イベント・アドレス・レジスタ、および当技術分野で周知のその他のレジスタがある。前述のように、ＭＴを有効化した最後に正常に実行されたシグナル・プロセッサ命令に基づいて、ＰＳＭＴＩＤが設定される。ＭＴモードへの切換えに基づき、プログラム・アクセス可能レジスタ値に、対応する二次スレッドが再有効化されることに基づいてアプリケーション・プログラムがアクセスすることができるようにされる。例えば、図１３においてＳＴモード１１２０からＭＴモード１１１４に戻ることにより、ＴＩＤ１レジスタがアクセス可能になり、ＴＩＤ１を再有効化することができる。スレッド・コンテキストは、状態記述ブロック、メモリ内の状態記述ブロックにアンカーされたサテライト・ブロック、または図１２のスレッド・コンテキスト１０１０、１０１４、または１０１８などのコンテキスト・レジスタのいずれでも維持することができる。
【００７３】
一次スレッド・コンテキストは、一次スレッドのプログラム・アクセス可能レジスタ値およびプログラム・カウンタ値、例えば図１３の構成１１０４のＴＩＤ０レジスタおよびＴＩＤ０レジスタを含むことができ、この場合、一次スレッド・コンテキストにアプリケーション・プログラムがＳＴモード１１２４とＭＴモード１１１６の両方でアクセスすることができる。二次スレッド・コンテキストは、二次スレッドのプログラム・アクセス可能レジスタ値およびプログラム・カウンタ値、例えば図１３の構成１１０４のＴＩＤ１〜ＴＩＤ３およびＴＩＤ１〜ＴＩＤ３レジスタを含むことができる。
【００７４】
図１５に、一実施形態によるマルチスレッディング・レジスタ復元の一例を示す。図１５の例は、単一構成１３０２を有するコンピュータ・システム１３００を含む。構成１３０２は、コア１３０４、コア１３０６、およびコア１３０８を含む。コア１３０４〜１３０８はそれぞれ、この例では最大４個のスレッド（ＴＩＤ０、ＴＩＤ１、ＴＩＤ２およびＴＩＤ３）を含む。ＭＴモード１３１０では、コア１３０４〜１３０８においてＴＩＤ０〜ＴＩＤ３のスレッド・コンテキストのすべてが利用可能である。時点１３１２において、コア１３０４〜１３０８をＳＴモード１３１４に切り換える構成１３０２の通常ロード動作または非クリア・リセットにより、ＭＴモード１３１０を無効化することができる。ＳＴモード１３１４では、コア１３０４〜１３０８のそれぞれについて、ＴＩＤ０レジスタがアクセス可能なままであり、ＴＩＤ１〜ＴＩＤ３レジスタはアクセス不能であるが保持される。時点１３１６において、ＭＴモードに入るためにＳＩＧＰ  ＭＴ設定命令（order）の実行によりＭＴを再有効化することができる。再開されたＭＴモード１３１８で、コア１３０４〜１３０８のそれぞれのＴＩＤ１〜ＴＩＤ３レジスタのスレッド・コンテキストへのアクセスが復元される。これにより、分析のためのスレッド・コンテキスト情報をセーブするために、スタンドアロン・ダンプ・プログラム１３２０などのダンプ・プログラムによるＴＩＤ１〜ＴＩＤ３レジスタを含むスレッドのレジスタのすべての検査が可能になる。
【００７５】
図１６に、オペレーティング・システムの障害発生後にスレッドのアーキテクテッド・レジスタ・コンテキストをキャプチャするために、図１５のスタンドアロン・ダンプ（ＳＡＤＭＰ）プログラム１３２０などのスタンドアロン・ダンプ・プログラムが用いることができる、一実施形態によるマルチスレッディング・レジスタ復元処理の流れ１４００を示す。ブロック１４０５で、非クリア・ロード動作（例えば通常ロードまたはダンプありロード）によりＳＡＤＭＰプログラムがロードされる。非クリア・ロード動作により、構成が図１５の構成１３０２のＳＴモード１３１４などのＳＴモードに暗黙的に戻される。次に、ブロック１４１０で、ＳＡＤＭＰプログラムはＳＴＳＩまたはＳＥＲＶＣ命令を使用して、構成でＭＴ機構が利用可能か否かを問い合わせることができる。ＭＴがインストールされている場合、ＳＡＤＭＰプログラムは、ブロック１４１５で、この構成のために設定された直前設定プログラム指定最大スレッド識別情報（ＰＳＭＴＩＤ）を問い合わせる。この構成のためにＭＴが以前に一度も設定されたことがない場合、直前設定ＰＳＭＴＩＤ値はゼロとなる。次に、ブロック１４２０で、ＳＡＤＭＰプログラムは、直前設定ＰＳＭＴＩＤがどのような値であったとしてもマルチスレッディングを再有効化する命令を実行することができる。ブロック１４１０での問合せにより、ＭＴがインストールされていないと判明した場合、ブロック１４１５での直前設定ＰＳＭＴＩＤ値の問合せ、またはブロック１４２０でのＭＴの再有効化は試みられない。
【００７６】
ＳＡＤＭＰプログラムは、構成内の他のそれぞれのＣＰＵ（スレッド）のアーキテクテッド・レジスタ・コンテキストをメモリ内の事前定義済みの記憶場所にセーブするために、各ＣＰＵ（スレッド）に発信を試みる。ＳＡＤＭＰをロードする前にＭＴが事前に有効化されていなかった場合、ＣＰＵアドレスは通常の非拡張形式である。ＭＴが事前に有効化されていた場合、ＣＰＵアドレスはコアＩＤとスレッドＩＤとを含む拡張形式である。ブロック１４２５で、ＳＡＤＭＰがＣＰＵアドレス（Ｎ）ゼロから開始し、ブロック１４３０で、ＣＰＵアドレスがＳＡＤＭＰが実行されているＣＰＵを示しているか否かを判断する。ＳＡＤＭＰ実行中のＣＰＵを示している場合、そのＣＰＵ／スレッドがスキップされ、ブロック１４５０でＮが次の値にインクリメントされる。Ｎが現在のＣＰＵアドレスと異なる場合、ブロック１４３５で、例えばＳＩＧＰアドレス指定時状態ストア（SIGP store-status-at-address）命令（order）またはＳＩＧＰ停止および状態ストア（SIGP stop-and-store-status）命令（order）の実行により、そのＣＰＵ／スレッドに対してそのアーキテクテッド・レジスタ・コンテキストをメモリに格納するように信号が発信される。構成がベクトル機能を備える場合、ＣＰＵ／スレッドのベクトル・レジスタの内容を格納するためにＳＩＧＰアドレス指定時追加状態ストア（SIGP store-additional-status-at-address）命令（order）も実行することができる。ブロック１４４０で、ブロック１４３５の信号が成功したか否かが判断される。成功した場合、ブロック１４４５で、ＳＡＤＭＰプログラムはそのＣＰＵ／スレッドのレジスタ・コンテキストをテープまたはディスク上のダンプ・ファイルにセーブする。ブロック１４４０による判断で、ブロック１４３５の信号が成功しない場合（例えばスレッドが動作状態でない場合）、そのＣＰＵ・スレッドはスキップされ、ブロック１４５０でＮをインクリメントして処理が続行する。ブロック１４５０で、信号発信で使用されるＣＰＵアドレスの値（Ｎ）がインクリメントされ、ブロック１４５５で、Ｎが構成のとり得る最高ＣＰＵアドレスよりも大きいか否かが判断される。Ｎが構成のとり得る最高ＣＰＵアドレスよりも大きくない場合、ブロック１４３０で、Ｎが、ＳＡＤＭＰプログラムが実行中の現在のＣＰＵ／スレッドを示しているか否かを判断して処理を続行する。Ｎが構成のとり得る最高ＣＰＵアドレスより大きい場合、ブロック１４６０でアーキテクテッド・レジスタ・コンテキスト復元およびダンプが完了している。
【００７７】
図１６について構成の１つのコアに関してのみ説明しているが、図１６の処理の流れ１４００は、複数のコアを含む構成のすべてのコアにわたる最大ＣＰＵアドレスに対して実行するように拡大可能であることがわかるであろう。ＭＴをサポートしていないＯＳまたはＭＴを認識するがＭＴを利用しないプログラムのためにダンプをサポートするように、構成において追加の調整を行うことができる。例えば、ＭＴ認識スタンドアロン・ダンプ・プログラムが構成から二次スレッドをダンプすることを試みないようにするために、構成にＭＴをサポートしないＯＳをロードする前にクリア・リセットを実行することができる。別の例として、構成に対してスタンドアロン・ダンプ・プログラムを実行する前に、ＭＴを認識するがＭＴを利用しないプログラムが、対応する最大スレッドＩＤゼロと共にＭＴ設定命令（order）を発行することができる。
【００７８】
技術的効果および利点には、シングル・スレッド動作モードとマルチスレッディング動作モードの両方をサポートするマルチスレッディング・コンピュータ・システムにおけるスレッド・コンテキスト復元が含まれる。マルチスレッディング・モード中に使用されるスレッド・コンテキストは、セーブすることができるが、シングル・スレッド・モードではアクセス不能なままであり、例えばスタンドアロン・ダンプ・プログラムがソフトウェア障害またはハードウェア障害に関する診断情報の収集に使用するために、マルチスレッディング・モードの再開時にそのスレッド・コンテキストを復元できる。
【００７９】
本明細書に記載のシステムは、ＭＴハードウェアを利用することを明示的に「選択」することをＯＳに要求することによって、ハードウェアの変動性をソフトウェアが軽減することができるようにする。ＯＳが実行環境のＭＴ性を把握する場合、ＯＳはコア当たりのスレッド密度を明示的に管理する能力を（ワークロード・ディスパッチ・パターンがあればその能力の限りで）有する。演算資源の利用が少ない場合でも、ＯＳは高スレッド密度を維持することを選択でき、それによって他のＭＴ実装形態に見られる総演算能力の変動性の多くを軽減することができる。高スレッド密度を維持する直接の結果として、トランザクション応答時間とビリング面の両方のばらつきをより少なくすることができる。
【００８０】
実施形態には、マルチスレッディング・コンピュータ・システムにおけるスレッド・コンテキスト復元のためのシステム、方法およびコンピュータ・プログラム製品が含まれる。一態様は、シングル・スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で切換え構成可能なコアを含む構成である。ＳＴモードは一次スレッドを扱い、ＭＴモードは一次スレッドとコアの共用資源上の１つまたは複数の二次スレッドとを扱う。マルチスレッディング機構が、構成の利用を制御して、ＭＴモードからＳＴモードへの切換えに基づいて１つまたは複数の二次スレッドを無効化することを含む方法を実行するように構成される。１つまたは複数の二次スレッドのプログラム・アクセス可能なレジスタ値およびプログラム・カウンタ値を含むスレッド・コンテキストに、プログラムを使用することができないようにする。構成の直前設定プログラム指定最大スレッドｉｄを判断するために、ＳＴモードで直前指定最大ＭＴレベルを問い合わせる。直前設定プログラム指定最大スレッドｉｄがＭＴを示していることに基づき、ａ）ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行することと、ｂ）再開されたＭＴモードになっていることに基づき１つまたは複数の二次スレッドのスレッド・コンテキストにアクセスすることとを実行することによって、１つまたは複数の二次スレッドのスレッド・コンテキストを取得する。
【００８１】
別の態様によると、構成においてスレッド・コンテキストを復元するためのコンピュータ実装方法が提供される。構成は、シングル・スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で切換え構成可能なコアを含み、ＳＴモードは一次スレッドを扱い、ＭＴモードは一次スレッドと、コアの共用資源上の１つまたは複数の二次スレッドとを扱う。この方法は、ＭＴモードからＳＴモードへの切換えに基づき１つまたは複数の二次スレッドを無効化することを含む。１つまたは複数の二次スレッドのプログラム・アクセス可能レジスタ値とプログラム・カウンタ値とを含むスレッド・コンテキストをプログラムが利用することができないようにする。構成の直前設定プログラム指定最大スレッドｉｄを判断するために、ＳＴモードで直前指定最大ＭＴレベルを問い合わせる。直前設定プログラム指定最大スレッドｉｄがＭＴモードを示していることに基づき、ａ）ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行することと、ｂ）再開されたＭＴモードになっていることに基づいて、１つまたは複数の二次スレッドのスレッド・コンテキストにアクセスすることとを実行することによって、１つまたは複数の二次スレッドのスレッド・コンテキストを取得する。
【００８２】
さらに他の態様は、構成においてスレッド・コンテキストを復元するためのコンピュータ・プログラム製品を含む。構成は、シングル・スレッド（ＳＴ）モードとマルチスレッディング（ＭＴ）モードとの間で切換え構成可能なコアを含み、ＳＴモードは一次スレッドを扱い、ＭＴモードは一次スレッドと、コアの共用資源上の１つまたは複数の二次スレッドとを扱う。このコンピュータ・プログラム製品は、プログラム命令が具現化されたコンピュータ可読記憶媒体を含み、このコンピュータ可読記憶媒体は信号ではない。プログラム命令は、処理回路に方法を実行させるように処理回路によって読取り可能である。この方法は、ＭＴモードからＳＴモードへの切換えに基づき、１つまたは複数の二次スレッドを無効化することを含む。１つまたは複数の二次スレッドのプログラム・アクセス可能レジスタ値およびプログラム・カウンタ値を含むスレッド・コンテキストに、プログラムを使用することができないようにする。構成の直前設定プログラム指定最大スレッドｉｄを判断するために、ＳＴモードで直前指定最大ＭＴレベルを問い合わせる。直前設定プログラム指定最大スレッドｉｄがＭＴを示していることに基づき、ａ）ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行することと、ｂ）再開されたＭＴモードになっていることに基づき１つまたは複数の二次スレッドのスレッド・コンテキストにアクセスすることとを実行することによって、１つまたは複数の二次スレッドのスレッド・コンテキストを取得する。
【００８３】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、ＭＴ設定命令（instruction）が、ＭＴ設定命令（order）と、ＭＴを示すプログラム指定最大スレッドｉｄとを含むシグナル・プロセッサ命令である形態を含むことができる。
【００８４】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、ＳＴモードへの切換えに基づいて、１つまたは複数の二次スレッドのスレッド・コンテキストをセーブすることを含むことができる。
【００８５】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、ＭＴモードからＳＴモードへの切換えが非クリア・リセット動作に基づいており、ＭＴモードを再開するためにＭＴ設定命令（instruction）を実行することと、１つまたは複数の二次スレッドのスレッド・コンテキストにアクセスすることとがスタンドアロン・ダンプ・プログラムによって行われる形態を含むことができる。
【００８６】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、ＭＴモードを再開するためにＭＴ設定命令（order）を発行する際に、スタンドアロン・ダンプ・プログラムが直前プログラム指定最大スレッドｉｄをプログラム指定最大スレッドｉｄとして指定する形態を含むことができる。
【００８７】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、ＭＴ認識スタンドアロン・ダンプ・プログラムが構成から二次スレッドのダンプを試みるのを防止するために、構成においてＭＴをサポートしないオペレーティング・システムをロードする前にクリア・リセットが実行される形態を含むことができる。
【００８８】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、構成のためにスタンドアロン・ダンプ・プログラムを実行する前に、ＭＴを認識するがＭＴを利用しないプログラムが、対応する最大スレッドｉｄゼロとともにＭＴ設定命令（order）を発行する形態を含むことができる。
【００８９】
上述の１つまたは複数の特徴に加えて、または代替として、さらに他の実施形態は、構成のクリア・リセットまたは非活動化が行われるまで直前プログラム指定最大スレッドｉｄが保持される形態を含むことができる。
【００９０】
本明細書で使用されている用語は、特定の実施形態を説明するためのみのものであり、本発明を限定することを意図したものではない。本明細書では、別に明記していない限り、単数形の「ａ」、「ａｎ」、および「ｔｈｅ」は複数形も含むことを意図している。また、本明細書で使用されている「ｃｏｍｐｒｉｓｅｓ（含む）」という用語または「ｃｏｍｐｒｉｓｉｎｇ（含む）」という用語あるいはその両方は、記載されている特徴、整数、ステップ、動作、要素、または構成要素あるいはこれらの組合せの存在を明記するものであるが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素またはこれらのグループあるいはこれらの組合せの存在を排除しないものと理解されたい。
【００９１】
添付の特許請求の範囲のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造体、材料、作用、および均等物は、具体的に請求されている他の請求要素と組み合わせて機能を実行するためのあらゆる構造体、材料または作用を含むことを意図している。本発明の説明は、例示および説明を目的として示されており、網羅的であることまたは開示の形態の本発明に限定することを意図したものではない。本発明の範囲および趣旨から逸脱することなく、当業者には多くの変更および変形が明らかとなるであろう。実施形態は、本発明の原理および実際の適用を最もよく説明するためと、企図された特定の用途に適するように様々な変更を加えた様々な実施形態のために当業者が本発明を理解することができるようにするために、選択され、説明されたものである。
【００９２】
本発明の様々な実施形態の説明は、例示を目的として示されたものであり、網羅的であること、または開示されている実施形態に限定されることを意図したものではない。記載されている実施形態の範囲および趣旨から逸脱することなく、多くの変更および変形が当業者には明らかとなるであろう。本明細書で使用されている用語は、本発明の原理、実際の適用、または市場に見られる技術の技術的改良を最もよく説明するため、または当業者が本明細書で開示されている実施形態を理解することができるようにするために選択されたものである。
【００９３】
図１７を参照すると、コンピュータ可読記憶媒体１５０２およびプログラム命令１５０４を含む一実施形態によるコンピュータ・プログラム製品１５００の概要が示されている。
【００９４】
本発明は、システム、方法またはコンピュータ・プログラム製品、あるいはこれらの組合せとすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるためのコンピュータ可読プログラム命令が格納されたコンピュータ可読記憶媒体（または複数のコンピュータ可読記憶媒体）を含むことができる。
【００９５】
コンピュータ可読記憶媒体は、命令実行装置が使用するための命令を保持または格納することができる有形の装置とすることができる。コンピュータ可読記憶媒体は、例えば電子記憶装置、磁気記憶装置、光記憶装置、電磁記憶装置、半導体記憶装置、またはこれらの任意の適切な組合せとすることができるが、これらには限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、以下のものが含まれる。すなわち、携帯型コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、携帯型コンパクト・ディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピィ・ディスク、パンチカードまたは命令が記録された溝内の凸状構造体などの機械的に符号化された装置、およびこれらの任意の適切な組合せなどがある。本明細書で使用されているコンピュータ可読記憶媒体とは、電波またはその他の自由に伝播する電磁波、導波路またはその他の伝送媒体を伝播する電磁波（例えば光ファイバ・ケーブルを通る光パルス）、または電線を介して伝送される電気信号など、それ自体が一時的な信号であるものと解釈すべきではない。
【００９６】
本明細書に記載のコンピュータ可読プログラム命令は、ネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、または無線ネットワークあるいはこれらの組合せを介して、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理装置に、または外部コンピュータまたは外部記憶装置にダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、交換機、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組合せを含むことができる。各コンピューティング／処理装置内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、ネットワークからコンピュータ可読プログラム命令を受け取り、それらのコンピュータ可読プログラム命令をそれぞれのコンピューティング／処理装置内のコンピュータ可読記憶媒体に格納するために転送する。
【００９７】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｓｍａｌｌｔａｌｋ(R)、Ｃ＋＋などのオブジェクト指向プログラミング言語および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードまたはオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、全体をユーザのコンピュータ上で、一部をユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部をユーザのコンピュータ上で一部をリモート・コンピュータ上で、あるいは全体をリモート・コンピュータまたはリモート・サーバ上で実行することができる。後者の場合、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続することができ、あるいは接続は（例えばインターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行ってもよい。ある実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路が、コンピュータ可読プログラム命令の状態情報を使用して電子回路をパーソナライズすることにより、コンピュータ可読プログラム命令を実行してもよい。
【００９８】
本明細書では本発明の態様について、本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品を示すフローチャート図またはブロック図あるいはその両方を参照しながら説明している。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組合せは、コンピュータ可読プログラム命令によって実装可能であることがわかるであろう。
【００９９】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行される命令がフローチャートまたはブロック図あるいはその両方のブロックに明記されている機能／作用を実装する手段を形成するように、汎用コンピュータ、専用コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに供給されて、マシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方のブロックに明記された機能／作用の態様を実装する命令を含む製造品を含むように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラマブル・データ処理装置、またはその他の装置あるいはこれらの組合せに対して特定の方式で機能するように指示するものであってもよい。
【０１００】
コンピュータ可読プログラム命令は、コンピュータ、その他のプログラマブル装置、またはその他の装置上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに明記されている機能／作用を実装するように、コンピュータ、その他のプログラマブル・データ処理装置、またはその他の装置にロードされ、コンピュータ、その他のプログラマブル装置またはその他の装置上で一連の動作ステップを実行させるものであってもよい。
【０１０１】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。なお、フローチャートまたはブロック図の各ブロックは、明記されている論理機能を実装するための１つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または一部を表す場合がある。ある代替実装形態では、ブロックに記載されている機能は図面に記載されている順序を入れ替えて行われてもよい。例えば、連続して示された２つのブロックは、実際には、必要な機能に応じて、実質的に同時に実行されてもよく、またはそれらのブロックは場合によっては逆の順序で実行されてもよい。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、および、ブロック図またはフローチャート図あるいはその両方のブロックの組合せは、明記された機能または作用を実行するかまたは専用ハードウェアとコンピュータ命令との組合せを実施する、専用ハードウェア・ベースのシステムによって実装することができることにも留意されたい。
【図１】
0006509246.tif 000003
【図２】
0006509246.tif 000004
【図３】
0006509246.tif 000005
【図４】
0006509246.tif 000006
【図５】
0006509246.tif 000007
【図６】
0006509246.tif 000008
【図７】
0006509246.tif 000009
【図８】
0006509246.tif 000010
【図９】
0006509246.tif 000011
【図１０】
0006509246.tif 000012
【図１１】
0006509246.tif 000013
【図１２】
0006509246.tif 000014
【図１３】
0006509246.tif 000015
【図１４】
0006509246.tif 000016
【図１５】
0006509246.tif 000017
【図１６】
0006509246.tif 000018
【図１７】
0006509246.tif 000019