(57)【特許請求の範囲】
【請求項１】
ネットワークに接続された複数の資源ノードと前記ネットワークに接続された複数の制御ノードと複数の制御コントローラとを具備するプロセッサシステムにおいて、
前記複数の資源ノードはそれぞれ、複数の資源を保持する資源保持部と、前記複数の資源がフリー状態にあるかロック状態にあるかを管理する資源情報保持部とを含み、
前記複数の制御ノードはそれぞれ、前記資源に対する要求を複数発行する複数の制御デバイスを含み、前記複数の要求を発行した制御デバイスを含む制御ノードは前記複数の要求を対応する制御コントローラに転送し、
前記要求を受けた少なくとも１つの制御コントローラは、該要求が対象とする資源を保持する資源ノードに要求メッセージを発行し、
前記要求メッセージを受けた資源ノードは、対象とする資源の状態がフリー状態にあることを確認して前記資源の状態をロック状態に変更し、続いて許可メッセージを前記少なくとも１つの制御コントローラに発行し、
前記許可メッセージを受けた前記少なくとも１つの制御コントローラは、当該少なくとも１つの制御コントローラが受けた前記要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みであることを確認して、前記要求が対象としている資源を保持する資源ノードに更新メッセージを発行し、
前記更新メッセージを受けた資源ノードは、対象とする前記資源の状態をフリー状態に変更する、
ことを特徴とするプロセッサシステム。
【請求項２】
請求項１に記載のプロセッサシステムにおいて、
前記複数の制御コントローラはそれぞれ、前記複数の制御ノード内に備えられ、
各制御ノードの制御コントローラは、各制御ノードの複数の制御デバイスによって発行される前記複数の要求を調停するセレクタを含むことを特徴とするプロセッサシステム。
【請求項３】
請求項１に記載のプロセッサシステムにおいて、
前記複数の制御コントローラは前記ネットワークに接続され、
各制御ノードは、前記複数の制御ノードの各々の前記複数の制御デバイスによって発行される前記複数の要求を調停するセレクタを含むことを特徴とするプロセッサシステム。
【請求項４】
請求項１に記載のプロセッサシステムにおいて、
前記複数の制御コントローラはそれぞれ、前記複数の資源ノード内に備えられ、
各制御ノードは、前記複数の制御ノードの各々の前記複数の制御デバイスによって発行される前記複数の要求を調停するセレクタを含むことを特徴とするプロセッサシステム。
【請求項５】
請求項１に記載のプロセッサシステムにおいて、
前記複数の資源ノードと前記複数の制御ノードとは、それぞれ複数のノードを構成し、
各ノードは、前記複数のノードの各々の前記複数の制御デバイスによって発行される前記複数の要求を調停するセレクタを含むことを特徴とするプロセッサシステム。
【請求項６】
請求項１に記載のプロセッサシステムにおいて、
各制御コントローラは開放処理部を具備し、
前記要求メッセージを受けた前記資源ノードは、前記対象とする資源の状態がロック状態にあった場合、開放要求メッセージを前記少なくとも１つの制御コントローラに発行し、
前記開放要求メッセージを受けた前記少なくとも１つの制御コントローラの開放処理部は開放処理を開始し、
前記開放処理は、
該開放要求メッセージに対応する要求について、要求メッセージを発行する処理と、
新規要求の受付を停止する処理と、
前記要求に後続する他の複数の後続要求の各々について、既に許可メッセージを受け取っていれば、あるいは開放処理中に許可メッセージを受け取れば、該後続要求が対象としている資源を保持する資源ノードに開放メッセージを発行する処理とを含み、
前記開放処理部は、前記開放要求メッセージに対応する要求について許可メッセージを受け取れば、開放処理を終了し、
前記資源ノードは、開放メッセージを受け取って、対象とする資源の状態をフリー状態に変更することを特徴とするプロセッサシステム。
【請求項７】
請求項１に記載のプロセッサシステムにおいて、
前記資源情報保持部が管理する状態は、割り込み可ロック状態とリクエストロック状態とを含み、
前記要求を受けた前記少なくとも１つの制御コントローラは、該少なくとも１つの制御コントローラが受けた前記要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みでなければ弱要求メッセージを発行し、
前記弱要求メッセージを受けた前記資源ノードは、
前記対象とする資源の状態がフリー状態にあることを確認して、前記資源の状態を割り込み可ロック状態に変更し、続いて許可メッセージを前記少なくとも１つの制御コントローラに発行し、
前記割り込み可ロック状態は、前記少なくとも１つの制御コントローラを特定する情報を含み、
前記要求メッセージを受けた前記資源ノードは、前記対象とする資源の状態がロック状態にあった場合、不許可メッセージを前記少なくとも１つの制御コントローラに発行し、
前記弱要求メッセージを受けた前記資源ノードは、前記対象とする資源の状態がロック状態あるいは割り込み可ロック状態にあった場合、不許可メッセージを前記少なくとも１つの制御コントローラに発行し、
前記不許可メッセージを受けた前記少なくとも１つの制御コントローラは、該不許可メッセージに対応する要求について、該要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みであれば要求メッセージを、受け取り済みでなければ弱要求メッセージを発行し、
前記要求メッセージを受けた前記資源ノードは、前記対象とする資源の状態が割り込み可ロック状態にあった場合、前記資源の状態をリクエストロック状態に変更し、続いて前記割り込み可ロック状態に含まれる情報が示す制御コントローラに宛てて再試行要求メッセージを出力し、
前記再試行要求メッセージを受け取った前記制御コントローラは、再試行処理を行い、
前記再試行処理は、
該資源に対する要求を特定する処理と、
該要求が対象としている資源を保持する資源ノードに開放メッセージを発行する処理と、
特定した要求がまだ更新メッセージを発行していなければ、該要求について許可メッセージをまだ受け取っていない状態に変更し、該制御コントローラが受けた前記要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みであれば要求メッセージを、受け取り済みでなければ弱要求メッセージを発行する処理とを含み、
前記開放メッセージを受けた前記資源ノードは、前記資源の状態をロック状態に変更し、続いて許可メッセージを前記少なくとも１つの制御コントローラに発行することを特徴とするプロセッサシステム。
【請求項８】
ネットワークに接続された複数の資源ノードと前記ネットワークに接続された複数の制御ノードと複数の制御コントローラとを具備するプロセッサシステムであって、前記複数の資源ノードがそれぞれ、複数の資源を保持する資源保持部と、前記複数の資源がフリー状態にあるかロック状態にあるかを管理する資源情報保持部とを含み、前記複数の制御ノードがそれぞれ、前記資源に対する要求を複数発行する複数の制御デバイスを含む、プロセッサシステムに適用されるアクセス処理方法であって、
前記制御デバイスが、前記複数の要求を対応する少なくとも１つの制御コントローラに転送するステップと、
前記少なくとも１つの制御コントローラが前記要求を受けて、該要求が対象とする資源を保持する資源ノードに要求メッセージを発行するステップと、
前記資源ノードが前記要求メッセージを受けて、対象とする資源の状態がフリー状態にあることを確認して前記資源の状態をロック状態に変更し、続いて許可メッセージを前記少なくとも１つの制御コントローラに発行するステップと、
前記少なくとも１つの制御コントローラが前記許可メッセージを受けて、前記要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みであることを確認して、前記要求が対象としている資源を保持する資源ノードに更新メッセージを発行するステップと、
前記資源ノードが前記更新メッセージを受けて、対象とする前記資源の状態をフリー状態に変更するステップと、
を含むことを特徴とするアクセス処理方法。
【請求項９】
請求項８に記載のアクセス処理方法において、
更に、各制御ノードの複数の制御デバイスによって発行される前記複数の要求を調停するステップを含むことを特徴とするアクセス処理方法。
【請求項１０】
請求項８に記載のアクセス処理方法において、
更に、前記複数の資源ノードと前記複数の制御ノードとを、それぞれ複数のノードとして構成するステップと、
前記複数のノードの各々の前記複数の制御デバイスによって発行される前記複数の要求を調停するステップとを含むことを特徴とするアクセス処理方法。
【請求項１１】
請求項８に記載のアクセス処理方法において、
更に、前記資源ノードが前記要求メッセージを受けて、前記対象とする資源の状態がロック状態にあった場合、開放要求メッセージを前記少なくとも１つの制御コントローラに発行するステップと、
前記開放要求メッセージを受けた前記少なくとも１つの制御コントローラが開放処理を開始するステップとを含み、
前記開放処理は、
該開放要求メッセージに対応する要求について、要求メッセージを発行するステップと、
新規要求の受付を停止するステップと、
前記要求に後続する他の複数の後続要求の各々について、既に許可メッセージを受け取っていれば、あるいは開放処理中に許可メッセージを受け取れば、該後続要求が対象としている資源を保持する資源ノードに開放メッセージを発行するステップとを含み、
アクセス処理方法は更に、前記開放要求メッセージに対応する要求について許可メッセージを受け取った前記少なくとも１つの制御コントローラは開放処理を終了するステップと、
前記資源ノードが前記開放メッセージを受けて、対象とする前記資源の状態をフリー状態に変更するステップと
を含むことを特徴とするアクセス処理方法。
【請求項１２】
請求項８に記載のアクセス処理方法において、
前記資源情報保持部が管理する状態は、割り込み可ロック状態とリクエストロック状態とを含み、
アクセス処理方法は更に、前記少なくとも１つの制御コントローラが前記要求を受けて、該要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みでなければ弱要求メッセージを発行するステップと、
前記資源ノードが前記弱要求メッセージを受けて、前記対象とする資源の状態がフリー状態にあることを確認して、前記資源の状態を割り込み可ロック状態に変更し、続いて許可メッセージを前記少なくとも１つの制御コントローラに発行するステップとを含み、
前記割り込み可ロック状態は、前記少なくとも１つの制御コントローラを特定する情報を含み、
アクセス処理方法は更に、前記資源ノードが前記要求メッセージを受けて、前記対象とする資源の状態がロック状態にあった場合、不許可メッセージを前記少なくとも１つの制御コントローラに発行するステップと、
前記資源ノードが前記弱要求メッセージを受けて、前記対象とする資源の状態がロック状態あるいは割り込み可ロック状態にあった場合、不許可メッセージを前記少なくとも１つの制御コントローラに発行するステップと、
前記少なくとも１つの制御コントローラが前記不許可メッセージを受けて、該不許可メッセージに対応する要求について、該要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みであれば要求メッセージを、受け取り済みでなければ弱要求メッセージを発行するステップと、
前記資源ノードが前記要求メッセージを受けて、前記対象とする資源の状態が割り込み可ロック状態にあった場合、前記資源の状態をリクエストロック状態に変更し、続いて前記割り込み可ロック状態に含まれる情報が示す制御コントローラに宛てて再試行要求メッセージを出力するステップと、
前記制御コントローラが前記再試行要求メッセージを受けて、再試行処理を行うステップとを含み、
前記再試行処理は、
該資源に対する要求を特定するステップと、
該要求が対象としている資源を保持する資源ノードに開放メッセージを発行するステップと、
特定した要求がまだ更新メッセージを発行していなければ、該要求について許可メッセージをまだ受け取っていない状態に変更し、該制御コントローラが受けた前記要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みであれば要求メッセージを、受け取り済みでなければ弱要求メッセージを発行するステップとを含み、
アクセス処理方法は更に、前記資源ノードが前記開放メッセージを受けて、前記資源の状態をロック状態に変更し、続いて許可メッセージを前記少なくとも１つの制御コントローラに発行するステップを含むことを特徴とするアクセス処理方法。
【発明の詳細な説明】
【技術分野】  本発明は、メモリを共有する密結合型のマルチプロセッサシステムに関し、特に入出力デバイスからのメモリアクセスを処理するマルチプロセッサシステムおよびメモリアクセス処理方法に関する。
【背景技術】  ＰＣＩバス仕様リビジョン２．１等の規定では、ＰＣＩバス上の入出力デバイスを要求元にしたライトメッセージは順序を保障しなければならないという制約がある。即ち、先行のライトメッセージが完了してから後続のライトメッセージが完了することを保障しなければならない。
図１はディレクトリ方式によってデータの一貫性を維持するマルチプロセッサシステムの構成を示す図である。マルチプロセッサシステムは、複数のプロセッサノード１０１−１、…、１０１−ｉ、…、１０１−ｍ（ｉ、ｍは２以上の整数）と、複数の入出力ノード１０３−１、…、１０３−ｊ、…、１０３−ｎ（ｊ、ｎは２以上の整数）とを具備している。複数のプロセッサノード１０１−１〜１０１−ｍと複数の入出力ノード１０３−１〜１０３−ｎとは、ネットワーク１０２に接続され、外部からのクロックに応じて動作する。プロセッサノード１０１−１は、プロセッサ１１０−１−１、１１０−１−２と、ディレクトリ１２０−１と、主記憶部（メモリ）１３０−１と、メモリコントローラ１４０−１とを含む。これは、他のプロセッサノードも同じである。各主記憶部には複数のデータが格納されている。複数のデータの各々は、その内容を表す値を含んでいる。一方、入出力ノード１０３−１は、入出力コントローラ１５０−１と、外部からの命令によりメッセージを発行する複数の入出力デバイス１６０−１−１、１６０−１−２とを含む。これは、他の入出力ノードも同じである。なお、以下では、便宜上、図１に示されていない参照番号を使用して説明を行うことがある。例えば、プロセッサノード１０１−２は図示されていないが、主記憶部１３０−２、メモリコントローラ１４０−２等を含む。
図１に示すようなマルチプロセッサシステムにおいて前述のライトメッセージの順序制約を満たす従来技術を紹介する。特開２００１−２１６２５９号公報（以下、特許文献１と呼ぶ）の［発明が解決しようとする課題］には、先行するライトメッセージの完了が保障されるまで後続するライトメッセージの発行を留めることで順序制約を満たす技術（以降ではこれを従来技術１と呼ぶ）が開示されている。
図１、図２を参照しながら、順序制約のあるライトメッセージが連続して発行された場合について従来技術１の動作を説明する。図２は、入出力デバイス１６０−１−１が、データＡ、Ｂ、Ｃに対するライトメッセージをそれぞれステップ１、２、３で発行した場合の動作を示している。ここで、データＡおよびデータＢはプロセッサノード１０１−１をホームとし、データＣはプロセッサノード１０１−２（図示せず）をホームとするデータであるとする。また、１ステップは１クロックに対応する。
入出力コントローラ１５０−１は、ステップ２にて、入出力デバイス１６０−１−１からのライトメッセージとしてライトＡメッセージを受け取る。入出力コントローラ１５０−１は、ステップ３にて、ライトＡメッセージで指定される値を含む更新Ａメッセージをホームのメモリコントローラ１４０−１に宛ててネットワーク１０２に出力する。
メモリコントローラ１４０−１は、ステップ４にて、入出力コントローラ１５０−１からの更新Ａメッセージを受けて、主記憶部１３０−１に格納されたデータの値を更新Ａメッセージで指定される値に更新する。メモリコントローラ１４０−１は、ステップ５にて、入出力コントローラ１５０−１に宛ててネットワーク１０２に完了Ａメッセージを出力する。入出力コントローラ１５０−１は、ステップ６にて、メモリコントローラ１４０−１からの完了Ａメッセージを受け取り、先行するライトＡが完了したことを認識する。
入出力コントローラ１５０−１はまた、ステップ３にて、第２ライトメッセージとしてライトＢメッセージを受け取る。この場合、入出力コントローラ１５０−１は、先行するライトＡの完了するステップ６までライトＢメッセージを留め置く。入出力コントローラ１５０−１は、ステップ７にて、ライトＢメッセージで指定される値を含む更新Ｂメッセージをメモリコントローラ１４０−１に宛ててネットワーク１０２に出力する。
メモリコントローラ１４０−１は、ステップ８にて、入出力コントローラ１５０−１からの更新Ｂメッセージを受けて、主記憶部１３０−１に格納されたデータの値を更新Ｂメッセージで指定される値に更新する。メモリコントローラ１４０−１は、ステップ９にて、入出力コントローラ１５０−１に宛ててネットワーク１０２に完了Ｂメッセージを出力する。入出力コントローラ１５０−１は、ステップ１０にて、メモリコントローラ１４０−１からの完了Ｂメッセージを受け取り、先行するライトＢが完了したことを認識する。
入出力コントローラ１５０−１は更に、ステップ４にて、第３ライトメッセージとしてライトＣメッセージを受け取る。この場合、入出力コントローラ１５０−１は、先行するライトＡおよびライトＢが両方とも完了するステップ１０までライトＣメッセージを留め置く。入出力コントローラ１５０−１は、ステップ１１にて、ライトＣメッセージで指定される値を含む更新Ｃメッセージをメモリコントロー１４０−２（図示せず）に宛ててネットワーク１０２に出力する。
メモリコントローラ１４０−２は、ステップ１２にて、入出力コントローラ１５０−１からの更新Ｃメッセージを受けて、主記憶部１３０−２（図示せず）に格納されたデータの値を更新Ｃメッセージで指定される値に更新する。メモリコントローラ１４０−２は、ステップ１３にて、入出力コントローラ１５０−１に宛ててネットワーク１０２に完了Ｃメッセージを出力する。入出力コントローラ１５０−１は、ステップ１４にて、メモリコントローラ１４０−２からの完了Ｃメッセージを受け取り、ライトＣが完了したことを認識する。
このように、入出力コントローラ１５０−１は、先行するライトメッセージが完了してから次のライトメッセージを発行することで、入出力デバイス１６０−１−１、１６０−１−２が発行した複数のライトメッセージの順序を保障することができる。しかし、３つのライトメッセージを処理するのに１４ステップを要する。これは、他の入出力コントローラについても同様である。
特許文献１にはまた、ライトメッセージの処理時間が長く、性能が劣化する問題を解決する技術（以降ではこれを従来技術２と呼ぶ）が開示されている。従来技術２は、同一プロセッサノードを宛先とするライトメッセージの連続発行、即ち先行するメッセージの完了が保障される前に後続するメッセージを発行することを可能とする。
図１、図３を参照しながら、従来技術２の動作を説明する。
入出力コントローラ１５０−１は、ステップ２にて、第１ライトメッセージとしてライトＡメッセージを受け取り、ライトＡメッセージがプロセッサノード１０１−１（メモリコントローラ１４０−１）をホームとするライトであることを認識する。入出力コントローラ１５０−１は、ステップ３にて、ライトＡメッセージで指定される値を含む更新Ａメッセージをホームのメモリコントローラ１４０−１に宛ててネットワーク１０２に出力する。
メモリコントローラ１４０−１は、ステップ４にて、入出力コントローラ１５０−１からの更新Ａメッセージを受けて主記憶部１３０−１のデータを更新する。メモリコントローラ１４０−１は、ステップ５にて、入出力コントローラ１５０−１に宛ててネットワーク１０２に完了Ａメッセージを出力する。入出力コントローラ１５０−１は、ステップ６にて、メモリコントローラ１４０−１からの完了Ａメッセージを受け取り、先行するライトＡが完了したことを認識する。
入出力コントローラ１５０−１はまた、ステップ３にて、第２ライトメッセージとしてライトＢメッセージを受け取る。入出力コントローラ１５０−１は、ライトＢメッセージがプロセッサノード１０１−１（メモリコントローラ１４０−１）をホームとするライトであることを認識し、先行するライトＡメッセージと同じホームであることを認識する。この場合、入出力コントローラ１５０−１は、ライトＡの完了を待つことなく、ステップ４にて、ライトＢメッセージで指定される値を含む更新Ｂメッセージをホームのメモリコントロー１４０−１に宛ててネットワーク１０２に出力する。
メモリコントローラ１４０−１は、ステップ５にて、入出力コントローラ１５０−１からの更新Ｂメッセージを受けて主記憶部１３０−１のデータを更新する。メモリコントローラ１４０−１は、ステップ６にて、入出力コントローラ１５０−１に宛ててネットワーク１０２に完了Ｂメッセージを出力する。入出力コントローラ１５０−１は、ステップ７にて、メモリコントローラ１４０−１からの完了Ｂメッセージを受け取る。
入出力コントローラ１５０−１は更に、ステップ４にて、第３ライトメッセージとしてライトＣメッセージを受け取る。入出力コントローラ１５０−１は、ライトＣメッセージがプロセッサノード１０１−２（メモリコントローラ１４０−２）（いずれも図示せず）をホームとするライトであることを認識し、先行するライトＡメッセージ、ライトＢメッセージとはホームが異なることを認識する。この場合、入出力コントローラ１５０−１は、両ライトメッセージ（ライトＡメッセージ、ライトＢメッセージ）とも完了するステップ７までライトＣメッセージを留め置く。入出力コントローラ１５０−１は、ステップ８にて、ライトＣメッセージで指定される値を含む更新Ｃメッセージをメモリコントローラ１４０−２に宛ててネットワーク１０２に出力する。
メモリコントローラ１４０−２は、ステップ９にて、入出力コントローラ１５０−１からの更新Ｃメッセージを受けて主記憶部１３０−２のデータを更新する。メモリコントローラ１４０−２は、ステップ１０にて、入出力コントローラ１５０−１に宛ててネットワーク１０２に完了Ｃメッセージを出力する。入出力コントローラ１５０−１は、ステップ１１にて、メモリコントローラ１４０−１からの完了Ｃメッセージを受け取り、ライトＣが完了したことを認識する。
このように、入出力コントローラ１５０−１は、ホームを同じにするライトメッセージは連続して発行し、ホームが異なるライトメッセージは先行するライトメッセージが完了してから発行する。ネットワーク１０２は２点間のメッセージの順序を保障するので、上記例ではライトＡメッセージとライトＢメッセージはその順でメモリコントローラ１４０−１に到着することが保障される。そのため、ライトＡメッセージを追い越してライトＢメッセージが先にメモリコントローラ１４０−１で処理されることはなく順序を保障することができる。
しかし、この従来技術２でも３つのライトメッセージを処理するのに１１ステップを要する。
従来技術１、従来技術２では、入出力コントローラが、異なるプロセッサノードを宛先とする入出力デバイスからの複数のライトメッセージを連続して処理することができない。このため、入出力コントローラがライトメッセージの処理を行う場合に要する時間は、長くなってしまう。
本発明の課題は、入出力コントローラが、異なるプロセッサノードを宛先とする入出力デバイスからの複数のライトメッセージを連続して処理することができるマルチプロセッサシステムを提供することにある。
本発明の他の課題は、入出力コントローラがライトメッセージの処理を行う場合に要する時間を短くすることができるマルチプロセッサシステムを提供することにある。
【発明の開示】
本発明によるプロセッサシステムは、ネットワークに接続された複数の資源ノードとネットワークに接続された複数の制御ノードと複数の制御コントローラとを具備する。
複数の資源ノードはそれぞれ、複数の資源を保持する資源保持部と、複数の資源がフリー状態にあるかロック状態にあるかを管理する資源情報保持部とを含む。
複数の制御ノードはそれぞれ、資源に対する要求を複数発行する複数の制御デバイスを含む。
複数の要求を発行した制御デバイスを含む制御ノードは複数の要求を対応する制御コントローラに転送する。
要求を受けた少なくとも１つの制御コントローラは、該要求が対象とする資源を保持する資源ノードに要求メッセージを発行する。
要求メッセージを受けた資源ノードは、対象とする資源の状態がフリー状態にあることを確認して資源の状態をロック状態に変更し、続いて許可メッセージを少なくとも１つの制御コントローラに発行する。
許可メッセージを受けた少なくとも１つの制御コントローラは、当該少なくとも１つの制御コントローラが受けた要求に先行する他の複数の要求について全て許可メッセージを受け取り済みであることを確認して、要求が対象としている資源を保持する資源ノードに更新メッセージを発行する。
更新メッセージを受けた資源ノードは、対象とする資源の状態をフリー状態に変更する。
本発明によるプロセッサシステムにおいては、複数の制御コントローラがそれぞれ、複数の制御ノード内に備えられても良い。この場合、各制御ノードの制御コントローラは、各制御ノードの複数の制御デバイスによって発行される複数の要求を調停するセレクタを含むことが望ましい。
本発明によるプロセッサシステムにおいてはまた、複数の制御コントローラがネットワークに接続されても良い。この場合、各制御ノードは、複数の制御ノードの各々の複数の制御デバイスによって発行される複数の要求を調停するセレクタを含むことが望ましい。
本発明によるプロセッサシステムにおいては更に、複数の制御コントローラがそれぞれ、複数の資源ノード内に備えられても良い。この場合、各制御ノードは、複数の制御ノードの各々の複数の制御デバイスによって発行される複数の要求を調停するセレクタを含むことが望ましい。
本発明によるプロセッサシステムにおいては更に、複数の資源ノードと複数の制御ノードとが、それぞれ複数のノードを構成するようにされても良い。この場合、各ノードは、複数のノードの各々の複数の制御デバイスによって発行される複数の要求を調停するセレクタを含むことが望ましい。
本発明によるプロセッサシステムにおいては、各制御コントローラが開放処理部を具備しても良い。この場合、要求メッセージを受けた資源ノードは、対象とする資源の状態がロック状態にあった場合、開放要求メッセージを少なくとも１つの制御コントローラに発行する。
開放要求メッセージを受けた少なくとも１つの制御コントローラの開放処理部は開放処理を開始する。
開放処理は、該要求が対象としている資源を保持する資源ノードに要求メッセージを発行する処理と、新規要求の受付を停止する処理と、該少なくとも１つの制御コントローラが受けた要求に後続する他の複数の後続要求の各々について、既に許可メッセージを受け取っていれば、あるいは開放処理中に許可メッセージを受け取れば、該後続要求が対象としている資源を保持する資源ノードに開放メッセージを発行する処理とを含む。
開放要求メッセージの要求に対する許可メッセージを受け取った少なくとも１つの制御コントローラは開放処理を終了する。
本発明によるプロセッサシステムにおいてはまた、資源情報保持部が管理する状態は、割り込み可ロック状態とリクエストロック状態とを含んでも良い。この場合、要求を受けた少なくとも１つの制御コントローラは、該少なくとも１つの制御コントローラが受けた要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みでなければ弱要求メッセージを発行する。
弱要求メッセージを受けた資源ノードは、対象とする資源の状態がフリー状態にあることを確認して、資源の状態を割り込み可ロック状態に変更し、続いて許可メッセージを少なくとも１つの制御コントローラに発行する。
割り込み可ロック状態は、少なくとも１つの制御コントローラを特定する情報を含んでも良い。
要求メッセージを受けた資源ノードは、対象とする資源の状態がロック状態にあった場合、不許可メッセージを少なくとも１つの制御コントローラに発行する。
弱要求メッセージを受けた資源ノードは、対象とする資源の状態がロック状態あるいは割り込み可ロック状態にあった場合、不許可メッセージを少なくとも１つの制御コントローラに発行する。
不許可メッセージを受けた少なくとも１つの制御コントローラは、該少なくとも１つの制御コントローラが受けた要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みであれば要求メッセージを、受け取り済みでなければ弱要求メッセージを発行する。
要求メッセージを受けた資源ノードは、対象とする資源の状態が割り込み可ロック状態にあった場合、資源の状態をリクエストロック状態に変更し、続いて割り込み可ロック状態に含まれる情報が示す制御コントローラに宛てて再試行要求メッセージを出力する。
再試行要求メッセージを受け取った制御コントローラは、再試行処理を行う。
再試行処理は、該資源に対する要求を特定する処理と、該要求が対象としている資源を保持する資源ノードに開放メッセージを発行する処理と、特定した要求がまだ更新メッセージを発行していなければ、該要求について許可メッセージをまだ受け取っていない状態に変更し、該制御コントローラが受けた要求に先行する他の複数の要求の全てについて許可メッセージを受け取り済みであれば要求メッセージを、受け取り済みでなければ弱要求メッセージを発行する処理とを含む。
開放メッセージを受けた資源ノードは、資源の状態をロック状態に変更し、続いて許可メッセージを少なくとも１つの制御コントローラに発行する。
本発明によるアクセス処理方法は、ネットワークに接続された複数の資源ノードとネットワークに接続された複数の制御ノードと複数の制御コントローラとを具備するプロセッサシステムであって、複数の資源ノードがそれぞれ、複数の資源を保持する資源保持部と、複数の資源がフリー状態にあるかロック状態にあるかを管理する資源情報保持部とを含み、複数の制御ノードがそれぞれ、資源に対する要求を複数発行する複数の制御デバイスを含む、プロセッサシステムに適用される。
本発明によるアクセス処理方法は、複数の要求を対応する少なくとも１つの制御コントローラに転送するステップと、該要求が対象とする資源を保持する資源ノードに要求メッセージを発行するステップと、対象とする資源の状態がフリー状態にあることを確認して資源の状態をロック状態に変更し、続いて許可メッセージを少なくとも１つの制御コントローラに発行するステップと、当該少なくとも１つの制御コントローラが受けた要求に先行する他の複数の要求について全て許可メッセージを受け取り済みであることを確認して、要求が対象としている資源を保持する資源ノードに更新メッセージを発行するステップと、対象とする資源の状態をフリー状態に変更するステップとを含む。
本発明によるプロセッサシステム、アクセス処理方法のいずれにおいても、資源ノードは複数のプロセッサを有するプロセッサノードであることが好ましい。この場合、プロセッサノードは、資源保持部、資源情報保持部として主記憶部、ディレクトリをそれぞれ備えるとともに、複数のプロセッサと主記憶部及びディレクトリに接続されたメモリコントローラを備える。また、制御ノードは、複数の制御デバイスとして複数の入出力デバイスを含む入出力ノードであり、制御コントローラは入出力コントローラである。入出力デバイスは要求としてライトメッセージを発行し、これを受けた入出力コントローラは書き込み要求メッセージをプロセッサノードに向けて出力する。
【図面の簡単な説明】  図１は、従来のマルチプロセッサシステムの構成を示す図である。
図２は、従来技術１の動作を示すタイミングチャート図である。
図３は、従来技術２の動作を示すタイミングチャート図である。
図４は、本発明のマルチプロセッサシステムの構成を示す図である。
図５は、本発明のマルチプロセッサシステムにおける入出力コントローラが、第Ｉ書き込み許可メッセージを受けた場合の動作を示すフローチャート図である。
図６は、本発明のマルチプロセッサシステムの動作として、ライトメッセージが連続して発行された場合の動作を示すタイミングチャート図である。
図７は、本発明のマルチプロセッサシステムにおける入出力コントローラの構成を示す図である。
図８Ａは、本発明のマルチプロセッサシステムにおける入出力コントローラの動作例を説明するための図である。
図８Ｂは、本発明のマルチプロセッサシステムにおける入出力コントローラの動作例を説明するための図である。
図８Ｃは、本発明のマルチプロセッサシステムにおける入出力コントローラの動作例を説明するための図である。
図８Ｄは、本発明のマルチプロセッサシステムにおける入出力コントローラの動作例を説明するための図である。
図８Ｅは、本発明のマルチプロセッサシステムにおける入出力コントローラの動作例を説明するための図である。
図８Ｆは、本発明のマルチプロセッサシステムにおける入出力コントローラの動作例を説明するための図である。
図８Ｇは、本発明のマルチプロセッサシステムにおける入出力コントローラの動作例を説明するための図である。
図８Ｈは、本発明のマルチプロセッサシステムにおける入出力コントローラの動作例を説明するための図である。
図８Ｉは、本発明のマルチプロセッサシステムにおける入出力コントローラの動作例を説明するための図である。
図９は、本発明のマルチプロセッサシステムの他の構成を示す図である。
図１０は、本発明の実施例１に係るマルチプロセッサシステムの動作として、ディレクトリの状態がＵｎｃａｃｈｅｄであった場合の動作を示すタイミングチャート図である。
図１１は、本発明の実施例１に係るマルチプロセッサシステムの動作として、ディレクトリの状態がＣｌｅａｎであった場合の動作を示すタイミングチャート図である。
図１２は、本発明の実施例１に係るマルチプロセッサシステムの動作として、ディレクトリの状態がＤｉｒｔｙであった場合の動作を示すタイミングチャート図である。
図１３は、本発明の実施例１に係るマルチプロセッサシステムの動作として、ディレクトリの状態がリクエストロック状態あるいはライトロック状態であった場合の動作を示すタイミングチャート図である。
図１４は、本発明の実施例２に係るマルチプロセッサシステムにおける入出力コントローラの構成を示す図である。
【発明を実施するための最良の形態】  以下に、本発明のマルチプロセッサシステムについて詳細に説明する。
図４にマルチプロセッサシステムの構成を示す。本発明のマルチプロセッサシステムは、複数のプロセッサノード（資源ノード）１−１、…、１−ｉ、…、１−ｍ（ｉ、ｍは２以上の整数）と、複数の入出力ノード（制御ノード）３−１、…、３−ｊ、…、３−ｎ（ｊ、ｎは２以上の整数）とを具備している。複数のプロセッサノード１−１〜１−ｍと、複数の入出力ノード３−１〜３−ｎとは、ネットワーク２に接続され、外部からのクロックに応じて動作する。各プロセッサノードは同じ構成を有している。例えば、プロセッサノード１−１は、複数のプロセッサ１０−１−１、１０−１−２と、ディレクトリ（資源情報保持部）２０−１と、主記憶部（資源保持部）３０−１と、メモリコントローラ４０−１とを含む。メモリコントローラ４０−１は、プロセッサ１０−１−１、１０−１−２とディレクトリ２０−１と主記憶部３０−１とに接続されている。主記憶部３０−１には、複数のデータが格納されている。複数のデータの各々は、その内容を表す値を含んでいる。各入出力ノードも同じ構成を有している。例えば、入出力ノード３−１は、入出力コントローラ（制御コントローラ）５０−１と、外部からの命令によりメッセージを発行する複数の入出力デバイス（制御デバイス）６０−１−１、６０−１−２とを含む。
メッセージは、コマンドの種類を表すコマンド種別と、アドレスとを含む。例えば、メッセージがライトメッセージである場合、コマンド種別はライトを表す。ネットワーク２はメッセージの配送を行い、２点間のメッセージの順序を保障する。なお、以下では、便宜上、図４に示されていない参照番号を使用して説明を行うことがある。例えば、プロセッサノード１−２は図示されていないが、主記憶部３０−２、メモリコントローラ４０−２を含む。
ディレクトリ２０−１は、主記憶部３０−１に格納されている各データの一貫性制御に関する情報を、例えば１２８バイトのブロック単位で保持している。他のプロセッサノードにおける主記憶部も同様である。各ブロックの情報としては、一貫性制御に関する状態情報を含む。この状態情報には、アクセス要求を受け付けることができるフリー状態情報と、他のアクセス要求を受け付けることができないライトロック状態情報が含まれる。
一貫性制御について簡単に説明する。マルチプロセッサシステムでは、複数のプロセッサが存在する。また、複数のプロセッサがそれぞれキャッシュを具備し、データのコピーを保持する。そのため、ひとつのデータについて、メモリの値と、コピーを取った複数のキャッシュ値とを一致させる処理が必要になる。このような一致させる処理としては、コピーを無効化する処理が例示される。このように、データの値を一致させる、即ち、データの一貫性を取ることを一貫性制御（一貫性処理）と呼ぶ。データの一貫性制御に関する情報については、後述の実施例にて説明する。
本発明は、入出力コントローラ５０−ｊとメモリコントローラ４０−ｉの間での一連のメッセージを工夫することで、ホームを異にするライトメッセージ（要求）の連続発行を可能とするものである。なお、参照番号５０−ｊは入出力コントローラ５０−１〜５０−ｍ（図示せず）を代表して説明するために用いており、参照番号４０−ｉもメモリコントローラ４０−１〜４０−ｍ（図示せず）を代表して説明するために用いている。
ここで、入出力ノード３−１〜３−ｎのうちの第１入出力ノードが入出力ノード３−１であり、その入出力デバイス６０−１−１、６０−１−２によって１番目からＭ番目（Ｍは２以上の整数）までのＭ個のデータに対するＭ個のライトメッセージが発行されたものとする。この場合、複数の入出力コントローラのうちの第１入出力コントローラ、つまり入出力ノード３−１の入出力コントローラ５０−１がＭ個のライトメッセージを受け取ると、入出力コントローラ５０−１はＭ個のそれぞれのデータに対するＭ個のライトトランザクションを開始する。
Ｍ個のデータのうちの第Ｉデータ（Ｉ＝１、２、…、Ｍ）は、プロセッサノード１−１〜１−ｍのうちの１つのプロセッサノードをホームとするデータである。ここでは、この１つのプロセッサノードをプロセッサノード１−ｉとする。Ｍ個のライトメッセージのうちの第Ｉライトメッセージは、プロセッサノード１−ｉの主記憶部３０−ｉに格納された複数のデータのうちの第Ｉデータの値を第Ｉライトメッセージで指定される値に更新するための命令である。以降、第Ｉライトメッセージを例にとり説明する。
第Ｉライトメッセージを受けた入出力コントローラ５０−１は、第Ｉライトトランザクションを開始して、第Ｉ書き込み要求メッセージを、ネットワーク２を介してプロセッサノード１−ｉに出力する。プロセッサノード１−ｉのメモリコントローラ４０−ｉは、第Ｉ書き込み要求メッセージを受け取ると以下のように動作する。メモリコントローラ４０−ｉは、第Ｉデータに対して、フリー状態情報に代えて、第Ｉデータに対する他の書き込み要求メッセージを受け付けることができないライトロック状態情報をプロセッサノード１−ｉのディレクトリ２０−ｉに格納する。メモリコントローラ４０−ｉはまた、第Ｉ書き込み要求メッセージに対して第Ｉ書き込み許可メッセージを入出力ノード３−１にネットワーク２を介して出力する。
入出力ノード３−１の入出力コントローラ５０−１は、第Ｉ書き込み許可メッセージを受け取ると、図５に示されるような発行処理を実行する。
図５を参照して、入出力コントローラ５０−１は、第１書き込み許可メッセージから第Ｉ書き込み許可メッセージまでのＩ個の書き込み許可メッセージを既に受け取っているか否かを検査する（ステップＳ１）。入出力コントローラ５０−１は、上記のＩ個の書き込み許可メッセージを未だ受け取っていない場合（ステップＳ１のＮＯ）、発行処理を終了し、次の書き込み許可メッセージの到着を待つ。入出力コントローラ５０−１は、上記のＩ個の書き込み許可メッセージを既に受け取っている場合（ステップＳ１のＹＥＳ）、第Ｉライトメッセージで指定される値を含む第Ｉ更新メッセージをプロセッサノード１−ｉにネットワーク２を介して出力する（ステップＳ２）。
次に、入出力コントローラ５０−１は、Ｉ＝Ｉ＋１とし（ステップＳ３）、続いてＩがＭ以下であるかどうかを検査する（ステップＳ４）。入出力コントローラ５０−１は、ＩがＭ以下、即ち、第Ｉライトメッセージを受け取って第Ｉライトトランザクションを開始していれば（ステップＳ４のＹＥＳ）、ステップＳ１に戻る。入出力コントローラ５０−１は、ＩがＭより大、即ち、まだ第Ｉライトメッセージを受け取っていなければ（ステップＳ４のＮＯ）処理を終了する。
このように、入出力コントローラ５０−１は、ステップＳ１〜Ｓ４を繰り返し実行し、現在のライトトランザクションおよび先行するライトトランザクションが全て書き込み許可メッセージを受け取っていれば、更新メッセージを発行する。
プロセッサノード１−ｉのメモリコントローラ４０−ｉは、第Ｉ更新メッセージを受け取ると、第Ｉデータに対してライトロック状態情報に代えてフリー状態情報をプロセッサノード１−ｉのディレクトリ２０−ｉに格納する。メモリコントローラ４０−ｉはまた、プロセッサノード１−ｉの主記憶部３０−ｉに格納された第Ｉデータの値を第Ｉ更新メッセージで指定される値に更新する。
このように、本発明のマルチプロセッサシステムによれば、入出力コントローラ５０−ｊが、異なるプロセッサノード１−ｉを宛先とする入出力デバイス６０−ｊ−１、６０−ｊ−２からの複数のライトメッセージを連続して処理することができる。
図６を参照しながら、順序制約のあるライトメッセージが連続して発行された場合の動作を説明する。図６は、入出力デバイス６０−１−１が、Ｍ個（Ｍ＝３）のデータとしてデータＡ、Ｂ、Ｃに対するライトメッセージをそれぞれステップ１、２、３で発行した場合の動作を示している。ここで、データＡおよびデータＢはプロセッサノード１−１をホームとし、データＣはプロセッサノード１−２をホームとするデータであるとする。また、１ステップは１クロックに対応する。
入出力コントローラ５０−１は、ステップ２にて、第１ライトメッセージとしてライトＡメッセージを受け取る。この場合、入出力コントローラ５０−１は、ライトＡトランザクションを開始し、ステップ３にて、ホームのメモリコントローラ４０−１に宛てて第１書き込み要求メッセージとして書き込み要求Ａメッセージをネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ４にて、入出力コントローラ５０−１からの書き込み要求Ａメッセージを受け取ると、ディレクトリ２０−１が保持するデータＡの状態情報をフリー状態情報からライトロック状態情報に更新する。続いて、メモリコントローラ４０−１は、ステップ５にて、入出力コントローラ５０−１に宛てて、第１書き込み許可メッセージとして書き込み許可Ａメッセージをネットワーク２に出力する。
入出力コントローラ５０−１は、ステップ６にて、書き込み許可Ａメッセージを受け取る。このとき、先行するライトメッセージが存在しないので、入出力コントローラ５０−１は、ステップ７にて、第１ライトメッセージで指定される値を含む第１更新メッセージとして、更新Ａメッセージをメモリコントローラ４０−１に宛ててネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ８にて、入出力コントローラ５０−１からの更新Ａメッセージを受け取る。この場合、メモリコントローラ４０−１は、ディレクトリ２０−１が保持するデータＡの状態情報をライトロック状態情報からフリー状態情報に更新し、主記憶部３０−１のデータの値を更新Ａメッセージで指定される値に更新する。かくして、入出力コントローラ５０−１からのライトＡメッセージであるデータＡが格納される。
入出力コントローラ５０−１はまた、ステップ３にて、第２ライトメッセージとしてライトＢメッセージを受け取る。この場合、入出力コントローラ５０−１は、ライトＢトランザクションを開始し、ステップ４にて、ホームのメモリコントローラ４０−１に宛てて、第２書き込み要求メッセージとして書き込み要求Ｂメッセージをネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ５にて、入出力コントローラ５０−１からの書き込み要求Ｂメッセージを受け取ると、ディレクトリ２０−１が保持するデータＢの状態情報をフリー状態情報からライトロック状態情報に更新する。メモリコントローラ４０−１はまた、ステップ６にて、入出力コントローラ５０−１に宛てて、第２書き込み許可メッセージとして書き込み許可Ｂメッセージをネットワーク２に出力する。
入出力コントローラ５０−１は、ステップ７にて、書き込み許可Ｂメッセージを受け取る。この場合、入出力コントローラ５０−１は、先行するライトＡトランザクションの進捗を検査する。入出力コントローラ５０−１は、ステップ７より前のステップ６で既に第１書き込み許可メッセージである書き込み許可Ａメッセージを受け取っている。よって、入出力コントローラ５０−１は、ステップ８にて、第２ライトメッセージで指定される値を含む第２更新メッセージとして、更新Ｂメッセージをメモリコントローラ４０−１に宛ててネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ９にて、入出力コントローラ５０−１からの更新Ｂメッセージを受け取る。この場合、メモリコントローラ４０−１は、ディレクトリ２０−１が保持するデータＢの状態情報をライトロック状態情報からフリー状態情報に更新し、主記憶部３０−１のデータの値を更新Ｂメッセージで指定される値に更新する。かくして、入出力コントローラ５０−１からのライトＢメッセージであるデータＢが格納される。
入出力コントローラ５０−１は更に、ステップ４にて、第３ライトメッセージとしてライトＣメッセージを受け取る。この場合、入出力コントローラ５０−１は、ライトＣトランザクションを開始し、ステップ５にて、ホームのメモリコントローラ４０−２（図示せず）に宛てて、第３書き込み要求メッセージとして書き込み要求Ｃメッセージをネットワーク２に出力する。
メモリコントローラ４０−２は、ステップ６にて、入出力コントローラ５０−１からの書き込み要求Ｃメッセージを受け取ると、ディレクトリ２０−２が保持するデータＣの状態情報をフリー状態情報からライトロック状態情報に更新する。メモリコントローラ４０−１はまた、ステップ７にて、入出力コントローラ５０−１に宛てて、第３書き込み許可メッセージとして書き込み許可Ｃメッセージをネットワーク２に出力する。
入出力コントローラ５０−１は、ステップ８にて、書き込み許可Ｃメッセージを受け取る。この場合、入出力コントローラ５０−１は、先行するライトＡトランザクションおよびライトＢトランザクションの進捗を検査する。入出力コントローラ５０−１は、ステップ８より前のステップ６で既に書き込み許可Ａメッセージを受け取り、ステップ８より前のステップ７で既に書き込み許可Ｂメッセージを受け取っている。よって、入出力コントローラ５０−１は、ステップ９にて、第３ライトメッセージで指定される値を含む第３更新メッセージとして、更新Ｃメッセージをメモリコントローラ４０−２に宛ててネットワーク２に出力する。
メモリコントローラ４０−２は、ステップ１０にて、入出力コントローラ５０−１からの更新Ｃメッセージを受け取る。この場合、メモリコントローラ４０−２は、ディレクトリ２０−２が保持するデータＣの状態情報をライトロック状態情報からフリー状態情報に更新し、主記憶部３０−２のデータの値を更新Ｃメッセージで指定される値に更新する。かくして、入出力コントローラ５０−１からのライトＣメッセージであるデータＣが格納される。
入出力コントローラの構成を入出力コントローラ５０−ｊを例示して説明する。入出力コントローラ５０−ｊは、図７に示されるように、セレクタ７１−ｊと、メッセージ格納キュー７２−ｊと、ライトポインタ７３−ｊと、リードポインタＡ７４−ｊと、リードポインタＢ７５−ｊとを含む。入出力コントローラ５０−ｊは、複数の入出力デバイス６０−ｊ−１、６０−ｊ−２からのメッセージをセレクタ７１−ｊで調停してメッセージ格納キュー７２−ｊに書き込む。メッセージ格納キュー７２−ｊにおける書き込みの制御はライトポインタ７３−ｊを用いて行われる一方、読み出しの制御はリードポインタＡ７４−ｊとリードポインタＢ７５−ｊの二つを用いて行われる。また、入出力コントローラ５０−ｊは、ネットワーク２から送られてくるメッセージに応じて許可フラグ７６−ｊをメッセージ格納キュー７２−ｊに設定（格納）し、メッセージ格納キュー７２−１の制御にこの許可フラグ７６−ｊも用いる。以上の説明は、例えば入出力コントローラ５０−１の場合もまったく同じである。つまり、図示していないが、入出力コントローラ５０−１は、セレクタ７１−１と、メッセージ格納キュー７２−１と、ライトポインタ７３−１と、リードポインタＡ７４−１と、リードポインタＢ７５−１とを含む。
図８Ａ〜図８Ｉは、図６に示した動作フローでの入出力コントローラ５０−１のメッセージ格納キュー７２−１、ライトポインタ７３−１、リードポインタＡ７４−１、リードポインタＢ７５−１、許可フラグ７６−１の値の遷移を示す。
図８Ａに示されるように、初期状態のステップＳＴ１では、ライトポインタ７３−１、リードポインタＡ７４−１、リードポインタＢ７５−１は全て「０」を指している。
図８Ｂに示されるように、入出力コントローラ５０−１は、ステップＳＴ２にて、入出力デバイス６０−１−１からライトＡメッセージを受け取ると、ライトポインタ７３−１が指すメッセージ格納キュー７２−１のエントリ「０」にライトＡメッセージを書き込む。入出力コントローラ５０−１はまた、許可フラグ７６−１のエントリ「０」の値を「０」に設定し、ライトポインタ７３−１を「１」に更新する。
図８Ｃに示されるように、入出力コントローラ５０−１は、ステップＳＴ３にて、入出力デバイス６０−１−１からライトＢメッセージを受け取ると、ライトポインタ７３−１が指すメッセージ格納キュー７２−１のエントリ「１」にライトＢメッセージを書き込む。入出力コントローラ５０−１はまた、許可フラグ７６−１のエントリ「１」の値を「０」に設定し、ライトポインタ７３−１を「２」に更新する。
ここで、ステップＳＴ２においてメッセージ格納キュー７２−１に有効なエントリが存在する。このため、図８Ｃに示されるように、入出力コントローラ５０−１は、ステップＳＴ３にて、リードポインタＡ７４−１が示すエントリ「０」の情報により、書き込み要求Ａメッセージをネットワーク２に出力し、リードポインタＡ７４−１の値を「１」に更新する。
入出力コントローラ５０−１は、ステップＳＴ４にて、入出力デバイス６０−１−１からライトＣメッセージを受け取る。この場合、図８Ｄに示されるように、入出力コントローラ５０−１は、ライトポインタ７３−１が指すメッセージ格納キュー７２−１のエントリ「２」にライトＣメッセージを書き込む。入出力コントローラ５０−１はまた、許可フラグ７６−１のエントリ「２」の値を「０」に設定し、ライトポインタ７３−１を「３」に更新する。
また、ステップＳＴ３においてメッセージ格納キュー７２−１に有効なエントリが存在する。このため、図８Ｄに示されるように、入出力コントローラ５０−１は、ステップＳＴ４にて、リードポインタＡ７４−１が示すエントリ「１」の情報により、書き込み要求Ｂメッセージをネットワーク２に出力し、リードポインタＡ７４−１の値を「１」から「２」に更新する。
ステップＳＴ４においてメッセージ格納キュー７２−１に有効なエントリが存在する。このため、図８Ｅに示されるように、入出力コントローラ５０−１は、ステップＳＴ５にて、リードポインタＡ７４−１が示すエントリ「２」の情報により、書き込み要求Ｃメッセージをネットワーク２に出力し、リードポインタＡ７４−１の値を「２」から「３」に更新する。
図８Ｆに示されるように、入出力コントローラ５０−１は、ステップＳＴ６にて、書き込み許可Ａメッセージを受け取ると、許可フラグ７６−１のデータＡに該当するエントリ「０」の値を「０」から「１」に更新する。入出力コントローラ５０−１はまた、リードポインタＢ７５−１が指すエントリと、書き込み許可メッセージを受け取ったデータＡが格納されているエントリとが一致しているかどうかを検査する。これらが一致するということは、先行するライトトランザクションが存在しない、あるいは既に書き込み許可メッセージを受け取って更新メッセージを発行し完了していることを示している。ここではエントリ「０」で一致するので、入出力コントローラ５０−１は更新メッセージの発行処理を行い、次の書き込み許可メッセージの到着を待つ。
入出力コントローラ５０−１は、ステップＳＴ６にてリードポインタＢ７５−１が指すメッセージ格納キュー７２−１のエントリ「０」の値を読み出し、ステップＳＴ７にて、ネットワーク２に更新Ａメッセージを出力する。この場合、図８Ｇに示されるように、入出力コントローラ５０−１は、リードポインタＢ７５−１の値を「０」から「１」に更新する。
次に、入出力コントローラ５０−１は、リードポインタＢ７５−１の値とライトポインタ７３−１の値とを比較する。比較の結果、リードポインタＢ７５−１の値が小さく未完了の書き込みが存在することを示す場合、入出力コントローラ５０−１は未完了のライトトランザクションで既に書き込み許可メッセージを受け取り済みのものが存在するかどうかを検査する。ここでは、リードポインタＢ７５−１の値「１」はライトポインタ７３−１の値「３」より小さいので、リードポインタＢ７５−１が指す許可フラグ７６−１のエントリ「１」の値が読み出される。許可フラグ７６−１のエントリ「１」の値は「０」であり書き込み許可メッセージをまだ受け取っていないことを示すので、入出力コントローラ５０−１はエントリ「１」の更新メッセージ発行処理は行わず次の書き込み許可メッセージの到着を待つ。
図８Ｇに示されるように、入出力コントローラ５０−１は、ステップＳＴ７にて、許可Ｂメッセージを受け取ると、許可フラグ７６−１のデータＢに該当するエントリ「１」の値を「０」から「１」に更新する。入出力コントローラ５０−１はまた、リードポインタＢ７５−１が指すエントリと書き込み許可メッセージを受け取ったデータＢが格納されているエントリとが一致しているかどうかを検査する。ここではエントリ「１」で一致するので、入出力コントローラ５０−１は更新メッセージの発行処理を行う。
入出力コントローラ５０−１は、ステップＳＴ７にてリードポインタＢ７５−１が指すメッセージ格納キュー７２−１のエントリ「１」の値を読み出し、ステップＳＴ８にて、ネットワーク２にライトＢメッセージを出力する。この場合、図８Ｈに示されるように、入出力コントローラ５０−１は、リードポインタＢ７５−１の値を「１」から「２」に更新する。
次に、入出力コントローラ５０−１はリードポインタＢ７５−１の値「２」とライトポインタ７３−１の値「３」を比較する。比較の結果、リードポインタＢ７５−１の値が小さいので、入出力コントローラ５０−１はリードポインタＢ７５−１が指す許可フラグ７６−１のエントリ「２」の値を読み出す。エントリ「２」の値は「０」であり書き込み許可メッセージをまだ受け取っていないことを示すので、入出力コントローラ５０−１はエントリ「２」の更新メッセージ発行処理は行わず次の書き込み許可メッセージの到着を待つ。
図８Ｈに示されるように、入出力コントローラ５０−１は、ステップＳＴ８にて、書き込み許可Ｃメッセージを受け取ると、許可フラグ７６−１のデータＣに該当するエントリ「２」の値を「０」から「１」に更新する。入出力コントローラ５０−１はまた、リードポインタＢ７５−１が指すエントリと書き込み許可メッセージを受け取ったデータＣが格納されているエントリとが一致しているかどうかを検査する。ここではエントリ「２」で一致するので、入出力コントローラ５０−１は更新メッセージの発行処理を行う。
入出力コントローラ５０−１は、ステップＳＴ８にてリードポインタＢ７５−１が指すメッセージ格納キュー７２−１のエントリ「２」の値を読み出し、ステップＳＴ９にて、ネットワーク２に更新Ｃメッセージを出力する。この場合、図８Ｉに示されるように、入出力コントローラ５０−１は、リードポインタＢ７５−１の値を「２」から「３」に更新する。
次に、入出力コントローラ５０−１はリードポインタＢ７５−１の値「３」とライトポインタ７３−１の値「３」とを比較する。比較の結果、値が一致し未完了のライトトランザクションが存在しないことを示すので、入出力コントローラ５０−１は処理を終了する。
上記のように動作することで、ホームを同じにするライトトランザクションの順序も、異なるホームへのライトトランザクションの順序も保障することができる。
ライトＢトランザクションとライトＡトランザクションの順序関係は次のような理由で保障される。更新Ｂメッセージを発行する時点で、既に書き込み許可Ａメッセージを受け取り済みであり、ホームのディレクトリ２０−１の状態情報が、ライトロック状態に遷移していることが保障される。ライトロック状態に遷移していれば、プロセッサや入出力デバイスは更新Ａメッセージを受け取ってデータＡの値が更新されフリー状態に遷移した後の更新された値しか読み出すことができない。よって、データＢの更新された値が読み出せる時点で、データＡの更新された値しか読み出すことができないので、順序が保障されたことになる。
ライトＣトランザクションとライトＢトランザクションの順序関係も同じ理由で保障される。更新Ｃメッセージを発行する時点で、既に書き込み許可Ｂメッセージを受け取り済みであり、ホームのディレクトリ２０−１の状態情報が、ライトロック状態に遷移していることが保障される。ライトロック状態に遷移していれば、プロセッサや入出力デバイスは更新Ｂメッセージを受け取ってデータＢの値が更新されフリー状態に遷移した後の更新された値しか読み出すことができない。よって、データＣの更新された値が読み出せる時点で、データＢの更新された値しか読み出すことができないので、順序が保障されたことになる。
また、上記処理は１０ステップで完了しており、従来技術１、２と比べて入出力デバイスからのライトメッセージの処理性能を向上させることができる。
上記の例では入出力コントローラが入出力ノード内に設けられているが、入出力コントローラは入出力ノード外でネットワーク２に接続されてもよい。図９はその例を示す。入出力コントローラ５２−１、…、５２−ｊ、…、５２−ｎがそれぞれ、入出力ノード３−１、…、３−ｊ、…、３−ｎの外でネットワーク２に接続されている。その他の構成は図４に示された例と同じである。ここで、入出力ノード３−ｊについて言えば、図７で説明した入出力セレクタ７１−ｊに対応する入出力セレクタ５１−ｊを備えることが好ましい。入出力セレクタ５１−ｊは、複数の入出力デバイス６０−ｊ−１、６０−ｊ−２が出力するメッセージを調停してネットワーク２に出力する。入出力コントローラ５２−ｊは、ネットワーク２に出力されたメッセージを受けて、図４で説明した入出力コントローラ５０−ｊと同様の処理を行う構成でも良い。これは図９に示されたすべての入出力コントローラ、入出力ノードに当てはまる。
また、図９に示した入出力コントローラ５２−ｊは、ネットワーク２に接続されるのではなく、入出力コントローラ５２−ｉ（図示せず）としてプロセッサノード１−ｉ内に備えられても良い。この場合、入出力ノード３−ｊには、上記の入出力セレクタ５１−ｊが設けられていることが好ましい。これは、他のコントローラについても同様である。
また、図４や図９に示す構成で、ｍとｎとが等しく、プロセッサノード１−ｉと入出力ノード３−ｊとで一つのノード（図示せず）を構成してもよい。この場合、そのノードには、ネットワーク２が接続され、上記の入出力セレクタ５１−ｊが備えられることが好ましい。勿論、これも他のプロセッサノードと入出力ノードにも当てはまる。
以上の説明で明らかなように、本発明のマルチプロセッサシステムによれば、入出力コントローラ５０−ｊが、異なるプロセッサノード１−ｉを宛先とする入出力デバイス６０−ｊ−１、６０−ｊ−２からの複数のライトメッセージを連続して処理することができる。また、入出力コントローラ５０−ｊが複数のライトメッセージを連続して処理するため、入出力コントローラ５０−ｊがライトメッセージの処理を行う場合に要する時間を従来のそれよりも短くすることができる。前述したように、参照番号５０−ｊ、１−ｉ、６０−ｊ−１、６０−ｊ−２は代表例としてあげているにすぎない。
以下では、入出力コントローラ５０−ｊとメモリコントローラ４０−ｉ間のやりとりをより詳細に説明する。
【実施例】［第１実施例］
上述のように、ディレクトリ２０−ｉは、主記憶部３０−ｉに格納されているデータの一貫性制御に関する情報を、例えば１２８バイトのブロック単位で保持している。データの一貫性制御に関する情報は、主記憶部３０−ｉの各ブロックの状態情報（データの一貫性制御に関する状態情報）と、マップ情報とを含む。
ブロックの状態情報（データの一貫性制御に関する状態情報）は、上述のように、他のアクセス要求を受け付けることができるフリー状態情報と、他のアクセス要求を受け付けることができないライトロック状態情報とを含む。
フリー状態情報は、例えば、Ｕｎｃａｃｈｅｄ、Ｃｌｅａｎ、Ｄｉｒｔｙ（以降Ｕ、Ｃ、Ｄとも略す）の３つの状態情報からなる。
Ｕｎｃａｃｈｅｄ状態情報は、複数のプロセッサノード１−１〜１−ｍのうちのどのプロセッサノードもデータをキャッシングしていないことを示す。Ｃｌｅａｎ状態情報は、複数のプロセッサノード１−１〜１−ｍのうちの少なくとも１つのプロセッサノードがデータをキャッシングしていることを示す。Ｄｉｒｔｙ状態情報は、複数のプロセッサノード１−１〜１−ｍのうちのある１つのプロセッサノードがデータをキャッシングし、最新のデータはその１つのプロセッサノードにのみ存在することを示す。
また、ブロックの状態情報（データの一貫性制御に関する状態情報）は、他のアクセス要求を受け付けることができない状態情報として、リクエストされたメッセージのみを受け付けることができるリクエストロック状態情報を含むものとする。
本発明において、ライトロック状態情報は、リクエストロック状態情報と同一にしてもよいし異なる状態情報としても良い。以降の説明では二つの異なる状態情報（以降、リクエストロック状態情報をＲ、ライトロック状態情報をＷとも略す）として存在する場合を例にとり説明する。
また、マップ情報は、各プロセッサノード１−ｉがブロックのデータをキャッシングしているかどうかを示す情報である。プロセッサノード数分のビットを用いて、マップ情報について説明する。図４の構成例としてｍを３とする。即ち、プロセッサノード１−１、１−２、１−３が存在するので、マップ情報を３ビットで表現するものとする。
例えば“０００”はどのプロセッサノード１−１、１−２、１−３もデータをキャッシングしていないことを示す。“００１”はプロセッサノード１−１がデータをキャッシングしていることを示す。“０１０”はプロセッサノード１−２がデータをキャッシングしていることを示す。“１００”はプロセッサノード１−３がデータをキャッシングしていることを示す。同様に、“１１０”はプロセッサノード１−２とプロセッサノード１−３がデータをキャッシングしていることを示す。
図１０を参照しながら、本発明の第１実施例に係るマルチプロセッサシステムの第１の動作例を説明する。第１の動作例は、メモリコントローラ４０−１が書き込み要求Ａメッセージを受けたときに、ディレクトリ２０−１の該当するブロックの状態情報がＵｎｃａｃｈｅｄ状態情報であった場合の動作である。図１０は、入出力デバイス６０−１−１が、データＡに対するライトメッセージをステップ１で発行した場合の動作を示している。ここで、データＡはプロセッサノード１−１をホームとするデータであるとする。また、１ステップは１クロックに対応する。
入出力コントローラ５０−１は、ステップ２にて、ライトＡメッセージを受け取る。この場合、入出力コントローラ５０−１は、ステップ３にて、ホームのメモリコントローラ４０−１に宛ててネットワーク２に書き込み要求Ａメッセージを出力する。
メモリコントローラ４０−１は、ステップ４にて、入出力コントローラ５０−１からの書き込み要求Ａメッセージを受け取り、ディレクトリ２０−１が保持するデータＡの状態情報をフリー状態情報からライトロック状態情報に更新する。即ち、ディレクトリ２０−１の該ブロックの値を“Ｕ、０００”から“Ｗ、０００”に更新する。ここで、“Ｕ、０００”は状態情報がＵ（Ｕｎｃａｃｈｅｄ）であることを示し、マップ情報が“０００”であることを示す。また、メモリコントローラ４０−１は、ステップ５にて、入出力コントローラ５０−１に宛ててネットワーク２に書き込み許可Ａメッセージを出力する。
入出力コントローラ５０−１は、ステップ６にて、書き込み許可Ａメッセージを受け取る。次に、ステップ７にて、更新Ａメッセージをメモリコントローラ４０−１に宛ててネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ８にて、入出力コントローラ５０−１からの更新Ａメッセージを受け取り、主記憶部３０−１のデータの値を更新Ａメッセージで指定される値に更新する。そして、ディレクトリ２０−１が保持するデータＡの状態情報をライトロック状態情報からフリー状態情報に更新する。即ち、ディレクトリ２０−１の該当するブロックの値を“Ｗ、０００”から“Ｕ、０００”に更新する。
図１１を参照しながら、本発明の第１実施例に係るマルチプロセッサシステムの第２の動作例を説明する。第２の動作例は、メモリコントローラ４０−１が書き込み要求Ａメッセージを受けたときに、ディレクトリ２０−１の該当するブロックの状態情報がＣｌｅａｎ状態情報で、プロセッサノード１−２とプロセッサノード１−３がデータをキャッシングしている場合の動作である。図１１は、入出力デバイス６０−１−１が、データＡに対するライトメッセージをステップ１で発行した場合の動作を示している。ここで、データＡはプロセッサノード１−１をホームとするデータであるとする。また、１ステップは１クロックに対応する。
入出力コントローラ５０−１は、ステップ２にて、ライトＡメッセージを受け取る。この場合、入出力コントローラ５０−１は、ステップ３にて、ホームのメモリコントローラ４０−１に宛てて書き込み要求Ａメッセージをネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ４にて、入出力コントローラ５０−１からの書き込み要求Ａメッセージを受け取り、ディレクトリ２０−１が保持するデータＡの状態情報をフリー状態情報からライトロック状態情報に更新する。即ち、ディレクトリ２０−１の該当するブロックの値を“Ｃ、１１０”から“Ｗ、０００”に更新する。ここで、“Ｃ、１１０”は状態情報がＣ（Ｃｌｅａｎ）であることを示し、マップ情報が“１１０”であることを示す。また、メモリコントローラ４０−１は、ステップ５にて、入出力コントローラ５０−１に宛ててネットワーク２に応答Ａメッセージを出力し、メモリコントローラ４０−２とメモリコントローラ４０−３に宛てて無効化Ａメッセージを出力する。この場合、応答Ａメッセージには、キャッシングしているプロセッサノードの数（この例では２）が付加される。
入出力コントローラ５０−１は、ステップ６にて、応答Ａメッセージを受け取る。また、メモリコントローラ４０−２、メモリコントローラ４０−３は、ステップ６にて、それぞれ無効化Ａメッセージを受け取り、それぞれプロセッサノード１−２、プロセッサノード１−３でキャッシングしているデータＡを無効化する。続いて、メモリコントローラ４０−２、メモリコントローラ４０−３は、ステップ７にて、それぞれ入出力コントローラ５０−１に宛てて無効化完了Ａメッセージをネットワーク２に出力する。
入出力コントローラ５０−１は、ステップ８にて、応答Ａメッセージに付加されている数の無効化完了Ａメッセージを受け取った時点で、書き込み許可Ａメッセージを受け取ったと解釈（認識）する。入出力コントローラ５０−１は、ステップ９にて、更新Ａメッセージをメモリコントローラ４０−１に宛ててネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ１０にて、入出力コントローラ５０−１からの更新Ａメッセージを受け取り、主記憶部３０−１のデータの値を更新Ａメッセージで指定される値に更新する。続いて、メモリコントローラ４０−１は、ディレクトリ２０−１が保持するデータＡの状態情報をライトロック状態情報からフリー状態情報に更新する。即ち、ディレクトリ２０−１の該当するブロックの値を“Ｗ、０００”から“Ｕ、０００”に更新する。
図１２を参照しながら、本発明の第１実施例に係るマルチプロセッサシステムの第３の動作を説明する。第３の動作例は、メモリコントローラ４０−１が書き込み要求Ａメッセージを受けたときに、ディレクトリ２０−１の該当するブロックの状態情報がＤｉｒｔｙ状態情報で、プロセッサノード１−２がデータをキャッシングしている場合の動作である。図１２は、入出力デバイス６０−１−１が、データＡに対するライトメッセージをステップ１で発行した場合の動作を示している。ここで、データＡはプロセッサノード１−１をホームとするデータであるとする。また、１ステップは１クロックに対応する。
入出力コントローラ５０−１は、ステップ２にて、ライトＡメッセージを受け取る。この場合、入出力コントローラ５０−１は、ステップ３にて、ホームのメモリコントローラ４０−１に宛てて書き込み要求Ａメッセージをネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ４にて、入出力コントローラ５０−１からの書き込み要求Ａメッセージを受け取り、ディレクトリ２０−１が保持するデータＡの状態情報をフリー状態情報からリクエストロック状態情報に更新する。即ち、メモリコントローラ４０−１は、ディレクトリ２０−１の該当するブロックの値を“Ｄ、０１０”から“Ｒ、０１０”に更新する。ここで、“Ｒ、０１０”は状態情報がＲ（Ｒｅｑｕｅｓｔ  Ｒｏｃｋ）であることを示し、マップ情報が“０１０”であることを示す。また、メモリコントローラ４０−１は、ステップ５にて、入出力コントローラ５０−１に宛てて書き戻し要求Ａメッセージをネットワーク２に出力する。なお、リクエストロック状態情報である“Ｒ，０１０”への更新ではなく、ライトロック状態情報である“Ｗ，０００”への更新であっても構わない。
メモリコントローラ４０−２は、ステップ６にて、メモリコントローラ４０−１からの書き戻し要求Ａメッセージを受け取り、プロセッサノード１−２でキャッシングしているデータＡの書き戻しを行う。続いて、メモリコントローラ４０−２は、ステップ７にて、メモリコントローラ４０−１に宛てて書き戻しＡメッセージをネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ８にて、リクエストロック状態情報によりリクエストされたメッセージとして、書き戻しＡメッセージをメモリコントローラ４０−２から受け取り、ディレクトリ２０−１が保持するデータＡの状態情報をリクエストロック状態情報からライトロック状態情報に更新する。即ち、ディレクトリ２０−１の該当するブロックの値を“Ｒ、０１０”から“Ｗ、０００”に更新する。また、メモリコントローラ４０−１は、ステップ９にて、入出力コントローラ５０−１に宛てて書き込み許可Ａメッセージをネットワーク２に出力する。
入出力コントローラ５０−１は、ステップ１０にて、書き込み許可Ａメッセージを受け取る。入出力コントローラ５０−１は次に、ステップ１１にて、更新Ａメッセージをメモリコントローラ４０−１に宛ててネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ１１にて、入出力コントローラ５０−１からの更新Ａメッセージを受け取り、主記憶部３０−１のデータの値を更新Ａメッセージで指定される値に更新する。続いてメモリコントローラ４０−１は、ディレクトリ２０−１が保持するデータＡの状態情報をライトロック状態情報からフリー状態情報に更新する。即ち、ディレクトリ２０−１の該当するブロックの値を“Ｗ、０００”から“Ｕ、０００”に更新する。
図１３を参照しながら、本発明の第１実施例に係るマルチプロセッサシステムの第３の動作例を説明する。第３の動作例は、メモリコントローラ４０−１が書き込み要求Ａメッセージを受けたときに、ディレクトリ２０−１の該当するブロックの状態情報がリクエストロック状態情報“Ｒ”あるいはライトロック状態情報“Ｗ”であった場合の動作である。図１３は、入出力デバイス６０−１−１が、データＡに対するライトメッセージをステップ１で発行した場合の動作を示している。ここで、データＡはプロセッサノード１−１をホームとするデータであるとする。また、１ステップは１クロックに対応する。
入出力コントローラ５０−１は、ステップ２にて、ライトＡメッセージを受け取る。この場合、入出力コントローラ５０−１は、ステップ３にて、ホームのメモリコントローラ４０−１に宛てて書き込み要求Ａメッセージをネットワーク２に出力する。
メモリコントローラ４０−１は、ステップ４にて、入出力コントローラ５０−１からの書き込み要求Ａメッセージを受け取る。この場合、ディレクトリ２０−１が保持するデータＡの状態情報は、リクエストロック状態情報“Ｒ”あるいはライトロック状態情報“Ｗ”である。このため、メモリコントローラ４０−１は、ステップ５にて、入出力コントローラ５０−１に宛てて不許可Ａメッセージをネットワーク２に出力する。
入出力コントローラ５０−１は、ステップ６にて、不許可Ａメッセージを受け取り、ステップ７にて、メモリコントローラ４０−１に宛てて書き込み要求Ａメッセージをネットワーク２に再出力する。ステップ７以降の動作は、これまで図１０から図１２を参照しながら説明した動作と同じであるので省略する。
以上のように動作することで、ディレクトリのマップ情報に入出力ノード分のビットを加えなくて済む。また、ホームが受けたプロセッサからのアクセス要求を、入出力コントローラ５０−ｊに対して転送せずに済み、メモリコントローラや入出力コントローラの構成が複雑にならずに済む。
［第２実施例］
本発明によるマルチプロセッサシステムの入出力コントローラは図１４に示すように構成されても良い。図１４を参照して入出力コントローラ５０−ｊに適用した場合について説明する。
図１４に示した入出力コントローラ５０−ｊは、図７に示した入出力コントローラ５０−ｊに更に、開放処理ポインタ７８−ｊと開放処理フラグ７９−ｊを付加している。初期状態で、開放処理フラグ７９−ｊの値は“０”である。
基本動作は第１実施例と同様であるので、ここでは異なる動作のみを説明し、同じ動作は省略する。また、最良の実施の形態と同様に、入出力ノード３−１〜３−ｎのうちの第１入出力ノード３−１の入出力デバイス６０−１−１、６０−１−２によって１番目からＭ番目（Ｍは２以上の整数）までのＭ個のデータに対するＭ個のライトメッセージが発行されたものとする。以降、第Ｉライトメッセージを例にとり説明する。
図４をも参照して、メモリコントローラ４０−ｉは、第Ｉデータに対して前記ライトロック状態情報がディレクトリ２０−ｉに格納されているときに、第Ｉデータに対する第Ｉ書き込み要求メッセージを入出力コントローラ５０−１から受け取った場合、第Ｉ書き込み要求メッセージに対して第Ｉ開放要求メッセージを入出力コントローラ５０−１にネットワーク２を介して出力する。第Ｉ開放要求メッセージを受けた入出力コントローラ５０−１は、第Ｉ書き込み要求メッセージをメモリコントローラ４０−ｉに宛ててネットワーク２に出力する。また、開放処理フラグ７９−１（図示せず）の値を“０”から“１”に更新し、開放処理ポインタ７８−１の値を、第Ｉ番目のライトトランザクションであることを示す情報“Ｉ”に設定する。続いて、後述の開放処理を行う。
開放処理フラグ７９−１は、入出力コントローラ５０−１が後述の開放処理を行っている状態であるかどうかを示す。一方、開放処理ポインタ７８−１（図示せず）は、開放処理がどのライトトランザクションによって引き起こされたものであるかを示す。開放処理ポインタ７８−１の値は、開放処理を引き起こしたライトトランザクションと他のライトトランザクションとの順序関係（先行するものか後続するものか）を判断するのにも用いる。
入出力コントローラ５０−１は、開放処理フラグ７９−１の値が“１”の間、第Ｉライトに後続する第Ｋトランザクションに関して、次の処理を行う。但し、Ｋは、Ｋ＝Ｉ＋１、Ｉ＋２、…、Ｍを満たす整数であり、Ｉ＋１は、Ｉ＜（Ｉ＋１）＜Ｍを満たす整数であり、Ｉ＋２は、（Ｉ＋１）＜（Ｉ＋２）＜Ｍを満たす整数である。
入出力コントローラ５０−１は、未だ第Ｋ書き込み要求メッセージを発行していない場合、第Ｋ書き込み要求メッセージの発行を停止する。
入出力コントローラ５０−１は、既に第Ｋ書き込み要求メッセージを発行し第Ｋ書き込み許可メッセージを受け取っている場合、以下のように動作する。つまり、入出力コントローラ５０−１は、許可フラグ７６−１（図示せず）の該当するエントリの値を“０”に更新し、第Ｋ開放メッセージを前記第Ｋデータのホームであるプロセッサノード１−ｋ（ｋ＝１、２、…、ｍ）のメモリコントローラ４０−ｋ（図示せず）にネットワーク２を介して出力する。
入出力コントローラ５０−１は、既に第Ｋ書き込み要求メッセージを発行し未だ第Ｋ書き込み許可メッセージを受け取っていない場合、第Ｋ書き込み許可メッセージを受け取ったときに、許可フラグ７６−１の該当するエントリの値を“１”に更新せず、第Ｋ開放メッセージの発行を行う。
第Ｋ開放メッセージを受け取ったメモリコントローラ４０−ｋは、そのディレクトリ２０−ｋ（図示せず）が保持するデータの状態情報をライトロック状態情報からフリー状態情報に更新する。即ち、ディレクトリ２０−ｋの該当するブロックの値を“Ｗ、０００”から“Ｕ、０００”に更新する。
既に第Ｋ書き込み要求メッセージを発行したがまだ第Ｋ許可メッセージを受け取っていない場合、入出力コントローラ５０−１は受け取るメッセージによって次のように動作する。入出力コントローラ５０−１は第Ｋ書き込み許可メッセージを受け取った場合、許可フラグ７６−１の該当するエントリの値は“０”のままとし、第Ｋ開放メッセージをメモリコントローラ４０−ｋに発行する。第Ｋ不許可メッセージあるいは第Ｋ開放要求メッセージを受け取った場合はなにもしない。
また、入出力コントローラ５０−１は、開放処理フラグ７９−１の値が“１”の間、第Ｉライトトランザクションに先行する第１〜第（Ｉ−１）ライトトランザクションに関しては、第１実施例と同じように動作する。ただし、先行する第Ｌライトトランザクションで開放要求メッセージを受け取った場合、入出力コントローラ５０−１は第Ｌ書き込み要求メッセージをメモリコントローラ４０−１に宛ててネットワーク２に出力する。なお、Ｌは、１≦Ｌ≦（Ｉ−１）を満たす整数である。入出力コントローラ５０−１はまた、開放処理ポインタ７８−１の値を第Ｌ番目のライトトランザクションであることを示す情報に設定する。そして、第Ｌライトを基準に、先行するライトトランザクションであるか、後続するライトトランザクションであるかを判断し、上記開放処理を行う。
入出力コントローラ５０−１は開放処理ポインタ７８−１の値が示すライトトランザクション（ここでは第Ｉライトトランザクションとする）に関して第Ｉ書き込み許可メッセージを受け取ると、第Ｉ更新メッセージをメモリコントローラ４０−ｉに発行する。入出力コントローラ５０−１はまた、開放処理フラグ７９−１の値を“０”に更新し、開放処理を終了する。
以上のような動作により、例えば入出力デバイス６０−１−１がライトＡメッセージ、ライトＣメッセージの順に発行し、別の入出力デバイス６０−２−２がライトＣメッセージ、ライトＡメッセージの順に発行した場合のデッドロックの危険性を回避することができる。
［第３実施例］
本発明のマルチプロセッサシステムは、以下に示すような動作を実行することもできる。
ディレクトリ（例えば２０−ｉ）に格納される情報として、前述した状態情報に加えて、さらにある特定のメッセージの処理のみを受け付ける割り込み可ライトロック状態情報（以降Ｗｉと記す）が存在する。また、割り込み可ライトロック状態時にどの入出力ノード（例えば３−ｊ）が発行したメッセージによって遷移したかを示すフィールドが加わる。以降例えば“Ｗｉ、０００、２”とした場合、入出力ノード３−２が発行したメッセージによって割り込み可ライトロック状態に遷移したことを示す。
基本動作は第１実施例と同様であるので、ここでは異なる動作のみを説明し、同じ動作は省略する。また、最良の実施の形態と同様に、入出力ノード３−１〜３−ｎのうちの第１入出力ノード３−１の入出力デバイス６０−１−１、６０−１−２によって１番目からＭ番目までのＭ個のデータに対するＭ個のライトメッセージが発行されたものとする。以降、第Ｉライトメッセージを例にとり説明する。
入出力コントローラ５０−１は、第Ｉライトメッセージを受けたとき、第１〜第（Ｉ−１）書き込み許可メッセージまでの（Ｉ−１）個の書き込み許可メッセージを既に受け取っているか否かを検査し、受け取り済みであれば第Ｉ強書き込み要求メッセージを、受け取り済みでなければ第Ｉ弱書き込み要求メッセージを発行する。
メモリコントローラ４０−ｉは、第Ｉデータに対してフリー状態情報がディレクトリ２０−ｉに格納されているときに、第Ｉ強書き込み要求メッセージを入出力コントローラ５０−１から受け取った場合、以下のように動作する。つまり、メモリコントローラ４０−ｉは、前記フリー状態情報に代えて、プロセッサや入出力デバイスからの読み出し要求や、前記第Ｉデータに対する他の強書き込み要求メッセージ及び弱書き込み要求メッセージの両方を受け付けることができないライトロック状態情報をディレクトリ２０−ｉに格納する。メモリコントローラ４０−ｉはまた、入出力コントローラ５０−１に宛てて第Ｉ書き込み許可メッセージをネットワーク２に出力する。
メモリコントローラ４０−ｉは、第Ｉデータに対してフリー状態情報がディレクトリ２０−ｉに格納されているときに、第Ｉ弱書き込み要求メッセージを入出力コントローラ５０−１から受け取った場合、以下のように動作する。つまり、メモリコントローラ４０−ｉは、前記フリー状態情報に代えて、プロセッサや入出力デバイスからの読み出し要求や、前記第Ｉデータに対する他の弱書き込み要求メッセージを受け付けることができない割り込み可ライトロック状態情報をディレクトリ２０−ｉに格納する。メモリコントローラ４０−ｉはまた、入出力コントローラ５０−１に宛てて第Ｉ書き込み許可メッセージをネットワーク２に出力する。
メモリコントローラ４０−ｉは、第Ｉデータに対してライトロック状態情報がディレクトリ２０−ｉに格納されているときに、第Ｉ強書き込み要求メッセージを入出力コントローラ５０−１から受け取った場合、入出力コントローラ５０−１に宛てて第１不許可メッセージをネットワーク２に出力する。
メモリコントローラ４０−ｉは、第Ｉデータに対して割り込み可ライトロック状態情報あるいはライトロック状態情報がディレクトリ２０−ｉに格納されているときに、第Ｉ弱書き込み要求メッセージを入出力コントローラ５０−１から受け取った場合、入出力コントローラ５０−１に宛てて第Ｉ不許可メッセージをネットワーク２に出力する。
入出力コントローラ５０−１は、第Ｉ不許可メッセージを受け取ると、第１〜第（Ｉ−１）書き込み許可メッセージまでの（Ｉ−１）個の書き込み許可メッセージを既に受け取っているか否かを検査し、受け取り済みであれば第Ｉ強書き込み要求メッセージを、受け取り済みでなければ第Ｉ弱書き込み要求メッセージを発行する。
メモリコントローラ４０−ｉは、第Ｉデータに対して割り込み可ライトロック状態情報がディレクトリ２０−ｉに格納されているときに、第Ｉ強書き込み要求メッセージを入出力コントローラ５０−１から受け取った場合、前記割り込み可ライトロック状態情報に代えて、リクエストロック状態情報をディレクトリ２０−ｉに格納する。ディレクトリ２０−ｉに格納された入出力コントローラを特定する情報が例えば入出力コントローラ５０−２を指す場合、メモリコントローラ４０−ｉは、入出力コントローラ５０−２に宛てて第Ｉ再試行要求メッセージをネットワークに２出力する。
第Ｉ再試行要求メッセージを受け取った入出力コントローラ５０−２は、以下に示す再試行処理を行う。
まず、入出力コントローラ５０−２はメモリコントローラ４０−ｉに宛てて第Ｉ開放メッセージをネットワーク２に出力する。
入出力コントローラ５０−２は、次に、受け取ったライトメッセージの中で、前記第Ｉデータとアドレスを同じくするライトメッセージで書き込み許可メッセージを受け取り済みのものに関して、まだ更新メッセージを発行していなければ更新メッセージの発行を停止する。入出力コントローラ５０−２はまた、前記第Ｉ開放メッセージの発行後に、メモリコントローラ４０−ｉに宛てて書き込み要求メッセージを発行する。これで再試行処理は終わる。
メモリコントローラ４０−ｉは、前記第Ｉ開放メッセージを受け取ると、リクエストロック状態情報に代えてライトロック状態情報をディレクトリ２０−ｉに格納する。メモリコントローラ４０−ｉはまた、入出力コントローラ５０−１に宛てて第Ｉ書き込み許可メッセージをネットワーク２に出力する。
メモリコントローラ４０−ｉは、第Ｉデータに対してリクエストロック状態情報がディレクトリ２０−ｉに格納されているときに、第Ｉデータに対する更新メッセージを入出力コントローラ５０−２から受け取った場合、主記憶部３０−２のデータの値を更新メッセージで指定される値に更新する。
第３実施例の変形として、次のような変形も可能である。
第Ｉ再試行要求メッセージを受け取った入出力コントローラ５０−２が行う再試行処理について説明する。この場合、入出力コントローラ５０−２は受け取ったライトメッセージの中で、前記第Ｉデータとアドレスを同じくするライトメッセージで書き込み許可メッセージを受け取り済みのものに関して、まだ更新メッセージを発行していなければ第Ｉ開放メッセージを発行する。入出力コントローラ５０−２は、その後にメモリコントローラ４０−ｉに宛てて書き込み要求メッセージを発行し処理を終える。入出力コントローラ５０−２は、まだ更新メッセージを発行していればなにもせず処理を終える。
メモリコントローラ４０−ｉは、前記第Ｉ開放メッセージを受け取ると、リクエストロック状態情報に代えてライトロック状態情報をディレクトリ２０−ｉに格納する。メモリコントローラ４０−ｉはまた、入出力コントローラ５０−１に宛てて第Ｉ書き込み許可メッセージをネットワーク２に出力する。
メモリコントローラ４０−ｉは、第Ｉデータに対してリクエストロック状態情報がディレクトリ２０−ｉに格納されているときに、第Ｉデータに対する更新メッセージを入出力コントローラ５０−２から受け取った場合、主記憶部３０−２のデータの値を更新メッセージで指定される値に更新する。メモリコントローラ４０−ｉはまた、リクエストロック状態情報に代えてライトロック状態情報をディレクトリ２０−ｉに格納する。続いて、メモリコントローラ４０−ｉは、入出力コントローラ５０−１に宛てて第Ｉ書き込み許可メッセージをネットワーク２に出力する。
以上のように構成及び動作により、第２実施例と同じようにデッドロックの危険性を回避することができる。
以上説明してきたように、本発明のマルチプロセッサシステム及びメモリアクセス処理方法によれば、入出力コントローラが、異なるプロセッサノードを宛先とする入出力デバイスからの複数のライトメッセージを連続して処理することができる。また、本発明のマルチプロセッサシステム及びメモリアクセス処理方法によれば、入出力コントローラが複数のライトメッセージを連続して処理するため、入出力コントローラがライトメッセージの処理を行う場合に要する時間を従来のそれよりも短くすることができる。
以下に、本発明によるマルチプロセッサシステムのいくつかの態様を記載する。
［第１の態様］
マルチプロセッサシステムは、ネットワークに接続された複数のプロセッサノードと、ネットワークに接続された複数の入出力ノードと、複数の入出力コントローラとを具備する。
複数のプロセッサノードは、それぞれ複数のプロセッサと、複数のデータを格納する主記憶部と、複数のデータの各々に対してアクセス要求を受け付けることが可能なフリー状態情報が格納されたディレクトリと、複数のプロセッサと主記憶部とディレクトリとに接続されたメモリコントローラとを含む。
複数の入出力ノードは、それぞれライトメッセージを発行する複数の入出力デバイスを含む。
複数の入出力ノードのうちの第１入出力ノードの複数の入出力デバイスによって１番目からＭ番目（Ｍは２以上の整数）までのＭ個のデータに対するＭ個のライトメッセージが発行されたとき、複数の入出力コントローラのうちの第１入出力コントローラは、Ｍ個のそれぞれのデータに対するＭ個のライトトランザクションを開始する。Ｍ個のデータのうちのある第Ｉデータ（Ｉは、Ｉ＝１、２、…、Ｍを満たす整数）は、複数のプロセッサノードのうちの第１プロセッサノードをホームとするデータである。第Ｉライトメッセージは第１プロセッサノードの主記憶部に格納された複数のデータのうちの第Ｉデータの値を第Ｉライトメッセージで指定される値に更新するための命令である。第１入出力コントローラは、第Ｉライトトランザクションの処理として、第Ｉ書き込み要求メッセージを第１プロセッサノードにネットワークを介して出力する。
第１プロセッサノードのメモリコントローラは、第Ｉ書き込み要求メッセージを受け取ったとき、第Ｉデータに対して、フリー状態情報に代えて、第Ｉデータに対するプロセッサや入出力デバイスからの読み出し要求や他の書き込み要求メッセージを受け付けることができないライトロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ書き込み要求メッセージに対して第Ｉ書き込み許可メッセージを第１入出力コントローラにネットワークを介して出力する。
第１入出力コントローラは、第Ｉ書き込み許可メッセージを受け取ったときに第Ｉライトトランザクションの更新メッセージ発行処理を行う。第１入出力コントローラはまた、更新メッセージ発行処理において、第１から第Ｉ書き込み許可トランザクションまでのＩ個の書き込み許可メッセージを既に受け取っているか否かを検査する。第１入出力コントローラは、Ｉ個の書き込み許可メッセージをまだ受け取っていなければ、第Ｉ更新メッセージ発行処理を終了する。第１入出力コントローラはまた、Ｉ個の書き込み許可メッセージを既に受け取っているとき、第Ｉライトメッセージで指定される値を含む第Ｉ更新メッセージを第１プロセッサノードにネットワークを介して出力して第Ｉライトトランザクションを完了させる。第１入出力コントローラは更に、（Ｉ＋１）がＭ以下であれば第（Ｉ＋１）ライトトランザクションの更新メッセージ発行処理を行い、（Ｉ＋１）がＭより大きければ第Ｉ更新メッセージ発行処理を終了する。
第１プロセッサノードのメモリコントローラは、第Ｉ更新メッセージを受け取ったとき、第Ｉデータに対してライトロック状態情報に代えてフリー状態情報を第１プロセッサノードのディレクトリに格納すると共に、第１プロセッサノードの主記憶部に格納された第Ｉデータの値を第Ｉ更新メッセージで指定される値に更新する。
［第２の態様］
第１の態様によるマルチプロセッサシステムにおいて、複数の入出力コントローラは、それぞれ複数の入出力ノード内に備えられる。複数の入出力ノードの各々の入出力コントローラには、複数の入出力ノードの各々の複数の入出力デバイスによって発行されるＭ個のライトメッセージを調停するセレクタが備えられる。
［第３の態様］
第１の態様によるマルチプロセッサシステムにおいて、複数の入出力コントローラはネットワークに接続される。複数の入出力ノードの各々には、複数の入出力ノードの各々の複数の入出力デバイスによって発行されるＭ個のライトメッセージを調停するセレクタが備えられる。
［第４の態様］
第１の態様によるマルチプロセッサシステムにおいて、複数の入出力コントローラは、それぞれ複数のプロセッサノード内に備えられる。複数の入出力ノードの各々には、複数の入出力ノードの各々の複数の入出力デバイスによって発行されるＭ個のライトメッセージを調停するセレクタが備えられる。
［第５の態様］
第１の態様によるマルチプロセッサシステムにおいて、複数のプロセッサノードと複数の入出力ノードとが、それぞれ複数のノードを構成する。複数のノードの各々には、複数のノードの各々の複数の入出力デバイスによって発行されるＭ個のライトメッセージを調停するセレクタが備えられる。
第１〜第５の態様のいずれかによるマルチプロセッサシステムにおいて、第１プロセッサノードのメモリコントローラは、第Ｉデータに対してライトロック状態情報が第１プロセッサノードのディレクトリに格納されているときに、第Ｉデータに対する第Ｉ書き込み要求メッセージを第１入出力コントローラから受け取った場合、第Ｉ書き込み要求メッセージに対して第Ｉ開放要求メッセージを第１入出力コントローラにネットワークを介して出力する。
第１入出力コントローラは、第Ｉ開放要求メッセージを受けて第Ｉ書き込み要求メッセージを第１プロセッサノードのメモリコントローラにネットワークを介して出力すると共に、開放処理を行う。
第１入出力コントローラは、開放処理において、第Ｋライトトランザクション｛Ｋは、Ｋ＝Ｉ＋１、Ｉ＋２、…、Ｍを満たす整数、Ｉ＋１は、Ｉ＜（Ｉ＋１）＜Ｍを満たす整数、Ｉ＋２は、（Ｉ＋１）＜（Ｉ＋２）＜Ｍを満たす整数｝の進捗を検査する。
第１入出力コントローラは、未だ第Ｋ書き込み要求メッセージを発行していない場合、第Ｋ書き込み要求メッセージの発行を停止する。
第１入出力コントローラは、既に第Ｋ書き込み要求メッセージを発行し第Ｋ書き込み許可メッセージを受け取っている場合、第Ｋ開放メッセージを第Ｋデータのホームである第２プロセッサノードにネットワークを介して出力する。
第１入出力コントローラは、既に第Ｋ書き込み要求メッセージを発行しまだ第Ｋ書きこみ許可メッセージを受け取っていない場合は、第Ｋ書き込み許可メッセージを受け取った時点で第Ｋ開放メッセージの発行を行う。
第２プロセッサノードのメモリコントローラは、第Ｋ開放メッセージを受け取ったとき、第Ｋデータに対してライトロック状態情報に代えてフリー状態情報を第２プロセッサノードのディレクトリに格納する。
［第７の態様］
第１〜第５の態様のいずれかによるマルチプロセッサシステムにおいて、ディレクトリに格納される状態情報は、さらに割り込み可ライトロック状態情報とリクエストロック状態情報を含む。
第１入出力コントローラは第Ｉ書き込み要求メッセージを発行する際に、第１から第（Ｉ−１）書き込み許可メッセージまでの（Ｉ−１）個の書き込み許可メッセージを既に受け取っているか否かを検査し、受け取り済みであれば第Ｉ強書き込み要求メッセージを、受け取り済みでなければ第Ｉ弱書き込み要求メッセージを発行する。
第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報がフリー状態情報であるときに、第１プロセッサノードのメモリコントローラは、第Ｉ強書き込み要求メッセージを第１入出力コントローラから受け取った場合、フリー状態情報に代えて、プロセッサや入出力デバイスからの読み出し要求や、第Ｉデータに対する他の強・弱書き込み要求メッセージ両方を受け付けることができないライトロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ書き込み許可メッセージを第１入出力コントローラにネットワークを介して出力する。
第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報がフリー状態情報であるときに、第１プロセッサノードのメモリコントローラは、第Ｉ弱書き込み要求メッセージを第１入出力コントローラから受け取った場合、フリー状態情報に代えて、プロセッサや入出力デバイスからの読み出し要求や、第Ｉデータに対する他の弱書き込み要求メッセージを受け付けることができない割り込み可ライトロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ書き込み許可メッセージを第１入出力コントローラにネットワークを介して出力する。
割り込み可ライトロック状態情報は、この状態にした弱書き込み要求メッセージを発行した入出力コントローラを特定する情報を含む。
第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報がライトロック状態情報あるいはリクエストロック状態情報であるときに、第１プロセッサノードのメモリコントローラは、第Ｉ強書き込み要求メッセージを第１入出力コントローラから受け取った場合、第Ｉ不許可メッセージを第１入出力コントローラにネットワークを介して出力する。
第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報が割り込み可ライトロック状態情報、ライトロック状態情報、あるいはリクエストロック状態情報であるときに、第１プロセッサノードのメモリコントローラは、第Ｉ弱書き込み要求メッセージを第１入出力コントローラから受け取った場合、第Ｉ不許可メッセージを第１入出力コントローラにネットワークを介して出力する。
第１入出力コントローラは、第Ｉ不許可メッセージを受け取ったとき、第１から第（Ｉ−１）書き込み許可メッセージまでの（Ｉ−１）個の書き込み許可メッセージを既に受け取っているか否かを検査し、受け取り済みであれば第Ｉ強書き込み要求メッセージを、受け取り済みでなければ第Ｉ弱書き込み要求メッセージを発行する。
第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報が割り込み可ライトロック状態情報であるときに、第１プロセッサノードのメモリコントローラは、第Ｉ強書き込み要求メッセージを第１入出力コントローラから受け取った場合、割り込み可ライトロック状態情報に代えて、プロセッサや入出力デバイスからの読み出し要求や、第Ｉデータに対する他の弱書き込み要求メッセージを受け付けることができないリクエストロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ再試行要求メッセージをディレクトリに格納された入出力コントローラを特定する情報が指す第２入出力コントローラに宛ててネットワークを介して出力する。
第Ｉ再試行要求メッセージを受け取った第２入出力コントローラは、再試行処理を行う。
［第８の態様］
第７の態様によるマルチプロセッサシステムにおいて、第２入出力コントローラが行う再試行処理は以下の通りである。
はじめに、第Ｉ開放メッセージを第１プロセッサノードのメモリコントローラにネットワークを介して出力する。続いて、第Ｉデータとアドレスを同じくするライトトランザクションで書き込み許可メッセージを受け取り済みのものに関して、まだ更新メッセージを発行していなければ更新メッセージの発行を停止して、第Ｉ開放メッセージの発行後に、第１プロセッサノードに宛てて書き込み要求メッセージを発行する。第Ｉ開放メッセージを受けた第１プロセッサノードのメモリコントローラは、リクエストロック状態情報に代えてライトロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ書き込み許可メッセージを第１入出力コントローラに宛ててネットワークを介して出力する。
［第９の態様］
本発明によるメモリアクセス処理方法は以下のマルチプロセッサシステムに適用される。マルチプロセッサシステムは、複数のプロセッサノードと、複数の入出力ノードと、複数の入出力コントローラとを具備する。複数のプロセッサノードの各々は、複数のプロセッサと、複数のデータを格納する主記憶部と、複数のデータの各々に対してアクセス要求を受け付けることが可能なフリー状態情報が格納されたディレクトリと、複数のプロセッサと主記憶部とディレクトリとに接続されたメモリコントローラとを含む。複数の入出力ノードには、それぞれライトメッセージを発行する複数の入出力デバイスが備えられる。
本メモリアクセス処理方法においては、複数の入出力ノードのうちの第１入出力ノードの複数の入出力デバイスによって１番目からＭ番目（Ｍは２以上の整数）までのＭ個のデータに対するＭ個のライトメッセージが発行されたとき、複数の入出力コントローラのうちの第１入出力コントローラが、Ｍ個のそれぞれのデータに対するＭ個のライトトランザクションを開始する。
Ｍ個のデータのうちのある第Ｉデータ（Ｉは、Ｉ＝１、２、…、Ｍを満たす整数の何れか）は、複数のプロセッサノードのうちの第１プロセッサノードをホームとするデータである。第Ｉライトメッセージは第１プロセッサノードの主記憶部に格納された複数のデータのうちの第Ｉデータの値を第Ｉライトメッセージで指定される値に更新するための命令である。
メモリアクセス処理方法は、第１入出力コントローラが、第Ｉライトトランザクションの処理として、第Ｉ書き込み要求メッセージを第１プロセッサノードに出力するステップを含む。
メモリアクセス処理方法はまた、第１プロセッサノードのメモリコントローラが、第Ｉ書き込み要求メッセージを受け取ったとき、第Ｉデータに対して、フリー状態情報に代えて、第Ｉデータに対するプロセッサや入出力デバイスからの読み出し要求や他の書き込み要求メッセージを受け付けることができないライトロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ書き込み要求メッセージに対して第Ｉ書き込み許可メッセージを第１入出力コントローラに出力するステップを含む。
メモリアクセス処理方法は更に、第１入出力コントローラが、第Ｉ書き込み許可メッセージを受け取ったとき、第Ｉライトトランザクションの処理として更新メッセージ発行処理を行うステップを含む。
第１入出力コントローラが行う更新メッセージ発行処理は、第１から第Ｉ書き込み許可メッセージまでのＩ個の書き込み許可メッセージを既に受け取っているか否かを検査するステップを含む。
更新メッセージ発行処理はまた、Ｉ個の書き込み許可メッセージをまだ受け取っていなければ、第Ｉ更新メッセージ発行処理を終了するステップと、Ｉ個の書き込み許可メッセージを既に受け取っていれば、第Ｉライトメッセージで指定される値を含む第Ｉ更新メッセージを第１プロセッサノードに出力して第Ｉライトトランザクションを完了させ、（Ｉ＋１）がＭ以下であれば第（Ｉ＋１）ライトトランザクションの更新メッセージ発行処理を行い、（Ｉ＋１）がＭより大きければ第Ｉ更新メッセージ発行処理を終了するステップとを含む。
メモリアクセス処理方法は更に、第１プロセッサノードのメモリコントローラが、第Ｉ更新メッセージを受け取ったとき、第Ｉデータに対してライトロック状態情報に代えてフリー状態情報を第１プロセッサノードのディレクトリに格納すると共に、第１プロセッサノードの主記憶部に格納された第Ｉデータの値を第Ｉ更新メッセージで指定される値に更新するステップを含む。
［第１０の態様］
第９の態様によるメモリアクセス処理方法において、メモリアクセス処理方法は更に、複数の入出力ノードの各々の複数の入出力デバイスによって発行されるＭ個のライトメッセージを調停するステップを含む。
［第１１の態様］
第９又は第１０の態様によるメモリアクセス処理方法において、メモリアクセス処理方法は更に、第Ｉデータに対してライトロック状態情報が第１プロセッサノードのディレクトリに格納されているときに、第１プロセッサノードのメモリコントローラが、第Ｉデータに対する第Ｉ書き込み要求メッセージを第１入出力コントローラから受け取った場合、第Ｉ書き込み要求メッセージに対して第Ｉ開放要求メッセージを第１入出力コントローラに出力するステップを含む。メモリアクセス処理方法は更に、第１入出力コントローラが、第Ｉ開放要求メッセージを受けて第Ｉ書き込み要求メッセージを第１プロセッサノードのメモリコントローラに出力すると共に、開放処理を行なうステップを含む。
開放処理を行なうステップは、第Ｉデータに後続する第Ｋライトトランザクション｛Ｋは、Ｋ＝Ｉ＋１、Ｉ＋２、…、Ｍを満たす整数、Ｉ＋１は、Ｉ＜（Ｉ＋１）＜Ｍを満たす整数、Ｉ＋２は、（Ｉ＋１）＜（Ｉ＋２）＜Ｍを満たす整数｝の進捗を検査し、未だ第Ｋ書き込み要求メッセージを発行していない場合、第Ｋ書き込み要求メッセージの発行を停止するステップを含む。
開放処理を行なうステップはまた、既に第Ｋ書き込み要求メッセージを発行し第Ｋ書き込み許可メッセージを受け取っている場合、第Ｋ開放メッセージを第Ｋデータのホームである第２プロセッサノードのメモリコントローラに出力するステップと、既に第Ｋ書き込み要求メッセージを発行しまだ第Ｋ書き込み許可メッセージを受け取っていない場合は、第Ｋ書き込み許可メッセージを受け取った時点で第Ｋ開放メッセージの発行を行うステップとを含む。
メモリアクセス処理方法は更に、第２プロセッサノードのメモリコントローラが、第Ｋ開放メッセージを受け取ったとき、第Ｉデータに対してライトロック状態情報に代えてフリー状態情報を第２プロセッサノードのディレクトリに格納するステップを含む。
［第１２の態様］
第９又は第１０の態様によるメモリアクセス処理方法において、ディレクトリに格納される状態情報は、さらに割り込み可ライトロック状態情報とリクエストロック状態情報とを含む。
メモリアクセス処理方法は更に、第１入出力コントローラが第Ｉ書き込み要求メッセージを発行する際に、第１から第（Ｉ−１）書き込み許可メッセージまでの（Ｉ−１）個の書き込み許可メッセージを既に受け取っているか否かを検査し、受け取り済みであれば第Ｉ強書き込み要求メッセージを、受け取り済みでなければ第Ｉ弱書き込み要求メッセージを発行するステップを含む。
メモリアクセス処理方法は更に、第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報がフリー状態情報であるときに、第１プロセッサノードのメモリコントローラが、第Ｉ強書き込み要求メッセージを第１入出力コントローラから受け取った場合、フリー状態情報に代えて、プロセッサや入出力デバイスからの読み出し要求や、第Ｉデータに対する他の強・弱書き込み要求メッセージ両方を受け付けることができないライトロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ書き込み許可メッセージを第１入出力コントローラに出力するステップを含む。
メモリアクセス処理方法は更に、第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報がフリー状態情報であるときに、第１プロセッサノードのメモリコントローラが、第Ｉ弱書き込み要求メッセージを第１入出力コントローラから受け取った場合、フリー状態情報に代えて、プロセッサや入出力デバイスからの読み出し要求や、第Ｉデータに対する他の弱書き込み要求メッセージを受け付けることができない割り込み可ライトロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ書き込み許可メッセージを第１入出力コントローラに出力するステップを含む。
割り込み可ライトロック状態情報は、この状態にした弱書き込み要求メッセージを発行した入出力コントローラを特定する情報を含む。
メモリアクセス処理方法は更に、第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報がライトロック状態情報あるいはリクエストロック状態情報であるときに、第１プロセッサノードのメモリコントローラが、第Ｉ強書き込み要求メッセージを第１入出力コントローラから受け取った場合、第Ｉ不許可メッセージを第１入出力コントローラに出力するステップを含む。
メモリアクセス処理方法は更に、第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報が割り込み可ライトロック状態情報、ライトロック状態情報、あるいはリクエストロック状態情報であるときに、第１プロセッサノードのメモリコントローラが、第Ｉ弱書き込み要求メッセージを第１入出力コントローラから受け取った場合、第Ｉ不許可メッセージを第１入出力コントローラに出力するステップを含む。
メモリアクセス処理方法は更に、第１入出力コントローラが、第Ｉ不許可メッセージを受け取ったとき、第１から第（Ｉ−１）書き込み許可メッセージまでの（Ｉ−１）個の書き込み許可メッセージを既に受け取っているか否かを検査し、受け取り済みであれば第Ｉ強書き込み要求メッセージを、受け取り済みでなければ第Ｉ弱書き込み要求メッセージを発行するステップを含む。
メモリアクセス処理方法は更に、第１プロセッサノードのディレクトリに格納されている第Ｉデータの状態情報が割り込み可ライトロック状態情報であるときに、第１プロセッサノードのメモリコントローラが、第Ｉ強書き込み要求メッセージを第１入出力コントローラから受け取った場合、割り込み可ライトロック状態情報に代えて、プロセッサや入出力デバイスからの読み出し要求や、第Ｉデータに対する他の弱書き込み要求メッセージを受け付けることができないリクエストロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ再試行要求メッセージをディレクトリに格納された入出力コントローラを特定する情報が指す第２入出力コントローラに宛てて出力するステップを含む。
メモリアクセス処理方法は更に、第Ｉ再試行要求メッセージを受け取った第２入出力コントローラが、再試行処理を行うステップを含む。
［第１３の態様］
第１２の態様によるメモリアクセス処理方法において、第２入出力コントローラが行う再試行処理は、第Ｉ開放メッセージを第１プロセッサノードのメモリコントローラに出力するステップを含む。
再試行処理はまた、第Ｉデータとアドレスを同じくするライトトランザクションで書き込み許可メッセージを受け取り済みのものに関して、まだ更新メッセージを発行していなければ更新メッセージの発行を停止して、第Ｉ開放メッセージの発行後に、第１プロセッサノードに宛てて書き込み要求メッセージを発行するステップを含む。
再試行処理は更に、第Ｉ開放メッセージを受けた第１プロセッサノードのメモリコントローラが、リクエストロック状態情報に代えてライトロック状態情報を第１プロセッサノードのディレクトリに格納し、第Ｉ書き込み許可メッセージを第１入出力コントローラに宛てて出力するステップを含む。
【図１】
0004463276.tif 000002
【図２】
0004463276.tif 000003
【図３】
0004463276.tif 000004
【図４】
0004463276.tif 000005
【図５】
0004463276.tif 000006
【図６】
0004463276.tif 000007
【図７】
0004463276.tif 000008
【図８Ａ】
0004463276.tif 000009
【図８Ｂ】
0004463276.tif 000010
【図８Ｃ】
0004463276.tif 000011
【図８Ｄ】
0004463276.tif 000012
【図８Ｅ】
0004463276.tif 000013
【図８Ｆ】
0004463276.tif 000014
【図８Ｇ】
0004463276.tif 000015
【図８Ｈ】
0004463276.tif 000016
【図８Ｉ】
0004463276.tif 000017
【図９】
0004463276.tif 000018
【図１０】
0004463276.tif 000019
【図１１】
0004463276.tif 000020
【図１２】
0004463276.tif 000021
【図１３】
0004463276.tif 000022
【図１４】
0004463276.tif 000023