(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムであって、
各々がシングルスレッド（ＳＴ）モードまたはマルチスレッディング（ＭＴ）モードで動作することが可能な１以上のコアを有する仮想マシン（ＶＭ）構成であって、前記ＳＴモードが、単一のスレッドで構成され、前記ＭＴモードが、それぞれのコアの共有リソース上の複数のスレッドで構成される、前記ＶＭ構成と、
前記ＶＭ構成の前記１以上のコアのすべてを表す共通エリアと、前記ＶＭ構成内の前記１以上のコアの各コアのための別個のコア記述エリアとを有するコア指向システム制御エリア（ＣＯＳＣＡ）であって、各コア記述エリアが、各々がそれぞれの前記コア内のスレッドを表す１以上のスレッド記述エリアの位置を示し、各スレッド記述エリアが、それぞれの前記スレッドの状態記述の位置を示す、前記ＣＯＳＣＡと、
前記ＣＯＳＣＡの内容に基づいて、前記ＶＭ構成の前記１以上のコアの複数のスレッドを管理することを含む方法を実行するために前記ＶＭ構成を制御するように構成されたファシリティとを備えるコンピュータ・システム。
【請求項２】
前記共通エリアが、前記１以上のコアに関して前記１以上の別個のコア記述エリアの位置をさらに示す、請求項１に記載のコンピュータ・システム。
【請求項３】
前記共通エリアが、前記１以上のコアの有効性を示すコア有効性マスクをさらに含む、
請求項１に記載のコンピュータ・システム。
【請求項４】
前記コア記述エリアが、コアに関連付けられた１以上のスレッドの有効性を示すスレッド有効性マスクをさらに含む、請求項１に記載のコンピュータ・システム。
【請求項５】
前記１以上の状態記述の各々が、前記それぞれのコアの前記コア記述エリアの位置をさらに示す、請求項１に記載のコンピュータ・システム。
【請求項６】
前記１以上の状態記述の各々が、前記共通エリアの位置をさらに示す、請求項１に記載のコンピュータ・システム。
【請求項７】
各々の前記コア記述エリアが、前記共通エリアの位置をさらに示すこと、各々の前記状態記述が、前記それぞれのスレッドのスレッド記述エリアの位置をさらに示すこと、各々の前記スレッド記述エリアが、前記それぞれのコアのコア記述エリアの位置をさらに示すこと、および、各々の前記スレッド記述エリアが、前記共通エリアの位置をさらに示すこと、のうちの少なくとも１つがある、請求項１に記載のコンピュータ・システム。
【請求項８】
前記共通エリアが、前記１以上のコアのための前記１以上の別個のコア記述エリアの位置をさらに示し、
前記共通エリアが、前記１以上のコアの有効性を示すコア有効性マスクをさらに含み、
前記コア記述エリアが、コアに関連付けられた１以上のスレッドの有効性を示すスレッド有効性マスクをさらに含む、請求項１に記載のコンピュータ・システム。
【請求項９】
前記管理することが、前記ＶＭ構成内のスレッド間の調整を提供することを含む、請求項１に記載のコンピュータ・システム。
【請求項１０】
前記管理することが、スレッド記述エリアの内容を変更することを含む、請求項１に記載のコンピュータ・システム。
【請求項１１】
シングルスレッド（ＳＴ）モードまたはマルチスレッディング（ＭＴ）モードで動作することが可能な１以上のコアを含む仮想マシン（ＶＭ）構成において複数のスレッドを管理するためのコンピュータ実装方法であって、前記ＳＴモードが、単一のスレッドで構成され、前記ＭＴモードが、それぞれのコアの共有リソース上の複数のスレッドで構成され、前記方法が、
前記ＶＭ構成の前記１以上のコアのすべてを表す共通エリアと、前記ＶＭ構成内の前記１以上のコアの各コアのための別個のコア記述エリアとを有するコア指向システム制御エリア（ＣＯＳＣＡ）を提供することであって、各コア記述エリアが、各々が前記それぞれのコア内のスレッドを表す１以上のスレッド記述エリアの位置を示し、各スレッド記述エリアが、前記それぞれのスレッドの状態記述の位置を示す、前記提供することと、
前記コアによって、前記ＣＯＳＣＡの内容に基づいて、前記ＶＭ構成の前記１以上のコ
アの複数のスレッドを管理することとを含む、方法。
【請求項１２】
前記共通エリアが、前記１以上のコアに関して前記１以上の別個のコア記述エリアの位置をさらに示す、請求項１１に記載の方法。
【請求項１３】
前記共通エリアが、前記１つまたは複数のコアの有効性を示すコア有効性マスクをさらに含む、請求項１１に記載の方法。
【請求項１４】
前記コア記述エリアが、コアに関連付けられた１以上のスレッドの有効性を示すスレッド有効性マスクをさらに含む、請求項１１に記載の方法。
【請求項１５】
前記共通エリアが、前記１以上のコアのための前記１以上の別個のコア記述エリアの位置をさらに示し、
前記共通エリアが、前記１以上のコアの有効性を示すコア有効性マスクをさらに含み、
前記コア記述エリアが、コアに関連付けられた１以上のスレッドの有効性を示すスレッド有効性マスクをさらに含む、請求項１１に記載の方法。
【請求項１６】
シングルスレッド（ＳＴ）モードまたはマルチスレッディング（ＭＴ）モードで動作することが可能な１以上のコアを含む仮想マシン（ＶＭ）構成内の複数のスレッドを管理するためのコンピュータ・プログラムであって、前記ＳＴモードが、単一のスレッドで構成され、前記ＭＴモードが、それぞれのコアの共有リソース上の複数のスレッドで構成され、処理回路に、
前記ＶＭ構成の前記１以上のコアのすべてを表す共通エリアと、前記ＶＭ構成内の前記１以上のコアの各コアのための別個のコア記述エリアとを有するコア指向システム制御エリア（ＣＯＳＣＡ）を提供することであって、各コア記述エリアが、各々が前記それぞれのコア内のスレッドを表す１以上のスレッド記述エリアの位置を示し、各スレッド記述エリアが、前記それぞれのスレッドの状態記述の位置を示す、前記提供すること、および、
コアによって、前記ＣＯＳＣＡの内容に基づいて、前記ＶＭ構成の前記１以上のコアの複数のスレッドを管理すること、
を実行させるためのコンピュータ・プログラム。
【請求項１７】
前記共通エリアが、前記１以上のコアに関して前記１以上の別個のコア記述エリアの位置をさらに示す、請求項１６に記載のコンピュータ・プログラム。
【請求項１８】
前記共通エリアが、前記１以上のコアの有効性を示すコア有効性マスクをさらに含む、請求項１６に記載のコンピュータ・プログラム。
【請求項１９】
前記コア記述エリアが、コアに関連付けられた１以上のスレッドの有効性を示すスレッド有効性マスクをさらに含む、請求項１６に記載のコンピュータ・プログラム。
【請求項２０】
前記共通エリアが、前記１以上のコアに関して前記１以上の別個のコア記述エリアの位置をさらに示し、
前記共通エリアが、前記１以上のコアの有効性を示すコア有効性マスクをさらに含み、
前記コア記述エリアが、コアに関連付けられた１以上のスレッドの有効性を示すスレッド有効性マスクをさらに含む、請求項１６に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、マルチスレッディング（ＭＴ）に関し、より詳細には、コンピュータ内の複数のスレッドを管理するためのコア指向システム制御エリア（ＣＯＳＣＡ（core-oriented system control area）に関する。
【背景技術】
【０００２】
マルチスレッディング（ＭＴ）は、追加のコアを追加することなしに、単一の物理プロセッサコア内で並列に動作することができるプロセッサ・スレッドの数を増加させるための手段を提供する。理想的には、ＭＴは、１つまたは複数のスレッドが同じコア上で実行されている他のスレッドによって現在使用されていないコア・ハードウェアの一部を使用することによって、この増加した容量を提供する。たとえば、１つのスレッドにおけるキャッシュミスまたは他の遅延によって生じるレイテンシの間、１つまたは複数の他のスレッドは、コア・リソースを利用することができ、したがってリソースの利用率を増加させる。実際には、この共有は、スレッド間のなんらかの干渉をもたらし、なんらかの追加のハードウェアを必要とするにもかかわらず、ＭＴは、各スレッドがそれ自体の隔離されたコア・ハードウェア上で実行される場合に必要とされるよりも少ないハードウェアを使用して各スレッドの作業を実行する能力を依然として提供する。しばしば、スレッド間のハードウェア・リソースの共有が、メモリからのデータなどの情報を２つの固有のコアに提供するために、コンピュータ・システム上の全体的な負担も減少させるとき、追加の利点をＭＴから得ることができる。
【０００３】
典型的には、ＭＴは、ハードウェアの節約を提供するが、別の作業スレッドの追加は、追加の別個のコアを使用して増加した容量を提供する場合に必要とされる調整コストと、ハイパーバイザ・レベルで同じだけ消費する。多くの場合、特定のスケーリング比が達成されると、作業スレッド間でリソースを調整するためのオーバヘッドは、単一のコアまたは共有されるコアのいずれにおいて実行されるのかにかかわらず大きく、独立した作業スレッドを実行させる能力によって見られる利点を減少させる可能性があり、またはオーバヘッドが利点を上回る可能性すらある。すなわち、一般的に、管理するものの数が増加するにつれて、管理オーバヘッドが大きくなる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願代理人整理番号ＰＯＵ９２０１４００６４ＵＳ１
【特許文献２】米国特許出願第１４／２２６９４７号
【非特許文献】
【０００５】
【非特許文献１】“z/Architecture Principles ofOperation,” IBM Publication No. SA22-7832-09, August2012
【発明の概要】
【発明が解決しようとする課題】
【０００６】
コンピュータ内の複数のスレッドを管理する制御エリアを提供するための方法、システム、及びコンピュータ・プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
実施形態は、コンピュータ内の複数のスレッドを管理する制御エリアを提供するためのシステム、方法、およびコンピュータ・プログラム製品を含む。一態様によれば、コンピュータ・システムは、１つまたは複数のコアを有する仮想マシン（ＶＭ）構成を含み、各コアは、シングルスレッド（ＳＴ）モードまたはマルチスレッディング（ＭＴ）モードで動作することが可能である。ＳＴモードは、単一のスレッドで構成され、ＭＴモードは、それぞれのコアの共有リソース上の複数のスレッドで構成される。コンピュータ・システムはまた、ＶＭ構成の１つまたは複数のコアのすべてを表す共通エリアと、ＶＭ構成内の１つまたは複数のコアの各コアのための別個のコア記述エリアとを有するコア指向システム制御エリア（ＣＯＳＣＡ）を含む。各コア記述エリアは、各々がそれぞれのコア内のスレッドを表す１つまたは複数のスレッド記述エリアの位置を示し、各スレッド記述エリアは、それぞれのスレッドの状態記述の位置を示す。コンピュータ・システムは、方法を実行するために構成を制御するように構成されたファシリティをさらに含む。方法は、ＣＯＳＣＡの内容に基づいて、ＶＭ構成の１つまたは複数のコアのスレッドを管理することを含む。
【０００８】
別の態様によれば、仮想マシン（ＶＭ）構成内の複数のスレッドを管理するためのコンピュータ実装方法が提供される。構成は、１つまたは複数のコアを含み、各コアは、シングルスレッド（ＳＴ）モードまたはマルチスレッディング（ＭＴ）モードで動作することが可能である。ＳＴモードは、単一のスレッドで構成され、ＭＴモードは、それぞれのコアの共有リソース上の複数のスレッドで構成される。方法は、ＶＭ構成の１つまたは複数のコアのすべてを表す共通エリアと、ＶＭ構成内の１つまたは複数のコアの各コアのための別個のコア記述エリアとを有するコア指向システム制御エリア（ＣＯＳＣＡ）を提供することを含む。各コア記述エリアは、各々がそれぞれのコア内のスレッドを表す１つまたは複数のスレッド記述エリアの位置を示し、各スレッド記述エリアは、それぞれのスレッドの状態記述の位置を示す。方法は、コアによって、ＣＯＳＣＡの内容に基づいて、ＶＭ構成の１つまたは複数のコアのスレッドを管理することをさらに含む。
【０００９】
さらなる態様は、仮想マシン（ＶＭ）構成内の複数のスレッドを管理するためのコンピュータ・プログラム製品を含む。構成は、１つまたは複数のコアを含み、各コアは、シングルスレッド（ＳＴ）モードまたはマルチスレッディング（ＭＴ）モードで動作することが可能である。ＳＴモードは、単一のスレッドで構成され、ＭＴモードは、それぞれのコアの共有リソース上の複数のスレッドで構成される。コンピュータ・プログラム製品は、それにより具現化されたプログラム命令を有するコンピュータ可読記憶媒体を含み、コンピュータ可読記憶媒体は、信号ではなく、プログラム命令は、処理回路に方法を実行させるために、処理回路によって可読である。方法は、ＶＭ構成の１つまたは複数のコアのすべてを表す共通エリアと、ＶＭ構成内の１つまたは複数のコアの各コアのための別個のコア記述エリアとを有するコア指向システム制御エリア（ＣＯＳＣＡ）を提供することを含む。各コア記述エリアは、各々がそれぞれのコア内のスレッドを表す１つまたは複数のスレッド記述エリアの位置を示し、各スレッド記述エリアは、それぞれのスレッドの状態記述の位置を示す。方法はまた、コアによって、ＣＯＳＣＡの内容に基づいて、ＶＭ構成の１つまたは複数のコアのスレッドを管理することを含む。
【００１０】
実施形態とみなされる主題は、本明細書に添付の特許請求の範囲で特に指摘され、明確に特許請求されている。実施形態の上記および他の特徴、ならびに利点は、添付図面と併せて以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１１】
【図１】一実施形態に従って実装され得るコンピューティング環境を示す図である。
【図２】一実施形態に従って実装され得る物理プロセッサを示す図である。
【図３】一実施形態に従って実装され得るコンピューティング環境を示す図である。
【図４】一実施形態によるマルチスレッド（ＭＴ）論理スレッドの状態記述を示す図である。
【図５】一実施形態によるスレッド有効性マスク（ＴＶＭ（thread-validitymask））のブロック図である。
【図６】一実施形態による固定オフセット状態記述グループを示す図である。
【図７】一実施形態による、アドレス・リストとして指定された状態記述グループを示す図である。
【図８】一実施形態による、リンク・リストとして指定された状態記述グループを示す図である。
【図９】一実施形態による、循環リストまたはリングとして指定された状態記述グループを示す図である。
【図１０】一実施形態によるコア・ディスパッチ・プロセスを示す図である。
【図１１】一実施形態による、仮想実行からの協調したエグジット（ｃｏｏｒｄｉｎａｔｅｄ  ｅｘｉｔ）を示す図である。
【図１２】一実施形態による、システム制御エリアのブロック図である。
【図１３】一実施形態による、マルチスレッド・コア間で調整するためのプロセス・フローを示す図である。
【図１４】一実施形態によるコンピュータ可読媒体を示す図である。
【発明を実施するための形態】
【００１２】
本明細書に記載の実施形態は、マルチスレッディング（ＭＴ）環境でハイパーバイザ管理オーバヘッドを減少させるために使用され得る。本明細書に記載されているように、複数のスレッドの管理は、複数のスレッドを単一の論理コアとして管理するハイパーバイザと、複数のスレッドが物理コアのリソースにアクセスするとき複数のスレッド間の相互作用を管理するマシンとの間で分割され得る。これは、ハイパーバイザが論理コア単位でハイパーバイザのインフラストラクチャ・リソースの多くを管理することを可能にし、マシンがより微細なスレッド単位で他のリソースを管理することを可能にすることによって、マルチスレッディング（ＭＴ）オーバヘッド・コストの実質的な減少をもたらすことができる。一実施形態は、シングルスレッド（ＳＴ）上で実行されているハイパーバイザによって実行され得るコア・ディスパッチ命令を含む。本明細書では「ＭＴを指定するｓｔａｒｔ−ＶＥ命令」と呼ばれるコア・ディスパッチ命令の実行は、ゲスト仮想マシン（ＶＭ）のすべてまたは一部を構成する複数のゲスト論理スレッドを、単一の物理コア上でディスパッチさせることができる。一実施形態では、ゲストをディスパッチするためにハイパーバイザによって使用される命令は、ディスパッチされるべきゲストが、シングルスレッド化されるのか、またはマルチスレッド化されるのかを指定する。
【００１３】
本明細書に記載の実施形態は、ゲスト論理コア内のどの論理スレッドが現在有効であるのかを示すためのスレッド有効性マスク、および、マルチスレッド論理コアのディスパッチを管理するための状態記述リングを含む状態記述グループなどの構造を含むことができる。加えて、プライマリおよびセカンダリ状態記述、ならびにフィールド・タイプ（たとえば、プライマリ、コア共通、スレッド固有）は、複数のスレッドを有する論理コアがディスパッチされるとき、コンピュータ・リソースの効率的な管理を可能にするように実装され得る。さらに、論理コア内のすべてのスレッドが同時に仮想実行からエグジットする協調したエグジットは、ハイパーバイザ機能と論理コア管理機能の両方を簡略化するために提供され得る。
【００１４】
実施形態は、本明細書ではコア指向システム制御エリア（ＣＯＳＣＡ（core orientedsystem control area））と呼ばれる、ハイパーバイザによって維持される制御構造を含むことができる。ＣＯＳＣＡは、ゲスト構成内の複数の論理プロセッサに影響を与える可能性がある特定の機能を管理するために、ハイパーバイザとマシンの両方によって使用される。ＣＯＳＣＡの一実施形態は、葉(leaves)が論理コア(logical cores)を表し、各葉がそのコアのスレッドに対応するリストを含むツリー構造として実装される。ＣＯＳＣＡ構造は、ハイパーバイザが特定のコアにおけるスレッドのすべてのための状態記述に容易にアクセスすることを可能にするフィールド（たとえば、状態記述アドレス）を含むことができる。
【００１５】
本明細書で使用される「スレッド」という用語は、単一の命令ストリームおよびその関連する状態を指す。すなわち、アーキテクチャ・レベルでは、各論理スレッドは、独立したＣＰＵまたはプロセッサを表す。ハードウェア・レベルでは、物理スレッドは、そのスレッドがディスパッチされたとき、そのゲスト状態の維持と組み合わされた、論理スレッドに関連付けられた命令ストリームの実行である。ハイパーバイザ・レベルで必要とされる管理を減少させるのは、マシンによるスレッド状態の維持である。論理コアによって使用するために利用可能な論理スレッドの総数は、物理コアに利用可能な物理スレッドの総数によって制限される。
【００１６】
本明細書で使用される「物理コア」という用語は、１つまたは複数の独立した命令ストリームを実行するが、実行ユニットおよび低レベル・キャッシュなどの多くの基本リソースを共有するハードウェア処理ユニットを指す。この共有は、各スレッドが独立した時間に同じハードウェア・リソースを使用すること、または、リソースがスレッド識別子でタグ付けされた各物理エントリと論理的に共有されることを含むいくつかの方法で行われ得る。スレッド間、たとえば、リソースＡをしばしば必要とするが、リソースＢをめったに必要としない１つのスレッドと、典型的にはリソースＢを使用するが、リソースＡを使用しない別のスレッドとの間の適切な相乗効果は、この共有の効率を改善することができる。本明細書で使用される「マシン」という用語は、ミリコードと同様に物理コアに含まれるハードウェア、および物理コアのサポートで使用される他のハードウェアを指す。
【００１７】
本明細書で使用される「ゲストＶＭ」および「ゲスト」という用語は、単一のＣＰＵ
または複数のＣＰＵを含むことができる単一のゲスト構成を指すために互換的に使用される。本明細書で使用される「論理コア」という用語は、ＭＴが指定されるｓｔａｒｔ−ＶＥ命令の一部として一緒にディスパッチされるように定義された論理ゲスト・スレッドまたはＣＰＵのグループを指す。ゲストＶＭは、単一の論理コア（ＳＴもしくはＭＴのいずれか）または複数の論理コア（同様にその各々がＳＴもしくはＭＴであり得る）から作成され得る。
【００１８】
本明細書で使用される「ソフトウェア」という用語は、ハイパーバイザ・プログラム（たとえば、ＰＲ／ＳＭもしくはｚＶＭ）、またはｓｔａｒｔ−ＶＥ命令の結果としてディスパッチされるゲスト・オペレーティング・システムもしくはアプリケーション・プログラムのいずれかを指す。
【００１９】
本明細書で使用される「ハイパーバイザ」および「ホスト」という用語は、物理ハードウェア上で実行するために、システム・リソースを管理し、ゲスト論理プロセッサをディスパッチするプログラムを指す。
【００２０】
ゲストをディスパッチするために使用されるｓｔａｒｔ−ＶＥ命令のオペランドは、そのゲスト・プロセッサまたはコアの状態を定義する状態記述または状態記述のグループを指す。状態記述自体は、状態記述の拡張とみなすことができ、そのゲスト・コアまたはプロセッサの状態をさらに定義する追加の情報を含むことができる「サテライト・ブロック」へのポインタを有する。本明細書で使用される「状態記述」という用語は、状態記述自体だけでなく、それらのサテライト・ブロックも指す。これらのサテライト・ブロックのうちの１つであるコア指向システム制御エリア（ＣＯＳＣＡ）は、図１２に示されている。
【００２１】
ここで、図１を参照すると、例示的な実施形態によって実装され得るコンピューティング環境１００が全体的に示されている。コンピューティング環境１００は、たとえば、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるz/Architectureに基づくことができる。z/Architectureは、その全体が参照により本明細書に組み込まれている、“z/Architecture Principles of Operation,” IBMPublication No. SA22-7832-09, August 2012と題するＩＢＭ（Ｒ）刊行物に記載されている。一例では、z/Architectureに基づくコンピューティング環境は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるeServer zSeriesを含む。
【００２２】
一例として、コンピューティング環境１００は、システム・コントローラ１２０に結合されたプロセッサ複合体１０２を含むことができる。プロセッサ複合体１０２は、たとえば、１つまたは複数のパーティション１０４（たとえば、論理パーティションＬＰ１〜ＬＰｎ）、１つまたは複数の物理コア１０６（たとえば、Ｃｏｒｅ１〜Ｃｏｒｅｍ）、およびレベル０ハイパーバイザ１０８（たとえば、論理パーティション・マネージャ）を含むことができ、その各々は、以下に説明されている。
【００２３】
各論理パーティション１０４は、別個のシステムとして機能することが可能であり得る。すなわち、各論理パーティション１０４は、独立してリセットされ、所望の場合、オペレーティング・システム１１０を用いて最初にロードされ、異なるプログラムで動作することができる。論理パーティション１０４において実行されるオペレーティング・システム１１０またはアプリケーション・プログラムは、全面的かつ完全なシステムへのアクセス権を有するように見えることがあるが、現実には、その一部のみが利用可能である。ハードウェアおよびライセンス内部コード（一般にマイクロコードもしくはミリコードまたはファームウェアとも呼ばれる）の組合せは、ある論理パーティション１０４内のプログラムが異なる論理パーティション１０４内のプログラムと干渉するのを防止する。これは、いくつかの異なる論理パーティション１０４が、タイム・スライスされた方法で単一のまたは複数の物理コア１０６上で動作することを可能にする。一実施形態では、各物理コアは、１つまたは複数の中央プロセッサ（本明細書では「物理スレッド」とも呼ばれる）を含む。図１に示す例では、各論理パーティション１０４は、１つまたは複数の論理パーティション１０４ごとに異なってもよい常駐オペレーティング・システム１１０を有する。各論理パーティション１０４内で実行されるオペレーティング・システム１１０は、仮想マシンまたはゲスト構成の一例である。一実施形態では、オペレーティング・システム１１０は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるｚ／ＯＳ（Ｒ）オペレーティング・システムである。
【００２４】
物理コア１０６は、論理パーティション１０４に割り当てられた物理プロセッサ・リソースを含む。論理パーティション１０４は、１つまたは複数の論理プロセッサを含むことができ、論理プロセッサの各々は、パーティション１０４に割り当てられた物理プロセッサ・リソースのすべてまたは一部を表す。物理コア１０６は、下にあるコア１０６の物理プロセッサ・リソースがそのパーティション１０４のために確保されるように、特定のパーティション１０４の論理コアに専用であってもよく、または、下にあるコア・リソースの物理プロセッサ・リソースが別のパーティション１０４に潜在的に利用可能であるように、別のパーティション１０４の論理コアと供給されてもよい。
【００２５】
図１に示す実施形態では、論理パーティション１０４は、物理コア１０６上で実行されるファームウェアによって実装されたレベル０ハイパーバイザ１０８によって管理される。論理パーティション１０４およびハイパーバイザ１０８は、各々、物理コア１０６に関連付けられた中央ストレージ（メモリ）のそれぞれの部分に存在する１つまたは複数のプログラムを備える。ハイパーバイザ１０８の一例は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるProcessor Resource/Systems Manager（ＰＲ／ＳＭ（ＴＭ））である。
【００２６】
図１では中央プロセッサ複合体１０２に結合されているシステム・コントローラ１２０は、要求を発行する異なるプロセッサ間で調停することを担当する集中型ロジックを含むことができる。たとえば、システム・コントローラ１２０は、メモリ・アクセス要求を受信したとき、そのメモリ位置へのアクセスが許可されているかどうかを決定し、許可されている場合、その複合体内のプロセッサ間のメモリ整合性を維持しながら、そのメモリ位置の内容を中央プロセッサ複合体１０２に提供する。
【００２７】
ここで図２を参照すると、図１中の物理コア１０６などのマシンまたは物理コアを実装するための処理回路２００のブロック図が、一実施形態に従って全体的に示されている。処理回路２００は、多処理環境内の複数の物理コアのうちの１つの物理コアを含むことができる。図２に示す処理回路２００は、処理回路２００を他のコアおよび周辺デバイスに結合することができるシステム・コントローラ・インターフェース・ユニット２０２を含む。システム・コントローラ・インターフェース・ユニット２０２はまた、データ値を読み取り、記憶するＤキャッシュ２０４、プログラム命令を読み取るＩキャッシュ２０８、およびキャッシュ・インターフェース・ユニット２０６を、外部メモリ、プロセッサ、および他の周辺デバイスに接続することができる。
【００２８】
Ｉキャッシュ２０８は、命令をプリフェッチする命令フェッチ・ユニット（ＩＦＵ）２１０と共に命令ストリームのローディングを提供することができ、投機的ローディングおよび分岐予測機能を含むことができる。フェッチされた命令は、命令処理データにデコードするための命令デコード・ユニット（ＩＤＵ）２１２に提供され得る。
【００２９】
ＩＤＵ２１２は、命令を発行ユニット２１４に提供することができ、発行ユニット２１４は、一般的な動作を実行するための１つまたは複数の固定小数点ユニット（ＦＸＵ）２１６、および浮動小数点演算を実行するための１つまたは複数の浮動小数点ユニット（ＦＰＵ）２１８などの様々な実行ユニットへの命令の発行を制御することができる。ＦＰＵ２１８は、２進浮動小数点ユニット（ＢＦＵ）２２０、１０進浮動小数点ユニット（ＤＦＵ）２２０、または任意の他の浮動小数点ユニットを含むことができる。発行ユニット２１４はまた、１つまたは複数ＬＳＵパイプラインを介して１つまたは複数のロード／記憶ユニット（ＬＳＵ）２２８に結合され得る。複数のＬＳＵパイプラインは、ロードおよび記憶と、分岐のためのアドレス生成とを実行するための実行ユニットとして扱われる。ＬＳＵ２２８とＩＦＵ２１０の両方は、オペランドおよび命令アドレスのためのバッファリングされた変換を提供するために、変換索引バッファ（ＴＬＢ）２３０を利用することができる。
【００３０】
ＦＸＵ２１６およびＦＰＵ２１８は、汎用レジスタ（ＧＰＲ）２２４および浮動小数点レジスタ（ＦＰＲ）２２６などの様々なリソースに結合される。ＧＰＲ２２４およびＦＰＲ２２６は、ＬＳＵ２２８によってＤキャッシュ２０４からロードされ、記憶されたデータ値のためのデータ値ストレージを提供する。
【００３１】
ここで図３を参照すると、一実施形態によって実装され得るコンピューティング環境３００が全体的に示されている。図３に示すコンピューティング環境３００は、ＬＰ２とラベル付けされた論理パーティション１０４内で実行するレベル１ハイパーバイザ３０２を追加した、図１に示すコンピューティング環境１００と同様である。図３に示すように、レベル１ハイパーバイザ３０２は、複数のオペレーティング・システム（たとえば、仮想マシンＶＭ１  ３０４、ＶＭ２  ３０６、およびＶＭ３  ３０８上で実行されるＯＳ１  ３１４、ＯＳ２  ３１２、およびＯＳ３  ３１０）間のリソースのトランスペアレント・タイム・スライシング、および、ＬＰ２とラベル付けされた論理パーティション１０４内のこれらのオペレーティング・システムの互いからの分離などの、ハイパーバイザ１０８（本明細書では「レベル０ハイパーバイザ」とも呼ばれる）に関して先に説明したのと同じハイパーバイザ機能を提供することができる。図３に示す実施形態は、例として３つの仮想マシンを含み、他の実施形態は、アプリケーション要件に基づいて、より多い、またはより少ない仮想マシンを含んでもよい。
【００３２】
図３に示すように、ＬＰ１とラベル付けされた論理パーティション１０４は、常駐オペレーティング・システム１１０を有し、ＬＰ２とラベル付けされた論理パーティション１０４は、レベル１ハイパーバイザ３０２を実行し、レベル１ハイパーバイザ３０２は、その各々がそれ自体の常駐オペレーティング・システム３１４、３１２、３１０を実行する仮想マシン３０４、３０６、３０８を作成する。任意の数の論理パーティション１０４は、レベル１ハイパーバイザ３０２を実行してもよい。一実施形態では、レベル１ハイパーバイザ３０２は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるｚ／ＶＭハイパーバイザである。様々な論理パーティションで実行される常駐オペレーティング・システムは、異なってもよく、レベル１ハイパーバイザ３０２の下で実行されているとき、単一のパーティション１０４（たとえば、ＬＰ２）内の常駐オペレーティング・システム（たとえば、オペレーティング・システム３１４、３１２、３１０）も、異なってもよい。一実施形態では、ＬＰ１とラベル付けされた論理パーティション１０４内のオペレーティング・システム１１０は、ニューヨーク州、アーモンクのインターナショナル・ビジネス・マシーン社によって提供されるｚ／ＯＳオペレーティング・システムである。一実施形態では、オペレーティング・システム３１０および３１２は、Ｌｉｎｕｘであり、オペレーティング・システム３１４は、ｚ／ＯＳである。
【００３３】
レベル１ハイパーバイザ３０２は、論理パーティション１０４内で実行されているとき、ハイパーバイザ１０８などのレベル０ハイパーバイザによって論理パーティション１０４に提供されるのと同じリソースの仮想化を、仮想マシン３０８、３０６、３０４内で実行されるオペレーティング・システム３１０、３１２、３１４に提供することができる。第１のレベルでのように、各仮想マシンは、複数の仮想プロセッサを含んでもよい。
【００３４】
物理コア１０６は、図１について説明したように、専用であってもよく、または論理パーティション１０４のＬＰ１、ＬＰ２、ＬＰ３、およびＬＰ４の間で共有されてもよい物理プロセッサ・リソースを含む。論理パーティションＬＰ２が１つまたは複数の物理コア上でディスパッチされたとき、レベル１ハイパーバイザ３０２は、次いで、その仮想マシンＶＭ１  ３０４、ＶＭ２  ３０６、およびＶＭ３  ３０８の間でこれらのリソースを透過的に共有することができる。一実施形態では、レベル０ハイパーバイザ１０８は、マルチスレッド・レベル１ハイパーバイザ３０２をディスパッチするために、ＭＴを指定するｓｔａｒｔ−ＶＥ命令を使用し、マルチスレッド・レベル１ハイパーバイザ３０２は、次いで、シングルスレッド仮想マシンＶＭ１  ３０４、ＶＭ２  ３０６、およびＶＭ３  ３０８をディスパッチするために、ＳＴを指定するｓｔａｒｔ−ＶＥ命令を使用する。別の実施形態では、レベル０ハイパーバイザ１０８は、シングルスレッド・レベル１ハイパーバイザ３０２をディスパッチするために、ＳＴを指定するｓｔａｒｔ−ＶＥ命令を使用し、シングルスレッド・レベル１ハイパーバイザ３０２は、次いで、マルチスレッド仮想マシンＶＭ１  ３０４、ＶＭ２  ３０６、およびＶＭ３  ３０８をディスパッチするために、ＭＴを指定するｓｔａｒｔ−ＶＥ命令を使用する。別の実施形態では、レベル１ハイパーバイザ３０２とそのゲストＶＭ３０４、３０６、３０８の両方は、すべてシングルスレッドである。
【００３５】
ゲスト多処理（ＭＰ）環境では、ハイパーバイザは、ゲスト構成内の複数の論理プロセッサに影響を与えることができる特定の機能を管理するためにハイパーバイザとマシンの両方によって使用される、システム制御エリア（ＳＣＡ）として知られる制御構造を維持することができる。同じＳＣＡ原点（ＳＣＡＯ）は、構成および仮想マシン内のすべてのゲスト・プロセッサのための状態記述において指定される。一実施形態では、このエリアは、共通エリア（一般に、ゲスト構成の広範な機能を調整するために使用される）と、別個のプロセッサ固有のエントリとを含むことができる。共通エリアは、たとえば、ゲスト構成内のどの仮想プロセッサが有効であるかについての情報を保持する。ＳＣＡ内の別個のプロセッサ固有のエリアは、たとえば、プロセッサ間割込みなどのプロセッサ間ゲスト機能を解釈もしくはエミュレートするため、または、各論理プロセッサのそれぞれの状態記述に容易にアクセス可能なポインタを提供するために使用され得る。一実施形態では、ＳＴのために使用されるＳＣＡは、各潜在的なゲスト・スレッドのための追加のスレッド固有エントリを追加することによって、ＭＴ使用のために拡張される。
【００３６】
コア・ディスパッチの一実施形態は、シングルスレッド上で実行されているハイパーバイザが、しばしば開始マルチスレッド仮想実行（ｓｔａｒｔ−ＭＶＥ）と呼ばれるｓｔａｒｔ−ＶＥ命令のバリエーションを使用して、そのコア上でマルチスレッド・ゲストをディスパッチすることを可能にすることができる。マルチスレッド・ゲスト内の各スレッドは、ゲスト論理中央処理ユニット（ＣＰＵ）、またはゲスト・スレッドを表すことができる。ｓｔａｒｔ−ＶＥ命令は、状態記述内の制御フィールドを介して、物理コア上のマルチスレッディング（ＭＴ）ゲスト実行を可能にすることができる。ｓｔａｒｔ−ＶＥ命令のオペランドは、コア・ディスパッチのために使用されたとき、すべてのゲスト・スレッドの状態を含む単一状態記述、または、その各々が、たとえば、単一のゲスト・スレッドの状態を表す状態記述のグループのいずれかを指定することができる。一実施形態では、論理コアは、状態記述のこのグループを含む。コア・ディスパッチは、論理コアおよびこれらのゲスト論理スレッドの各々の状態を物理コア・スレッドおよびそのスレッドにロードするために仮想実行エントリを必要とする。これらのスレッドは、互いに独立して動作する命令ストリームであり得る。様々な実施形態では、状態記述のグループは、互いからの固定オフセットとして、状態記述アドレスもしくは状態記述のリストとして、または、別個のゲスト・スレッドを表すそのグループにおける各状態記述でコアに適用する状態記述の循環リスト（リング）として、含む、いくつかの方法で指定され得る。そのような技術は、ハイパーバイザおよびマシンによる論理コア内の他のスレッドへの容易なアクセスを可能にし、論理コア全体に適合するフィールドが単一の場所で維持されることを可能にする。
【００３７】
ゲストＯＳは、単にゲストにおけるマルチスレッド化を可能にするＭＴ設定命令を発行することによって、マルチスレッド化を使用することができる。これは、ゲストＯＳがこれらの新しいスレッドを追加の独立したＣＰＵとして扱い、マルチスレッド化がない場合のようにそれらを管理することを可能にする。加えて、ゲストＯＳは、これらのスレッドがコアを共有するという事実を活用するようにこれらのスレッドを使用することができ、または、より相互依存的な方法でこれらのスレッドを動作させることができる。これは、ハイパーバイザおよびマシンにすべて透過的である。ハイパーバイザは、次いで、ハイパーバイザ自体がコアあたり単一のスレッド上で実行し続け、コア・ベースでゲストＭＴ環境の多くを管理し続けながら、これらの追加のスレッドをゲストＯＳに提供する。マルチスレッド化のＯＳの実施可能要件は、その内容が参照によりその全体において本明細書に組み込まれている、本明細書と同時に出願された、「Thread Context Preservation in a Multithreading Computer System」と題する、米国特許出願代理人整理番号ＰＯＵ９２０１４００６４ＵＳ１に詳細に記載されている。
【００３８】
コア・ディスパッチの一実施形態では、ＭＴを指定するｓｔａｒｔ−ＶＥ命令のオペランドとして指定された状態記述は、「プライマリ」状態記述であり、関連するゲスト論理スレッドは、「プライマリ」スレッドである。グループ内の他の状態記述は、本明細書では「セカンダリ」状態記述と呼ばれ、適用可能である場合、セカンダリ論理スレッドに適合する。状態記述グループがリストまたはリングのいずれかとして実装されたとき、第１のセカンダリ状態記述を指すプライマリ状態記述内の次の状態記述（ＮＳＤ）フィールドが存在することができ、第１のセカンダリ状態記述は、１）グループ内の次のセカンダリ状態記述を指すか、または、２）グループの最後を示す値を含む。リスト内の最後の状態記述内のＮＳＤ値は、プライマリ状態記述のアドレスであってもよく、その場合、リストは、状態記述のリングを形成する。
【００３９】
非ＭＴ実装では、ハイパーバイザは、一度に所与の物理コア上の１つのゲスト論理プロセッサ（本明細書では「論理スレッド」とも呼ばれる）をディスパッチする。特定の論理プロセッサが無効な状態、たとえば、停止状態または無効な待機にある場合、ハイパーバイザは、そのゲストをディスパッチしない。ＭＴ環境では、コア・ディスパッチは、ハイパーバイザが同時にコア上の複数のゲスト・スレッドをディスパッチすることを可能にする。その論理コアの状態記述グループにおける１つまたは複数のスレッドが無効である可能性に対応するために、一実施形態は、プライマリ状態記述内のスレッド有効性マスク（ＴＶＭ）を利用し、ＴＶＭの各ビットは、グループ内の対応する状態記述内の論理スレッドの、ソフトウェアの観点からの有効性を示す。
【００４０】
別の実施形態では、有効なスレッドのみが状態記述グループに含まれ、有効性指示は、必要ない。状態記述グループ内の無効な論理スレッドを含む実施形態は、ハイパーバイザが、これらの無効なスレッドに関連付けられた状態を維持することを可能にし、これらのスレッドは、将来再び有効になる可能性がある。マシンは、単に有効な状態を有するこれらのスレッドを初期化し、実行することになる。ハイパーバイザは、グループ内の少なくとも１つのスレッドが有効である場合、単にゲスト論理コアをディスパッチすることになる。
【００４１】
ここで図４を参照すると、ゲストの設計（ａｒｃｈｉｔｅｃｔｅｄ）状態の大部分を含む論理スレッドの状態記述が、一実施形態に従って全体的に示されている。この文脈では、「状態記述」という用語は、状態記述自体だけでなく、拡張として機能する、そのポインタが状態記述に存在するサテライト・ブロックも含む。図４に示すように、状態記述４００は、ゲスト汎用レジスタ（ＧＲ）４０２と、アクセス・レジスタ（ＡＲ）４０４と、制御レジスタ（ＣＲ）４０６と、ゲスト・タイマ４０８（クロック比較器およびＣＰＵタイマを含む）と、ゲスト・プレフィックス・レジスタ４１０と、仮想ＣＰＵ番号（ＶＣＮ）４１２と、プログラム状態ワード（ＰＳＷ）と、命令アドレス（ＩＡ）４１４とを含むことができる。加えて、それは、特定の命令（たとえば、ロード・プログラム状態ワード（ＬＰＳＷ）および無効化ページ・テーブル・エントリ（ＩＰＴＥ））がホストに対する遮断を要求するかどうか、または、ゲスト変換索引バッファ（ＴＬＢ）のパージが、ゲスト命令実行が開始され得る前に要求されたかどうかを示すために、遮断制御（ＩＣ）ビット４２０などの制御情報を含むことができる。状態記述はまた、図６〜図９に示すように状態記述リストおよびリングを定義するために使用される次の状態記述（ＮＳＤ）４２２を含む。プライマリ状態記述はまた、図５に記載のＴＶＭ４３０と、論理パーティション番号（ＬＰＮ）４３２とを含む。仮想ＣＰＵ番号（ＶＣＮ）４１２は、その内容が参照によりその全体において本明細書に組み込まれている、２０１４年３月２７日に出願された、「Address Expansion and Contraction in a Multithreading ComputerSystem」と題する、米国特許出願第１４／２２６９４７号に詳細に記載されているように、ＣＰＵ番号と等価であり、ＭＴモードにあるスレッド番号を含むように潜在的に調整される。
【００４２】
コア内のスレッドは、バイナリ・スレッド情報（ＴＩＤ）によって識別され得る。以下の図面における簡潔さのために、スレッドｘは、しばしば、ＴＩＤｘという用語で呼ばれ、この場合、意味は、「ＴＩＤｘを有するスレッド」である。
【００４３】
ここで図５を参照すると、スレッド有効性マスク（ＴＶＭ）５２０のブロック図が、一実施形態に従って全体的に示されている。図５に示すように、ＴＶＭ５２０のビット０  ５３０は、状態記述グループ内の論理スレッド０の有効性を表し、ビット１  ５３１は、スレッド１の有効性を表し、ビット２  ５３２は、スレッド２の有効性を表し、ビット３  ５３３は、スレッド３の有効性を表し、スレッドｎ、すなわち、このコアに関連付けられた状態記述グループ内の最後の可能な論理スレッドの有効性を表すビットｎ  ５３７まで以下同様である。ＴＶＭは、グループのためのプライマリ状態記述に存在することができる。
【００４４】
ここで図６を参照すると、固定オフセット状態記述グループ構造が、一実施形態に従って全体的に示されている。図６に示すように、状態記述グループは、互いに固定オフセット（Ｎ）で指定される。この場合、ｓｔａｒｔ−ＶＥ命令６０２のオペランドは、論理スレッド０のためのプライマリ状態記述６０３を指す。論理スレッドｘ６０５のためのセカンダリ状態記述は、プライマリ状態記述の後にＮバイトの固定オフセットで配置され、論理スレッドｙ６０７のためのセカンダリ状態記述は、スレッドｘのためのセカンダリ状態記述の後のＮバイトに配置される。これは、グループ内のすべてのスレッドについて続く。グループ内のスレッドの数は、プライマリ状態記述内のカウント、または、リスト内の最後の状態記述アドレスに続く終了マーカ、を含むいくつかの方法で決定され得る。
【００４５】
図６は、２つの場合、グループが、グループ内のすべての論理スレッドのための状態記述を、それらが有効であろうとなかろうと含む第１の場合と、有効な状態記述のみがグループに含まれる第２の場合とを表すことができる。第１の場合では、スレッドｘ６０５のための状態記述は、スレッド１の状態を表し、スレッドｙ６０７のための状態記述は、スレッド２の状態を表す。この第１の場合でのみ必要とされるＴＶＭ６２０は、これらの論理スレッドの各々の有効性を表す。第２の場合では、スレッドｘ６０５のための状態記述は、第１の有効な論理セカンダリ・スレッドの状態を表し、論理スレッドｙ６０７のための状態記述は、第２の有効なセカンダリ・スレッドの状態を表す。たとえば、スレッド１が有効ではなく、スレッド２および３が両方とも有効である場合、スレッドｘ６０５は、スレッド２を表すことになり、スレッドｙ６０７は、スレッド３を表すことになる。スレッド１は、無効であるので、スレッド１のためのグループに含まれる状態記述は、存在しないことになる。これらの同じ２つの場合はまた、以下の図７〜図９に示す実施形態に適合し得るが、場合１のみが説明され、描かれる。
【００４６】
ここで図７を参照すると、リストとして指定された状態記述グループが、一実施形態に従って全体的に示されている。この場合、ｓｔａｒｔ−ＶＥ命令７０２のオペランドは、リスト内の第１のエントリ７０４がスレッド０のためのプライマリ状態記述７０５を指し、リスト内の第２のエントリ７０６がスレッド１のためのセカンダリ状態記述７０７を指し、リスト内の第３のエントリ７０８がスレッド２のためのセカンダリ状態記述７０９を指すなど、グループ内のすべてのスレッドについて続く、状態記述アドレスのリストを表す。ＴＶＭ７２０は、これらのスレッドの各々の有効性を表す。
【００４７】
ここで図８を参照すると、リンク・リストとして指定された状態記述グループ構造が、一実施形態に従って全体的に示されている。この場合、図６に示す場合のように、ｓｔａｒｔ−ＶＥ命令８０２のオペランドは、スレッド０のためのプライマリ状態記述８０３を指すが、スレッド１のためのセカンダリ状態記述８０５のためのポインタ８０４は、プライマリ状態記述内の次の状態記述（ＮＳＤ）フィールド８０４として提供される。同様に、スレッド２のためのセカンダリ状態記述８０７のためのポインタ８０６は、スレッド１のためのセカンダリ状態記述内のＮＳＤ８０６として提供される。これは、最後のスレッドｎのための状態記述８０９内のＮＳＤ８１０がリストの終わりを示すゼロまたはなにか他のユニークな値として指定されて、グループ内のすべてのスレッドについて継続する。プライマリ状態記述８０３に設けられたＴＶＭ８２０は、これらのスレッドの各々の有効性を表す。
【００４８】
ここで図９を参照すると、循環リストまたはリングとして指定された状態記述グループ構造が、一実施形態に従って全体的に示されている。この場合は、ｓｔａｒｔ−ＶＥ命令９０２のオペランドがスレッド０のためのプライマリ状態記述９０３を指し、プライマリ状態記述９０３がスレッド１のためのセカンダリ状態記述９０５のためのＮＳＤ９０４を含み、セカンダリ状態記述９０５がスレッド２のためのセカンダリ状態記述９０７のためのＮＳＤ９０６を含み、これが最後のスレッドｎまですべてのスレッドについて継続する、図８に示す場合と同じである。しかしながら、図９に示す実施形態では、スレッドｎのための状態記述９０９内のＮＳＤ９１０は、循環リストを形成し、プライマリ状態記述９０３に戻って指す。プライマリ状態記述９０３に設けられたＴＶＭ９２０は、これらのスレッドの各々の有効性を表す。
【００４９】
コア・ディスパッチは、ハイパーバイザがコア・レベルで論理スレッドの多くの側面を管理することを可能にする。コア・ディスパッチは、しばしば、コアの複数のスレッドの仮想実行の調整をマシンに押し込めることによってスレッド管理に必要なハイパーバイザ・コードを簡略化するだけでなく、構成内のより多くのプロセッサを管理するために必要なオーバヘッドを減少させることもできる。論理パーティション（またはゲスト）のための優先度管理は、論理コア・レベルで行われ続けることができ、このタイプの管理に対するスケーリング圧力を減少させる。ハイパーバイザ自体は、ｓｔａｒｔ−ＶＥ命令を再発行する前に、その必要性（命令遮断など）がすべて満たされていることを確認するために、論理コアに関連付けられたスレッドの集合を管理する必要が依然としてある。
【００５０】
ここで図１０を参照すると、一実施形態によるコア・ディスパッチ・プロセスが、全体的に示されている。図１０に示すように、ハイパーバイザは、物理コアＮ１０１０および物理スレッドＡ１０２０上でシングルスレッド化されて実行されている。ブロック１０２２では、ハイパーバイザは、マルチスレッド・ゲスト・コアをディスパッチするために、ＭＴを指定するｓｔａｒｔ−ＶＥ命令を発行する。マシンは、ゲストがマルチスレッド化されていることを決定し、ブロック１０２４で、物理スレッドＢおよびＣを、ソフトウェアを実行するために利用可能にする。マシンは、スレッドの各々のための状態記述から対応する物理スレッドにゲスト状態をロードする。図１０に示す実施形態では、マシンは、この機能を実行するために、複数の物理スレッドを使用し、すなわち、ブロック１０２６に示すように、物理スレッドＡ１０２０上で実行されているミリコードは、物理スレッドＡにゲスト論理スレッドＸの状態をロードする。同様に、ブロック１０４６および１０６６に示すように、物理スレッドＢ１０４０およびＣ１０６０上で実行されているミリコードは、物理スレッドＢおよびＣにゲスト論理スレッドＹおよびＺの状態をロードする。ゲスト状態がロードされたら、ゲスト論理スレッドＸ、Ｙ、およびＺ上で実行されているソフトウェアは、ブロック１０２８、１０４８、および１０６８に示すように、物理スレッドＡ、Ｂ、およびＣ上で実行される。
【００５１】
ここで図１１を参照すると、仮想実行からの協調したエグジットが、一実施形態に従って全体的に示されている。図１１に示すように、ゲスト論理スレッドＸ、Ｙ、およびＺは、ブロック１１２８、１１４８、および１１６８に示すように、物理スレッドＡ１１２０、Ｂ１１４０、およびＣ１１６０上でゲストソフトウェアを実行している。１つまたは複数のゲスト・スレッドは、仮想実行からのエグジットが必要とされることを決定する。図１１を参照すると、物理スレッドＢ１１４０上で実行されているゲスト論理スレッドＹは、ブロック１１５０に示すように、仮想実行から出なければならいことを決定し、マシンに、仮想実行からエグジットするように物理スレッドＡ１１２０およびＣ１１６０に合図させる。ブロック１１３６、１１５４、および１１７４では、物理スレッドの各々の上で実行されているミリコードは、仮想実行からのエグジットを調整し、次いで、ブロック１１５６および１１７６に示すように、物理スレッドＢ１１４０およびＣ１１６０を、ソフトウェアによる使用のために利用不可能にする。物理スレッドＡ１１２０上のミリコードは、ブロック１１３８に示すように、ホスト状態をハードウェアにリロードし、これは、ブロック１１４０に示すように、物理スレッドＡ上のハイパーバイザ・ソフトウェアの実行をもたらす。ハイパーバイザは、次いで、必要に応じて、任意の保留中のゲスト遮断およびホスト割込みを処理することになる。
【００５２】
図１２は、一実施形態による、複数の論理コアを含む単一のゲスト構成のためのコア指向システム制御エリア（ＣＯＳＣＡ）のブロック図を示す。図１２に示すＣＯＳＣＡは、コア内の論理スレッド間、および異なるコア上の論理スレッド間の調整を提供するために使用され得る。ＣＯＳＣＡは、コア記述エリアを分離するために、各論理コアに１つ、ポインタでゲスト構成全体を表す共通エリアを含むことができる。各コア記述は、コアと、そのコアのための一連の連続した別個のスレッド固有の領域またはスレッド記述とを含む。別の実施形態では、コア記述は、スレッド記述の位置を提供する。提供される位置は、暗示されてもよい（たとえば、それらは、コア記述に含まれるリストであり、または、コア記述に連続するメモリ・ブロックにあってもよい）。他の実施形態では、スレッド記述を含むメモリ位置へのポインタが提供されてもよい。本明細書で使用される「位置を示す」という用語は、（たとえば、ＣＯＳＣＡ内のスレッド記述または他の要素）項目の位置を決定するこれらのいずれか、または任意の追加の方法を指すために使用される。この構造は、いくつかの状況では、特にハイパーバイザ・レベルでは、物事がコア単位で管理されることを容易にし、または他の状況では、物事がスレッドもしくはプロセッサ単位で管理されることを容易にする、ＭＴゲスト構成のツリー状表現を維持する。
【００５３】
同じＣＯＳＣＡ原点（ＣＯＳＣＡＯ）は、ゲスト構成内のすべてのゲスト・スレッドのための状態記述内のＳＣＡ原点（ＳＣＡＯ）に設けられ得、同じコア記述領域アドレス（ＣＤＡＡ）は、所与のコア内のすべてのスレッドについて提供され得る。この実施形態の利点は、それが、いくつかのハイパーバイザが提供するのが困難な可能性がある多くの隣接する実ストレージを必要としないことである。別の実施形態は、追加のレベルの間接参照を追加し、各スレッド固有エリアのためのポインタのリストを含む各コア記述を有することができ、これらの領域を含む制御ブロックが連続したものである必要性を除去する。
【００５４】
ここで図１２を参照すると、各コアに３つの論理スレッドを有する２つの論理コアを含む単一ゲスト構成のためのＣＯＳＣＡの例示的な実施形態が、全体的に示されている。一実施形態では、ＣＯＳＣＡは、（「ＣＯＳＣＡＣＡ１２６０」として図１２中に示す）ＣＯＳＣＡ共通エリア１２６０の内容と、コア記述エリア１２７０の内容と、コア記述エリア１２８０の内容とを含む。論理コア０に関連付けられた状態記述グループのためのプライマリ状態記述１２０３は、ゲスト・コア０をディスパッチするためにハイパーバイザによって使用されるｓｔａｒｔ−ＶＥ命令のオペランド１２０２として指定される。加えて、論理コア１に関連付けられた状態記述グループのためのプライマリ状態記述１２３３は、コア１をディスパッチするために使用されるｓｔａｒｔ−ＶＥ命令のオペランド１２３２として指定される。「コア０スレッド０」のためのプライマリ状態記述は、コア０スレッド１のためのセカンダリ状態記述１２１３を指すＮＳＤ０１  １２０５を含み、セカンダリ状態記述１２１３は、グループ内のコア０スレッド２のための最後のセカンダリ状態記述１２２３を指すＮＳＤ０２  １２１５を含む。同様に、論理コア１のための状態記述グループは、ＮＳＤ１１  １２３５を含むコア１スレッド０のためのプライマリ状態記述１２３３で開始し、ＮＳＤ１１  １２３５は、ＮＳＤ１２  １２４５を含むコア１スレッド１のためのセカンダリ状態１２４３を指し、ＮＳＤ１２  １２４５は、コア１スレッド２のための最後のセカンダリ状態記述１２５３を指す。このゲスト構成内の６つのスレッド１２０３、１２１３、１２２３、１２３３、１２４３、１２５３のすべてのための状態記述は、ＳＣＡＯ１２０４、ＳＣＡＯ１２１４、ＳＣＡＯ１２２４、ＣＯＳＣＡ１２３４、ＳＣＡＯ１２４４、ＳＣＡＯ１２５４に同じ値を含み、ＣＯＳＣＡ共通エリア１２６０を指す。
【００５５】
ＣＯＳＣＡ共通エリア１２６０は、図１２に示すように、ゲスト構成の広範な機能を調整するために使用されるコア・レベル情報を含む。ＣＯＳＣＡ共通エリア１２６０は、ＳＣＡコア有効性マスク（ＳＣＶＭ）１２６１を含み、ＳＣＶＭ１２６１は、ゲスト構成内の各論理コアの有効性を示し、また、各コアのためのコア記述エリア・アドレス（ＣＤＡＡ）１２６２、１２６４を含む。ＳＣＶＭ内のビットと、コア記述アドレスのアレイの両方は、コア番号によってインデックス付けされてもよい。コア０のためのコア記述エリア（ＣＤＡ）１２７０を指すＣＤＡＡ０  １２６２は、ＣＯＳＣＡ共通エリア１２６０に含まれる。加えて、コア０内のすべてのスレッドのための状態記述内のＣＤＡＡフィールド１２０６、１２１６、１２２６はまた、コア０のためのＣＤＡ１２７０を指す。コア１のためのＣＤＡ１２８０を指すＣＤＡＡ１  １２６４はまた、ＣＯＳＣＡ共通エリア１２６０に含まれ、同様に、コア１内のすべてのスレッドのための状態記述１２３６、１２４６、１２５６はまた、コア１のためのＣＤＡ１２８０を指す。コア０のためのコア記述エリア（ＣＤＡ）１２７０は、コア０内の各論理スレッドの有効性を示すＳＣＡスレッド有効性マスク（ＳＴＶＭ０）１２７１を含む。それはまた、コア０スレッド０、スレッド１、およびスレッド２のためのスレッド記述エリア１２７２、１２７４、および１２７６を含む。コア１のためのＣＤＡ１２８０は、同様に、ＳＴＶＭ１と、コア１スレッド０、スレッド１、およびスレッド２のためのスレッド記述エリア１２８２、１２８４、および１２８６とを含む。これらのスレッド記述エリア１２７２、１２７４、１２７６、１２８２、１２８４、１２８６の各々は、それぞれ、そのスレッド記述エリアに対応するスレッド、すなわちコア０スレッド０、コア０スレッド１、コア０スレッド２、コア１スレッド０、コア１スレッド１、およびコア１スレッド２のための状態記述アドレス（ＳＤＡ）１２７３、１２７５、１２７７、１２８３、１２８５、１２８７を含む。ＳＴＶＭ内のビットと、スレッド記述エリアのアレイの両方は、スレッド識別情報によってインデックス付けされてもよい。これらのＳＤＡは、ハイパーバイザがコア内のスレッドを管理するのをより容易にし、マシンがゲスト・プロセッサ間割込みを提示するのをより容易にする。
【００５６】
図１３は、図１２に示すＣＯＳＣＡを使用する一実施形態によるマルチスレッド・コアを管理するためのプロセス・フローを示す。図１３に示す例では、ブロック１３０２で、第１の物理スレッド（たとえば、状態記述１２１３によって定義されるコア０スレッド１）上で実行されているゲストオペレーティング・システム（ＯＳ）は、それが第２の論理スレッドまたはターゲット・スレッド（たとえば、状態記述１２５３によって定義されるコア１スレッド２）に通知することを決定している。ブロック１３０４では、ゲストＯＳは、たとえば、プロセッサ間割込み命令を発行することによってこれを行う。マシンは、プロセッサ間割込み命令を実行することの一部として、ゲスト・プロセッサ間割込みをエミュレートするためにＣＯＳＣＡを使用する。ターゲット論理スレッドを含む論理コアは、シグナリングが行われているのと同時にディスパッチされてもされなくてもよいので、プロセッサ間割込み命令は、マシンによってエミュレートされる。ブロック１３０６では、マシンは、ターゲット・コアの有効性を検証し、適切なＣＤＡＡ（たとえば、ターゲット・スレッドがコア１上にあるので、ＣＤＡＡ１  １２６４）を取得するために、ＳＣＶＭ（たとえば、ＳＣＶＭ１２６１）にアクセスするように、（たとえば、プロセッサ間割込み命令が論理コア０スレッド１によって実行されたので、ＳＣＡ０  １２１４を介して）ゲスト構成のための共通エリア（たとえば、ＣＯＳＣＡ共通エリア１２６０）の位置を突き止める。
【００５７】
次に、ブロック１３０８で、マシンは、ターゲット・コアのためのコア記述エリア（たとえば、ＣＤＡ１２８０）の位置を（たとえば、ＣＤＡ１  １２６４を介して）突き止める。マシンは、コア記述エリア内のＳＴＶＭ（たとえば、ＣＤＡ１２８０内のＳＴＶＭ１  １２８１）にアクセスすることによって、ターゲット・スレッドが有効であることを確認する。ブロック１３１０では、マシンは、スレッド記述エリア（たとえば、ターゲット・スレッドがスレッド２であるので、スレッド２に対応するスレッド記述エリア１２８６）の位置を突き止める。ブロック１３１２では、割込みに関する情報は、ターゲット・スレッドのためのスレッド記述エリアに記録される（たとえば、送り側スレッドのＩＤを記述エリアに入れる）。ブロック１３１４では、マシンは、ターゲット・スレッドのための状態記述（たとえば、コア１のためのセカンダリ状態記述ＴＩＤ２  １２５３）の位置を（たとえば、スレッド記述エリア１２８６内のＳＤＡ１２  １２８７を介して）突き止める。ブロック１３１６では、割込みは、ターゲット状態記述内で保留中にされる（たとえば、ＩＰビット１２５７がコア１のための状態記述ＴＩＤ２  １２５３内で設定される）。結果として、ターゲット論理プロセッサ（たとえば、コア１スレッド２）が物理スレッド上でディスパッチされ、割込みのために有効にされたとき、マシンは、割込みを、可能な場合、ゲスト・オペレーティング・システムに提示することになる。ターゲット論理プロセッサが、割込みが保留中になった時点で既にディスパッチされている場合、有効になったら割込みを行う。
【００５８】
マシンがまた、論理コア内のスレッドが共通の属性を有するという事実を利用することができる実例が存在する。たとえば、コア・ディスパッチは、本来、同じＬＰＡＲゾーンまたはパーティションに存在する論理コア上のすべてのゲスト・スレッドを有するのに適している。設計は、スレッドごとに一度の代わりにコアごとに一度、ゾーンに関連付けられた物事を実装すればよいようにすることによって、ハードウェアを最小化することができる。加えて、複雑な制御ロジック（たとえば、システムの広範な割込みの取り扱い）はまた、単一のコア値に対処すればよいので、単純化され得る。
【００５９】
一実施形態では、マルチスレッド・ゲストを表す状態記述のグループ内の各フィールド（またはフィールド内のビット）は、プライマリ、コア共通、またはスレッド固有として分類される。プライマリ・フィールドは、プライマリ状態記述にのみ存在し、論理コア内のすべてのプロセッサに適用され、コアの任意のスレッドに代わってプライマリ・フィールドになされる任意のアクセスは、関連するプライマリ状態記述からの値を使用しなければならない。この分類は、スレッド有効性マスクなどの、コアの全体的な状態を定義するフィールドのために使用される。コア共通フィールドは、論理コア内のすべてのプロセッサ間で共通であり、このフィールドは、グループ内のすべての状態記述において同じ値を有し、プロセッサの代わりにこれらのフィールドのうちの１つになされる任意のアクセスは、グループ内の任意の状態記述からの値を使用してもよい。この分類は、ＬＰ番号などの、コア全体にわたって適用されるフィールドのために使用される。ハイパーバイザは、すべての状態記述内のコア共通領域を維持するために必要とされるが、マシンは、最高のパフォーマンスを提供するものはどれでも、任意のスレッドの状態記述内のこのフィールドにアクセスすることが許可される。これらのフィールドは、しばしば、ハイパーバイザによって変更されないが、仮想実行内へのすべてのエントリにおいてマシンによってアクセスされるので、スレッド固有ではなくコア共通としてフィールドを定義することは、仮想実行エントリが、たとえば、プライマリ状態記述内の値を使用してプライマリ・スレッドからセカンダリ・スレッド機能をロードすることを可能にする。スレッド固有フィールドは、各論理スレッドに固有であり、任意の所与のスレッドの代わりにこれらのスレッドのうちの１つになされる任意のアクセスは、そのスレッドの状態記述からの値を使用しなければならない。この分類は、ゲスト・プレフィックスなどの、典型的にはスレッド間で一意的であるフィールドのために使用される。
【００６０】
一実施形態では、コア・ディスパッチの使用と、シングルスレッドを実行するハイパーバイザとをサポートするために、所与のコア内のすべてのゲスト・スレッドが同時にＳＴホストにエグジットする、仮想実行からの協調したエグジット（ＶＥエグジット）が提供され得る。協調ＶＥエグジットの文脈では、ＶＥエグジットのタイプは、３つのカテゴリ、（１）ホスト動作に属するホスト割込み、（２）ゲスト動作に属するホスト割込み、および（３）ゲスト遮断に分割され得る。ホスト外部、Ｉ／Ｏ、およびなんらかのマシン・チェック割込みは、ＶＥエグジット・カテゴリ（１）に入る。この場合、すべてのゲスト・スレッドは、ホストが割込みを処理することを可能にするために、仮想実行モードをエグジットする必要がある。この割込みは、おそらくホストに異なるゲストをディスパッチさせることになる。仮想実行モードで実行中に割込みが発生した場合、ホスト割込みは、すべての仮想実行モードをエグジットすることができるように、すべてのスレッド上で検出され得るか、または、単一のスレッド上で検出され得、単一のスレッドは、次いで、他のスレッドがエグジットすべきである場合に、他のスレッドに合図する。
【００６１】
ＶＥエグジット・カテゴリ（２）、すなわちゲストに属するホスト割込みは、いくつかのマシン・チェック割込み（訂正不能なストレージ・エラーなど）を含むことができる。非マルチスレッド状況では、これらの条件は、ホスト割込みとして提示される。１つのホスト・スレッドのみが存在するコア・ディスパッチでは、これらの例外は、ゲスト動作に属するので、複数のゲスト・スレッドが、同じホスト割込みのための明白な異なる理由を検出することが可能である。これに対応するために、コア・ディスパッチのために、適用可能なとき、これらのホスト割込みは、ゲスト遮断の新しいタイプとして対応するゲスト状態記述に代わりに示され、以下に説明するカテゴリ（３）と同じに扱われる。一実施形態では、ゲスト・メモリ参照により生じるホスト・アドレス変換障害割込みも、カテゴリ（２）に入り、ゲスト遮断の別の新たなタイプとして提示され得る。
【００６２】
ゲスト・マルチスレッド環境であっても、ＶＥエグジット・カテゴリ（２）および（３）（上記）の両方に関するゲスト遮断は、単一のゲスト・スレッドに属し、別のスレッドのゲスト実行から独立している。複数のゲスト・スレッドは、そのような条件を同時に認識することがさらに可能であり、それらのすべてを処理することをホストに要求する。典型的には、遮断が提示されたとき、ホストは、ゲストの代わりにいくらかの動作をシミュレートし、次いで、その同じゲストを再ディスパッチすることになる。これらの場合では、ホストは、シングルスレッド化されて実行されているので、すべてのゲスト・スレッドは、ホストが遮断を処理することができるようになる前に、仮想実行モードをエグジットしなければならない。これは、１つのスレッドがホストに戻るように遮断しなければならないことを決定しているとき、すべてのスレッドが自然にエグジットするのを待つことによって、または他のスレッドにエグジットするように合図することによって達成され得る。これは、「協調ＶＥエグジット」と呼ばれる。
【００６３】
各スレッドが仮想実行モードをエグジットしなければならないことを決定すると、各スレッドは、ＶＥエグジットに入り、すべての他の有効スレッドがエグジットする準備ができるまで、初期ＶＥエグジット調整ループで待機する。実施態様が必要とする場合、この調整ループに入る前にエグジットするように他のスレッドに合図する。ＶＥエグジット調整ループ内の間、最小限の割込みのみが処理される。ホスト割込みおよびゲスト遮断が適用されないとき、ゲスト・スレッドが仮想実行モードからエグジットすることを必要とする状況を可能にするために、「ノー・アクション」遮断は、遮断アクションがこのゲストに代わって必要とされないことをホストに示すために定義される。
【００６４】
すべてのスレッドが初期ＶＥエグジット調整ループに入ったら、すべての有効状態記述へのゲスト・データの記憶は、完了することができる。すなわち、ハードウェアに存在する現在のゲスト状態は、対応する状態記述に保存されるので、この論理ゲスト・スレッドは、後で再ディスパッチされ得る。制御が（典型的には、プライマリ・スレッド上で実行されている）ハイパーバイザに返される前に、セカンダリ・スレッド状態記述に対するすべての更新が完了したことを保証するために、この記憶が完了した後に、最終ＶＥエグジット調整点が必要とされる。ＶＥエグジットが完了したら、ハイパーバイザは、遮断が提示されたかどうかを決定し、そうである場合、それを適切に処理するために、リング内の各スレッドを処理することができる。そうした後、次いで、この同じゲスト論理コア、または物理プロセッサ上の異なるもののいずれかを再ディスパッチすることができる。
【００６５】
技術的効果および利点は、ＶＭ構成内のホスト（たとえば、ハイパーバイザ）のためのスレッド管理サポートを提供することを含む。ＣＯＳＣＡは、ホストがＶＭ構成内のすべてのスレッドのための状態記述に容易にアクセスすることを可能にすることによって、管理を支援するために使用され得る。
【００６６】
実施形態は、コンピュータ内の複数のスレッドを管理するための制御エリアを提供するためのシステム、方法、およびコンピュータ・プログラム製品を含む。一態様によれば、コンピュータ・システムは、１つまたは複数のコアを有する仮想マシン（ＶＭ）構成を含み、各コアは、シングルスレッド（ＳＴ）モードまたはマルチスレッディング（ＭＴ）モードで動作することが可能である。ＳＴモードは、単一のスレッドで構成され、ＭＴモードは、それぞれのコアの共有リソース上の複数のスレッドで構成される。コンピュータ・システムはまた、ＶＭ構成の１つまたは複数のコアのすべてを表す共通エリアと、ＶＭ構成内の１つまたは複数のコアの各コアのための別個のコア記述エリアとを有するコア指向システム制御エリア（ＣＯＳＣＡ）を含む。各コア記述エリアは、各々がそれぞれのコア内のスレッドを表す１つまたは複数のスレッド記述エリアの位置を示し、各スレッド記述エリアは、それぞれのスレッドの状態記述の位置を示す。コンピュータ・システムは、方法を実行するために構成を制御するように構成されたファシリティをさらに含む。方法は、ＣＯＳＣＡの内容に基づいて、ＶＭ構成の１つまたは複数のコアのスレッドを管理することを含む。
【００６７】
別の態様によれば、仮想マシン（ＶＭ）構成内の複数のスレッドを管理するためのコンピュータ実装方法が提供される。構成は、１つまたは複数のコアを含み、各コアは、シングルスレッド（ＳＴ）モードまたはマルチスレッディング（ＭＴ）モードで動作することが可能である。ＳＴモードは、単一のスレッドで構成され、ＭＴモードは、それぞれのコアの共有リソース上の複数のスレッドで構成される。方法は、ＶＭ構成の１つまたは複数のコアのすべてを表す共通エリアと、ＶＭ構成内の１つまたは複数のコアの各コアのための別個のコア記述エリアとを有するコア指向システム制御エリア（ＣＯＳＣＡ）を提供することを含む。各コア記述エリアは、各々がそれぞれのコア内のスレッドを表す１つまたは複数のスレッド記述エリアの位置を示し、各スレッド記述エリアは、それぞれのスレッドの状態記述の位置を示す。方法は、コアによって、ＣＯＳＣＡの内容に基づいて、ＶＭ構成の１つまたは複数のコアのスレッドを管理することをさらに含む。
【００６８】
さらなる態様は、仮想マシン（ＶＭ）構成内の複数のスレッドを管理するためのコンピュータ・プログラム製品を含む。構成は、１つまたは複数のコアを含み、各コアは、シングルスレッド（ＳＴ）モードまたはマルチスレッディング（ＭＴ）モードで動作することが可能である。ＳＴモードは、単一のスレッドで構成され、ＭＴモードは、それぞれのコアの共有リソース上の複数のスレッドで構成される。コンピュータ・プログラム製品は、それにより具現化されたプログラム命令を有するコンピュータ可読記憶媒体を含み、コンピュータ可読記憶媒体は、信号ではなく、プログラム命令は、処理回路に方法を実行させるために、処理回路によって可読である。方法は、ＶＭ構成の１つまたは複数のコアのすべてを表す共通エリアと、ＶＭ構成内の１つまたは複数のコアの各コアのための別個のコア記述エリアとを有するコア指向システム制御エリア（ＣＯＳＣＡ）を提供することを含む。各コア記述エリアは、各々がそれぞれのコア内のスレッドを表す１つまたは複数のスレッド記述エリアの位置を示し、各スレッド記述エリアは、それぞれのスレッドの状態記述の位置を示す。方法はまた、コアによって、ＣＯＳＣＡの内容に基づいて、ＶＭ構成の１つまたは複数のコアのスレッドを管理することを含む。
【００６９】
上記で説明した１つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、共通エリアが、１つまたは複数のコアのための１つまたは複数の別個のコア記述エリアの位置をさらに示す場合を含むことができる。
【００７０】
上記で説明した１つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、共通エリアが、１つまたは複数のコアの有効性をさらに示すコア有効性マスクを含む場合を含むことができる。
【００７１】
上記で説明した１つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、コア記述エリアが、コアに関連付けられた１つまたは複数のスレッドの有効性をさらに示すスレッド有効性マスクを含む場合を含むことができる。
【００７２】
上記で説明した１つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、各々のコア記述エリアが、共通エリアの位置をさらに示すこと、各々の状態記述が、それぞれのスレッドのスレッド記述エリアの位置をさらに示すこと、各々のスレッド記述エリアが、それぞれのコアのコア記述エリアの位置をさらに示すこと、および、各々のスレッド記述エリアが、共通エリアの位置をさらに示すこと、のうちの少なくとも１つを含むことができる。
【００７３】
上記で説明した１つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、１つまたは複数の状態記述の各々が、共通エリアの位置をさらに示す場合を含むことができる。
【００７４】
上記で説明した１つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、共通エリアが、１つまたは複数のコアのための１つまたは複数の別個のコア記述エリアの位置をさらに示し、共通エリアが、１つまたは複数のコアの有効性を示すコア有効性マスクをさらに含み、コア記述エリアが、コアに関連付けられた１つまたは複数のスレッドの有効性を示すスレッド有効性マスクをさらに含む場合を含むことができる。
【００７５】
上記で説明した１つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、管理することが、ＶＭ構成内のスレッド間の調整を提供することを含む場合を含むことができる。
【００７６】
上記で説明した１つまたは複数の特徴に加えて、または代替として、さらなる実施形態は、管理することが、スレッド記述エリアの内容を変更することを含む場合を含むことができる。
【００７７】
本明細書で使用される用語は、特定の実施形態のみを説明する目的のためであり、本発明を限定することを意図するものではない。本明細書で使用される場合、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、文脈が明確にそうでないことを示さない限り、同様に複数形を含むことを意図している。「備える」という用語または「備えている」という用語、あるいはその両方は、本明細書で使用されるとき、述べられた特徴、整数、ステップ、動作、要素、または構成要素、あるいはそれらの組合せの存在を指定するが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループ、あるいはそれらの組合せの存在または追加を排除しない。
【００７８】
以下の特許請求の範囲内のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、作用、および均等物は、特に特許請求された他の特許請求された要素との組合せで機能を実行するための任意の構造、材料、または作用を含むことを意図している。本発明の説明は、例示および説明の目的のために提示されているが、網羅的であること、または開示された形態の本発明に限定することを意図するものではない。多くの変更および変形は、本発明の範囲および要旨から逸脱することなく、当業者には明らかとなるであろう。実施形態は、本発明の原理および実用的な応用を最良に説明するため、ならびに、考えられる特定の用途に適しているような様々な変更を加えた様々な実施形態について、当業者が本発明を理解することを可能にするために、選択され、説明された。
【００７９】
本発明の様々な実施形態の説明は、例示の目的のために提示されているが、網羅的であること、または開示された実施形態に限定されることを意図するものではない。多くの変更および変形は、説明した実施形態の範囲および要旨から逸脱することなく、当業者には明らかとなるであろう。本明細書で使用される用語は、実施形態の原理、実用的な応用、もしくは市場で見られる技術を上回る技術的改善を最良に説明するため、または、本明細書に開示された実施形態を当業者が理解することを可能にするために選択された。
【００８０】
ここで図１４を参照すると、一例では、コンピュータ・プログラム製品１４００は、たとえば、本明細書に記載の実施形態の１つまたは複数の態様を提供し、容易にするために、その上にコンピュータ可読プログラム・コード手段またはロジック１４０４を記憶するために、１つまたは複数の記憶媒体１４０２を含み、媒体は、有形または非一時的、あるいはその両方であってもよい。
【００８１】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組合せであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体（または媒体）を含んでもよい。
【００８２】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持し、記憶することができる有形デバイスであり得る。コンピュータ可読記憶媒体は、たとえば、限定はしないが、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記のものの任意の適切な組合せであってもよい。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、以下の、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、消去可能プログラマブル読出し専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリースティック（Ｒ）、フロッピー（Ｒ）ディスク、パンチ・カードまたはその上に記録された命令を有する溝内の隆起構造などの機械的にエンコードされたデバイス、および上記のものの任意の適切な組合せを含む。本明細書で使用するコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波路もしくは他の伝送媒体を通って伝播する電磁波（たとえば、光ファイバ・ケーブルを通過する光パルス）、またはワイヤを通って送信される電気信号などの、一時的な信号自体として解釈されるべきではない。
【００８３】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から個々のコンピューティング／処理デバイスに、または、ネットワーク、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、あるいはそれらの組合せを介して、外部コンピュータもしくは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組合せを備えてもよい。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、個々のコンピューティング／処理デバイス内のコンピュータ可読記憶媒体に記憶するためのコンピュータ可読プログラム命令を転送する。
【００８４】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語と、「Ｃ」プログラミング言語もしくは同様のプログラミング言語などの従来の手続き型言語とを含む、１つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、スタンドアロン・ソフトウェア・パッケージとしてユーザのコンピュータ上で部分的に、ユーザのコンピュータ上で部分的におよびリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または、接続は、（たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して形成されてもよい。いくつかの実施形態では、たとえば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実行するために、電子回路をパーソナライズするようにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行してもよい。
【００８５】
本発明の態様は、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図、あるいはその両方を参照して本明細書で説明される。フローチャート図またはブロック図、あるいはその両方の各ブロック、および、フローチャート図またはブロック図、あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実装され得ることが理解されるであろう。
【００８６】
これらのコンピュータ可読プログラム命令は、コンピュータのプロセッサまたは他のプログラマブル・データ処理装置を介して実行される命令が、フローチャートまたはブロック図、あるいはその両方の１つまたは複数のブロックで指定される機能／作用を実装するための手段を作成するように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令はまた、命令が記憶されたコンピュータ可読記憶媒体がフローチャートまたはブロック図、あるいはその両方の１つまたは複数のブロックで指定される機能／作用の態様を実装する命令を含む製造品を備えるように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組合せに特定の方法で機能するよう指示することができるものであってもよい。
【００８７】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行される命令がフローチャートまたはブロック図、あるいはその両方の１つまたは複数のブロックで指定される機能／作用を実装するように、コンピュータ実装プロセスを生成するべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【００８８】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実施態様のアーキテクチャ、機能、および動作を例示する。この点で、フローチャートまたはブロック図中の各ブロックは、指定された論理機能を実装するための１つまたは複数の実行可能命令を備える、モジュール、セグメント、または命令の一部を表すことができる。いくつかの代替実施態様では、ブロックに記された機能は、図中に記された順序を外れて生じてもよい。たとえば、連続して示された２つのブロックは、実際には、実質的に同時に実行されてもよく、または、ブロックは、時には、関連する機能に応じて、逆の順序で実行されてもよい。また、ブロック図またはフローチャート図、あるいは両方の各ブロック、および、ブロック図またはフローチャート図、あるいは両方におけるブロックの組合せは、指定された機能もしくは作用を実行する、または専用ハードウェアおよびコンピュータ命令の組合せを実行させる専用ハードウェア・ベースのシステムによって実装され得ることに留意されたい。
【図１】
0006509248.tif 000002
【図２】
0006509248.tif 000003
【図３】
0006509248.tif 000004
【図４】
0006509248.tif 000005
【図５】
0006509248.tif 000006
【図６】
0006509248.tif 000007
【図７】
0006509248.tif 000008
【図８】
0006509248.tif 000009
【図９】
0006509248.tif 000010
【図１０】
0006509248.tif 000011
【図１１】
0006509248.tif 000012
【図１２】
0006509248.tif 000013
【図１３】
0006509248.tif 000014
【図１４】
0006509248.tif 000015