(57)【要約】      （修正有）【課題】プロセッサによって遂行される命令数を同期させる。【解決手段】所定の期間が経過するまで第１の反復セットによって命令を反復して実行するように第１のプロセッサに命令する。第１の反復セットの各反復内で実行される命令数は、第１の反復セットの先行する反復内で実行される命令数よりも少ない。所定の期間が経過するまで第２の反復セットによって命令を反復して実行するように第２のプロセッサに命令する。第２の反復セットの各反復内で実行される命令数は、第２の反復セットの先行する反復内で実行される命令数よりも少ない。所定の期間の間に第１のプロセッサによって実行された第１の総命令数を求めることと、所定の期間の間に第２のプロセッサによって実行された第２の総命令数を求めることと。もし、第２の総命令数が第１の総命令数よりも少なければ、第１の計算された命令数を実行するように第２のプロセッサに命令する。【選択図】図１
2014059870.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサによって遂行される命令数を同期させる方法であって、
所定の期間が経過するまで第１の複数の反復によって命令を反復して実行するように第１のプロセッサに命令することであって、前記第１の複数の反復の各反復内で実行される命令数は、前記第１の複数の反復の先行する反復内で実行される命令数よりも少ない、所定の期間が経過するまで第１の複数の反復によって命令を反復して実行するように第１のプロセッサに命令することと、
前記所定の期間が経過するまで第２の複数の反復によって命令を反復して実行するように第２のプロセッサに命令することであって、前記第２の複数の反復の各反復内で実行される命令数は、前記第２の複数の反復の先行する反復内で実行される命令数よりも少ない、前記所定の期間が経過するまで第２の複数の反復によって命令を反復して実行するように第２のプロセッサに命令することと、
前記所定の期間の間に前記第１のプロセッサによって実行された第１の総命令数を求めることと、
前記所定の期間の間に前記第２のプロセッサによって実行された第２の総命令数を求めることと、
もし、前記第２の総命令数が前記第１の総命令数よりも少なければ、第１の計算された命令数を実行するように前記第２のプロセッサに命令することと、
を備える、方法。
【請求項２】
もし、前記第１の総命令数が前記第２の総命令数よりも少なければ、第２の計算された命令数を実行するように前記第１のプロセッサに命令することを備える、請求項１記載の方法。
【請求項３】
もし、前記第１の総命令数が前記第２の総命令数以上であれば、処理を遅らせるように前記第１のプロセッサに命令することを備える、請求項１記載の方法。
【請求項４】
もし、前記第２の総命令数が前記第１の総命令数以上であれば、処理を遅らせるように前記第２のプロセッサに命令することを備える、請求項１記載の方法。
【請求項５】
前記所定の期間が経過するまで第３の複数の反復によって命令を反復して実行するように第３のプロセッサに命令することであって、前記第３の複数の反復の各反復内で実行される命令数は、前記第３の複数の反復の先行する反復内で実行される命令数よりも少ない、前記所定の期間が経過するまで第３の複数の反復によって命令を反復して実行するように第３のプロセッサに命令することを備える、請求項１記載の方法。
【請求項６】
前記所定の期間の間に前記第３のプロセッサによって実行される第３の総命令数を求めることを備える、請求項５記載の方法。
【請求項７】
もし、前記第３の総命令数が前記第１の総命令数または前記第２の総命令数よりも少なければ、第３の計算された命令数を実行するように前記第３のプロセッサに命令することを備える、請求項６記載の方法。
【請求項８】
もし、前記第３の総命令数が前記第１の総命令数以上であり、かつもし、前記第３の総命令数が前記第２の総命令数以上であれば、処理を遅らせるように前記第３のプロセッサに命令することを備える、請求項６記載の方法。
【請求項９】
もし、前記第１の総命令数が前記第２の総命令数または前記第３の総命令数よりも少なければ、前記第２の計算された命令数を実行するように前記第１のプロセッサに命令することを備える、請求項６記載の方法。
【請求項１０】
もし、前記第１の総命令数が前記第２の総命令数以上であり、かつもし、前記第１の総命令数が前記第３の総命令数以上であれば、処理を遅らせるように前記第１のプロセッサに命令することを備える、請求項６記載の方法。
【請求項１１】
もし、前記第２の総命令数が前記第１の総命令数または前記第３の総命令数よりも少なければ、前記第１の計算された命令数を実行するように前記第２のプロセッサに命令することを備える、請求項６記載の方法。
【請求項１２】
もし、前記第２の総命令数が前記第１の総命令数以上であり、かつもし、前記第２の総命令数が前記第３の総命令数以上であれば、処理を遅らせるように前記第２のプロセッサに命令することを備える、請求項６記載の方法。
【請求項１３】
入力データをシステム内に受け取ることと、
前記入力データを複数のプロセッサに提供することと、
前記複数のプロセッサからのそれぞれの複数の出力を生成するために前記入力データを用いてアプリケーションコードを実行することと、
合意出力を生成するために前記それぞれの複数の出力に分散合意アルゴリズムを適用することと、
を備える方法であって、
前記複数のプロセッサは、
所定の期間が経過するまで第１の複数の反復によって命令を反復して実行するように構成される第１のプロセッサであって、前記第１の複数の反復の各反復内で実行される命令数は、前記第１の複数の反復の先行する反復内で実行される命令数よりも少ない、第１のプロセッサ、および
前記所定の期間が経過するまで第２の複数の反復によって命令を反復して実行するように構成される第２のプロセッサであって、前記第２の複数の反復の各反復内で実行される命令数は、前記第２の複数の反復の先行する反復内で実行される命令数よりも少ない、第２のプロセッサ、
を備える、
方法。
【請求項１４】
前記入力データを実行することが、前記所定の期間の間に前記第１のプロセッサによって実行された第１の総命令数を求めること、および前記所定の期間の間に前記第２のプロセッサによって実行された第２の総命令数を求めることを備える、請求項１３記載の方法。
【請求項１５】
前記入力データを実行することが、もし、前記第２の総命令数が前記第１の総命令数よりも少なければ、計算された命令数を実行するように前記第２のプロセッサに命令することを備える、請求項１４記載の方法。
【請求項１６】
前記入力データを実行することが、もし、前記第２の総命令数が前記第１の総命令数以上であれば、処理を遅らせるように前記第２のプロセッサに命令することを備える、請求項１４記載の方法。
【請求項１７】
プロセッサを同期させるシステムであって、
所定の期間が経過するまで第１の複数の反復によって命令を反復して実行するように構成される第１のプロセッサであって、前記第１の複数の反復の各反復内で実行される命令数は、前記第１の複数の反復の先行する反復内で実行される命令数よりも少ない、第１のプロセッサと、
前記所定の期間が経過するまで第２の複数の反復によって命令を反復して実行するように構成される第２のプロセッサであって、前記第２の複数の反復の各反復内で実行される命令数は、前記第２の複数の反復の先行する反復内で実行される命令数よりも少ない、第２のプロセッサと、
前記所定の期間が経過するまで第３の複数の反復によって命令を反復して実行するように構成される第３のプロセッサであって、前記第３の複数の反復の各反復内で実行される命令数は、前記第３の複数の反復の先行する反復内で実行される命令数よりも少ない、第３のプロセッサと、
を備える、システム。
【請求項１８】
もし、前記第１の総命令数が前記第２または前記第３の総命令数よりも少なければ、計算された命令数を実行するように前記第１のプロセッサに命令し、もし、前記第１の総命令数が前記第２および前記第３の総命令数以上であれば、処理を遅らせるように前記第１のプロセッサに命令するように構成される第４のプロセッサを備える、請求項１７記載のシステム。
【請求項１９】
もし、前記第２の総命令数が前記第１または前記第３の総命令数よりも少なければ、計算された命令数を実行するように前記第２のプロセッサに命令し、もし、前記第２の総命令数が前記第１および前記第３の総命令数以上であれば、処理を遅らせるように前記第２のプロセッサに命令するように構成される第４のプロセッサを備える、請求項１７記載のシステム。
【請求項２０】
もし、前記第３の総命令数が前記第１または前記第２の総命令数よりも少なければ、計算された命令数を実行するように前記第３のプロセッサに命令し、もし、前記第３の総命令数が前記第１および前記第２の総命令数以上であれば、処理を遅らせるように前記第３のプロセッサに命令するように構成される第４のプロセッサを備える、請求項１７記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願明細書において開示されている主題はプロセッサに関し、より詳細には、プロセッサの命令実行を同期させるシステムおよび方法に関する。
【背景技術】
【０００２】
各種さまざまなアプリケーション内で命令を実行するために、プロセッサ（例えば、中央処理装置（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ、ＣＰＵ）、マイクロプロセッサ、等）が用いられる。例えば、高整合性、可用性、および保証の要件を有するセーフティクリティカルかつ／またはミッションクリティカルなアプリケーション内で命令を実行するために、プロセッサが用いられ得る。このようなアプリケーションは、アビオニクス、ロケット工学、宇宙船、軍事用途、原子力発電所などを含んでよい。このようなアプリケーションでは、２個以上のプロセッサが、特定の時間内に特定の命令数を実行するように構成され得る。例えば、２個以上のプロセッサが、実質的に同時に動作を開始および／または終了するように、その２個以上のプロセッサを同期して動作するように構成され得る。残念ながら、もし、２個以上のプロセッサが実質的に同時に動作を開始および／または終了しなければ、その２個以上のプロセッサからの結果は信頼できずかつ／または使用不可能となり得る。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第７８１７５６５号明細書
【発明の概要】
【０００４】
１つの実施形態によれば、プロセッサによって遂行される命令数を同期させる方法が、所定の期間が経過するまで第１の反復セットによって命令を反復して実行するように、第１のプロセッサに命令することを含む。第１の反復セットの各反復内で実行される命令数は、第１の反復セットの先行する反復内で実行される命令数よりも少ない。方法は、所定の期間が経過するまで第２の反復セットによって命令を反復して実行するように、第２のプロセッサに命令することも含む。第２の反復セットの各反復内で実行される命令数は、第２の反復セットの先行する反復内で実行される命令数よりも少ない。方法は、所定の期間の間に第１のプロセッサによって実行された第１の総命令数を求めることと、所定の期間の間に第２のプロセッサによって実行された第２の総命令数を求めることと、を含む。方法は、もし、第２の総命令数が第１の総命令数よりも少なければ、第１の計算された命令数を実行するように第２のプロセッサに命令することも含む。
【０００５】
別の実施形態によれば、方法が、入力データをシステム内に受け取ることと、入力データを複数のプロセッサに提供することと、プロセッサからのそれぞれの数の出力を生成するために入力データを用いてアプリケーションコードを実行することと、合意出力を生成するためにそれぞれの数の出力に分散合意アルゴリズムを適用することと、を含む。プロセッサは、所定の期間が経過するまで第１の反復セットによって命令を反復して実行するように構成される第１のプロセッサを含む。第１の反復セットの各反復内で実行される命令数は、第１の反復セットの先行する反復内で実行される命令数よりも少ない。プロセッサは、所定の期間が経過するまで第２の反復セットによって命令を反復して実行するように構成される第２のプロセッサも含む。第２の反復セットの各反復内で実行される命令数は、第２の反復セットの先行する反復内で実行される命令数よりも少ない。
【０００６】
さらなる実施形態によれば、プロセッサを同期させるシステムが、所定の期間が経過するまで第１の反復セットによって命令を反復して実行するように構成される第１のプロセッサを含む。第１の反復セットの各反復内で実行される命令数は、第１の反復セットの先行する反復内で実行される命令数よりも少ない。システムは、所定の期間が経過するまで第２の反復セットによって命令を反復して実行するように構成される第２のプロセッサも含む。第２の反復セットの各反復内で実行される命令数は、第２の反復セットの先行する反復内で実行される命令数よりも少ない。システムは、所定の期間が経過するまで第３の反復セットによって命令を反復して実行するように構成される第３のプロセッサを含む。第３の反復セットの各反復内で実行される命令数は、第３の反復セットの先行する反復内で実行される命令数よりも少ない。
【０００７】
これらおよびその他の本発明の特徴、態様、および利点は、添付の図面を参照しながら以下の詳細な説明を読めばより良く理解されるようになろう。図面全体を通じて、同様の符号は同様の部分を表す。
【図面の簡単な説明】
【０００８】
【図１】２個以上の同期されたプロセッサを用いることができる高整合性システムの実施形態のブロック図である。
【図２】２個以上の同期されたプロセッサを用いることができる高整合性システムの別の実施形態のブロック図である。
【図３】複数のプロセッサの動作を制御するためのハイパーバイザを有するマルチコアプロセッサを有する高整合性システムの実施形態のブロック図である。
【図４】図３のマルチコアプロセッサの略図である。
【図５】プロセッサによって実行される命令を制御する方法の実施形態のタイミング図である。
【図６】複数のプロセッサを同期させる方法の実施形態のタイミング図である。
【図７】プロセッサによって実行される命令を制御する方法の実施形態のフローチャートである。
【発明を実施するための形態】
【０００９】
本開示の１つまたは複数の特定の実施形態が以下に説明される。これらの実施形態の簡潔な説明を提供するために、本明細書においては実際の実装の特徴をすべて記載することはできない。あらゆるエンジニアリングまたは設計プロジェクトにおけるように、あらゆるこうした実際の実装の開発では、実装によって異なり得る、システム関連および業務関連の制約条件の順守等の、開発者の特定の目的を達成するために、数多くの実装固有の決定がなされなければならないことを理解されたい。さらに、このような開発努力は複雑で時間のかかるものとなり得ようが、それにもかかわらず、本開示の利益を得る当業者にとっては、通常の設計、製作、および製造の仕事であろうことを理解されたい。
【００１０】
本発明の種々の実施形態の要素を紹介する際、冠詞「ａ」、「ａｎ」、「ｔｈｅ」、および「ｓａｉｄ」は、その要素が１つまたは複数あることを意味するように意図されている。用語「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、および「有する（ｈａｖｉｎｇ）」は、包括的であり、列挙されている要素以外の追加の要素が存在してもよいことを意味するように意図されている。
【００１１】
図１は、２個以上の同期されたプロセッサを用いることができる高整合性システム１０の実施形態のブロック図である。理解され得るように、高整合性システム１０は、高整合性（例えば、正しい答えに到達する可能性が高いこと）、高可用性（例えば、答えを送り出すことができる機能システム）、かつ／または高保証（例えば、システムが正しいソフトウェアを走らせているという確かさ）のシステムであることができる。例えば、高整合性システム１０は、１時間毎に（例えば、１飛行時間毎に）約１．０×１０-9未満の単位時間当たりの故障（ｆａｉｌｕｒｅ  ｉｎ  ｔｉｍｅ、ＦＩＴ）率を有するように設計され得る。或る実施形態は、高整合性かつ高可用性のシステムを提供するために、３つ以上の同期されたプロセッサを含んでよい。従って、高整合性システム１０は、リアルタイムのセーフティクリティカルなアビオニクスアプリケーション（例えば、航空機）内で用いられるように設計され得る。
【００１２】
高整合性システム１０は、アプリケーション１４を保持するためのメモリ１２を含む。さらに、アプリケーション１４は、１個または複数のプロセッサ１６、１８、および２０に実行可能命令を提供するように構成されている。理解され得るように、プロセッサ１６、１８、および２０の各々のためのアプリケーション１４は同じ機能アプリケーションであり、１個または複数のプロセッサ１６、１８、および２０に実行可能命令を提供する。従って、高整合性システム１０は、プラットフォーム（例えば、プロセッサ１６、１８、および２０）が整合性および可用性を提供するように設計されている。このような構成では、プラットフォームが複雑な設計を含んでよく、一方、アプリケーション１４が単純化された設計を含む。或る実施形態では、アプリケーション１４が整合性を提供するように設計され得る。このような構成では、プラットフォームが単純な設計を含んでよく、一方、アプリケーション１４が、論理に高整合性、高可用性、および高保証を提供するために、複雑な設計を含む。本実施形態に示されているように、プロセッサ１６、１８、および２０はシステムバス２２に結果を提供する。例えば、実行された命令の結果がプロセッサ１６、１８、および２０からシステムバス２２に提供され得る。
【００１３】
３つのプロセッサ１６、１８、および２０のみが示されているが、高整合性システム１０が含むプロセッサはもっと少なくてもよいし、もっと多くてもよい。例えば、或る実施形態において、１時間当たり約１．０×１０-11未満のＦＩＴ率を有する設計では、各プロセッサが約１．０×１０-3のＦＩＴ率を有する、５個または６個のプロセッサが用いられ得る。ＦＩＴ率の計算には多くの仮定および変数を用いていることに留意されたい。別の例として、１時間当たり約１．０×１０-15未満のＦＩＴ率を有する設計では、６個、７個、または８個のプロセッサが用いられ得る。プロセッサ１６、１８、および２０は各々、同じ入力を受けてよく、同じ出力を提供するように設計されていることができる。従って、プロセッサ１６、１８、および２０からの出力は、プロセッサ１６、１８、および２０からの出力が同じであることを検証するために、リアルタイムで同期され得る。同期されたプロセッサ１６、１８、および２０を用いることで、高整合性システム１０は信頼度の高い結果をもたらすことができる。
【００１４】
同期されたプロセッサ１６、１８、および２０によってもたらされる信頼度の高い結果は、高整合性、可用性、および保証の要求条件を満たすことができる。それ故、高整合性システム１０は、セーフティクリティカルかつ／またはミッションクリティカルなアプリケーションのために用いられ得る。従って、高整合性システム１０は、特別なハードウェアを用いなくても、効率的で費用効果の高い形で動作することができる。
【００１５】
図２は、２個以上の同期されたプロセッサを用いることができる高整合性システム２６の実施形態のブロック図である。高整合性システム２６は第１の複製状態機械２８および第２の複製状態機械３０を含む。第１の複製状態機械２８は、各プロセッサ３４、３６、および３８に全く同じように提供される入力３２（例えば、入力データ）を有する。命令を実行した後、プロセッサ３４、３６、および３８は同期された出力を提供する。その後、第１の複製状態機械２８は、第１の複製状態機械２８から単一の出力を生じさせる分散合意４０（例えば、アルゴリズム）を遂行する。さらに、第２の複製状態機械３０は、各プロセッサ４４、４６、および４８に全く同じように提供される入力４２（例えば、入力データ）を有する。或る実施形態では、入力３２および４２は同じである。命令を実行した後、プロセッサ４４、４６、および４８は各々、同期された出力を提供する。その後、第２の複製状態機械３０は、第２の複製状態機械３０から単一の出力を生じさせる分散合意５０（例えば、アルゴリズム）を遂行する。
【００１６】
第１および第２の複製状態機械２８および３０からの出力は、分散合意４０または分散合意５０のいずれかを用いるのを容易にする冗長度を提供する。例えば、第１の複製状態機械２８の分散合意４０が答えを算出すれば、その答えが用いられる。しかし、第１の複製状態機械２８の分散合意４０が答えを算出しなければ、第２の複製状態機械３０の分散合意５０からの答えが用いられる。それ故、第１および第２の複製状態機械２８および３０の冗長度は可用性の向上を容易にする。本実施形態を用いれば、１時間当たり約１．０×１０-15未満のＦＩＴ率が得られ得ることに留意されたい。
【００１７】
理解され得るように、高整合性システム２６は分散合意のために任意の適当なアルゴリズムを用いることができる。例えば、高整合性システム２６は、とりわけ、基本ｐａｘｏｓ（ｂａｓｉｃ  ｐａｘｏｓ）、マルチｐａｘｏｓ（ｍｕｌｔｉ−ｐａｘｏｓ）、廉価ｐａｘｏｓ（ｃｈｅａｐ  ｐａｘｏｓ）、高速ｐａｘｏｓ（ｆａｓｔ  ｐａｘｏｓ）、汎用ｐａｘｏｓ（ｇｅｎｅｒａｌｉｚｅｄ  ｐａｘｏｓ）、ビザンチンマルチｐａｘｏｓ（ｂｙｚａｎｔｉｎｅ  ｍｕｌｔｉ−ｐａｘｏｓ）、高速ビザンチンマルチｐａｘｏｓ（ｆａｓｔ  ｂｙｚａｎｔｉｎｅ  ｍｕｌｔｉ−ｐａｘｏｓ）、ストレージレスｐａｘｏｓ（ｓｔｏｒａｇｅ−ｌｅｓｓ  ｐａｘｏｓ）、コーピングｐａｘｏｓ（ｃｏｐｉｎｇ  ｐａｘｏｓ）、ワンコレクトｐａｘｏｓ（ｏｎｅ−ｃｏｒｒｅｃｔ  ｐａｘｏｓ）、高速ｐａｘｏｓ  Ｂ（ｆａｓｔ  ｐａｘｏｓ  Ｂ）、情報理論ビザンチンｐａｘｏｓ（ｉｎｆｏｒｍａｔｉｏｎ  ｔｈｅｏｒｅｔｉｃ  ｂｙｚａｎｔｉｎｅ  ｐａｘｏｓ）、Ｃｈａｎｄｒａ−Ｔｏｕｅｇ（ＣＴ）、Ｍｏｓｔｅｆａｏｕｉ−Ｒａｙｎａｌ（ＭＲ）、クエリ更新（ｑｕｅｒｙ  ｕｐｄａｔｅ、Ｑ／Ｕ）、ハイブリッドクォーラム（ｈｙｂｒｉｄ−ｑｕｏｒｕｍ、ＨＱ）、ｚｙｚｚｙｖａ、ａａｒｄｖａｒｋ、ｕｐｒｉｇｈｔ、Ｂｒｏｏｋｓ−Ｉｙｅｎｇａｒ、実用的ビザンチン・フォールトトレラント性（ｐｒａｃｔｉｃａｌ  ｂｙｚａｎｔｉｎｅ  ｆａｕｌｔ  ｔｏｌｅｒａｎｃｅ、ＰＢＦＴ）、および／またはａｌｉｐｈを用いることができる。
【００１８】
上述したように、プロセッサ３４、３６、および３８は各々、同期された出力を提供すことができる。さらに、プロセッサ４４、４６、および４８は各々、同期された出力を提供すことができる。理解され得るように、プロセッサは、リアルタイム同期を提供する任意の適当な方法で同期され得る。従って、高整合性システム２６の分散合意４０および５０は、信頼度が高くかつ／または使用可能な結果を提供すことができる。
【００１９】
図３は、複数のプロセッサの動作を制御するためのハイパーバイザを有する第１のマルチコアプロセッサ６２を有する高整合性システム６０の実施形態のブロック図である。高整合性システム６０は、第１のマルチコアプロセッサ６２、第２のマルチコアプロセッサ６４、および第３のマルチコアプロセッサ６６を含む。本願明細書においてはマルチコアプロセッサが記載されているが、高整合性システム６０は、任意の適当な数のコア（例えば、１個、２個、４個、８個、１６個、等）を有するプロセッサを含んでよい。さらに、マルチコアプロセッサ６２、６４、および６６の各々は、命令を実行するためのアプリケーションプロセッサ６８、７０、および７２、ならびにアプリケーションプロセッサ６８、７０、および７２の命令実行を制御し、分散合意アルゴリズムを実行するように構成されるＩ／Ｏプロセッサ７４を含む。マルチコアプロセッサ６２、６４、および６６は、システムバス７６および７８を用いて相互に通信するとともに外部デバイスと通信する。２本のシステムバス７６および７８が示されているが、高整合性システム６０は任意の適当な数のバス（例えば、１本、２本、４本、等）を含んでよい。図示のように、マルチコアプロセッサ６２、６４、および６６の各々からのアプリケーションプロセッサ６８は複製状態機械８０を形成すことができる。さらに、マルチコアプロセッサ６２、６４、および６６の各々からのアプリケーションプロセッサ７０は複製状態機械８２を形成すことができる。さらに、マルチコアプロセッサ６２、６４、および６６の各々からのアプリケーションプロセッサ７２は複製状態機械８４を形成すことができる。或る実施形態では、マルチコアプロセッサ６２、６４、および６６から割り当てられるプロセッサコアの数が変化してよく、それにより、利用可能な総数よりも少ないプロセッサコアが割り当てられ得る、マルチコアプロセッサ６２、６４、および６６の各々から異なる数のプロセッサコアが割り当てられ得る、などのようになる。或る実施形態では、高整合性アプリケーションは整合性チェックを用いることができるが、高可用性は用いなくてもよく、高整合性アプリケーションには２個のプロセッサコアだけ割り当てることができる。他の実施形態では、高整合性アプリケーションは、高整合性アプリケーションに各マルチコアプロセッサ６２、６４、および６６から３個以上のプロセッサコアを割り当てることによって、高可用性を達成すことができる。
【００２０】
図４は、第１のマルチコアプロセッサ６２の略図をさらに示す。第２のマルチコアプロセッサ６４および第３のマルチコアプロセッサ６６は第１のマルチコアプロセッサ６２と同じものを含んでよいことに留意されたい。図示のように、第１のマルチコアプロセッサ６２はハイパーバイザ８６（例えば、仮想マシンマネージャ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｍａｎａｇｅｒ、ＶＭＭ））を含む。本実施形態では、ハイパーバイザ８６はタイプ１ハイパーバイザである。しかし、他の実施形態では、任意の適当なハイパーバイザ（例えば、タイプ２）が用いられ得る。理解され得るように、タイプ１ハイパーバイザとは、ホストのハードウェア上で直接走り、ハードウェアを制御し、ゲストオペレーティングシステムを管理するハイパーバイザであることができる（例えば、ＶＭｗａｒｅ  ｖＳｐｈｅｒｅ、Ｏｒａｃｌｅ  ＶＭ  Ｓｅｒｖｅｒ  ｆｏｒ  ＳＰＡＲＣ、Ｃｉｔｒｉｘ  ＸｅｎＳｅｒｖｅｒ、ＫＶＭ、Ｍｉｃｒｏｓｏｆｔ  Ｈｙｐｅｒ−Ｖ  ハイパーバイザ、など）。さらに、タイプ２ハイパーバイザとは、従来のオペレーティングシステム環境内で走るハイパーバイザであることができる（例えば、ＢＨｙＶｅ、ＶＭｗａｒｅ  Ｗｏｒｋｓｔａｔｉｏｎ、ＶｉｒｔｕａｌＢｏｘ）。組み込みリアルシステムの場合には、ハイパーバイザ技術は、ＭＩＬＳ  ＲＴＯＳ  またはＡＲＩＮＣ−６５３  ＲＴＯＳ内で用いられるセパレーションカーネルに基づくものであることができる（例えば、Ｇｒｅｅｎ  Ｈｉｌｌｓ  ＩＮＴＥＧＲＩＴＹおよびＩＮＴＥＧＲＩＴＹ−１７８、Ｗｉｎｄ  Ｒｉｖｅｒ  ＶｘＷｏｒｋｓ  ＭＩＬＳおよび６５３、ＬｙｎｕｘＷｏｒｋｓ  ＬｙｎｘＳｅｃｕｒｅおよびＬｙｎｘＯＳ−１７８、等）。第１のマルチコアプロセッサ６２は、プロセッサ６８、７０、７２、および７４に提供され得るオンチップリソース８８も含む。例えば、オンチップリソース８８は、ネットワークリソース、区画リソース、セキュリティリソース、などを含んでよい。
【００２１】
アプリケーションプロセッサ６８（ＶＭ区画１）、アプリケーションプロセッサ７０（ＶＭ区画２）、およびアプリケーションプロセッサ７２（ＶＭ区画３）は各々、同様に構成され得る。従って、アプリケーションプロセッサ６８、７０、および７２は各々、第１のマルチコアプロセッサ６２のハードウェアにアクセスするためにハイパーバイザ８６と対話するゲストオペレーティングシステム（ｇｕｅｓｔ  ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ、ゲストＯＳ）９０（例えば、Ｌｉｎｕｘ(登録商標）、Ｗｉｎｄｏｗｓ(登録商標）、組み込みＲＴＯＳ、等）を用いて動作する。或る実施形態では、アプリケーションプロセッサ６８、７０、および７２は各々、ゲストＯＳ９０の代わりに「ベアメタル」環境（例えば、Ａｄａランタイム）を用いて動作することができる。さらに、ゲストＯＳ９０に提供された命令を実行するために、１つまたは複数のアプリケーション９２および９４がゲストＯＳ９０によって実行され得る。アプリケーションプロセッサ６８、７０、および７２は、対応する「サーバ」（例えば、ドライバ）にアクセスするように構成された仮想ディスククライアント９６および仮想ネットワークインタフェースカード（ｎｅｔｗｏｒｋ  ｉｎｔｅｒｆａｃｅ  ｃａｒｄ、ＮＩＣ）クライアント９８等の、「クライアント」を含んでよい。さらに、アプリケーションプロセッサ６８、７０、および７２は各々、プロセッサ６８、７０、および７２内に実装される実関数であるコア構造１００（例えば、リタイア命令カウンタ（ｒｅｔｉｒｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｃｏｕｎｔｅｒ、ＲＩＣ）およびクロック）を含む。加えて、アプリケーションプロセッサ６８、７０、および７２は、仮想クロックサーバにアクセスするために用いられる仮想クロッククライアント１０２を含んでもよい。
【００２２】
図示のように、Ｉ／Ｏプロセッサ７４もゲストＯＳ９０、仮想ディスク９６、および仮想ＮＩＣ９８を含む。さらに、Ｉ／Ｏプロセッサ７４は、分散合意アルゴリズム１０４を実行するように構成される。Ｉ／Ｏプロセッサ７４は、（例えば、仮想ディスククライアント９６を介して）ディスクリソースへのアクセスを提供するためのサーバとして機能するディスクドライバ１１０、および（例えば、ＮＩＣクライアント９８を介して）ネットワークへのアクセスを提供するためのサーバとして機能するネットワークインタフェースカード（ＮＩＣ）ドライバ１１２も含む。Ｉ／Ｏプロセッサ７４は、他のプロセッサ６８、７０、および７２にまたがって分散合意論理を遂行するように構成される。さらに、Ｉ／Ｏプロセッサ７４はコア構造１１４（例えば、リタイア命令カウンタ（ＲＩＣ）、クロック、ＮＩＣ、およびディスク）を含む。さらに、プロセッサ７４は、プロセッサ６８、７０、および７２（例えば、処理レーン）の間の同期を容易にするために仮想クロッククライアント１０２に仮想クロックを提供するための仮想クロックサーバ１１６を含む。従って、Ｉ／Ｏプロセッサ７４は、アプリケーションプロセッサ６８、７０、および７２と他のハードウェアとの間のインタフェースをとるように構成され、それにより、アプリケーションプロセッサ６８、７０、および７２が命令を受け取って実行することを可能とする。さらに、図示のように、プロセッサ６８、７０、７２、および７４は各々、ゲストＯＳ９０を含み、そのため、プロセッサは動作を独立して遂行することができる。アプリケーションプロセッサ６８、７０、および７２は、隠れた変数（例えば、処理中のデータに付加される情報）を有しない複製状態機械として動作するように構成され得ることに留意されたい。例えば、アプリケーションプロセッサ６８、７０、および７２は、情報が受け取られ得るように（例えば、入力データ）、命令が実行され得るように、ならびにいずれのアプリケーションプロセッサ６８、７０、および７２からも結果が同様に出力される（例えば、結果が同じである）ように動作するように構成され得る。従って、アプリケーションプロセッサ６８、７０、および７２に同じ入力が提供されれば、同じ出力が得られ得る。さらに、出力は、アプリケーションプロセッサ６８、７０、および７２が、同期された時間間隔で処理を開始および／または終了し、目に見える相違のない同一の（例えば、一致した）結果をもたらすように、同期され得る。
【００２３】
図５は、プロセッサによって実行される命令を制御する方法の実施形態のタイミング図１２０である。図示のように、命令はタイムライン１２２に沿って実行される。タイムライン１２２の左手側に第１の時刻同期信号１２４（例えば、クロック信号）が示されている。さらに、タイムライン１２２の中央部に向かって第２の時刻同期信号１２６が示されている。継続時間１２８は第１の時刻同期信号１２４と第２の時刻同期信号１２６との間の時間である。理解され得るように、継続時間１２８は任意の適当な継続時間であることができる。例えば、或る実施形態では、継続時間１２８は約２５０μｓ＋／−１０μｓであることができる。さらに、タイムライン１２２の右手側に第３の時刻同期信号１３０が示されている。継続時間１３２は第２の時刻同期信号１２６と第３の時刻同期信号１３０との間の時間の差であり、継続時間１２８と大体同じである。理解され得るように、タイミング図１２０に示されている同じパターンがプロセッサの動作の間、繰り返され得る。従って、任意の２つの同期信号の間の継続時間は、プロセッサ、アプリケーション、クロック、タイミングなどに基づく任意の適当な時間であることができる（例えば、約２５０μｓ＋／−１０μｓ）。
【００２４】
或る実施形態では、時刻同期信号同士の間にプロセッサによって実行される命令数を最大にし、時刻同期信号が発生している間には命令を実行しないことが望まれ得る。従って、第２の時刻同期信号１２６の前の時間窓１３４内で命令の実行を停止することが望まれ得る。さらに、継続時間１３６（例えば、所定の期間）は、第１の時刻同期信号１２４と時間窓１３４の開始時刻との間の総時間を示している。継続時間１３６は継続時間１２８よりも短いことに留意されたい。或る実施形態では、継続時間１３６が約２３０μｓであってよく、時間窓１３４の継続時間が約２０μｓであることができる。
【００２５】
実施形態によっては、プロセッサによって実行される総命令数が制御され得る。１つの例では、プロセッサによって実行される命令数は、各反復内で実行される命令数が、前の反復内で実行された命令数のおおよそ半分になる幾何数列に従ってよい。例えば、継続時間１３６の間にプロセッサが実行する推定総命令数が（例えば、継続時間１３６に少なくとも一部基づいて）計算され得る。プロセッサ（例えば、プロセッサ６８、７０、７２）によって実行される命令を制御する方法の１番目の反復の間には、推定総命令数の約半分が実行され得る。例えば、第１の時刻同期信号１２４と時刻１３８との間に、推定総命令数の約半分が実行され得る。その後、プロセッサ（例えば、プロセッサ６８、７０、７２）は、先行する反復内で継続時間１３６が経過するまで実行された以前の命令数より少ない命令数を現在の反復の間に反復して実行するように（例えば、プロセッサ７４によって）命令され得る。例えば、時刻１３８と時刻１４０との間に、プロセッサは、第１の時刻同期信号１２４と時刻１３８との間に実行された命令の約半分を実行するように命令され得る。さらに、時刻１４０と時刻１４２との間に、プロセッサは、時刻１３８と時刻１４０との間に実行された命令の約半分を実行するように命令され得る。図示のように、時刻１４２は時間窓１３４の範囲内にない。従って、時刻１４２と時刻１４４との間に、プロセッサは、時刻１４０と時刻１４２との間に実行された命令の約半分を実行するように命令され得る。時刻１４４は時間窓１３４の範囲内にあり、従って、継続時間１３６が経過した。理解され得るように、プロセッサは、各反復が完了した後に、インジケーション（例えば、指紋、他のプロセッサへのメッセージ、実行するべき追加命令の決定、タイマ割り込みの発生、等）を送ることができる。
【００２６】
継続時間１３６の間に実行された総命令数は任意の適当な方法で求められ得る。例えば、継続時間１３６の間に実行された総命令数は、第１の時刻同期信号１２４と時刻１４４との間に実行される命令数を合計すること（すなわち、加算すること）によって求められ得る。別の例として、継続時間１３６の間に実行された総命令数は、リタイア命令カウンタ（ＲＩＣ）からの計数にアクセスすること（例えば、それを読み出すこと）によって求められ得る。
【００２７】
或る実施形態では、継続時間１３６の間に実行された総命令数が所望よりも少なくなる場合がある。従って、プロセッサは、継続時間１３６が経過した後に、計算された命令数を実行するように命令され得る。対照的に、もし、継続時間１３６の間に実行された総命令数が所望の総命令数以上になれば、プロセッサは継続時間１３６の後の期間の間の処理を遅らせることができる。
【００２８】
先と同様に、第２の時刻同期信号１２６の後の継続時間１３２の間において、第３の時刻同期信号１３０の前に時間窓１４６が配され得る。第３の時刻同期信号１３０の前に実行される命令数を制御するために、時間窓１４６内で命令の実行を停止することが望まれ得る。さらに、継続時間１４８（例えば、所定の期間）は、第２の時刻同期信号１２６と時間窓１４６の開始時刻との間の総時間を示している。継続時間１４８は継続時間１３２よりも短いことに留意されたい。
【００２９】
同様に、プロセッサによって実行される総命令数が先と同じように制御され得る。例えば、継続時間１４８の間にプロセッサが実行すると期待される推定総命令数が（例えば、継続時間１４８に少なくとも一部基づいて）計算され得る。第２の時刻同期信号１２６の後にプロセッサによって実行される命令を制御する方法の１番目の反復の間に、推定総命令数の約半分が実行され得る。例えば、第２の時刻同期信号１２６と時刻１５０との間に、推定総命令数の約半分が実行され得る。プロセッサは、先行する反復内で継続時間１４８が経過するまで実行された以前の命令数より少ない命令数を現在の反復の間に反復して実行するように命令され得る。例えば、時刻１５０と時刻１５２との間に、プロセッサは、第２の時刻同期信号１２６と時刻１５０との間に実行された命令の約半分を実行するように命令され得る。さらに、時刻１５２と時刻１５４との間に、プロセッサは、時刻１５０と時刻１５２との間に実行された命令の約半分を実行するように命令され得る。図示のように、時刻１５４は時間窓１４６の範囲内にない。従って、時刻１５４と時刻１５６との間に、プロセッサは、時刻１５２と時刻１５４との間に実行された命令の約半分を実行するように命令され得る。時刻１５６は時間窓１４６の範囲内にあり、従って、継続時間１４８が経過した。理解され得るように、各反復が完了した後に、プロセッサはインジケーションを送り、複製プロセッサの間のリタイア命令計数（ＲＩＣ）を同期させるために追加の論理を遂行すことができる。
【００３０】
先と同様に、継続時間１４８の間に実行された総命令数は任意の適当な方法で求められ得る。例えば、継続時間１４８の間に実行された総命令数は、第２の時刻同期信号１２６と時刻１５６との間に実行される命令数を合計することによって求められ得る。別の例として、継続時間１４８の間に実行された総命令数は、ＲＩＣからの計数にアクセスすることによって求められ得る。
【００３１】
或る実施形態では、継続時間１４８の間に実行された総命令数が所望よりも少なくなる場合がある。従って、プロセッサは、継続時間１４８が経過した後に、計算された命令数を実行するように命令され得る。例えば、プロセッサは、時刻１５６と時刻１５８との間に、計算された命令数を実行するように命令され得る。対照的に、もし、継続時間１４８の間に実行された総命令数が所望の総命令数以上になれば、プロセッサは継続時間１４８の後の期間の間の処理を遅らせることができる。
【００３２】
タイミング図１２０は別の実施形態を示すために用いられてもよい。例えば、プロセッサによって実行される命令数が残りの継続時間に基づいて計算され得る。例えば、継続時間１３６の間にプロセッサが実行する推定総命令数が継続時間１３６に基づいて計算され得る。プロセッサ（例えば、プロセッサ６８、７０、７２）によって実行される命令を制御する方法の１番目の反復の間に、推定総命令数の半分が実行され得る。例えば、第１の時刻同期信号１２４において、推定総命令数の半分が実行され得る。その後、プロセッサ（例えば、プロセッサ６８、７０、７２）は、継続時間１３６の残り時間の半分に基づく推定命令数を実行するように（例えば、プロセッサ７４によって）命令され得る。さらに、時刻１４０において、プロセッサは、継続時間１３６の残り時間の半分に基づく推定命令数を実行するように命令され得る。図示のように、時刻１４２は時間窓１３４の範囲内にない。従って、時刻１４２において、プロセッサは、継続時間１３６の残り時間の半分に基づく推定命令数を実行するように命令され得る。時刻１４４は時間窓１３４の範囲内にあり、従って、継続時間１３６が経過した。理解され得るように、プロセッサは、時間窓１３４に入った後に他のプロセッサと同期すことができる。他のプロセッサと同期するために、プロセッサの指紋が別のプロセッサの指紋と比較され得る。命令数が実行された総期間が上述のように求められ得る。或る実施形態では、もし、総期間が所定の期間よりも短ければ、プロセッサは、継続時間１３６が経過した後に第２の命令数を実行するように命令され得る。さらに、実施形態によっては、プロセッサは、継続時間１３６の後の処理を遅らせるように命令され得る。上述の方法を用いれば、プロセッサが、或る期間内に或る命令数を実行するように制御され得る。従って、期間内に実行される命令数が最適化され得る（例えば、最大にされる）。さらに、複数のプロセッサが、プロセッサを同期させるように一斉に制御され得る。
【００３３】
図６は、複数のプロセッサを同期させる方法の実施形態のタイミング図１８０である。従って、第１のプロセッサの動作がタイムライン１８２に沿って示され、第２のプロセッサの動作がタイムライン１８４に沿って示され、第３のプロセッサの動作がタイムライン１８６に沿って示されている。さらに、タイムライン１８２、１８４、および１８６の左手側に第１の時刻同期信号１８８（例えば、クロック信号）が示されている。さらに、タイムライン１８２、１８４、および１８６の右手側に第２の時刻同期信号１９０が示されている。加えて、タイムライン１８２、１８４、および１８６の右手側に向かって、第２の時刻同期信号１９０が受信されたときにプロセッサが同期されるように第１、第２、および第３のプロセッサの同期が検証および／または補正される時間区間１９２がある。
【００３４】
継続時間１９４は、第１の時刻同期信号１８８と第２の時刻同期信号１９０との間の時間である。理解され得るように、継続時間１９４は任意の適当な継続時間であることができる。例えば、或る実施形態では、継続時間１９４は約２５０μｓ＋／−１０μｓであることができる。理解され得るように、タイミング図１８０に示されている同じパターンが、プロセッサの動作の間に（例えば、各時刻同期信号の間に）必要な回数だけ繰り返され得る。従って、２つの連続した同期信号の間の継続時間は、プロセッサ、アプリケーション、クロック、タイミングなどに基づく時間（例えば、約２５０μｓ＋／−１０μｓ）等の、任意の適当な時間であることができる。
【００３５】
或る実施形態では、時刻同期信号の間にプロセッサによって実行される命令数を最大にし、プロセッサを互いに同期させることが望まれ得る。従って、プロセッサを同期させるために、第２の時刻同期信号１９０の前の時間窓１９６、１９８、および２００内で各プロセッサ上における命令の実行を停止することが望まれ得る。さらに、継続時間２０２（例えば、所定の期間）は、第１の時刻同期信号１８８と時間窓１９６、１９８、および２００の開始時刻との間の総時間を示す。継続時間２０２は継続時間１９４よりも短いことに留意されたい。或る実施形態では、継続時間２０２が約２３０μｓであってよく、時間窓１９６、１９８、および２００の各々の継続時間が約２０μｓであることができる。
【００３６】
実施形態によっては、プロセッサによって実行される総命令数が制御され得る。例えば、継続時間２０２の間にプロセッサの各々が実行する推定総命令数が（例えば、継続時間２０２に少なくとも一部基づいて）計算され得る。上述したように、各反復の間に実行される命令数は任意の適当な方法を用いて求められ得る。例えば、命令数は、幾何数列（例えば、前の命令数の約半分）、残り時間（例えば、残りの時間窓の半分）などに基づくものであることができる。第１のプロセッサによって実行される命令を制御する方法の１番目の反復の間には、推定総命令数の約半分が実行され得る。例えば、第１の時刻同期信号１８８と時刻２０４との間に、推定総命令数の約半分が実行され得る。その後、第１のプロセッサは、先行する反復内で継続時間２０２が経過するまで実行された以前の命令数より少ない命令数を現在の反復の間に反復して実行するように命令され得る。例えば、時刻２０４と時刻２０６との間に（例えば、２番目の反復の間に）、第１のプロセッサは、第１の時刻同期信号１８８と時刻２０４との間に実行された命令の約半分を実行するように命令され得る。さらに、時刻２０６と時刻２０８との間に（例えば、３番目の反復の間に）、第１のプロセッサは、時刻２０４と時刻２０６との間に実行された命令の約半分を実行するように命令され得る。図示のように、時刻２０８は時間窓１９６の範囲内にない。従って、時刻２０８と時刻２１０との間に、第１のプロセッサは、時刻２０６と時刻２０８との間に実行された命令の約半分を実行することによって４番目の反復を遂行するように命令され得る。図示のように、時刻２１０は時間窓１９６の範囲内にあり、従って、４回の反復が遂行された後、継続時間２０２が経過した。理解され得るように、第１のプロセッサは、各反復が完了した後に、インジケーション（例えば、指紋、他のプロセッサへのメッセージ、実行するべき追加命令の決定、タイマ割り込みの発生、等）を送ることができる。さらに、第１のプロセッサは、各反復が完了した後に、指紋（例えば、ＲＩＣ、メモリロード計数、メモリ格納計数、分岐命令計数、データロードおよび格納、選ばれた分岐、など）を送ることができる。
【００３７】
第２のプロセッサも、継続時間２０２が経過した後に命令の実行を停止するように制御され得る。例えば、第２のプロセッサによって実行される命令を制御する方法の１番目の反復の間には、推定総命令数の約半分が実行され得る。具体的には、第１の時刻同期信号１８８と時刻２１２との間に、推定総命令数の約半分が実行され得る。その後、第２のプロセッサは、先行する反復内で継続時間２０２が経過するまで実行された以前の命令数より少ない命令数を現在の反復の間に反復して実行するように命令され得る。例えば、時刻２１２と時刻２１４との間に（例えば、２番目の反復の間に）、第２のプロセッサは、第１の時刻同期信号１８８と時刻２１２との間に実行された命令の約半分を実行するように命令され得る。さらに、時刻２１４と時刻２１６との間に（例えば、３番目の反復の間に）、第２のプロセッサは、時刻２１２と時刻２１４との間に実行された命令の約半分を実行するように命令され得る。さらに、時刻２１６と時刻２１８との間に（例えば、４番目の反復の間に）、第２のプロセッサは、時刻２１４と時刻２１６との間に実行された命令の約半分を実行するように命令され得る。図示のように、時刻２１８は時間窓１９８の範囲内にない。従って、時刻２１８と時刻２２０との間に、第２のプロセッサは、時刻２１６と時刻２１８との間に実行された命令の約半分を実行することによって５番目の反復を遂行するように命令され得る。図示のように、時刻２２０は時間窓１９８の範囲内にあり、従って、５回の反復が遂行された後、継続時間２０２が経過した。第１のプロセッサと同様に、第２のプロセッサは、各反復が完了した後にインジケーション（指紋、他のプロセッサへのメッセージ、実行するべき追加命令の決定、タイマ割り込みの発生、等）を送ることができる。
【００３８】
第３のプロセッサも、継続時間２０２が経過した後に命令の実行を停止するように制御され得る。例えば、第３のプロセッサによって実行される命令を制御する方法の１番目の反復の間には、推定総命令数の約半分が実行され得る。具体的には、第１の時刻同期信号１８８と時刻２２２との間に、推定総命令数の約半分が実行され得る。その後、第３のプロセッサは、先行する反復内で継続時間２０２が経過するまで実行された以前の命令数より少ない命令数を現在の反復の間に反復して実行するように命令され得る。例えば、時刻２２２と時刻２２４との間に（例えば、２番目の反復の間に）、第３のプロセッサは、第１の時刻同期信号１８８と時刻２２２との間に実行された命令の約半分を実行するように命令され得る。さらに、時刻２２４と時刻２２６との間に（例えば、３番目の反復の間に）、第３のプロセッサは、時刻２２２と時刻２２４との間に実行された命令の約半分を実行するように命令され得る。さらに、時刻２２６と時刻２２８との間に（例えば、４番目の反復の間に）、第３のプロセッサは、時刻２２４と時刻２２６との間に実行された命令の約半分を実行するように命令され得る。加えて、時刻２２８と時刻２３０との間に（例えば、５番目の反復の間に）、第３のプロセッサは、時刻２２６と時刻２２８との間に実行された命令の約半分を実行するように命令され得る。図示のように、時刻２３０は時間窓２００の範囲内にない。従って、時刻２３０と時刻２３２との間に、第３のプロセッサは、時刻２２８と時刻２３０との間に実行された命令の約半分を実行することによって６番目の反復を遂行するように命令され得る。図示のように、時刻２３２は時間窓２００の範囲内にあり、従って、６回の反復が遂行された後、継続時間２０２が経過した。第１および第２のプロセッサと同様に、第３のプロセッサは、各反復が完了した後にインジケーションおよび／または指紋を送ることができる。
【００３９】
継続時間２０２の間に第１、第２、および／または第３のプロセッサによって実行された総命令数は任意の適当な方法で求められ得る。例えば、継続時間２０２の間に実行された総命令数は、第１の時刻同期信号１８８と最後の反復の終了時の時刻（例えば、時刻２１０、２２０、２３２）との間に実行された命令数を合計すること（例えば、加算すること）によって求められ得る。別の例として、継続時間２０２の間に実行された総命令数は、ＲＩＣからの計数にアクセスすること（例えば、それを読み出すこと）によって求められ得る。
【００４０】
或る実施形態では、継続時間２０２の間に第１、第２、および第３のプロセッサによって実行された総命令数が所望よりも少なくなる場合がある。従って、プロセッサは、継続時間２０２が経過した後に、計算された命令数を実行するように命令され得る。対照的に、もし、継続時間２０２の間に実行された総命令数が所望の総命令数以上になれば、プロセッサは継続時間２０２の後の期間の間の処理を遅らせることができる。
【００４１】
例えば、上述したように、継続時間２０２の間に、第１のプロセッサは４回の反復を始め、第２のプロセッサは５回の反復を始め、第３のプロセッサは６回の反復を始めた。この例示の目的のために、第１、第２、および第３のプロセッサは、１秒当たり２０億個の命令を実行することができる１．０ＧＨｚプロセッサであることができる。さらに、この例示のために、プロセッサは、上述した通りの幾何学的アプローチを用いて動作するように構成される。従って、継続時間２０２（例えば、２３０μｓ）の間に実行されるべき推定総命令数は、約４６０，０００個の命令（例えば、２，０００，０００，０００×２３０μｓ）となり得る。従って、１番目の反復の間には、総命令数の約２分の１が実行されてよく、従って、１番目の反復の間には、約２３０，０００個の命令が実行され得る。さらに、各後続の反復の間には、先行する反復内で実行された命令の約半分が実行され得る。それ故、２番目の反復の間には、約１１５，０００個の命令が実行され得る。さらに、３番目の反復の間には、約５７，５００個の命令が実行され得る。さらに、４番目の反復の間には、約２８，７５０個の命令が実行され得る。５番目の反復の間には、約１４，３７５個の命令が実行されてよく、６番目の反復の間には、約７，１８８個の命令が実行され得る。理解され得るように、各反復が完了した後に各プロセッサの指紋は一致なければならない。
【００４２】
従って、第１のプロセッサの反復が（例えば、４番目の反復の後に）窓１９６内で停止する時刻までに、第１のプロセッサは約４３１，２５０個の命令（例えば、２３０，０００＋１１５，０００＋５７，５００＋２８，７５０）を実行すことができる。さらに、第２のプロセッサの反復が（例えば、５番目の反復の後に）窓１９８内で停止する時刻までに、第２のプロセッサは約４４５，６２５個の命令（例えば、２３０，０００＋１１５，０００＋５７，５００＋２８，７５０＋１４，３７５）を実行すことができる。さらに、第３のプロセッサの反復が（例えば、６番目の反復の後に）窓２００内で停止する時刻までに、第３のプロセッサは約４５２，８１３個の命令（例えば、２３０，０００＋１１５，０００＋５７，５００＋２８，７５０＋１４，３７５＋７，１８８）を実行すことができる。第１、第２、および第３のプロセッサは、所与の期間にわたるプロセッサの性能のばらつき等の、任意の数の変数に基づく異なる命令数を実行すことができることに留意されたい。
【００４３】
それ故、第１、第２、および第３のプロセッサの各々は同期されない可能性がある（例えば、同じ命令数を遂行しなかった可能性がある）。従って、第１のプロセッサは、第３のプロセッサに追いつくために約２１，５６３個の命令（例えば、１４，３７５＋７，１８８）を実行すことができる。さらに、第２のプロセッサは、第３のプロセッサに追いつくために約７，１８８個の命令を実行すことができる。従って、時間窓１９６および１９８の間に、第１および第２のプロセッサは、時間窓１９６および１９８の終了までに第１および第２のプロセッサが第３のプロセッサと同じ命令数を完了しているように、追加命令を実行するように命令され得る。さらに、第１および第２のプロセッサに命令を実行する時間を与えるために、第３のプロセッサを時間窓２００の残りの間に遅らせることができる。第１および／または第２のプロセッサは、命令を実行する時間が十分あるようにするため、第３のプロセッサがその６番目の反復を終える前に、追加命令の実行を始めることができることに留意されたい。
【００４４】
別の例として、先と同様に、継続時間２０２の間に、第１のプロセッサは４回の反復を始め、第２のプロセッサは５回の反復を始め、第３のプロセッサは６回の反復を始めた。同様に、この例示の目的のために、第１、第２、および第３のプロセッサは、１秒当たり２０億個の命令を実行することができる１．０ＧＨｚプロセッサであることができる。さらに、この例示のために、プロセッサは、上述した通りの残り時間に基づくことを用いて動作するように構成される。従って、継続時間２０２（例えば、２３０μｓ）の間に実行されるべき推定総命令数は、約４６０，０００個の命令（例えば、２，０００，０００，０００×２３０μｓ）となることができるり得る。従って、１番目の反復の間には、総継続時間の約２分の１のための命令が実行されてよく、従って、１番目の反復の間には、各プロセッサによって約２３０，０００個の命令が実行され得る（例えば、２，０００，０００，０００×１１５μｓ）。さらに、各後続の反復の間には、プロセッサの各々はそれらのそれぞれの残り時間に基づいて命令を実行すことができる。
【００４５】
それ故、２番目の反復の間には、第１のプロセッサは、残り約１０８μｓを有していると判定してよく、従って、第１のプロセッサは、残り時間の約半分のための命令を実行するために約１０８，０００個の命令（例えば、２，０００，０００，０００×５４μｓ）を実行すことができる。さらに、３番目の反復の間には、第１のプロセッサは、残り約５２μｓを有していると判定してよく、従って、第１のプロセッサは、残り時間の約半分のための命令を実行するために約５２，０００個の命令（例えば、２，０００，０００，０００×２６μｓ）を実行すことができる。加えて、４番目の反復の間には、第１のプロセッサは、残り約２４μｓを有していると判定してよく、従って、第１のプロセッサは、残り時間の約半分のための命令を実行するために約２４，０００個の命令（例えば、２，０００，０００，０００×１２μｓ）を実行すことができる。従って、第１のプロセッサは、第１のプロセッサのための反復が窓１９６内で停止する時刻までに、約４１４，０００個の命令（例えば、２３０，０００＋１０８，０００＋５２，０００＋２４，０００）を実行すことができる。
【００４６】
次に第２のプロセッサのことを考えると、２番目の反復の間には、第２のプロセッサは、残り約１１０μｓを有していると判定してよく、従って、第２のプロセッサは、残り時間の約半分のための命令を実行するために約１１０，０００個の命令（例えば、２，０００，０００，０００×５５μｓ）を実行すことができる。さらに、３番目の反復の間には、第２のプロセッサは、残り約５４μｓを有していると判定してよく、従って、第２のプロセッサは、残り時間の約半分のための命令を実行するために約５４，０００個の命令（例えば、２，０００，０００，０００×２７μｓ）を実行すことができる。加えて、４番目の反復の間には、第２のプロセッサは、残り約２４μｓを有していると判定してよく、従って、第２のプロセッサは、残り時間の約半分のための命令を実行するために約２４，０００個の命令（例えば、２，０００，０００，０００×１２μｓ）を実行すことができる。さらに、５番目の反復の間には、第２のプロセッサは、残り約１０μｓを有していると判定してよく、従って、第２のプロセッサは、残り時間の約半分のための命令を実行するために約１０，０００個の命令（例えば、２，０００，０００，０００×５μｓ）を実行すことができる。従って、第２のプロセッサは、第２のプロセッサのための反復が窓１９８内で停止する時刻までに、約４２８，０００個の命令（例えば、２３０，０００＋１１０，０００＋５４，０００＋２４，０００＋１０，０００）を実行すことができる。
【００４７】
次に第３のプロセッサのことを考えると、２番目の反復の間には、第３のプロセッサは、残り約１１４μｓを有していると判定してよく、従って、第３のプロセッサは、残り時間の約半分のための命令を実行するために約１１４，０００個の命令（例えば、２，０００，０００，０００×５７μｓ）を実行すことができる。さらに、３番目の反復の間には、第３のプロセッサは、残り約５８μｓを有していると判定してよく、従って、第３のプロセッサは、残り時間の約半分のための命令を実行するために約５８，０００個の命令（例えば、２，０００，０００，０００×２９μｓ）を実行すことができる。加えて、４番目の反復の間には、第３のプロセッサは、残り約２８μｓを有していると判定してよく、従って、第３のプロセッサは、残り時間の約半分のための命令を実行するために約２８，０００個の命令（例えば、２，０００，０００，０００×１４μｓ）を実行すことができる。さらに、５番目の反復の間には、第３のプロセッサは、残り約１４μｓを有していると判定してよく、従って、第３のプロセッサは、残り時間の約半分のための命令を実行するために約１４，０００個の命令（例えば、２，０００，０００，０００×７μｓ）を実行すことができる。さらに、６番目の反復の間には、第３のプロセッサは、残り約６μｓを有していると判定してよく、従って、第３のプロセッサは、残り時間の約半分のための命令を実行するために約６，０００個の命令（例えば、２，０００，０００，０００×３μｓ）を実行すことができる。従って、第３のプロセッサは、第３のプロセッサのための反復が窓２００内で停止する時刻までに、約４５０，０００個の命令（例えば、２３０，０００＋１１４，０００＋５８，０００＋２８，０００＋１４，０００＋６，０００）を実行すことができる。理解され得るように、各反復が完了した後に各プロセッサの指紋は一致しない可能性がある。
【００４８】
それ故、第１、第２、および第３のプロセッサの各々は同期されない可能性がある（例えば、同じ命令数を遂行しなかった可能性がある）。従って、第１のプロセッサは、第３のプロセッサに追いつくために約３６，０００個の命令（例えば、４５０，０００−４１４，０００）を実行すことができる。さらに、第２のプロセッサは、第３のプロセッサに追いつくために約２２，０００個（例えば、４５０，０００−４２８，０００）の命令を実行すことができる。従って、時間窓１９６および１９８の間に、第１および第２のプロセッサは、時間窓１９６および１９８の終了までに第１および第２のプロセッサが第３のプロセッサと同じ命令数を完了しているように、追加命令を実行するように命令され得る。さらに、第１および第２のプロセッサに命令を実行する時間を与えるために、第３のプロセッサを時間窓２００の残りの間に遅らせることができる。第１および／または第２のプロセッサは、命令を実行する時間が十分あるようにするため、第３のプロセッサがその６番目の反復を終える前に、追加命令の実行を始めることができることに留意されたい。プロセッサが同期された後、各プロセッサの指紋は一致しなければならない。例えば、リタイア命令計数（ＲＩＣ）は一致しなければならない。
【００４９】
図７は、プロセッサ（例えば、プロセッサ６８、７０、７２）によって実行される命令を制御する方法２４０の実施形態のフローチャートである。プロセッサは命令を実行するように命令される（ブロック２４２）。例えば、プロセッサは、別のプロセッサによって、実行のための期間に基づくか、または所定の命令数に基づく命令数を実行するように命令され得る。１つの実施形態では、プロセッサは、現時刻と、命令の実行を停止するように望まれる未来にある時間窓（例えば、時間窓１３４、１４６）の開始時との間に実行されると見込まれる命令の約半分に相当する命令を実行するように命令され得る。プロセッサが命令を実行した後、現時刻が時間窓の範囲内にあるかどうかに関する判定が行われる（ブロック２４４）。もし、現時刻が時間窓の範囲内になければ、方法はブロック２４２に戻り、そこでプロセッサは追加命令を実行するように命令される。理解され得るように、各反復の間に実行される命令数は各後続の反復内の命令数より多くてよい。ブロック２４４に戻り、もし、現時刻が時間窓の範囲内にあれば、実行された総命令数が求められる（ブロック２４６）。
【００５０】
本発明の技術的効果は、単一のプロセッサ上で時刻同期信号の間に実行される命令数を制御することができることを含む。さらに、複数のプロセッサを有するシステムでは、プロセッサは、連続した同期信号の間に各プロセッサが同じ命令数を実行するように制御され得る。従って、プロセッサは同期されてよく、高整合性および／または高可用性システムにおける使用に好適となることができるり得る。
【００５１】
この説明文は、本発明を開示するため、および同様に、いずれのデバイスまたはシステムでも作成して用いること、ならびに組み込まれるいずれの方法でも遂行することを含め、当業者であれば誰でも本発明を実施できるようにするために、ベストモードを含む例を用いている。本発明の特許範囲は特許請求の範囲によって定義されており、当業者が想到する他の例を含んでよい。このような他の例は、特許請求の範囲の文言と異ならない構造要素をそれらが有するか、または特許請求の範囲の文言とは実質的でない相違を有する同等な構造要素をそれらが含むならば、特許請求の範囲に含まれるように意図されている。
【符号の説明】
【００５２】
１０  高整合性システム
１２  メモリ
１４  アプリケーション
１６、１８、２０  プロセッサ
２２  システムバス
２６  高整合性システム
２８  第１の複製状態機械
３０  第２の複製状態機械
３２  入力
３４、３６、３８、４４、４６、４８  プロセッサ
４０、５０  分散合意
６０  高整合性システム
６２、６４、６６  マルチコアプロセッサ
６８、７０、７２  アプリケーションプロセッサ
７４  Ｉ／Ｏプロセッサ
７６、７８  システムバス
８０、８２、８４  複製状態機械
８６  ハイパーバイザ
８８  オンチップリソース
９０  ゲストオペレーティングシステム
９２、９４  アプリケーション
９６  仮想ディスククライアント
９８  仮想ネットワークインタフェースカードクライアント
１００、１１４  コア構造
１０２  仮想クロッククライアント
１０４  分散合意アルゴリズム
１１０  ディスクドライバ
１１２  ネットワークインタフェースカードドライバ
１１６  仮想クロックサーバ
【図１】
2014059870.tif 000003
【図２】
2014059870.tif 000004
【図３】
2014059870.tif 000005
【図４】
2014059870.tif 000006
【図５】
2014059870.tif 000007
【図６】
2014059870.tif 000008
【図７】
2014059870.tif 000009
【外国語明細書】
2014059870000001.pdf