(57)【特許請求の範囲】
【請求項１】
第１のスレッドと１組の残りのスレッドとを含む複数のスレッドをコンピュータ・プロセッサ・コア上で実行する方法であって、
解釈実行開始出口条件が存在すると判断することと、
前記コンピュータ・プロセッサ・コアが猶予期間内にあると判断することと、
前記第１のスレッドによって、前記１組の残りのスレッドのいずれにも合図することなく解釈実行開始出口同期ループに入ることと、
前記猶予期間が満了するかまたは前記残りのスレッドのそれぞれが対応する解釈実行開始出口同期ループに入るまで、前記第１のスレッドによって前記解釈実行開始出口同期ループに留まること
を含む方法。
【請求項２】
前記第１のスレッドが警告追跡割込みのために保留中であると判断することと、
前記第１のスレッドによって、警告追跡割込み保留条件を残りのスレッドのそれぞれに伝播することと、
前記第１のスレッドによって、前記コンピュータ・プロセッサ・コアを前記猶予期間に入らせることをさらに含む、請求項１に記載の方法。
【請求項３】
前記コンピュータ・プロセッサ・コアの前記猶予期間が満了したと判断することと、
前記第１のスレッドによって、前記猶予期間の満了に基づいて前記残りのスレッドのそれぞれに対して前記対応する解釈実行開始出口同期ループに移行するように合図することをさらに含む、請求項１に記載の方法。
【請求項４】
前記第１のスレッドのために待ち状態が保留中であると判断することと、
前記第１のスレッドのために警告追跡割込み保留条件が存在すると判断することと、
前記警告追跡割込み保留条件が存在するとの前記判断に基づいて、前記解釈実行開始出口同期ループに入ることをさらに含む、請求項１に記載の方法。
【請求項５】
前記警告追跡割込み保留条件が存在するとの前記判断に基づいて、警告追跡割込みを提示することなく、かつ前記残りのスレッドのそれぞれに合図することなく、前記解釈実行開始出口同期ループに入る、請求項４に記載の方法。
【請求項６】
前記第１のスレッドは前記複数のスレッドのうちの一次スレッドである、請求項１に記載の方法。
【請求項７】
コンピュータ・プロセッサ・コア上で実行される複数のスレッドのために待ち状態を実現する方法であって、
第１のスレッドと１組の残りのスレッドとを含む前記複数のスレッドによって命令ストリームを実行することと、
前記第１のスレッドが第１の待ち状態ループに入ったと判断することと、
前記残りのスレッドのいずれかが対応する待ち状態ループに入っていないと判断することと、
前記残りのスレッドのそれぞれが前記対応する待ち状態ループに入るまで、前記第１のスレッドによって前記第１の待ち状態ループに留まることと、
前記残りのスレッドのうちの１つから解釈実行開始出口要求信号を受け取ることに応答して前記第１の待ち状態ループから出ることを含む方法。
【請求項８】
第１のスレッドと１組の残りのスレッドとを含む複数のスレッドをプロセッサのコンピュータ・プロセッサ・コア上で実行するシステムであって、前記プロセッサとメモリとを含み、
前記プロセッサは、
解釈実行開始出口条件が存在すると判断し、
前記コンピュータ・プロセッサ・コアが猶予期間内にあると判断し、
前記第1のスレッドによって、前記１組の残りのスレッドのいずれにも合図することなく解釈実行開始出口同期ループに入り、
前記猶予期間が満了するかまたは前記残りのスレッドのそれぞれが対応する解釈実行開始出口同期ループに入るまで、前記第１のスレッドによって前記解釈実行開始出口同期ループに留まる
ように構成された、システム。
【請求項９】
前記プロセッサは、
前記第１のスレッドが警告追跡割込みのために保留中であると判断し、
前記第１のスレッドによって前記残りのスレッドのそれぞれに警告追跡割込み保留条件を伝播し、
前記第１のスレッドによって前記コンピュータ・プロセッサ・コアを前記猶予期間に入らせる
ようにさらに構成された、請求項８に記載のシステム。
【請求項１０】
前記プロセッサは、
前記コンピュータ・プロセッサ・コアの前記猶予期間が満了したと判断し、
前記猶予期間の満了に基づいて、前記第１のスレッドによって前記残りのスレッドのそれぞれに対して前記対応する解釈実行開始出口同期ループに移行するように合図する
ようにさらに構成された、請求項８に記載のシステム。
【請求項１１】
前記プロセッサは、
前記第１のスレッドについて待ち状態が保留中であると判断し、
前記第１のスレッドについて警告追跡割込み保留条件が存在すると判断し、
前記警告追跡割込み保留条件が存在するとの前記判断に基づいて、前記解釈実行開始出口同期ループに入る
ようにさらに構成された、請求項８に記載のシステム。
【請求項１２】
警告追跡割込みを提示することなく、かつ、前記残りのスレッドのそれぞれに合図することなく、前記警告追跡割込み保留条件が存在するとの前記判断に基づいて前記解釈実行開始出口同期ループに入る、請求項１１に記載のシステム。
【請求項１３】
前記第１のスレッドは前記複数のスレッドのうちの一次スレッドである、請求項８に記載のシステム。
【請求項１４】
プロセッサのコンピュータ・プロセッサ・コア上で実行される複数のスレッドのために待ち状態を実現するシステムであって、前記プロセッサとメモリとを含み、
前記プロセッサは、
第１のスレッドと１組の残りのスレッドとを含む前記複数のスレッドによって命令ストリームを実行し、
前記第１のスレッドが第１の待ち状態ループに入ったと判断し、
前記残りのスレッドのいずれかが対応する待ち状態ループに入っていないと判断し、
前記残りのスレッドのそれぞれが前記対応する待ち状態ループに入るまで、前記第１のスレッドによって前記第１の待ち状態ループに留まり、
前記残りのスレッドのうちの１つからの解釈実行開始出口要求信号を受け取ることに応答して前記第１の待ち状態ループから出るように構成された、システム。
【請求項１５】
請求項１〜７の何れか１項に記載の方法の各ステップをコンピュータに実行させる、コンピュータ・プログラム。
【請求項１６】
請求項１５に記載の前記コンピュータ・プログラムをコンピュータ可読記憶媒体に記録した、コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般には、マルチスレッド・プロセッサのための協調的SIE終了に関し、より詳細には、マルチスレッド環境における資源コストを削減するために、協調的SIE終了とともにマルチスレッド環境における待ち状態および警告追跡を提供することに関する。
【背景技術】
【０００２】
一般に、マルチスレッディングは単一のプロセッサ・コア内で並列動作可能なプロセッサ・スレッドの数を増加させる。マルチスレッディングは、単一のプロセッサ・コアのハードウェアのうち、その単一プロセッサ・コア上で実行されている他のプロセッサ・スレッドによって現在使用されていない部分を１つまたは複数のプロセッサ・スレッドに使用させることによって、この能力増加を実現する。例えば、第１のプロセッサ・スレッドにおいてキャッシュ・ミスまたはその他の遅延により生じる待ち時間中に、１つまたは複数の他のプロセッサ・スレッドがキャッシュ・ミス時に第１のプロセッサ・スレッドにディスパッチされたコア資源を利用することができ、それによってそれらのコア資源の利用効率を向上させることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
マルチスレッディングはハードウェアの節約を実現するが、ソフトウェア・レベルでは、別のスレッドの追加により、追加の別個のプロセッサ・コアを使用して能力増加を実現するのに必要なコストよりも多くの協調コストが消費される。多くの場合、ある特定のスケーリング比率が達成されると、単一のプロセッサ・コアで動作するか共用プロセッサ・コアで実行されるかを問わず、スレッド間でコア資源を調整するためのオーバーヘッドが相当な量となり、独立したプロセッサ・スレッドの利点を低減させる可能性があるか、または利点を上回る可能性すらある。従って発明が解決しようとする課題はマルチスレッド・プロセッサのための協調的SIE終了の効率改善の方法を提供することである。
【課題を解決するための手段】
【０００４】
本発明の一実施形態によると、第１のスレッドと１組の残りのスレッドとを含む複数のスレッドをコンピュータ・プロセッサ・コア上で実行する方法は、解釈実行開始出口条件が存在すると判断することと、コンピュータ・プロセッサ・コアが猶予期間内にあると判断することと、１組の残りのスレッドのいずれにも合図することなく第１のスレッドによって解釈実行開始出口同期ループに入ることと、猶予期間が満了するかまたは残りのスレッドがそれぞれ対応する解釈実行開始出口同期ループに入るまで、第１のスレッドによって解釈実行開始出口同期ループに留まることを含む。
【０００５】
本発明の技術により、その他の特徴および利点も実現される。本発明のその他の実施形態および態様が本明細書で詳細に記載されており、特許請求の範囲に記載の発明の一部とみなされる。その利点および特徴とともに本発明についてよりよく理解するために、本明細書の記載および図面を参照されたい。
【０００６】
本発明とみなされる対象物は、本明細書末尾にある特許請求の範囲で詳細に示され、明確に請求されている。本発明の上記およびその他の特徴および利点は、以下の詳細な説明を添付図面とともに読めば明らかになる。
【図面の簡単な説明】
【０００７】
【図１】マルチスレッディング・システムのコンピューティング・デバイスの概略を示す図である。
【図２】マルチスレッディング・システムのプロセッサの概略を示す図である。
【図３】待ち状態に関するマルチスレッディング・システムのプロセス・フローを示す図である。
【図４】待ち状態に関するマルチスレッディング・システムのプロセス・フローを示す図である。
【図５】コア・ディスパッチ環境における待ち状態に関するマルチスレッディング・システムの別のプロセス・フローを示す図である。
【図６】コア・ディスパッチ環境における待ち状態に関するマルチスレッディング・システムの別のプロセス・フローを示す図である。
【図７】コア・ディスパッチ環境における警告追跡に関するマルチスレッディング・システムのプロセス・フローを示す図である。
【図８】コア・ディスパッチ環境における警告追跡に関するマルチスレッディング・システムの別のプロセス・フローを示す図である。
【図９】コア・ディスパッチ環境における警告追跡に関するマルチスレッディング・システムの別のプロセス・フローを示す図である。
【図１０】コア・ディスパッチ環境における警告追跡に関するマルチスレッディング・システムの別のプロセス・フローを示す図である。
【発明を実施するための形態】
【０００８】
知られているように1983年のVM/XAとともにSIE（Start Interpretive Execution）がマイクロコードで実装された。VMはゲストで動く仮想マシンにディスパッチするときにSIE命令を使用する。この命令以降は仮想マシンでの実行はSIE命令の一部として実行される。これによりVMによる仮想化オーバーヘッドを劇的に減らすことができた。しかしながら上記のように、マルチスレッディングにおけるプロセッサ・スレッド間の協調コストは相当なものであり、独立したプロセッサ・スレッドの利点を低減する可能性があるか、または上回る可能性すらある。従って、マルチスレッド環境における資源コストを低減するために、協調的SIE終了とともに待ち状態および警告追跡を提供するマルチスレッド環境が必要である。
【０００９】
一般に、本明細書で開示する本発明の実施形態は、コアの資源コストを低減するために、ソフトウェアを使用してコア上のインフラストラクチャを細粒度スレッド単位で効率的に管理する、マルチスレッディング・システム、方法またはコンピュータ・プログラム製品あるいはそれらの組合せを含み得る。これは、協調的SIE終了とともに待ち状態と警告追跡とを使用するとともに、単一のスレッド上で動作するハイパーバイザがコア・ディスパッチを使用して単一コア上の複数のゲスト・スレッドをディスパッチすることができるようにすることによって達成される。
【００１０】
次に、マルチスレッディング・システム、方法またはコンピュータ・プログラムあるはこれらの組合せ（「マルチスレッディング・システム」）による、協調的解釈実行開始（Ｓｔａｒｔ  Ｉｎｔｅｒｐｒｅｔｉｖｅ  Ｅｘｅｃｕｔｉｏｎ「ＳＩＥ」）出口を使用したコア・ディスパッチについて説明する。即ち、マルチスレッディング・システムはコア・ディスパッチを介して、単一スレッドを実行しているハイパーバイザが単一の命令を使用してそのコア上でマルチスレッド・ゲストをディスパッチすることができるようにする（なお、各マルチスレッド・ゲストは、ゲスト論理プロセッサまたはゲスト・スレッドを表す）。単一命令のオペランドは、すべてのゲスト・スレッドの状態を含む単一の状態記述、または、例えばそれぞれが単一のゲスト・スレッドの状態を表す状態記述のグループを指定することができる。また、コア・ディスパッチの使用をサポートするためと、単一スレッドを実行するハイパーバイザを考慮して、マルチスレッディング・システムによって協調的ＳＩＥ出口が提供されて、すべてのゲスト・スレッドが同時に終了することができるようにする。
【００１１】
例えば、ゲスト・コアの各スレッドが解釈実行モードを終了する必要があると判断すると、そのスレッドはＳＩＥ出口状態となり、同じコアの他のすべての有効スレッドも終了する準備が整うまで、最初のＳＩＥ出口同期ループで待機する。場合によっては、各スレッドは、この同期ループに入る前に他のスレッドに対して終了するように合図する。
【００１２】
次に、マルチスレッディング・システムの非マルチスレッド環境またはマルチスレッド環境あるいはその両方の環境での待ち状態について説明する。非マルチスレッド環境については、ゲスト・スレッドが待ち行列上のタスクを完了し、待ち行列上に追加のタスクがない場合、マルチスレッディング・システムは待ち状態コードまたはビットをプログラム状況ワード（「ＰＳＷ」）にロードする。ＰＳＷ内の待ち状態ビットによって、ゲスト・スレッドは割込みが提示されるまで命令実行を中止する。ゲスト・スレッドが専用非マルチスレッド環境（例えば、物理プロセッサが単一のゲスト・スレッドによる使用専用である）で実行中であり、その単一のゲスト・スレッドが割込み可能（即ち、ゲストが非同期割込み可能にされた）待ち状態になった場合、その単一のゲスト・スレッドは、割込みが認識されるまで物理プロセッサ上でディスパッチされたままとなる。ゲスト・スレッドが共用環境（即ち、物理プロセッサが異なるゲスト論理プロセッサ間で共用されている）で実行されている場合、ゲスト・スレッドが待ち状態になると、該当する場合にはハイパーバイザが、実行する作業を有する異なるゲスト・スレッドをディスパッチすることができるように、待ち状態インターセプションにより共用環境は解釈実行を終了する。
【００１３】
マルチスレッド環境に関しては、コア上のゲスト・スレッドが依然としてゲスト命令を実行している場合、コア上のすべての有効スレッドが待ち状態になるかまたは別の理由で協調的ＳＩＥ出口が必要になるまで、コアが動作し続ければより効率的である。また、割込み可能待ち状態のスレッドはファームウェア待ち状態ループに入り、他のすべてのスレッドが待ち状態になる前にそのスレッドに割込みが提示された場合、そのスレッドはその割込みを処理することができ、ファームウェア待ち状態ループから出ることができる（例えば、割込みには、別のスレッドによる協調的ＳＩＥ出口の要求が含まれる）。
【００１４】
次に図１を参照すると、コンピューティング・デバイス１１２を含むマルチスレッディング・システム１００の例が示されている。マルチスレッディング・システム１００は、適合するコンピューティング・ノードの一例に過ぎず、本明細書に記載の発明の実施形態の使用または運用性の範囲について制限を示唆することを意図したものではない（実際に、追加または代替構成要素または実装形態あるいはその両方を使用することができる）。即ち、マルチスレッディング・システム１００およびその要素は、多くの異なる形態をとることができ、複数または代替あるいはその両方の構成要素および機構を含み得る。また、マルチスレッディング・システム１００は、本明細書に記載されているように様々な通信技術を利用する任意の数および組合せのコンピューティング・デバイスおよびネットワークを含むかまたは採用することができ、あるいはその両方とすることができる。それにもかかわらず、マルチスレッディング・システム１００は、実装可能であるかまたは本明細書に記載の運用性のいずれかを実行することが可能であるか、あるいはその両方である。
【００１５】
マルチスレッディング・システム１００内には、他の多くの汎用または専用コンピューティング・システム環境または構成とともに動作可能なコンピューティング・デバイス１１２がある。マルチスレッディング・システム１００またはコンピューティング・デバイス１１２あるいはその両方などのシステムまたはコンピューティング・デバイスあるいはその両方は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって流通されているＡＩＸ  ＵＮＩＸ（Ｒ）およびｚ／ＯＳオペレーティング・システム、マイクロソフト・ウィンドウズ（Ｒ）（Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（Ｒ））オペレーティング・システム、Ｕｎｉｘ（Ｒ）オペレーティング・システム（例えば米国カリフォルニア州レッドウッドショアーズのオラクル・コーポレーションによって流通されているソラリス（Ｓｏｌａｒｉｓ）オペレーティング・システム）、Ｌｉｎｕｘオペレーティング・システム、米国カリフォルニア州クパティーノのアップル社によって流通されているＭａｃ  ＯＳ  ＸおよびｉＯＳオペレーティング・システム、カナダ国ウォータールーのリサーチ・イン・モーションによって流通されているブラックベリー（ＢｌａｃｋＢｅｒｒｙ）ＯＳ、およびオープン・ハンドセット・アライアンスによって開発されたアンドロイド（Ａｎｄｒｏｉｄ）オペレーティング・システムの様々なバージョンまたは種類あるいはその両方を含むがこれらには決して限定されない、いくつかのコンピュータ・オペレーティング・システムのうちの任意のオペレーティング・システムを採用することができる。コンピューティング・デバイス１１２とともに使用するのに適合すると考えられるコンピューティング・システム、環境または構成あるいはこれらの組合せの例としては、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラマブル民生電子機器、ネットワークＰＣ、ミニコンピュータ・システム、コンピュータ・ワークステーション、サーバ、デスクトップ、ノートブック、ネットワーク・デバイス、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのいずれかを含む分散クラウド・コンピューティング環境などが含まれるがこれらには限定されない。
【００１６】
コンピューティング・デバイス１１２については、コンピュータ・システムによって実行されるプログラム・モジュールなどのコンピュータ・システム実行可能命令の一般の文脈で説明することができる。一般に、プログラム・モジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピューティング・デバイス１１２は、通信ネットワークを介して接続されているリモート処理デバイスによってタスクが実行される分散クラウド・コンピューティング環境で実施されてもよい。分散クラウド・コンピューティング環境では、プログラム・モジュールはメモリ・ストレージ・デバイスを含むローカルとリモートの両方のコンピュータ・システム記憶媒体に収容され得る。
【００１７】
図１に示すように、マルチスレッディング・システム１００におけるコンピューティング・デバイス１１２は、マルチスレッディング・システム１００、その方法または要素あるいはそれらの組合せの動作および機能に基づいて改良される汎用コンピューティング・デバイスの形で示されている。コンピューティング・デバイス１１２の構成要素には、１つまたは複数のプロセッサまたは処理ユニット（例えば複数のスレッド１１５をサポートする少なくとも１つのコア１１４ａを含むプロセッサ１１４、例えば２つ以上のスレッド１１５を含むプロセッサ１１４のコア１１４ａを含むマルチスレッディング・システム１００）と、メモリ１１６と、プロセッサ１１４およびメモリ１１６を含む様々なシステム構成要素を結合するバス１１８とが含まれることがあるがこれらには限定されない。コンピューティング・デバイス１１２は、典型的には、様々なコンピュータ・システム可読媒体も含む。そのような媒体は、コンピューティング・デバイス１１２がアクセス可能な任意の入手可能な媒体とすることができ、揮発性媒体と不揮発性媒体の両方、取り外し可能と取り外し不能媒体の両方を含む。
【００１８】
プロセッサ１１４は、メモリ１１６からコンピュータ可読プログラム命令を受け取ると、それらの命令を実行することによって、マルチスレッディング・システム１００によって定義された１つまたは複数のプロセスを実行することができる。プロセッサ１１４は、算術演算、論理演算または入出力演算あるいはこれらの組合せを実行することによってコンピュータ可読プログラム命令を実行する、コンピューティング・デバイス１１２によって使用される任意の処理ハードウェア、ソフトウェア、またはハードウェアとソフトウェアとの組合せを含み得る。プロセッサ１１４およびコア１１４ａの例としては、算術演算および論理演算を実行する算術論理演算ユニット、メモリから命令を取り出し、復号し、実行する制御ユニット、および複数の並列コンピューティング要素を使用するアレイ・ユニットが含まれるがこれらには限定されない。
【００１９】
図２に、コントローラ２１５に結合されたプロセッサ１１４を含むコンピューティング環境の実施形態を示す。一例では、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づくコンピューティング環境が、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるＳｙｓｔｅｍ  ｚサーバを含む。プロセッサ１１４は、例えば、１つまたは複数の区画（例えば論理区画ＬＰ１ないしＬＰｎ）と、１つまたは複数の物理コア（例えばコア１ないしコアｍ）と、レベル０ハイパーバイザ２１４（例えば論理区画マネージャ）とを含むことができる。コントローラ２１５は、要求を出す異なるプロセッサ間のアービトレーションを司る集中ロジックを含むことができる。例えば、コントローラ２１５がメモリ・アクセス要求を受け取ると、コントローラ２１５はその記憶場所へのアクセスが許可されているか否かを判断し、許可されている場合は、その記憶場所の内容をプロセッサ１１４に提供すると同時に、そのコンプレックス内のプロセッサ間のメモリ整合性を維持する。別のコントローラ２１５が、図１に示すＩ／Ｏインターフェース１３０またはネットワーク・アダプタ１３２あるいはその両方との間での要求を管理してもよい。
【００２０】
物理コアは、論理区画に割り当てられた物理プロセッサ資源を含む。論理区画は、１つまたは複数の論理プロセッサを含むことができ、各論理プロセッサはその区画に割り当てられた物理プロセッサ資源のすべてまたは割当て分を表す。物理コアは、基礎をなすコアの物理プロセッサ資源がその区画のために確保されるように特定の区画の論理コア専用とされるか、または、基礎をなすコア資源の物理プロセッサ資源が別の区画にとって利用可能となり得るように、別の区画の論理コアと共用されてもよい。各論理区画は、別個のシステムとして機能可能とすることができる。即ち、各論理区画は独立してリセットすることができ、望ましい場合は、最初にオペレーティング・システム（例えばオペレーティング・システムＯＳ１ないしＯＳｎ）をロードすることができ、異なるプログラムとともに動作することができる。論理区画で動作するオペレーティング・システムまたはアプリケーション・プログラムは、全システムにアクセスすることができるように見える場合があるが、実際には利用可能なのはシステム全体の一部のみである。ハードウェアとライセンス内部コード（Ｌｉｃｅｎｓｅｄ  Ｉｎｔｅｒｎａｌ  Ｃｏｄｅ）（ファームウェア、マイクロコードまたはミリコードとも呼ばれる）との組合せが、１つの論理区画内のプログラムが異なる論理区画内のプログラムを見たり、このプログラムにアクセスしたり、干渉したりするのを防止する。これによって、いくつかの異なる論理区画が単一または複数の物理コア上でタイム・スライス方式により動作することが可能になる。一実施形態では、各物理コアは１つまたは複数の中央プロセッサ（本明細書では「物理スレッド」とも呼ぶ）を含む。図２に示す例では、各論理区画は常駐オペレーティング・システムを有し、常駐オペレーティング・システムは１つまたは複数の論理区画ごとに異なっていてもよい。各論理区画は、オペレーティング・システムが動作可能な仮想マシンまたはゲスト構成の例である。
【００２１】
図２に示す実施形態では、論理区画ＬＰ１ないしＬＰｎは、物理コアであるコア１ないしコアｍ上で動作するファームウェアによって実装されるレベル０ハイパーバイザ２１４によって管理される。論理区画ＬＰ１ないしＬＰｎおよびハイパーバイザ２１４はそれぞれ、物理コアであるコア１ないしコアｍに関連付けられた中央ストレージ（メモリ）のそれぞれの部分に存在する１つまたは複数のプログラムを含む。ハイパーバイザ２１４の一例は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるプロセッサ資源／システム管理機構（Ｐｒｏｃｅｓｓｏｒ  Ｒｅｓｏｕｒｃｅ／Ｓｙｓｔｅｍｓ  Ｍａｎａｇｅｒ：ＰＲ／ＳＭ（商標））である。
【００２２】
図１に戻ると、メモリ１１６は、コンピューティング・デバイス１１２のプロセッサ１１４による使用のためにマルチスレッディング・システム１００によって提供されるコンピュータ可読プログラム命令を保持し、記憶する、有形のデバイスを含み得る。メモリ１１６は、ランダム・アクセス・メモリ（ＲＡＭ）１２０、キャッシュ・メモリ１２２またはストレージ・システム１２４あるいはこれらの組合せなどの揮発性メモリの形態のコンピュータ・システム可読媒体を含み得る。バス１１８は、様々なバス・アーキテクチャのいずれかを使用する、メモリ・バスまたはメモリ・コントローラ、周辺機器用バス、アクセラレーテッド・グラフィクス・ポート、およびプロセッサ・バスまたはローカル・バスを含む、いくつかの種類のバス構造のうちのいずれか１つまたは複数のバス構造を表す。例として、そのようなアーキテクチャは、インダストリアル・スタンダード・アーキテクチャ（Ｉｎｄｕｓｔｒｉａｌ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ：ＩＳＡ）バス、マイクロ・チャネル・アーキテクチャ（Ｍｉｃｒｏ  ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ：ＭＣＡ）バス、エンハンストＩＳＡ（ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ：ＶＥＳＡ）ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バスを含むが、これらには限定されない。
【００２３】
一例に過ぎないが、ストレージ・システム１２４は、取り外し不能不揮発性磁気媒体（図示せず。典型的には「ハード・ドライブ」と呼ばれる）との間での読み書きのために設けることができる。図示されていないが、取り外し可能不揮発性磁気ディスク（例えば「フロッピー（Ｒ）・ディスク」）との間での読み書きのための磁気ディスク・ドライブ、および、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭまたはその他の光媒体などの取り外し可能不揮発性光ディスクとの間での読み書きのための光ディスク・ドライブを設けることができる。そのような場合、１つまたは複数のデータ媒体インターフェースによってそれぞれをバス１１８に接続することができる。以下でさらに図示し、説明するように、メモリ１１６は、本発明の実施形態の動作を実行するように構成された１組（例えば少なくとも１つ）のプログラム・モジュールを有する少なくとも１つのプログラム製品を含むことができる。ストレージ・システム１２４（またはメモリ１１６あるいはその両方）は、データベース、データ・リポジトリまたはその他のデータ・ストアを含むことができ、階層データベース、ファイル・システムにおける１組のファイル、プロプライエタリ形式のアプリケーション・データベース、リレーショナル・データベース・マネージメント・システム（ＲＤＢＭＳ）などを含む様々な種類のデータの記憶、このデータへのアクセス、およびこのデータの取出しのための様々な種類の機構を含み得る。ストレージ・システム１２４は、一般には、例示のように、上記のもののうちの１つなどのコンピュータ・オペレーティング・システムを採用するコンピューティング・デバイス１１２内に含めることができ、様々な方式のうちの１つまたは複数でネットワークを介してアクセスされる。
【００２４】
１組（少なくとも１つ）のプログラム・モジュール１２８を有するプログラム／ユーティリティ１２６を、例えば、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データとともにメモリ１１６に記憶することができるが、これには限定されない。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データまたはこれらの何らかの組合せのそれぞれは、ネットワーク環境の実装形態を含み得る。
【００２５】
コンピューティング・デバイス１１２は、入出力（Ｉ／Ｏ）インターフェース１３０またはネットワーク・アダプタ１３２あるいはその両方を介して通信することもできる。Ｉ／Ｏインターフェース１３０またはネットワーク・アダプタ１３２あるいはその両方は、コンピューティング・デバイス１１２によって、コンピューティング・デバイス１１２の内部または外部あるいはその両方の要素間で通信するために使用される物理または仮想あるいはその両方の機構を含み得る。例えば、Ｉ／Ｏインターフェース１３０は、キーボード、ポインティング・デバイス、ディスプレイ１４２などの１つまたは複数の外部デバイス１４０、またはユーザがコンピューティング・デバイス１１２と対話することができるようにする１つまたは複数のデバイス、またはコンピューティング・デバイス１１２が１つまたは複数の他のコンピューティング・デバイスと通信することができるようにする任意のデバイス（例えばネットワーク・カード、モデムなど）あるいはこれらの組合せと通信することができる。また、コンピューティング・デバイス１１２は、ネットワーク・アダプタ１３２を介して、ローカル・エリア・ネットワーク（ＬＡＮ）、または一般のワイド・エリア・ネットワーク（ＷＡＮ）、またはパブリック・ネットワーク（例えばインターネット）あるいはこれらの組合せなどの１つまたは複数のネットワークと通信することができる。従って、Ｉ／Ｏインターフェース１３０またはネットワーク・アダプタ１３２あるいはその両方は、コンピューティング・デバイス１１２内で、またはコンピューティング・デバイス１１２のために、信号またはデータを受信または送信するように構成され得る。図のように、Ｉ／Ｏインターフェース１３０およびネットワーク・アダプタ１３２は、バス１１８を介してコンピューティング・デバイス１１２の他の構成要素と通信する。なお、図示はされていないが、他のハードウェアまたはソフトウェアあるいはその両方の構成要素をコンピューティング・デバイス１１２とともに使用し得ることを理解されたい。例としては、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイバル・ストレージ・システムなどがあるがこれらには限定されない。
【００２６】
図１によって、マルチスレッディング・システム１００のための単一アイテム（およびその他のアイテム）を示しているが、これらの表現は限定的であることを意図したものではなく、従って任意のアイテムが複数のアイテムを表現し得る。例えば、プロセッサ１１４は、それぞれの処理コアが複数のスレッドを実行し、本明細書に記載の協調的ＳＩＥ出口を処理することが可能な複数の処理コアを含んでもよい。
【００２７】
待ち状態および協調的ＳＩＥ出口に関するプロセス・フロー３００の一例を示す図３ないし図４を参照しながら、マルチスレッディング・システムについて説明する。
【００２８】
図のように、このプロセス・フロー３００は、複数のスレッド、例えばスレッドＸ、スレッドＹおよびスレッドＺによって実行される。ブロック３１０、３１２および３１４で、スレッドＸ（例えば一次スレッド）が、ゲスト命令を実行し、割込み可能待ち状態ＰＳＷをロードし、ファームウェア待ち状態ループに入る。スレッドＹおよびスレッドＺ（例えば二次スレッド）が両方ともまだゲスト命令ストリームを実行中であるため（例えばブロック３３０、３４０）、スレッドＸはこの時点ではＳＩＥを終了しない。ブロック３１６でゲスト非同期割込みが保留になるまで、スレッドＸは、ファームウェア待ち状態ループに留まる。ブロック３１８で、ゲスト非同期割込みによってスレッドＸは待ち状態ループを出て、ファームウェア非同期割込みハンドラに入る。ファームウェア非同期割込みハンドラは、割込み旧ＰＳＷと割込み情報とをゲスト・メモリの最初のブロックにある固定記憶場所に保存し、ゲスト割込み新ＰＳＷをハードウェアにロードする。次に、ブロック３２０で、スレッドＸはゲスト・ソフトウェア割込みハンドラの実行を開始する。スレッドＸがソフトウェア割込みハンドラの実行を完了すると、ブロック３２２でゲスト・オペレーティング・システムが割込み可能待ちＰＳＷを再ロードし、これによって再びファームウェア待ち状態ループを呼び出し／ファームウェア待ち状態ループに入る。
【００２９】
一方、スレッドＹは独立して、ブロック３３０でゲスト命令を実行し、ブロック３３２で割込み可能待ち状態ＰＳＷをロードし、ブロック３３４でファームウェア待ち状態ループに入る。同様に、スレッドＺは独立して、ブロック３４０でゲスト命令を実行し、ブロック３４２で割込み可能待ち状態ＰＳＷをロードし、ブロック３４４でファームウェア待ち状態ループに入る。即ち、各スレッドＹ、Ｚは、それぞれのイベントが独立して発生するように、それぞれの時間Ｙ１、Ｚ１後に、対応する割込み可能待ち状態ＰＳＷをロードする（ブロック３３２、３３４）。また、各スレッドＹ、Ｚは、それぞれのイベントが独立して発生するように、それぞれの時間Ｙ２、Ｚ２後に、対応するファームウェア待ち状態ＰＳＷに入る（ブロック３３４、３４４）。ブロック３５０で、スレッドＸは、コアのすべての有効スレッド（例えばスレッドＸ、Ｙ、Ｚ）がこの時点で待ち状態になったと判断し、待ち状態インターセプションのためにＳＩＥ出口を呼び出す。次に、ライン３５２でスレッドＸは最初のＳＩＥ出口同期点に達し、この同期点により、スレッドＸはブロック３５４に示すようにスレッドＹ、Ｚに対して内部割込み機構を使用してＳＩＥを終了するように合図する。すべてのスレッドが待ち状態であることを検出し、他のスレッドにＳＩＥを終了するように合図するこのプロセスは、任意のスレッドが行うことができ、典型的には最後に待ち状態になるスレッドによって行われる。
【００３０】
ブロック３５４から内部割込み信号を受け取ると、スレッドＹおよびＺは独立して終了する。即ち、（ブロック３５６および３５８に示すように）スレッドＹおよびＺは独立して、ＳＩＥ出口要求のためにそれぞれのファームウェア待ち状態ループを出て、内部割込みを処理し、ＳＩＥ出口を呼び出す。最後に、スレッドＹおよびＺは、（ライン３６２、３６４で）最初のＳＩＥ出口同期ループに達する。すべての有効スレッド（例えばスレッドＸ、Ｙ、Ｚ）が最初の同期点に達すると（ライン３６６）、各スレッドは独立してそれぞれの状態記述の更新を終了し、待ち状態インターセプションを示す（例えばブロック３７０、３７２、３７４）。各スレッド（例えばスレッドＹ、Ｚ）がその状態記述の更新を終了すると、そのスレッドはハードウェア制御ビットを設定する。詳細には、ブロック３８２で、スレッドＹが、最後のＳＩＥ出口同期点に達したことを示すためと、命令実行を停止するために、ハードウェア制御ビットを設定する。同様に、ブロック３８４で、スレッドＺが最後のＳＩＥ出口同期点に達したことを示すためと、命令実行を停止するために、ハードウェア制御ビットを設定する。次に、ブロック３９０で、スレッドＸ（例えば一次スレッド）は、すべてのスレッドがすべての状態記述更新を終了したことを意味する、すべてのスレッドＹ、Ｚの最後の同期点への到達を待ち、協調的ＳＩＥ出口を完了する。最後に、ブロック３９２で、スレッドＸは次に、マルチスレッドＳＩＥインターセプションをホストに提示し、ホストはそのマルチスレッドＳＩＥインターセプションを処理する。
【００３１】
待ち状態および協調的ＳＩＥ出口に関するマルチスレッディング・システムの別の例として、図５ないし図６を参照しながらプロセス・フロー４００について説明する。プロセス・フロー３００と同様に、プロセス・フロー４００は、複数のスレッド、例えばスレッドＸ、スレッドＹ、およびスレッドＺによって実行される。プロセス・フロー４００を開始するために、スレッドＸは、ブロック４１０、４１２および４１４で、ゲスト命令を実行し、割込み可能待ち状態ＰＳＷをロードし、ファームウェア待ち状態ループに入る。スレッドＹおよびスレッドＺもゲスト命令を実行し、それによってスレッドＸはＳＩＥ出口を呼び出さずに待ち状態ループに留まる。
【００３２】
さらに、ブロック４３２で、スレッドＸは依然としてファームウェア待ち状態ループにあるが、スレッドＺは、タイプＮインターセプションのためにＳＩＥ出口を呼び出させる何かを実行する。ライン４３４で、スレッドＺが最初のＳＩＥ出口同期点に達し、このＳＩＥ出口同期点が、他のスレッドに対応する内部割込み機構を使用してＳＩＥを終了させる合図となる（例えばブロック４３６）。これに応答して、スレッドＸはブロック４４０で、ＳＩＥ出口要求のためのファームウェア待ち状態ループを出て、ＳＩＥ出口のためのファームウェア割込みハンドラに入り、ＳＩＥ出口を呼び出す。従って、スレッドＸはライン４４２で最初のＳＩＥ出口同期点に達する。次に、ブロック４４４で、スレッドＸにおいてゲスト非同期割込みが保留になるが、このスレッドはすでにＳＩＥ出口であるため、この割込みは提示されない。ブロック４５０で、スレッドＹが割込み可能点に達すると、ＳＩＥ出口要求のための内部割込みを行い、ＳＩＥ出口を呼び出す。次に、スレッドＹはブロック４５２で最初のＳＩＥ出口同期ループに達する。
【００３３】
すべての有効スレッド（例えばスレッドＸ、Ｙ、Ｚ）が最初の同期点に達すると（例えばライン４６０）、各スレッドが独立してそれぞれの状態記述の更新を終了し、適切なインターセプションを示す（例えばブロック４７０、４７２、４７４）。例えば、スレッドＸは、ブロック４７０で、ＰＳＷビット１４が１であるため、待ち状態インターセプションを行う。スレッドＹは、ブロック４７２でアクションなしインターセプションを行い、スレッドＺはブロック４７４で元のタイプＮインターセプションを行う。上述のプロセス・フロー３００で説明したように、この例では各スレッドＹおよびＺがそのすべての状態記述更新を終了すると、そのスレッドは最後のＳＩＥ出口同期点に達し、そのスレッドの命令実行を停止する（４７２、４７４）。例えば、ブロック４８２、４８４で、スレッドＹおよびＺは、最後のＳＩＥ出口同期点に達したことを示すためと、命令実行を停止するために、ハードウェア制御ビットを設定する。次に、ブロック４９０で、スレッドＸは、すべてのスレッドがすべての状態記述更新を終了したことを意味する、すべてのスレッドの最後の同期点への到達を待ち、協調的ＳＩＥ出口を完了する。最後に、ブロック４９２でスレッドＸは次に、マルチスレッドＳＩＥインターセプションをホストに提示し、ホストがそのマルチスレッドＳＩＥインターセプションを処理する。
【００３４】
例えば、非マルチスレッディング・ゲスト・オペレーティング・システムには、警告追跡割込みを介して、そのタイム・スライスがまもなく満了することを通知してもよい。ハイパーバイザは、ホストＣＰＵタイマを使用して１つのゲスト・プロセッサ・コアのタイム・スライスが満了した時点を判断し、別のゲスト・コアがそのコアのタイム・スライスを開始することができるようにする。さらに、ハイパーバイザは、ターゲット状態記述にビットを設定することによって、別のプロセッサからリモートで、警告追跡割込みをゲスト論理コアに提示する必要があることを示すことができる。猶予期間がアクティブでない間にホスト・タイマ割込みが保留中であることをマシンが検出した場合、または、状態記述で警告追跡割込みが保留中であることをマシンが検出した場合、そのマシンは猶予期間に入る。猶予期間は、タイム・スライスに最小の追加時間を加えることによって実現され、割込み可能にされると警告追跡割込みを介してゲスト・オペレーティング・システムにそのオペレーティング・システムのタイム・スライスがまもなく満了することを通知する。この追加の時間によって、警告追跡割込み認識ゲストは、プロセッサから撤収させる前に適切なアクション（しばしば「クリーンアップ」と呼ばれる）をとることができる。このようなアクションには、例えば、システム・レベルのロックを解除することが含まれ得る。ゲストがそのクリーンアップを完了すると、ゲストは診断肯定応答を発行することによってその完了を通知する必要がある（例えば、ゲストは、警告追跡肯定応答を示すコード「０４９Ｃ」を使用してＤＩＡＧＮＯＳＥ（診断）命令を実行する）。猶予期間が満了する前にＤＩＡＧ「０４９Ｃ」警告追跡割込み肯定応答が発行された場合、システムは命令インターセプションによってインターセプトしてハイパーバイザに戻し、ハイパーバイザはそれをタイム・スライスの終わりとして処理する。上記と異なり、ゲスト・オペレーティング・システムがＤＩＡＧ「０４９Ｃ」警告追跡割込み肯定応答を発行する前に猶予期間が満了する場合、ホスト・タイマ割込みが提示され、ハイパーバイザがタイム・スライスの終わりを処理する。
【００３５】
次に、マルチスレッディング・システムで実行される警告追跡割込み（「ＷＴＩ」）処理について説明する。ゲストにおいてマルチスレッディングがアクティブである場合、ハイパーバイザがコア単位でゲスト・タイム・スライスを管理する。単一のホスト・タイマがあり、それに関連付けられた割込みによって、コアにおけるすべてのスレッドについてゲスト・タイム・スライスが終了した時点が示される。また、ハイパーバイザが一次状態記述でＷＴＩを保留にする場合、二次状態記述においてＷＴＩ割込みを保留にするのはマルチスレッディング・システムの分担である。ホスト・タイマ割込みが発生するか、または一次状態記述で保留ＷＴＩが検出されると、コアは猶予期間に入る。その結果のＷＴＩ割込みは保留状態のままとされ、割込み可能にされるとそれぞれの有効ゲスト・スレッドで別々に提示される。上述のように、適切な場合には、割込み可能待ちをロードするゲストはファームウェア待ち状態ループに入る。しかし、猶予期間がアクティブである場合、または割込み可能待ち状態がロードされるときにＷＴＩが保留中である場合、ゲストはファームウェア待ち状態ループではなくＳＩＥ出口同期ループに入る。この２つのループの違いは、待ち状態ループが保留割込みを処理し、それによってＳＩＥ出口を完了するのに要する時間が長くなる可能性があり、ＷＴＩに応じた望ましい結果とは正反対の結果になる可能性があることである。
【００３６】
ＷＴＩおよびコア・ディスパッチに関するプロセス・フロー５００の一例を示す図５を参照しながら、マルチスレッディング・システムについて説明する。図のように、プロセス・フロー５００には、警告追跡の観点からホスト・プロセッサ・タイマ（「ＣＰＴ」）割込みの処理が記載されている。ＣＰＴが保留になり、その割込みを行うためにホストが割込み可能にされた場合、その割込みを処理するためにファームウェアが呼び出される。即ち、プロセス・フロー５００は、決定ブロック５０２で、プロセッサ・コアがホスト・モードで動作しているか否かを調べる。コアがホスト・モードで動作している場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー５００はブロック５０４に進み、ホストＣＰＴ割込みが提示される。コアがホスト・モードで動作していない場合（例えば「Ｎ」矢印で示すように）、コアはゲスト・モードで動作しており、プロセス・フロー５００は決定ブロック５０６に進む。
【００３７】
決定ブロック５０６で、プロセス・フロー５００は猶予期間がアクティブであるかを調べる。猶予期間がまだ進行中でない場合、プロセス・フロー５００は（例えば「Ｎ」矢印で示すように）移行して、決定ブロック５０８でこのゲストについて警告追跡がサポートされているか判断する。警告追跡がサポートされている場合、プロセス・フロー５００は（例えば「Ｙ」矢印で示すように）ブロック５１０に進み、状態記述内に存在し、このコアの一次状態記述において警告追跡要求が保留中であることを示す、Ｔビットを設定する。それ以外の場合、猶予期間が進行中でないか、または警告追跡がサポートされていないか、あるいはその両方である場合、プロセス・フロー５００はブロック５１２に進む。ブロック５１２で、ＳＩＥ出口が呼び出され、従ってホストＣＰＴ割込みをホストに提示することができ、ゲスト・マルチスレッド・モードで、他のスレッドはＳＩＥを終了するように合図される。この動作は、ＭＴ環境ではホストＣＰＴ割込みが提示されると他のスレッドがＳＩＥを終了するように合図される点を除けば非ＭＴ環境におけるＷＴＩ動作と同じである。
【００３８】
次に、マルチスレッディング・システムの協調的ＳＩＥ出口とともにＷＴＩについて説明する。ゲスト・インターセプションを行うときに他のスレッドに対してＳＩＥを終了するように合図する実装形態の場合、ＷＴＩが保留中であるかまたはコアが猶予期間中である場合にはそのような合図は行うべきではない。その代わりに、マルチスレッディング・システムは、他のスレッドに対して、ＳＩＥ出口が発生する前にそれぞれのクリーンアップを完了して診断肯定応答を出す機会を与える（例えばゲストは、警告追跡肯定応答を示すコード「０４９Ｃ」を使用したＤＩＡＧＮＯＳＥ命令を実行する）。すべての有効スレッドが同期する前に猶予期間が満了した場合、残りのスレッドは終了するように合図される。
【００３９】
マルチスレッディング環境では、終了するプロセッサは、他のすべての有効プロセッサが、１）猶予期間中に待ち状態になるか、２）コアが猶予期間に入るときに待ち状態であるか、３）クリーンアップが完了したことを示すためにＤＩＡＧ  ０４９Ｃを発行した後で、命令割込みのためを含む独立した理由のためにＳＩＥを終了するか、または、４）別のレッドからの合図に応答してＳＩＥを終了するまで、ＳＩＥ出口同期ループに留まる。典型的かつ望ましい状況は、猶予期間が満了する前にすべてのスレッドが独立してクリーンアップを完了し、ＤＩＡＧ  ０４９Ｃ  ＷＴＩ肯定応答を発行するか、またはそのコアで猶予期間に入るときに待ち状態になることである。警告追跡のためのＭＴ特有の動作は、プロセッサから撤去される前に各スレッドでオペレーティング・システムがクリーンアップを行うことができるようにするために、猶予期間中のＳＩＥ出口の合図を遅らせることである。
【００４０】
コア・ディスパッチ環境における警告追跡に関するプロセス・フロー６００の一例を示す図８ないし図１０を参照しながら、マルチスレッディング・システムについて説明する。全体として、プロセス・フロー６００は、警告追跡要求が保留になったときの任意の所定のスレッド上の動作を示す。従って、プロセス・フロー６００は、任意のスレッド（例えば一次または二次スレッド）のＴビットがオンのときにブロック６０２で開始する。一次状態記述におけるＴビットは、図７に示すようにマルチスレッディング・システムが、ホスト・タイマ割込みを処理する場合に設定するか、またはハイパーバイザが設定することができる。マルチスレッディング・システムによってＴビットが検出されると、決定ブロック６０４でマルチスレッディング・システムはコアが猶予期間中であるか否かを判断する。コアが猶予期間中でない場合（例えば「Ｎ」矢印で示すように）、決定ブロック６０６でマルチスレッディング・システムはコアがゲスト・マルチスレッド環境で動作しているか否かを判断する。コアがゲスト・マルチスレッド環境で動作している場合、プロセス・フロー６００はブロック６０８に進み、マルチスレッディング・システムは状態記述グループ内のすべての有効二次スレッドの二次状態記述にＴビットを設定する。なお、二次スレッドの状態記述へのＴビットの伝播は、このプロセス・フローが一次スレッドに対して実行されている場合にのみ行われる。また、コアがゲスト・マルチスレッド環境で動作しているか否かにかかわらず、プロセス６００はブロック６１０に進み、コアは猶予期間に入る（例えば、ブロック６０２に示すようにＴビットがオンで、ブロック６０４に示すように猶予期間に入っていない場合）。猶予期間に入ることは、ゲスト・タイム・スライスを短時間だけ延長することと、猶予期間がアクティブであることを示す標識を設定することを含む。猶予期間は、ＷＴＩをいずれかのスレッドまたはすべてのスレッドに提示することができない場合でも開始する。次に、決定ブロック６１２で、マルチスレッディング・システムは、ゲスト・スレッドがＷＴＩ割込み可能にされているか否かを判断する。マルチスレッディング・システムが、ゲスト・スレッドがＷＴＩ割込み可能にされていると判断すると、ブロック６１４でその割込みが提示され、ゲスト・オペレーティング・システムはブロック６１６でクリーンアップの開始などの適切なアクションをとることができる（プロセス・フロー６００は次に、フロー連結記号「ａ」を介して図９の決定ブロック６１８に進む）。マルチスレッディング・システムが、ゲストがＷＴＩ割込み可能にされていないと判断した場合、ＷＴＩを提示することができず、ゲストが割込み可能になるまで、またはＳＩＥ出口のための別の条件が発生するまで、ゲストの実行が継続する（プロセス・フロー６００は次にフロー連結記号「ｂ」を介して図１０の決定ブロック６４２に進む）。
【００４１】
図９に示すように、ＷＴＩ割込みがゲストに提示されると、マルチスレッディング・システムは、クリーンアップの完了中に特定の条件が発生していないか監視する。プロセス・フロー６００は決定ブロック６１８に進み、マルチスレッディング・システムは、クリーンアップが完了する前に猶予期間が終了したか否かを判断する。猶予期間が終了した場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー６００はブロック６２０に進み、ＳＩＥ出口が呼び出され、その他のスレッドは終了するように合図される。なお、猶予期間中に他の理由でＳＩＥ出口が呼び出された場合、他のスレッドにそれぞれのクリーンアップを完了させる時間を与えるため、他のスレッドには合図されない。猶予期間が終了していなかった場合（例えば「Ｎ」矢印で示すように）、プロセス・フロー６００は決定ブロック６２２に進み、マルチスレッディング・システムは、クリーンアップが完了する前に待ち状態ＰＳＷがロードされたか否かを判断する。待ち状態ＰＳＷがロードされた場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー６００はブロック６２４に進み、このスレッドについて待ち状態インターセプションが提示される。待ち状態ＰＳＷがロードされていない場合（例えば「Ｎ」矢印で示すように）、プロセス・フロー６００は決定ブロック６２６に進み、マルチスレッディング・システムは、クリーンアップが完了する前にゲスト・インターセプションが発生したか否かを判断する。ゲスト・インターセプションが発生した場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー６００はブロック６２８に進み、このスレッドについてそのインターセプションが行われる。ゲスト・インターセプションが発生していない場合（例えば「Ｎ」矢印で示すように）、プロセス・フロー６００は決定ブロック６３０に進み、マルチスレッディング・システムは、クリーンアップが完了する前にホスト割込みが発生したか否かを判断する。ホスト割込みが発生した場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー６００はブロック６３２に進み、その割込みを提示することができるようにＳＩＥ出口が呼び出される。ホスト割込みが発生していない場合（例えば「Ｎ」矢印で示すように）、プロセス・フロー６００は決定ブロック６３４に進み、マルチスレッディング・システムは、クリーンアップが完了する前に別のスレッドからＳＩＥ出口要求を受け取ったか否かを判断する。別のスレッドからＳＩＥ出口要求を受け取った場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー６００はブロック６３６に進み、このスレッドについてアクションなしインターセプションが行われる。別のスレッドからＳＩＥ出口要求を受け取っていない場合（例えば「Ｎ」矢印で示すように）、プロセス・フロー６００はブロック６３８に進み、ゲスト・オペレーティング・システムがクリーンアップを完了することができる場合、および他の条件のいずれかが発生する前に、ＤＩＡＧ「０４９Ｃ」ＷＴＩ肯定応答が発行される。次に、ブロック６４０で、ＤＩＡＧのための命令インターセプションが発生する。すべてのスレッドがＳＩＥ出口最終同期ループに達すると、一次スレッドでホストにゲスト・インターセプションまたはホスト割込みあるいはその両方が提示される。
【００４２】
図１０に示すように、ＷＴＩ割込みが可能にされていない場合、ゲスト・スレッドは、クリーンアップが行われるようにＷＴＩ割込み許可がないか監視することを継続するとともに、猶予期間の終わりを含む他の条件がないか監視する。プロセス・フロー６００は決定ブロック６４２に進み、マルチスレッディング・システムは、ＷＴＩが割込み可能になって割込みがソフトウェアに提示される前に猶予期間が終了したか否かを判断する。猶予期間が終了した場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー６００はブロック６２０に進み、ＳＩＥ出口が呼び出され、その他のスレッドは終了するように合図される。なお、この場合も、他の何らかの理由で猶予期間中にＳＩＥ出口が呼び出された場合、他のスレッドにそれぞれのクリーンアップを完了させる時間を与えるために、他のスレッドには合図しない。猶予期間が終わっていない場合（例えば「Ｎ」矢印に示すように）、プロセス・フロー６００は決定ブロック６４４に進み、マルチスレッディング・システムはＷＴＩが提示される前に待ち状態ＰＳＷがロードされたか否かを判断する。待ち状態ＰＳＷがロードされている場合（例えば「Ｙ」矢印に示すように）、プロセス・フロー６００はブロック６２４に進み、このスレッドについて待ち状態インターセプションが提示される。待ち状態ＰＳＷがロードされていない場合（例えば「Ｎ」矢印で示すように）、プロセス・フロー６００は決定ブロック６４６に進み、マルチスレッディング・システムは、このスレッドがゲスト・インターセプションを必要としているか否かを判断する。ゲスト・インターセプションが発生した場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー６００はブロック６２８に進み、このスレッドについてそのインターセプションが行われる。ゲスト・インターセプションが発生していない場合（例えば「Ｎ」矢印で示すように）、プロセス・フロー６００は決定ブロック６４８に進み、マルチスレッディング・システムは、ＷＴＩが提示される前にホスト割込みが発生したか否かを判断する。ホスト割込みが発生している場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー６００はブロック６３２に進み、その割込みを提示することができるようにＳＩＥ出口が呼び出される。ホスト・インターセプションが発生していない場合（例えば「Ｎ」矢印で示すように）、プロセス・フロー６００は決定ブロック６５０に進み、マルチスレッディング・システムは、別のスレッドからＳＩＥ出口要求を受け取ったか否かを判断する。別のスレッドからＳＩＥ出口要求を受け取った場合（例えば「Ｙ」矢印で示すように）、プロセス・フロー６００はブロック６３６に進み、アクションなしインターセプションが行われる。別のスレッドからＳＩＥ出口要求を受け取っていない場合（例えば「Ｎ」矢印で示すように）、プロセス・フロー６００は（フロー連結記号「ｃ」を介して）図８の決定ブロック６１２に進み、マルチスレッディング・システムは、ゲストがＷＴＩ割込み可能にされているか否かを判断する。
【００４３】
マルチスレッディング環境におけるＷＴＩは、ＳＩＥ出口同期の合図が行われる前にオペレーティング・システムに追加の合図を行うことを含むように拡張することができる。ＳＩＥ出口を生じさせた割込みまたはインターセプションに対する期待されるハイパーバイザ応答が、別の異なるゲスト・コアをディスパッチすることである場合には、まだ実行中のスレッドに対してそれらのスレッドがプロセッサからまもなく撤去されることを警告するためにＷＴＩを使用すれば、通常は有用であろう。
【００４４】
一般に、コンピューティング・デバイスはプロセッサ（例えば図１のプロセッサ１１４）とコンピュータ可読記憶媒体（例えば図１のメモリ１１６）とを含み、プロセッサは、例えばコンピュータ可読記憶媒体からコンピュータ可読プログラム命令を受け取り、それらの命令を実行することによって、本明細書に記載のプロセスのうちの１つまたは複数を含む、１つまたは複数のプロセスを実行する。
【００４５】
コンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードまたはオブジェクト・コードを使用して作成されたコンピュータ・プログラムから、コンパイルまたは解釈実行することができる。コンピュータ可読プログラム命令は、スタンドアロン・ソフトウェア・パッケージとして全体がコンピューティング・デバイス上で、または一部がコンピューティング・デバイス上で、または一部がローカル・コンピューティング・デバイス上で一部がリモート・コンピュータ・デバイス上で、または全体がリモート・コンピュータ・デバイス上で実行されてよい。後者の場合、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む、任意の種類のネットワークを介してローカル・コンピュータに接続することができ、または接続は外部コンピュータ（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）に対して行ってもよい。実施形態によっては、本発明の各態様を実行するために、例えばプログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路が、コンピュータ可読プログラム命令の状態情報を使用して電子回路をパーソナライズすることにより、コンピュータ可読プログラム命令を実行することができる。本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、または、ネットワーク（例えば、通信をサポートするコンピューティング・デバイスと接続との任意の組合せ）を介して外部コンピュータまたは外部記憶デバイスにダウンロードすることもできる。例えば、ネットワークは、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークまたは無線ネットワークあるいはこれらの組合せであってよく、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組合せを含んでよく、無線技術、セルラー技術などの複数の通信技術を使用してよい。
【００４６】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し、記憶する有形のデバイスとすることができる（例えば上述のようなコンピューティング・デバイス）。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、またはこれらの任意の適合する組合せとすることができるが、これらには限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストには、以下のものが含まれる。即ち、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、携帯型コンパクト・ディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチ・カードまたは命令が記録された溝内の隆起構造などの機械的に符号化されたデバイス、およびこれらの任意の適合する組合せが含まれる。本明細書で使用するコンピュータ可読記憶媒体とは、電波またはその他の自由に伝播する電磁波、導波路またはその他の伝送媒体を伝播する電磁波（例えば光ファイバ・ケーブルを通る光パルス）、または電線を介して伝送される電気信号などの、一時的な信号自体であると解釈すべきではない。
【００４７】
従って、マルチスレッディング・システムおよび方法またはそれらの要素あるいはこれらの組合せは、関連付けられたコンピュータ可読記憶媒体に記憶された、１つまたは複数のコンピューティング・デバイス上のコンピュータ可読プログラム命令として実装され得る。コンピュータ・プログラム製品は、マルチスレッディング・システムおよび方法の動作を実行するかまたはプロセッサに実行させるかあるいはその両方のために、コンピュータ可読記憶媒体に記憶されたそのようなコンピュータ可読プログラム命令を含み得る。実装されまたは特許請求の範囲に記載され、あるいはその両方であるマルチスレッディング・システムおよび方法またはそれらの要素あるいはこれらの組合せは、使用される待ち状態および警告追跡が協調的SIE終了とともに資源コストを低減するため、コンピュータまたはプロセッサ自体あるいはその両方の機能を向上させる。また、マルチスレッディング・システム、方法またはコンピュータ・プログラム製品あるいはこれらの組合せは、マルチスレッド環境における待ち状態および警告追跡サポートを提供するより効率的な手段を提供する。例えば、共用環境で動作する第１のスレッドの変更済み待ち状態は、その共用環境におけるすべてのスレッドがその変更済み待ち状態になるまで解釈実行開始出口を遅らせる。猶予期間中の警告追跡は、各スレッドが終了する前にそれらのスレッドに「クリーンアップ」する時間を与えるように協調的SIE終了を開始させるために、スレッド間の合図を遅らせる。
【００４８】
言い換えると、改良点には、共用物理プロセッサ環境においてコア上のすべてのスレッドが待ち状態になるまでそのコアをディスパッチされたままにしておく機構と、コア内のスレッドが「クリーンアップ」プロセス中であることを認識し、強制的に終了させられる前にクリーンアップを完了する機会を他のスレッドに与えるために他のスレッドへの「即時」ＳＩＥ出口の合図を遅らせる機構と、マルチスレッド環境においてＳＩＥをより効果的に終了するために警告追跡割込み機能の使用を活用する機構とを提供することが含まれる。
【００４９】
本発明の態様について、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品を示すフローチャート図またはブロック図あるいはその両方を参照しながら説明している。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組合せは、コンピュータ可読プログラム命令によって実装可能であることがわかるであろう。
【００５０】
上記のコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行される上記の命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックで規定されている動作／作用を実装する手段を形成するように、汎用コンピュータ、専用コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに供給されてマシンを実現するものであってよい。上記のコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックで規定されている動作／作用の態様を実装する命令を含む製造品を含むように、コンピュータ可読媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、またはその他のデバイス、あるいはこれらの組合せに対して特定の方式で動作するように指示することができるものであってもよい。
【００５１】
上記のコンピュータ可読プログラム命令は、コンピュータ、その他のプログラマブル装置またはその他のデバイス上で実行される上記命令がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックで規定されている動作／作用を実装するように、コンピュータ実装プロセスを生成するべく、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスにロードされ、コンピュータ、その他のプログラマブル装置、またはその他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【００５２】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、運用性および動作を示す。これに関連して、フローチャートまたはブロック図の各ブロックは、規定されている論理演算を実装するための１つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または部分を表し得る。ある代替実装形態では、ブロックに記載されている動作は、図に記載されている順序とは異なる順序で行われてもよい。例えば、連続して示されている２つのブロックは、関与する運用性に応じて、実際には実質的に並行して実行されてよく、またはそれらのブロックは場合によっては逆の順序で実行されてもよい。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方のブロックの組合せは、規定されている動作または作用を実行する専用ハードウェア・ベースのシステムによって実装されるか、または専用ハードウェアとコンピュータ命令の組合せを実行することができることもわかるであろう。
【００５３】
本発明の様々な実施形態について例示を目的として説明したが、本発明の説明は網羅的であること、または開示されている実施形態に限定することを意図したものではない。当業者には、記載されている実施形態の範囲および趣旨から逸脱することなく多くの変更および変形が明らかであろう。本明細書で使用されている用語は、実施形態の原理、実際の適用、または市場に見られる技術の技術的改善を最もよく説明するため、または他の当業者が本明細書で開示されている実施形態を理解することができるようにするために選択されたものである。
【００５４】
本明細書で使用されている用語は、特定の実施形態を説明することのみを目的としており、本発明を限定することを意図していない。本明細書で使用されている単数形の「１つの（ａ）」、「１つの（ａｎ）」および「その（ｔｈｅ）」は、文脈が明示しない限り複数形も含むことを意図している。また、本明細書で使用されている「含む（ｃｏｍｐｒｉｓｅｓまたはｃｏｍｐｒｉｓｉｎｇ）あるいはその両方」という用語は、記載されている特徴、整数、ステップ、動作、要素または構成要素あるいはこれらの組合せの存在を規定するが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素またはこれらのグループあるいはこれらの組合せの存在または追加を排除しないことがわかるであろう。
【００５５】
本明細書で図示されている流れ図は、一例に過ぎない。本発明の範囲から逸脱することなく本明細書に記載の図またはステップ（または動作）には多くの変形があり得る。例えば、ステップは異なる順序で実行されてもよく、またはステップが追加、削除または修正されてもよい。これらの変形態様のすべては特許請求の範囲に記載の本発明の一部とみなされる。
【００５６】
以上、本発明の好ましい実施形態について説明したが、当業者は、現在および将来の両方にわたり、以下の特許請求の範囲に含まれる様々な改善および改良を加えることができることがわかるであろう。以下の特許請求の範囲は始めに述べた本発明の適切な保護を維持するものと解釈すべきである。
【図１】
0006537600.tif 000002
【図２】
0006537600.tif 000003
【図３】
0006537600.tif 000004
【図４】
0006537600.tif 000005
【図５】
0006537600.tif 000006
【図６】
0006537600.tif 000007
【図７】
0006537600.tif 000008
【図８】
0006537600.tif 000009
【図９】
0006537600.tif 000010
【図１０】
0006537600.tif 000011