(57)【要約】【課題】  デバイス間のパーティショニングを過度に弱めることなく、デバイス間で通信できるようにする。  【解決手段】  、本発明において、プロセッサの情報は、コンピュータシステムのコンポーネントに対応し、他のパーティションにとって正常にアクセス可能なレジスタのアドレスおよびサイズを規定するエントリを含む。レジスタは、アドレス領域を画定することができる。使用時には、プロセッサは、他のパーティションが、少なくとも１つのレジスタによって画定された少なくとも１つのアクセス可能なアドレス領域にアクセスすることを許可するように設定され、かつ、他のパーティションが、少なくとも１つのアクセス可能なアドレス領域以外のアドレス領域にアクセスすることを拒否するように設定される。【選択図】図１
2006040284.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、コンピュータシステムのコンポーネントに対応した情報でポピュレートされたメモリとを備えた少なくとも１つのパーティションを有するパーティショニング可能計算システムであって、
前記情報は、他のパーティションにとって正常にアクセス可能であり、
アドレス領域を画定することができるレジスタのアドレスおよびサイズを規定するエントリ
を含み、
前記プロセッサは、
他のパーティションが、前記少なくとも１つのレジスタによって画定された少なくとも１つのアドレス領域にアクセスすることを許可するように設定され、
他のパーティションが、前記少なくとも１つのアクセス可能なアドレス領域以外のアドレス領域にアクセスすることを拒否するように設定される、
計算システム。
【請求項２】
レジスタのアドレスおよびサイズを規定するエントリを含む前記情報は、少なくとも１組のレジスタのアドレスおよびサイズを規定し、
前記１組のレジスタのそれぞれは、
前記少なくとも１つのアドレス領域を画定するアドレス用の１対のレジスタと、
前記少なくとも１つのアドレス領域にアクセスすることが許可された他のパーティションを特定するレジスタと
を含む請求項１に記載の計算システム。
【請求項３】
コンピュータシステムのコンポーネントに対応した情報でポピュレートされたメモリおよびプロセッサを備えた少なくとも１つのパーティションと、
少なくとも１つの他のパーティションと
を有するパーティショニング可能計算システムであって、
前記情報は、前記少なくとも１つの他のパーティションのプロセッサにとって正常にアクセス可能であり、
アドレス領域を画定することができるレジスタのアドレスを規定するエントリ
を含み、
前記少なくとも１つの他のパーティションは、
前記プロセッサが、前記レジスタの少なくとも１つによって画定された少なくとも１つのアクセス可能なアドレス領域にアクセスすることを許可するように設定され、
前記プロセッサが、前記少なくとも１つのアクセス可能なアドレス領域以外のアドレス領域にアクセスすることを拒否するように設定される
計算システム。
【請求項４】
アドレスを規定する前記エントリは、
それぞれがレジスタのブロックのベースアドレスを含んだエントリ
を含む
請求項３に記載の計算システム。
【請求項５】
前記情報は、
アクセス可能なアドレス領域の許可されたアドレスの範囲を画定するエントリ
を含む
請求項３または４に記載の計算システム。
【請求項６】
プロセッサと、
レジスタと、
コンピュータシステムのコンポーネントに対応した情報でポピュレートされたメモリと
を備えた少なくとも１つのパーティション
を有するパーティショニング可能計算システムであって、
前記情報は、
前記レジスタのアドレスおよびサイズを規定するエントリ
を含み、
前記レジスタは、前記少なくとも１つのパーティションに割り込みを送信することを許可された他のパーティション、および、他のパーティションが前記少なくとも１つのパーティションに送信することを許可された割り込みベクトルのうちの少なくとも１つを列挙する
計算システム。
【請求項７】
前記レジスタは、前記少なくとも１つのパーティションに割り込みを送信することを許可された他のパーティションを列挙し、
前記少なくとも１つのパーティションは、別のパーティションが前記レジスタに列挙されていない場合に、前記別のパーティションによって送信された割り込みを拒否するように設定される
請求項６に記載の計算システム。
【請求項８】
前記レジスタは、他のパーティションが前記少なくとも１つのパーティションに送信することを許可された割り込みベクトルを列挙し、
前記少なくとも１つのパーティションは、別のパーティションによって送信された割り込みベクトルが前記レジスタに列挙されていない場合に、前記割り込みベクトルを拒否するように設定される
請求項６または７に記載の計算システム。
【請求項９】
前記情報は、
エラー割り込みベクトルを列挙するレジスタのアドレスおよびサイズを規定するエントリ
を含み、
前記少なくとも１つのパーティションは、別のパーティションが前記レジスタに列挙されていない割り込みベクトルを送信した場合に、前記プロセッサに前記エラー割り込みベクトルを送信するように設定される
請求項６〜８のいずれかに記載の計算システム。
【請求項１０】
情報でポピュレートされた前記メモリは、
前記情報の読み出しを許可され、前記情報の変更を許可されないハードウェアデバイス
を備える
請求項１〜９のいずれかに記載のパーティショニング可能計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パーティショニングされたデバイス間の通信に関する。
【背景技術】
【０００２】
コンピュータおよび他のデータハンドリングシステムでは、システムの部分を互いにパーティショニングすることが時に望ましいことがある。
「パーティショニング」は、大規模システムを、完全には隔離されていないが、あるパーティションから別のパーティションへのアクセスが制限される部分に分割する機構を示す。
パーティショニングは、例えば、あるパーティションの機能不良が別のパーティションの働きを妨害する危険性を低減するのに使用することができる。
パーティショニングは、例えば、あるパーティションの悪意のあるアクティビティが他のパーティションを妨害し得る危険性を低減するのに使用することができる。
パーティショニングは、例えば、プログラマが他のパーティションの存在を無視することを可能にすることによって、プログラミングを簡単にするのに使用することができる。
【０００３】
しかしながら、いくつかの目的のため、異なるパーティション同士が通信することが必要であるか、または、望ましい場合がある。
この場合、通信は、パーティショニングを過度に弱めることなく行うことができる。
【非特許文献１】http://www.acpi.info
【発明の開示】
【課題を解決するための手段】
【０００４】
一実施の形態では、本発明は、システムファームウェア、情報オブジェクト、コンピュータ可読媒体、およびパーティショニング可能計算システムを提供する。
プロセッサの情報は、コンピュータシステムのコンポーネントに対応する。
一実施の形態では、情報は、他のパーティションにとって正常にアクセス可能なレジスタのアドレスおよびサイズを規定するエントリを含む。
レジスタは、アドレス領域を画定することができる。
使用時には、プロセッサは、他のパーティションが、少なくとも１つのレジスタによって画定された少なくとも１つのアクセス可能なアドレス領域にアクセスすることを許可するように設定され、かつ、他のパーティションが、少なくとも１つのアクセス可能なアドレス領域以外のアドレス領域にアクセスすることを拒否するように設定される。
【０００５】
別の実施の形態では、この情報は、プロセッサにとって正常にアクセス可能であり、かつ、アドレス領域を画定することができる他のパーティションのレジスタのアドレスを規定するエントリを含む。
使用時には、プロセッサは、レジスタの少なくとも１つによって画定された、別のパーティションの少なくとも１つのアクセス可能なアドレス領域にアクセスすることを許可され、かつ、少なくとも１つのアクセス可能なアドレス領域以外のアドレス領域にアクセスすることを拒否される。
別の実施の形態では、この情報は、プロセッサを含んだあるパーティションに割り込みを送信することを許可された他のパーティション、および、他のパーティションがプロセッサを含んだ当該あるパーティションに送信することを許可された割り込みベクトルのうちの少なくとも１つを列挙するレジスタのアドレスおよびサイズを規定するエントリを含む。
【０００６】
本発明を例示するために、図面が、本発明を具現することができる１つまたは２つ以上の形態を示す。
しかしながら、本発明は、図示した正確な形態に限定されるものではない。
【発明を実施するための最良の形態】
【０００７】
最初に、図面のうち図１を参照して、本発明によるコンピュータシステムの一実施の形態は、複数のセルまたはパーティションを備える。
本実施の形態では、「セル」は、大規模コンピュータシステムの物理的な区画であり、通常、物理メモリを含んだアドレス空間を有する中央処理装置、ならびに、さまざまな周辺デバイスおよび補助デバイスを含む。
本実施の形態では、各セルは、１つまたは２つ以上のプロセッサを含む。
本実施の形態では、入力する通信は、主としてセルのレベルで制御される。
「パーティション」は、大規模コンピュータシステムの管理上の区画であり、この管理上の区画は、他のパーティションからほとんど独立して機能し、他のパーティションへのアクセスが制限される。
本実施の形態では、各パーティションは１つまたは２つ以上のセルを有することができる。
【０００８】
図１には、２つのパーティション１０および１２が示されている。
各パーティションは、少なくとも１つのセル１１、１３をそれぞれ備える。
セル１１は、少なくとも１つの中央処理装置（ＣＰＵ）１４、プロセッサインターフェース１５、メモリコントローラ１８、および割り込みハンドラ２２を備え、セル１３は、少なくとも１つの中央処理装置（ＣＰＵ）１６、プロセッサインターフェース１７、メモリコントローラ２０、および割り込みハンドラ２４を備える。
これら２つのパーティションは、構造上、実質的に同一のものとすることができる。
２つのパーティションは、同じオペレーティングシステムを実行することができる。
一方、以下で説明するように、２つのパーティション１０、１２間の相互作用が非常に限られているので、それぞれが、説明する構造および方法を実施して使用することができるという条件で、２つのパーティションは、異なって構成することができ、かつ／または、異なるオペレーティングシステムを実行することができる。
【０００９】
この実施の形態では、一方のパーティションから他方のパーティションへ送信される割り込みは、発信元ＣＰＵ１４、１６から同じセルの「ローカルな」プロセッサインターフェース１５、１７へ渡される。
次に、プロセッサインターフェース１５、１７は、その割り込みを宛先セルの割り込みハンドラ２４、２２に渡す。
宛先セルの割り込みハンドラ２４、２２は、その割り込みを宛先ＣＰＵ１６、１４に直接渡すことができる。
それ以外に、各プロセッサインターフェース１５、１７は、それ自身のセルのＣＰＵ１４、１６、メモリコントローラ１８、２０、および割り込みハンドラ２２、２４と通信し、他方のセル１３、１１のメモリコントローラ２０、１８と通信する。
プロセッサインターフェース１５、１７は、異なるパーティション１０、１２にまたがるデータリンクを介して任意の便利な方法で異なるパーティションと通信する。
【００１０】
各セル１１、１３のメモリコントローラ１８、２０は、固定されたアドレスロケーションの少なくとも１対のアドレスレジスタ２６、２８および共有設定レジスタ３８（一括して、「共有レジスタ」と呼ぶ）にアクセスする。
各１対のアドレスレジスタ２６、２８は、共有ウィンドウ３０の上限アドレスおよび下限アドレスを収容する。
この共有ウィンドウ３０は、他のパーティションにアクセス可能なアドレス領域であり、このアドレス領域は、通常、物理メモリの領域である。
共有設定レジスタ３８は、メモリの読み出し要求を発信できる、システムのセルのリストを収容し、それら要求のいずれが、関連した共有ウィンドウ３０の読み出しを許可されるかを示す。
簡略化するために、図１は、２つのパーティション１０、１２のそれぞれにおいて、１つのセル１１、１３、１つの共有ウィンドウ３０、およびその関連した共有レジスタのみを示している。
しかしながら、この実施の形態では、数個のセルがあってもよく、また、各セルには数個の共有ウィンドウ３０があってもよい。
この場合、各セルは、異なる共有ウィンドウ３０を使用して、他の異なるセルまたはパーティションと通信することができる。
以下で説明するように、必ずしも、共有ウィンドウ３０とセルまたはパーティションとの１対１の対応があるとは限らない。
【００１１】
この実施の形態では、各ＣＰＵ１４、１６で実行されるオペレーティングシステムは、システムの共有レジスタ２６、２８、３８のすべてのロケーションをファームウェア３９から取得する。
この実施の形態では、各ＣＰＵ１４、１６には、通信が必要となる場合があるそれぞれの他方のセルの完全な１組の共有レジスタ２６、２８、３８のベースアドレスまたは開始アドレスが提供される。
さらに、各ＣＰＵ１４、１６は、それぞれの他方のセルのすべての共有レジスタがローカルセルの共有レジスタと同じ配置を有すると仮定することによって、それぞれの他方のセルのすべての共有レジスタを検出することができる。
代替的に、ＣＰＵ１４、１６には、そのＣＰＵが通信できるそれぞれの他方のセルの共有レジスタのレイアウトを含んだデータファイルを提供することもできる。
代替的に、対称的なシステムでは、共有レジスタ２６、２８、３８は、それらの各パーティション内で対称的なロケーションとすることもできる。
さらに、各ＣＰＵには、各パーティションのアドレス範囲（通例、他の目的で必要となる）、および、パーティションベースアドレスから共有レジスタ２６、２８、３８のロケーションへのオフセットのみを提供する必要がある。
この実施の形態では、パーティションが２つ以上のＣＰＵを含む場合に、この情報は、パーティションの単一のロケーションに保持される。
この単一のロケーションは、パーティションのすべてのＣＰＵが当該ロケーションからその情報にアクセスできるロケーションである。
非対称的なシステムでは、中央スーパバイズプロセッサ（図示せず）が、レジスタロケーションの信頼性のあるリストを保持して分配する役割を有することがある。
【００１２】
コンピュータシステムの通常動作では、各メモリコントローラ１８、２０は、ほぼ常に、他のパーティションのＣＰＵ（「リモート」ＣＰＵ）が、そのメモリコントローラ自身のパーティションの共有レジスタ２６、２８、３８を読み出すことを許可することができる。
代替的に、メモリコントローラ１８、２０は、リモートＣＰＵが、関連した共有ウィンドウ３０へのアクセスを許可されたことを共有設定レジスタ３８が示す場合にのみ、その特定のリモートＣＰＵがレジスタを読み出すことを許可することができる。
メモリコントローラ１８、２０は、あるパーティションのＣＰＵが別のパーティションのレジスタの内容を変更することを許可しない。
【００１３】
メモリコントローラ１８、２０は、リモートＣＰＵが、そのメモリコントローラ自身のパーティションの共有ウィンドウ３０の内容を読み出すことを許可することができる。
ウィンドウ３０に関連した共有設定レジスタ３８は、どのリモートパーティションがそのウィンドウの内容の読み出しを許可されているかを特定する。
共有ウィンドウのローカルＣＰＵ１４、１６のみが、その共有ウィンドウ３０の内容を変更することができる。
メモリコントローラ１８、２０は、リモートＣＰＵがアクセスを認可された共有ウィンドウと、共有レジスタ２６、２８、３８とを除いて、その特定のリモートＣＰＵがそのアドレス空間のどの部分にアクセスすることも許可しない。
読み出し要求は、その要求が、共有ウィンドウ３０内のアドレス範囲を指定するものであり、かつ、その共有ウィンドウの読み出しを認可されたリモートＣＰＵから発信されたものである場合にのみ許可される。
【００１４】
図１に示す実施の形態では、各共有ウィンドウ３０は、ウィンドウヘッダ４０、あるパーティションから別のパーティションへ転送されるデータ用の送信キューまたはデータ領域３２、およびプロデューサポインタ３４を含む。
プロデューサポインタ３４は、データ領域３２の位置を示し、この位置まで、ローカルプロセッサは有効なデータを書き込んでいる。
また、各共有ウィンドウ３０は、コンシューマポインタ３６およびリモートチャネル識別情報（ＩＤ）３７も含む。
【００１５】
異なるパーティションの２つのＣＰＵ１４、１６間の通信は、各ＣＰＵがそれ自身のパーティションの共有ウィンドウ３０の送信キュー３２にメッセージを置いて、他方のＣＰＵがそれらのメッセージを読み出すことを許可することによって可能となる。
さらに、各ＣＰＵは、プロデューサポインタ３４を使用して、新たに書き込まれたデータを示し、コンシューマポインタ３６を使用して、他方のＣＰＵが提供したデータをどれだけ読み出したかを示す。
ＣＰＵは、他方のＣＰＵのパーティションのデータを変更できないので、それ自身の共有ウィンドウ３０のコンシューマポインタ３６を使用して、リモート送信キュー３２をどれだけ読み出したかを信号で伝える。
各ＣＰＵ１４、１６は、送信側ＣＰＵが、読み出しを待っている新たなデータを当該送信側ＣＰＵのパーティションの送信キュー３２に置くと、他方のＣＰＵの割り込みハンドラ２２、２４に割り込みを送信して他方のＣＰＵに注意を喚起することができる。
【００１６】
１対の共有ウィンドウ３０が、特定の１対のＣＰＵ間の対話に割り当てられると、この実施の形態では、各ＣＰＵは、それ自身の共有ウィンドウ３０のリモートチャネルＩＤ３７に、他方のＣＰＵの識別情報に関係した情報を表示する（すなわち、書き込む）。
この情報は、パーティション番号、ノード番号またはセル番号、およびセル内のウィンドウ番号のうちの１つまたは２つ以上を含むことができる。
これは、該当するリモートＣＰＵへの確認として機能し、また、その共有ウィンドウの読み出し許可を受けることができる他のあらゆるＣＰＵに対する、そのウィンドウがその特定の対話に割り当てられたことの通告として機能する。
【００１７】
次に図２を参照して、コンピュータシステムの第２の実施の形態では、共有ウィンドウ３０をいくつかのチャネル３０ｉに分割することができる。
各チャネルは、送信キューまたはデータ領域３２ａ、３２ｂ、…、３２ｉ、…、３２ｎと、プロデューサポインタ３４ａ、３４ｂ、…、３４ｉ、…、３４ｎと、コンシューマポインタ３６ａ、３６ｂ、…、３６ｉ、…、３６ｎと、チャネルヘッダ４０ａ、４０ｂ、…、４０ｉ、…、４０ｎとを有する。
ウィンドウ内のチャネル数は、特定の事例の状況に従って決定することができる。
チャネル数は、一定として、システムのすべての共有ウィンドウについて同一とすることもできるし、ウィンドウごとに決定することもできる。
チャネル数がウィンドウごとに決定される場合、その情報は、そのウィンドウを使用する２つのプロセッサによってキャッシュすることもできるし、共有ウィンドウ３０内のウィンドウヘッダ４０に記録することもできるが、任意の特定のチャネルに割り当てることはできない。
【００１８】
共有ウィンドウ３０内の個々のチャネルは、単一のプロセッサ１４、１６で実行される異なるオペレーティングシステムもしくは他の実質的に独立したプロセスに割り当てることができ、かつ／または、単一のセル内の異なるプロセッサに割り当てることができる。
これによって、異なるプロセスが単一のチャネルを共有資源として使用することを可能にするのに必要なオーバーヘッドが省かれると同時に、同じ１対のプロセッサ間でいくつかの個別の共有ウィンドウを有するという複雑さが回避される。
さらに、１対の共有ウィンドウ３０内で数対のチャネルを使用して通信を行う手順は、数対の共有ウィンドウを使用して通信を行う上述したプロセスとほぼ同様である。
代替的に、個別のチャネルを使用して、１対のプロセッサ１４、１６間のデータ転送の容量および柔軟性を高めることもできる。
【００１９】
代替的に、ローカルプロセッサと、異なるリモートプロセッサとの間の通信に単一のウィンドウ３０内の異なるチャネルを割り当てることができる。
これには、共有レジスタ２６、２８、３８の組の個数を削減する利点がある。
単一のウィンドウを使用して２つ以上のリモートプロセッサと通信することの不利な点としては、プライバシーの低減がある。
その理由は、共有ウィンドウ３０へのアクセスがウィンドウごとに制御され、その結果、リモートプロセッサは、他のプロセッサのチャネルの通信を含めて、同じウィンドウのすべての通信を読み出すことができるからである。
しかしながら、リモートプロセッサは、共有ウィンドウの内容を変更できないので、他の２つのプロセッサ間の通信を変更することも、混乱させることもできない。
【００２０】
この実施の形態では、共有レジスタ２６、２８、３８は、メモリコントローラ１８、２０のファームウェア３９で規定されたアドレスに配置され、最初は、上限レジスタ２６および下限レジスタ２８が有効なウィンドウ３０を特定しない状態に設定される。
そして、共有設定レジスタ３８は、最初は、他のパーティションのその「ウィンドウ」へのアクセスが許可されないステータスに設定される。
【００２１】
各セル１１、１３は、１組のデバイスまたはオブジェクトのコピーを有する。
この１組のデバイスまたはオブジェクトは、この実施の形態では、ＡＣＰＩ（アドバンストコンフィギュレーションアンドパワーインターフェース）ファームウェアデバイスまたはオブジェクトである。
セルのＣＰＵがブートアップする際に、このＡＣＰＩファームウェアデバイスまたはオブジェクトから、構成情報がロードされる。
第１のＡＣＰＩデバイスは、そのＣＰＵ自身のメモリコントローラ１８、２０内の共有レジスタ２６、２８、３８のアドレスを提供する。
共有レジスタが連続したブロックを形成し、それらレジスタの個数、サイズ、および順序が別に規定される場合には、そのブロックの単一の開始アドレスで十分な場合がある。
しかしながら、この実施の形態では、各レジスタが明示的に規定され、各ウィンドウ３０の１組の３つの共有レジスタは、ＡＣＰＩデバイスとして定義される。
ソースコードで表すと、ＡＣＰＩデバイスの定義の一般的なものは次のように書かれている。
【００２２】
Device(GSMx) // 共有ウィンドウｘ
{
Name(_UID, x)
Name(_HID, EISAID("HWP1001"))
Name(_CRS, ResourceTemplate()
{
Register(SystemMemory, 64, 0, 0xfed1280) // SHARE_LOWER
Register(SystemMemory, 64, 0, 0xfed1300) // SHARE_UPPER
Register(SystemMemory, 64, 0, 0xfed1200) // SHARE_SET
} ) // _CRS
}
【００２３】
文字ｘは、ウィンドウの識別番号を表し、セル内で一意でなければならない。
各レジスタの開始アドレスである一般的な１６進アドレスは、もちろん、各ウィンドウ３０につき異なる。
この例では、１６個の連続したＳＨＡＲＥ＿ＳＥＴレジスタと、１６個の連続したＳＨＡＲＥ＿ＬＯＷＥＲレジスタと、１６個の連続したＳＨＡＲＥ＿ＵＰＰＥＲレジスタとが、連続したレジスタのブロックを形成することができる。
ただし、他の配置も可能である。
ＡＣＰＩ階層では、ＧＳＭｘデバイスは、自身が属する「ノード」またはセルのすぐ下に割り当てられる。
【００２４】
次に図３を参照して、この実施の形態では、第１のパーティション１０のＣＰＵ１４が、第２のパーティション１２と情報を交換したい場合に、ステップ１０２において、第１のパーティション１０は、共有ウィンドウ３０のメモリ空間を割り当て、ウィンドウヘッダ４０を「静的な」情報でセットアップする。
この静的な情報は、第２のパーティションと一致する必要はなく、ウィンドウが存在する間は変わらない。
ウィンドウに単一のチャネルが存在する場合に、「静的な」ヘッダは、リモートチャネルＩＤ３７を含むことができる。
この段階で、第１のパーティションは、共有ウィンドウ３０を共に使用することになるリモートパーティション１２のその情報を知っている。
共有ウィンドウ３０用に割り当てられた物理メモリは、第１のパーティション１０内の任意の利用可能なメモリとすることができる。
一方、第１のパーティション１０が２つ以上のセルを有する場合、メモリコントローラ１８が共有ウィンドウ３０の完全な制御を有するように、共有ウィンドウ３０は、制御側ＣＰＵ１４およびメモリコントローラ１８のセル内に完全に含まれるメモリに存在することが好ましい。
２つ以上のセルにわたってインターリーブされるメモリが使用される場合、そのメモリの制御は、通常、関与するセルのメモリコントローラ１８間で共有され、完全性を確保することはあまり容易ではない。
【００２５】
ステップ１０４において、第１のセル１１は、ウィンドウ制御割り込み用の割り込みベクトルを割り当て、その割り込みを受信した時にどの動作を取るべきかを決定する。
この動作には、セル１１が２つ以上のプロセッサを含む場合に、どのプロセッサ１４にベクトルを送信するかを指定することが含まれ得る。
本実施の形態では、ウィンドウ制御割り込みは、指定されたプロセッサに送信された、指定されたベクトルを有する。
セルの異なるプロセッサに送信された同じベクトル、または、同じプロセッサに送信された異なるベクトルは、同じウィンドウ制御割り込みとしては認識されず、独立して割り当てられて機能を有することができる。
次に、第１のパーティション１０は、割り込みベクトルと、ターゲットプロセッサのアドレスとをウィンドウヘッダ４０に表示する。
ウィンドウヘッダ４０では、そのウィンドウ３０にアクセスすることが許可された他のどのセルも、それら割り込みベクトルおよびアドレスを読み出すことができる。
【００２６】
割り込みベクトルおよびターゲットプロセッサの識別情報は、第１のセル１１の割り込みハンドラ２２の適切なレジスタにロードされる。
第２のＡＣＰＩデバイスは、それらレジスタのアドレスを提供する。
ソースコードで表すと、ＡＣＰＩデバイスの定義は次のように書かれている。
【００２７】
Device(GSMI) 
{
Name(_UID, 0x0)
Name(_HID, EISAID("HWP1002")
Name(_CRS, ResourceTemplate()
{
Register(SystemMemory, 64, 0, 0xfed0f10) // INT_TARGET_ENABLE
Register(SystemMemory, 64, 0, 0xfed01c8) // INT_VECTOR_ ENABLE_0
Register(SystemMemory, 64, 0, 0xfed01d0) // INT_VECTOR_ ENABLE_1
Register(SystemMemory, 64, 0, 0xfed01d8) // INT_VECTOR_ ENABLE_2
Register(SystemMemory, 64, 0, 0xfed01e0) // INT_VECTOR_ ENABLE_3
Register(SystemMemory, 64, 0, 0xfed0138) // INT_ERROR_ VECTOR
} ) // _CRS
}
【００２８】
ＩＮＴ＿ＴＡＲＧＥＴ＿ＥＮＡＢＬＥは、パーティション１０の外部からの割り込みベクトルを転送できるセル１１内のプロセッサを列挙するレジスタ４２である。
４つのＩＮＴ＿ＶＥＣＴＯＲ＿ＥＮＡＢＬＥレジスタ４４は、セル内のプロセッサに転送することができる割り込みベクトルを列挙する。
ＩＮＴ＿ＴＡＲＧＥＴ＿ＥＮＡＢＬＥレジスタ４２およびＩＮＴ＿ＶＥＣＴＯＲ＿ＥＮＡＢＬＥレジスタ４４の双方がその割り込みを許可可能と示している場合にのみ、入力する割り込みは、ターゲットプロセッサに転送されることになる。
それらのレジスタのそれぞれは、１ビットが、可能な各ターゲットまたはベクトルに割り当てられる。
そのビットは、入力する割り込みを許可するか、または、拒否するかに設定することができる。
この例では、割り込みベクトルは８ビット長であるので、４つのＩＮＴ＿ＶＥＣＴＯＲ＿ＥＮＡＢＬＥレジスタ４４が存在する。
したがって、２５６個の可能な割り込みベクトルが存在し、２５６個のレジスタビットが必要となる。
ただし、この例のレジスタ定義は、１つのレジスタにつき６４ビットに限られる。
ＩＮＴ＿ＥＲＲＯＲ＿ＶＥＣＴＯＲレジスタ４６はエラーベクトルを含む。
このエラーベクトルは、以下で説明するように、ＩＮＴ＿ＴＡＲＧＥＴ＿ＥＮＡＢＬＥレジスタ４２によって許可されるが、ＩＮＴ＿ＶＥＣＴＯＲ＿ＥＮＡＢＬＥレジスタ４４によって拒否される割り込みのベクトルの代わりに使用することができる。
ＡＣＰＩ階層では、ＧＳＭＩデバイスは、自身が属する「ノード」またはセルのすぐ下に割り当てられる。
【００２９】
共有ウィンドウ３０のウィンドウ制御割り込みが割り当てられると、セル１１は、割り当てられた割り込みベクトルを、割り当てられたターゲットプロセッサに転送することを可能にする適切なビットが転送を可能にするように依然として設定されていない場合に、それらのビットを設定する。
【００３０】
第１のパーティションは、この段階で、共有ウィンドウ３０内にチャネルを規定することができる。
次に、ステップ１０６において、ウィンドウのチャネルごとに、第１のプロセッサ１４は、チャネルヘッダ４０ｉのアドレスを与えるポインタをウィンドウヘッダ４０に配置する。
次に、ステップ１０８において、第１のプロセッサ１４は、「静的な」情報をチャネルヘッダに記入する。
この実施の形態では、各ＣＰＵ１４、１６には、該当するパーティションのローカルセルとシステムの他のセルとの間の通信用の数対のチャネルのデータベースが提供される。
したがって、各チャネルの静的なデータは、特定のリモートパーティションの特定のチャネルを特定するデータを含むことができる。
代替的に、通信が実際に確立されるまで、チャネル対をオープンしておくこともできる。
【００３１】
ステップ１１０において、該当するチャネルのデータ領域または送信キュー３２ｉ用に、メモリが割り当てられ、その送信キューの下限および上限を指定するポインタがチャネルヘッダに書き込まれる。
ステップ１１２において、「ハロー」メッセージが送信キュー３２ｉに置かれる。
ステップ１１４において、チャネルのコンシューマポインタ３６ｉが０に設定され、第１のパーティション１０が、対応するリモートチャネルの送信キューを読み出すのに依然として検出および開始されていないことが示される。
【００３２】
ステップ１１６において、ステップ１０４に関して上述したのと基本的に同じプロセスに従って、第１のパーティション１０はチャネル割り込みを割り当て、ＩＮＴ＿ＴＡＲＧＥＴ＿ＥＮＡＢＬＥレジスタおよびＩＮＴ＿ＶＥＣＴＯＲ＿ＥＮＡＢＬＥレジスタの必要なビットを設定し、ターゲットプロセッサおよび割り込みベクトルをチャネルヘッダ４０ｉに表示する。
ステップ１１８において、そのチャネルが「オープン中（opening）」、すなわち、チャネルがセットアップされたが、リモートパーティション１２のチャネルに依然として接続されていないことを示すように、チャネルステータスフラグが設定される。
【００３３】
共有ウィンドウ３０が、２つ以上のチャネルを有するように意図されていない場合、チャネルヘッダおよびウィンドウヘッダはマージすることができ、詳細には、ステップ１０２と１０８とをマージすることができ、ステップ１０４と１１６とをマージすることができる。
さらに、共有ウィンドウ３０は、単一のデータ領域３２、単一のプロデューサポインタ３４、および単一のコンシューマポインタ２６を有する、図１に示す構成を有することができる。
【００３４】
共有ウィンドウ３０が完全にセットアップされると、ステップ１２０において、下限レジスタ２６および上限レジスタ２８が、ウィンドウ３０のアドレス範囲を特定するように設定され、共有設定レジスタ３８が、共有ウィンドウへのアクセスが許可された１つまたは複数のパーティションを特定するように設定される。
【００３５】
図３に示すプロセスは、第１のパーティション１０が最初にブートアップされた時、または、関係する第２のパーティション１２との実際の通信を行う必要が生じた時に実行することができる。
【００３６】
第１のＣＰＵ１４は、通信する機会がある時に、図３に示すように、特定の第２のパーティション１２用の共有ウィンドウ３０をセットアップすることができる。
次に、第１のＣＰＵ１４は、目的の第２のパーティション１２に対応するウィンドウ３０を配置するように直ちに試みる。
その代わり、各ＣＰＵ１４、１６は、図３に示すように、スタートアップ時に、他のパーティション（実際上、そのＣＰＵが絶えず通信を許可されたシステムの他のあらゆるパーティション）用に共有ウィンドウ３０をセットアップすることができる。
各ＣＰＵ１４、１６は、それ自身の共有ウィンドウ３０をセットアップすると、他のパーティションに対応するウィンドウを配置することに進む。
【００３７】
次に図４を参照して、本実施の形態では、ステップ１３０において、第１のＣＰＵ１４は、どの共有ウィンドウが第２のパーティション１２において当該ＣＰＵに利用可能であるかを決定するために、可能な第２のパーティションにおける共有レジスタのロケーションをＡＣＰＩファームウェアオブジェクトから取得し、各リモート共有ウィンドウ３０の共有設定レジスタ３８の読み出し要求を送出する。
図１２を参照して、このＡＣＰＩファームウェアオブジェクトは、正確なＡＣＰＩデバイスとして定義されていない。
その理由は、ＡＣＰＩ標準規格が、デバイスを起動するオペレーティングシステムと同じパーティションの当該デバイスに制限されるからである。
図１２に示すテーブルは、個々の製造業者によって全体が定義された「ベンダロング（vendor long）」オブジェクトとしてＡＣＰＩ標準規格の下で定義される。
テーブルのフィールドは次のように定義される。
図１２に示すテーブルは、共有ウィンドウを有することができるすべてのセルの情報を含み、それらセルのすべてにグローバルに利用可能である。
ＡＣＰＩ標準規格は、http://www.acpi.infoで入手可能である。
【００３８】
ＲＥＳは、この資源が何であるかをソフトウェアに告げる、ＡＣＰＩが定義した１バイトの値５０である。
その値は０ｘ８４であり、これは、その資源が、ベンダが定義したオブジェクトであることを意味する。
ＬＥＮＧＴＨは、バイトで計測されたＧＳＭＲの「データ領域」（ＲＥＳ値およびＬＥＮＧＴＨ値が占有する３バイトを含まない）の長さを与える２バイトの値５２である。
本例において、３つの６４ビット（８バイト）アドレスが各セルについて列挙される場合、この値は２４×Ｎ＋２１に等しい。
ここで、Ｎは、列挙されたセルの個数である。
ＴＹＰＥは、ＧＵＩＤ５６と共に使用されて、これがどの種類の資源であるかを告げる「サブタイプ指示子」５４である。
ＴＹＰＥフィールドは、標準的なＡＣＰＩフィールドであるが、その値は、個々のオブジェクトの設計者によって選択される。
ＧＵＩＤ（グローバル一意識別子）５６は、１６バイトの標準的なＡＣＰＩフィールドであり、その値は個々の製造業者によって決定される。
ＧＵＩＤは、２つの製造業者が偶然に同じ番号を生成できないように生成される意味で「グローバル一意」である。
【００３９】
ＲＥＶは、テーブルの改訂を与える１バイトの値５８である。
テーブルの定義が変わる場合、この番号をインクリメントしなければならならい。
ＣＥＬＬは、テーブルに表されたセルの個数Ｎを与える１バイトの値６０である。
【００４０】
テーブルのフィールドの残りは、すべて長さが８バイトであり、アドレスを表す。
各セルにつき、３つのアドレスがある。
これら３つのアドレスの群は、マシン全体に存在するセル（すべてのパーティションをカウントする）と同数存在する。
各セルの３つのアドレスは次の通りである。
【００４１】
セルｉのＧＳＭ  ＣＳＲベースアドレス６２ｉは、セルｉのＧＳＭｘ  ＣＳＲのすべてを計算できる起点のベースアドレスである。
上記で与えたＧＳＭｉデバイスの例では、ＣＳＲベースアドレスは、第１のＧＳＭデバイスのＳＨＡＲＥ＿ＳＥＴレジスタ３８の開始アドレスである。
この値によって、第１のセル１１は、リモートセルのすべてにおいて共有ウィンドウのすべてを検出することが可能になり、それらの共有ウィンドウがローカルセルと共有可能であるかどうかを調べることが可能になる。
【００４２】
セルｉの有効ウィンドウ６４ｉの下限は、セルｉの共有ウィンドウの最小有効アドレスである。
セルｉの有効ウィンドウ６４ｉの上限は、セルｉの共有ウィンドウの最大有効アドレスである。
これら２つの境界の間のアドレス範囲が、セルに利用可能な物理メモリ全体よりも小さい場合には、ステップ１０２において、第１のセル１１は、セルｉが、共有ウィンドウ３０を、図１２のテーブルによって指定された当該共有ウィンドウ自身のセルの有効範囲内に配置していることを保証しなければならない。
【００４３】
第１のＣＰＵ１４は、そのリモート共有ウィンドウ３０にアクセスする権利を有する場合に、ＣＰＵ１４のステータスを示すビットが「許可」に設定された共有設定レジスタ３８のコピーを受信する。
本実施の形態では、第１のＣＰＵ１４は、その共有ウィンドウにアクセスする権利を有しない場合に、受け入れられない要求を示すエラー信号を受信する。
【００４４】
代替的に、第１のＣＰＵ１４は、要求側ＣＰＵのビットが「拒否」に設定されたリモートウィンドウ３０の共有設定レジスタ３８のコピーを受信することができる。
リモートウィンドウ３０が図３に示すように依然として初期化されていない場合、第１のＣＰＵは、エラー信号、または、すべてのビットが「拒否」に設定されたリモート共有設定レジスタのコピーのいずれかを受信する。
本実施の形態では、すべてのエラー信号は、「オール１」信号または「−１」信号から成る。
したがって、「拒否」ビットは１であることが好ましい。
【００４５】
第１のパーティション１０がリモートウィンドウの共有設定レジスタ３８から良好な応答を受信すると、ステップ１３２において、第１のパーティション１０は、パーティション１２内のリモートウィンドウのアドレスレジスタ２６、２８を検査する。
意味のあるウィンドウ３０を定義するために、上限は下限より大きくなければならない。
ウィンドウが一定のサイズを有しなければならないことや、メモリ境界と位置合わせされていなければならないこと等、他の制約条件も存在することがある。
適合しない１対のアドレスレジスタを故意に使用して、関連した共有ウィンドウ３０が利用可能でないことを示すこともできるし、第２のパーティション１２の問題の徴候を示すこともできる。
【００４６】
第２のセル１３のＳＨＡＲＥ＿ＬＯＷＥＲアドレスレジスタ２６およびＳＨＡＲＥ＿ＵＰＰＥＲアドレスレジスタ２８によって画定された共有ウィンドウ３０が意味のあるものである場合、ステップ１３４において、第１のセル１１は、レジスタ２６、２８の双方から読み出した値をチェックして、それらの値が、図１２のテーブルから得られた第２のセルの有効ウィンドウの下限と同程度に大きいことを検証しなければならない。
また、第１のセル１１は、それらの値をチェックして、それらの値が図１２のテーブルから得られた第２のセルの有効ウィンドウの上限よりも小さいことも検証しなければならない。
第２のセル１３のレジスタ２６、２８のアドレスを図１２のテーブルに対して検証することによって、誤ったエントリにより、第１のプロセッサ１４がメモリの不適切な領域の読み出しを試みることになる危険性が低減される。
このメモリは、例えば、アクセスできないメモリ、存在しないメモリ、および／または、第２のパーティション１２に存在しないメモリである。
このような不適切な読み出しの試みによって、第１のプロセッサのオペレーションは遅延する可能性があり、いくつかの状況では、その試みの結果、回復が困難なエラー状態になるおそれがある。
【００４７】
有効な共有ウィンドウアドレスが存在すると、ステップ１３６において、第１のパーティション１０は、第２のパーティション１２に、その共有ウィンドウのウィンドウヘッダ４０の読み出し要求を送信する。
有効なデータが受信されると、第１のパーティション１０は、ウィンドウ３０内のチャネルの検査に進む。
【００４８】
リモートチャネルヘッダが有効であると、ステップ１３８において、第１のＣＰＵ１４は、自身がそのリモートウィンドウ３０で使用するのに利用可能なチャネルをチェックする。
ステップ１０２および１０８で利用可能な情報量に応じて、第１のパーティションの各ローカルチャネルを、第２のリモートパーティション１２の特定のウィンドウの特定のリモートチャネルに事前に割り当てることもできるし、第２のリモートパーティションのチャネルを、ある程度、割り当てないこともできる。
チャネルが事前に完全に割り当てられていると、第１のＣＰＵ１４は、自身に割り当てられるリモートチャネルを検出するまで検索を続ける。
第１のＣＰＵ１４は、リモートチャネルのステータスがステップ１１８で設定されたように「オープン中」であることをチェックする。
いずれの場合も、第１のパーティションは、自身のローカル共有ウィンドウのチャネルＩＤを、チャネルヘッダ４０ｉのチャネルＩＤフィールドに記入する。
第２のパーティションのリモートウィンドウが事前に割り当てられていると、第１のパーティションは、第２のリモートパーティションのチャネルＩＤを、第１のパーティションのローカル共有ウィンドウにおける第１のパーティションのチャネルヘッダのリモートチャネルＩＤフィールドに記入する。
リモートチャネルが事前に割り当てられていないと、第１のローカルパーティションは、リモートチャネルＩＤフィールドのＯＳインスタンスフィールド、ローカル性フィールド、およびウィンドウ＃フィールドを自身のローカル共有ウィンドウに記入し、自身のリモートチャネルＩＤのチャネル＃フィールドに２５５の値を置いて、チャネルが未指定であることを示す。
【００４９】
有効なリモート共有ウィンドウ３０の有効なチャネルが特定されると、第１のパーティション１０は、リモートパーティションのアドレスレジスタ２６、２８を繰り返し読み出す必要がないように自身のアドレスをキャッシュすることが好ましい。
これは、事前に割り当てられたチャネルが使用される場合にのみ行われる。
【００５０】
次に、ステップ１４０において、第１のプロセッサ１４は、リモートチャネルから「ハロー」メッセージを読み出し、「ハロー」メッセージの終端を指し示すように自身のコンシューマポインタ３６を更新して、第１のプロセッサがメッセージを読み出したことを示す。
次に、ステップ１４２において、第１のプロセッサ１４は、自身の対応するチャネルのステータスを「オープン（open）」に設定し、そのチャネルが別のセルのチャネルに合致しており、通信に利用可能であることを示す。
一方、この段階で、第２のＣＰＵ１６は、チャネルが合致していることに気付いておらず、第２のパーティション１２のチャネルは、第２のＣＰＵがチャネルをセットアップする時に、依然として、ステップ１１８で割り当てられた「オープン中」のステータスを有する。
【００５１】
ステップ１４４において、第１のプロセッサ１４は、リモートチャネルヘッダから、チャネルのチャネル割り込みターゲットプロセッサアドレスおよび割り込みベクトルを読み出す。
次に、第１のプロセッサ１４は、その割り込みベクトルを割り込みハンドラ２４を介してそのターゲットプロセッサへ送信し、第１のパーティション１０のチャネルから「ハロー」メッセージを読み出すように第２のプロセッサ１６に通告する。
【００５２】
第１のパーティションが事前に割り当てられたチャネルを検出しておらず、第２のリモートパーティションに、リモートウィンドウにチャネルを割り当てるように依頼したい場合には、第１のパーティションは、ステップ１０４でリモートウィンドウに配置された第２のパーティションのウィンドウ制御割り込みベクトルおよびアドレスを読み出し、第２のパーティションにウィンドウ制御割り込みを送信する。
【００５３】
図４に簡単に示したように、第１のプロセッサ１４は、コンピュータシステム全体のあらゆるセルのあらゆるウィンドウのあらゆるチャネルの検査に進み、通信用のすべての可能な対のチャネルのセットアップに進む。
一方、共有ウィンドウ３０の共有設定レジスタ３８が、その第１のプロセッサ１４がそのウィンドウにアクセスすることを許可しない場合には、第１のプロセッサは、直ちに次のウィンドウにスキップすることができる。
これに加えて、第１のプロセッサ１４は、通例、各リモートセルにおいて、いくつのウィンドウにいくつのチャネルが利用可能であるべきかを知っている。
その結果、第１のプロセッサ１４は、自身の割り当てを満たすと、不要なテストをスキップすることができる。
例えば、第１のプロセッサ１４は、第２のセル１３において利用可能なチャネルを１つだけ有するべきであると知っていると、そのチャネルが特定されてオープンされると、第１のプロセッサは、次のターゲットセルに直ちにスキップすることができる。
例えば、第１のプロセッサ１４が、自身に利用可能な１つのリモートウィンドウ３０のすべてのチャネルを有するべきであると知っている場合、第１のプロセッサ１４は、その正しいウィンドウを検出すると、そのウィンドウのすべてのチャネルをセットアップすることができるが、同じセルのそれ以外のウィンドウをスキップすることができる。
代替的に、第１のプロセッサ１４は、特定の目的で通信パスのセットアップを試みている場合に、それら共有ウィンドウ３０のみを検索することができる。
この共有ウィンドウ３０は、通常、その特定の目的に有用な、特定のリモートパーティション１２の１つまたは複数のセルの１つまたは複数の共有ウィンドウである。
【００５４】
エラーメッセージまたは適用できないリモートチャネルＩＤ３７が、第２のパーティション１２のあらゆる共有ウィンドウ３０から受信されると、第１のパーティション１０は、第２のパーティション１２では、自身に利用可能なチャネルがないと結論する。
本システムが課した制約条件のため、その場合、第１のパーティション１０は、目的の第２のパーティション１２が適切なチャネルをセットアップするまで、自身の通信の試みを一時中断することができる。
第１のＣＰＵ１４は、スタートアップ時に自身の共有ウィンドウ３０をセットアップしている場合に、後にスタートアップするリモートパーティションとの通信を確立できない場合があり、通例、それらのリモートパーティションが現れて、第１のパーティションにおけるそれらリモートパーティションの対応するウィンドウを探すのを待つ必要がある。
セルをインストールまたはアクティブにすることが許可されたシステムでは、システムの実行中に、第１のＣＰＵ１４は、ウィンドウがセットアップされる時にシステムの一部を形成しない第２のセル１３と共に使用される共有ウィンドウ３０、さらには共有チャネル３０ｉをもセットアップすることができる。
このようなどのウィンドウまたはチャネルも、目的の第２のセル１３がアクティブになり、図３および図４に関して上述したステップを実行するまで、アクティブでない状態にある。
【００５５】
次に図５を参照して、第１のプロセッサ１４がリモートチャネル３０ｉを検出し、ステップ１４６でそのチャネルに割り込みを送信すると、第２のセル１３の割り込みハンドラ２４は、ステップ１４７でその割り込みを受信する。
割り込みは、ステップ１１８で割り当てられた「オープン中」のステータスを有するチャネル３０ｉに特有のものであるので、第２のパーティションは、その割り込みを、チャネル３０ｉをオープンする要求であると解釈する。
【００５６】
その要求は、第１のパーティション１０のＣＰＵが第２のパーティション１２の割り込みハンドラ２４に送信した割り込みの形式を取っている。
送信された割り込みは、第１のプロセッサ１４から第２のプロセッサ１６へのメッセージである実際の割り込みベクトルと、双方のプロセッサのアドレスとを含んだパケットである。
本実施の形態では、与えられた宛先アドレスは、単一のプロセッサ１６を特定することが好ましい。
第２のパーティションの割り込みハンドラ２４は、図７に関して以下で説明するように、この割り込みを検証する。
【００５７】
割り込みハンドラ２４が、第１のＣＰＵ１４から入力する割り込みを受け取り、その割り込みを第２のＣＰＵ１６に転送すると仮定すると、第２のＣＰＵは、その割り込みを送信した第１のＣＰＵとの接触を確立することに進む。
本実施の形態では、割り込みハンドラ２４は、割り込みの送信元アドレスを第２のＣＰＵ１６に転送しないが、実際の割り込みベクトルのみを転送する。
特定の第２のＣＰＵ１６に送信された特定の割り込みベクトルは、パーティション１２内のローカルチャネルを一意に特定するが、リモートチャネルを特定しない。
次に、ステップ１４８において、第２のＣＰＵ１６は、他のどのプロセッサが、自身との通信を試みているかを決定する。
チャネル割り当てが事前に決定されていると、第２のＣＰＵ１６は、該当するローカルチャネルが割り当てられるリモートチャネルを捜して、割り当てられたリモートチャネルと接触することができる。
【００５８】
代替的に、第２のＣＰＵ１６は、該当するローカルチャネルの「ハロー」メッセージを含むリモートチャネルを検索しなければならない場合がある。
したがって、ステップ１４８は、第２のプロセッサ１６が、待っている「ハロー」メッセージを検出するまで、図５の後続のステップ１４９を繰り返すことから構成することができる。
チャネルが部分的に事前に割り当てられている場合、第２のＣＰＵ１６は、割り込みのほぼ正確な発信源を推定できる場合があり、そのほぼ正確な発信源のリモート共有ウィンドウ３０のみをポーリングすることができる。
代替的に、送信元アドレスが割り込みと共に転送される場合、第２のＣＰＵ１６は、ステップ１４８で送信元アドレスを読み出すことができ、次いで、第２のＣＰＵは、図５のステップ１４９を実行して、セル１１、パーティション１０、または割り込みの送信元アドレスによって特定された他の近傍の共有ウィンドウ３０のみをポーリングすることができる。
受信した割り込みが不完全な送信元アドレスを運ぶ場合、割り込みハンドラ２４は、異なる送信元からの類似した割り込みをキューに入れて転送しなければならず、また、第２のプロセッサ１６は、このような各割り込みを個別に処理しなければならない。
【００５９】
ステップ１４９において、第２のＣＰＵ１６は、図４のステップ１３０〜１４４のプロセスを実行して、ステップ１４７で割り込みを送信した少なくともリモートチャネルを検出する。
【００６０】
ステップ１４６に関して説明したように、第２のプロセッサ１６は、第１のプロセッサ１４に割り込みを送信して、現在、利用可能なチャネル３０ｉが第２のパーティション１２のオープンした共有ウィンドウ３０にあることを第１のプロセッサ１４に知らせることができる。
代替的に、第１のプロセッサ１４は、ステップ１４６で割り込みを送信した後、適切な遅延を待つことができ、次いで、ステップ１４９において、第１のプロセッサ１４は、ステップ１３０〜１４４を繰り返して、第１のプロセッサ１４にとってオープンした共有ウィンドウ３０が現在第２のパーティション１２にあると判断する。
【００６１】
図３および図４に関して説明したプロセスのある時点で、共有ウィンドウ３０がすでにオープンであって、第１のパーティション１０と第２のパーティション１２との間の通信に利用可能であることが判明し、利用可能なチャネルがそのウィンドウでオープンでないことが判明し、かつ、オープンでないチャネルが利用可能であることが判明すると、図３および／または図４のうち、チャネルのセットアップに関係した部分のみを、既存のウィンドウに対して実行する必要がある。
【００６２】
次に図６を参照して、第１のパーティション１０が第２のパーティション１２と通信したい場合、第１のパーティションは、第２のパーティションが、その第１のパーティションにとってアクセス可能な共有ウィンドウ３０を有するが、その共有ウィンドウ内のチャネル３０ｉのいずれも第１のパーティションにとって利用可能でないことを検出する場合がある。
これは、適切な第２のチャネル３０ｉが依然としてセットアップされていないことによるか、または、第１のパーティションが２つのパーティション間で使用するチャネル数を増加させたく、増加を許可されることにより生じる場合がある。
その場合、第１のパーティション１０は、適切なローカルチャネル３０ｉをセットアップし、次いで、ステップ１０４で割り当てられたウィンドウ制御割り込みを第２のパーティションに送信する。
【００６３】
ステップ１５０において、第１のパーティションが自身に割り当てられたチャネル数を増加させたいか、または、チャネル割り当てが部分的にしかセットアップされていなかったことから、第２のパーティションのＣＰＵは、第１のパーティションが送信したウィンドウ制御割り込みを受信する。
このウィンドウ制御割り込みに応答して、ステップ１５２において、第２のパーティションは、第２のウィンドウ３０の新たなチャネル３０ｉをセットアップする。
次に、ステップ１５４において、第２のパーティションは、リモートチャネルを第１のパーティション１０に配置し、上述したような通信を確立する。
ウィンドウ制御割り込みは、割り込みを送信したセルを具体的に特定しないので、第２のパーティションは、図６に示すように、適切なリモートウィンドウを検索する。
この場合、図４に示す検索および照合のプロセス全体を実行することは必要でない場合がある。
その理由は、ウィンドウ制御割り込みが、第２のウィンドウ３０を読み出することを許可されたセルであって、ウィンドウ制御割り込みを第２のパーティションに送信することを許可されたセルから来たものに違いないことを第２のパーティション１２が知っているからである。
特定の対のウィンドウが事前に割り当てられている場合、検索は、１対のチャネルを、該当する第２のウィンドウ３０と適切に共有できる第１のセルとなり得るもののウィンドウにさらに制限することができる。
【００６４】
図７を参照して、あるパーティションの割り込みハンドラ２４が割り込みを受信すると常に、検証プロセスが実行される。
図７では、割り込みを受信したパーティションは第２のパーティション１２と呼ばれるが、本実施の形態では、入力する割り込みを受信したあらゆる割り込みハンドラによって同じ検証手順が実行される。
ステップ１５６において、割り込みハンドラ２４は割り込みを受信し、ステップ１５７において、割り込みハンドラは、その割り込みの送信元アドレスおよび宛先アドレスを検査して、それらのアドレスにアクセスする。
送信元が、ターゲットＣＰＵ１６が高く信頼したプロセッサ、例えば、ターゲットＣＰＵ１６と同じパーティション１２のプロセッサである場合、割り込みハンドラ２４は、ステップ１５８でさらに検査することなく、その割り込みを転送することができる。
ステップ１５９において、ホストは、その割り込みに応じた適切などんな動作でも実行する。
【００６５】
割り込みの送信元が、ターゲットＣＰＵ１６が割り込みを受け取るプロセッサでない場合、割り込みはステップ１６０でさらに検査されることなく廃棄することができる。
ステップ１６１において、ホストプロセッサはゲストプロセッサ１４に応答しない。
所定の時期に、ステップ１６２において、ゲストプロセッサ１４はタイムアウトし、通信の試みを中止する。
【００６６】
割り込みの送信元が、ホストプロセッサ１６が一部の割り込みを受け取るが、すべての割り込みを受け取るとは限らない別のパーティション１０のプロセッサ１４である場合、割り込みハンドラ２４は、割り込みの内容を検査する。
ステップ１６４において、割り込みハンドラ２４は、割り込みがアドレス指定されたターゲットプロセッサをＩＮＴ＿ＴＡＲＧＥＴ＿ＥＮＡＢＬＥレジスタと照合する。
ターゲットプロセッサが許可されない場合、割り込みはステップ１６０で廃棄される。
ターゲットプロセッサが許可される場合、ステップ１６５において、割り込みベクトルがＩＮＴ＿ＶＥＣＴＯＲ＿ＥＮＡＢＬＥレジスタと照合される。
ターゲットベクトルが許可されない場合、その元の割り込みはステップ１６６で廃棄され、ステップ１６８で、元の割り込みで指定されたターゲットプロセッサへの割り込みに置き換えられる。
しかしこの割り込みは、ＩＮＴ＿ＥＲＲＯＲ＿ＶＥＣＴＯＲレジスタが指定した割り込みベクトルを有する。
ターゲットベクトルが許可されると、割り込みハンドラ２４は、ステップ１５８でプロセッサ１６に割り込みを送信する。
本実施の形態では、異なるパーティションの第１のプロセッサ１４からの割り込みは、通常、その割り込みがステップ１０４でウィンドウ制御割り込みとして割り当てられたものであるか、または、ステップ１１６でチャネルメッセージ割り込みとして割り当てられたものである場合に限って受け取ることができる。
【００６７】
次に図８を参照して、パーティション１０、１２の共有ウィンドウ３０の１対のチャネルを使用して通信が確立されると、例えば、第１のプロセッサ１４が第２のパーティション１２にメッセージを送信したい場合に、ステップ１７０において、第１のプロセッサ１４は、ローカルパーティション１０における共有ウィンドウ３０のチャネル３０ｉの送信キュー３２ｉにメッセージを置く。
第１のプロセッサ１４は、メッセージの終端を指し示すように自身のプロデューサポインタ３４ｉを更新する。
ステップ１７２において、第１のプロセッサ１４は、第２のプロセッサ１６にメッセージ割り込みを送信する。
第１のプロセッサは、ステップ１４４で判明した割り込みベクトルを、ステップ１４４で判明した割り込みターゲットに送信する。
ステップ１７４において、入力する他の割り込みと同様に、第２のパーティションの割り込みハンドラ２４は、ステップ１５６〜１６８に関して上述したように割り込みを検査する。
割り込みが受け取り可能であると仮定すると、割り込みは、ステップ１７６で第２のＣＰＵ１６に転送される。
割り込みは、リモート共有ウィンドウ３０の割り当てられたチャネル３０ｉに第２のＣＰＵ１６の新たなメッセージがあることを第２のＣＰＵ１６に知らせる。
この割り込みは、ステップ１１６で割り当てられた特定の割り込みであり、また、１対のリモートチャネルとローカルチャネルとの間の通信は、ステップ１３０〜１５６で確立されたものであるので、第２のＣＰＵ１６は、メッセージがどのリモートセルのチャネルにあるかを知る。
【００６８】
リモートチャネルのキャッシュされたアドレスを使用すると、第２のＣＰＵ１６は、第１のＣＰＵ１４がそのアドレスに置いたメッセージをステップ１７８で直ちに読み出すことができる。
第２のＣＰＵ１６がメッセージを読み出したことを示すために、第２のプロセッサ１６は、当該第２のプロセッサが読み出したリモート送信キュー３２ｉのメッセージの終端を指し示すようにコンシューマポインタ３６を更新する。
第２のプロセッサ１６は、第１のパーティション１０に書き込みアクセスを行わないので、第２のプロセッサ１６は、第２のパーティション１２の共有チャネル３０ｉのコンシューマポインタ３６を更新する。
第１のプロセッサ１４は、第２のパーティションの共有ウィンドウ３０のコンシューマポインタ３６を読み出して、第２のプロセッサが、第１のパーティションの送信キュー３２ｉからメッセージを読み出したことを確認する。
【００６９】
各プロセッサがステップ１７０〜１８２を順に繰り返し、２つのプロセッサが、自身のプロデューサポインタ３４およびコンシューマポインタ３６を更新することによって進行を信号で伝達することで、２つのプロセッサ間の対話を進めることができることが分かる。
最終的には、会話は終了する。
【００７０】
チャネルをクローズすることが望まれる場合、ＣＰＵ１４または１６のいずれかがクローズを開始することもできるし、双方が同時にクローズを開始することもできる。
以下では、第１のＣＰＵ１４がクローズを開始するものと仮定する。
次に図９を参照して、ステップ１９０において、第１のＣＰＵ１４は、まず、リモートコンシューマポインタ３６とローカルプロデューサポインタ３４とを比較する。
ステップ１９２において、リモートプロセッサがローカル送信キューの最後のメッセージを依然として読み出していない場合、第１のプロセッサ１４は、リモートプロセッサが最後のメッセージを読み出すのを待たなければならない。
第１のプロセッサ１４は、リモート送信キューの最後のメッセージを依然として読み出していない場合に、そのメッセージを読み出し、ローカルコンシューマポインタを更新して、メッセージが読み出されたことを示す。
【００７１】
次に、ステップ１９４において、第１のプロセッサ１４は、それ自身のチャネルのステータスを「クローズ中（closing）」に変更して、チャネルメッセージ割り込みを送信する。
ステップ１９６において、第２のプロセッサ１６は、リモートウィンドウ３０のチャネルを読み出す。
第２のプロセッサは、新たなメッセージがなく、ステータスが「クローズ中」に設定されていることを知る。
ステップ１９８において、第２のプロセッサ１６は、それ自身のチャネルのステータスを「クローズ済み（closed）」に設定して、チャネルメッセージ割り込みを第１のプロセッサ１４に送信することにより応答する。
ステップ２００において、第１のプロセッサ１４は、その応答を見て、ローカルチャネルのステータスを「クローズ済み」に設定する、次に、各プロセッサは、チャネルメッセージ割り込みを割り当て解除することができ、ステップ１０６〜１１０で設定された、ウィンドウ定義により固定されないヘッダデータのいずれもヌルに設定することができる。
【００７２】
共有ウィンドウ３０のチャネルのすべてがクローズされると、ウィンドウをクローズすることができる。
このウィンドウのクローズは、下限レジスタ２６および上限レジスタ２８をヌル設定または無効な設定に設定すること、共有設定レジスタ３８を「全拒否」設定またはヌル設定に設定すること、および、このウィンドウ自体に割り当てられたメモリと、ステップ１０４で割り当てられたウィンドウ制御割り込みと、ステップ２００で割り当て解除されなかったあらゆるチャネルメッセージ割り込みとを割り当て解除すること、によって行われる。
システムの実行中に、ウィンドウ３０がクローズされることがある。
その理由は、そのウィンドウが配置されたセル１１、１３またはパーティション１０、１２がクローズダウンまたは再起動する必要があるか、または、それ以外に、ウィンドウに割り当てられた資源を解放する必要があるからである。
これは、オープンのチャネルを含まないオープンのウィンドウを有する別のセルまたはパーティションを残すことがある。
本実施の形態では、そのウィンドウは、通例、オープンの状態に維持され、その結果、クローズしたウィンドウを有するセルが再起動する時、そのセルは、図３および図４に関して上述したステップに従うことによって通信を容易に確立することができる。
セルを除去するか、または、置き換える必要がある場合、新たなセルは、他のセルまたはパーティションのいずれも再構成する必要なく、除去されたセルのウィンドウ割り当ておよびチャネル割り当てを再開することができる。
パーティションのあるセルが切断されると、切断されたセルが通信を行う他のパーティションに、切断されたセルと同じパーティションの他のセルとの数対のチャネルを追加して確立するように指令することができる。
切断されたセルが回復するか、または、置き換えられると、これらの追加された接続をクローズすることができ、切断されたセルへの接続は回復する。
【００７３】
ウィンドウ割り込みまたはチャネル割り込みが割り当て解除された後、プロセッサは、ＩＮＴ＿ＴＡＲＧＥＴ＿ＥＮＡＢＬＥレジスタおよびＩＮＴ＿ＶＥＣＴＯＲ＿ＥＮＡＢＬＥレジスタをチェックし、他のウィンドウ制御割り込みもチャネル制御割り込みも、依然として同じベクトルまたはターゲットを使用していない場合に、そのベクトルまたはターゲットを許可されないものとして設定する。
【００７４】
本実施の形態では、２つのパーティション１０と１２との間の相互作用を制御する理由から、図１〜図９に示すシステムは、システムのあらゆる部分の故障に高度な耐性を有する。
ゲストパーティションの故障は、一般に、ホストパーティションに影響を与えない。
回復不能なエラーがゲストパーティションに発生すると、ゲストパーティションはシャットダウンするが、ホストパーティションはオペレーションを続ける。
最悪の場合、ホストパーティションは、ゲストパーティションが共有ウィンドウ３０のメッセージを読み出したという確認を受信せず、接続は最終的にはタイムアウトする。
【００７５】
次に図１０を参照して、ステップ２５０において、ゲストパーティション１０は、ホストパーティション１２からデータを得たい場合があり、適切な要求を自身のプロセッサインターフェース１５に送信する。
ステップ２５２において、ゲストプロセッサインターフェース１５は、ホストメモリ２０の「タイムアウトフラグ」が設定されているかどうかをチェックする。
タイムアウトフラグは、最初は、未設定であり、したがって、プロセスが最初にステップ２５２に達した時、プロセスはＮＯに分岐する。
次に、ステップ２５４において、ゲストプロセッサインターフェース１５は、ホストメモリ２０にデータを要求する。
ステップ２５６において、ホストパーティションが、「良好な」応答、すなわち、要求されたデータを供給する明確で有効な応答、を送信すると、ステップ２５８において、ゲストプロセッサインターフェース１５は、要求側のゲストＣＰＵ１４にデータを返す。
接続が故障しなかった場合または回復した場合、ゲストパーティション１０は、ホストメモリ２０からのデータを必要とするごとに、ステップ２５０〜２５８を繰り返すことになる。
【００７６】
ステップ２５６において、ゲストパーティション１０のプロセッサインターフェース１５が、要求に対して、認識できない応答、不完全な応答、またはそれ以外に使用できない応答を受信すると、プロセッサインターフェース１５は、ステップ２６０でその応答を廃棄し、ステップ２６２でエラーメッセージを要求側ＣＰＵに返す。
この実施の形態では、エラーメッセージは、有効にすることができない内容を有するデータパケットから構成することができる。
例えば、パケットフォーマットが、有効などのパケットもすべて１から構成されないようにしている場合に、ゲストプロセッサインターフェース１５は、ゲストＣＰＵ１４に、すべて１を含むデータパケットを供給することができる。
次に、プロセスは、さらに動作を行うことなくステップ２５０に戻る。
ステップ２５６において、要求に対する応答が、ホストメモリ２０から全く受信されない場合、ゲストプロセッサインターフェース１５は、応答が単に遅れているだけでなく存在しないことを確実にするために、タイムアウト期間が終了するまで待つ。
次に、ステップ２６４において、ゲストプロセッサインターフェース１５は、「エラー」データを要求側ＣＰＵに返すメッセージを組み立てるステップ２６２に進む前に、ホストメモリ２０のタイムアウトフラグを設定する。
【００７７】
タイムアウトフラグがステップ２６４で設定された後、ゲストプロセッサインターフェース１５が、ステップ２５０において、ホストメモリ２０から別のデータブロックの要求を受信すると、ステップ２５２は、タイムアウトフラグが設定されていることを示し、ゲストプロセッサインターフェースは、ステップ２６２に直接進んで「エラー」データを要求側ＣＰＵに返すメッセージを組み立てる。
タイムアウトフラグは、ホストメモリ２０への接続が完全に喪失したものと仮定するように図１０のプロセスに命令する効果を有する。
このように、ゲストパーティション１０は、通常ならば、ステップ２５６においてタイムアウト期間が満了するのを待つことで費やされる時間をバイパスしている。
【００７８】
したがって、データ要求に対する応答が欠落するか、または、判読不能に変形した結果、一時的な割り込みのみが実際に存在し、その後のホストメモリ２０への接触の試みが成功していたことになる場合に、ゲストパーティション１０は、ホストパーティションへの接続が喪失したものとみなすことができる。
これによる最悪の結果は、ゲストパーティションによるその後の作業が、ホストパーティションからのデータが利用可能でないことによって不必要に妨げられるおそれがあり、処理時間をいくらか損失することである。
【００７９】
次に図１１を参照して、ステップ２１０において、ゲストパーティション１０は、ホストパーティション１２から複数のデータブロックの「所有権」を取得することができる。
本実施の形態では、所有権の付与は、通例、そのデータを変更する「書き込み」許可を移転するものではなく、データが変更されないことの保証を移転するものである。
したがって、ホストパーティション１２は、そのデータを変更するそれ自身の「書き込み」許可を一時中止する。
ステップ２１２において、２つのパーティション間の接続がそれらの状況下で故障すると、ホストパーティション１２は、ゲストパーティション１０がそのデータを現状のまま維持する必要が依然としてあるかどうかを知ることはできない。
接続は、ゲストパーティション１０の問題が原因で故障することもあるし、２つのパーティションを接続するファブリックの問題が原因で故障することもある。
その故障がどの程度の重度のものであるかは、ホストパーティション１２にすぐに明らかでないことがある。
確かに、ホストパーティション１２は、そのゲストパーティション１０と次に通信を試みるまで、故障が存在することを発見することができない。
ゲストパーティション１０は、致命的なエラーを受けて、シャットダウンする必要がある場合に、他のパーティションから借りたすべてのデータを返すことが理想的ではあるが、これは可能でない場合がある。
【００８０】
ステップ２１４において、ホストメモリ２０は、ゲストＣＰＵ１４が所有するデータブロックの１つについて別の要求を受信することがある。
この要求は、データのゲストパーティションの所有権と矛盾するものである。
ステップ２１６において、ホストメモリ２０は、ゲストＣＰＵ１４の「タイムアウトフラグ」が設定されているかどうかをチェックする。
タイムアウトフラグは、最初は未設定であり、したがって、プロセスが最初にステップ２１６に達した時、プロセスはＮＯに分岐する。
次に、ステップ２１８において、ホストメモリ２０は、データを「リコール（recall）」するように試みる。
これは、そのデータが現状のままであることを信用するゲストパーティションの権利を無効にする効果を有する。
ステップ２２０において、ゲストパーティションが、「良好な」応答、すなわち、リコールを受け取り、データの所有権を引き渡す明確で有効な応答、を送信すると、ステップ２２２において、ホストメモリ２０は要求側ＣＰＵにデータを返す。
接続が故障しなかった場合または回復した場合、ホストメモリ２０は、ゲストＣＰＵ１４からの所有権をリコールする必要があるデータ要求を受信するごとに、ステップ２１４〜２２２を繰り返すことになる。
【００８１】
ステップ２２０において、ホストパーティション１２のメモリ２０が、リコール要求に対して、認識できない応答、不完全な応答、またはそれ以外に使用できない応答を受信すると、メモリは、ステップ２２４でその応答を廃棄し、ステップ２２２でそのデータを要求側ＣＰＵに返す。
次に、プロセスは、さらに動作を行うことなくステップ２１４に戻る。
ステップ２２０において、リコール要求に対して、応答がゲストＣＰＵ１４から全く受信されない場合、ホストメモリ２０は、応答が単に遅れているだけでなく存在しないことを確実にするために、タイムアウト期間の終了まで待つ。
次に、ステップ２２６において、ホストメモリ２０は、データを要求側ＣＰＵに返すメッセージを組み立てるステップ２２２に進む前に、ゲストＣＰＵ１４のタイムアウトフラグを設定する。
【００８２】
タイムアウトフラグがステップ２２６で設定された後、ホストメモリ２０が、ステップ２１４において、ゲストプロセッサ１４が所有する別のデータブロックの要求を受信すると、ステップ２１６は、タイムアウトフラグが設定されていることを示し、ホストメモリ２０は、ステップ２２２に直接進んでデータを要求側ＣＰＵに返すメッセージを組み立てる。
タイムアウトフラグは、ゲストＣＰＵ１４への接続が完全に喪失したものと仮定するように図１０のプロセスに命令する効果を有する。
このように、ホストメモリ２０は、通常ならば、ステップ２２０においてタイムアウト期間が満了するのを待つことで費やされる時間をバイパスしている。
【００８３】
したがって、リコールメッセージに対する応答が欠落するか、または、判読不能に変形した結果、ゲストパーティション１０がリコールメッセージを受信していなかった場合、ホストパーティション１２は、リコールが成功したものとみなすことができ、ホストパーティションのデータを自由に変更できるようにすることができる。
これによる最悪の結果は、リコールされたデータがもはや有効ではない場合に、ゲストパーティションによるその後の作業がそのデータに依拠するおそれがあり、いくぶん無駄な作業になることである。
【００８４】
ゲストパーティションは、ホストパーティションの共有ウィンドウに書き込む権限を有しないので、共有ウィンドウのデータの完全性は影響を受けない。
したがって、ホストパーティションは、共有ウィンドウのデータ領域３２をアクティブな作業メモリとして使用することが可能である。
代替的に、メッセージを非共有メモリで準備することができ、次いで、専ら共有の目的のみで共有ウィンドウ３０にコピーを置くことができる。
共有メモリに置かれたコピーは、その後、特に共有の目的で生成されたチェックワードまたは他の認証データと共に容易に提供することができる。
本実施の形態では、すべてが１から成るメッセージがエラー信号として使用される。
したがって、１の長い列から成る可能性があるデータを送信する場合、チェックビットまたはチェックワードを含めることができ、データのメッセージがすべて１にならないように、これらのチェックビットまたはチェックワードを定義することができる。
【００８５】
本実施の形態では、ホストパーティションの故障は、ゲストパーティションが、要求したデータを得ることができない程度にしかゲストパーティションに影響しない。
ホストパーティションに「致命的な」エラーがあっても、ゲストパーティションにとって致命的ではない。
回復不能なエラーがホストパーティションに発生すると、ホストパーティションはシャットダウンするが、ゲストパーティションはオペレーションを続けることができる。
一方、この実施の形態では、故障は、明示的なエラーメッセージの形でホストパーティションからゲストへ通信されるか、または、タイムアウト前の応答の失敗によって通信される。
応答の失敗は、ゲストパーティションのプロセッサインターフェースによって、明示的なエラーメッセージに変換することができる。
その後、ゲストパーティションは、適切な損傷軽減対策を続けることができる。
２つのパーティション間の共通の通信媒体の故障も、同様に、対話のタイムアウトにしかならない。
【００８６】
回復不能なエラーがホストパーティションとゲストパーティションとの間の通信を提供するファブリックに発生すると、各パーティションは、オペレーションを続けることができるが、他方のパーティションが、あたかも回復不能のエラーに続いてシャットダウンしたのと同じように２つのパーティション間の通信を取り扱うことができる。
一方、本実施の形態では、異なるパーティションを接続する通信ファブリックも、パーティション内のセル間の通信に使用することができる。
その結果、そのファブリックの故障は、２つのパーティション間の通信に対するその影響から独立して、一方または双方のパーティション内の故障を構成することができる。
【００８７】
本実施の形態のパーティション間の相互作用に対する制御は、敵意のあるパーティションが故意に別のパーティションの妨害を試みることができる多くのメカニズムをも防止する。
敵意のある情報は、その情報をプロデューサの共有ウィンドウ３０から読み出すようにコンシューマを促すことによってのみ、パーティション１０と１２との間で転送することができる。
しかしながら、読み出されたマテリアルのハンドリングは、コンシューマパーティションの制御下にあり、コンシューマパーティションは、マテリアルの制御において、自身が望むだけ慎重になることができる。
コンシューマパーティションは、割り当てられたチャネルまたはウィンドウのデータ領域３２ｉの内容のみを読み出し、このチャネルまたはウィンドウは規定されたサイズを有するので、この実施の形態では、受信側パーティションにおいて、指定された書き込み可能領域をオーバーフローする超過した長さのメッセージによって引き起こされるセキュリティの侵害は排除される。
【００８８】
パーティション間の通信は、マルチプロセッサコンピュータシステムの異なるプロセッサ間にすでに提供されている高速通信パスを使用できるので、本実施の形態の通信速度は高速にすることができる。
セキュリティは、許可されるメッセージの性質および内容に対して維持された非常に厳密な制御によって保証され、また、準拠しないどのメッセージも廃棄することによって保証される。
【００８９】
本発明の例示の実施の形態に関して本発明を説明および図示してきたが、添付した特許請求の範囲に列挙した本発明の趣旨および範囲から逸脱することなく、さまざまな変更、省略、および追加を本発明に行えることが当業者には理解されよう。
例えば、図１に示すプロセスは、単一のゲストパーティション１０の単一のゲストプロセッサ１４と単一のホストパーティション１２の単一のホストプロセッサ１６との間のプロセスとして説明されている。
しかしながら、上記で説明したように、３つの以上のパーティションが存在することもでき、各パーティションには２つ以上のＣＰＵが存在することもできる。
１つのパーティションにつき２つ以上のＣＰＵが存在できる場合、共有ウィンドウは、個々のＣＰＵとリンクするように設定することができる。
詳細には、各セルが１つまたは２つ以上のプロセッサ、メモリ、および補助デバイスを備える複数のセルにシステムが構造化されると、共有ウィンドウはそれらのセルをリンクすることができる。
さらに、各セルが、指定された他のセルに付与する許可を変更するだけで、セルをパーティションにグループ化することができる。
割り込みまたは他のメッセージがセルに入る２つ以上の物理パスが存在する場合、いずれの割り込みまたはいずれの他のメッセージを承認するか、また、いずれを排除するかを決定する上述した手順は、それぞれがセルに入る時に並列に実行することができる。
【００９０】
共有ウィンドウ３０によって互いにリンクされる３つの以上のパーティション、セル、または他のエンティティが存在する場合、各エンティティは、そのエンティティが安全な通信を必要とする通信相手の他のエンティティと同数の共有ウィンドウ３０を有することができる。
代替的に、上述したように、例えば、第１のプロセッサから第２のプロセッサおよび第３のプロセッサへの通信パスは、第１のパーティション内の単一のウィンドウの異なるチャネルを使用することができる。
第２のプロセッサおよび第３のプロセッサは、そのウィンドウの読み出しアクセスしか行わないので、このような機構は、例えば、第２のプロセッサにおける故障が第３のパーティションに悪影響を与える可能性がある実際の危険性を生み出すことはない。
単一のセル、パーティション、または他のエンティティにおける異なる共有ウィンドウ３０は、他の異なるパーティションがそれら共有ウィンドウにアクセスすることを許可する共有設定レジスタ３８を有することができる。
特定の共有ウィンドウ３０が特定の他のパーティションまたはセルと通信するのに割り当てられる場合、その特定の他のパーティションまたはセルのみがその共有ウィンドウを読み出すことを許可するように共有設定レジスタ３８を設定することができる。
【００９１】
２つ以上の対話が同時に行われる場合、各対話は、その対話に関与するパーティションのそれぞれにおいて１つずつ、個別の１対の共有ウィンドウ３０を使用することができる。
この場合、対話のすべてが故障した資源を独立に使用する場合を除いて、ある対話における故障は他の対話に影響しない。
代替的に、単一の共有ウィンドウ３０をいくつかの対話に使用することもできる。
これらのいくつかの対話が関係しない場合、それら対話のそれぞれに、共有ウィンドウ３０の個別の部分を占有するチャネルを割り当てることができる。
このチャネルは、それ自身のプロデューサポインタ３４ｉ、コンシューマポインタ３６ｉ、およびリモートチャネルＩＤ３７ｉを有する。
これによって、別個の共有ウィンドウ３０を維持するのに必要なオーバーヘッドが削減される。
【００９２】
多数の他のパーティション１０が読み出すことができる共有ウィンドウ３０を使用して、ブロードキャスト接続を確立することができる。
信頼できるブロードキャストが確保されると、各読み出し側パーティション１０は、コンシューマポインタ３６ｉを有する対応したチャネルを割り当てなければならず、ブロードキャスト側パーティション１２は、ブロードキャストを別のデータで上書きする前に当該ブロードキャストを読み出したことを示すために、読み出し側パーティションのすべてが自身のコンシューマポインタ３６ｉを更新したことをチェックしなければならない。
代替的に、接続が、パーティションのほとんどの対またはすべての対の間で正常にオープンしていると、パーティション対パーティション接続を使用して、ブロードキャストメッセージを各受信側パーティションに個別に送信することもできる。
【図面の簡単な説明】
【００９３】
【図１】本発明の一実施の形態によるコンピュータシステムの一形態のブロック図である。
【図２】本発明の一実施の形態におけるウィンドウ内のフィールドのブロック図である。
【図３】ローカルパーティション内の共有ウィンドウおよびチャネルをセットアップするプロセスの一実施の形態のフローチャートである。
【図４】リモートパーティション内に利用可能なチャネルを配置して、当該リモートパーティションとの通信を確立するプロセスの一実施の形態のフローチャートである。
【図５】メッセージ割り込みに応答してチャネルを確立するプロセスの一実施の形態のフローチャートである。
【図６】特定のチャネルが事前に割り当てられていない場合、または、新たなチャネルを既存のウィンドウに追加するように第１のパーティションが要求した場合のいずれかに、ウィンドウ制御割り込みに応答してチャネルを確立するプロセスの一実施の形態のフローチャートである。
【図７】入力する割り込みをハンドリングするプロセスの一実施の形態のフローチャートである。
【図８】パーティション間でデータを転送するプロセスの一実施の形態のフローチャートである。
【図９】チャネルをクローズするプロセスの一実施の形態のフローチャートである。
【図１０】ゲストパーティションがホストパーティションにデータを要求するプロセスの一実施の形態のフローチャートである。
【図１１】ホストパーティションがゲストプロセッサに付与されたデータ所有権をリコールするプロセスの一実施の形態のフローチャートである。
【図１２】アドバンストコンフィギュレーションアンドパワーインターフェース（ＡＣＰＩ）テーブル内のフィールドの一実施の形態のブロック図である。
【符号の説明】
【００９４】
１０，１２・・・パーティション，
１１，１３・・・セル，
１４，１６・・・中央処理装置（ＣＰＵ），
１５，１７・・・プロセッサインターフェース，
１８・・・メモリコントローラ，
２２・・・割り込みハンドラ，
２０・・・メモリコントローラ，
２４・・・割り込みハンドラ，
２６，２８・・・アドレスレジスタ，
３８・・・共有設定レジスタ，
３０・・・共有ウィンドウ，
３０ｉ・・・チャネル，
３２ａ〜３２ｎ・・・データ領域，
３４ａ〜３４ｎ・・・プロデューサポインタ，
３６ａ〜３６ｎ・・・コンシューマポインタ，
４０ａ〜４０ｎ・・・チャネルヘッダ，
【図１】
2006040284.tif 000003
【図２】
2006040284.tif 000004
【図３】
2006040284.tif 000005
【図４】
2006040284.tif 000006
【図５】
2006040284.tif 000007
【図６】
2006040284.tif 000008
【図７】
2006040284.tif 000009
【図８】
2006040284.tif 000010
【図９】
2006040284.tif 000011
【図１０】
2006040284.tif 000012
【図１１】
2006040284.tif 000013
【図１２】
2006040284.tif 000014