(57)【要約】【課題】コンピュータシステム上の異なるパーティション中で複数のオペレーティングシステム（ＯＳ）を動作させ、各々が共用メモリを介して相互に通信可能にすること【解決手段】各パーティションに構成できる複数の処理モジュールとメインメモリ（ＭＭ）を含む。各パーティションは別々のＯＳの制御下で動作する。少なくとも１つの共用メモリ・ウインドウ（ＭＷ）がＭＭ内に規定され、複数のパーティションがそこへの共用アクセス権を有する。各パーティションには排他メモリウインドウ（ＭＷ）も割り当てる。異なるパーティション上で実行するプログラムコードにより、各パーティションは共用ＭＷを介して相互通信可能である。各パーティション中のプロセッサの物理アドレス空間を各パーティションの各排他ＭＷにマッピングする手段も提供され、各パーティションの排他ＭＷはそこで実行する各ＯＳにはすべて同じベース・アドレスで開始するように見える。【選択図】図３
2006216068.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理モジュールであって、各処理モジュールは複数のプロセッサを備え、１つまたは複数の処理モジュールのグループは、コンピュータ・システム内の別々のパーティションとして構成され、各パーティションは、別々のオペレーティング・システムの制御下で動作する処理モジュールと、
メイン・メモリであって、各パーティションに排他メモリ・ウインドウはメイン・メモリ内で割り当てられており、排他メモリ・ウインドウへは、そのパーティションの処理モジュールだけしかアクセス権を有さず、排他メモリ・ウインドウ中では、そのパーティションのオペレーティング・システムが動作する、メイン・メモリとを備えるコンピュータ・システムであって、
各処理モジュールは、さらに、
前記メイン・メモリのベース（基底）物理アドレスから、前記処理モジュールが一部をなす前記パーティションに割り当てられた前記排他メモリ・ウインドウの開始までのオフセット（ＲＬＯＳ）を保持するレジスタと、
その処理モジュールのプロセッサによるその物理アドレス空間内の位置への各参照に前記オフセット（ＲＬＯＳ）を加算し、それにより、これらの参照を前記排他メモリ・ウインドウ内のこれらに対応する位置に再配置する加算器と
を備えることを特徴とするコンピュータ・システム。
【請求項２】
各排他メモリ・ウインドウは、それぞれのオペレーティング・システムには０のベース（基底）物理アドレスを有すると見えるようにされることを特徴とする請求項１に記載のコンピュータ・システム。
【請求項３】
所与のパーティションの前記プロセッサの前記物理アドレス空間は、メモリ記憶に利用不可能なアドレスの範囲を含むことができ、前記利用不可能な範囲はメモリ・ホールを規定し、前記メモリ・ホールより上のアドレスはハイ・メモリ範囲を規定し、メモリ・ホールより下のアドレスはロー・メモリ範囲を規定し、前記コンピュータ・システムはさらに、前記所与のパーティションの前記排他メモリ・ウインドウの、通常ならメモリ・ホールに対応することになる部分を他の用途に再利用する手段を備えることを特徴とする請求項１に記載のコンピュータ・システム。
【請求項４】
前記再利用する手段は、前記パーティションの各処理モジュールごとに、前記メモリ・ホールのサイズを表す値（ＲＣＯＳ）を保持するレジスタを備え、前記加算器は、
（ｉ）その物理アドレス空間の前記ロー・メモリ範囲内の位置への、前記パーティション中のプロセッサによる各参照に前記オフセット（ＲＬＯＳ）を加算し、それにより、これらの参照を前記排他メモリ・ウインドウ内のこれらに対応する位置に再配置し、
（ｉｉ）前記オフセットから前記メモリ・ホールのサイズを表す値を引いた値（ＲＬＯＳ−ＲＣＯＳ）を、その物理空間のハイ・メモリ範囲内の位置への、前記パーティション中のプロセッサによる各参照に加算し、
それにより、これらの参照を、前記排他メモリ・ウインドウ内のこれらに対応する位置に再配置して、前記排他メモリ・ウインドウの、通常なら前記メモリ・ホールに対応することになる部分を再利用する
ことを特徴とする請求項３に記載のコンピュータ・システム。
【請求項５】
前記メイン・メモリはさらに、前記排他メモリ・ウインドウとは別の共用メモリ・ウインドウを含み、
所与のパーティションの各処理モジュールは、さらに、
前記所与のパーティション中にある前記プロセッサの前記物理アドレス空間の前記ベース（基底）アドレスから、その物理アドレス空間の、前記共用メモリ・ウインドウがマッピングされることになる指定部分の前記開始までのオフセット（ＳＢＡＳＥＯＳ）を保持するレジスタと、
前記メイン・メモリの前記ベース（基底）アドレスから、前記メイン・メモリ内の前記共用メモリ・ウインドウの前記開始までのオフセット（ＳＢＡＳＥＭＳＵ）を保持するレジスタと
を備え、
前記加算器は、前記２つのオフセット間の差（ＳＢＡＳＥＭＳＵ−ＳＢＡＳＥＯＳ）を、前記所与のパーティション中のプロセッサによる前記指定部分内の位置への各参照に加え、それにより、これらの参照を、前記メイン・メモリの前記共用メモリ・ウインドウ内のこれらに対応する位置に再配置する
ことを特徴とする請求項１に記載のコンピュータ・システム。
【請求項６】
前記パーティションの１つ１つは、異なるオペレーティング・システムの前記制御下で動作することを特徴とする請求項１に記載のコンピュータ・システム。
【請求項７】
前記パーティションの１つ１つは、同じオペレーティング・システムの異なるインスタンスの前記制御下で動作することを特徴とする請求項１に記載のコンピュータ・システム。
【請求項８】
（ｉ）複数の処理モジュールであって、各処理モジュールは複数のプロセッサを備え、１つまたは複数の処理モジュールのグループは、コンピュータ・システム内の別々のパーティションとして構成され、各パーティションは、別々のオペレーティング・システムの制御下で動作する処理モジュールと、（ｉｉ）メイン・メモリであって、各パーティションに排他メモリ・ウインドウがメイン・メモリ内で割り当てられており、前記排他メモリ・ウインドウへは、そのパーティションだけしかアクセス権を有さず、排他メモリ・ウインドウ中では、そのパーティションのオペレーティング・システムが動作する、メイン・メモリとを備えるコンピュータ・システムにおいて、各パーティションの前記排他メモリ・ウインドウを、それぞれのオペレーティング・システムには、メイン・メモリ中の同じベース（基底）物理アドレスを有すると見えるようにする方法であって、
各パーティションごとに、
前記メイン・メモリの前記ベース（基底）物理アドレスから、そのパーティションに割り当てられた前記排他メモリ・ウインドウの前記開始までのオフセットを（ＲＬＯＳ）表す値を格納するステップと、および
そのパーティション中のプロセッサによるその物理アドレス空間内の位置への各参照に前記オフセット（ＲＬＯＳ）を加算し、それにより、これらの参照を前記排他メモリ・ウインドウ内のこれらに対応する位置に再配置するステップ
を備えることを特徴とする方法。
【請求項９】
所与のパーティションの前記プロセッサの前記物理アドレス空間は、メモリ記憶に利用不可能なアドレスの範囲を含むことができ、前記利用不可能な範囲はメモリ・ホールを規定し、前記メモリ・ホールより上のアドレスはハイ・メモリ範囲を規定し、前記メモリ・ホールより下のアドレスはロー・メモリ範囲を規定し、前記方法はさらに、前記再配置するステップの結果として、前記所与のパーティションの前記排他メモリ・ウインドウの、通常なら前記メモリ・ホールに対応することになる部分を他の用途に再利用することを備えることを特徴とする請求項８に記載の方法。
【請求項１０】
前記再配置するステップと再利用するステップは、各パーティションごとに、
前記メイン・メモリの前記ベース（基底）物理アドレスから、そのパーティションに割り当てられた前記排他メモリ・ウインドウの前記開始までのオフセット（ＲＬＯＳ）を表す値を格納するステップと、
前記メモリ・ホールのサイズを表す値（ＲＣＯＳ）を格納するステップと、
そのパーティション中のプロセッサによるその物理アドレス空間の前記ロー・メモリ範囲内の位置への各参照にオフセット（ＲＬＯＳ）を加算し、それにより、これらの参照を前記排他メモリ・ウインドウ内のこれらに対応する位置に再配置するステップ、および
前記オフセットから前記メモリ・ホールの前記サイズを引いた値（ＲＬＯＳ−ＲＣＯＳ）を、そのパーティション中のプロセッサによるその物理空間の前記ハイ・メモリ範囲内の位置への各参照に加算し、それにより、これらの参照を、前記排他メモリ・ウインドウ内のこれらに対応する位置に再配置して、前記排他メモリ・ウインドウの、通常なら前記メモリ・ホールに対応することになる部分を再利用するステップと、
を備えることを特徴とする請求項９に記載の方法。
【請求項１１】
前記メイン・メモリはさらに、前記排他メモリ・ウインドウとは別個の共用メモリ・ウインドウを備え、前記方法はさらに、
各パーティション上で、そのパーティションの前記プロセッサの前記物理アドレス空間の一部を前記メイン・メモリ内の前記共用メモリ・ウインドウに対応するように指定するステップと、および
パーティションのプロセッサによるその物理アドレス空間の前記指定部分内の位置への参照を、前記メイン・メモリ内の前記共用メモリ・ウインドウ内の前記対応する位置に再配置するステップと
を備えることを特徴とする請求項８に記載の方法。
【請求項１２】
パーティション上のプロセッサによるその物理アドレスの前記指定部分への参照を、前記共用メモリ・ウインドウ中の前記対応する位置に再配置する前記ステップは、
そのパーティション上にある前記プロセッサの前記物理アドレス空間の前記ベース（基底）アドレスから、その物理アドレス空間の前記指定部分の前記開始までのオフセット（ＳＢＡＳＥＯＳ）を表す値を格納するステップと、
前記メイン・メモリの前記ベース（基底）アドレスから、前記メイン・メモリ内の前記共用メモリ・ウインドウの前記開始までのオフセット（ＳＢＡＳＥＭＳＵ）を表す値を格納するステップと、および
格納したオフセット間の前記差（ＳＢＡＳＥＭＳＵ−ＳＢＡＳＥＯＳ）を、そのパーティション中のプロセッサによる前記指定部分内の位置への参照に加算するステップを備え、それにより、これらの参照を、前記メイン・メモリの前記共用メモリ・ウインドウ内のこれらに対応する位置に再配置するステップと
を備えることを特徴とする請求項１１に記載の方法。
【請求項１３】
各排他メモリ・ウインドウは、それぞれのオペレーティング・システムには０のベース（基底）物理アドレスを有すると見えるようにされることを特徴とする請求項８に記載の方法。
【請求項１４】
前記複数のパーティション上で実行され、それらのパーティションが前記共用メモリ・ウインドウを介して相互に通信できるようにするプログラム・コードをさらに備えることを特徴とする請求項５に記載のコンピュータ・システム。
【請求項１５】
前記パーティションの１つ１つは、前記異なるオペレーティング・システムの制御下で動作することを特徴とする請求項１４に記載のコンピュータ・システム。
【請求項１６】
前記パーティションの１つ１つは、同じオペレーティング・システムの異なるインスタンスの制御下で動作することを特徴とする請求項１４に記載のコンピュータ・システム。
【請求項１７】
前記プログラム・コードは、送信するパーティションがプロセッサ間割込みを受信するパーティション上で生成して、共用メモリ・ウインドウを介して情報が受信するパーティションに転送されていることを前記受信するパーティションに信号で知らせるための、プロセスを実装することを特徴とする請求項１４に記載のコンピュータ・システム。
【請求項１８】
前記共用メモリ・ウインドウは、各パーティションに関連づけられた入力待ち行列のセットを含み、所与のパーティションに関連づけられた前記セットの各入力待ち行列が、別のパーティションに対応し、その別のパーティションからの通信を表すエントリを格納することを特徴とする請求項１７に記載のコンピュータ・システム。
【請求項１９】
前記共用メモリ・ウインドウはさらに、パーティション間の情報の通信を容易にするために必要に応じて前記パーティションに割り振ることのできる複数のメモリ・ページを備えることを特徴とする請求項１８に記載のコンピュータ・システム。
【請求項２０】
各パーティションは特定のページにおける所有権を有することができ、前記ページは、どのパーティションが前記ページにおける所有権を有するかを指定する情報を含むヘッダを有することを特徴とする請求項１９に記載のコンピュータ・システム。
【請求項２１】
前記ページの前記ヘッダはさらにロック・フィールドを備え、前記ロック・フィールドにより、あるパーティションが、あるページの前記ヘッダ中の所有権情報を更新するために前記ページへの排他アクセス権を獲得することができ、それにより、異なるパーティションから前記ページへの複数アクセスの同期をとる機構が提供されることを特徴とする請求項２０に記載のコンピュータ・システム。
【請求項２２】
前記共用メモリ・ウインドウは、それに関連づけられた、システム全体のロック・フィールドを有し、前記ロック・フィールドにより、あるパーティションは、１つまたは複数のページを割り振るために前記共用メモリ・ページへの排他アクセスを獲得することができ、それにより、異なるパーティションからの複数のメモリ・ページ割り振り要求の同期をとる機構が提供されることを特徴とする請求項２１に記載のコンピュータ・システム。
【請求項２３】
あるページの所有権情報は、そのページの前記ロック・フィールドを獲得することにより、前記システム全体のロック・フィールドを獲得する必要なしに更新することができることを特徴とする請求項２１に記載のコンピュータ・システム。
【請求項２４】
あるパーティション（送信するパーティション）が別のパーティション（受信するパーティション）と通信するようにするために、前記送信するパーティション上の前記プログラム・コードは、
（ｉ）送信するパーティションに対応する、受信するパーティションの前記入力待ち行列中に前記エントリを作成するようにし、
（ｉｉ）前記受信するパーティション上でプロセッサ間割込みを生成して、その入力待ち行列中にエントリが作成されたことを前記受信するパーティションに信号で知らせるようにする
ことを特徴とする請求項１８に記載のコンピュータ・システム。
【請求項２５】
前記受信するパーティション上で前記プロセッサ間割込みが検出されたとき、前記受信するパーティション上の前記プログラム・コードは、
（ｉ）その各入力待ち行列を検査して、前記入力待ち行列が他のパーティションからの通信を表すエントリを含んでいるかを決定するようにし、
（ｉｉ）そのようなエントリを、それらを含む前記入力待ち行列から抽出するようにする
ことを特徴とする請求項２４に記載のコンピュータ・システム。
【請求項２６】
各入力待ち行列は、事前定義された数のエントリを格納することができ、前記入力待ち行列が一杯になったときに設定されて、前記入力待ち行列からエントリが抽出されたときに受信するパーティションによってリセットされるオーバーフロー・フラグを含むことを特徴とする請求項１８に記載のコンピュータ・システム。
【請求項２７】
前記プログラム・コードはポーリング・プロセスを実装し、当該ポーリング・プロセスにより、各パーティションが、前記共用メモリ・ウインドウ内のエリアをポーリングして、それに向けられた通信が別のパーティションから前記共用メモリ・ウインドウ中に配置されたかどうかを決定することを特徴とする請求項１４に記載のコンピュータ・システム。
【請求項２８】
前記エリアは、各パーティションに１つずつ複数の出力待ち行列を含み、所与のパーティション用の出力待ち行列は、そのパーティションが前記他のパーティションに向けた通信を前記共用メモリ・ウインドウ中に配置したかどうかを示し、各パーティションは、前記他のパーティションの前記出力待ち行列をポーリングして、それら他のパーティションがそれに向けた通信を前記共用メモリ・ウインドウ中に配置したかどうかを決定することを特徴とする請求項２７に記載のコンピュータ・システム。
【請求項２９】
送信するパーティションから前記共用メモリ・ウインドウ中に配置され、別のパーティションに受け取られるように意図された通信に対し、前記送信するパーティションの前記出力待ち行列が、前記共用メモリ・ウインドウ内の、その通信を含むバッファの前記位置を指定することを特徴とする請求項２８に記載のコンピュータ・システム。
【請求項３０】
各パーティションに、他のパーティションに向けた通信をその中に配置することのできるメッセージ・バッファの別々のプールが割り当てられることを特徴とする請求項２９に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータ・システムに関し、より詳細には、コンピュータ・システム上の異なるパーティション中で複数のオペレーティング・システムを動作させ、異なるパーティションが共用メモリを介して相互に通信できるようにするコンピュータ・システムに関する。
【背景技術】
【０００２】
コンピュータ・システムは通常、プロセッサ、メイン・メモリ、および入出力装置（例えばプリンタ、ネットワーク・インターフェース、グラフィック・ディスプレイ（図形表示）インターフェース）を含む。コンピュータ・システムは、データ項目のソースまたは宛先を指定するためのアドレス指定方式を用いる。データのアクセスを含めたメモリ管理機能、ならびに他の管理機能は、オペレーティング・システムを介して制御される。様々なオペレーティング・システムが市販されており、それぞれは、それ自体の独自の特徴および能力を有している。従来のコンピュータ・システムは、通常、単一のオペレーティング・システムを採用する。
【０００３】
現代のコンピュータ・システムが発展し、ユーザーの要求が増すにつれ、複数のオペレーティング・システムを採用する必要性が増している。残念ながら、複数のオペレーティング・システムは、コンピュータ・システムの動作の複雑さをかなり増大させる。
【０００４】
異なるオペレーティング・システムを含めた複数のオペレーティング・システムが、コンピュータ・システム上の個々のパーティション中で動作できるようにし、個々のパーティション中で稼動するオペレーティング・システムおよびその他のクライアントとを含む個々のパーティションが、共用メモリを介して相互に通信できるようにするコンピュータ・システムおよび方法が必要とされている。
【０００５】
特許文献１には、ハード・ワイヤードのメモリ区分化方式が開示されており、この方式では、４つのプロセッサ「クラスタ」のそれぞれに固有のクラスタ番号が割り当てられ、次いでその番号が、プロセッサ・メモリ参照と共に、ハード・ワイヤードで柔軟性のない変換機構に従って変形されるが、この変換機構は、前述のことを達成するのに必要なフレキシビリティおよびプログラム可能性に欠けている。特許文献２および特許文献３には、システム間通信技術が記述されているが、これらには、単独でも特許文献１との組み合わせでも、望まれる種類のシステムは記述されていない。
【０００６】
【特許文献１】米国特許第５５９０３０１号明細書
【特許文献２】米国特許第５１４２６８３号明細書
【特許文献３】欧州特許出願公開第０４４４３７６号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、複数のオペレーティング・システムが単一のコンピュータ・アーキテクチャ内の個々のパーティション中で動作できるようにし、個々のパーティションが共用メモリを介して相互に通信できるようにする、コンピュータ・システムおよび方法を対象とする。
【課題を解決するための手段】
【０００８】
本発明の第１の態様によれば、このコンピュータ・システムは、複数の処理モジュールと、メイン・メモリとを含み、各処理モジュールは、メイン・メモリのすべてにわたりプロセッサ・メモリ待ち時間が各処理モジュールごとに同じになるように、メイン・メモリに接続される。１つまたは複数の処理モジュールのグループが、コンピュータ・システム内の別々のパーティションとして構成され、各パーティションは、別々のオペレーティング・システムの制御下で動作する。さらに本発明のこの第１の態様によれば、メイン・メモリは、少なくとも１つの共用メモリ・ウインドウをその中に規定し、この共用メモリ・ウインドウへは、少なくとも２つの異なるパーティションが共用アクセス権を有する。異なるパーティション上で実行されるプログラム・コードにより、これらの異なるパーティションは、共用メモリ・ウインドウを介して相互に通信することができる。
【０００９】
メイン・メモリはさらに、コンピュータ・システム内で構成された異なるパーティションごとに、排他メモリ・ウインドウをその中に規定することもできる。この排他メモリ・ウインドウへは、そのパーティションだけしかアクセス権を有さず、そのパーティションのオペレーティング・システムがその中で実行される。異なる２つのパーティション上にある別々のオペレーティング・システムは、異なるオペレーティング・システムでもよく、同じオペレーティング・システムの異なるインスタンスでもよい。
【００１０】
一実施形態では、パーティション間通信を（共用メモリ・ウインドウのリソースを管理することにより）可能にするプログラム・コードは、送信するパーティションがプロセッサ間割込みを受信するパーティション上で生成して、共用メモリ・ウインドウを介して受信するパーティションに情報が転送されていることを受信するパーティションに信号（signal）で知らせるための、プロセスを実装する。この実施形態によれば、共用メモリ・ウインドウは、各パーティションに関連付けられた入力待ち行列のセットを含み、所与のパーティションに関連するセット中の各入力待ち行列は、別のパーティションに対応し、その別のパーティションからの通信を表すエントリを格納する。あるパーティション（送信するパーティション）が別のパーティション（受信するパーティション）と通信するようにするために、送信するパーティション上のプログラム・コードは、（ｉ）受信するパーティションの、送信するパーティションに対応する入力待ち行列中にエントリを作成するようにし、次いで、（ｉｉ）受信するパーティション上でプロセッサ間割込みを生成して、その入力待ち行列中にエントリが作成されたことを受信するパーティションに信号（signal）で知らせるようにする。
【００１１】
共用メモリのプロセッサ間割込みを他のパーティションから受け取るための割込みベクトルが各パーティションに１つだけしか割り当てられていない一実施形態を仮定すると、受信するパーティション上でプロセッサ間割込みが検出されたとき、受信するパーティション上のプログラム・コードは、（ｉ）その入力待ち行列それぞれを検査して、どの入力待ち行列が他のパーティションからの通信を表すエントリを含んでいるかを決定するようにし、（ｉｉ）そのようなエントリを、それらを含む入力待ち行列から抽出するようにする。各入力待ち行列は、その待ち行列中にあるエントリの数のカウントを含むことが好ましい。
【００１２】
別法として、各パーティションが、プロセッサ間割込みをそれから受け取る可能性のある他のパーティションそれぞれに別々の割込みベクトルを割り当て、送信するパーティションが、プロセッサ間割込みを受信するパーティションに送るときに、それに割り当てられた割込みベクトルを指定する一実施形態では、受信するパーティションは、指定された割込みベクトルを使用して送信するパーティションに関連付けられた入力待ち行列を識別し、それを直接処理することができる。この場合、その入力待ち行列すべてを循環すること（各パーティションが共用メモリのプロセッサ間割込みに割込みベクトルを１つだけしか割り当てない場合のように）は必要ではない。
【００１３】
さらにこの第１の実施形態では、共用メモリ・ウインドウはさらに、複数のメモリ・ページも含む。これらを必要に応じてパーティションに割り振って、それらの間における情報の通信を容易にすることができる。送信するパーティションと受信するパーティションの間の通信を表す入力待ち行列エントリは、共用メモリ・ウインドウの、割り振られた１つまたは複数のページに対するハンドルを含むこともできる。送信するパーティションは、割り振られた１つまたは複数のページを使用して、受信するパーティションに通信すべきメッセージを表すデータを格納することができる。
【００１４】
さらにこの第１の実施形態では、各入力待ち行列は、事前定義された数のエントリを格納することができ、入力待ち行列が一杯になったときに設定されるオーバーフロー・フラグを含む。送信するパーティションは、入力待ち行列中にエントリが作成されたことによってその入力待ち行列が一杯になった場合に、その入力待ち行列のオーバーフロー・フラグが設定されるようにする。受信する側では、オーバーフロー・フラグが設定された入力待ち行列に受信するパーティションが遭遇した場合、受信するパーティションはその待ち行列を空にし、次いでオーバーフロー・フラグをリセットする。次いで受信するパーティションは、送信するパーティションに通信を返信して、入力待ち行列がもはや一杯ではないことを送信するパーティションに知らせることができる。一杯になった入力待ち行列を介して通信が送信されようとした場合は、送信するパーティションは、エラーを返すことができる。別法として、各パーティションは、指定された入力待ち行列のオーバーフロー・フラグが以前に設定されたせいでその入力待ち行列中に配置できなかった入力待ち行列エントリを格納するために、その排他メモリ・ウインドウ中の、ある位置を保持しておくこともできる。この排他メモリ・ウインドウ位置に記憶されたエントリは、指定された入力待ち行列のオーバーフロー・フラグが受信するパーティションによってリセットされるまで、そこに留めておくことができる。
【００１５】
好ましい実施形態ではさらに、共用メモリ・ウインドウは、共用メモリ・ウインドウの割り振り可能な各ページごとに、そのページが使用されているか、それとも割り振り（allocation）に利用可能かを判定するためのテーブルをさらに含む。割り振りに利用可能なページは、相互にリンクさせて、利用可能なページのリンク・リストを形成するのが好ましい。少なくともいくつかのタイプのページでは、１つまたは複数のパーティションによるページの所有権（ownership）を、そのページ自体の内にあるヘッダ中に含まれる情報によって示すのが好ましい。その他のタイプのページの所有権は、各ページの利用可能度も指定するテーブル中の情報によって示すことができる。
【００１６】
各ページのヘッダはさらに、ロック・フィールドを含むこともでき、このロック・フィールドにより、あるパーティションが、例えばあるページのヘッダ中の所有権情報を更新するために、そのページへの排他アクセス権を獲得することができる。このフィールドは、本発明のより広範なロック機構の一部であり、このロック機構により、異なるパーティションが必要に応じて、かつ一貫した方式で、共用メモリ・ウインドウの様々な構造、ページ、およびテーブルへのアクセスをロックして、一度に１つのパーティションだけしか所与の構造、ページ、またはテーブルを修正できないようにする（すなわち、これらの構造へのアクセスの同期をとる）ことができる。本発明のロック機構の重要な機能の１つによれば、メモリ・ページが最初に割り振られるとき、割り振るパーティションは、割り振りの間にそのページへのアクセスをロックするために、システム全体のロックを獲得しなければならない。しかし、割り振られた１つまたは複数のページの所有権を拡張するか、または他のパーティションに移転するときは、関係するページのロックを獲得するだけでよい。この目的で、これらのページ中のロック・フィールドが使用される。これにより、システム全体をロックするための競合がなくなるので、パーティション間の通信のスループットを増大させることが容易になる。
【００１７】
第２の実施形態によれば、各パーティション上のプログラム・コードはポーリング・プロセスを実装するが、このポーリング・プロセスにより、各パーティションは、共用メモリ・ウインドウ内のエリアをポーリングして、それに向けられた通信が別のパーティションから共用メモリ・ウインドウ中に配置されたかどうかを決定する。この実施形態では、各パーティションによってポーリングされるエリアは複数の出力待ち行列を含み、これはパーティションごとに１つである。所与のパーティション用の出力待ち行列は、そのパーティションが、他のパーティションに向けた通信を共用メモリ・ウインドウ中に配置したかどうかを示す。各パーティションは、他のパーティションの出力待ち行列をポーリングして、それらのパーティションがそれに向けた通信を共用メモリ・ウインドウ中で配置したかどうかを決定する。各パーティションには、メッセージ・バッファの別々のプールが割り振られ、このバッファ中に、他のパーティションに向けた通信を出すことができる。送信するパーティションは、それに割り振られたバッファの１つの中に受信するパーティションに向けた通信を配置すると、次いで、その出力待ち行列中でそのバッファの位置を指定する。
【００１８】
より詳細には、所与のパーティションの出力待ち行列は、１つまたは複数のノード・ツー・ノード（node-to-node）待ち行列を含み、１つのノード・ツー・ノード待ち行列は、通信を渡す先となる可能性のある他の各パーティションに関連する。各ノード・ツー・ノード待ち行列は、関連するパーティションに向けられた通信が共用メモリ中に出されたかどうかを示す。したがって各パーティションは、他の各パーティションの出力待ち行列中で、それに関連するノード・ツー・ノード待ち行列をポーリングして、これら他のパーティションがそれに向けた通信を共用メモリ・ウインドウ中に配置したかどうかを決定する。送信するパーティションからバッファ中に出されたメッセージ・データに対し、受信するパーティションに関連するノード・ツー・ノード待ち行列は、受信するパーティションがメッセージ・データを取り出すことができるようにバッファの位置を指定することになる。
【００１９】
本発明の第２の態様によれば、このコンピュータ・システムはまた、各パーティション中のプロセッサの物理アドレス空間を、そのパーティションに割り当てられたそれぞれの排他メモリ・ウインドウにマッピングする手段も備える。具体的には、このマッピングする手段は、所与のパーティション上にあるプロセッサの物理アドレス空間内の位置への参照を、そのパーティションに割り当てられた排他メモリ・ウインドウ内の対応する位置に再配置する手段を備える。このようにして、メイン・メモリの異なるエリア中に物理的に配置された、各パーティションの排他メモリ・ウインドウを、それぞれのオペレーティング・システムにはメイン・メモリ中の同じベース物理アドレスを有すると見えるようにすることができる（例えばベース・アドレス０）。このことは、ある種のオフザ・シェルフ（off-the-shelf）オペレーティング・システム（例えばＵｎｉｘ、ＷｉｎｄｏｗｓＮＴなど）を異なるパーティション中で稼動させるのに必要である。というのは、これらのオペレーティング・システムは、メイン・メモリがアドレス０で開始することを前提としているからである。各パーティション中のプロセッサ・アドレス空間をその排他メモリ・ウインドウにマッピングすることにより、オペレーティング・システムは、それらが実行されているプロセッサの物理アドレス空間中でそれらが通常するようにメモリを参照し続けることができる。したがって、オペレーティング・システムの修正は必要ない。
【００２０】
好ましい一実施形態では、再配置する手段は、メイン・メモリのベース物理アドレスから所与のパーティションに割り当てられた排他メモリ・ウインドウの開始までのオフセット（ＲＬＯＳ）を保持するレジスタと、そのパーティション中のプロセッサによるその物理アドレス空間内の位置への各参照にこのオフセット（ＲＬＯＳ）を加算する加算器と備える。この結果、これらの参照は、そのパーティションの排他メモリ・ウインドウ内のこれらに対応する位置に再配置される。
【００２１】
本発明の別の特徴によれば、所与のパーティションのプロセッサの物理アドレス空間が、メモリ記憶に利用不可能なアドレスの範囲（例えば、メモリ・マップされたＩ／０（入出力）に専用になっている範囲）、このようなメモリ・ホールと規定する範囲を含み、コンピュータ・システムはさらに、パーティションの排他メモリ・ウインドウの、通常ならそのメモリ・ホールに対応することになるその部分を、他の用途に再利用する手段も備えることができる。より具体的には、コンピュータ・システムは、メモリ・ホールを認識し、そのメモリ・ホールよりも上のアドレスをハイ・メモリ範囲と規定し、そのメモリ・ホールよりも低いアドレスをロー・メモリ範囲と規定する。メイン・メモリのベース物理アドレスから、所与のパーティションに割り当てられた排他メモリ・ウインドウの開始までのオフセット（ＲＬＯＳ）に加えてまた、メモリ・ホールのサイズを指定する値（ＲＣＯＳ）も記憶される。次いで、（ｉ）所与のパーティション中のプロセッサによるその物理アドレス空間のロー・メモリ範囲内の位置への各参照にオフセット（ＲＬＯＳ）を加え（それにより、これらの参照を排他メモリ・ウインドウ内のこれらに対応する位置に再配置し）、（ｉｉ）オフセットからメモリ・ホールのサイズを表す値を引いたもの（（ＲＬＯＳ−ＲＣＯＳ）を、所与のパーティション中のプロセッサによるその物理アドレス空間のハイ・メモリ範囲内の位置への各参照に加える（それにより、これらの参照を排他メモリ・ウインドウ内のこれらに対応する位置に再配置すると同時に、排他メモリ・ウインドウの、通常ならメモリ・ホールに対応することになる部分を再利用する（reclaiming））ことにより、再配置および再利用が達成される。
【００２２】
本発明のこの態様の別の特徴によれば、共用メモリ・ウインドウもまた考慮することができる。具体的には、前述のように、各パーティションごとの排他メモリ・ウインドウに加えて共用メモリ・ウインドウも規定することができる。このウインドウへのアクセス権を共用するために、各パーティションは、そのプロセッサの物理アドレス空間の一部を、メイン・メモリ内の共用メモリ・ウインドウに対応するものとして指定する。次いで本発明によれば、各パーティション上にあるプロセッサの物理アドレス空間の指定部分は、メイン・メモリ中の同じ共用メモリ・ウインドウにマッピングされる。好ましい一実施形態でこれは、各パーティション中で、（ｉ）パーティション上にあるプロセッサの物理アドレス空間のベース・アドレスから、物理アドレス空間の、共用メモリ・ウインドウに対応するものとして指定された部分の開始までのオフセット（ＳＢＡＳＥＯＳ）を記憶し、（ｉｉ）メイン・メモリのベース・アドレスから、メイン・メモリ内の共用メモリ・ウインドウの開始までの別のオフセット（ＳＢＡＳＥＭＳＵ）を記憶し、（ｉｉｉ）オフセット間の差（ＳＢＡＳＥＭＳＵ−ＳＢＡＳＥＯＳ）を、そのパーティション中のプロセッサによる指定部分内の位置への各参照に加え、それにより、これらの参照を、メイン・メモリ中の共用メモリ・ウインドウ内のこれらに対応する位置に再配置することにより達成される。
【００２３】
本発明の方法は、コンピュータ・システムの様々な動作に反映される。
【発明を実施するための最良の形態】
【００２４】
本発明のコンピュータ・システムおよび方法の他の特徴および利点、ならびに本発明の様々な実施形態の構造および動作を、添付の図面を参照しながら以下に詳細に述べる。
【００２５】
本発明は、図を参照することにより最もよく理解されるが、これらの図では、同じ参照番号は、同一要素または機能的に類似する要素を示す。また、左端の桁は、添付の図面の中で最初にその参照が出ている図を指す。
【００２６】
（好ましい実施形態の詳細な説明）
目次  
Ｉ．概要  
ＩＩ．コンピュータ・システム・プラットフォーム  
Ａ．メモリ・ウインドウ（再配置および再利用）  
Ｂ．メモリのインターリービングおよびスタッキング（変換）  
Ｃ．ブート時における初期化  
ＩＩＩ．グローバル共用メモリを管理するための方法（パーティション間通信）  
Ａ．パーティション間通信のためのポーリング  
Ｂ．割込み主導共用メモリ通信  
１．共用メモリ・レイアウト  
２．空きページ・リスト  
３．クライアント・ディレクトリ・テーブル  
４．共用メモリ・ページ・タイプ  
５．制御構造ヘッダ  
６．割り振り（アロケーション）構造  
７．信号（signals）
８．入力待ち行列および入力待ち行列ヘッダ
９．プロセッサ間割込み機構  
１０．コア・サービスＡＰＩ  
１１．クライアントによって供給されるインターフェース  
１２．例としてのオペレーション  
１３．他の機能  
ＩＶ．パーティション間の通信を円滑にする本発明のコンピュータ・システムおよび方法の例としての使用  
Ａ．共用メモリ・デバイス・ドライバ  
Ｂ．ワイヤによる通信の外観を維持すること  
Ｖ．結論  
【００２７】
Ｉ．概要
本発明は、マルチプロセッサ・コンピュータ・システムを対象としており、このマルチプロセッサ・コンピュータ・システムは、１つまたは複数のプロセッサ・モジュールと１つまたは複数のメモリ記憶装置を備えるメイン・メモリを有して、コンピュータ・システムの異なるパーティション内で複数のオペレーティング・システムを並行に実行し、かつその異なるパーティションが共用メモリを通じて相互に通信することを可能にしている。そのメイン・メモリは、複数のメモリ記憶装置（memory storage units - ＭＳＵと呼ぶ）に分割される。メイン・メモリは、異なるパーティション間に割り当てられる。データの一貫性および整合性はそれらのパーティション間で維持される。
【００２８】
コンピュータ・システムの一発明態様によると、アドレス・マッピング関数ｆｐａは、プロセッサ・モジュールの１つのプロセッサから生成されるアドレス要求と、メイン・メモリのウインドウ中のそれに対応するアドレスの（関係として）間に規定される。このアドレス・マッピング関数ｆｐａは、概念上は、ウインドウイング（windowing）、再利用（reclamation）、変換（translation）という３つの別個の部分を持つと考えることができる。
【００２９】
メイン・メモリは連続的なアドレス空間を有する。本発明によると、各パーティション（およびそれに関連づけられたオペレーティング・システム）には、メイン・メモリのアドレス空間内で排他的なメモリ・ウインドウが割り当てられる。共用メモリ・ウインドウは、複数のパーティションが共用アクセス権を有することが可能なメイン・メモリ内に定義してもよい。ウインドウイング機能は、各パーティション内のプロセッサの物理アドレス空間を、それらのパーティションに割り当てられた各排他メモリ・ウインドウにマップする。この方式では、各パーティションの排他メモリ・ウインドウが、その各オペレーティング・システムにとって、メイン・メモリ中で同一のベース物理アドレス（例えばアドレス・ゼロ）を持つように見せている。市販のオペレーティング・システム（例えばＵｎｉｘ、Ｗｉｎｄｏｗｓ  ＮＴなど）は、通常、物理メモリがアドレス・ゼロで開始することを予期しているので、ウインドウイング機能は、コンピュータ・システム上の異なるパーティション内で市販のオペレーティング・システムを実行するために必要とされる。
【００３０】
再利用は、例えばＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｆａｃｅ（ＰＣＩ）、Ａｄｖａｎｃｅｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ  Ｃｏｎｔｒｏｌｌｅｒ（ＡＰＩＣ）、およびメモリ・マップされた基本システム、および入出力装置（例えばフロッピー・コントローラ、シリアル・ポート、パラレル・ポートなど）によって占められる、メモリ・マップされたＩ／Ｏ（入出力）アドレス空間の背後に位置するメイン・メモリを再利用するが、再配置されない場合これはコンピュータ・システムにとって使用不可能になる。言い換えれば、各オペレーティング・システムによって入出力装置に割り当てられるメモリ・アドレスが再利用されると、オペレーティング・システムは、メイン・メモリ中に追加のメモリ空間を持つように見える。
【００３１】
変換は、メモリ参照を指定のメモリ記憶装置にマップする。システム・メモリ・アドレスは、コンピュータ・システムにどのようにメモリ記憶装置が実装（populate)されているかにより、メモリ記憶装置間でインターリーブするかまたはスタックすることができる。
【００３２】
例示的実施形態では、コンピュータ・システムは複数の処理モジュールを含む。処理モジュールは、ＰｏｄでもサブＰｏｄでもよい。Ｐｏｄは２つのサブＰｏｄを備える。好ましい実施形態では、コンピュータ・システムの最大構成には、４つのＰｏｄすなわち８つのサブＰｏｄが含まれる。本発明によると、コンピュータ・システムは、ＰｏｄおよびサブＰｏｄどちらの境界上でもパーティションに区分することができる。したがって、最大構成が８つのサブＰｏｄからなる好ましい実施形態では、コンピュータ・システムは最大で８つのパーティションに区分することができ、それぞれは別々のサブＰｏｄによって定義される。本発明によるとさらに、各パーティションは、それ自体のオペレーティング・システムの制御下で動作する。異なるパーティション上で実行されるオペレーティング・システムは、異なるオペレーティング・システムでも、同一オペレーティング・システムの異なるインスタンスでもよい。
【００３３】
本発明はさらに、コンピュータ・システム上のパーティション間でデータを共用するための、グローバル共用メモリ・アプローチを提供する。一実施形態では、グローバル共用メモリ・アプローチは、各パーティションのためにメイン・メモリ内に排他メモリ・ウインドウを提供し、さらに、複数のパーティションがアクセスできる共用メモリ・ウインドウを提供する。パーティションと、そのオペレーティング・システムおよび／またはそのパーティション内で実行される他のクライアントは、共用メモリ・ウインドウを通じて相互に通信することができる。
【００３４】
共用メモリを通じたパーティション間の通信は、種々のどの方法によっても管理することができる。一実施形態では、共用メモリを通じてのパーティション間通信は、割込み駆動技術（interrupt-driven technique）によって管理される。別の実施形態では、共用メモリによる通信を管理するのにポーリング技術が使用される。
【００３５】
本明細書で使用する用語「コンピュータ・システム」とは、電子的構成要素および機械的構成要素を含むハードウェアと、アプリケーション・プログラムおよびオペレーティング・システムを含むソフトウェアを指す。一般には、オペレーティング・システムには、命令と、コンピュータがそのタスクを実行するのに処理するデータが含まれる。ハードウェアは基本的な計算資源を供給する。ソフトウェアは、それらの資源をユーザーの計算問題を解くために使用する方式を定義する。
【００３６】
本明細書で使用する用語「オペレーティング・システム」とは、多様なユーザーに向けた多様なアプリケーション・プログラム間におけるハードウェアの使用を制御し、調整するプログラム・コードを指す。オペレーティング・システムは、コンピュータ・システムをオン（turn on）にしてから、コンピュータ・システムのメイン・メモリにロードされる最初のプログラム・コードである。オペレーティング・システムの中核(central core)は、常にメモリ空間内にある。本明細書で使用する用語「オペレーティング・システム・アドレス」は、コンピュータ・システムのプロセッサの物理アドレス空間（メモリおよび入出力）を意味し、そのコンピュータ・システム上で実行されるオペレーティング・システムから見ると、従来のコンピュータ・システムのアドレス空間になる。
【００３７】
本明細書で使用する用語「コンピュータ・アーキテクチャ」とは、ユーザーから見た、コンピュータの構造および動作を指す。これはプロセッサやメモリなどさまざまな機能モジュールの仕様に関連し、それらを合わせてコンピュータ・システムに構造化する。コンピュータ・アーキテクチャはハードウェアを利用して実施される。
【００３８】
本明細書で使用する用語「メモリ記憶装置」とは、情報を格納することのできるメモリ空間を指す。各メモリ記憶装置には、時にＤＲＡＭ（ダイナミックＲＡＭ）と呼ばれる複数のメモリ記憶装置が含まれる。本明細書で使用する用語「メモリ記憶装置アドレス」とは、コンピュータ・システムから見たアドレス位置を指す。
【００３９】
本明細書で使用する用語「パーティション」とは、オペレーティング・システムの単一インスタンス(instance)の制御下にある、１つまたは複数の処理モジュールを指す。本明細書で使用する用語「パーティション」とは、パーティションの処理モジュール、パーティション上で実行されるオペレーティング・システム、パーティションに割り当てられた任意の排他メモリ・ウインドウ、パーティション上で実行される他のクライアントまたはアプリケーション・プログラム、あるいはこれらの任意の組み合わせのすべてあるいは一部を指す。
【００４０】
本明細書で使用する用語「処理モジュール」は、連係して動作する複数のプロセッサを意味する。下記の好ましい実施形態の説明で例示するように、ＰｏｄおよびサブＰｏｄはどちらも処理モジュールの例である。１つまたは複数のＰｏｄまたはサブＰｏｄ（すなわち１つまたは複数の処理モジュール）を、コンピュータ・システム内のパーティションとして定義してもよい。
【００４１】
本明細書で使用する用語「プログラム・コード」は、コンピュータ・システムやプロセッサなどの機械(machine)によって実行されると、コンピュータ・システムやプロセッサに何らかの操作(operation)を実行させる命令セットを意味する。ただし、コンピュータ・システム中のいくつかの動作または機能性は、動作や機能を実行する回路の形でハード・コード化するか、あるいは実行可能命令と回路の組み合わせによって実行してもよいことを認識すると、用語「プログラム・コード」には、上記のような回路や実行可能命令と回路の組み合わせも含まれることになる。
【００４２】
ＩＩ．コンピュータ・システム・プラットフォーム
図１は、プロセッサ・モジュール１１０、１１２、１１４を含むマルチ・プロセッサ・システムを示している。プロセッサ・モジュール１１０、１１２、１１４は、同程度の互換性がある。ただし本発明では、異種（heterogeneous）のプロセッサおよび／またはオペレーティング・システムが共存することをさらに意図している。各プロセッサ・モジュール１１０、１１２、１１４は自己充足型（self-contained）である。プロセッサ・モジュール１１０、１１２、１１４は、それぞれ複数のプロセッサを含むことができる。プロセッサ・モジュール１１０、１１２、１１４のうち２つ以上は、通常はシステム相互接続１３０などシステム相互接続メカニズムを通じて、メイン（またはグローバル）メモリ１６０および／またはＩ／Ｏ装置１２０、１２２、１２４へのアクセスを共有している。プロセッサ・モジュール１１０、１１２、１１４は、メイン・メモリ１６０を通じて（共通データ・エリア中に残されるメッセージおよびステータス情報により）相互に通信することができる。
【００４３】
本発明によると、１つまたは複数のプロセッサ・モジュールをコンピュータ・システム内で別々のパーティションとして構成して、複数のパーティションをコンピュータ・システム内に存在させ、各パーティションが別々のオペレーティング・システムの制御下で動作するようにしてもよい。例えば、図１の各プロセッサ・モジュール１１０、１１２、１１４は、個々のオペレーティング・システム１７０、１７２、１７４を介して制御される個々のパーティションとして定義することができる。各オペレーティング・システム１７０、１７２、１７４は、それぞれがメイン・メモリ１６０にアクセスする唯一の存在であるかのように、メイン・メモリを別々に見ている。
【００４４】
マルチ・プロセッサ・システムとマルチ・コンピュータ・システムは、区別しなければならない。マルチ・コンピュータ・システムは、コンピュータが通信線を介して互いと相互接続され、コンピュータ・ネットワークを形成するシステムである。このコンピュータは自立走行式（autonomous）であり、相互に通信してもしなくてもよい。コンピュータ間の通信は、固定経路を介するか、あるいは何らかのメッセージ交換メカニズムを介して行われる。それに対して、従来型のマルチ・プロセッサ・システムは、プロセッサ間の相互作用を提供する１つのオペレーティング・システムによって制御され、問題の解法を求める際にはシステムのすべての構成要素が協働する。
【００４５】
図２に、本発明によるコンピュータ・システム２００の好ましい実施形態の詳細図を示す。コンピュータ・システム２００には、図にメイン・メモリ１６０として示すメイン・メモリと、各第３レベル・キャッシュ・モジュール２３０およびクロスバー相互接続２９０を介してメイン・メモリに接続された複数の処理モジュール２４０が含まれる。この実施形態では、処理モジュールおよびメイン・メモリは対称的な多重処理アーキテクチャで構成されており、したがってプロセッサからメモリへの待ち時間は、メイン・メモリのすべてにおいて、各処理モジュールにとって同一である。
【００４６】
当実施形態では、メイン・メモリ１６０はディレクトリ・ベースのメモリ・システムであり、例えばＵＮＩＸ／ＮＴシステムで用いられるメモリ整合性モデルなど、さまざまなメモリ整合性モデルをサポートすることができる。メイン・メモリ１６０には、メモリ記憶装置２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｄなど複数のメモリ記憶装置（ＭＳＵ）２２０が含まれる。各メモリ記憶装置２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｄは、少なくとも８ギガバイトのメモリを含むことが好ましい。各メモリ記憶装置２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｄは、４本の２倍幅データバスおよび８本の単方向アドレスバスを共用する、１６個の準独立型バンクを含むことが好ましい。
【００４７】
第３レベル・キャッシュ・モジュール２３０Ａから２３０Ｄなど複数の第３レベル・キャッシュ・モジュール２３０には、ＴＳＴ２７０Ａから２７０Ｈなど、複数の第３レベル・キャッシュ・アプリケーション固有の集積回路（すなわちＴＣＴ）が含まれる。当実施形態では、対をなすプロセッサ（例えば２４０Ａと２４０Ｂ）は、所与のＴＬＣ（例えば２３０Ａ）内に単一ＴＣＴ（例えば２７０Ａ）をもった共通バス（例えば２８０Ａ）を共用している。各ＴＣＴ２７０は、下記でより完全に述べるように、アドレスの再配置、再利用、およびそれが接続されるプロセッサによって発行されるメモリ・アドレスの変換を実行する。
【００４８】
第３レベル・キャッシュ・モジュール２３０Ａから２３０Ｄは、それぞれ、各複数プロセッサ（ＭＰ）２４０Ａから２４０Ｓに接続される。具体的には、当実施形態では、各ＴＬＣ２３０は４つのプロセッサに接続される。各ＴＬＣ２３０およびその個々の４つのプロセッサは、サブＰｏｄを定義する。当実施形態によるとさらに、２つのサブＰｏｄは、クロスバー相互接続（例えばクロスバー相互接続２９０Ａまたは２９０Ｂ）を介して接続されてＰｏｄを形成する。したがって図２の実施形態では、それぞれクロスバー相互接続２９０Ａおよび２９０Ｂを介して接続されたサブＰｏｄが４つあり、２つのＰｏｄを形成している。
【００４９】
クロスバー相互接続２９０は、第３レベル・キャッシュ２３０を通じて、プロセッサ２４０をメモリ記憶装置２２０にインターフェースしている。クロスバー相互接続２９０はクロスバー・メモリ・アプローチを用いており、それにより、複数のクロスポイントが、プロセッサ２４０とメモリ記憶装置２２０の間の共通部分に置かれる。クロスポイント内には、プロセッサ・バス２８０からメモリ記憶装置２２０への経路を決定するスイッチがある。各スイッチ・ポイントは、プロセッサ２４０とメイン・メモリ１６０の間に転送経路をセットアップする制御論理を有する。この制御論理は、プロセッサ・バス２８０上に置かれるアドレスを調べ、その特定メモリ記憶装置２２０のアドレスが指定されているかどうかを決定する。制御論理はまた、同一のメモリ記憶装置２２０への複数のアクセス要求を、あらかじめ定められた優先順位で解決する。各クロスバー相互接続２９０は、下記により詳細に述べるように、ペアになった第３レベル・キャッシュ・メモリ・インターフェース・アプリケーション固有集積回路（ＴＣＭ）２８５をさらに備え、これは、アドレス再配置、再利用、Ｉ／Ｏ装置からのメモリ要求の変換を実行する。
【００５０】
コンピュータ・システム２００にはさらに、入出力バス２１０Ａから２１０Ｄと、ダイレクト入出力ブリッジ（ＤＩＢ）２５０Ａから２５０Ｄなどダイレクト入出力ブリッジを介して接続された、ＰＣＩ２６０Ａから２６０Ｄなど複数の周辺コンポーネント相互接続（ＰＣＩ）とが含まれる。
【００５１】
動作に際しては、メモリ記憶装置２２０は、クロスバー相互接続２９０を通じて、第３レベル・キャッシュ・モジュール２３０と双方向で通信する。クロスバー相互接続２９０は、入出力バス２１０を介してダイレクト入出力ブリッジ２５０と双方向に通信し、またＴＣＴ２７０を通じてプロセッサ２４０と通信する。ダイレクト入出力ブリッジ２５０は、周辺構成要素相互接続２６０と双方向に通信する。
【００５２】
当実施形態では、プロセッサ（ＭＰ）２４０は、Ｉｎｔｅｌプロセッサ（例えばＰｅｎｔｉｕｍ  Ｐｒｏ、Ｐｅｎｔｉｕｍ  ＩＩ  Ｘｅｏｎ、Ｍｅｒｃｅｄ）や、Ｕｎｉｓｙｓ  Ｅ−ｍｏｄｅスタイル・プロセッサ（Ｕｎｉｓｙｓ  Ａ  Ｓｅｒｉｅｓ  および  Ｃｌｅａｒｐａｔｈ  ＨＭＰ  ＮＸエンタプライズ・サーバで使用される）や、Ｕｎｉｓｙｓ  ２２００スタイル・プロセッサ（Ｕｎｉｓｙｓ  ２２００およびＣｌｅａｒｐａｔｈ  ＨＭＰ  ＩＸ  エンタプライズ・サーバで使用される）を備えることが可能である。所与のサブＰｏｄは、同一タイプの４つのプロセッサを用いることが好ましい。ただし本発明では、異なるサブＰｏｄが、異なるタイプのプロセッサを用いてもよいことを意図している。例えば１つのサブＰｏｄが４つのＩｎｔｅｌプロセッサを用い、一方で別のサブＰｏｄが４つのＵｎｉｓｙｓ  Ｅ−ｍｏｄｅスタイル・プロセッサを用いることが可能である。このような構成では、Ｉｎｔｅｌプロセッサを用いるサブＰｏｄを１つのパーティションとして定義し、ＵｎｉｘまたはＷｉｎｄｏｗｓ  ＮＴのバージョンなど、Ｉｎｔｅｌとの互換性があるオペレーティング・システムの制御下で実行し、その一方でＵｎｉｓｙｓ  Ｅ−ｍｏｄｅスタイル・プロセッサを用いるサブＰｏｄは別のパーティションとして定義し、ＵｎｉｓｙｓＭＣＰオペレーティング・システムの制御下で実行することが可能である。別の代替策として、異なる２つのパーティション中のサブＰｏｄはどちらもＩｎｔｅｌプロセッサを用いることができるが、１つのパーティションはＩｎｔｅｌと互換性のあるオペレーティング・システム（例えばＷｉｎｄｏｗｓ  ＮＴ）の制御下で実行するのに対し、もう一方のパーティションは、そのパーティション内のＩｎｔｅｌプロセッサ上のＵｎｉｓｙｓ  Ａ  Ｓｅｒｉｅｓコンピュータ・アーキテクチャのエミュレーションを通じて、Ｕｎｉｓｙｓ  ＭＣＰオペレーティング・システムの制御下で実行することが可能である。
【００５３】
図２のコンピュータ・システム２００の好ましい実施形態のアーキテクチャの追加詳細は、これに先立つ同時係属の、本出願の譲受人に譲渡された出願中の「他出願への相互参照」と題するセクション中に記載して提供され、各項はすべて参照として本明細書に組み込まれる。
【００５４】
上記のように本発明によると、コンピュータ・システム２００は、ＰｏｄおよびサブＰｏｄの境界で区分することができる。図２８に示すように、コンピュータ・システム２００の部分２８０１は、ＰｏｄとサブＰｏｄの境界を含んでいる。Ｐｏｄ２８０２には、クロスバー相互接続２９０Ａ、第１サブＰｏｄ２８０４Ａ、第２サブＰｏｄ２８０４Ｂが含まれる。サブＰｏｄ２８０４Ａおよび２８０４Ｂは、実質的に互いと同種である。例えばサブＰｏｄ２８０４Ａには、ＴＣＴ２７０Ａおよび２７０Ｂを含む第３レベル・キャッシュ２３０Ａが含まれる。サブＰｏｄ２８０４には、さらに、プロセッサ２４０Ａ〜２４０Ｄが含まれる。したがってＰｏｄ２８０２には、２つのＴＬＣ２３０、４つのＴＣＴ２７０、８つのプロセッサ２４０、およびクロスバー相互接続２９０が含まれることになる。
【００５５】
当実施形態では、上記のように、コンピュータ・システム２００の最大構成には４つのＰｏｄ２８０２が含まれ、Ｐｏｄ２８０２にはそれぞれ２つのサブＰｏｄ２８０４が含まれる。したがって最大構成において、コンピュータ・システム２００には、（４Ｐｏｄ）ｘ（Ｐｏｄごとに８つずつのプロセッサ）＝３２のプロセッサが含まれる。コンピュータ・システム２００は、ＰｏｄまたはサブＰｏｄのどのような境界の組み合わせでも区分することができる。ただし本発明では、他の多重処理環境および構成を意図していることを理解されたい。例えばコンピュータ・システム２００は、さらに多くのメモリ記憶装置２２０およびさらに多くのＰｏｄまたはサブＰｏｄと接続する（plug in）ことにより、拡張することができる。
【００５６】
ある実施形態では、Ｐｏｄ２８０２は、ダイレクト入出力ブリッジ２５０Ａおよび２５０Ｂを含むように定義される。ある実施形態では、サブＰｏｄ２８０４および２８０６は、ダイレクト入出力ブリッジ２５０Ａおよび２５０Ｂをそれぞれ含むように定義される。
【００５７】
さらに本発明によると、コンピュータ・システム内の複数パーティションは、それぞれが１つまたは複数のＰｏｄまたはサブＰｏｄを備えることができ、それぞれが別のオペレーティング・システムの制御下で動作する。異なるパーティション上で実行されるオペレーティング・システムは、同一でも異なっていてもよい。例えば本発明では、オペレーティング・システムの少なくとも２つが異なっていて、１つのオペレーティング・システムが、２番目のオペレーティング・システムを制御または管理しない環境を意図している。
【００５８】
図５は、本発明の区分可能なフィーチャによる、図２のコンピュータ・システムで生成することのできる例示的メモリ構成を示している。この例では、３つのオペレーティング・システム（ＯＳ）はそれぞれ、それ自体のアドレス空間５０２（すなわち、それらのオペレーティング・システムが実行される各処理モジュールの物理アドレス空間）を持っている。メイン・メモリ１６０はアドレス空間５０４を有する。本発明によると、各オペレーティング・システム（すなわちパーティション）ごとに１つの３つの排他メモリ・ウインドウ５４０Ａ、５４０Ｂ、５４０Ｃと、３つのオペレーティング・システム５４０Ａ、５４０Ｂ、５４０Ｃ（すなわちパーティション）のすべてからアクセス可能な１つの共用メモリ・ウインドウ５３７が、メイン・メモリ１６０のアドレス空間５０４内に定義される。
【００５９】
例えばＯＳ＃１には、ロー・メモリ・ウインドウ５１１などロー・メモリ・ウインドウ、ロー・メモリ・ホール５１２などロー・メモリ・ホール、ハイ・メモリ・ウインドウ５１３などハイ・メモリ・ウインドウ、共用メモリ・ウインドウ５１４など共用メモリ・ウインドウとして定義された部分、ハイ・メモリ・ホール５１５などハイ・メモリ・ホールが、そのアドレス空間内に含まれる。ロー・メモリ・ウインドウ５１１、ロー・メモリ・ホール５１２、ハイ・メモリ・ウインドウ５１３、ハイ・メモリ・ホール５１５は、オペレーティング・システムＯＳ＃１にとって排他的である。共用メモリ・ウインドウ５１４として定義されるアドレス空間部分は、共用されるよう意図されている。
【００６０】
本明細書で使用する「ハイ・メモリ・ホール」とは、関連付けられたアドレスが入出力装置に割り当てられているために、データや命令の記憶には使用できない、メモリ記憶装置のハイ・アドレス範囲中のメモリ空間を指す。本明細書で使用する「ロー・メモリ・ホール」とは、関連付けられたアドレスが入出力装置に割り当てられているために、データや命令の記憶には使用できない、メモリ記憶装置の低アドレス範囲中のメモリ空間を指す。本明細書で使用する「ウインドウ」とは、上限および下限のあるアドレス範囲である。ウインドウの可視性、すなわち、ウインドウへのアクセスは、所有権（ownership rights）によって管理される。本明細書で使用する「共用ウインドウ」とは、少なくとも２つのオペレーティング・システムが合同で所有するアドレス範囲を指す。すなわち、複数のオペレーティング・システムが、共用ウインドウへの可視性およびアクセス権を有する。本明細書で使用する用語「排他ウインドウ」とは、１つのオペレーティング・システムだけが所有するアドレス範囲を指す。すなわち、１つのオペレーティング・システムだけが、排他ウインドウを見ることができ、それにアクセスすることができる。それでも、データの一貫性および整合性はオペレーティング・システム間で維持される。
【００６１】
ＯＳ＃２およびＯＳ＃３のアドレス空間は、オペレーティング・システムＯＳ＃１と同様の構造を有する。説明を簡潔にするために、これらのアドレス空間については詳細には説明しない。
【００６２】
多数のプロセッサのアドレス空間は、メイン・メモリおよびメモリ・マップされた入出力（I/O）アドレスの両方からなる。メイン・メモリのトランザクションは、主記憶装置に向けられる。Ｉ／Ｏトランザクションは、Ｉ／Ｏサブシステムに転送される。Ｉ／Ｏアドレスは主記憶装置の外側の追加メモリにアクセスするので、このシステムには、２つのメモリ位置を参照するプロセッサ・アドレスがあるということになる。整合性のためには、これらのメモリ位置のうち１つを使用不可能にしなければならない。これらの主記憶位置を使用不可能にすることにより、メイン・メモリのアドレス指定においてホールが形成され、その結果、メモリ内に不使用部分が残される。Ｉ／Ｏメモリ・アドレス空間が大きい場合、相当のメモリブロックが使用できないままになる。複数のＯＳパーティションがシステムに追加されると、複数のＩ／Ｏホールが生成され、その結果おそらくは多数のホールがメイン・メモリのアドレス空間中に散在することになる。本発明によると、図５に示すように、ロー・メモリ・ホール５１１、５４１、５７１などロー・メモリ・ホールと、ハイ・メモリ・ホール５１５、５４５、５７５などハイ・メモリ・ホールは、図にＭＳＵメモリ空間５０４として描写したような連続したアドレス空間に再利用されリマップされる。ＭＳＵメモリ空間５０４は、メイン・メモリ１６０の概念視点である。再利用（reclamation）については下記で詳細に説明する。
【００６３】
例えば、ＭＳＵアドレス空間５０４の連続アドレス空間には、ロー・メモリ５３１、５３３、５３５などロー・メモリと、ハイ・メモリ５３２、５３４、５３６などハイ・メモリと、共用メモリ５３７など共用メモリが含まれる。ロー・メモリ５３１およびハイ・メモリ５３２は、オペレーティング・システムＯＳ＃１にとって排他的な排他ウインドウを備える。ロー・メモリ５３３およびハイ・メモリ５３４は、ＯＳ＃２にとって排他的な排他ウインドウを備える。ロー・メモリ５３５およびハイ・メモリ５３６は、オペレーティング・システムＯＳ＃３にとって排他的な排他ウインドウを備える。メイン・メモリ１６０中にはメモリ・アドレス・ホールがない。メイン・メモリ１６０の連続アドレス空間は、メモリ拡張、参照変換のタイプ（下記で詳細に説明する）、あるいは共用メモリ環境とは無関係に維持される。
【００６４】
Ａ．メモリ・ウインドウ（再配置および再利用）
ウインドウは、（アドレスの）上限および下限を境界としたアドレス範囲である。この空間へのアクセスおよびこの空間の可視性は、所有権（ownership rights）によって制限される。本発明では、排他と共用の２タイプのウインドウを提供する。
【００６５】
排他ウインドウは、単一のパーティション／オペレーティング・システムによって所有される。オペレーティング・システムのすべてのインスタンスは、それ自体のウインドウの制限内で動作しなければならない。このウインドウのアドレス空間は可視ではなく、他のパーティション／オペレーティング・システムにアクセスすることもできない。好ましい実施形態では、すべてのウインドウは、ａ  ｍｏｄ  ３２ＭＢで表されるアドレス境界で始まる。ただし本発明では他の境界も意図される。オペレーティング・システム、特にＵｎｉｘおよびＷｉｎｄｏｗｓ  ＮＴのような市販のオペレーティング・システムから見ると、そのアドレス空間（すなわちそれが実行されるプロセッサの物理アドレス空間）は常に、図５の左部分に示すようにアドレス・ゼロで始まる（すなわちその下限はゼロである）。メイン・メモリ１６０から見ると、アドレス範囲は、再配置（ＲＬ）値で始まる。ＲＬ値については下記で詳細に説明する。好ましい実施形態では、排他ウインドウの上限は、共用ウインドウのベース・アドレスＳＢＡＳＥＯＳに対比して設定される。
【００６６】
共用ウインドウは上限および下限によって境界が定められるアドレス範囲であり、この空間は、複数のオペレーティング・システム（すなわちパーティション）にとって、それ自体の排他ウインドウでそれぞれが実行されているときに、可視でありアクセスすることができる。共用ウインドウは、例えばそのオペレーティング・システムを含む異なる部分が通信し、データを共用できる共通エリアである。好ましい実施形態ではこのエリアも、ａ  ｍｏｄ  ３２ＭＢのアドレス境界で開始する。共用ウインドウのサイズは、Ｎｘ３２ＭＢにすることができる。共用ウインドウと関連付けられた構成パラメータは２つある。１つのパラメータには、オペレーティング・システムのアドレス空間内で共用ウインドウとして定義される部分のベース・アドレス、ＳＢＡＳＥＯＳが含まれる（すなわち、それぞれＯＳ＃１、ＯＳ＃２、ＯＳ＃３のための部分５１４、５４４、５７４のベース・アドレス）。もう一方のパラメータは、メイン・メモリ１６０のアドレス空間５０４内の、それに対応する共用エリアのベース・アドレスＳＢＡＳＥＭＳＵを保持する。好ましい実施形態では、各オペレーティング・システムの共用エリアの上限は、そのオペレーティング・システムの「メモリのトップ」値である。下限ＳＢＡＳＥＯＳは、ａ  ｍｏｄ  ３２ＭＢアドレス境界上になければならない。排他エリアが使用可能にされる場合、ＭＳＵメモリ空間５０４内の共用メモリ５３７の位置は、このエリアを共用しているすべてのオペレーティング・システムの各排他ウインドウの上になければならない。この最後の要件は、ハードウェア設計のトレードオフとして実施される。共用エリアは上限ＴＯＳを境界とするが、この上限は、オペレーティング・システムのアドレス指定の観点から見るとオペレーティング・システムのメモリ参照のトップになる。ＴＯＳより上のアドレスはトラップされ、メイン・メモリ１６０に渡されることはない。したがって、共用メモリ５３７は完全に境界を定められる。
【００６７】
本明細書で企図される他の構成では、各オペレーティング・システムは、完全に共用された空間内で他のオペレーティング・システムと共存することができる。ＭＳＵブロック全体を共用するように設定する場合がその例である。この場合、他のオペレーティング・システムのアドレス空間を見ることができるように、各オペレーティング・システムを構成することができる。この方式で構成されると、メモリの個々のページへのアクセス権を維持する重荷が、協働するオペレーティング・システムに課される。ハードウェアはもはや、アクセス権および可視性を個々のオペレーティング・システムに対して制限しない。プロセスがメモリを破壊するのを防ぐために、オペレーティング・システムは、プロセッサ・ページ制御または何らかの他の手段により、メモリ・ページ・アクセス権を制御しなければならない。この操作法は、連携オペレーティング・システムによって使用される。オペレーティング・システムは、別のオペレーティング・システムのメモリ・ページから直接読み出しをすることができる。また１つのオペレーティング・システム・インスタンスは、別のオペレーティング・システムを宛先とするデータを、一時的バッファリングをいずれも回避して、他のオペレーティング・システムのデータ・エリアに直接ロードすることができる。図１０は、このタイプの構成例を示している。図１０を参照すると、各オペレーティング・システムの構成は、それ自体のオペレーティング・システム・インスタンスのコピーを含む、ＭＳＵメモリ全体のビューをその共用エリアが提供するような方式で行われている。以降、このエイリアス・アドレスをシャドー・アドレスと呼ぶ。各オペレーティング・システムのビュー内の共用エリアの下にあるアドレス範囲は、ローカルアドレスと呼ぶ。
【００６８】
当実施形態で、本発明は、排他ウインドウを関連付ける共用ウインドウを最大で１つまでに制限する。ただし、他の実施形態では、排他ウインドウを複数の共用ウインドウと関連付けることもできる。この場合、そのような共用ウインドウそれぞれのために、ＳＢＡＳＥＭＳＵおよびＳＢＡＳＥＯＳの値が別個にあることになる。
【００６９】
本発明によると、各パーティションの処理モジュールの物理アドレス（すなわち、そのパーティション上のオペレーティング・システムから見たアドレス空間）は、メイン・メモリ１６０のアドレス空間５０４内のそのパーティションに割り当てられた、それに対応する排他メモリ・ウインドウにマップあるいは再配置される。メイン・メモリ１６０のアドレス空間は、説明のために、単一のメモリブロックと見なすべきである。ただし本発明ではさらに、メモリ記憶装置２２０間でアドレス・インタリービングを生成するために、アドレスを個々のメモリ記憶装置２２０に追加的にマップする変換機能（下記で説明する）を企図している。
【００７０】
別の例として、図４に、それぞれがメイン・メモリ１６０内で２ＧＢのメモリ空間を占める、２つのオペレーティング・システムＯＳ０およびＯＳ１を含む単純なシステムを示す。各オペレーティング・システムのアドレス空間は、それ自体のメモリ・マップされたＩ／Ｏ（入出力）空間４１５および４３５を有する。この例では、メモリ・マップＩ／Ｏ（入出力）と関連付けられたホールは、ＤＲＡＭメモリ・エリアをオーバーレイしない。
【００７１】
ここで、用語「再配置（Relocation - ＲＬ）」および「再利用(Reclamation)ＲＣ」についてさらに説明することができる。再配置とは、ベース・アドレスを排他メモリ・ウインドウに割り当てることである。このベース・アドレスは、メイン・メモリ１６０のアドレス空間内におけるこのウインドウの開始アドレス（すなわちアドレス・ゼロからのオフセット）であり、a  ｍｏｄ  ３２ＭＢアドレス境界上になければならない。図４を参照すると、オペレーティング・システム・ウインドウ４３０（ＯＳ０）のためのＲＬ値は、このウインドウがメイン・メモリ１６０のボトムで始まるのでゼロになる。オペレーティング・システム・ウインドウ４１０（ＯＳ１）は、２ＧＢで始まるメイン・メモリ１６０のアドレス空間にその物理アドレス・ゼロ位置が再配置されているので、２ＧＢのＲＬ値を有する。
【００７２】
再利用とは、メモリ・マップＩ／Ｏアドレス空間の背後にあたるメモリ位置を再利用するために、ウインドウ内のアドレス空間をリマップすることである。再利用がアクティブではなく、メモリ・トップの下にあたる部分にＩ／Ｏ範囲が割り当てられたメモリ・マップＩ／Ｏをウインドウが有する場合、ウインドウ・メモリ・アドレス空間内にホールが生成される。図４の例では、メモリ・マップＩ／Ｏに関連付けられたホールがＤＲＡＭメモリ・エリアをオーバーレイしていないので、再利用は必要ではない。ただし図５を参照すると、ロー・メモリ・ホール５１２、５４２、５７２（すなわち、３２ビットメモリ・マップＩ／Ｏ装置がマップされている）に対しては再利用を実行することができる。再利用は、ホール・サイズと等しいホール上部の使用可能メモリ・アドレス空間を増大するものと見ることができる。好ましい実施形態では、再利用は、ホール・サイズが１２８ＭＢまたはそれ以上である場合にのみ実行される。これはハードウェア・トレードオフである。また設計トレードオフの理由から、オペレーティング・システム・インスタンスにつき１つのアドレス・ホールだけが再利用される。ただし本発明では、上記の２つの設計トレードオフを実行せずにコンピュータ・システムを実施できることを企図している。再利用については下記で詳細に説明する。
【００７３】
再び図５を参照すると、３つのオペレーティング・システム・アドレス空間ＯＳ＃１、ＯＳ＃２、ＯＳ＃３はすべて、メモリ・アドレス空間をオーバーレイするメモリ・マップＩ／Ｏを含んでいる。ただし、オペレーティング・システム・アドレス空間ＯＳ＃１のロー・メモリ・ホール５１２が最低１２８ＭＢのブロック・サイズよりも小さいので、再利用は実行されない。ただしロー・メモリ・ホールは、その他の２つのオペレーティング・システムのためにそれらの排他ウインドウ５４０Ａおよび５４０Ｂ内でそれぞれ再利用される。
【００７４】
図３は、４つのオペレーティング・システム・ウインドウ（すなわちインスタンス）を含んだ、別の可能な構成を示している。この場合ＯＳ＃１およびＯＳ＃４は共通エリアを共用し、一方でＯＳ＃２およびＯＳ＃３は別の共通エリアを共用する。メイン・メモリ１６０のアドレス空間への個々のウインドウの配置が、ＲＬ変数によって制御されることに留意されたい。図３は、これらのウインドウをＭＳＵメモリ空間３５０へマップする多くの可能な方式のうち１つだけを示している。
【００７５】
当実施形態によると、各オペレーティング・システム・ウインドウは、それに、構成パラメータセットＲＬＯＳ、ＲＣＯＳ、ＳＢＡＳＥＯＳ、ＳＢＡＳＥＭＳＵを供給する構成レジスタを関連付けている。単純にオペレーティング・システム・ウインドウの構成パラメータを変更することにより、異なるウインドウ・マッピングが容易に生成される。
【００７６】
表Ａは、図５に示した各オペレーティング・システム・ウインドウのための構成レジスタ値を示している。メモリ・ホールの再利用は、構成レジスタの内容によって決まる。表Ａには、当該の各オペレーティング・システムについての行が含まれる。再配置フィールドＲＬＯＳは、メモリ記憶装置２２０中で再配置された、当該のオペレーティング・システム・ウインドウのベース（すなわち開始）アドレスを格納する。再利用フィールドＲＣＯＳは、当該のオペレーティング・システム・ウインドウ中のロー・メモリ・ホールのサイズに対応するアドレス範囲を格納する。共用ベースＯＳフィールドＳＢＡＳＥＯＳは、共用部分として指定されたオペレーティング・システム・アドレス空間部分のベース・アドレスを格納する。共用ベースＭＳＵフィールドＳＢＡＳＥＭＳＵは、メモリ記憶装置メモリ２２０のアドレス空間内の共用ウインドウ５３７のベース・アドレスを格納する。
【００７７】
【表１】
2006216068.tif 000003
【００７８】
当実施形態では、本明細書に述べるように、プロセッサ２４０の各ペアのためのＴＣＴ２７０は、そのＴＣＴにインターフェースされたプロセッサによって発行されるアドレスに対して再配置、再利用、変換を実行するための、構成レジスタ、他のレジスタ、および論理を含む。ＴＣＭ２８５は、各ＤＩＢ２５０を介してＩ／Ｏプロセッサ（例えばＰＣＩカード）から受信したメモリ要求に対して、同一の再配置、再利用、変換を実行しなければならないので、これらのレジスタおよび論理はクロスバー相互接続２９０のＴＣＭ２８５内でも複写される。
【００７９】
各パーティションのプロセッサの物理アドレス空間内で、そのパーティションのＴＣＴ２７０は、ロー・メモリ、ハイ・メモリ、ロー・メモリ・ホール、ハイ・メモリ・ホール、および共用メモリのためにアドレス範囲を決定する。例えば、オペレーティング・システムＯＳ＃３のアドレス空間内で、ロー・メモリ・ウインドウ５７１はアドレス位置０．０００Ｈで開始し、３．８７５ギガバイトのメモリ空間を含む。ハイ・メモリ・ウインドウ５７３は、アドレス位置１．５０００．０００Ｈで開始し、５．２５０ギガバイトのメモリ空間を含む。ロー・メモリ・ホール５７２は、再利用されるべき１２５メガバイトの不使用メモリ空間を含む。ハイ・メモリ・ホール５７５は、再利用されるべき２５０メガバイトの不使用メモリを含む。
【００８０】
そのウインドウイング機能を実行する際、本発明の各ＴＣＴ２７０はさらに、メイン・メモリ１６０のアドレス空間５０４内の排他メモリ・ウインドウをそのパーティションに割り当てる。各排他メモリ・ウインドウ内には、ロー・メモリおよびハイ・メモリのためのアドレス範囲がある。例えば排他ウインドウ５４０Ｂでは、ロー・メモリ・ウインドウ５３３はアドレス位置１．４０００．００００Ｈで開始し、５．０００ギガバイトのメモリ空間を含む。ハイ・メモリ・ウインドウ５３４はアドレス位置２．８０００．０００Ｈで開始し、排他ウインドウ５４０Ｂ内のトータルで１０．５００ギガバイトのメモリ空間に対し１０．０００ギガバイトを含む。排他ウインドウ５４０Ａでは、ロー・メモリ・ウインドウ５３５はアドレス位置２．Ａ０００．００００Ｈで開始し、５．１２５ギガバイトのメモリ空間を含む。ハイ・メモリ・ウインドウ５３４はアドレス位置３．Ｅ８００．０００Ｈで開始し、１．６２５ギガバイトのメモリ空間を含む。
【００８１】
所与のパーティションの処理モジュールのプロセッサの１つがそのアドレス・ライン上にアドレス（「参照アドレス」あるいは「プロセッサ・アドレス」）を発行すると、そのプロセッサのためのＴＣＴ２７０は、必要に応じて任意の再配置、再利用、または共用ウインドウイングのためにそのアドレスを調整して、メイン・メモリ１６０内のそれに対応する位置のアドレスを生成する。構成レジスタのさまざまなフィールドの値（表Ａ）はこのプロセス中に使用される。具体的には、参照されるアドレスが、共用ウインドウとして指定されたオペレーティング・システム・アドレス空間の部分内にある場合、その参照アドレスは、構成レジスタの共用ベースＯＳフィールドおよび共用ベースＭＳＵフィールド内に含まれる値によってオフセット（offset）される。参照アドレスがオペレーティング・システムのアドレス空間のハイ・メモリ・ウインドウ内にある場合、その参照アドレスは、構成レジスタの再配置フィールドおよび再利用フィールドに含まれる値でオフセット（offset）される。参照アドレスがオペレーティング・システムのアドレス空間のロー・メモリ・ウインドウ内にある場合、その参照アドレスは、構成レジスタの再配置フィールドに含まれる値でオフセット（offset）される。したがって本明細書で述べるように、ＴＣＴ２７０は、各パーティション内のプロセッサの物理アドレス空間を各パーティションに割り当てられた各排他メモリ・ウインドウにマップする手段を提供し、より具体的には、各パーティション上のプロセッサの物理アドレス空間内の位置への参照を、そのパーティションに割り当てられた排他メモリ・ウインドウ内のそれに対応する位置に再配置する手段を提供する。上記のように、同様の方式で、ＴＣＭ２８５は、ＤＩＢおよびＴＣＭを介して通信するＩ／Ｏプロセッサ（例えばＰＣＩカード）から受信するしたメモリ・アドレスに必要とされる任意の再配置または再利用をメイン・メモリに対して実行する。
【００８２】
表Ｂには、オペレーティング・システム・アドレス空間（すなわち異なるパーティションのプロセッサの物理アドレス空間）を、メイン・メモリ中のそれに対応する排他メモリ・ウインドウに再配置および再利用することを実施するための擬似コードを示す。一般に、メモリ・マップＩ／ＯアドレスはＴＣＴ２７０によって除外（filter out）され、メイン・メモリ１６０への参照だけが残される。残りのアドレスは次いで、下記で詳細に述べるように表Ｂに示すアルゴリズムを通じて渡される。最終的に、再配置されたメモリ参照はメイン・メモリ１６０に渡される。
【００８３】
【表２】
2006216068.tif 000004
【００８４】
図８は、アドレス・ウインドウイング・アルゴリズムの流れ図を示している。説明では表Ａも参照する。ステップ８１０に示すように、参照アドレス（すなわち、所与のオペレーティング・システムを実行している所与のパーティション内の処理モジュールのプロセッサの１つによって発行されるアドレス）ＯＳＡＤＲが、共用メモリ・ウインドウとして指定されたオペレーティング・システムのアドレス空間の部分内にあるかどうかを決定するためにチェックが行われる。部分内にあれば、参照されるアドレスはステップ８１５に示すように、式：ＯＳＡＤＲ＋［ＳＢＡＳＥＭＳＵ−ＳＢＡＳＥＯＳ］に基づくアドレスに再配置される。このアドレスは再配置アドレス（relocated address）と呼ばれ、メイン・メモリ１６０にアクセスするために使用される。再配置アドレスは、メイン・メモリ１６０内に定義される共用メモリ・ウインドウ内の対応する位置のアドレスである。
【００８５】
部分内にない場合は、参照アドレスが、オペレーティング・システム・アドレス空間のハイ・メモリ部分（例えばハイ・メモリ５１３、５４３、５７３）内にあるかどうかを決定するためにチェックが実行される。これはステップ８２０に示している。ハイ・メモリ部分内にある場合、ステップ８２５に示すように、参照アドレスが、式：ＯＳＡＤＲ＋［ＲＬＯＳ−ＲＣＯＳ］に基づくアドレスに再配置される。再配置アドレスは、そのパーティションのための排他メモリ・ウインドウ内のそれに対応する位置を識別する。
【００８６】
上記の部分内にない場合、アルゴリズムはステップ８３０に示すように、参照アドレスがオペレーティング・システム・アドレス空間のロー・メモリ部分（例えばロー・メモリ５１１、５４１、５７１）内にあたるものと推定する。この場合、参照アドレスは、式：ＯＳＡＤＲ＋［ＲＬＯＳ］に基づくアドレスに再配置される。したがって、パーティション内のプロセッサの物理アドレス空間（すなわちオペレーティング・システムによって見られるアドレス空間）内でのアドレス参照は、メイン・メモリ中でそのパーティションのために定義された排他メモリ・ウインドウ内のそれに対応する位置か、またはメイン・メモリ中で定義された共用メモリ・ウインドウ内のそれに対応する位置に再配置される。
【００８７】
図３３は、好ましい実施形態による、上記の再配置および再利用機能を実行するための、レジスタおよび論理の形の装置を表すブロック図である。この論理は各ＴＣＴ２７０内に提供され、ＴＣＴ２７０にインターフェースされたプロセッサ（ＭＰ）２４０によって発行されるメモリ・アドレスに対して、本発明の再配置機能および再利用機能を実行する。上記のように、各ＤＩＢ２５０を介してＩ／Ｏプロセッサによって発行されたメモリ・アドレスの再配置および再利用を実行する目的で、この論理は各ＴＣＭ２８５中でも複写される。
【００８８】
図３３の好ましい実施形態によると、所与のプロセッサ２４０のアドレス・ライン上で発行された（または各ＤＩＢ２５０を介してＩ／Ｏプロセッサによって発行された）メモリ・アドレスは、Ｐｒｏｃｅｓｓｏｒ＿Ａｄｄｒｅｓｓレジスタ３３１０内でキャプチャされる。好ましい実施形態では、メイン・メモリは８バイトビットのワードでアドレス指定可能であり（１ワード＝８バイト＝６４ビット）、したがってプロセッサ・アドレスの最下位３ビットは、調整済みアドレスの生成には必要ではない。したがって図に示すように、ビット［３５：３］だけがＰｒｏｃｅｓｓｏｒ＿Ａｄｄｒｅｓｓレジスタ３３１０でキャプチャされる。好ましい実施形態ではさらに、メイン・メモリは８ワード（８ワード＝６４バイト）のブロックでキャッシュされるので、ビット［３５：６］は有効キャッシュ・ブロック・アドレスを表す。図に示すように、これらのビットは後続のＣａｃｈｅ＿Ｂｌｏｃｋ＿Ａｄｄｒｅｓｓレジスタ３３１２でキャプチャされる。
【００８９】
上記でさらに述べたように、好ましい実施形態では、すべてのメモリ・ウインドウは「排他」も「共用」もａ  ｍｏｄ  ３２ＭＢアドレス境界で開始しなければならない。その結果、プロセッサ・アドレスを特定の排他メモリ・ウインドウまたは共用メモリ・ウインドウに再配置する際に、計算に必要なのは、プロセッサ・アドレスのビット［３５：２５］だけになる。したがって、図に示すようにこれらのビットはテンポラリ・レジスタ３３１４にキャプチャされる。
【００９０】
値ＳＢＡＳＥＭＳＵ、ＳＢＡＳＥＯＳ、ＲＬＯＳ、ＲＣＯＳは、各レジスタ位置３３１８、３３２０、３３３０、３３４０に記憶される。これらのレジスタ位置は集合的に、上記の構成レジスタを構成する。実際には、これらのレジスタ位置は、単一のより大きなレジスタの別々のフィールドを構成することができ、あるいは４つの別々のレジスタとして実施することができる。プロセッサ・アドレスが、共用メモリ・ウインドウとして指定されたプロセッサのアドレス空間の部分内にあたる場合は、減算器３４０５が、レジスタ位置３３１８内のＳＢＡＳＥＭＳＵ値からレジスタ位置３３２０内のＳＢＡＳＥＯＳ値を減算し、その結果得られるオフセット値をレジスタ３３５０に格納する。プロセッサ・アドレスが、そのプロセッサが属するパーティションに割り当てられた排他メモリ・ウインドウのハイ・メモリ部分内にあたる場合は、減算器３４１０が、レジスタ３３３０内のＲＬＯＳ値からレジスタ３３４０内のＲＣＯＳ値を減算し、その結果得られるオフセット値をレジスタ３３７０に格納する。さらに示すように、ＲＣＯＳ値の５ビットは（追加機能３４００を使用して）、最下位ビット位置中の２論理ゼロビット、および最上位ビット位置中の４論理ゼロビットで埋められ、ＲＬＯＳ値のビットからの減算のためにビットを適切に位置合わせする。本発明では、再利用は１２８ＭＢの単位でしか実行できないと上記で述べたことを思い出されたい。プロセッサの排他メモリ・ウインドウのロー・メモリ部分内にあたるプロセッサ・アドレスの場合、レジスタ３３３０内のＲＬＯＳ値は必要とされるオフセットであり、したがって、この値はレジスタ３３６０に直接記憶される。
【００９１】
アドレス範囲比較論理３３９０は、プロセッサによって発行されたアドレスが共用メモリ・ウインドウに指定されたプロセッサのアドレス空間の部分内にあたるかどうか、またはそのアドレスが、プロセッサが属する部分に割り当てられた排他メモリ・ウインドウのロー・メモリ内またはハイ・メモリ内にあたるかどうかを判定する上記のステップを実行する。この比較に基づき、レジスタ３３５０、３３６０、３３７０のうち１つからの適切なオフセットが、３：１セレクタ３３８０によって選択される。次いで加算器３４２０は、選択されたオフセット値を、レジスタ３３１４に記憶されているプロセッサ・アドレスのビット［３５：２５］に加算し、その結果がレジスタ３４３０に記憶される。次いでレジスタ３４３０中のビットは、キャッシュ・ブロック・アドレスのビット［２４：６］の最初に付加されて、調整済みのアドレスを形成し、このアドレスはＡｄｊｕｓｔｅｄ＿Ｐａｒｔｉｔｉｏｎ＿Ａｄｄｒｅｓｓレジスタ３３１６に記憶される。レジスタ３３１６中の調整済みアドレスは、次いで、メイン・メモリにアクセスするために使用される（下記で説明する本発明のインターリービング機構による変換の後に）。
【００９２】
再び図５を参照すると、すでに上記で述べたように、メモリ・マップＩ／Ｏに割り当てられたアドレスは再利用することができる。このアドレスは、ロー・メモリ・ホール５１２などロー・メモリ・ホールと呼ばれる。好ましい実施形態では、ロー・メモリ・ホールは常に４ＧＢのすぐ下で開始し、・ホール・サイズに等しい、関連するオペレーティング・システムのアドレス空間内で下方に拡張する。明らかなように、ロー・メモリ・ホールの配置は設計変更（design choice）である。メモリの再利用を使用すべきなのは、インストールされたメモリ量に対して、メモリ・アドレスのトップがメモリオーバーラップ領域のボトム（すなわち４ＧＢ−（マイナス）オーバーラップ・ホール・サイズ）よりも大きい場合だけである。言い換えれば、再利用は、ＰＣＩ  ＡＰＩＣ範囲とインストールされたＤＲＡＭメモリ間にオーバーラップがないシステムでは使用すべきではない。
【００９３】
オーバーレイされたすべてのメモリ、およびそのすぐ上のメモリはいずれも、プロセッサ／オペレーティング・システム・アドレス空間内で上にスライドしていると考えることができる。したがって、ホールのボトムの後ろにありそこで開始するメモリは、アドレス４ＧＢで開始しこのポイントから上に拡張することになる。メモリ・アドレス指定はなお４ＧＢ開始アドレスから連続しており、新しいメモリ・トップ、すなわち元のメモリ・トップとホール・サイズの合計まで拡張する。
【００９４】
図１１は、アドレス範囲のマップの仕組みを具体的な例を用いて示している。４ＧＢあるいはそれ以下のメモリを備え、ＰＣＩ  ＡＰＩＣ範囲と部分的にメモリ・オーバーレイがあるシステムの場合には、再利用を使用することができる。このシステムでは、オーバーラップされたメモリは４ＧＢで開始するようにマップされる。図１２はこの点を表している。サブＰｏｄはプロセッサの調整済みメモリ要求アドレスを受け取り、それが４ＧＢ境界よりも上にあることを判定すると、そのアドレスから固定値を減算する。このメモリ・アドレスは、ＰＣＩ  ＡＰＩＣ範囲のシステム・アドレス空間への挿入を反映する。したがって、調整オフセットはＰＣＩ  ＡＰＩＣ範囲のホール・サイズと等しく、上記のように１２８ＭＢのブロックごとに固定される。
【００９５】
以下に提供するのは、さらにいくつかの本発明による再配置および再利用の例である。図５および表Ａを参照する。最初の例は、排他ウインドウ内のアドレス参照を扱うものである。２番目の例は共用ウインドウを参照する。
【００９６】
図５に示すように、オペレーティング・システム・アドレス空間ＯＳ＃３は、メインメモリアドレス１０．５ＧＢに再配置（ＲＬ）されている。再利用は、ロー・メモリ・ホール５７２の後ろの１２８ＭＢ（０．１２５ＧＢ）を回復するように設定される。ＯＳＡＤＲ＝１．５０００．００００Ｈをメモリ参照として使用することにより、ＴＣＴ２７０は関数ＯＳＡＤＲ＋［ＲＬ−ＲＣ］を実行して、ＭＳＵメモリ空間５０４内にアドレスを生成する。ＲＬおよびＲＣの値は表Ａに挙げる。したがって、ＯＳＡＤＲ＋［ＲＬ−ＲＣ］は、１．５０００．００００Ｈ＋［２．Ａ０００．００００Ｈ−０．０８００．００００Ｈ］になる。これは１．５０００．００００Ｈ＋２．９８００．００００Ｈになり、これは３．Ｅ８００．００００Ｈ（１５．６２５ＧＢ）になる。このアドレスは、オペレーティング・システムＯＳ＃３と関連付けられた排他ウインドウ５４０Ａ内の位置に相当する。単純な計算により、このアドレスは、４ＧＢのハイメモリエリアベース・アドレスからのオフセット１．２５ＧＢであることが分かる。上記で計算されたアドレスは、ＯＳ＃３の再配置ハイ・メモリ・ベース・アドレス（１４．３７５ＧＢ）からのオフセット１．２５ＧＢでもある。
【００９７】
ＯＳ＃２が実行されているパーティション内のプロセッサが同一のアドレス１．５０００．００００Ｈを発行する場合、代って再配置アドレスが、そのパーティション（すなわちウインドウ５４０Ｂ）に割り当てられた排他メモリ・ウインドウ内にあたることになる。したがってＯＳＡＤＲ＋［ＲＬ−ＲＣ］は、１．５０００．００００Ｈ＋［１．４０００．００００Ｈ−０．１０００．００００Ｈ］になる。これは１．５０００．００００Ｈ＋１．３０００．００００Ｈになり、これは２．８０００．００００Ｈ（１０．００ＧＢ）になる。このアドレスは明らかにメイン・メモリ１６０のハイ・メモリ・エリア５３４内にあたり、これはＯＳ＃２を実行するパーティションに割り当てられた排他メモリ・ウインドウ（５４０Ｂ）の部分である。この例では、異なる２つのパーティション内のオペレーティング・システムにはそれぞれ、そのアドレス空間があたかも同一のベース・アドレス（すなわちアドレス・ゼロ）で開始するように見えるが、それらのアドレス空間内でのアドレス参照は、メイン・メモリ内の各パーティションに割り当てられた排他メモリ・ウインドウ内のそれに対応する位置に適切に再配置されることを実証している。言うまでもなく、本発明の再配置フィーチャは、異なるパーティション上でオーバーラップする物理アドレス空間をどれでも２つ（両方がアドレス・ゼロで始まるものに限らず）、メイン・メモリ内の各排他メモリ・ウインドウにマップするのに使用することができる。
【００９８】
第２の例では、ＯＳ＃３と関連付けられた共用ウインドウ５７５へのメモリ参照を使用する。この例では、ＯＳ＃３が、アドレス１．Ｂ９００．００００Ｈ（６．８９０ＧＢ）への参照を試みると想定する。ＴＣＴ２７０は、このアドレスが共用メモリの範囲内にあると決定する。したがって、本発明はマッピングする関数ＯＳＡＤＲ＋［ＳＢＡＳＥＭＳＵ−ＳＢＡＳＥＯＳ］を適用して、ＭＳＵメモリ空間５０４にアクセスするのに適したアドレスを生成する。したがってマップ関数は、１．Ｂ９０００．００００Ｈ＋［４．５０００．００００Ｈ−１．Ｂ８０００．００００Ｈ］になる。これは、１．Ｂ９０００．００００Ｈ＋２．９８０００．００００Ｈになり、これは４．５１００．００００Ｈ（１７．２６５６ＧＢ）になる。このアドレスは、ＭＳＵメモリ空間５０４の共用メモリ・ウインドウ５３７の範囲内にあたる。
【００９９】
同一のアドレスオフセット０．０１５６ＧＢを使用し、それをオペレーティング・システムＯＳ＃２の共用ベース・アドレスに適用することにより、これに相当するアドレスをＯＳ＃２について計算することができる。ＯＳＡＤＲは５．７５０ＧＢ＋０．０１５６ＧＢに等しく、これは５．７６５６ＧＢ（１．７１００．００００Ｈ）に等しい。このマップ関数ＯＳＡＤＲ＋［ＳＢＡＳＥＭＳＵ−ＳＢＡＳＥＯＳ］を適用すると、１．７１００．００００Ｈ＋［４．５０００．００００Ｈ−１．７０００．００００Ｈ］が得られる。したがって、このマップ関数は、４．５１００．００００Ｈ（１７．２６５６ＧＢ）のメモリ・アドレスを生成する。したがって、１．Ｂ９００．００００Ｈ（６．８９０６ＧＢ）のオペレーティング・システムＯＳ＃３によるメモリ参照と、１．７１００．００００Ｈ（５．７６５６ＧＢ）のオペレーティング・システムＯＳ＃２によるメモリ参照はどちらも、アドレス４．５１００．００００Ｈ（１７．２６５６ＧＢ）においてメイン・メモリ１６０にアクセスする。
【０１００】
Ｂ．メモリのインターリービングおよびスタッキング（変換）
変換は、メモリ参照（再配置後の、および適切な場合には再利用後の）をメイン・メモリ１６０内の特定のメモリ記憶装置にマップするプロセスである。図２を参照すると、メイン・メモリ１６０は、概念上、複数のＭＳＵペア２２２および２２４（ＭＳＵ＿ＰＡＩＲと呼ぶ）に分割されている。ＭＳＵ＿Ｐａｉｒ内の個々のＭＳＵ２２０は、一意的には接続されていない。図２には２つのＭＳＵ＿ＰＡＩＲ２２２、２２４のみを説明のためだけに示している。本発明では、２つ以上のＭＳＵ＿ＰＡＩＲを企図している。
【０１０１】
コンピュータ・システム２００は、再配置中、また当てはまる場合には再利用中、に生成された調整済みアドレス（すなわちメモリ参照）を利用し、次いでメモリ記憶装置ペア２２２、２２４間で、調整済みメモリ参照をインターリーブまたはスタックする。本発明の目標は、各プロセッサ２４０と関連付けられたメイン・メモリ要求をそれぞれ、メイン・メモリ１６０のグローバル・アドレス空間（すなわち全ＤＲＡＭアドレス空間）にわたって分配して、メモリ資源の競合を最小にするために、連続したメモリ・アクセスが異なるメモリ記憶装置２２０間で分配することである。インターリービングを実行できない場合には、メモリ・アドレスが連続的な順序でメモリ記憶装置のペアに向けられ、本明細書ではこれをスタッキングと呼ぶ。
【０１０２】
例示的実施形態では、４つのメモリ記憶装置、すなわちメモリ記憶装置ペア２２２およびメモリ記憶装置ペア２２４など２組のメモリ記憶装置がある。各メモリ記憶装置ペア（以降ＭＳＵ＿Ｐａｉｒと呼ぶ）には、メモリ記憶装置２２０Ａおよび２２０Ｂなど２つのメモリ記憶装置が含まれる。インターリービングはメモリ記憶装置ペア２２２および２２４間で達成される。次いで、メモリ記憶装置ペア２２２および２２４内のメモリ記憶装置２２０間でそれぞれインターリービングが達成される。有効な結果は、４重（four-way）インターリービングである。
【０１０３】
例えば、メモリ記憶装置２２０Ａおよびメモリ記憶装置２２０Ｂなど、２つのメモリ記憶装置があるとする。メモリへの参照は、メモリ記憶装置２２０Ａとメモリ記憶装置２２０Ｂの間で交互に行われる（ping-pong）ことが最適である。すなわち、メモリへの最初の参照はメモリ記憶装置２２０Ａにアクセスするのに対し、２番目の参照はメモリ記憶装置２２０Ｂにアクセスする。メモリ記憶装置２２０Ａが１つだけのバンクを移植（populate)しているのに対して、メモリ記憶装置２２０Ｂが８つのバンクを移植（populate)していて、メモリ記憶装置２２０Ａとメモリ記憶装置２２０Ｂを交互に用いる場合、ある時点で、メモリ記憶装置２２０Ａはメモリ空間を使い果たしてしまう。この場合は、メモリ記憶装置２２０Ｂ内の残りのメモリにスタックされる。すなわち、メモリ記憶装置２２０Ｂの連続的アドレス指定（または参照）を手段とする。
【０１０４】
メモリ記憶装置の特徴の１つは、特定のメモリ記憶装置「ペア」内に、１つのメモリ記憶装置があっても複数のメモリ記憶装置があってもよいことである。さらにメモリ記憶装置は、異なる比率で移植（populate)することができる。すなわち、１つのメモリ記憶装置は１つのＤＲＡＭバンクを移植（populate)させ、別のメモリ記憶装置は８つのＤＲＡＭバンクを移植（populate)させることができる。
【０１０５】
本発明によると、変換プロセスには、メモリ記憶装置ペア２２２とメモリ記憶装置ペア２２４の間およびＭＳＵ２２０の間において、メモリ参照のインターリービングおよびスタッキングを用いる。このプロセスは、プロセッサ（ＭＰ）２４０から発行されるメモリ要求に対しては、各ＴＣＴ２７０によって実行される。ＤＩＢを介してＩ／Ｏプロセッサ（例えばＰＣＩカード）から発行されるメモリ要求に対しては、このプロセスは各ＴＣＭ２８５によって実行される。
【０１０６】
ＴＣＴ２７０の動作を考慮すると、どのＭＳＵ＿ＰａｉｒまたはどのＭＳＵ２２０が、最初のキャッシュ・ライン・アドレス（すなわちＴＣＴ２７０からのアドレス）を受け取るべきかを初期化時に指定する機構が提供される。ＴＣＴ２７０は、プロセッサのメモリ書き込み／読み取りアドレスを（任意の再配置後および／または再利用後に）受け取り、アドレス変換機能を通じてそれをパスする。好ましい実施形態では、メモリ記憶装置２２０は２８ビットのキャッシュ・ライン・アドレス（すなわちメモリ参照）、および８バイトのコンテナアドレスを、１６ギガバイトのメモリ空間を表すマルチサイクル信号から受信する。下記で説明するアドレス変換オプションの設定に基づき、変換機能は、要求を受け取るメモリ記憶装置と関連付けられたＭＳＵ数を、２８ビットＭＳＵマップアドレスの上位１０ビットとともに生成する。ＴＣＴ２７０はＭＳＵのマップアドレスの下位１８ビットも供給するが、これらのビットは変換機能によって変更されない。
【０１０７】
ＴＣＴ２７０は、ＭＳＵ＿Ｐａｉｒごとのメモリ・アクセスおよび個々のＭＳＵ２２０間でのメモリ・アクセスの、インターリービングおよびスタッキングの多様な組み合わせを可能にする。表Ｃには、ＭＳＵ＿ＰＡＩＲおよびその個々のＭＳＵ２２０間での、メモリのインターリービング／スタッキングの８つの組み合わせを挙げる。
【０１０８】
【表３】
2006216068.tif 000005
【０１０９】
表ＣのＩＩＩモードを参照すると、アルゴリズムは、キャッシュ・ラインを１つおきに交互のＭＳＵ＿ＰＡＩＲに分配している（例えばキャッシュ・ライン・アドレス０はＭＳＵ＿ＰＡＩＲ２２２に転送される）。アルゴリズムはさらに、ＭＳＵ＿ＰＡＩＲに向けられたキャッシュ・ラインを１つおきに、ＭＳＵ＿ＰＡＩＲ２２２、２２４内の交互のＭＳＵ２２０に分配する（例えばキャッシュ・ライン・アドレス０は、下位数のＭＳＵ２２０に向けられる）。
【０１１０】
ＩＳＩ、ＩＳＳ、またはＩＩＳモードでは、このアルゴリズムは、キャッシュ・ラインを１つおきに交互のＭＳＵ＿ＰＡＩＲ２２２、２２４に分配する（例えばキャッシュ・ライン・アドレス０はＭＳＵ＿ＰＡＩＲ２２２に転送される）。本発明によりスタックされたＭＳＵ＿ＰＡＩＲ２２２、２２４内のＭＳＵ２２０の場合、アルゴリズムはさらに、もう一方のＭＳＵ２２０を連続的に満たす前にそのＭＳＵ２２０が一杯になるまで、選択されたＭＳＵ＿ＰＡＩＲ２２２、２２４の下位数のＭＳＵ２２０に、連続的にアドレス指定されたアクセスを向ける。本発明によりインターリーブされたＭＳＵ＿ＰＡＩＲ２２２、２２４内のＭＳＵ２２０の場合、アルゴリズムはさらに、ＭＳＵ＿ＰＡＩＲ２２２、２２４に向けられたキャッシュ・ラインを１つおきに、交互のＭＳＵ２２０に分配する（すなわち、キャッシュ・ライン・アドレス０は、ＭＳＵ＿ＰＡＩＲ２２２、２２４内の下位数のＭＳＵ２２０に向けられる）。
【０１１１】
ＳＳＳモードでは、本発明は、もう一方のＭＳＵ＿ＰＡＩＲ２２２、２２４を順次満たす前にそのＭＳＵ＿ＰＡＩＲ２２２、２２４が一杯になるまで、下位数のＭＳＵ＿ＰＡＩＲ２２２、２２４（構成レジスタによって決定される）を連続的に充填する。このアルゴリズムはさらに、もう一方のＭＳＵ２２０を連続的に充填する前にそのＭＳＵ２２０が一杯になるまで、選択されたＭＳＵ＿ＰＡＩＲ２２２、２２４内の下位数のＭＳＵ２２０に連続的にアクセスを向ける。
【０１１２】
ＳＳＩ、ＳＩＩ、ＳＩＳモードでは、アルゴリズムは、もう一方のＭＳＵ＿ＰＡＩＲ２２２、２２４を順次満たす前にそのＭＳＵ＿ＰＡＩＲ２２２、２２４が一杯になるまで、下位数のＭＳＵ＿ＰＡＩＲ２２２、２２４を連続的に充填する。スタックされたＭＳＵ＿ＰＡＩＲ２２２、２２４内のＭＳＵ２２０の場合、本発明は、もう一方のＭＳＵ＿ＰＡＩＲ２２２、２２４を連続的に充填する前にそのＭＳＵ＿ＰＡＩＲ２２２、２２４が一杯になるまで、選択されたＭＳＵ＿ＰＡＩＲ２２２、２２４のローＭＳＵ２２０のアドレスを連続的に指定する。インターリーブされるＭＳＵ＿ＰＡＩＲ２２２、２２４内のＭＳＵ２２０の場合、本発明は、ＭＳＵ＿ＰＡＩＲ２２２、２２４のキャッシュ・ラインを１つおきに、交互のＭＳＵ２２０に分配する。キャッシュ・ライン・アドレス０は、そのＭＳＵ＿ＰＡＩＲ２２２、２２４内の下位数のＭＳＵ２２０に向けられる。
【０１１３】
例えば、ＩＳＳオプションに従うと、インターリービングはキャッシュ・ラインが１つおきに実行され、メモリ記憶装置ペアに対して交互に実行される、。すなわち、最初のキャッシュ・ライン・アドレスはメモリ記憶装置ペア２２２に転送され、次のキャッシュ・ライン・アドレスはメモリ記憶装置２２４に転送される。本発明では、メモリ記憶装置２２０Ａが一杯になるまで、メモリ参照をメモリ記憶装置２２０Ａ内に連続的にスタックする。メモリ記憶装置２２０Ａが一杯になると、本発明は次いで、メモリ記憶装置２２０Ｂが一杯になるまでそこにメモリ参照を連続的にスタックする。同様に、メモリ記憶装置２２０Ｃが一杯になると、本発明は次いで、メモリ記憶装置２２０Ｄが一杯になるまでそこにメモリ参照をスタックする。
【０１１４】
表Ｄは、変換および再利用レジスタを定義している。この表には、変換および再利用レジスタ内の当該の各アドレス・ビットについての行が含まれる。各行には機能フィールドおよびデフォルト値フィールドが含まれる。機能フィールドは、当該のアドレス・ビットの機能を表す。デフォルト値フィールドは、初期化の際にアドレス・ビットがデフォルトとして選択する値である。メモリ・アドレス変換および再利用レジスタ内のビット・ステータスは、メモリ・アドレス空間の再利用が使用可能であるかどうか、およびアドレス変換が使用可能であるかどうかを決定する。これはまた、どのメモリ記憶装置ペアを選択するか、およびどのメモリ記憶装置を変換プロセスのために選択するかを指定する。
【０１１５】
【表４】
2006216068.tif 000006
【０１１６】
ＭＳＵ＿ＰＡＩＲ２２２、２２４およびＭＳＵ２２０のバンク間でインターリーブすることは、メモリ・コントローラ（図示せず）の責任である。
【０１１７】
コンピュータ・システム２００がインターリービングを実施するかどうかは、複数レジスタ内の設定によって決まる。例えば、表ＥおよびＦは、第１メモリ記憶装置ペアおよび第２メモリ記憶装置ペアにそれぞれ対応する、メモリ・アドレス変換レジスタの初期化時における内容を示している。メモリ・アドレス変換レジスタには、当該の各ビットのための行が含まれる。各行には、機能フィールドおよびデフォルト値フィールドが含まれる。機能フィールドは、当該のアドレス・ビットの機能を含む。デフォルト値フィールドは、アドレス・ビットが初期化時にデフォルトとして選択する値である。
【０１１８】
【表５】
2006216068.tif 000007
【０１１９】
【表６】
2006216068.tif 000008
【０１２０】
表ＥおよびＦに示すメモリ・アドレス変換レジスタ内のビット・ステータスは、メモリ記憶装置の特定ペアに対するインターリービングが使用可能であるかどうか、またはスタッキングが使用可能であるかどうかを決定する。メモリ・アドレス変換レジスタ内のビット・ステータスはさらに、メモリ記憶装置ペアの２つのメモリ記憶装置のうち小さい方を示す。
【０１２１】
表Ｇは、フォワードおよびリバースのアドレス変換のために初期化時に必要とされる構成情報を示す。表Ｇは図２と次のように関連している。ＭＳＵ＿Ｐａｉｒ０はＭＳＵ＿Ｐａｉｒ２２２、ＭＳＵ＿Ｐａｉｒ１はＭＳＵ＿Ｐａｉｒ２２４，ＭＳＵ＃０はＭＳＵ２２０Ａ、ＭＳＵ＃１はＭＳＵ２２０Ｂ、ＭＳＵ＃２はＭＳＵ２２０Ｃ、およびＭＳＵ＃３はＭＳＵ２２０Ｄである。
【０１２２】
【表７】
2006216068.tif 000009
【０１２３】
【表８】
2006216068.tif 000010
【０１２４】
【表９】
2006216068.tif 000011
【０１２５】
注１：このレジスタ・サイズはこの表では指定されない。これは実装固有（implementation specific）であり、変換アルゴリズムを理解するためには必要ではない。
【０１２６】
注２：メモリ・サイズは、最大メモリ・アドレス＋１に等しい。例えば、単一の１２８ＭＢバンクは、０００＿００００Ｈから７００＿００００Ｈのアドレス範囲を有するが、そのサイズは８００＿００００Ｈである。このサイズを３６ビット［３５：０］に拡張すると、０＿８００＿００００Ｈになる。このサイズに最上位の９ビット［３５：２７］を使用すると、この例のサイズレジスタは００００００００１Ｂまたは００１Ｈでロードされる。
【０１２７】
上記のように、フォワードのアドレス変換機能を実施する論理およびレジスタは、ＴＣＭ２８５（各ＤＩＢを介した出入力プロセッサからのメモリ要求に対して）およびＴＣＴ２７０（プロセッサ２４０からのメモリ要求に対して）の両方にある。アルゴリズムは２つのステップで実行される。第１ステップでは、どのＭＳＵ＿ＰＡＩＲを選択するべきかを決定し、第２ステップでは、アドレスを送るために、選択されたペアのどちらのＭＳＵを選択すべきかを決定する。ＡｐｐｅｎｄｉｘＡに示すのは、フォワード・アドレス変換アルゴリズムの単純化した擬似コードである。この擬似コードには、ＭＳＵ＿ＰＡＩＲＳの数、またはＭＳＵ＿ＰＡＩＲごとのＭＳＵの数などの基準を検証するチェックは含まれない。当分野の技術者には直ちに明らかであるように、これらのチェックは、変換プロセスをより容易に理解できるように擬似コードから意図的に除外した。
【０１２８】
フォワード・アドレス変換アルゴリズムは、入力ＴＥＭＰ＿ＡＤＤＲを受け取り（ｔａｋｅ  ａｓ）、レジスタＰＡＩＲ＿ＭＯＤＥ、ＳＭＡＬＬＥＳＴ＿ＰＡＩＲ＿ＳＺおよびＰＡＩＲ＿ＳＥＬを使用する。このアルゴリズムは、任意の必要な調整後のアドレスである出力ＴＥＭＰ＿ＡＤＤＲを生成し、また、どのＭＳＵ＿ＰＡＩＲが選択されているかを示すＲＣＶＩＮＧ＿ＰＡＩＲを生成する。最初、ＴＥＭＰ＿ＡＤＤＲ［２９：０］は、任意のアドレス再配置が実行された後のアドレスである。ＴＥＭＰ＿ＡＤＤＲ［２９：０］はＡＤＤＲ＿ＩＮ［３５：６］に等しい。ＴＯＰ＿ＯＦ＿ＩＮＴＲＬＶ＿ＲＡＮＧＥは、インターリービングのためのメモリがもう残っていないアドレス値である。すなわち、これはメモリ・アドレスのスタッキングが開始するアドレスである。ＴＯＰ＿ＯＦ＿ＩＮＴＲＬＶ＿ＲＡＮＧＥは、ＳＭＡＬＬＥＳＴ＿ＰＡＩＲ＿ＳＺの２倍に等しい。
【０１２９】
図９は、フォワード・アドレス変換アルゴリズムの流れ図を示している。ＭＳＵ＿Ｐａｉｒの選択は段階９００に示される。段階９０２では、ペア間のインターリービングが使用可能であるかどうかを決定する。使用可能である場合段階９０４に示すように、このアルゴリズムはまず、インターリーブされたメモリ範囲内にアドレスがあるかどうかを調べる。キャッシュ・ライン・アドレスがインターリーブ範囲の上にある場合、ステップ９１０に示すように、本発明は大きい方のＭＳＵ＿ＰＡＩＲにスタックする。インターリーブ範囲の上にない場合、流れはステップ９０６へと続き、複数のＭＳＵ＿ＰＡＩＲの中からどのＭＳＵ＿ＰＡＩＲを選択するかを決定する。好ましい実施形態では、低位のキャッシュ・ライン・アドレス・ビット、ＴＥＭＰ＿ＡＤＤＲ［０］がＭＳＵ＿ＰＡＩＲを選択するために使用される。
【０１３０】
ペア間のインターリービングが使用可能でない場合、本発明は次いで、キャッシュ・ライン・アドレスをスタックする。好ましい実施形態では、本発明は、キャッシュ・ライン・アドレスをＭＳＵ＿ＰＡＩＲ０にスタックし始める。ＭＳＵ＿ＰＡＩＲ０（すなわちＭＳＵ＿Ｐａｉｒ２２２）が一杯になると、スタッキング・プロセスはＭＳＵ＿ＰＡＩＲ１（すなわちＭＳＵ＿Ｐａｉｒ２２４）に進行する。スタッキングは、最上位のＭＳＵ＿ＰＡＩＲが一杯になるまで続行する。これは一般にステップ９１２に示される。
【０１３１】
流れは次いでステップ９０８に進行し（ブロック９０６、９１０、９１２のいずれから）、キャッシュ・ライン・アドレスが再調整される。この調整の方法は、インターリービングまたはスタッキングが選択されているかどうかによって決まる。インターリービングの場合、キャッシュ・ライン・アドレス（ＴＥＭＰ＿ＡＤＤＲ）は、アドレスを右に１位置ずらし、最上位のアドレス・ビットをゼロ充填することにより再調整される。スタッキングの場合、キャッシュ・ライン・アドレスは同じままであるか、または擬似コードから明らかなように、ＴＥＭＰ＿ＡＤＤＲ−ＳＭＡＬＬＥＳＴ＿ＰＡＩＲ＿ＳＺと等しくなるようにセットされる。
【０１３２】
ＭＳＵ＿ＰＡＩＲがスタッキングのために選択されると、本発明は段階９２０に進行する。このアルゴリズム段階は、入力ＴＥＭＰ＿ＡＤＤＲを有するが、これはステップ９０８で調整されていることもありうる。段階９２０では次のレジスタを使用する：ＰＡＩＲ０＿ＭＯＤＥ、ＰＡＩＲ０＿ＳＭＡＬＬＥＳＴ＿ＭＳＵ＿ＳＺ、ＰＡＩＲ＿ＳＥＬ。段階９２０からの出力は、必要とされる任意の調整後のキャッシュ・ライン・アドレスであるＴＥＭＰ＿ＡＤＤＲと、どのＭＳＵがキャッシュ・ライン・アドレスを受け取るかを示すＲＣＶＩＮＧ＿ＭＳＵである。初期化時において、ＰＡＩＲ０＿ＴＯＰ＿ＯＦ＿ＩＮＴＬＶ＿ＲＡＮＧＥは、ＭＳＵ＿ＰＡＩＲ０のＭＳＵ間のインタリービングのためにメモリがもう残っていないアドレス値である。ＰＡＩＲ１＿ＴＯＰ＿ＯＦ＿ＩＮＴＬＶ＿ＲＡＮＧＥは、ＭＳＵ＿ＰＡＩＲ１のＭＳＵ間のインターリービングのためにメモリがもう残っていないアドレス値である。
【０１３３】
段階９００でＭＳＵ＿Ｐａｉｒ０が選択された場合、次いで段階９２０では、ＲＣＶＩＮＧ＿ＰＡＩＲがＭＳＵ０またはＭＳＵ１に等しいかどうかを決定する。同様に、段階９００でＭＳＵ＿Ｐａｉｒ１を選択した場合は、次いで段階９２０で、ＲＣＶＩＮＧ＿ＰＡＩＲがＭＳＵ２またはＭＳＵ３と等しいかどうかを決定する。説明を簡潔にするために、ＭＳＵ０とＭＳＵ１間の選択だけを説明する。
【０１３４】
ステップ９２４では、ＭＳＵ＿ＰＡＩＲの複数ＭＳＵ間のインターリービングが使用可能であるかどうかを決定する。インターリービングが使用可能である場合、ステップ９２６に示すように、アルゴリズムはまず、キャッシュ・ライン・アドレスがインターリーブされたメモリ範囲内にあるかどうかを判定する。キャッシュ・ライン・アドレスがインターリーブされたメモリ範囲内にある場合、ステップ９２８に示すように、低位のキャッシュ・ライン・アドレス・ビットが、適切なＭＳＵを選択するために使用される。次いでそのキャッシュ・ライン・アドレスは、ステップ９３０に示すように、キャッシュ・ライン・アドレス・ビットを右に１位置ずらし、最上位のアドレス・ビットをゼロ充填することにより再調整される。
【０１３５】
それに対し、キャッシュ・ライン・アドレスがインタリーブ・メモリ範囲の上にある場合、ステップ９３２に示すように、アルゴリズムは大きい方のＭＳＵにスタックする。流れは次いでステップ９３０に進行し、ＴＥＭＰ＿ＡＤＤＲをＴＥＭＰ＿ＡＤＤＲ＿ＰＡＩＲ０＿ＳＭＡＬＬＥＳＴ＿ＭＳＵ＿ＳＺに設定することにより、アドレスがスタッキングのために調整される。
【０１３６】
ＭＳＵ＿ＰＡＩＲ０のＭＳＵ間のインターリービングが使用可能でない場合、ステップ９３４に示すように、本発明はまずＭＳＵ０にスタックし、次いで残りをＭＳＵ１にスタックする。再度、アドレスは、ローＭＳＵまたはハイＭＳＵのどちらが最初に使用されるかに基づいてステップ９３０で調整される。ローＭＳＵが最初に使用される場合、ＴＥＭＰ＿ＡＤＤＲは変更されないままである。ハイＭＳＵが最初に使用される場合、ＴＥＭＰ＿ＡＤＤＲはＴＥＭＰ＿ＡＤＤＲ＿ＰＡＩＲ０＿ＳＭＡＬＬＥＳＴ＿ＭＳＵ＿ＳＺに設定される。
【０１３７】
上記のように、ＭＳＵ＿ＰＡＩＲ１内のＭＳＵ２とＭＳＵ３間の選択も同様の手順に従って行われる。
【０１３８】
最終的には、ステップ９４０に示すように、ＭＳＵ＿ＡＤＤＲ［２９：０］が調整済みのＴＥＭＰ＿ＡＤＤＲ［２９：０］に割り当てられ、ＲＣＶＩＮＧ＿ＰＡＩＲはＲＣＶＩＮＧ＿ＭＳＵ標識と連結されて、ＭＳＵ＿ＳＥＬ［１：０］を形成する。これにより、フォワード・アドレス変換アルゴリズムが完了する。
【０１３９】
ＡｐｐｅｎｄｉｘＢに示すのは、リバース変換アルゴリズムのための擬似コードである。リバース・アドレス変換機能は、ＭＳＵコントローラ（図示せず）内だけにある。
【０１４０】
図６を参照して、フォワード・アドレス変換アルゴリズムの例を実証する。図６は、２つのＭＳＵ＿ＰＡＩＲ６１０、６４０を有するメイン・メモリ６００を示している。ＭＳＵ＿Ｐａｉｒ６１０が２つのＭＳＵ６２０、６３０を有するのに対し、ＭＳＵ＿Ｐａｉｒ６４０は単一のＭＳＵ６５０を有する。ＭＳＵ６２０は１つの１２８メガバイト・メモリ・バンク１０２０を有し、ＭＳＵ６３０は２つの１２８メガバイト・バンク１０３０（すなわち２５６メガバイトのメモリ空間）を有し、ＭＳＵ６５０は４つの１２８メガバイト・バンク１０４０（すなわち５１２メガバイトのメモリ空間）を有する。ＭＳＵ６２０のトップは８０．００００Ｈである。これは、８０．００００Ｈが、インターリービングのためにメモリが残っていないアドレス位置であることを意味する。ＭＳＵ６３０のトップは１００．００００Ｈである。したがって、ＭＳＵ＿Ｐａｉｒ６１０は１８０．００００Ｈのペア・サイズを有する。ＭＳＵ６５０のトップは２００．００００Ｈである。したがって、ＭＳＵ＿Ｐａｉｒ６１０は２００．００００Ｈのペア・サイズを有する。ＭＳＵ＿Ｐａｉｒ６４０は単一のＭＳＵ６５０しか含まないものの、概念上は１組のＭＳＵとして扱われることに留意されたい。
【０１４１】
４つのキャッシュ・ライン・アドレス０．００００．００００Ｈ、０．００００．００４０Ｈ、０．００００．００８０Ｈ、および０．００００．００Ｃ０Ｈがあり、それぞれが、任意のアドレス再配置実行後の、４つのオペレーティング・システムからの４つのメモリ参照を表していると想定する。この例では、メイン・メモリは図６に示すように構成される。この構成が、この数のメモリ・バンクに対する最も効率のよいメモリ構成ではないことに留意されたい。
【０１４２】
この例のレジスタ・セット・アップは次のようになる。ＰＡＩＲ＿ＭＯＤＥは０（インターリーブ）に等しく、ＰＡＩＲ０＿ＭＯＤＥは０（インターリーブ）に等しく、ＰＡＩＲ１＿ＭＯＤＥは１（スタック）に等しく、ＳＭＡＬＬＥＳＴ＿ＰＡＩＲ＿ＳＺは００３Ｈに等しく、ＰＡＩＲ０＿ＳＭＡＬＬＥＳＴ＿ＭＳＵ＿ＳＺは００１Ｈに等しく、ＰＡＩＲ１＿ＳＭＡＬＬＥＳＴ＿ＭＳＵ＿ＳＺは００４Ｈに等しく、ＰＡＩＲ＿ＳＥＬは１に等しく、ＰＡＩＲ０＿ＳＥＬは１に等しく、ＰＡＩＲ＿ＳＥＬは０に等しい。上記のセットアップは変換のＩＩＳオプションを表す。
【０１４３】
このレジスタ設定を使用し、最初のアドレスをアルゴリズムに提供すると、次の結果が得られる。
【０１４４】
両位相のための初期化：  
ＰＲＯＣＥＳＳＯＲ＿ＡＤＤＲ［３５：０］＝０００００００００Ｈ 
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
ＴＯＰ＿ＯＦ＿ＩＮＴＲＬＶ＿ＲＡＮＧＥ＝００３Ｈ 
ＰＡＩＲ０＿ＴＯＰ＿ＯＦ＿ＩＮＴＬＶ＿ＲＡＮＧＥ＝００２Ｈ 
ＰＡＩＲ１＿ＴＯＰ＿ＯＦ＿ＩＮＴＬＶ＿ＲＡＮＧＥ＝００４Ｈ 
ＭＳＵ＿Ｐａｉｒ選択位相：  
Ｉｎ  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
Ｒｅｓｕｌｔｓ：  
ＲＣＶＩＮＧ＿ＭＳＵ＝０（ＭＳＵ＿ＰＡＩＲ０）  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
ＭＳＵ＃選択位相：  
Ｉｎ  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
Ｒｅｓｕｌｔｓ：  
ＲＣＶＩＮＧ＿ＭＳＵ＝０（ＭＳＵ＃０）  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
ｔｈｅ  ｆｉｎａｌ  ｒｅｓｕｌｔｓ（最終結果）：  
ＭＳＵ＿ＡＤＤＲ［２９：０］＝０００００００００Ｈ 
ＭＳＵ＿ＳＥＬ［１：０］＝００（ＭＳＵ＿ＰＡＩＲ０                                                のＭＳＵ＃０）  
第２アドレスの処理  
初期化：  
ＰＲＯＣＥＳＳＯＲ＿ＡＤＤＲ［３５：  ０００００００４０Ｈ 
０］＝  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝０００００００１Ｈ 
ＲＣＶＩＮＧ＿ＰＡＩＲ＝１（ＭＳＵ＿ＰＡＩＲ１）  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
ＲＣＶＩＮＧ＿ＭＳＵ＝０（ＭＳＵ＃２）  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
最終結果：  
ＭＳＵ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
ＭＳＵ＿ＳＥＬ［１：０］＝１０（ＭＳＵ＿ＰＡＩＲ１                                                のＭＳＵ＃２）  
第３のアドレスからは次が得られる  
初期化：  
ＰＲＯＣＥＳＳＯＲ＿ＡＤＤＲ［３５：  ０００００００８０Ｈ 
０］＝  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝０００００００２Ｈ 
ＲＣＶＩＮＧ＿ＰＡＩＲ＝１（ＭＳＵ＿ＰＡＩＲ１）  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝０００００００１Ｈ 
ＲＣＶＩＮＧ＿ＭＳＵ＝０（ＭＳＵ＃２）  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
最終結果：
ＭＳＵ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
ＭＳＵ＿ＳＥＬ［１：０］＝０１（ＭＳＵ＿ＰＡＩＲ０のＭＳＵ＃１）  
以上に対し第４アドレスからは最終結果が得られる  
初期化：  
ＰＲＯＣＥＳＳＯＲ＿ＡＤＤＲ［３５：  ０００００００Ｃ０Ｈ 
０］＝  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝０００００００３Ｈ 
ＲＣＶＩＮＧ＿ＰＡＩＲ＝１（ＭＳＵ＿ＰＡＩＲ１）  
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝０００００００１Ｈ 
ＲＣＶＩＮＧ＿ＭＳＵ＝０（ＭＳＵ＃２）
ＴＥＭＰ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
最終結果：  
ＭＳＵ＿ＡＤＤＲ［２９：０］＝００００００００Ｈ 
ＭＳＵ＿ＳＥＬ［１：０］＝０１（ＭＳＵ＿ＰＡＩＲ１                                                のＭＳＵ＃２）  
図７はこの例の結果を示している。
【０１４５】
本発明の実施形態は、ハードウェア、ソフトウェア、またはその両方の組み合わせで実施できることを理解されたい。このような実施形態では、本発明の機能を実行するために、種々の構成要素およびステップを、ハードウェアおよび／またはソフトウェアで実施してよい。現在使用可能な、あるいは将来開発されるコンピュータ・ソフトウェア言語および／またはハードウェア構成要素を、本発明の上記の実施形態に用いることができる。特に、上記で説明し、上記および以下の付表中に提供する擬似コードは、ソフトウェア実施形態を作成するのに特に有用である。
【０１４６】
Ｃ．ブート時における初期化
例示的実施形態では、処理モジュールおよびメモリ１６０を含むコンピュータ・システム２００のパーティションへの区分は、本発明により、ブート時に実行される。メモリをパーティションに区分化し、マップし、インターリービングをセットアップする例示的プロセスを以下で説明する。これらの初期化操作は、ＭＩＰ高速走査インターフェースを介して、Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ（ＢＩＯＳ）およびＭａｎａｇｅｍｅｎｔ  Ｉｎｔｅｒｆａｃｅ  Ｐｒｏｃｅｓｓｏｒ（ＭＩＰ）によりブート時に実行することができる。ＭＩＰは、管理アプリケーション・プラットフォーム（ＭＡＰ）のハードウェア・インターフェース部分であり、コンピュータ・システム２００の初期化およびエラー回復を実行する。例示的実施形態では、ＭＩＰ高速走査インターフェースはＩＥＥＥ  ＴＡＰ  Ｌｉｎｋｅｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ１１４９．１に準ずる。
【０１４７】
本明細書で使用する用語「パーティション」は、ウインドウの代わりに使用されることがある。本明細書で使用する場合、この２つの用語は同義であり、オペレーティング・システムの１インスタンスによって制御されるシステムの部分を指す。
【０１４８】
ブート時にパーティション区分を達成する方式は、システム・アドミニストレータが決定してＭＡＰ上にあるデータベースに入力することができる。パーティション区分情報は、特定ウインドウに割り当てるべきシステム資源と、ウインドウ内でロードするオペレーティング・システムのタイプと、２つのパーティションが共用メモリを介して通信するかどうかと、また通信する際はどのように通信するかを識別する。図２の例示的実施形態では、パーティションへの区分はサブＰｏｄおよびダイレクトＩ／Ｏブリッジ（ＤＩＢ）の境界上で行われることが好ましい。
【０１４９】
一般に、各オペレーティング・システムは、一定のハードウェア要件を有する。例えば、Ｗｉｎｄｏｗｓ  ＮＴおよびＵｎｉｘｗａｒｅ（Ｓａｎｔａ  Ｃｒｕｚ  Ｏｐｅｒａｔｉｏｎ社から入手可能）などの市販のオープンアーキテクチャのオペレーティング・システムは、ディスク・コントローラ（ＳＣＳＩファイバ・チャンネルなど）、ＶＧＡコントローラ、互換性ＰＣＩボード、互換性周辺装置（ＣＤ−ＲＯＭ、テープ、およびディスク）を必要とする。これらの適切なハードウェアはシステム上になければならず、システムはこれらの要件を確実に満たす方式でパーティションに区分するべきである。このことは、パーティション情報をＭＡＰ上のデータベースに入力する際に考慮に入れすべきである。
【０１５０】
図１３に、例示的初期化プロセスを説明するためにプロセス流れ図を提供する。
【０１５１】
処理はステップ１３１０で開始し、ＭＩＰがＢＩＯＳをメイン・メモリにロードする。
【０１５２】
ステップ１３１２で、ＭＩＰはＢＩＯＳ構成データ・エリアをメイン・メモリ内でロードする。この情報は、構成データベースに記憶されていたものを部分的に反映する。
【０１５３】
ステップ１３１４で、ＭＩＰは、各サブＰｏｄをリセットから１つずつ解放する。サブＰｏｄが調停し、１つのサブＰｏｄがＢＩＯＳサブＰｏｄ（ＢＳＰ）になることが好ましい。ＢＳＰ内では、１つのプロセッサがマスタになり、このプロセッサがＢＩＯＳコードを実行する。本明細書の残りの部分にわたって、ＢＩＯＳを実行するプロセッサはＢＳＰと呼ぶことができる。このＢＳＰは、下記の複数の機能を実行する。
【０１５４】
ステップ１３１６で、ＢＳＰは各ＰＣＵバスを初期化する。ＢＳＰはシステム中の各ＰＣＩバスへのアクセス権を得、これはＢＳＰのサブＰｏｄ内のクロスバー相互接続からＭＳＵに延び、別のサブＰｏｄ上の別のクロスバー相互接続を通じて最終的にインターフェースを通ってＤＩＢに通じる経路を通る。ＢＳＰは、ＭＳＵにアクセスせずに、それ自体のサブＰｏｄと関連付けられたＤＩＢにアクセスすることができる。
【０１５５】
ステップ１３１８で、ＢＳＰは、上記のステップ１３１２でメイン・メモリにロードされた構成データを読み出して、どのＤＩＢがどのパーティションにあるのかを決定する。ＢＳＰは、上記の経路を使用して、各互換性ＤＩＢ内の「パーティション・レジスタ内のＤＩＢ」にパーティションＩＤ（ＰＩＤ）を書き込む。このＰＩＤは、通常のシステム動作中に、メッセージがＤＩＢによって受け取られる際に使用される。メッセージは、ＤＩＢがメッセージと同じＰＩＤを有する場合にのみ処理される。ＰＩＤは、同一のオペレーティング・システムの下で実行されているパーティション中のすべてのユニットが相互に対話することを許可し、また、ＰＩＤは共用メモリを通じてメッセージを送るためにも使用される。
【０１５６】
任意選択のステップ１３２０で、ＢＳＰは、各ＰＣＩカード中のＰＣＩレジスタを読み出すことにより、ハイ・メモリ・ホールおよびロー・メモリ・ホールのサイズを計算して、各ＰＣＩカードに対する入出力およびメモリ要件を決定する。Ｉ／Ｏ空間をメイン・メモリにオーバーレイすることは、Ｉｎｔｅｌ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｏｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎにより、またある市販ＰＣＩカードは６４ギガバイト以上のアドレスを認識できないという事実から必要である。
【０１５７】
ステップ１３２２で、ＢＩＯＳは、各ＰＣＩカードが必要とするメモリ・マップＩ／Ｏ空間の量を、ＭＩＰに知らせる。これは、ＢＩＯＳ−ＭＩＰ間の割込み、および関連するメール・ボックスを介して行われる。この情報はＭＩＰと関連付けられた構成データベース内に含まれているので、ＭＩＰは、メイン・メモリのサイズ、およびオペレーティング・システム間で共用されることになるメモリ量をすでに知っている。したがって、必要な入出力空間量がＭＩＰに知らされると、ＭＩＰはＴｃｌスクリプトを使用して次の情報を計算することができる。
【０１５８】
ａ．ハイ・メモリ・ホールおよびロー・メモリ・ホールの位置  
ｂ．再利用エリアの位置  
ｃ．共用メモリの位置  
Ｔｃｌは、ハードウェア設計者がシミュレーション・スクリプトを書くのに使用する業界標準のシミュレーション言語である。シミュレーション・スクリプトはまた、ハードウェアの初期化を達成するためにＭＩＰにポートされる。
【０１５９】
ステップ１３２４で、ＭＩＰは、上記で計算されたメモリ・アドレスを、構成データベース中に置かれたデータと合わせて使用して、サブＰｏｄ（ＴＣＴ）、クロスバー相互接続（ＴＣＭ）、メモリ記憶装置（ＭＳＵ）内のレジスタを設定する。ＴＣＭを初期化すると、パーティションへの区分、ＤＩＢのためのアドレス変換、ＤＩＢのためのメモリ・アドレス変換レジスタが設定される。これらの定数は、インターリーブ機能およびメモリ再利用に使用することができる。
【０１６０】
例示的実施形態では、各ＤＩＢに１つずつ、少なくとも２つのレジスタ・セットが各ＴＣＭ中にある。これには、範囲レジスタおよびブロードキャスト・レジスタが含まれる。
【０１６１】
ＤＩＢのための範囲レジスタには、パーティション定義に従い、各ＤＩＢのための正当な（legal）メモリ範囲が含まれる。ＴＣＭ内のインターフェースは、パーティション定義に従って、使用可能／使用不可能にされる。
【０１６２】
ＴＣＴ情報レジスタは、特に、パーティションを識別するパーティションＩＤで初期化される。このレジスタは、特定のサブＰｏｄがメッセージに対して動作すべきかを決定するために使用される。このレジスタ内と同じパ−ティションＩＤを持つメッセージは受信されることになる。
【０１６３】
ブロードキャスト・レジスタはパーティションＩＤを含み、パーティションにわたるブロードキャスト・メッセージのために使用される。ブロードキャスト・メッセージには、このレジスタで識別されるパーティションＩＤによりタグがつけられる。
【０１６４】
エージェント・テーブルはパーティションＩＤとともにロードされ、特定ウインドウのプロセッサへの割込みを有効にするために使用される。
【０１６５】
ＤＩＢで、ＰＣＩカード用の範囲レジスタは、各ＰＣＩバスのメモリ・マップされた空間に対するアドレス範囲を含んでいる。パーティションＩＤレジスタは、そのＤＩＢへのメッセージだけが受信されるように、パーティションＩＤを含む。
【０１６６】
ＭＳＵでは、ＭＳＵ＿ＰａｉｒＡ／ＰａｉｒＢ構成レジスタが、ＭＳＵのバンク間のインターリーブを設定する。ＭＩＰは、インターリーブ操作を設定するために、メモリ・アドレス変換レジスタ（表ＥおよびＦ参照）を初期化する。このインターリーブ操作は、初期化の前にユーザーによって指定される。
【０１６７】
ＭＩＰは、ＢＩＯＳから受信されたメモリ・マップＩ／Ｏ空間の長さを使用して、メモリ・マップＩ／Ｏ空間の位置、共用メモリ開始アドレス、再利用開始アドレス、および新しいメモリ・トップを計算する。ＭＩＰは、ＭＩＰとＢＩＯＳ間の割込みおよびメイン・メモリ内の関連するメール・ボックスを使用して、これらの開始アドレスをＢＩＯＳに戻す。ＭＩＰはさらに、ユーザー指定の構成データと合わせてこの情報を使用して、構成レジスタ（上の表Ａ）、変換および再利用レジスタ（上の表Ｄ）を初期化する。これらのレジスタおよびメモリ・アドレス変換レジスタ（上の表ＥおよびＦ）に記憶されている初期化データは、ウインドウイング、再利用、アドレス変換機能を実行するためにアドレス変換論理によって必要とされる。上記のように、これらのレジスタと関連する論理のコピーは各ＴＣＴ２７０内に位置し（プロセッサ２４０からのメモリ要求について）、また各ＴＣＭ２８５中にも位置する（ＤＩＢを介した入出力プロセッサからのメモリ要求について）。ＭＩＰはさらに、各ＤＩＢ、入出力ポート、ＡＰＩＣメモリ・マップ空間、メモリ・アドレス空間のためのメモリ・マップ空間のための有効なアドレス範囲で、プロセッサ用の範囲レジスタを初期化する。
【０１６８】
ＢＩＯＳはこの情報を使用して、各パーティション／オペレーティング・システムのための、メモリ内の構成テーブルをセットアップする。この情報は、共用メモリの位置を各パーティションに通信する。構成テーブルはどのユーザー定義のフォーマットでもよい。例示的実施形態では、Ｉｎｔｅｌ社から入手可能なＭｕｌｔｉＰｒｏｃｅｓｓｏｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎで定義されるＭＰ構成テーブルを使用する。ＭＰ構成テーブル内の「ＯＥＭテーブル・ポインタ」と呼ばれるフィールドは、共用メモリ・エリアの位置および長さを含むユーザー定義のエリアをポイントするのに使用される。ＵｎｉｘｗａｒｅおよびＮＴドライバは、メモリ割り当ての目的と、待ち行列位置を決定する目的でこの情報を使用する。
【０１６９】
ＢＩＯＳはさらに、選択されたプロセッサ内でレジスタをセットアップする。ＭＩＰはこのレジスタへのアクセス権を持っていないので、ＢＩＯＳはこのレジスタをセットアップする。例示的実施形態では、これはＩｎｔｅｌプロセッサのために行われ、例えばオペレーティング・システムに通信する各プロセッサ内のトップ・オブ・メモリ・レジスタ（top of memory register - ＴＯＭＲ）に、メモリ・トップがどこにあるかを示すために、各プロセッサ中でレジスタを書き込むことが伴う。オペレーティング・システムは、ＴＯＭＲ値以上のメモリへのアクセスを試みることは許可されない。
【０１７０】
レジスタにはまた、どのタイプのメモリが種々のメモリ範囲（例えばマップされたＩ／Ｏ、ＡＰＩＣ割込み空間、メイン・メモリなど）内に存在するかをプロセッサに通信するメモリタイプ範囲レジスタ（memory type range register - ＭＴＲＲ）も含むことができる。ＭＴＲＲは、どのようにメモリ・アクセスを処理するかをプロセッサに伝えるのに使用される。例えば、メモリ・マップＩ／Ｏ空間に指定されるメモリ範囲へのプロセッサ読み出し操作は、プロセッサのキャッシュには入れられない。オペレーティング・システムのインスタンスを実行しているプロセッサは、同じ値をその各ＭＴＲＲにロードすべきである。
【０１７１】
ステップ１３２６で、任意の追加初期化機能を実行した後、ＢＩＯＳは、各オペレーティング・システムのブートセクタを、構成データベース内の情報によって決定されたメモリ内の適切な位置に読み込む。
【０１７２】
ステップ１３２８で、ＢＩＯＳは、各パーティション内のプロセッサの１つに割込みを発行し、これらのプロセッサは、指定された入出力装置から関連するオペレーティング・システムをロードし始める。これが完了すると、オペレーティング・システムは、そのウインドウ内の資源の制御を引き受ける。これにより、ＢＩＯＳによるオペレーティング・システムの遷移および処理が完了する。
【０１７３】
ＩＩＩ．グローバル共用メモリを管理するための方法（パーティション間通信）
前述のグローバル共用メモリ手法は、各パーティションごとの専用メモリ空間を提供することができ、それに加えて、パーティションのすべてがアクセスすることのできる共用メモリ領域を提供することができる。共用メモリ領域は１つまたは複数の読み出し専用領域を含むことができる。パーティションは、そのパーティション上で動作しているオペレーティング・システムおよび他のクライアントを含め、この共用メモリを介して互いに通信を行うことができる。
【０１７４】
この共用メモリは、例えば、パーティション上で動作するオペレーティング・システムの一部によって、またはパーティション上に常駐することが可能な他のソフトウェアおよび／またはハードウェアによって管理され得る。共用メモリ領域は、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．から市販されるＷｉｎｄｏｗｓ  ＮＴ、Ｔｈｅ  Ｓａｎｔａ  Ｃｒｕｚ  Ｏｐｅｒａｔｉｏｎ  Ｉｎｃ．（ＳＣＯ）から市販されるＵＮＩＸＷＡＲＥ、Ｕｎｉｓｙｓ  Ｃｏｒｐ．から市販される、Ａ―Ｓｅｒｉｅｓファミリーのコンピュータ・システムに取って代るＵＮＩＳＹＳ  Ｃｌｅａｒｐａｔｈ  ＨＭＰ  ＮＸコンピュータ・システムに対して適合されたオペレーティング・システムであり、やはりＵｎｉｓｙｓ  Ｃｏｒｐ．から市販されるＭａｓｔｅｒ  Ｃｏｎｔｒｏｌ  Ｐｒｏｇｒａｍ（ＭＣＰ）、またはＵＮＩＳＹＳ  Ｃｌｅａｒｐａｔｈ  ＨＭＰ  ＩＸコンピュータ・システムに対して適合されたオペレーティング・システムであるＯＳ２２００を含むが、それらには限定されない様々なオペレーティング・システムによって管理され得る。
【０１７５】
本発明により共用メモリ領域を管理するための代替の実施形態を下記に説明する。実施形態は、本明細書では、例示の目的で記載しており、制限するためにではない。他の実施形態（本明細書に記載する実施形態の等価形態、変形形態、偏倚形態などを含む）は、本明細書に含まれる教示に基づいて、関連分野の技術者には明白となる。本発明は、そうした代替の実施形態を含むことを意図し、そのように適合されている。
【０１７６】
Ａ．パーティション間通信のためのポーリング
一実施形態では、コンピュータ・システム上で、それ独自のパーティション（例えば、１つまたは複数のＰｏｄまたはサブＰｏｄ）内で動作している各オペレーティング・システムには、共用メモリ１６０の一部分が関連付けられている、または割り振られている。オペレーティング・システムは、共用メモリのそれが関連する部分に書き込み、またそこから読み取ることができるが、他のオペレーティング・システムと関連するメモリの部分に書き込むことはできない。ただし、すべてのオペレーティング・システムは、共用メモリ全体から読み取ることができる。
【０１７７】
好ましくは、各パーティションまたはオペレーティング・システムには、そのパーティションまたはそのオペレーティング・システムに専用の排他メモリ・ウインドウ（これ以降、時として、その「ローカル・モリ空間」とも呼ぶ）が割り当てられる。オペレーティング・システムまたはそのオペレーティング・システムと関連するアプリケーションが、メッセージを別のオペレーティング・システムまたはそのオペレーティング・システムに関連するアプリケーションに送信するとき、この送信するエンティティは、そのメッセージが、ネットワークを介して転送されるように作成されたとすれば、行われたであろう方式と同じ方式で、そのローカル・メモリ空間内のバッファにメッセージを作成する。送信するエンティティは、次に、このメッセージの一部分またはすべてを共用メモリ１６０のその割り振られた部分にコピーする。
【０１７８】
共用メイン・メモリ１６０の送信するオペレーティング・システムの関連部分から読み取ることはできるが、そこに書き込むことのできない目標パーティション／オペレーティング・システムは、新しいメッセージが入手可能であることを検出して、そのメッセージを共用メイン・メモリからその独自のローカル・メモリ（その排他メモリ・ウインドウ）内にコピーする。
【０１７９】
例としての実施形態では、オペレーティング・システムのためのコードおよびほとんどのデータ構造は、そのオペレーティング・システムのためのローカル・メモリ空間内に常駐する。いくつかの新しいデータ構造は、好ましくは、共用メモリ１６０内に常駐する。
【０１８０】
例としての実施形態では、２つのタイプのデータ構造を使用して、パーティション間またはオペレーティング・システム間の通信を円滑にする。第１タイプは、メッセージ・データを格納するメッセージ記憶構造を含み、この構造は、出力メッセージ・バッファに組み込まれている。第２タイプは、メッセージ待ち行列領域内に記憶される待ち行列構造を含み、この構造は、関連する出力メッセージ・バッファ内に記憶されたメッセージ・データに対するポインタを含む。好ましくは、これら２つのタイプのデータ構造は、共用メイン・メモリ１６０内に記憶して、他方、様々なオペレーティング・システムおよび関連するアプリケーション・プログラムによって利用される他のコードおよび他のデータ構造は、関連するローカル・メモリ空間内に常駐する。これはシステム保全性を保護する。
【０１８１】
図１４は、出力メッセージ・バッファ・プール領域１４０２およびメッセージ待ち行列領域１４１４を含んだ、共用メモリ１６０の部分を図示している。一般的に、出力メッセージ・バッファ・プール領域１４０２は、各パーティションと関連付けられている。メッセージが同報通信されたとき、バッファ１４１０が、メッセージに対して割り振られ、そこに１つまたは複数の待ち行列エンティティがポイントする。
【０１８２】
一般的に、すべてのパーティションが、すべての出力メッセージ・バッファ・プール領域１４０２に対する読み取りアクセスを有する。しかし、各パーティションは、その関連する出力メッセージ・バッファ・プール領域１４０２内のバッファ１４１０にのみ、書き込みアクセスを有する。
【０１８３】
メッセージ待ち行列領域１４１４は、そのそれぞれが異なるパーティション専用であるｎ個のノード出力待ち行列１４１２に分割されている。すべてのパーティションは、メッセージ待ち行列領域１４１４全体に対する読み取りアクセスを有するが、パーティションは、その関連するノード出力待ち行列１４１２のみを変更することができる。このアクセス制御は、ハードウェア内で実施することができ、ハードウェアロックを不必要にして、これにより、回復オペレーションおよび点検オペレーションを単純化する。
【０１８４】
図１５Ａは、８個のノード出力待ち行列１４１２を有するメッセージ待ち行列領域１４１４の例としての実施形態を図示している。ノード出力待ち行列１４１２ａは、各パーティションごとのノード間待ち行列１５１０を含んでいるのが図示されている。本明細書で使用する「ノード」という用語は、「パーティション」という用語と等価である。
【０１８５】
図１６Ａおよび１６Ｂは、ノード出力待ち行列１４１２内に含まれる例としての情報を図示している。例としてのノード出力待ち行列１４１２の最初の１６ワードは、関連するノードについての制御情報を含み、この情報は、後述するとおり、ノード・オペレーティング・システム・タイプ（Ｎｏｄｅ＿ＯＳ＿ＩＤ）１６１０、ノード・メディア・アクセス制御（ＭＡＣ）アドレス１６１２、および回復中に使用する様々なリセット・フラグ（例えば、Ｒｅｓｅｔ＿ＯＫ）を含む。
【０１８６】
制御情報は、そのそれぞれがオフセットをそれぞれの異なるノードのノード出力待ち行列に格納する８つのＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔフィールドをさらに含み、下記に説明するとおり、どれが、それぞれの異なるノードから受信すべき新しいメッセージであるかを示す。
【０１８７】
図１６Ａおよび１６Ｂの例としての実施形態では、ノード間待ち行列１５１０が、制御情報の最初の１６ワードに続く。各ノード間待ち行列１５１０は、メッセージを指定の異なるノードに送信するために、関連するオペレーティング・システムによって使用される。例えば、ノード０−ノード１間待ち行列１５１０ａは、メッセージをノード１に送信するために、ノード０によって使用される。単純にするため、ノード間待ち行列１５１０は、各ノードごとに、それ自体にメッセージを送信するために提供することができる。
【０１８８】
図１６Ａおよび１６Ｂでは、各ノード間待ち行列１５１０内の第１ワードが、「Ｎｅｅｄ＿Ｒｅｓｅｔ」フラグおよび「Ｅｎｑｕｅｕｅ＿ｏｆｆｓｅｔ」を含んだ制御情報を含む。Ｎｅｅｄ＿Ｒｅｓｅｔは、送信するノードが、ノード間待ち行列のうちの１つをリセットしようとするとき、Ｒｅｓｅｔ＿ＯＫフラグのうちの選択した１つと併せて使用する。「Ｅｎｑｕｅｕｅ＿ｏｆｆｓｅｔ」は、例えば、１と５１１の間の数を含み、それぞれのノード間待ち行列１５１０内での次に利用可能なエントリにポイントするのに使用する。ノード間待ち行列１５１０の残りのワード（例えば、５１１ワード）のそれぞれは、関連する出力メッセージ・バッファ１４１０内の関連するメッセージ・データ構造１４１６にポイントするオフセット・ポインタを含む。
【０１８９】
好ましい実施形態では、このオフセットは、それぞれのノードの出力メッセージ・バッファ１４１０の開始からの６４ビット・ワードの数である。ポインタは、実アドレスまたは仮想アドレスからではなく、なんらかのベース・アドレスからのオフセットでなければならない。ポインタは、仮想アドレスに基づくものであってはならない。というのは、ノードが異種ノードであるとき、それらが、共通仮想アドレス変換を有さない可能性があるからである。ポインタは、実アドレスに基づくものであってはならない。というのは、前述のアドレス変換方式の結果、１つのノードによって使用される実アドレスは、一般的に、別のアドレスによって使用される実アドレスと一致しないからである。
【０１９０】
例としての実施形態では、ポインタは、各ノードまたは各オペレーティング・システムが、ノード初期設定中に、前述の管理アプリケーション・プラットフォーム（ＭＡＰ）から受信した情報から計算することのできるアドレスからのオフセットである。
【０１９１】
ノード出力待ち行列１４１２内の８つのノード間待ち行列１５１０のそれぞれは、例えば、図１６Ａおよび１６Ｂに図示するとおり、５１２ワード長であることが可能であり、各ノード出力待ち行列１４１２が、１６＋８（５１２）ワード長になるようになっている。
【０１９２】
この待ち行列の深さは、メッセージを共用メモリに転送するのに利用可能となったとき、関連する待ち行列がいっぱいにならないのを確実にすることを助ける。待ち行列の深さは、初期設定中に、マネージャ・アプリケーション・プラットフォーム（ＭＡＰ）によって指定され得る。前述のとおり、ＭＡＰは、コンピュータ・システム２００に対する初期設定およびエラー回復を実行するためのサポートシステムである。
【０１９３】
柔軟性を追加するため、ＭＡＰは、初期設定時に待ち行列容量を示すように設計することができる。このデータは、構成テーブルのそれぞれへのエントリとして追加することができ、このテーブルは、システム内の各オペレーティング・システム・インスタンスごとに、ＭＡＰによって提供されて、それぞれのオペレーティング・システムに共用メイン・メモリの場所などの必要なシステム・パラメータを知らせるデータ構造である。
【０１９４】
図１７は、メッセージ・データ構造１４１６の例としての実施形態を図示している。各メッセージ・データ構造１４１６は、好ましくは、０のオフセットで関連する出力メッセージ・バッファ１４１０内に配置され、ヘッダ領域１７１０およびメッセージ・データ領域１７１２を含む。ヘッダ領域１７１０は、ワード０〜ｎを占有することが図示されており、バッファ長、ヘッダ長、およびカウント情報を含む。カウント情報は、好ましくは、２２００オペレーティング・システム（すなわち、Ｕｎｉｓｙｓ  Ｃｏｒｐｏｒａｔｉｏｎから市販される２２００型プロセッサに対して適合されたオペレーティング・システム）によってメッセージを書き込むために含まれる。というのは、２２００オペレーティング・システムによってメモリに書き込まれたメッセージは、連続するメモリ・ロケーションを占有しないからである。２２００オペレーティング・システムを実行するノードが、共用メモリ内にメッセージ・データを記録するとき、各６４ビット・メイン・メモリ・ワードは、せいぜい３２ビットのデータを格納するに過ぎず、これは、各６４ビット・メイン・メモリ・ワードの最下位ビットに配置されることになる。いくつかのワードは、メッセージがワード境界で開始または終了しない場合、より少ないビットを格納する可能性がある。したがって、第１バイト・スキップ・カウントが、プロトコル・ヘッダとメッセージ・データ間でスキップされるべきバイト数を示す。バイト転送カウントは、関連する有効メッセージ・フィールドのバイト長を示す。バイト・スキップ・カウントとバイト転送カウントの合計は、（バッファ長−ヘッダ長）＊４に等しいか、それより少なくなければならない。
【０１９５】
イーサネット環境では、最大メッセージ・セグメント・サイズは、メッセージに対して１５００バイト・ワード、つまり３７５６４ビットワードである。一実施形態では、本発明は、ネットワーク入力／出力処理アーキテクチャ（ＮＩＯＰ）を含み、これは、米国特許第５６５９７９４に記載され、Ｕｎｉｓｙｓに譲渡された、Ｕｎｉｓｙｓ  Ｃｏｒｐｏｒａｔｉｏｎによって開発されたメッセージ・ハンドラであり、これは、５０の別々のデータストリームを１つのメッセージ・セグメントに結合して、ネットワークを介して送信することを可能にする。したがって、４２７ワードの出力メッセージ・バッファ・サイズは、２２００オペレーティング・システムが、イーサネットＬＡＮ環境の場合と同じように、本発明の共用メモリ環境で機能し続けることを可能にすることになる。５１１の待ち行列の深さおよび４２７ワードのバッファ・サイズを所与として、（５１１＊４２７＊８）／／４０９６＝１７４８９９２ワードのノード・バッファ・プール・サイズである。したがって、共用メモリ環境当たり必要な合計共用メモリは、（６５５３６＋１７４８９９２＊８）／／４０９６＝１４０５７４７２ワードである。
【０１９６】
これらのデータ構造の使用は、例によって説明することができる。第１オペレーティング・システムＯＳ１が、第２オペレーティング・システムＯＳ２にメッセージを送信しようとしていると想定する。ＯＳ１−ＯＳ２間ノード出力待ち行列１４１２は、いっぱいになっていないとさらに想定して、ＯＳ１は、ＯＳ１出力メッセージ・バッファ領域１４１０ａ内の利用可能なメッセージ・データ構造（すなわち、バッファ）１４１６ａを得る。バッファ１４１０ａは上述のとおり、好ましくは、アドレス・オフセット・ポインタによって識別される。ＯＳ１は、そのメッセージに対するプロトコル・ヘッダ１７１０を作成して、このヘッダ１７１０およびメッセージ１７１２をＯＳ２のローカル・メイン・ストーレッジからこの利用可能なメッセージ・バッファ１４１６ａに転送する。次に、ＯＳ１は、ＯＳ１−ＯＳ２間待ち行列１５１０ａ内のＥｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔの内容を増分して、ＯＳ１−ＯＳ２間待ち行列１５１０ａ内の次に利用可能なエントリにポイントする。ＯＳ１は、メッセージ・データ構造（すなわち、バッファ）１４１６ａにポイントするオフセット・ポインタをこの次の利用可能なエントリにコピーする。好ましい実施形態では、Ｅｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔは、巡回待ち行列として維持される。
【０１９７】
ＯＳ２は、メッセージがＯＳ１から入手可能であるかを決定するためにポーリングする。これは、ＯＳ２のノード出力待ち行列１４１２ａの制御領域内に記憶されているＯＳ２に関する適切なＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔの内容を、ＯＳ１のノード出力待ち行列１４１２ｂのＯＳ１−ＯＳ２間出力待ち行列内に記憶されている適切なＥｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔに比較することによって行われる。好ましい実施形態では、Ｄｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔは、巡回待ち行列として維持される。
【０１９８】
８つのＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔ（例としての実施形態では）のそれぞれは、ノードのノード出力待ち行列１４１２のうちの対応する送信する待ち行列内のエントリにポイントする１と５１１の間の値を格納する。例えば、ＯＳ２の出力待ち行列のワード８内に記憶されているＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔは、ＯＳ１のノード出力待ち行列１４１２ａ内の「ノード０−ノード１間待ち行列」にポイントするオフセット値を格納する。同様に、ＯＳ２のノード出力待ち行列１４１２のワード１５内に記憶されているＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔは、「ノード７−ノード１間待ち行列」にポイントするオフセット値を格納する。前述のとおり、データ構造は、ノード出力待ち行列１４１２、および各ノードまたは各オペレーティング・システムが、それ自体にメッセージを送信することを可能にする、関連するＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔ、例えば、ＯＳ１−ＯＳ１間ノード出力待ち行列を含む。
【０１９９】
現行の例では、ＯＳ２ノード出力待ち行列１４１２のワード８内のＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔフィールドが、ＯＳ１−ＯＳ２間待ち行列内のＥｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔフィールドに比較される。この２つのオフセット・エントリが同じである場合、その待ち行列は、空である。Ｅｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔがＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔとは異なる場合、１つまたは複数のエントリが、ＯＳ１−ＯＳ２待ち行列上に存在する。
【０２００】
ＯＳ１は、メッセージが入手可能であると決定した場合、Ｄｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔの内容を使用して、そのメッセージをリトリーブして、次に、Ｄｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔを増分する。メッセージ・オフセット・ポインタを使用してメッセージをリトリーブして、それをローカル・ストーレッジ内に格納する。
【０２０１】
送信するノードまたは送信するオペレーティング・システムは、前述のポーリング機構と同様の機構を使用して、エントリを適切な待ち行列に追加するのに先立って、待ち行列がいっぱいであるかどうかを決定することができる。つまり、受信側待ち行列内のＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔが、送信するノードの出力待ち行列内の適切なＥｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔに比較される。Ｅｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔの内容が、Ｄｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔの内容と同じである場合、その待ち行列は、いっぱいになっており、その時点で何もメッセージを追加することができない。Ｅｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔおよびＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔは、すべてのオペレーティング・システムが、他のすべてのオペレーティング・システムの待ち行列領域を読み取ることができるが、オペレーティング・システムは、それ独自の待ち行列領域のみを変更することができるという想定に適合する。
【０２０２】
仮想メモリ・システム内では、コードおよび／またはデータ構造は、メイン・メモリから大容量ストーレッジに、そのメイン・メモリ内に追加の空間を作るというオペレーティング・システムの指示の下で、転送または「ページ送り」され得る。本発明の例としての実施形態では、ページ送りは、ローカル・メモリ領域内に記憶されているコードおよび／データに対して許されるが、共用メモリ１６０内に常駐するデータ構造に対しては許されない。この制約は、共用メモリ空間１６０を使用するオペレーティング・システムが、共用メモリ空間１６０内に記憶されているデータ構造の場所と内容について、前提を有することを可能にする。
【０２０３】
例としての実施形態では、２２００オペレーティング・システム・アプリケーションが、Ｉｎｔｅｌベースのアプリケーション（例えば、Ｉｎｔｅｌプラットフォーム上でＷｉｎｄｏｗｓ  ＮＴのために書かれたアプリケーション）と通信を行い、そこでは、唯一の実質的なオペレーティング・システムの関与は、共用メモリを管理すること（例えば、メッセージ待ち行列の初期設定を要求すること）だけである。この例としての実施形態では、２２００オペレーティング・システムは、Ｉｎｔｅｌノードのためにサービスを要求する、またはサービスを実行することをしない。代わりに、サービスは、アプリケーション間要求を介して実行される。関連分野の技術者は、２２００オペレーティング・システムを、別法として、直接にＩｎｔｅｌノードのサービスを要求するように変更するのが可能であることを理解されよう。
【０２０４】
例としての実施形態では、グローバル共用メモリ機構は、２２００オペレーティング・システム・アプリケーション・プログラムとＮＴアプリケーション・プログラムおよび／またはＵｎｉｘアプリケーション・プログラムとの間で通信を行うことを可能にする。これは、ＭＣＰオペレーティング・プログラムの下で動作するアプリケーションとＮＴオペレーティング・システムおよび／またはＵｎｉｘオペレーティングとの間での通信を円滑にするのにも使用することができ、またオペレーティング・システム間の通信のためにも使用することができる。同様に、これは、ＮＴオペレーティング・システムの関連する異なるインスタンスの下で動作するアプリケーション間の通信を円滑にするのに、また、Ｕｎｉｘオペレーティング・システムの関連する異なるインスタンスの下で動作するアプリケーション間の通信のために使用することができる。共用メモリ機構は、２２００オペレーティング・システムとＭＣＰオペレーティング・システムの間の通信を円滑にするのに使用することができる。
【０２０５】
例としての実施形態では、共用メイン・メモリに書き込まれたメッセージは、通常、ＡＳＣＩＩ文字であるが、１バイト、２バイト、または４バイトの正の整数などの正の整数およびビット情報も含み得る。２２００オペレーティング・システムは、３６ビットワード上で動作して、ＡＳＣＩＩ文字を９ビット・バイト内の８ビットとして表す。Ｉｎｔｅｌプラットフォームは、ＩＡ３２アーキテクチャまたはＩＡ６４アーキテクチャを使用して、それぞれ、３２ビット・ワードまたは６４ビット・ワード上で動作して、ＡＳＣＩＩ文字を８ビット・バイト内の８ビットとして表す。したがって、共用メモリに書き込まれた、またはそこから読み取られたデータは、変換処理を受けなければならない。この変換は、２２００オペレーティング・システム・ハードウェア命令によって実行され得る。２２００型プロセッサは、ブロック転送圧縮（Ｂｌｏｃｋ  Ｔｒａｎｓｆｅｒ  Ｐａｃｋ）（ＢＴＰ）命令を使用して、ＡＳＣＩＩデータを９ビットから８ビット・バイトに圧縮して、メイン・メモリの６４ビットワード内の最上位の３２ビットをゼロ充填する。
【０２０６】
通常、Ｉｎｔｅｌプラットフォーム上で動作するアプリケーションは、メッセージ・データが連続するバイト内に含まれることを予期する。２２００オペレーティング・システムのブロック転送圧縮（ＢＴＰ）命令は、メッセージ・データを共用メモリ内の連続するバイト内に入力しない（ワード内の４バイトが、通常、使用されない）ので、Ｉｎｔｅｌプラットフォーム上で動作するデバイス・ドライバは、メッセージを処理できるようにするには、まず、そのメッセージ・データをローカル・メイン・メモリ内の連続するバイト内に移動しなければならない。同様に、２２００型プロセッサは、メッセージを受信したとき、ブロック転送圧縮解除（Ｂｌｏｃｋ  Ｔｒａｎｓｆｅｒ  Ｕｎｐａｃｋ）（ＢＴＵ）命令を使用して、共用メイン・メモリからＡＳＣＩＩデータを圧縮解除して、それを関連するローカル・メモリ内に移動する。ブロック転送圧縮命令およびブロック転送圧縮解除命令は、また、ビッグ・エンディアン（ｂｉｇ−ｅｎｄｉａｎ）／リトル・エンディアン（ｌｉｔｔｌｅ−ｅｎｄｉａｎ）変換も実行する。２２００―Ｉｎｔｅｌ間メッセージ、Ｉｎｔｅｌ−２２００間メッセージ、およびＩｎｔｅｌ−Ｉｎｔｅｌ間メッセージに関する、共用メモリ４１４への、またそこからのデータ移動の例を下記に提供する。
【０２０７】
好ましくは、グローバル共用メモリ通信機構は、システム上で動作するソフトウェアには、できる限りトランスペアレントにして、ソフトウェア変更が最小限に抑えられ、またシステムが、様々なオープン・システム規格とできる限り互換性を有するようにする。例えば、本発明の一態様によれば、システムは、あたかもワイヤによる通信が維持されているかのように、ソフトウェアの上層から現れるようにすることができる（下記のセクションＩＶ．Ｂ．を参照）。例としての実施形態では、システムは、イーサネット・プロトコルを使用する。関連分野の技術者は、ＡＴＭプロトコルなどの他のプロトコルを使用できることを理解されよう。
【０２０８】
ＮＴ／ＵＮＩＸノードの場合、共用メモリ・インターフェースは、好ましくは、ＮＩＣデバイス・ドライバ内で可視であり、このドライバは、オープン規格相互接続（ＯＳＩ）通信モデルのＬＬＣ／ＭＡＣレベルに存在する。ＬＬＣ／ＭＡＣは、ＯＳＩレベル２通信モデルの２つの副層である。ＬＬＣは、層２と層３の間のインターフェースであり得る。ＭＡＣは、イーサネット、トークンリング、トークンバスなどの様々なＬＡＮを扱うＩＥＥＥ副層である。
【０２０９】
２２００オペレーティング・システムでは、この可視性は、また、ＬＬＣ／ＭＡＣレベルでも起きる。この設計上の選択は、また、他のパーティションがワイヤによる通信を維持する一方で、いくつかのパーティションが共用メモリを介して通信するのを容易にもする。この２つのタイプの通信は、ソフトウェアの上層からは同一であると見られる。
【０２１０】
イーサネット・プロトコルは、伝送当たり１５００バイトの制限を課すので、大きなメッセージは、いくつかのセグメントに分割して、複数のメッセージ転送オペレーション中に転送しなければならない。
【０２１１】
イーサネットは、１回の伝送でのデータの量に対して、１５００バイトの制限を有する。したがって、イーサネット接続が、共用メモリで置き換えられた場合、１５００バイトが、別のノードに対する出力のために待ち行列に入れられるバッファ内にどれだけのデータを入れることができるかに対する制限となる。すべての通信プロトコルの場合と同様に、任意サイズのメッセージを送信することができるが、それは、いくつかの別々の伝送（バッファ）で送信しなければならない可能性がある。
【０２１２】
２２００型プロセッサは、前述のブロック転送圧縮命令を使用して、メッセージ・データを共用メモリ内に転送することができる。
【０２１３】
Ｂ．割込み主導共用メモリ通信（Interrupt Driven Shared Memory Communication）
割込み主導共用メモリ管理の実施を、代替実施形態として、次に説明する。これには、この代替実施形態により、どのように共用メモリ領域、または区域にアクセスし、またこれを管理するかの説明も含まれる。この実施形態では、共用メモリ・ウインドウの管理は、各パーティション上に常駐するコア・サービス・ソフトウェアとして実現されたプログラム・コードによって実行される。各パーティション上のコア・サービス・ソフトウェアは、アプリケーション・プログラム・インターフェース（ＡＰＩ）を提供し、これは、そのパーティション内で動作するクライアントが呼び出して、ある共用メモリ・サービスを要求することができ、これは、例えば、別のパーティション上のクライアントとの、共用メモリ・ウインドウを介する通信などである。本明細書および請求項で使用する「クライアント」は、オペレーティング・システム、デバイス・ドライバ、アプリケーション・プログラム、または共用メモリ・ウインドウの使用を必要とする、パーティション上で動作する任意の他のソフトウェア・コードまたはプログラム・コードであり得る。また、本明細書および請求項で使用する「通信」という用語は、信号（後述する）、データの形式でのメッセージ（これは、共用メモリ・ウインドウ内で割り振られたバッファ内に記憶されることも、記憶されないこともあり得る）、または任意の目的で、パーティション間で通信される任意の他の形式の情報またはデータを意味することが可能である。ポーリング技法を使用して、通信がパーティション間で転送されるかどうかを決定する前の実施形態の場合とは異なり、この実施形態は、下記により十分に説明するとおり、プロセッサ間割込み機構を使用して、パーティション間の通信を行う。
【０２１４】
前の実施形態の場合と同様に、この実施形態は、異なるオペレーティング・システム（例えば、Ｕｎｉｓｙｓ  ＭＣＰ、Ｕｎｉｓｙｓ  ＯＳ２２００、Ｗｉｎｄｏｗｓ  ＮＴ、Ｕｎｉｘなど）の制御下で動作するパーティション間、または同一オペレーティング・システムの異なるインスタンスの制御下で動作するパーティション間の通信を円滑にするのに使用することができる。
【０２１５】
１．共用メモリ・レイアウト
図１９は、この代替の実施形態による共用メモリ・ウインドウのレイアウトを図示している。示すとおり、制御構造１９００は、共用メモリ・ウインドウのベースに常駐して、それに共用メモリ・ウインドウの残りの部分１９１６が続き、これは、別々のページに分割されている。本実施形態では、各ページは、４Ｋバイトを含む。ただし、このサイズは、他の実施形態では異なり得る。各ページは、使用中、使用可能、使用不可であり得る。後述のとおり、クライアントは、例えば、バッファを定義するために、共用メモリ・ウインドウの一部分がそれに割り振られることを要求することができ、コア・サービス・ソフトウェアが、必要な数のページを割り振って、その要求を満たす。
【０２１６】
共用メモリ制御構造１９００は、ヘッダ１９１０と、割り振り構造（Allocation structure）１９１２と、関連するヘッダ１９１４を有する複数のパーティション入力待ち行列とを含む。制御構造内の情報は、専用である。この情報への直接アクセスは、コア・サービス・ソフトウェアのクライアントには提供されない。代わりに、コア・サービス・ソフトウェアＡＰＩは、クライアント関連情報をクライアントに、手続きパラメータを介して戻すコールを提供する。本実施形態では、制御構造内のワードは、６４ビットを含み、そこでの上位３２ビットは、異なるプロセッサ・アーキテクチャによって使用される異なるサイズのワードを考慮に入れて、０である。
【０２１７】
２．空きページ・リスト
本実施形態では、使用可能な共用メモリ・ページ、すなわち既に使用中ではないものを追跡するために、使用可能ページは、各ページの第１ワード内のポインタを介してリンクされて、使用可能ページのリンク済みリストを形成する。使用可能ページのリンク済みリストは、本明細書では、空きページ・リストと呼ぶ。制御構造１９００が、リンクされるリストの第１ページ（すなわち、空きページ・リストの始め）に対するポインタを提供する。
【０２１８】
３．クライアント・ディレクトリ・テーブル
コア・サービス・ソフトウェアが、共用メモリ・ウインドウの１つまたは複数のページを割り振って、クライアント・ディレクトリ・テーブル（図示せず）を格納する。クライアント・ディレクトリ・テーブルは、共用メモリ・ウインドウを使用している各パーティション上のクライアントの登録である。より詳細には、本実施形態では、任意のパーティション上のコア・サービス・ソフトウェアの各クライアントが、コア・サービス・ソフトウェアにクライアント・グループのメンバとして登録しなければならない。同一パーティション上の２つのクライアントが、同一クライアント・グループのメンバであることはできない。コア・サービス・ソフトウェアの複数のクライアントが存在する場合、それぞれが、異なるクライアント・グループのメンバとして登録しなければならない。各クライアント・グループは、関連する名前（クライアント・グループ名）および識別子（クライアント・グループＩＤ）を有する。クライアント・ディレクトリ・テーブルは、クライアント・グループ名を指定する各クライアント・グループごとのエントリを含み、そのグループのメンバとして登録されたクライアントを有する各パーティションをリストする。クライアントが、コア・サービス・ソフトウェアに特定のクライアント・グループのメンバとして登録したとき、コア・サービス・ソフトウェアは、クライアント・グループＩＤをそのクライアントに戻す。このクライアント・グループＩＤは、後述のとおり、メッセージが、共用メモリ・ウインドウを介して渡されたとき、送信するクライアントおよび受信するクライアントを識別するのに使用する。
【０２１９】
４．共用メモリ・ページ・タイプ
コア・サービス・ソフトウェアは、それ自体の使用ため、あるいは共用メモリのいくらかの部分を割り振るクライアント要求のために、共用メモリの１つまたは複数のページを割り振ることができる。本実施形態では、４つの異なるページ・タイプを定義する。
【０２２０】
ａ．タイプ１メモリ・ページ
本実施形態のタイプ１メモリ・ページは、パーティション上のコア・サービス・ソフトウェアによる使用のためのみに割り振ることができる。クライアントがタイプ１ページの割り振りを要求するのを可能にするインターフェースは、存在しない。一例として、前述のクライアント・ディレクトリ・テーブルは、コア・サービス・ソフトウェアによって割り振られた１つまたは複数のタイプ１ページ内に記憶される。コア・サービス・ソフトウェアが、タイプ１メモリ・ページを割り振ったとき、コア・サービス・ヘッダが、そのページの始めに作成される。図３２Ａは、本実施形態による、タイプ１ページに対するコア・サービス・ヘッダの内容を図示している。
【０２２１】
第１フィールド（パーティション所有権マスク）は、どのパーティションが、そのページに対するアクセス権を有するかの指示を格納するのに使用する。詳細には、パーティション所有権マスクは、コンピュータ・システム内でそれぞれの可能なパーティションごとに１ビットの、８ビットを含む。そのページに対する所有権を有する各パーティションは、その対応するビットをパーティション所有権マスクセット内に有することになる。クライアント・ディレクトリ・テーブルの場合、例えば、このテーブルにアクセスを要求する各パーティションは、このテーブルのすべてまたは一部を含んだ各ページ内で、パーティション所有権マスクのそのビットを有することになる。
【０２２２】
本実施形態では、クライアントがタイプ１ページの割り振りを要求するのを可能にするインターフェースは存在しないが、クライアントがタイプ１ページを要求するのを可能にする、望まれ得るさらなる実施形態に対応すると、タイプ１ページ内のコア・サービス・ヘッダは、クライアント・グループＩＤフィールドをさらに含むことになる。このＩＤフィールドは、そのページに対する所有権を有するクライアントのクライアント・グループＩＤを保持するのに使用されることになる。ただし、本実施形態では、このフィールドは、使用しない。
【０２２３】
ＤｅａｌｌｏｃａｔｉｏｎＬｏｃｋフィールドは、ページの所有権の変更を調整するのに使用する。このフィールドは、コア・サービス・ソフトウェアを介して実施される、本発明のより広いロック機構の一部であり、この機構は、異なるパーティションが、必要に応じて、共用メモリ・ウインドウの様々な構造、ページ、およびテーブルに対するアクセスを整合性のある方式でロックするのを可能にして、一度に１つのパーティションだけが、任意の構造、ページ、またはテーブルを変更できることを確実にする（すなわち、これらの構造に対するアクセスを同期化するため）。
【０２２４】
ＤｅａｌｌｏｃａｔｉｏｎＬｏｃｋフィールド、ならびに後述する他のすべてのロック・フィールドは、ワード０およびワード１と呼ばれる、２つの６４ビット・ワードから成る。ワード０は、ロック・ステータス・ワードを定義し、ワード１は、所有者ワードを定義する。ワード０の下位ビットは、「使用中」ビットを定義する。このビットを設定することは、ロック済みステータスを示す。ワード１は、ロックを獲得するパーティションのパーティションＩＤを格納するのに使用して、そのロックの所有者を判定できるようにする。
【０２２５】
ほとんどのオペレーティング・システムおよびそれらがその上で動作するプロセッサは、オペレーティング・システムおよびこれらのオペレーティング・システムの下で動作するクライアントが、それによって任意のデータ構造に対するロックを獲得することができる方法を提供する。本明細書で使用するロック・フィールド形式は、例えば、Ｗｉｎｄｏｗｓ  ＮＴ、ＵｎｉｘＷａｒｅ、およびＵｎｉｓｙｓ  ＭＣＰを含むいくつかのオペレーティング・システムと互換性がある。任意のパーティション上のコア・サービスは、そのパーティションのオペレーティング・システムおよびプロセッサ・アーキテクチャに対して調整されなければならない。
【０２２６】
本発明のロック機構の重要な特徴によれば、タイプ１メモリ・ページが最初に割り振られたとき、割り振りを行うパーティションは、割り振り中にそのページに対するアクセスをロックするためにシステム・ワイド・ロック（system wide lock）（後述する割り振り構造のフィールド）を獲得しなければならない。ただし、１つまたは複数の割り振り済みページの所有権が、他のパーティションに拡張または移転されたとき、関与するページに対するロックだけを獲得すればよい。これらのページ内のＤｅａｌｌｏｃａｔｉｏｎＬｏｃｋフィールドが、この目的で使用される。これは、パーティション間の通信のより大きなスループットを容易にする。というのは、システム・ワイド・ロックに対する競合が回避されるからである。
【０２２７】
ｂ．タイプ２メモリ・ページ
このタイプのメモリ・ページの割り振りは、例えば、メッセージ・データを別のパーティション上のクライアントに渡すためのバッファを定義するために、クライアントによって要求され得る。タイプ１ページの場合と同様に、タイプ２メモリ・ページが、任意のクライアントに割り振られたとき、コア・サービス・ヘッダが、そのページの始めに作成される。図３２Ｂは、本実施形態による、タイプ２ページに対するコア・サービス・ヘッダの内容を図示している。
【０２２８】
パーティション所有権マスク・フィールドおよびクライアント・グループＩＤフィールドは、タイプ１ページに対するヘッダ内の対応するフィールドと同一である。つまり、パーティション所有権マスクは、どのパーティションが、そのページに対する所有権を有し、クライアントＩＤフィールドは、そのページに対する所有権を有するクライアントのクライアント・グループＩＤを含む。そのページが最初に割り振られたとき、このフィールドは、その割り振りを要求したクライアントのクライアント・グループＩＤを含むことになる。
【０２２９】
ＤｅａｌｌｏｃａｔｉｏｎＬｏｃｋフィールドは、タイプ１ページのヘッダ内の対応するフィールドと同様に、ページの所有権の変更を調整するのに使用する。ページの所有権の変更を実現しようとするどのパーティションも、まず、ＤｅａｌｌｏｃａｔｉｏｎＬｏｃｋフィールドを介して、そのページに対するロックを獲得しなければならない。
【０２３０】
タイプ３ページカウントフィールドおよびタイプ３ページ参照フィールドは、本発明の追加の特徴に関連し、これにより、タイプ２メモリ・ページを割り振る要求の一環として、その割り振り要求でのバッファ・サイズを満たすために、ゼロまたは複数のタイプ３ページをタイプ２要求と関連して割り振ることができる。タイプ３ページ・カウント・フィールドは、タイプ２ページと関連するタイプ３メモリ・ページの総数を指定し、またタイプ３ページ参照フィールドは、関連するタイプ３ページへの参照（すなわち、ポインタ）を含むタイプ２ページ内の位置を指定する。
【０２３１】
ｃ．タイプ３メモリ・ページ
前述のとおり、このタイプのメモリ・ページは、タイプ２メモリ・ページと併せて使用する。タイプ３ページは、クライアント・データを含み、クライアント・グループによって所有されている。ただし、タイプ３ページは、明示的なクライアント・グループ情報を含まない。代わりに、タイプ３ページのクライアント・グループ所有権は、その関連するタイプ２メモリ・ページの所有権によって、そのタイプ２ページのコア・サービス・ヘッダのクライアント・グループＩＤフィールド内に指定されるとおり、管理されている。タイプ３ページの所有権は、その関連するタイプ２ページの所有権が変更されたときはいつでも、暗黙的に変更される。
【０２３２】
ｄ．タイプ４メモリ・ページ
このタイプのメモリ・ページは、１つまたは複数のパーティションによる静的所有権のためのものである。タイプ１、２、３メモリ・ページとは異なり、タイプ４メモリ・ページの所有権は、後述する割り振りテーブル内で指定される。したがって、タイプ４ページの所有権に対するすべての変更は、システム・ワイド・ロックの獲得を必要とする。
【０２３３】
５．制御構造ヘッダ
図２０は、本実施形態による制御構造ヘッダ１９１０の内容を図示している。バージョンＩＤフィールドは、コンピュータ上で動作しているコア・サービス・ソフトウェアの特定のリリース、つまりバージョンを識別する。共用メモリ・ステータス・フィールドは、共用メモリのステータス（例えば、「未初期設定」、「初期設定中」、「初期設定済み」、および「クリーンアップ」）を示す。マスタ・パーティションのパーティションＩＤフィールドは、どのパーティションが、共用メモリ・ウインドウの「マスタ（Master）」として指定されているかを識別する。マスタ・パーティションは、下記により十分に説明するとおり、共用メモリ・ウインドウを管理するための責任（responsibilities）を追加している。共用メモリパーティション・チェックイン間隔フィールドは、パーティションが、その時点で、あるステータス情報を更新して、他のパーティションにそれがアクティブであることを示すことが必要となる時間間隔を指定する。クライアント・ディレクトリ・テーブル・ヘッダ・フィールドは、クライアント・ディレクトリ・テーブルの始めに対するポインタ、および本発明のロック機構に従って、そのテーブルへのアクセスを調整するのに使用するロック・フィールドを含む。
【０２３４】
制御構造ヘッダ１９１０は、コンピュータ・システム内のパーティションのそれぞれに関する情報で終了し、これは、そのパーティション上で動作しているオペレーティング・システムのタイプ（例えば、ＮＴ、ＵｎｉｘＷａｒｅ、ＭＣＰなど）、およびそのパーティションに対してプロセッサ間割込みを発行するのに必要な情報を含む。
【０２３５】
６．割り振り構造
本実施形態によれば、共用メモリ・ページの管理は、割り振りテーブル（図示せず）を介して円滑になっている。共用メモリ・ウインドウ内の各割り振りページは、この割り振りテーブル内のエントリによって表されている。各エントリは、対応するページが、「使用中（in use）」、「使用可能（available）」であるかどうかを示し、あるいは使用不可であるメモリを参照し、また、ページ・タイプの指定も行い得る。タイプ４メモリ・ページの場合、エントリは、タイプ１メモリ・ページおよびタイプ２メモリ・ページのヘッダ内に見られるようなパーティション所有権マスクの形式で、どのパーティションが、そのページに所有権を有するかをさらに指定する。したがって、この点では、タイプ４ページの所有権は、タイプ１ページ、タイプ２ページ、およびタイプ３ページの場合（所有権情報が、ページ自体のコア・サービス・ヘッダ内に常駐する）とは異なる方式で維持される。割り振りテーブルは、クライアント・ディレクトリ・テーブルと同様に、それ自体、共用メモリ・ウインドウの１つまたは複数のページを占有する。
【０２３６】
共用メモリ・ウインドウのベースにある割り振り構造１９１２は、割り振りテーブルおよび他の構造に関連するいくつかのパラメータを制御する。図２１は、本発明の実施形態による割り振り構造の内容を図示している。ロック・フィールド（割り振りロック）が、割り振りテーブルに対するアクセスを制御するのに使用される。これは、前述したシステム・ワイド・ロック（タイプ１ページおよびタイプ２ページのヘッダ内の個々のページ・ロックに対比される）である。パーティションは、ページのどの初期割り振りについても、このロックを獲得しなければならない。このロックは、タイプ４ページの所有権のどの後続の変更にも要求されなければならない。というのは、タイプ４ページの所有権は、そのそれぞれの割り振りテーブル・エントリ内で維持されているからである。ただし、前述のとおり、タイプ１ページおよびタイプ２ページの所有権の後続の変更には、それらのページ自体のヘッダ内にある個々のページ・ロックだけを獲得すればよい。個々のページ（タイプ１および２）をロックできるこの機能は、パーティション間のより大きなスループットを容易にする。というのは、システム・ワイド・ロック（割り振りロック）に対する競合が除去されるからである。
【０２３７】
共用メモリ領域フィールドの長さフィールドは、共用メモリ・ウインドウ内の割り振り可能ページの数を指定する。共用メモリ・ページ・ポインタ・フィールドは、割り振りページの始めに対するポインタを提供する。空きページ・リスト・ヘッダは、空きページ・リストの始めに対するポインタを提供し、また割り振りテーブル・ヘッダは、割り振りテーブルの始めに対するポインタを提供する。
【０２３８】
７．信号（signal）
この実施形態での通信の基本単位は、信号である。本実施形態では、２つの主なカテゴリの信号が存在する。（１）パーティション間のコア・サービス間信号、および（２）パーティション間のクライアント間信号である。コア・サービス間信号は、異なるパーティション上で動作するコア・サービス・ソフトウェア間で送信されるものである。クライアント間信号は、異なるパーティション上のクライアント間で送信されるものである。各カテゴリの信号は、１つまたは複数の信号サブ・タイプを有する。各信号は、コア・サービス情報セクションおよびクライアント情報セクションを含む。これらのセクションのそれぞれは、いくつかのワードを含み、その定義は、そのタイプに依存する。
【０２３９】
コア・サービス間信号サブ・タイプの場合、クライアント情報セクションは、定義されない。すべての情報は、コア・サービス情報セクションに含まれる。下記のコア・サービス間信号サブ・タイプが、本実施形態で定義される。
【０２４０】
（１）メンバシップ変更信号：クライアントが、パーティション上のコア・サービス・ソフトウェアに登録または登録抹消したときはいつでも、コア・サービス・ソフトウェアは、同一クライアント・グループに登録しているクライアントを有する、それぞれの他のパーティション上のコア・サービス・ソフトウェアに、この信号を送信して、それらに、そのクライアントが登録する／登録抹消することを知らせなければならない。この信号のコア・サービス情報セクションは、クライアントがそこに登録する／そこから登録抹消するクライアント・グループのクライアント・グループＩＤを含むことになる。
【０２４１】
（２）送信再開信号：この信号は、受信するパーティションによって、送信するパーティション上のコア・サービス・ソフトウェアに、それに対する信号送信を再開できることを警報するのに使用される（この信号の使用は、各入力待ち行列のオーバーフロー・フラグの説明に関連して、下記にさらに説明する）。
【０２４２】
（３）Ｙｏｕ  Ｈａｖｅ  Ｂｅｅｎ  Ｍａｒｋｅｄ  Ｄｅａｄ信号：この信号は、マスタ・パーティション上のコア・サービス・ソフトウェアによって、マスタが機能していないと決定したパーティションに送信される。
【０２４３】
クライアント間信号サブ・タイプでは、コア・サービス情報セクションとクライアント情報セクションの両方が定義される。本実施形態では、下記のクライアント間信号サブ・タイプだけが定義されている。これは、信号送達信号である。下記にさらに詳細に説明するとおり、１つのパーティション上のクライアントが、別のパーティション上のクライアントに信号を送信する（また、多分、メッセージ・データのバッファを渡す）ことを望むとき、このクライアントは、コア・サービスＡＰＩの信号送信インターフェースを呼び出す。これに応答して、コア・サービス・ソフトウェアは、信号送達信号を、クライアントがその上で動作しているパーティションに送信する。信号送達信号のコア・サービス情報セクションは、送信するクライアントおよび受信するクライアントのクライアント・グループＩＤを含み、また、例えば、受信するパーティションに向けられた共用メモリ・オブジェクトを含んだバッファを定義するため、クライアントに割り振られている共用メモリの１つまたは複数のページに対するハンドル（すなわち参照）も含み得る。共用メモリ・オブジェクトの例は、クライアント・メッセージ、クライアント・データストリーム、クライアント・イベント、およびコア・サービス・イベントである。クライアント情報セクションは、コア・サービス・ソフトウェアには不透明であるが、送信するクライアントおよび受信するクライアントにより、任意の所望の目的で使用され得る。例えば、クライアント情報セクションは、クライアント間の短いメッセージの通信を行うのに使用することが可能である。本実施形態では、クライアント情報セクションは、最大で５つのワードを含む。
【０２４４】
８．入力待ち行列および入力待ち行列ヘッダ
入力待ち行列機構は、下記のプロセッサ間割込み機構と併せて、受信するパーティションにデータが入手可能であることを合図するのに使用する。各パーティションは、コンピュータ・システム内のそれぞれの他の可能なパーティションごとに、別々の入力待ち行列を有する。本発明では、各パーティションは、また、それ自体に対する入力待ち行列も有し、これは、例えば、パーティション上のコア・サービス・ソフトウェアが、同一パーティション上のクライアントに信号を送信する必要がある場合、使用される。したがって、コンピュータ・システムを最大で８つの別々のパーティションに分けて構成することのできる（すなわち、８つのサブＰＯＤのそれぞれが、別個のパーティションを定義する）本実施形態では、各パーティションは、８つの別々の入力待ち行列（他の７つのパーティションのそれぞれに１つ、およびそれ自体に１つ）を有し、合計では、６４個の入力待ち行列になる。これらの入力待ち行列は、ヘッダとともに、共用メモリ制御構造１９００の部分１９１４内に常駐する。信号は、１つのパーティション上のコア・サービス・ソフトウェアによって生成されて、別のパーティション上のコア・サービス・ソフトウェアに、それらの間の対応する入力待ち行列を介して送達される。
【０２４５】
図２９は、本実施形態による入力待ち行列ヘッダの内容を図示している。入力待ち行列ポインタ・フィールドは、実際の入力待ち行列の始めに対するポインタを保持する。入力待ち行列数フィールドは、入力待ち行列領域１９１４内の入力待ち行列の数（本実施形態では、６４）を指定する。入力待ち行列長さフィールドは、各入力待ち行列の長さ（ワード数での）を指定する。本実施形態では、この長さは、２０４８ワードと指定されている。入力待ち行列信号サイズ・フィールドは、各信号の全体の長さ（コア・サービス情報セクション＋クライアント情報セクション）を指定する。各信号の全体サイズは、同一であり、固定されている。最後に、入力待ち行列内信号数フィールドは、各入力待ち行列が一度に収容できる可能な信号の総数を指定する。
【０２４６】
図３０は、本実施形態による各入力待ち行列の内容を図示している。図示するとおり、各入力待ち行列は、その入力待ち号列に対するアクセスを、待ち行列内の情報を更新している間、ロックするのにコア・サービス・ソフトウェアによって使用されるロック・フィールド３０１０、その待ち行列内の現行の信号数を指定するカウント・フィールド３０１２、およびその待ち行列が容量に達しているが、空間が使用可能になり次第、すぐにその待ち行列に転送されるべき追加の信号が存在することを示すのに使用されるオーバーフロー・フラグ３０１４を有する。これらのフィールドには、その後に、固定数の信号（入力待ち行列ヘッダの入力待ち行列内信号数フィールドのなかで指定される、図２９参照）のための空間３０１６が続く。
【０２４７】
本実施形態では、６４個の入力待ち行列が、制御構造１９００の入力待ち行列領域１９１４内に連続してグループ化される。つまり、この構造内の最初の８つの入力待ち行列は、第１パーティションに属し、８つの入力待ち行列の後続グループは、他の７つのパーティションの後続のものに属する。
【０２４８】
ａ．好ましいオペレーション
オペレーションでは、コア・サービス・ソフトウェアは、クライアントから、別のパーティションに信号を送信する要求を受けたときはいつでも、そのクライアントによって供給された情報に基づいて信号を作成して、その信号を、受信するパーティションに対する適切な入力待ち行列内の使用可能なエントリに入れようとする。使用可能なエントリがない場合には、入力待ち行列のオーバーフロー・フラグ３０１４を設定して、転送されるのを待っているが、入力待ち行列が一杯であるために、転送され得なかった信号が存在することを受信するパーティションに警報して、そのクライアントにエラーを戻す。そうした場合、受信するパーティションが、その後に入力待ち行列を空けたとき、オーバーフロー・フラグ３０１４をクリアして、送信再開信号を送信するパーティションに送り返し、この送信するパーティションに、そのクライアントによって発行されたどの後続の信号も、現時点で、受信するパーティションに対する通信のための入力待ち行列に対して送信できることを警報する。
【０２４９】
受信側では、受信するパーティション上のコア・サービス・ソフトウェアは、送信するパーティションからプロセッサ間割込みを受信したとき、関連する入力待ち行列のそれぞれのなかのカウント・フィールドを検査して、どの入力待ち行列が入手可能な信号を有するかを決定する。コア・サービス・ソフトウェアは、入手可能な信号を有する入力待ち行列を見つけたとき、それらをその排他メモリ・ウインドウ内のローカル処理バッファに転送して、入力待ち行列内のカウントをリセットする。所与の入力行列から抽出された各受信信号は、次に、適切なクライアントに（その信号内のクライアント・グループＩＤに基づいて）、すべてのクライアントが、それを実装することを要求されている信号受信コールバック・インターフェースを介して渡される。
【０２５０】
ｂ．代替オペレーション
代替の実施形態では、送信要求に応答して、様々な入力待ち行列内にクライアント信号をより効率的に移動させるために、各パーティション上のコア・サービス・ソフトウェアは、それぞれの可能な宛先パーティションごとに、その排他メモリ・ウインドウ内にパーティション送信待ち行列（すなわち、バッファ）（図示せず）をセットアップする。この代替実施形態では、パーティション上のコア・サービス・ソフトウェアは、入力待ち行列にそれが追加の信号を入れることを妨げるいっぱいの入力待ち行列に遭遇したときはいつでも、オーバーフロー・フラグをその入力待ち行列内に設定して、次に、その待ち行列内でエントリが再び使用可能になるまで、それらの信号要求を適切なローカル送信待ち行列内に入れる。
【０２５１】
さらに、受信側では、各パーティション上のコア・サービス・ソフトウェアは、ローカル・クライアント信号タンク待ち行列をその排他メモリ・ウインドウ内に、コア・サービス・ソフトウェアに対して自ら識別を明らかにしたクライアントごとに１つ、セットアップする。受信するパーティションの所与の入力待ち行列から抽出した各受信信号は、指定受信するクライアント（やはり、その信号内のクライアント・グループＩＤに基づく）に対応するクライアント信号タンク（tank）待ち行列に転送される。タンク待ち行列内の各信号は、最終的に、指定受信するクライアントに、クライアントの信号受信インターフェースへのコールを介して渡される。
【０２５２】
この代替実施形態でのローカル送信待ち行列およびタンク待ち行列は、前述のオーバーフロー・フラグの使用と併せて、コア・サービス・ソフトウェアのクライアントのすべてに、共用メモリ・リソースの効率的で平等な使用を提供することを目的としている。各クライアントの信号は、ローカル方式で待ち行列に入れられるので、共用メモリ・ウインドウ内の入力待ち行列は、通信のために効率的な方式で空けておかれる。入力待ち行列が容量に達したとき、失われる信号がなく、また、入力待ち行列が迅速に空けられて、信号が所与の送信待ち行列内で待つ時間を最小限に抑える。
【０２５３】
９．プロセッサ間割込み機構
前述のとおり、プロセッサ間割込み機構は、信号がその入力待ち行列のうちの１つのなかに、送信するパーティションによって入れられたことを受信するパーティションに警報するのに使用する。詳細には、本実施形態では、各パーティションは、すべての他のパーティションがそれにプロセス間割込みを送信するのにそれを使用する、単一割込みベクトルを確立する。送信するパーティションが、信号を所与の受信するパーティションに対する入力待ち行列内に入れて、これが入力待ち行列を空状態（カウント＝０）から空ではない状態（カウント＞０）に移行させるときはいつでも、送信するパーティション上のコア・サービス・ソフトウェアは、受信するパーティションのプロセッサのうちの１つに対するプロセッサ間割込みを生成する。受信するパーティションのプロセッサは、そのパーティション上のコア・サービス・ソフトウェアの割込みサービス・ルーチン（図示せず）を呼び出すことによって、この割込みに応答する。各パーティションは、他のパーティションからの割込みの受信に対して、単一の割込みベクトルだけを割り当てるので、受信するパーティション上のコア・サービス・ソフトウェアは、どの他のパーティションが、プロセッサ割込みを発行したか分からない。したがって、受信するパーティション上のコア・サービス・ソフトウェアは、それらの待ち行列のうちのどれかで入手可能な信号がないかどうか決定するために、その入力待ち行列のそれぞれのなかのカウント・フィールド３０１２を検査しなければならない。
【０２５４】
入力待ち行列が入手可能な信号を有する場合、コア・サービス・ソフトウェアは、それらの信号を受信するパーティションの排他メモリ・ウインドウ内のローカル処理バッファに転送して、その入力待ち行列内のカウント・フィールド３０１２をリセットする。特定の入力待ち行列のオーバーフロー・フラグ３０１４もまた、設定されている場合、コア・サービス・ソフトウェアは、オーバーフロー・フラグをリセットして、前述のとおり、送信再開信号を送信するパーティションに送り返す。次に、コア・サービス・ソフトウェアは、ローカル処理バッファを走査して、各受信信号を抽出し、その信号内のクライアント・グループＩＤから宛先クライアントを判定して、次にその信号をその宛先クライアントに、そのクライアントの信号受信コールバック・インターフェースを介して送達する。次に、コア・サービスは、やはり入手可能な信号を有する（すなわち、カウント＞０）それぞれの他の入力待ち行列に対して、これらのステップを繰り返す。
【０２５５】
ａ．例としてのＩｎｔｅｌ／Ｗｉｎｄｏｗｓ  ＮＴ実施形態
プロセッサレベルおよびオペレーティング・システム・レベルでは、プロセッサ間割込み機構は、プロセッサとオペレーティング・システムの両方に依存する。一例として、以下は、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍファミリーのマイクロプロセッサを使用し、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  ＮＴオペレーティング・システムを実行するパーティションの場合に、本実施形態により、どのようにプロセッサ間割込みが生成され、使用されるかの説明である。
【０２５６】
本実施形態により、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  ＮＴオペレーティング・システムのハードウェア抽象化層（ＨＡＬ）を変更して、任意のパーティション上でのＨＡＬの初期設定中、ＨＡＬが、そのパーティションによる共用メモリ・プロセッサ間割込みの受信に対して、まず、プロセッサ間割込みベクトルを選択するようにする。割込みベクトルは、Ｗｉｎｄｏｗｓ  ＮＴオペレーティング・システムのＨＡＬによって着信割込みハードウェア信号に割り当てられた数である。例えば、割込みベクトルは、通常、ＨＡＬにより、システム上の様々なデバイスＩ／Ｏハードウェア割込み信号に割り当てられる。プロセッサ間割込みは、１つのプロセッサから別のプロセッサに（Ｉ／Ｏデバイスからプロセッサに、に対比して）送信される特別タイプのハードウェア割込み信号である。一般のＩ／Ｏ割込みの場合と同様に、ＨＡＬも、すべてのプロセッサ間割込み信号にベクトルを割り当てなければならない（Ｉ／Ｏ割込みベクトルが選択されているのと同じ数空間から）。したがって、本実施形態では、変更したＨＡＬが、そのパーティション上のローカル・コア・サービス・ソフトウェアによって受信されるプロセッサ間割込みに対して、割込みベクトルを割り当てて、その入力待ち行列のうちの少なくとも１つのなかで、１つまたは複数の信号が入手可能であることをこのソフトウェアに警報する。
【０２５７】
Ｉｎｔｅｌマイクロプロセッサの場合、プロセッサ間割込みは、実際には、このプロセッサと関連する高機能プログラム済み割込みコントローラ（ＡＰＩＣ）によって生成され、受信される。送信するプロセッサに関連するＡＰＩＣが、受信するプロセッサに関連するＡＰＩＣに対するハードウェア信号を生成する。複数のプロセッサが割込みを受信することになる場合には、送信するプロセッサのＡＰＩＣは、それぞれの指定受信側のＡＰＩＣに対して、ハードウェア信号を生成する。各受信するプロセッサのＡＰＩＣは、このハードウェア信号を受信して、対応する割込みベクトルを処理のためにプロセッサに送達する。
【０２５８】
さらに、本実施形態によれば、他のパーティションからのプロセッサ間割込みの受信に対して割込みベクトルを割り当てることに加えて、変更したＨＡＬは、そうした割込みを処理する、そのパーティション内の１つまたは複数のプロセッサを指定する。本実施形態では、複数のサブＰＯＤを含むパーティションの場合、指定されるプロセッサは、それらのサブＰＯＤのうちの単一のもののメンバでなければならない（これは、コンピュータ・システム・プラットフォームの本実施形態によって課された制限であり、他の実施形態での制限ではない可能性がある）。サブＰＯＤ上の複数のプロセッサが指定されたとき、着信割込みは、それらのプロセッサのそれぞれのローカルＡＰＩＣで受信されることになる。次に、これらのＡＰＩＣが、調停して、プロセッサのうちのどれがその割込みを処理するかを決定する。この調停処理に関するさらなる詳細は、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＰｅｎｔｉｕｍ  Ｐｒｏ  Ｆａｍｉｌｙ  Ｄｅｖｅｌｏｐｅｒ′ｓ  Ｇｕｉｄｅ：Ｖｏｌｕｍｅ３で提供されている。ＡＰＩＣに関する追加の情報は、やはりＩｎｔｅｌから入手可能なＩｎｔｅｌ  ＭｕｌｔｉＰｒｏｃｅｓｓｏｒ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，ｖｅｒｓｉｏｎ１．４で見ることができる。
【０２５９】
さらに、本実施形態によれば、コア・サービス・ソフトウェアがパーティション上で初期設定されたとき、コア・サービス・ソフトウェアは、カスタム・インターフェースを介して、そのパーティション上のＮＴオペレーティング・システムのＨＡＬを照会して、割込みベクトル、およびそのパーティションに着信する共用メモリ・プロセッサ間割込みを処理するために、ＨＡＬによって指定されたプロセッサに関する情報を得る。次に、コア・サービス・ソフトウェアは、この情報を制御構造ヘッダ１９１０のパーティション情報セクション内に格納する（図２０を参照）。これは、その情報を他のパーティション上のコア・サービス・ソフトウェアにアクセス可能にする。次に、コア・サービス・ソフトウェアは、ＨＡＬに、別のインターフェースを介して、コア・サービス・ソフトウェアの一部である割込みサービス・ルーチンに対する参照を供給する。そのパーティション上の指定されたプロセッサは、指定された割込みベクトルを有するプロセッサ間割込みを受信した場合、その割込みサービス・ルーチンを実行して、コア・サービス・ソフトウェアがその割込みに応答することができるようにする。
【０２６０】
オペレーションでは、プロセッサ間割込みを生成して、信号がその入力待ち行列のうちの１つに入れられたことを受信するパーティションに通知するため、送信するパーティション上のコア・サービス・ソフトウェアが、制御構造ヘッダ１９１０内で、指定受信するパーティションのプロセッサ間割込み情報をルックアップする。次に、コア・サービス・ソフトウェアは、そのパーティション上のＨＡＬに対する別のカスタム・インターフェースを呼び出して、ＨＡＬに受信するパーティションに関するプロセッサ間割込み情報を供給する。この情報を使用して、送信するパーティション上のＨＡＬは、そのプロセッサのうちの１つのＡＰＩＣ上の登録を操作して、プロセッサ間割込み信号が、そのＡＰＩＣから、そうしたプロセッサ間割込みを受信する受信するパーティション上の、ＨＡＬによって指定された各プロセッサのＡＰＩＣに対して生成されるようにする。次に、受信するパーティション上のこれらのＡＰＩＣが、その割込みを処理するように調停して、この調停に勝ったプロセッサが、受信するパーティション上のコア・サービス・ソフトウェアの割込みサービス・ルーチンを呼び出すことになる。
【０２６１】
ｂ．代替実施形態−複数の割込みベクトル
前述の実施形態では、各パーティションには、他のパーティションのうちのどれかからの共用メモリ・プロセッサ間割込みの受信に対して、単一の割込みベクトルが割り当てられる。このため、受信するパーティションは、他のどのパーティションが受信した割込みを生成したのか分からない。したがって、受信するパーティションは、その入力待ち行列のそれぞれを順番に検査して、その割込みを生成した送信するパーティションから信号を受信することを確実にしなければならない。
【０２６２】
代替実施形態として、各パーティションは、それぞれの他のパーティションからの共用メモリ・プロセッサ間割込みの受信に対して、別々の割込みベクトルを割り当てる。次に、送信するパーティションが、受信するパーティションによってそれに割り当てられた対応する割込みベクトルを使用して、受信するパーティションに対するプロセッサ間割込みを生成することになる。この実施形態の利点は、受信するパーティションが、他のパーティションが生成した割込みベクトルから、着信割込みを知ることである。次に、受信するパーティション上のコア・サービス・ソフトウェアは、適切な入力待ち行列にアクセスして、前述の実施形態のように入力待ち行列のすべてを巡回することなく、着信信号をリトリーブすることが可能である。
【０２６３】
１０．コア・サービスＡＰＩ
前述の機能性をコア・サービス・ソフトウェアのクライアントに提供するため、コア・サービス・ソフトウェアは、クライアントが、コア・サービス・ソフトウェアのサービスを起動するために呼び出すことのできるインターフェース（すなわち、呼び出し可能なメソッド）を提供する定義済みアプリケーション・プログラミング・インターフェース（ＡＰＩ）を有する。下記は、前述の機能を実行するためにコア・サービスＡＰＩの一部として提供されるインターフェースのリストである。
【０２６４】
クライアント・ソフトウェア初期設定：  このインターフェースはコア・サービス・ソフトウェアにそれ自体を識別するためにクライアントによって使用される。コア・サービス・ソフトウェアはクライアント・リファレンス識別子をクライアントに返す。
【０２６５】
クライアント・ソフトウェア未初期設定：  このインターフェースは、それが共用メモリのユーザーとしてもはや参加していないことをコア・サービス・ソフトウェアに知らせるために、クライアントによって使用される。
【０２６６】
クライアント登録：  このインターフェースは、コア・サービス・ソフトウェアに任意のクライアント・グループのメンバとして登録するために、クライアントによって使用される。各クライアントは、共用メモリがそれに割り振られることを要求できるようになるには、登録しなければならない。クライアントは、所望のクライアント・グループ名およびそのクライアント参照識別子をそのコールの一部として供給する。次に、コア・サービス・ソフトウェアが、その所望のクライアント・グループへのこのクライアントの追加を反映するように、クライアント・ディレクトリ・テーブルに適切な変更を加えることになる。次に、インターフェースが、クライアントＩＤをそのクライアントに戻す。
【０２６７】
クライアント登録抹消：  このインターフェースは、特定のクライアント・グループから登録抹消するために、クライアントによって使用される。
【０２６８】
共用メモリ割り振り：  このインターフェースは、共用メモリ・ウインドウの１つまたは複数のページの割り振りを要求するために、クライアントによって使用される。クライアントは、そのクライアントＩＤ、および要求しているバッファ・サイズ（バイト数での）供給する。コア・サービス・ソフトウェアは、割り振りテーブルをロックし、その要求を満たす十分なページが空きページ・リスト内で入手可能であるかどうかを決定して、次に、それらのページを空きページ・リストから除去する。各割り振り済みページに対する割り振りページエントリは、それらのページが「使用中（in use）」であることを反映するように更新される。タイプ１ページおよびタイプ２ページの場合、コア・サービス・ヘッダが、ページ内に作成されて、これは、前述のとおり、パーティションおよびクライアントによるそのページの所有権を示す。タイプ２ページに関連するどのタイプ３ページも、タイプ２ページのヘッダ内で参照付けられる。タイプ４ページの場合、パーティション所有権は、対応する割り振りテーブル・エントリ内に反映される。次に、コア・サービス・ソフトウェアが、ハンドルをクライアントに戻し、これをクライアントが、後で、割り振り済みバッファを含むページを参照するのに使用する。
【０２６９】
共用メモリ割り振り解除：  このインターフェースは、任意のハンドルに関連するすべてのページが割り振り解除されることを要求するために、クライアントによって使用される。その要求するパーティションが、割り振り解除されるべきページの唯一の所有者である場合には、そのページは、空きページ・リストに戻される（これを行うためには、システム・ワイド・ロックを獲得しなければならない）。そうではない場合には、所有権情報のみが（タイプ１ページまたはタイプ２ページのコア・サービス・ヘッダ内、またはタイプ４ページに対する割り振りテーブル・エントリ内で）更新される。
【０２７０】
信号（signal）送信：  これは、受信するパーティションの入力待ち行列内に信号を挿入させるために、クライアントが使用するインターフェースである。このインターフェースを呼び出すクライアントは、（ｉ）受信するクライアントおよびそれがそのメンバであるクライアント・グループのクライアント・グループＩＤと、（ｉｉ）どのパーティションが、信号を受信することになるクライアントを有するかの指示（任意のパーティション上の１つのクライアントのみが、特定クライアント・グループのメンバであり得るため、この指示およびクライアント・グループＩＤだけが、各パーティション上の受信するクライアントを識別するのに必要な一片の情報である）と、（ｉｉｉ）クライアント情報セクション内で、信号と共に供給される実際の情報と、（ｉｖ）これがポイント間信号、またはマルチキャスト信号のいずれであるかを示すフラグ（ポイント間は、１つだけの受信するパーティションを有し、他方、マルチキャストは、複数の受信するパーティションを有する）と、（ｖ）クライアント・メッセージを含んだバッファ（１つまたは複数の共用メモリ・ページ）などの、共用メモリ・オブジェクトに対するオプションのハンドルを提供する。信号送信コールに応答して、コア・サービス・ソフトウェアは、（ｉ）信号のコア・サービス情報セクションおよびクライアント情報セクションを作成し、（ｉｉ）共用メモリのステータスを検査し、（ｉｉｉ）信号を適切な入力待ち行列に挿入して、その信号が空の待ち行列に入れられた場合、（ｉｖ）受信するパーティション上でプロセッサ間割込みを生成する。指定受信するパーティションの入力待ち行列がいっぱいである場合、または指定受信するパーティションがダウンしている場合、適切なエラー指示が戻されることになる。
【０２７１】
１１．クライアントによって供給されるインターフェース
コア・サービス・ソフトウェアによって供給される前述のインターフェースに加えて、コア・サービス・ソフトウェアの任意のクライアントは、クライアントにあるイベントを通知するためにコア・サービス・ソフトウェアが起動することのできるいくつかのコールバック・インターフェースを実装しなければならない。本実施形態では、こられのコールバック・インターフェースは、（ｉ）信号が受信されたことをクライアントに通知するためのインターフェース（「信号受信インターフェース」）と、（ｉｉ）そのクライアント・グループ内でメンバシップ変更があったことをクライアントに通知するためのインターフェースと、（ｉｉｉ）共用メモリが、「アップ」または「ダウン」であることをクライアントに通知するためのインターフェースと、（ｉｖ）コア・サービス・ソフトウェアがシャットダウンしていることをクライアントに通知するためのインターフェースと、（ｖ）１つまたは複数の共用メモリ・ページがメモリエラーを有することをクライアントに通知するためのインターフェースとを含む。
【０２７２】
１２．例としてのオペレーション
前述の割込み主導共用メモリ機構のオペレーションをさらに例示するため、図３１Ａおよび３１Ｂが、２つのパーティション上のクライアントおよびコア・サービス・ソフトウェアによって、一方のクライアントから他方のクライアントにメッセージを通信するために実行されるステップを図示する流れ図を含んでいる。
【０２７３】
図３１Ａは、送信するパーティションに対して実行されるステップを図示している。ステップ３１１０で、クライアントが、コア・サービスＡＰＩの共用メモリ割り振りインターフェースを呼び出し、メッセージを受信するパーティション上のクライアントに転送するのに使用することになるバッファを要求する。この例では、クライアントは、タイプ２ページが割り振られることを要求する。クライアントは、その要求とともに必要なバッファ・サイズを提供する。これに応答して、ステップ３１１２で、コア・サービス・ソフトウェアが、要求されたバッファを満たすのに必要となる共用メモリ・ページの数（すなわち、タイプ２ページとともに、追加のタイプ３ページを割り振るかどうか）を決定する。ステップ３１１４で、コア・サービス・ソフトウェアが、（ｉ）システムワイド割り振りロックを獲得し、（ｉｉ）空きページ・リストから、必要な数のページが入手可能であるかどうかを決定し、入手可能であると想定して、（ｉｉｉ）それらのページをクライアントに割り振る。コア・サービス・ソフトウェアは、割り振りテーブルを更新して、それらのページが「使用中（in use）」であることを示し、次に、それらのページの所有権をタイプ２ページのコア・サービス・ヘッダ内で示す。ステップ３１１６で、コア・サービス・ソフトウェアが、割り振り済みページに対するハンドルをクライアントに戻して、割り振りロックを解放する。
【０２７４】
次に、ステップ３１１８で、クライアントが、割り振られたバッファをメッセージ・データで埋める。次に、ステップ３１２０で、クライアントが、コア・サービスＡＰＩの信号送信インターフェースを呼び出して、（ｉ）クライアント・グループＩＤおよび受信するパーティション（これらが一緒に、受信するクライアントを識別する）と、（ｉｉ）信号のクライアント情報セクション内で提供すべき任意の情報と、（ｉｉｉ）割り振り済みバッファに対するハンドルと、（ｉｖ）これが、マルチキャスト要求ではなく、ポイント間要求であることを示すフラグと提供する。前述の内容から、クライアントは、本発明のマルチキャスト機能を使用して、複数のパーティションに信号を送信するオプションを有することを想起されたい。
【０２７５】
信号送信要求に応答して、ステップ３１２２で、コア・サービス・ソフトウェアが、指定された受信するパーティションに基づいて適切な入力待ち行列を識別する。次に、コア・サービス・ソフトウェアは、その入力待ち行列をロックして（ステップ３１２４）、カウント・フィールドを増分し（ステップ３１２６）、入力待ち行列内に信号をその待ち行列内のエントリとして作成する（ステップ３１２８）。次に、その入力待ち行列が、その前に空であった（すなわち、カウントが、ゼロから１になった）場合には（ステップ３１３０）、コア・サービス・ソフトウェアが、受信するパーティション上でプロセッサ間割込みを生成する（ステップ３１２３）。入力待ち行列のカウント・フィールドが、既に非ゼロの場合、コア・サービス・ソフトウェアは、割込みを生成する必要がない。次に、コア・サービス・ソフトウェアは、入力待ち行列に対するロックを解放する（ステップ３１３１またはステップ３１３３）。
【０２７６】
次に、図３１Ｂを参照すると、受信するパーティション上で実行されるステップが示されている。ステップ３１３４で、そのパーティションの事前指定されたサブＰＯＤ上のＡＰＩＣのうちの１つが、そのプロセッサのために調停し、またそれに送信するパーティションによって生成されたプロセッサ間割込みを送達する。これに応答して、プロセッサは、コア・サービス・ソフトウェアの割込みサービス・ルーチン（図示せず）を呼び出す。割込みサービス・ルーチンの一環として、コア・サービス・ソフトウェアは、ステップ３１３６で、その入力待ち行列のうちの最初のものを検査し始める（本実施形態では、各パーティションごとに８つの入力待ち行列が存在する）。ステップ３１３８で、コア・サービス・ソフトウェアが、その入力待ち行列のカウント・フィールドを検査する。そのカウントがゼロであった場合には、その入力待ち行列に対応する送信するパーティションから送信された信号は存在せず、コア・サービス・ソフトウェアは、次の入力待ち行列に進む。
【０２７７】
ただし、所与の入力待ち行列のカウントがゼロよりも大きい場合には、信号が存在し、制御は、ステップ３１４０に移る。ステップ３１４０で、コア・サービス・ソフトウェアはが、入力待ち行列内の各信号をローカル処理バッファにコピーして、次に、ステップ３１４２で、カウントをゼロにリセットする。次に、ステップ３１４３で、コア・サービス・ソフトウェアが、入力待ち行列内にオーバーフロー・フラグが設定されているかどうかを決定する。オーバーフロー・フラグが設定されている場合、コア・サービス・ソフトウェアは、そのオーバーフロー・フラグをリセットして、次に、送信再開信号を送信するパーティションに送信し、これにより、入力待ち行列がもはやいっぱいではないことを送信するパーティションに警報する。
【０２７８】
次に、ステップ３１４４および３１４６が、ローカル処理バッファ内にコピーされた各信号に対して実行される。詳細には、ステップ３１４４で、コア・サービス・ソフトウェアが、信号をローカル処理バッファから抽出する。ステップ３１４６で、コア・サービス・ソフトウェアが、受信するクライアント（信号内のクライアント・グループＩＤによって識別された）の信号受信インターフェースを呼び出して、クライアント情報セクションおよびその信号に関連する割り振り済みバッファ（それが存在すれば）に対するハンドルを渡す。ステップ３１４８で、クライアントが、例えば、ハンドルを使用して、参照付けされたバッファ内のメッセージ・データにアクセスすることも含めて、信号を処理する。ステップ３１４４および３１４６は、ローカル処理バッファ内の各信号ごとに繰り返す。これが終了したとき、コア・サービス・ソフトウェアが、ステップ３１３６ないし３１４６を、その他の入力待ち行列のそれぞれに対して繰り返す。本実施形態では、図３１Ｂに図示していないが、受信するパーティション上のコア・サービス・ソフトウェアは、待ち信号を全く見つけることなく（すなわち、カウント＞０を有するもの無く）、入力待ち行列のすべてを完全にパススルーするまで、その入力待ち行列のなかを巡回し続ける。次に、入力待ち行列処理は、別のプロセッサ間割込みが受信されるまで停止する。
【０２７９】
送信処理および受信処理の追加の態様（図示せず）は、割り振り済み共用メモリ・ページの割り振り解除である。送信するクライアントが、バッファ（すなわち、１つまたは複数の共用メモリ・ページ）の割り振りを要求し、そのハンドルを受信するパーティションに信号を介して渡すことによって、そのバッファを受信するパーティションに転送するとき、送信するパーティションは、（ｉ）そのバッファのページに対する所有権を受信するクライアントに拡張する（この場合、両方のクライアントが所有権を有することになる）か、あるいは（ｉｉ）所有権を受信するパーティションに移転する（この場合、送信するクライアントは、所有権を放棄する）かのオプションを有する。どちらのオプションを選択するかにかかわらず、なんらかの時点で、クライアントは、割り振り済みページの割り振り解除を所望することがあり得る。これは、共用メモリ割り振り解除インターフェースを使用して行われる。詳細には、クライアントが、共用メモリ割り振り解除インターフェースを呼び出して、割り振り解除すべきページに対するハンドルを渡す。それらのページの所有者である他のクライアントが存在しない場合には、それらのページは、空きページ・リストに戻されて、その対応する割り振りテーブル・エントリが、それらの可用性を反映するように更新される。ただし、他のクライアントもそれらのページに対する所有権を有する場合には、これらのページは、まだ、空きページ・リストに戻すことができない。代わりに、コア・サービス・ソフトウェアが、それらのページをロック・ダウン（lock down）して、タイプ２ページのコア・サービス・ヘッダ内の所有者情報を更新する。
【０２８０】
１３．他の機能
前述の内容に加えて、割込み主導共用メモリ管理機構の下記の追加機能が提供される。
【０２８１】
ａ．初期設定およびシャットダウン
コア・サービス・ソフトウェアは、パーティション上で動作を開始したとき、まず、共用メモリ・ウインドウの可用性およびステータスを確認して、次に、適切なプラットフォームのインターフェースを起動して、下記の情報を得る。それは、共用メモリの物理アドレスおよびサイズ、パーティション識別子（各パーティションは、関連する識別子を有する）、そのパーティションに対するプロセッサ間割込みを生成するのに、他のパーティションによって必要とされる情報、およびそのパーティション上で動作しているオペレーティング・システムのタイプおよびバージョンである。コア・サービス・ソフトウェアは、コピーをそのパーティションの排他メモリ・ウインドウ内、ならびに例えば、制御構造ヘッダ１９１０のパーティション情報フィールドおよび割り振り構造１９１２の共用メモリ領域の長さフィールドなどの、共用メモリ制御構造１９００の様々なフィールド内に、この情報のコピーを格納する。
【０２８２】
共用メモリ・ウインドウにアクセスして、これを使用する上で、あるパーティションが他のパーティションに加わるためには、そのパーティションは、共用メモリ・ウインドウを使用して、それ自体を他のパーティションに認知させなければならない。現行のマスタ・パーティションが存在しない場合には、それらは、それら自体のなかで調停を行って、マスタ・パーティションを選択しなければならない。この目的で、コア・サービスは、「チェック・イン」機構を有する。この「チェック・イン」機構は、ロックを使用することなく、各パーティションが、制御構造ヘッダ内の共用メモリ・ステータス・フィールドの妥当性を決定して、アクティブなマスタが存在しないとき、新しいマスタを動的に選択することができるようにする。
【０２８３】
パーティションが自主的に共用メモリ・ウインドウを離れるときはいつでも、共用メモリをクリーンな方式でエグジット（exit)するのも、コア・サービス・ソフトウェアの責任である。このことは、マスタ・パーティションと非マスタ・パーティションの両方に該当する。どの離れていく（leave）パーティションにも共通の責任は、（ｉ）適切なクライアント・コールバック・インターフェースを呼び出すことによって、共用メモリ・ウインドウが消え去ることをそのローカル・クライアントに通知すること、（ｉｉ）それがロックしたどのデータ構造もロック解除すること（例えば、割り振りテーブル、入力待ち行列など）、（ｉｉｉ）その入力待ち行列をクリーンアップすること、（ｉｖ）それが所有するどの共用メモリ・ページも割り振り解除すること、（ｖ）それが所有するどのローカル・メモリも戻すこと、および（ｖｉ）制御構造ヘッダ１９１０内でのそのステータスを「未初期設定」に変更することである。
【０２８４】
離れていくパーティション（departing partition）が、マスタ・パーティションであり、他に活動しているパーティションが存在しない場合には、それは、共用メモリ・ウインドウをシャットダウンして、通知がＭＩＰに送信される。離れていくパーティション（departing partition）が、マスタ・パーティションであり、共用メモリ・ウインドウとまだ通信中である少なくとも１つの他のパーティションが存在する場合には、新しいマスタ・パーティションが、その残っているアクティブなパーティションによって選択される。
【０２８５】
ｂ．マスタ・パーティション責務
マスタ・パーティションは、共用メモリが初期設定されたとき、非マスタ・パーティションが活動を止めたとき、および共用メモリがシャットダウンしたとき、特定の責任を有する。下記の責務が、マスタ・パーティションのために予約されている。  
（１）制御構造ヘッダ、割り振り構造、割り振りテーブル、空きページ・リスト、入力待ち行列ヘッダ、入力待ち行列、クライアント・ディレクトリ・テーブル・ヘッダ、およびクライアント・ディレクトリ・テーブルを含む共用メモリ構造を初期設定することと、
（２）パーティションが活動を止めたとき、共用メモリ構造および使用中の共用メモリ・ページに対して、ハウスクリーニング・オペレーションを実行することと、  
（３）共用メモリがシャットダウンしたとき、共用メモリ構造に対してハウスクリーニング・オペレーションを実行する、
ことである。
【０２８６】
ｃ．非マスタ・パーティションの責務
マスタ・パーティションを含むすべてのパーティションは、下記の責務を有する。  
（１）所定の共用メモリパーティション・チェックイン間隔で他のパーティションのステータスを監視することと、
（２）新しいマスタ・パーティションを選択する必要があるかを決定することと、  
（３）共用メモリ構造内の適切な領域を更新して、共用メモリ・ウインドウを離れることを選択した場合には、所有しているどの共用メモリ・ページも割り振り解除することと、
（４）クライアントが、共用メモリ・ウインドウへの参加から離脱した場合、またはクライアントに障害が起きた場合、そのクライアントによって所有されるどの共用メモリ・ページも割り振り解除する
ことである。
【０２８７】
本明細書で説明するとおり、この代替実施形態の割込み主導共用メモリ通信機構を実施するプログラム・コードは、オペレーティング・システム・コード（例えば、ＨＡＬに対する変更）と別個のコンピュータ・プログラム（例えば、コア・サービス・ソフトウェア）の両方の組み合わせとして実装される。ただし、他の実施形態では、このプログラム・コードは、添付の請求項によって定義される本発明の趣旨および範囲を逸脱することなく、完全にオペレーティング・システム・コードとしてか、あるいは完全に別個のコンピュータ・プログラムとして実装することが可能である。さらに、プログラム・コードは、ハード・ワイヤド回路で、またはハード・ワイヤド回路およびソフトウェア・コードの組み合わせで実装することもできる。前述のとおり、「プログラム・コード」という用語は、すべてのそうした可能性を包括するものとする。
【０２８８】
ＩＶ．パーティション間の通信を円滑にする本発明のコンピュータ・システムおよび方法の例としての使用
オペレーティング・システム間および／またはそのオペレーティング・システムの下で動作するアプリケーション間の通信を円滑にするための、前述のコンピュータ・システムの例としての使用を、その共用メモリ管理機能も含めて、下記に説明する。これらの使用の例としての実施形態は、下記に、例示の目的で説明するものであり、制限するためにではない。代替実施形態（本明細書に記載する実施形態の等価形態、拡張形態、変形形態、逸脱形態などを含め）は、本明細書に含まれる教示に基づき、関連分野の技術者には明白となる。本発明は、そうした代替実施形態を含むことを意図し、それに適合している。
【０２８９】
Ａ．共用メモリ・デバイス・ドライバ
下記の共用メモリネットワーク・ドライバ・インターフェース仕様（ＮＤＩＳ）デバイス・ドライバを実装して、標準市販アプリケーションが、前述の複数パーティション・システム上で動作できるようにすることが可能である。共用メモリＮＤＩＳデバイス・ドライバは、例えば、類似のＬＡＮ構成上でよりも高速な帯域通過および短い待ち時間を有するネットワーク機能インターフェースおよび／またはクラスタ化インターフェースを提供する。この共用メモリＮＤＩＳデバイス・ドライバは、セクションＩＩＩ．Ｂ．で前述した割込み主導共用メモリ管理機構のコア・サービス・ソフトウェアの上に構築され、またそれを利用する。
【０２９０】
図１８は、例としての共用メモリＮＤＩＳデバイス・ドライバ１８０２を図示している。斜線のないボックスは、標準Ｗｉｎｄｏｗｓ  ＮＴ構成要素を表している。斜線を引いたボックスは、本発明の一環として実装され得る構成要素を表している。
【０２９１】
共用メモリＮＤＩＳデバイス・ドライバ１８０２は、上端（upper-edge）インターフェースおよび下端（lower-edge）インターフェースをサポートする。上端インターフェース上で、共用メモリＮＤＩＳドライバ１８０２は、標準ネットワーク・プロトコル・ドライバに対する標準ＮＤＩＳインターフェースをサポートする。共用メモリＮＤＩＳデバイス・ドライバ１８０２は、ＮＤＩＳ階層化ドライバとして機能する。より詳細には、共用メモリＮＤＩＳデバイス・ドライバ１８０２は、ＮＤＩＳミニポート・インターフェースに適合して、ＮＤＩＳインターフェースを使用してＮＤＩＳデバイス・ドライバを介して通信を行う任意のネットワーク・プロトコルをサポートする。例えば、ＴＣＰ／ＩＰプロトコルおよびＳＰＸ／ＩＰＸプロトコルを実施することができる。
【０２９２】
共用メモリＮＤＩＳデバイス・ドライバ１８０２のための下端インターフェースは、セクションＩＩＩ．Ｂ．に記載したコア・サービス・ソフトウェアに対する専用インターフェースであり、これは、グローバル共用メモリ機能を直接にサポートする。このインターフェースは、通常の階層化ＩＯドライバ・インターフェース（ＩＲＰ）と密結合ＩＯドライバ・インターフェース（直接手続きコール）の混成を含む。ＩＲＰは、非同期機能のために使用する。密結合ＩＯドライバ・インターフェースは、同期機能のために使用する。
【０２９３】
共用メモリＮＤＩＳデバイス・ドライバ１８０２の主要な機能は、ＮＤＩＳインターフェースをコア・サービスＡＰＩ上にマップすることである。ネットワーキング・パケット（ＮＤＩＳパケット）を含んだローカル・システム・バッファが、ＮＤＩＳインターフェースを介して、共用メモリＮＤＩＳデバイス・ドライバ１８０２に渡される。共用メモリＮＤＩＳデバイス・ドライバ１８０２が、ネットワーク・パケットをローカル・システム・バッファ（パーティション排他メモリ・ウインドウ内の）から共用メモリ・バッファにコピーする。共用メモリ・バッファに対する参照が、ネットワーク・パケット内の宛先ＭＡＣアドレスによって選択された別のパーティション内の適切な共用メモリＮＤＩＳデバイス・ドライバに対する待ち行列に入れられる。同報通信またはマルチキャストのＭＡＣアドレスを有するパケットが、共用メモリＮＤＩＳデバイス・ドライバ１８２０の共用メモリグループ内のデバイス・ドライバをサポートする各パーティションに対して直接に送信を行うのに、必要とされるだけの共用メモリ・バッファにコピーされ、これにより、同報通信／マルチキャストをシミュレートする。共用メモリから受信したバッファは、ＮＤＩＳパケットに再び圧縮され、ＮＤＩＳインターフェースに提供されて、そこでそれらは、ネットワーク・プロトコル・ドライバによって処理される。このＮＤＩＳパケットは、共用メモリＮＤＩＳデバイス・ドライバ１８０２に戻される。
【０２９４】
共用メモリＮＤＩＳデバイス・ドライバ１８０２は、ＳｅｎｄＬｉｓｔと呼ばれる各パーティションごとの共用メモリ・バッファのリストを維持して、コア・サービス・ソフトウェアを介して共用メモリ・バッファを割り振ることと割り振り解除することのオーバーヘッドを抑える。共用メモリ・バッファは、ネットワーク・パケット情報を別のパーティションに送信するために、ＳｅｎｄＬｉｓｔから選択される。受信するパーティションは、発信パーティションＳｅｎｄＬｉｓｔに対応するハンドルのＲｅｖＬｉｓｔを有することになる。受信するパーティションは、メッセージ処理を終了したとき、バッファがＳｅｎｄＬｉｓｔ内で使用可能状態に戻されるべきであることを示すメッセージを送信する。ＳｅｎｄＬｉｓｔ内のバッファの数が、最小値よりも低下したとき、追加のバッファが、コア・サービス・ソフトウェアから割り振られる。ＳｅｎｄＬｉｓｔ内のバッファの数が最大で、すべてが使用されていないとき、バッファは、割り振り解除されて、コア・サービス・ソフトウェアに戻される。最小ＳｅｎｄＬｉｓｔサイズおよび最大ＳｅｎｄＬｉｓｔサイズは、コード内で所定のデフォルト値を有するが、これらは、登録内の特定キーを設定することによってオーバーライドされ得る。
【０２９５】
共用メモリＮＤＩＳデバイス・ドライバ１８０２は、そのパーティション１８０４上でコア・サービス・ソフトウェアを使用して、共用メモリＮＤＩＳデバイス・ドライバ１８０２のコピーを実行しているすべてのパーティション間のＦＤＤＩ  ＬＡＮをシミュレートする。共用メモリＮＤＩＳデバイス・ドライバ１８０２は、ＦＤＤＩ  ＬＡＮの基本セマンティックスをサポートする。これはポイント間メッセージ交換、同報通信メッセージ交換、マルチキャスト・メッセージ交換、および４４９１バイトメッセージのサイズを含む。
【０２９６】
Ｂ．ワイヤによる通信の外観を維持すること
コンピュータ・システムの別の例としての適用形態およびそのグローバル共用メモリ管理では、パーティション間（すなわち、Ｐｏｄ、サブＰｏｄ、またはオペレーティング・システム）でのメモリの共用が、ワイヤによる通信の外観を維持しながら達せられる。これは、従来のアプリケーション・プログラム、従来のアプリケーション・プログラム・インターフェース（ＡＰＩ）、ならびに従来の通信ハードウェアおよびソフトウェアを使用して、データを共用メモリに送信することを可能にする。この適用形態は、セクションＩＩＩ．Ａ．で記載した機構の上に構築され、そこでは、パーティション間通信は、ポーリング技法に従って管理される。
【０２９７】
図２２は、本発明のコンピュータ・システム２００の例としての構成であり、これは、パーティション間またはオペレーティング・システム間でのワイヤによる通信の外観を得るのに必要な追加のソフトウェア構成要素を含む。図２２では、２つのパーティション２２０２ａおよび２２０２ｎが示され、そのそれぞれは、例えば、単一のサブＰｏｄを含んでいる。各サブＰｏｄ２２０２は、別個のオペレーティング・システム２２０６の制御下で動作する。オペレーティング・システム２２０６は、同一オペレーティング・システムの別々のインスタンスであり得る、またはそれらは、異なるオペレーティング・システムであり得る。１つまたは複数のアプリケーション・プログラム２２０８が、各パーティション２２０２上で、そのパーティション上で動作するオペレーティング・システム２２０６の下で動作することができる。
【０２９８】
１つまたは複数のアプリケーション・プログラム・インターフェース（ＡＰＩ）モジュール２２１０が、メッセージを送信するために、１つまたは複数のアプリケーション・プログラム２２０８に関連付けられていることが可能である。例えば、サブＰｏｄ２２０２ａ上で、アプリケーション・プログラム２２０８ａは、ＡＰＩ２２０８ａを使用して、メッセージ送信オペレーションを開始することができる。ＡＰＩ２２０８ａは、ネットワーク通信インターフェース・モジュール２２１２に対する入力のためにメッセージを準備する。
【０２９９】
ネットワーク・インターフェース通信インターフェース２２１２は、ネットワークを介するなどして、パーティション間で互いにインターフェースを取る従来のシステムであり得る。ネットワーク・インターフェース通信モジュール２２１２は、ネットワーク・ドライバ２２１６を介して従来のネットワーク型ワイヤ２２１４上で、他のパーティション２２０２に転送するため、メッセージをフォーマットする。例としての実施形態では、ネットワーク・インターフェース通信モジュール２２１２は、メッセージを、あたかもそれらが従来のネットワーク型ワイヤ転送システム２２１４に向かうかのように、回線２２２０ａおよび２２２０ｂ上に出力する。したがって、この時点まで、パーティション２２０２ａからのメッセージの送信は、従来方式で実行される。
【０３００】
すべてのメッセージを回線２２２０ａおよび２２２０ｂ上で、ネットワーク通信インターフェース・モジュール２２１２から従来のネットワーク・ドライバ２２１６に送信する代わりに、共用メモリ１６０に向けられたメッセージは、共用メモリ・ドライバ２２１８を介して処理される。例としての実施形態では、宛先アドレスが、各メッセージに関連付けられている。アドレスが、ワイヤ２２１４に結合されたコンピュータまたは他の宛先に対応する場合には、メッセージは、ネットワーク・ドライバ２２１６を介してワイヤ２２１４に送信される。しかし、そのアドレスが共用メモリ１６０内のアドレスに対応する場合、そのメッセージは、共用メモリ・ドライバ２２１８にダイレクトされる。
【０３０１】
共用メモリ・ドライバ２２１８は、共用メモリ１６０への転送およびそこへの記憶のために、メッセージを受信して、再フォーマットする。再フォーマットは、例えば、他のパーティション２２０２上で動作するアプリケーション・プログラム２２０８によって認識され得る標準形式にメッセージを再フォーマットすることを含み得る。再フォーマットは、また、例えば、共用メモリ１６０に関連する仕様に従った再フォーマットも含み得る。
【０３０２】
図２３を参照すると、システム２２００のさらなる詳細が図示されている。この例としての実施形態では、パーティション２２０２ａ上のオペレーティング・システム２２０６ａは、Ｕｎｉｓｙｓ  Ｃｏｒｐｏｒａｔｉｏｎから市販される２２００オペレーティング・システムとして図示され、またパーティション２２０２ｎ上のオペレーティング・システム２２０６ｎは、Ｗｉｎｄｏｗｓ  ＮＴまたはＵＮＩＸオペレーティング・システムとして図示されている。
【０３０３】
図２３の例としての実施形態では、ネットワーク通信インターフェース・モジュール２２１２が、オープン・システム相互接続（ＯＳＩ）７層通信モデルの従来のトランスポート層（すなわち、層４）を実施する１つまたは複数のソフトウェア・モジュール２３１０を含む。ＯＳＩ７層通信モデルは、関連分野の技術者にはよく知られている。このトランスポート層は、いくつかの異なるプロトコルを使用して実施することが可能であり、これは、伝送制御プロトコル（ＴＣＰ）およびユーザー・データグラム・プロトコル（User Datagram Protocol - ＵＤＰ）を含む。選択されたプロトコルは、その後の通信オペレーション中の信頼性および重複の可能性を決定することになる。例としての実施形態では、ＴＣＰを利用して、確実な重複のないデータ送達を提供することができる。
【０３０４】
トランスポート層２３１０を実施するソフトウェア・モジュールは、７層ＯＳＩプロトコルの層３であるネットワーク層２３１２を実施するソフトウェア・モジュールとインターフェースを取る。これは、例えば、業界承認のインターネット・プロトコル（ＩＰ）およびインターネット制御メッセージ・プロトコル（ＩＣＭＰ）を使用して実行することができる。ＩＰは、データ転送のために使用されるプロトコルを指定する。ＩＣＭＰは、エラーの処理と分析が実行される方式を定義する。
【０３０５】
層３  ２３１２を実施するソフトウェア・モジュールは、通信ハンドラ２３１４とインターフェースを取る。通信ハンドラ２３１４は、メッセージ・データをパケットにフォーマットする。フォーマットは、いくつかの通信プロトコルのうちの選択されたものに準拠することが可能である。これらのプロトコルは、例えば、イーサネット、トークンリング、ファイバ分散データ・インターフェース（ＦＤＤＩ）、非同期転送モード（ＡＴＭ）などを含み得る。例としての実施形態では、イーサネット・プロトコルを実施するイーサネット・ハンドラが使用される。
【０３０６】
ローカル・メモリ内でメッセージがフォーマットされた後、通信ハンドラ２３１４が、デバイス・ドライバを呼び出す。「通常の（normal）」通信シナリオの最中、Ｉ／Ｏドライバが呼び出されて、ネットワークを介して通信を実行する。例としての実施形態では、これは、Ｕｎｉｓｙｓ  Ｃｏｒｐｏｒａｔｉｏｎから市販されるネットワーク入力／出力デバイス・ドライバ（ＮＩＯＰ）２３１６である。ＮＩＯＰ２３１６は、ＯＳＩモデルの層２および１を実施し、これらは、それぞれ、このモデルのデータリンクおよび物理層である。
【０３０７】
通信が、ネットワークを介してではなく、共用メモリ１６０を介して実行されるとき、共用メモリ・ドライバ２２１８が呼び出される。例えば、パーティション２２０２ａ上で、通信が、ネットワークを介してではなく、共用メモリ１６０を介して実行されるとき、通信ハンドラ２３１４が、ＮＩＯＰドライバ２３１６の代わりに、ＨＭＰ共用メモリ・ドライバ２３１８を呼び出すことができる。通信ハンドラ２３１４は、ＮＩＯＰドライバ２３１６に対するコールとＨＭＰ共用メモリ・ドライバ２３１８に対するコールを区別する必要がない。通信ハンドラ２３１４の視点からは、すべてのメッセージは、ネットワークを介して転送される。オペレーティング・システムが、下記にさらに説明するとおり、これら２つのタイプのコールのうち、どちらを行うかを決定する。ＨＭＰ共用メモリ・ドライバ内に含まれる機能性を下記に説明する。
【０３０８】
パーティション２２０２ａ上の２２００オペレーティング・システム・ソフトウェア・モジュール内に含まれる機能性は、パーティション２２０２ｎのＮＴまたはＵｎｉｘのオペレーティング・システム内に常駐する同様のモジュール内に含まれる。図２３で、これらのモジュールは、ＡＰＩ２２１０ｎ（Ｗｉｎｓｏｃｋ／Ｓｏｃｋｅｔとして示される）およびネットワーク通信インターフェース・モジュール２２１２（ＴＣＰ／ＵＤＰ／ＩＰＳ２３１０ｎ、ＩＰ／ＩＣＭＰ２３１２ｎ、およびイーサネット・ハンドラ２３１４ｎとして示される）を含み得る。メモリ１６０との通信は、ＨＭＰ共用メモリＮＩＣデバイス・ドライバ２３２０を介する。２２００オペレーティング・システム・ソフトウェア・モジュールの場合と同様に、ＡＰＩおよび通信ソフトウェアを含むアプリケーション・プログラムにインターフェースを取るソフトウェアの層は、ネットワーク通信または共用メモリ通信の間で区別をしない。これらのソフトウェア構成要素は、すべての通信オペレーションが、ネットワークを介して行われているものと見なす。
【０３０９】
図２４は、本発明の例としての実施形態による、Ｗｉｎｄｏｗｓ  ＮＴ環境内に実装されたＨＭＰ共用メモリ・ドライバ２３２０のさらなる詳細を提供する。図２４では、ＮＴユーザー・アプリケーション２４１０が、動的リンク・ライブラリ２４１２に対するインターフェースを取る。動的リンク・ライブラリ２４１２は、Ｗｉｎｄｏｗｓ  Ｓｏｃｋｅｔ２４１４とインターフェースを取る。Ｗｉｎｄｏｗｓ  Ｓｏｃｋｅｔ２４１４は、ＮＴシステムのためのＭｉｃｒｏｓｏｆｔ定義のＡＰＩであるトランスポート・ドライバ・インターフェース（ＴＤＩ）２４１６とインターフェースを取る。ＡＰＩ２４１６は、ＯＳＩ通信モデルの層３および４を実行するＴＣＰ／ＩＰモジュール２４１８に対してインターフェースを取る。ＴＣＰ／ＩＰモジュール２４１８は、Ｍｉｃｒｏｓｏｆｔおよび３Ｃｏｍ  Ｃｏｒｐｏｒａｔｉｏｎｓによって開発されたネットワーク・ドライバ・インターフェース仕様（ＮＤＩＳ）に従って設計されたＡＰＩ２４２０を介して、デバイス・ドライバとインターフェースを取ることができる。デバイス・ドライバは、例えば、イーサネット・ネットワークを介してメッセージ伝送を実行するＣＯＳＴイーサネット・デバイス・ドライバ２４２２などの市販のドライバであり得る、またはＨＭＰ共用メモリＮＩＣデバイス・ドライバ２３２０であり得る。ＡＰＩ２４２０がデバイス・ドライバにコールを行うとき、ＡＰＩ２４２０は、２つのタイプのコールの間で区別を行わず、すべての通信は、ネットワークを介して実行されているように見える。
【０３１０】
ＨＭＰ共用メモリＮＩＣデバイス・ドライバ２３２０は、例えば、ＶＬＡＮ２４２４モジュール、ＣＯＮＴＲＯＬ２４２６モジュール、ＳＨＭ２４２８モジュール、およびＢＩＯＳ２４３０モジュールを含み得る。これらのモジュールの動作および機能性を下記に説明する。
【０３１１】
図２５は、本発明による図２２〜２４に図示したソフトウェア構成要素の動作のさらなる詳細を図示する処理の流れ図である。このプロセスは、ステップ２５１０で開始し、そこで、アプリケーション・プログラムが、メッセージおよび関連するヘッダ情報をローカル・メモリ内に作成する。
【０３１２】
ステップ２５１１で、アプリケーション・プログラムが、関連するＡＰＩを呼び出す。プログラムは、ＡＰＩに、メッセージの長さ、目標ホストのＩＰアドレス、およびメッセージ・データに対する１つまたは複数のポインタを渡す。メッセージがネットワークを介して渡される場合、ＩＰアドレスは、ＮＩＯＰ（２２００オペレーティング・システム側の）またはイーサネットＬＡＮ  ＮＩＣデバイス・ドライバ（ＮＴ側またはＵＮＩＸ側の）などのデバイス・ドライバを指定する。メッセージが共用メモリを介して渡される場合、ＩＰアドレスは、関連するＨＭＰ共用メモリ・ドライバが使用されるべきことを示す。
【０３１３】
ステップ２５１２で、ＯＳＩモデルの層３および４を実行するソフトウェア・モジュールが、様々なヘッダをメッセージに追加して、選択された通信プロトコルの要件に適合するようにメッセージ・データをフォーマットする。例えば、イーサネット・プロトコルは、単一のメッセージ伝送が１５００バイトより多くを含み得ないことを必要とする。したがって、より長いメッセージは、複数のメッセージ伝送を介して送信されるように、複数のバッファにフォーマットしなければならない。
【０３１４】
ステップ２５１４で、通信ハンドラ（これは、例としての実施形態では、イーサネット・ハンドラである）が、デバイス・ドライバのアドレスを求めて、オペレーティング・システム（ＯＳ）に対してコールを行う。関連分野の技術者は、例えば、より大きなネットワーク・データ・パケット・サイズを有するプロトコルを含め、他のプロトコルを使用するのが可能であることを理解されよう。
【０３１５】
一般的に、通信ハンドラは、伝送のため、いかなるアプリケーション・メッセージも受信される前に、デバイス・ドライバに接続することになる。通信ハンドラは、それ自体の「同報通信（broadcast）」メッセージをネットワーク介して発信して、皆がその識別で応答するように求める。これは、結果として、ＴＣＰ／ＩＰの場合、ＩＰアドレスが戻されることになる。このようにして、通信ハンドラは、どのＩＰアドレスにアクセスできるかを知る。
【０３１６】
ステップ２５１６で、オペレーティング・システムが、その特定のＩＰアドレスに関連するデバイス・ドライバア・ドレスを選択して、そのアドレスを通信ハンドラに渡す。例としての実施形態では、オペレーティング・システムは、ＩＰアドレスを様々なデバイス・ドライバにマップするテーブルを維持する。デバイス・ドライバア・ドレスは、ネットワーク通信を実行するデバイス・ドライバ（ＮＩＯＰドライバまたはイーサネットＬＡＮ  ＮＩＣドライバなどの）を指定することができる。別法では、デバイス・ドライバは、共用メモリを介して通信を実行するデバイス・ドライバを指定することができる。通信ハンドラは、２つのタイプのアドレスの間で区別を行うことができない。共用メモリのための２２００オペレーティング・システム・デバイス・ドライバは、Ｕｎｉｓｙｓに譲渡された米国特許第５６５９７９４号に記載されるとおり、２２００オペレーティング・システムＮＩＯＰから適合することができる。
【０３１７】
ステップ２５１８〜２５２８では、通信が共用メモリを介して実行されるべきことをアドレスが示すとき、ＨＭＰ共用メモリ・ドライバ（２２００オペレーティング・システム）２３１８またはＨＭＰ共用メモリＮＩＣデバイス・ドライバ（ＮＴ／ＵＮＩＸ）２３２０が呼び出される。呼び出されたドライバは、まず、目標ホストＩＤをノードのうちの１にマップする。これは、送信するノードの出力待ち行列内にある待ち行列のうちのどれが利用されるかを決定する。
【０３１８】
ステップ２５１８で、目標（受信）システムのための待ち行列がリセットを必要とするかどうかを呼び出されたドライバが決定する。目標システムのための待ち行列がリセットを必要とする場合、処理は、ステップ２５２６に進み、そこで、送信するシステム（または送信する「ノード」）が、メッセージを廃棄して、目標システム（または目標「ノード」）のための待ち行列内にＮｅｅｄ＿Ｒｅｓｅｔフラグを設定する。Ｎｅｅｄ＿Ｒｅｓｅｔフラグが設定されたとき、リセット手続きを実行することができる。
【０３１９】
ＵＤＰではなくＴＣＰプロトコルを使用する場合、メッセージは、メッセージの損失なしに廃棄することができる。これは、メッセージが受信されたことを示す受信するシステムからの肯定応答をＴＣＰが待つためである。これは、メッセージＩＤを使用して追跡される。各メッセージは、関連する肯定応答が受信されるまで、送信するシステムのローカル・ストーレッジ内に保持される。肯定応答が所定の期間内に受信されなかった場合、そのメッセージを再送信するように、別のコールがオペレーティング・システムに対して行われる。ＴＣＰではなくＵＤＰを利用する場合、メッセージは、失われる。というのは、ＵＤＰは、受信するシステムからの肯定応答の受信を追跡しないからである。
【０３２０】
通常、送信するアプリケーションが、ＵＤＰを使用するか、またはＴＣＰを使用するかを決定する。この決定は、共用メモリにはトランスペアレントである。例としての実施形態では、本発明の共用メモリは、共用メモリを扱うデバイス・ドライバと接続するＵＤＰプロトコル、ＴＣＰプロトコル、およびより高い層のプロトコルをサポートする。通信ハンドラの視点からは、本発明の共用メモリは、余り多くのノードが接続されていない、単にもう１つのＬＡＮに過ぎない。
【０３２１】
目標待ち行列がリセットを必要としない場合、処理は、ステップ２５２０に進み、そこで、送信するシステムは、目標待ち行列がいっぱいであるかをチェックして決定する。例としての実施形態では、これは、適切なＥｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔ（送信するノードの出力待ち行列内の）内に記憶されている値を関連するＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔ（受信するノードの入力待ち行列内の）に比較することによって行われる。新しいエントリを目標出力待ち行列内に入れることが、Ｅｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔをＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔに等しくする場合には、目標出力待ち行列はいっぱいである。
【０３２２】
目標出力待ち行列がいっぱいであるとき、処理は、ステップ２５２８に進み、そこで、メッセージが廃棄される。メッセージは、ステップ２５１８および２５２６に関連して前述したとおり、後に再送信することができる。
【０３２３】
目標出力待ち行列がいっぱいではないとき、処理は、ステップ２５２２に進み、そこで、共用メモリ内のメッセージ・バッファが、送信するノードのメッセージ・バッファ・プールから得られる。関連分野の技術者は、これは様々な方式で実施するのが可能なことを理解されよう。例としての実施形態では、メモリ管理モジュールは、空のバッファを追跡するために、各ノード上の共用メモリ・デバイス・ドライバに関連付けられている。
【０３２４】
好ましくは、各出力待ち行列ごとに、例えば、少なくとも５１１バッファを含んだバッファ・プールが利用可能となる。各バッファは、例えば、４２７個の８バイト・ワードの長さであり得る。例としての実施形態では、各バッファ・プールは、各ワードが８バイト長である４Ｋワードページ境界で開始する。つまり、新しいバッファ・プールは、各４Ｋバイトページ境界ごとに開始することが可能である。これは、より効率的なメモリ管理を可能にする。
【０３２５】
例えば、各バッファ・プールは、５１１＊４２７＊８／／４０９６＝１７４８９９２ワード長であり、ここで、５１１は、待ち行列エントリの数であり、４２７は、１５００バイト長のメッセージを扱うのに必要なワード数および２２００オペレーティング・システム要件を扱うのに必要なエクストラ・ヘッダである。１５００を４で割ると３７５に等しく、これに５０個の最大部分およびバッファ長およびヘッダ長として２を足して、合計４２７になる。８は、パーティションの最大数であり、４０９６は、保護の理由でページ境界まで切り上げるためのものである。
【０３２６】
バッファを得た後、処理は、ステップ２５２４に進み、そこで、ローカル・メモリから共用メモリ・バッファにコピーすることによって、メッセージが出力待ち行列に入れられる。この処理中、ヘッダが生成されて、これが、ＯＳＩモデルの物理層、層１で定義されるヘッダとして機能する。
【０３２７】
共用メモリ・バッファ内のヘッダは、物理層と見なすことができる。というのは、ＭＡＣ層およびＬＬＣ層は、共用メモリ・デバイス・ドライバによって受信されたとき、メッセージ上にあるからである。これらのヘッダは、少なくともＬＬＣ層が、受信するノードで行われ得る経路指定のために必要なため、残ることになる。バッファ内のヘッダは、２２００型プロセッサおよびＩｎｔｅｌプラットフォームの異なるメモリ・アクセス特性のために必要であり、物理層でデータがどのようであるかを表す。
【０３２８】
２２００オペレーティング・システムが、メッセージ送信オペレーションを実行しているとき、ブロック転送圧縮（ＢＴＰ）ハードウェア命令が、メッセージ・データをローカルから共用メモリに移動するのに使用される。この命令は、メッセージ・データを９ビット・バイトから８ビット・バイトに変換して、ゼロ充填オペレーションおよびビッグ・エンディアン（２２００型プロセッサ）−リトル・エンディアン（Ｉｎｔｅｌ）変換を実行する。別法として、この変換は、ソフトウェア内で実行することが可能である。
【０３２９】
例としての実施形態では、メッセージ・バッファに対するポインタを出力待ち行列内の適切な位置に追加して、次に、適切なＥｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔを送信するノードの出力待ち行列で増分することによって、メッセージが出力待ち行列に追加される。このポインタは、送信するノードのバッファ領域の始めからのオフセットである。好ましくは、すべてのノードが共用メモリ内の同一アドレスに達し得るように、実アドレスまたは仮想アドレスではなく、オフセットを使用する。（受信するノードの仮想アドレスまたは実アドレスは、必ずしも、別のノードの仮想アドレスまたは実アドレスとして同一ロケーションにマップされない。）
【０３３０】
図２３および２４に関して前述したとおり、２２００オペレーティング・システム・ノードがメッセージを送信しているとき、デバイス・ドライバア・ドレスを求めて、オペレーティング・システムに対してコールが行われる。２２００オペレーティング・システムは、ＩＰアドレスを使用して、通信オペレーション中にＮＩＯＰデバイス・ドライバが利用されるべきか、またはＨＭＰ共用メモリ・ドライバが利用されるべきかを判断する。ＮＴノードがメッセージを送信している場合、同様の機能性が提供される。ＶＬＡＮ構成要素が、ＮＤＩＳからメッセージ送信コールを受信する。ＶＬＡＮは、このコールをＣＯＮＴＲＯＬに渡して、これが、そのメッセージ送信オペレーションに関連するＩＰアドレスをイーサネット・デバイス・ドライバにマップするか、またはＳＨＭデバイス・ドライバにマップするかを決定して、適切なデバイスコールを行う。ＳＨＭモジュールが、ステップ２５１８〜２５２８で図示される機能性を実行する。
【０３３１】
メッセージを受信するために、システム内の各ノードは、システム内の各ノードごとの出力待ち行列を検査するループを実行する。例としての実施形態では、各ノードは、より少ないノードが利用可能な場合でさえ、あたかもシステムが最大数の８つのノードで完全に構成されているかのように、この検査を実行する。利用可能ではないノードの出力待ち行列は、入手可能なメッセージが存在しないように見えるように、初期設定することができる。各ノードは、それ自体の出力待ち行列を検査して、それがそれ自体にメッセージを送信しているかを、それが一般的には発生しないにしても、決定する。これらは、コードを単純化するために実施することが可能な設計判断である。
【０３３２】
別法では、利用可能なノードの数および識別は、実際に存在するノードの出力待ち行列だけが検査されるように、システム初期設定中に、各ノードに対して通信され得る。この実施形態では、共用メモリに参加するノード数の各変更が、その変更が発生したときに、参加ノードに通信される。
【０３３３】
図２６は、各パーティションごとに実行される例としてのメッセージ受信処理を図示している。この処理は、ステップ２６１０で開始し、そこで、メッセージ受信ノードが、別のサブＰｏｄの出力待ち行列内のＮｅｅｄ＿Ｒｅｓｅｔフラグを検査する。例えば、ノード０が、ノード１出力待ち行列内のノード１−ノード０間待ち行列内のＮｅｅｄ＿Ｒｅｓｅｔフラグを検査する。Ｎｅｅｄ＿Ｒｅｓｅｔフラグが設定されている場合、処理は、ステップ２６１２に進み、そこで、初期設定シーケンスが実行される。
【０３３４】
Ｎｅｅｄ＿Ｒｅｓｅｔフラグが設定されていない場合、処理は、ステップ２６１４に進み、そこでメッセージ受信するサブＰｏｄが、適切なＥｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔフラグをそれ自体の出力待ち行列内のそれ自体のＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔフラグと比較する。例えば、図１６Ａおよび１６Ｂでは、ノード０が、ノード１出力待ち行列内のノード１−ノード０間待ち行列内のＥｎｑｕｅｕｅｄ＿ｏｆｆｓｅｔフラグをそれ自体の出力待ち行列（Ｄｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔのワード１）内のノード１に対するＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔに比較する。その２つのフィールド内に記憶されている値が等しい場合、その待ち行列は空であり、処理は、ステップ２６２４に進み、そこでルーチンをエグジット（終了）する。
【０３３５】
メッセージが入手可能である場合、処理は、ステップ２６１６に進み、そこで利用可能なバッファが、ローカル・メモリ内で得られる。共用メモリ・ドライバのためのバッファ・プールは、下記に説明するとおり、通信ハンドラと協力して、オペレーティング・システムによって維持され得る。バッファが利用可能でない場合、待ちループ２６１７を実行することができる。ステップ２６１８で、バッファが得られて、共用メモリに対するポインタをリトリーブするのに、待ち行列に入れるオフセットとしてＤｅｑｕｅｕｅｄ＿ｏｆｆｓｅｔを使用する。このポインタは、好ましくは、送信するサブＰｏｄのバッファ・プールの始めからのオフセットである。このポインタを使用して、共用メモリ内の送信するサブＰｏｄのメッセージ・バッファのうちの１つから、メッセージ・データをリトリーブする。
【０３３６】
ステップ２６２０で、メッセージ・データが、ローカル・バッファにコピーされる。２２００オペレーティング・システムからメッセージを受信するＮＴ／ＵＮＩＸサブＰｏｄ上で、短縮処理を実行することができ、これは、メッセージバイトをワードのすべてのビット（例えば、６４ビット）を使用する連続するロケーションに移動する。これは、２２００オペレーティング・システムのメッセージ・データが、ワードの最下位４バイトのみを占有し、残りがゼロ充填されているため、好ましい。２２００オペレーティング・システム側では、メッセージ・データは、ハードウェア・ブロック転送圧縮解除（ＢＴＵ）命令を使用して、共用メモリからコピーすることができ、この命令は、メッセージ・データを８ビット・バイトから９ビット・バイトに変換して、リトル・エンディアン（Ｉｎｔｅｌ）−ビッグ・エンディアン（２２００型プロセッサ）変換を実行する。この変換は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実行することができる。
【０３３７】
別法では、メッセージは、共用メモリ内に２２００型プロセッサ形式で格納することができ、これにより、メッセージ受信するＩｎｔｅｌプラットフォームが、ビッグ・エンディアンとリトル・エンディアンの間で変換を行って、２２００型プロセッサによって必要とされるエキストラ・ビットを追加／除去することになる。
【０３３８】
メッセージ・データがローカル・バッファにコピーされた後、処理は、ステップ２６２２に進み、そこで、共用メモリ・ドライバが、メッセージをローカル・メモリ待ち行列に追加する。共用メモリ・ドライバは、次に、受信処理（例えば、アプリケーション２２０８）が、メッセージを処理するのに使用可能であることを知る検査をする。２２００オペレーティング・システム側では、共用メモリ・ドライバが、Ｕｎｉｓｙｓ  Ｃｏｒｐｏｒａｔｉｏｎによって開発された協調処理通信プログラム（co-operative processing communications program - ＣＰＣＯＭＭ）が「スリープ（sleeping）」状態であることをフラグが示しているかを知る検査をする。ＣＰＣＯＭＭは、メッセージが送信されたときに、通信プロトコル層を扱う。ＣＰＣＯＭＭがスリープ状態にある場合、共用メモリ・ドライバは、新しく待ち行列に入れたメッセージでＣＰＣＯＭＭを起こすために、オペレーティング・システムに対してコールを行う。別法では、メッセージがローカル・メモリ内で入手可能かを決定するために、ポーリングを利用することが可能である。
【０３３９】
図２７は、受信メッセージを処理する２２００オペレーティング・システム側でのＣＰＣＯＭＭのための例としての処理を図示している。送信するメッセージの場合と同様に、ＣＰＣＯＭＭは、受信メッセージが、共用メモリを介して転送されたことを知らない。ＣＰＣＯＭＭの視点からは、メッセージは、ネットワークを介して送信／受信される。
【０３４０】
ＣＰＣＯＭＭは、割込みが２２００オペレーティング・システムから受信されたとき、「スリープ」状態にあることが可能である。この割込みは、メッセージがＣＰＣＯＭＭのローカル・メッセージ待ち行列に入れられたことを示す共用メモリ・ドライバからのコールをオペレーティング・システムが受信したことの結果である。ＣＰＣＯＭＭに割込みがあったとき、それは、処理ループ２７０８に入る。この処理は、ステップ２７１０で開始し、そこでバッファが、ローカル・メモリ内で獲得される。ステップ２７１２で、ＣＰＣＯＭＭが、２２００オペレーティング・システムを呼び出して、バッファ・アドレスを渡す。２２００オペレーティング・システムは、そのバッファを、必要に応じて、デバイス・ドライバのうちの１つに関連するバッファ・プールのうちの１つに入れる。共用メモリ・デバイス・ドライバは、これらのバッファ・プールのうちの１つに関連付けられている。これらのプール内のバッファが、次に、受信メッセージ・データに対して使用可能である。
【０３４１】
バッファ・アドレスがオペレーティング・システムに渡された後、処理は、ステップ２７１４に進み、そこで、メッセージがその入力待ち行列で入手可能であるかをＣＰＣＯＭＭが知る検査をする。ＣＰＣＯＭＭが、オペレーティング・システムから割り込まれたと想定すると、メッセージは、入手可能である。
【０３４２】
ステップ２７１６で、メッセージが入手可能であるとき、ＣＰＣＯＭＭが、そのメッセージをその待ち行列から待ち行列解除して、それをコードの上層に渡す。処理は、次に、ステップ２７１０に戻り、そこでＣＰＣＯＭＭが、別のバッファを獲得する。
【０３４３】
ステップ２７１４で、ＣＰＣＯＭＭが、他に入手可能なメッセージがないと分かった場合、処理は、ステップ２７１８に進み、そこで、十分な空のバッファが、様々なデバイス・ドライバによる使用のために利用可能であるかどうかをＣＰＣＯＭＭが決定する。十分なバッファが利用可能である場合、処理は、ステップ２７２０に進み、そこで、ＣＰＣＯＭＭは再び、スリープ状態に入る。
【０３４４】
Ｖ．結論
本発明の実施形態は、ハードウェア、ソフトウェア、またはそれらの組み合わせで実施できることを理解されたい。そうした実施形態では、様々な構成要素およびステップをハードウェア、ファームウェア、および／またはソフトウェアに実装して、本発明の機能を実行することができる。現在、入手可能である、または将来開発されるコンピュータ・ソフトウェア言語および／またはハードウェア構成要素を本発明のそうした実施形態で使用することができる。詳細には、前記に、また下記の添付に議論し、提供する疑似コードが、そのソフトウェア実施形態を作成するために特に役立つ。
【０３４５】
本発明は、その好ましい実施形態に関連して示し、説明してきたが、本発明の趣旨および範囲を逸脱することなく、そこで様々な形態および詳細の変更を加え得ることが、当分野の技術者によって理解されよう。
【表１０】
2006216068.tif 000012
【表１１】
2006216068.tif 000013
【表１２】
2006216068.tif 000014
【表１３】
2006216068.tif 000015
【表１４】
2006216068.tif 000016
【表１５】
2006216068.tif 000017
【表１６】
2006216068.tif 000018
【表１７】
2006216068.tif 000019
【表１８】
2006216068.tif 000020
【表１９】
2006216068.tif 000021
【図面の簡単な説明】
【０３４６】
【図１】本発明の好ましい一実施形態を実施するのに適した一環境のブロック図である。
【図２】本発明の好ましい一実施形態によるコンピュータ・システムのブロック図である。
【図３】排他メモリ・ウインドウと２つの共用ウインドウへのアクセス権とをそれぞれが有する４つのパーティションを伴った一例におけるメモリの図である。
【図４】排他メモリ・ウインドウをそれぞれが有する２つのパーティションを伴った一例におけるメモリの図である。
【図５】排他メモリ・ウインドウと１つの共用ウインドウへのアクセス権とをそれぞれが有する３つのパーティションを伴った一例におけるメモリの図である。
【図６】本発明を動作において実証するのに用いられる例示的なメモリ構成を示す図である。
【図７】図６に示すメモリ構成に本発明を適用した結果を示す図である。
【図８】フォワード・ウインドウイング・アルゴリズムを示すフローチャートである。
【図９】フォワード変換アルゴリズムを示すフローチャートである。
【図１０】本発明による、メモリ・システムが単一の共用ウインドウを含む一実施形態を示す図である。
【図１１】本発明の適用例を示す図である。
【図１２】本発明の適用例を示す図である。
【図１３】本発明による、例示的な初期化プロセスのためのプロセス・フローチャートを示す図である。
【図１４】本発明の共用メモリ管理方法の第１の実施形態による、共用メモリに使用できるデータ構造を示す図である。
【図１５】第１の実施形態による、メッセージ待ち行列エリアの例示的な一実施形態を示す図である。
【図１６Ａ】第１の実施形態による、ノード出力待ち行列データ構造中に含めることのできる例示的な情報を示す図である。
【図１６Ｂ】第１の実施形態による、ノード出力待ち行列データ構造中に含めることのできる例示的な情報を示す図である。
【図１７】第１の実施形態による、例示的なメッセージ・データ構造を示す図である。
【図１８】共用メモリを介してパーティション間で通信するための本発明のコンピュータ・システムおよび方法の例示的な使用を示す図である。
【図１９】本発明の共用メモリ管理方法の代替実施形態による共用メモリ・ウインドウのレイアウトを示す図である。
【図２０】代替実施形態による制御構造ヘッダのコンテンツを示す図である。
【図２１】代替実施形態による割り振り構造のコンテンツを示す図である。
【図２２】本発明を利用するソフトウェアにより、オペレーティング・システム同士が、ワイヤで通信する様相を維持しながらも共用メモリによって通信することができる、本システムのコンピュータ・システムおよび方法の別の例示的な使用を示すブロック図である。
【図２３】図２２に示すソフトウェアをさらに詳細に示す図である。
【図２４】図２２に示すソフトウェアであって、ＷｉｎｄｏｗｓＮＴ環境で実行されるように設計されたソフトウェアをさらに詳細に示す図である。
【図２５】図２２に示すソフトウェアであって、ＷｉｎｄｏｗｓＮＴ環境で実行されるように設計されたソフトウェアをさらに詳細に示すプロセス・フローチャートである。
【図２６】図２２に示すソフトウェアであって、２２００オペレーティング・システム環境で実行されるように設計されたソフトウェアをさらに詳細に示すプロセス・フローチャートである。
【図２７】図２２に示すソフトウェアであって、協調処理通信（ＣＰＣＯＭＭ）ソフトウェアプログラムの詳細を含むソフトウェアをさらに詳細に示すプロセス・フローチャートである。
【図２８】図２に示すコンピュータ・システムをさらに詳細に示す図である。
【図２９】図１９に示す代替実施形態による入力待ち行列ヘッダのコンテンツを示す図である。
【図３０】代替実施形態による入力待ち行列のコンテンツを示す図である。
【図３１Ａ】代替実施形態によるコンピュータ・システムの動作をさらに示す流れ図である。
【図３１Ｂ】代替実施形態によるコンピュータ・システムの動作をさらに示す流れ図である。
【図３２Ａ】代替実施形態によるタイプ１共用メモリ・ページのヘッダのコンテンツを示す図である。
【図３２Ｂ】代替実施形態によるタイプ２共用メモリ・ページのヘッダのコンテンツを示す図である。
【図３３】本発明の好ましい一実施形態による、本発明のアドレス再配置方法および再利用方法を実施するための装置のブロック図である。
【図１】
2006216068.tif 000022
【図２】
2006216068.tif 000023
【図３】
2006216068.tif 000024
【図４】
2006216068.tif 000025
【図５】
2006216068.tif 000026
【図６】
2006216068.tif 000027
【図７】
2006216068.tif 000028
【図８】
2006216068.tif 000029
【図９】
2006216068.tif 000030
【図１０】
2006216068.tif 000031
【図１１】
2006216068.tif 000032
【図１２】
2006216068.tif 000033
【図１３】
2006216068.tif 000034
【図１４】
2006216068.tif 000035
【図１５】
2006216068.tif 000036
【図１６Ａ】
2006216068.tif 000037
【図１６Ｂ】
2006216068.tif 000038
【図１７】
2006216068.tif 000039
【図１８】
2006216068.tif 000040
【図１９】
2006216068.tif 000041
【図２０】
2006216068.tif 000042
【図２１】
2006216068.tif 000043
【図２２】
2006216068.tif 000044
【図２３】
2006216068.tif 000045
【図２４】
2006216068.tif 000046
【図２５】
2006216068.tif 000047
【図２６】
2006216068.tif 000048
【図２７】
2006216068.tif 000049
【図２８】
2006216068.tif 000050
【図２９】
2006216068.tif 000051
【図３０】
2006216068.tif 000052
【図３１Ａ】
2006216068.tif 000053
【図３１Ｂ】
2006216068.tif 000054
【図３２Ａ】
2006216068.tif 000055
【図３２Ｂ】
2006216068.tif 000056
【図３３】
2006216068.tif 000057