(57)【特許請求の範囲】
【請求項１】
相互結合網を介して互いに接続された複数のノードから構成されるマルチプロセッサシステムであって、
前記複数のノードはそれぞれデータが格納される主メモリと、
前記複数のノードのいずれかが備える主メモリに格納されているデータの一部が記憶される、前記主メモリよりも高速アクセスが可能なキャッシュメモリと、
データのアクセス要求を発行するプロセッサと、
前記主メモリのデータがシステム内でどういう状態にあるのかを管理し、前記キャッシュッメモリにあるデータのコピーの状態を管理し、前記プロセッサが所定のアドレスのデータに対してロード及びストアアクセスを行ったとき、メモリアクセスに応じてノード間でメッセージをやり取りし、それらの状態を変更し、またデータの転送を行う機能を有する一貫性維持制御部とを有し、
前記一貫性維持制御部は、
前記キャッシュメモリに記憶されているデータの状態が記憶されるタグメモリと、
前記主メモリに記憶されているデータの状態が記憶されるディレクトリメモリと、
前記プロセッサからのアクセス要求、前記複数のノードが備えるホームアクセス制御部が発行する要求や応答を受け、前記キャッシュメモリやタグメモリに対しては一貫性維持のために必要な処理を行い、前記プロセッサに対してはアクセス要求に対する応答を行うローカルアクセス制御部と、
前記複数のノードが備える前記ローカルアクセス制御部が発行する要求や応答を受けて、前記主メモリやディレクトリメモリに対して一貫性維持のために必要な処理を行い、前記ローカルアクセス制御部に要求や応答を発行するホームアクセス制御部と、
前記プロセッサが同時に発行可能なメモリアクセスの最大数に対応するエントリを有するリクエスト管理テーブルと、
書き戻しブロック選択手段とを具備し、
前記書き戻しブロック選択手段は、前記ローカルアクセス制御部が指定するアドレスを登録するアドレス登録手段と、前記アドレス登録手段により登録されたアドレスを複数保持するアドレス保持手段と、前記アドレス保持手段に格納された複数のアドレスから一つを選択して前記ローカルアクセス制御部に出力し、データの書き戻しを要求する書き戻し要求手段と、前記ローカルアクセス制御部の指示に従い前記書き戻し要求手段が選択しているアドレスを前記アドレス保持手段から削除するアドレス削除手段とを有し、
前記タグメモリに格納される状態は、少なくとも共有状態と専有状態の２状態を含み、
前記ディレクトリメモリに格納される状態は、一致状態と不一致状態の２状態を含み、またディレクトリメモリはさらにどのノードのキャッシュにコピーが存在するかを示す情報を保持し、
前記ローカルアクセス制御部は、タグメモリの状態が共有状態を示すブロックに対して書き込みが行われた時に、一貫性維持制御のために書き込み要求を発行する手段を有し、
前記ホームアクセス制御部は、前記書き込み要求を受けて、ディレクトリメモリの状態が一致状態にあり当該書き込み要求を発行したノード以外にコピーを保持するノードが存在する場合は共有状態と判定し、その判定情報を前記ローカルアクセス制御部への応答に付加する手段を有し、
前記ローカルアクセス制御部は当該応答を受けてタグメモリの状態を共有状態から専有状態に遷移させ、且つ共有状態にあるという応答であった場合は前記書き戻しブロック選択手段に当該アクセスのアドレスの登録を指示する手段を有し、
前記ローカルアクセス制御部はさらに、前記書き戻しブロック選択手段の要求に応じて、データの書き戻し処理を行う手段を有し、前記データの書き戻し処理では、タグメモリの状態を専有状態から共有状態に遷移させ、
前記ホームアクセス制御部は、前記ローカルアクセス制御部から書き戻し要求を受けて、ディレクトリメモリの状態を一致状態に更新する手段を有することを特徴とするマルチプロセッサシステム。
【請求項２】
請求項１に記載のマルチプロセッサシステムにおいて、
前記ディレクトリメモリは、さらに書き戻し回数をカウントした値を保持し、
前記ホームアクセス制御部は、さらに前記ローカルアクセス制御部から書き戻し要求を受けて、ディレクトリメモリの状態を一致状態に更新するとともに書き戻し回数の値を更新する手段と、書き戻し回数の閾値を記憶するレジスタを有し、
前記ホームアクセス制御部における前記判定情報を前記ローカルアクセス制御部への応答に付加する手段は、書き込み要求を受けたときに、ディレクトリメモリの状態が一致状態にあり当該書き込み要求を発行したノード以外にコピーを保持するノードが存在する場合と、一致状態にあり当該書き込み要求を発行したノードのみがコピーを保持する状態にあり書き戻し回数が閾値未満の場合は共有状態と判定し、その判定情報を前記ローカルアクセス制御部への応答に付加することを特徴とするマルチプロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、疎結合型のマルチプロセッサシステムに関し、特にこのようなマルチプロセッサシステムにおける主記憶装置とキャッシュメモリとのデータの一貫性（コヒーレンシー）を維持するマルチプロセッサシステムおよびマルチプロセッサシステムにおけるデータの一貫性維持方法に関する。
【０００２】
【従来の技術】
従来の疎結合型マルチプロセッサシステムにおけるキャッシュメモリと主メモリとのデータの一貫性を維持するための技術が、文  献(「The  Directory-Based  Cache  Coherence  Protocol  for  the  DASH  Multiprocessor」，Daniel  Lenoski,  James  Laudon,  Kourosh  Gharachorloo,  Anoop  Gupta  and  John  Hennessy，In  Proceedings  of  17th  International  Symposium  on  Computer  Architecture，p148-159,1990)に開示されている。
【０００３】
なお、疎結合とは結合係数が小さい結合をいう。これに対して結合係数が大きい結合を密結合という。
【０００４】
図１５は、このような従来のマルチプロセッサシステム１’の構成を示すブ  ロック図である。
【０００５】
図１５に示すように、このマルチプロセッサシステム１’は、複数のノードＰＥ０〜ＰＥｎ−１と、各ノードを結合する相互結合網１０’と、から構成されている。
【０００６】
各ノード（図１５では、ＰＥｉのみを示す）は、演算やメモリアクセス等を行うプロセッサ２０’と、データを保持する主メモリ３０’と、プロセッサ２０’がデータを一時的に保持する主メモリ３０’よりも高速アクセスが可能なキャッシュメモリ２１’と、主メモリ３０’とキャッシュメモリ２１’（他のノードのものを含む）との間のデータの一貫性を維持するための一貫性維持制御部５５’と、を有している。
【０００７】
図１６（ａ）は、複数のノードの主メモリ３０’にデータのコピーが存在する状態を示す図であり、図１６（ｂ）は、１つのノードの主メモリ３０’にのみデータのコピーが存在する状態を示す図である。
【０００８】
一貫性維持制御部５５’は、キャッシュメモリ２１’の内容を保持するもので、キャッシュメモリ２１’は主メモリ３０’に格納されているデータの状態およびデータのコピーをキャッシュメモリ２１’に保持しているノードの情報  （以降、保持ノード情報と呼ぶ）を保持している。データの状態は、「Ｃ」，  「Ｍ」の２つがある。「Ｃ」は、図１６（ａ）に示すように、複数のノードのキャッシュメモリ２１’にデータのコピーが存在する状態を表す。このとき、キャッシュメモリ２１’のコピーと主メモリ３０’のデータの値は同じである。「Ｍ」は、図１６（ｂ）に示すように、１つのノードのキャッシュメモリ２１’のみがデータのコピーを保持している状態を表す。このとき、キャッシュメモリ２１’のコピーの値と主メモリ３０’のデータの値は異なり、キャッシュメモリ２１’のコピーの値が最新の値である。
【０００９】
図１７（ａ）は、複数のノードのキャッシュメモリ２１’に一貫性が維持された有効なデータが存在しない状態を示す図であり、図１７（ｂ）は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ２１’にも有効なデータが存在する可能性のある状態を示す図であり、図１７（ｃ）は、データの有効なコピーが１つのノードにだけ存在し、他のノードのキャッシュメモリ２１’には有効なコピーが存在せず、かつ主メモリ３０’のデータとキャッシュメモリ２１’のデータが異なる状態を示す図である。
【００１０】
一貫性維持制御部５５’は、キャッシュメモリ２１’に格納されているデータの状態およびデータのタグアドレスを保持している。データの状態は「Ｉ」，「Ｓ」，「Ｄ」の３つがある。「Ｉ」は、図１７（ａ）に示すように、一貫性が維持された有効なデータのコピーが存在しない状態である。「Ｓ」は、図１７（ｂ）に示すように、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ２１’にも有効なコピーが存在する可能性がある状態である。「Ｄ」は、図１７（ｃ）に示すように、複数のノードのキャッシュメモリ２１’にデータの有効なコピーが１つのノードにだけ存在し、他のノードのキャッシュメモリ２１’には有効なコピーが存在せず、かつ主メモリ３０’のデータの値と異なる状態である。
【００１１】
ここで、タグアドレスはどのアドレスのデータであるかを示す。
【００１２】
相互結合網１０’は、ノード間でやり取りされるメッセージを配信するネットワークである。
【００１３】
以下、プロセッサ２０’が所定のアドレスのデータに対してロード、あるいはストアアクセスをしたときの、このマルチプロセッサシステム１’において主メモリ３０’とキャッシュメモリ２１’とのデータの一貫性を維持するための動作について、図１６を参照して説明する。
【００１４】
最初に、ノードＰＥ１のプロセッサ２０’が、ロードアクセスを行ったときの動作について説明する。
【００１５】
一貫性維持制御部５５’は、該当するアドレスのデータについて有効なコピーがキャッシュメモリ２１’も存在するかどうかを調べる。キャッシュメモリ２１’に有効なコピーが存在する場合、すなわち状態が「Ｓ」または「Ｄ」である場合は、一貫性制御部５５’は、プロセッサ５０’にキャッシュメモリ２１’から読み出したデータを渡すことによってプロセッサに応答し、処理を終了する。
【００１６】
一方、キャッシュメモリ２１’に有効なコピーが存在しない場合、すなわち状態が「Ｉ」の場合は、該当するアドレスのデータを保持しているノード、例えば、ノードＰＥｈ宛に、当該データの読み出し要求メッセージを相互結合網１０’を介して送信する。
【００１７】
読み出し要求メッセージを受けたノードＰＥｈの一貫性維持制御部５５’は、該当するアドレスのデータについての最新の値がノードＰＥｈの主メモリ３０’に存在するかどうかを調べる。該当するアドレスのデータについての最新の値が主メモリ３０’に存在する場合、すなわち状態が「Ｃ」である場合には、ノードＰＥ１に相互結合網１０’を介して主メモリ３０’に格納されているデータを相互結合網１０’を介して送信すると共に、保持ノード情報にノードＰＥ１を  加える。
【００１８】
ノードＰＥｈからのデータを受信したノードＰＥ１の一貫性維持制御部５５’は、プロセッサ２０’に受け取ったデータを渡すと共に、キャッシュメモリ２１’にそのデータをコピーする。さらに、キャッシュメモリ２１’の当該データの状態を「Ｓ」とする。
【００１９】
一方、読み出し要求メッセージを受けたノードＰＥｈにおいて、該当するアドレスのデータについての最新の値が主メモリ３０’に存在しない場合、すなわち状態が「Ｍ」である場合には、保持ノード情報を参照して、最新のデータを保持するノード、例えば、ノードＰＥｒに読み出し要求メッセージを相互結合網１０’を介して送信する。
【００２０】
読み出し要求メッセージを受けたノードＰＥｒの一貫性維持制御部５５’は、キャッシュメモリ２１’に状態が「Ｄ」のデータが存在するかどうかを調べる。キャッシュメモリ２１’に状態が「Ｄ」のデータが存在する場合には、キャッシュメモリ２１’に格納されているデータを相互結合網１０’を介してノードＰＥ１に送信すると共に、キャッシュメモリ２１’に格納されているデータを付加した書き戻し要求メッセージを相互結合網１０’を介してノードＰＥｈに送信する。  さらにキャッシュメモリ２１’の当該データの状態を「Ｓ」に更新する。
【００２１】
書き戻し要求メッセージを受けたノードＰＥｈの一貫性維持制御部５５’は、主メモリ３０’のデータを、書き戻し要求メッセージに付加されていたデータに更新する。さらに、その主メモリ３０’の当該データの状態を「Ｃ」に更新し、保持ノード情報にノードＰＥ１を加える。
【００２２】
一方、読み出し要求メッセージを受けたノードＰＥｒにおいて、キャッシュメモリ２１’に状態が「Ｄ」のデータが存在しない場合には、Ｎａｋ（否定応答）メッセージを相互結合網１０’を介してノードＰＥ１に送信する。
【００２３】
Ｎａｋメッセージを受け取ったノードＰＥ１の一貫性維持制御部５５’は、再度ノードＰＥｈに読み出し要求メッセージを送信する。以降、ノードＰＥ１にデータが送信されて、ノードＰＥ１のプロセッサ２０’にデータが渡されるまで、同様の処理が繰り返される。
【００２４】
次に、ノードＰＥ１のプロセッサ５０’が、ストアアクセスを行ったときの動作について説明する。
【００２５】
一貫性維持制御部５５’は、該当するアドレスのデータについてのシステム内での唯一のコピーがキャッシュメモリ２１’に存在するかどうかを調べる。キャッシュメモリ２１’に有効なコピーが存在する場合、すなわち状態が「Ｄ」である場合は、キャッシュメモリ２１’のデータを更新し、プロセッサ５０’にアクセス完了を通知して、処理を終了する。
【００２６】
キャッシュメモリ２１’に唯一のコピーが存在しない場合、すなわち状態が「Ｉ」または「Ｓ」の場合は、ノードＰＥ１の一貫性維持制御部５５’は、該当するアドレスのデータを保持しているノード、例えば、ノードＰＥｈ宛に、排他読み出し要求メッセージを相互結合網１０’を介して送信する。
【００２７】
排他読み出し要求メッセージを受けたノードＰＥｈの一貫性維持制御部５５’は、該当するアドレスのデータについての最新の値がノードＰＥｈの主メモリ３０’に存在するかどうかを調べる。該当するアドレスのデータの最新の値が主メモリ３０’に存在する場合、すなわち状態が「Ｃ」である場合には、ノードＰＥ１に相互結合網１０’を介して主メモリ３０’に格納されているデータを相互結合網１０’を介して送信する。
【００２８】
ノードＰＥ１以外のノードがキャッシュメモリ２１’に当該データのコピー  を保持している場合には、そのデータのコピーが存在するノードＰＥ１以外の  ノードのすべて（ノードＰＥｋとする）に、無効要求メッセージを相互結合網１０’を介して送信する。さらに、主メモリ３０’の当該データの状態を「Ｍ」に更新し、保持ノード情報をノードＰＥ１のみとする。なお、ノードＰＥ１に  送信されるデータには、無効要求メッセージを送信したノードＰＥｋの数が付加される。
【００２９】
無効要求メッセージを受けたノードＰＥｋの一貫性維持制御部５５’は、キャッシュメモリ２１’の当該データの状態を「Ｉ」に更新し、Ａｃｋ（肯定応答）メッセージを相互結合網１０’を介してノードＰＥ１に送信する。
【００３０】
ノードＰＥｈからのデータを受信したノードＰＥ１の一貫性維持制御部５５’は、キャッシュメモリ２１’にそのデータをコピーする。また、データに付加されていたノードＰＥｋの数の分だけのＡｃｋメッセージを受信するのを待つ。ノードＰＥｋの数の分だけのＡｃｋメッセージを受信すると、キャッシュメモリ２１’の当該データをプロセッサ２０’が行ったストアアクセスのデータに更新する。さらに、キャッシュメモリ２１の当該データの状態を「Ｄ」に更新し、プロセッサ２０’にアクセス完了を通知して処理を終了する。
【００３１】
一方、排他読み出し要求メッセージを受けたノードＰＥｈにおいて、該当するアドレスのデータの最新の値が主メモリ３０’に存在しない場合、すなわち状態が「Ｍ」である場合には、保持ノード情報を参照して、最新のデータを保持するノード、例えば、ノードＰＥｒに排他読み出し要求メッセージを相互結合網１０を介して送信する。
【００３２】
排他読み出し要求メッセージを受けたノードＰＥｒの一貫性維持制御部５５’は、キャッシュメモリ２１’に状態が「Ｄ」のデータが存在するかどうかを調べる。キャッシュメモリ２１’に状態が「Ｄ」のデータが存在しない場合には、相互結合網１０を介してＮａｋメッセージを送る。
【００３３】
Ｎａｋメッセージを受け取ったノードＰＥ１の一貫性維持制御部５５’は、再度ノードＰＥｈに対して、排他読み出し要求メッセージを送信する。以降、同様の処理が繰り返される。
【００３４】
一方、排他読み出し要求メッセージを受けたノードＰＥｒにおいて、キャッ  シュメモリ２１’に状態が「Ｄ」のデータが存在する場合には、キャッシュメモリ２１に格納されているデータを相互結合網１０’を介してノードＰＥ１に送信する。また、保持ノード更新要求メッセージを相互結合網１０’を介してノード  ＰＥｈに送信すると共に、キャッシュメモリ２１’の当該データの状態を「Ｉ」に更新する。
【００３５】
保持ノード更新要求メッセージを受けたノードＰＥｈの一貫性維持制御部５５’は、主メモリ３０’のデータを、ノードＰＥ１のみが保持しているとして  保持ノード情報を更新し、Ａｃｋメッセージを相互結合網１０’を介してノードＰＥ１に送信する。
【００３６】
ノードＰＥｒからのデータを受信したノードＰＥ１の一貫性維持制御部５５は、キャッシュメモリ２１’にそのデータをコピーする。また、ノードＰＥｈからのＡｃｋメッセージを受信するのを待つ。ノードＰＥｈからのＡｃｋメッセージを受信すると、キャッシュメモリ２１’の当該データをプロセッサ２０’が行ったストアアクセスのデータに更新する。さらに、キャッシュメモリ２１’の当該データの状態を「Ｄ」に更新し、プロセッサ２０’にアクセス完了を応答して処理を終了する。
【００３７】
【発明が解決しようとする課題】
しかしながら、従来のマルチプロセッサシステム１’には、プロセッサ２０’の読み出しによりアクセスしたキャッシュメモリ２１’にデータが存在しないキャッシュミスが発生した場合に，キャッ  シュメモリ２１’からプロセッサ２０にデータが応答されるまでに長い時間がかかってしまうという問題点があった。また、主メモリ３０’に最新のデータが存在しない場合、最新のデータを保持す  るノードに要求を転送する必要が生じ、最新のデータが主メモリ３０’に存在す  る場合と比較して、プロセッサ２０’が要求を出してからデータを受け取るまで  の時間が長くなってしまうという問題点があった。
【００３８】
本発明は上述したような従来の技術が有する問題に鑑みなされたものであって、読み出しによるキャッシュミスが発生した場合のデータ一貫性維持制御に要する時間を短縮した、データ一貫性維持制御方法を提供するマルチプロセッサシステムおよびマルチプロセッサシステムにおけるデータの一貫性維持方法を提供することを目的とする。
【００３９】
【課題を解決する手段】
相互結合網を介して互いに接続された複数のノードから構成されるマルチプロセッサシステムであって、
前記複数のノードはそれぞれデータが格納される主メモリと、
前記複数のノードのいずれかが備える主メモリに格納されているデータの一部が記憶される、前記主メモリよりも高速アクセスが可能なキャッシュメモリと、
データのアクセス要求を発行するプロセッサと、
前記主メモリのデータがシステム内でどういう状態にあるのかを管理し、前記キャッシュッメモリにあるデータのコピーの状態を管理し、前記プロセッサが所定のアドレスのデータに対してロード及びストアアクセスを行ったとき、メモリアクセスに応じてノード間でメッセージをやり取りし、それらの状態を変更し、またデータの転送を行う機能を有する一貫性維持制御部とを有し、
前記一貫性維持制御部は、
前記キャッシュメモリに記憶されているデータの状態が記憶されるタグメモリと、
前記主メモリに記憶されているデータの状態が記憶されるディレクトリメモリと、
前記プロセッサからのアクセス要求、前記複数のノードが備えるホームアクセス制御部が発行する要求や応答を受け、前記キャッシュメモリやタグメモリに対しては一貫性維持のために必要な処理を行い、前記プロセッサに対してはアクセス要求に対する応答を行うローカルアクセス制御部と、
前記複数のノードが備える前記ローカルアクセス制御部が発行する要求や応答を受けて、前記主メモリやディレクトリメモリに対して一貫性維持のために必要な処理を行い、前記ローカルアクセス制御部に要求や応答を発行するホームアクセス制御部と、
前記プロセッサが同時に発行可能なメモリアクセスの最大数に対応するエントリを有するリクエスト管理テーブルと、
書き戻しブロック選択手段とを具備し、
前記書き戻しブロック選択手段は前記ローカルアクセス制御部が指定するアドレスを登録するアドレス登録手段と、前記アドレス登録手段により登録されたアドレスを複数保持するアドレス保持手段と、前記アドレス保持手段に格納された複数のアドレスから一つを選択して前記ローカルアクセス制御部に出力し、データの書き戻しを要求する書き戻し要求手段と、前記ローカルアクセス制御部の指示に従い前記書き戻し要求手段が選択しているアドレスを前記アドレス保持手段から削除するアドレス削除手段とを有し、
前記タグメモリに格納される状態は、少なくとも共有状態と専有状態の２状態を含み、
前記ディレクトリメモリに格納される状態は、一致状態と不一致状態の２状態を含み、またディレクトリメモリはさらにどのノードのキャッシュにコピーが存在するかを示す情報を保持し、
前記ローカルアクセス制御部は、タグメモリの状態が共有状態を示すブロックに対して書き込みが行われた時に、一貫性維持制御のために書き込み要求を発行する手段を有し、
前記ホームアクセス制御部は、前記書き込み要求を受けて、ディレクトリメモリの状態が一致状態にあり当該書き込み要求を発行したノード以外にコピーを保持するノードが存在する場合は共有状態と判定し、その判定情報を前記ローカルアクセス制御部への応答に付加する手段を有し、
前記ローカルアクセス制御部は当該応答を受けてタグメモリの状態を共有状態から専有状態に遷移させ、且つ共有状態にあるという応答であった場合は前記書き戻しブロック選択手段に当該アクセスのアドレスの登録を指示する手段を有し、
前記ローカルアクセス制御部はさらに、前記書き戻しブロック選択手段の要求に応じて、データの書き戻し処理を行う手段を有し、前記データの書き戻し処理では、タグメモリの状態を専有状態から共有状態に遷移させ、
前記ホームアクセス制御部は、前記ローカルアクセス制御部から書き戻し要求を受けて、ディレクトリメモリの状態を一致状態に更新する手段を有することを特徴とする。
【００４０】
また、前記ディレクトリメモリは、さらに書き戻し回数をカウントした値を保持し、
前記ホームアクセス制御部は、さらに前記ローカルアクセス制御部から書き戻し要求を受けて、ディレクトリメモリの状態を一致状態に更新するとともに書き戻し回数の値を更新する手段と、書き戻し回数の閾値を記憶するレジスタを有し、
前記ホームアクセス制御部における前記判定情報を前記ローカルアクセス制御部への応答に付加する手段は、書き込み要求を受けたときに、ディレクトリメモリの状態が一致状態にあり当該書き込み要求を発行したノード以外にコピーを保持するノードが存在する場合と、一致状態にあり当該書き込み要求を発行したノードのみがコピーを保持する状態にあり書き戻し回数が閾値未満の場合は共有状態と判定し、その判定情報を前記ローカルアクセス制御部への応答に付加することを特徴とする。
【００５０】
上記のような構成をとることにより、共有しているノードの主メモリのブロックに対してノードのプロセッサが書き込みを行い、ノードのキャッシュメモリを専有する状態になっても、ノードの書き戻しブロック選択手段およびローカルアクセス制御部が働き、専有しているブロックをノードの主メモリに書き戻す。それにより、ノード以外のノードのプロセッサがロードアクセスしてキャッシュメモリにブロックがなかったときに、ノードの主メモリからブロックを読み出すことができるので、ロードアクセスのレイテンシを  短縮できる。
【００５１】
また、ディレクトリメモリに、共有しているか否かを示す情報を持たせ、書き込みの要求を受けたホームアクセス制御部が要求を出したノードに送信する応答メッセージに、共有していたかいなかったかの情報を持たせ、それにより書き戻しブロック選択手段が選択する書き戻しを行うブロックの対象とするか否かを決めているので、共有していないブロックに関しては書き戻しが行われない。
【００５２】
さらに、ディレクトリメモリに、書き戻しを受けた回数および共有していることを示す状態であっても実際にブロックを保持するノードが一つの場合はそのノードを特定することができる情報を持たせ、またホームアクセス制御部が書き戻しを何回まで許容するかを決める閾値を持たせ、それにより、書き込みの要求をうけたホームアクセス制御部が当該ブロックの状態が共有していることを示していても、書き込み要求を出したノードのみが  ブロックを保持している状態でかつ閾値と書き戻しを受けた回数が一致する場合は、要求を出したノードに送信する応答メッセージに共有していない旨の情報を持たせ、書き戻しブロック選択手段の対象から外すことによる。これにより、共有していたブロックが時間の経過とともに共有されなくなったことを検出し、無駄な書き戻しが行われるのを防ぐので、書き戻しによりメッセージが増加するのを防ぐことができる。
【００５３】
【発明の実施の形態】
次に、本発明の実施の形態を図面を参照して説明する。
【００５４】
キャッシュメモリを備えたマルチプロセッサシステムにおいては、あるノードのプロセッサから主メモリ内へのロード／ストアアクセス要求が出されると、まずキャッシュメモリを参照し、キャッシュメモリに要求されたデータが存在すればすぐにそのデータをプロセッサに転送する。キャッシュメモリにもしデータが存在しなければ、要求されたデータを含む適当な大きさのブロックを主メモリから読み出し（ロード）、キャッシュメモリへ格納する。
【００５５】
一方、プロセッサの要求が書き込み（ストア）の場合には、キャッシュメモリにそのデータが存在すれば、キャッシュメモリの内容だけでなく同時に主メモリの方も書き換えを行って、主メモリとキャッシュメモリ両方に常に最新のデータが格納されているようにするストアスルー方式（あるいは、ライトスルー、ストアイミディエイト方式）と、とりあえずキャッシュメモリの内容だけ書き換え、キャッシュメモリのブロックの割り当て換えの際に主メモリへ書き戻すストアバック（あるいは、ライトバック、スワップ方式）とがある。
【００５６】
後者のストアバック方式を採用した場合、キャッシュメモリの内容だけを書き換え後で主メモリに書き戻す方法をとっているため、主メモリの内容とキャッシュメモリの内容が一致しなくなって、コヒーレンシー（データの一貫性維持）が維持されなくなることがある。本実施例は、主メモリとキャッシュメモリのデータの一貫性を維持しようとうするものである。
【００５７】
図１は、本発明の第１の実施例に係わる疎結合型のマルチプロセッサシステム１の構成を示すブロック図である。
【００５８】
図１に示すように、本実施例のマルチプロセッサシステム１は、複数のノードＰＥ０〜ＰＥｎ−１と、各ノードを結合し、ノード間でやり取りされるメッセージを配信する相互結合網１０と、から構成されている。なお、本実施例では、ノード数をｎ＝１０２４とする。
【００５９】
図２は、図１に示したノードＰＥｉ（ｉ＝０〜ｎ−１）の内部構成を示すブロック図である。
【００６０】
図２に示すように、ノードＰＥｉ（ｉ＝０〜ｎ−１）は、それぞれプロセッサ２０と、主メモリ３０と、キャッシュメモリ２１と、一貫性維持制御部１６と、を有する。
【００６１】
プロセッサ２０は、メモリアクセスを行ったとき、そのメモリアクセスに関する情報、ここではアクセスの種類（ロードかストアか）、アドレス、データ等の情報を出力する。プロセッサ２０は、メモリアクセスに対してロードアクセスであればデータを、ストアアクセスであれば完了信号を受け取ることにより、そのメモリアクセスがプロセッサ２０の外部で処理されたことを確認する。プロセッサ２０は、前のメモリアクセスが外部で処理されたことを確認する前に次のメモリアクセスを発行することができる。このため、各メモリアクセスにはｉｄが付加され、アクセスの種類、アドレス、データ、キャッシュアルゴリズムの種類と共にｉｄが出力される。プロセッサ２０への応答にもこのｉｄが付加されどのメモリアクセスに対する応答であるかが識別できる。
【００６２】
ちなみに、ロードとはキャッシュメモリ２１からのデータの読み出しを、ストアとはキャッシュメモリ２１へのデータの書き込みをいう。
【００６３】
ここで、アクセスの種類は、１ビットで表され、「０」がロード、「１」がストアアクセスを表すものとする。また、アドレスは４０ビット、データは６４ビットで構成されるものとする。プロセッサ２０は、最大４個のメモリアクセスを同時に発行することができ、２ビットのｉｄで区別されるものとする。なお、以降の説明では、アドレスの最下位ビットを第０ビット、最上位ビットを第３９ビットとする。また、主メモリ３０は、６４ビット幅×２Ｍエントリ＝５１２Ｍバイト（１Ｍ  ＝１０２４×１０２４）であるとする。
【００６４】
プロセッサ２０が出力するアドレスは、その上位ビットでどのノードＰＥｉの主メモリ３０に格納されたデータであるかを表し、その下位ビットで主メモリ３０でのオフセットを表す。ここでは、プロセッサ２０が出力するアドレス４０ビットのうち、第３９ビットから第３０ビットまでの上位１０ビットがどのノードＰＥｉの主メモリ３０のデータであるかを表し、第２９ビットか  ら第０ビットまでの下位３０ビットが各主メモリ３０でのオフセットとなる。
【００６５】
キャッシュメモリ２１は、主メモリ３０よりも少量ではあるが高速なメモリで構成される。これにより、データがキャッシュメモリ２１に存在した場合、プロセッサ２０のメモリアクセスに対して早く応答することができ、メモリアクセスに要する時間を短縮することができる。キャッシュメモリ２１は、６４ビット幅×１２８Ｋエントリ＝１Ｍバイト（１Ｋ＝１０２４）であるとする。また、キャッシュメモリ２１と主メモリ３０との間のデータの転送は、ブロックと呼ばれる固定サイズ（以降１２８バイトとする）で行われる。
【００６６】
このマルチプロセッサシステム１では、主メモリ３０にあるデータのコピーが複数のノードＰＥｉのキャッシュメモリ２１に存在することがある。このため、それらコピーや主メモリ３０のデータとの間でデータの一貫性を維持する制御が必要となる。一貫性維持制御部１６は、このような一貫性の維持の制御を行うもので、キャッシュメモリ２１にあるデータのコピーの状態や主メモリのデータがシステム内でどういう状態にあるのかを管理する。一貫性維持制御部１６は、メモリアクセスに応じてノードＰＥｉ間でメッセージをやり取りし、それらの状態を変更したりデータの転送を行う機能を有する。一貫性維持制御部１６の構成について、さらに詳しく後述する。
【００６７】
図１に示す相互結合網１０は、メッセージに含まれるルーティング情報に基づきあるノードＰＥｉからあるノードＰＥｉにメッセージを配送する機能を有する。このルーティング情報として、ここでは宛先ノード番号が必要十分な情報であるものとする。また、あるノードからあるノードへのパスは一つであり、同じパスを通るメッセージ間で追い越しは発生しないものとする。ただし、送信ノードまたは受信ノードどちらか一方でも異なる場合には、メッセージ間での到着順序は保証されない。
【００６８】
次に、相互結合網１０を介してノードＰＥｉ間でやり取りされるメッセー  ジについて説明する。
【００６９】
図３（ａ）は、メモリアクセスが行われたノードＰＥｉから主メモリ３０にデータを保持するノードＰＥｉへ送信される要求メッセージを示す図であり、図３（ｂ）は、主メモリ３０にデータを保持するノードＰＥｉから当該データのコピーをキャッシュメモリ２１に保持するノードＰＥｉへ送信される要求メッセージを示す図であり、図３（ｃ）は、データのコピーをキャッシュッメモリ２１に保持するノードＰＥｉから主メモリ３０にデータを保持するノードＰＥｉへ送信される報告メッセージを示す図であり、図３（ｄ）は、主メモリ３０にデータを保持するノードＰＥｉからメモリアクセスが行われたノードＰＥｉへ送信されるメモリアクセス完了メッセージを示す図である。
【００７０】
メッセージは、「ＢｌｋＲｄＳｈ」，「ＢｌｋＲｄＥｘ」，「Ｕｐｇｒａｄｅ」，「ＢｌｋＷｒ」，「ＲｐＢａｃｋ」，「Ａｃｋ」，「ＡｃｋＤａｔａ」，「ＩｎｔｖＳｈ」，「ＩｎｔｖＥｘ」，「Ｉｎｖ」，「ＣｍｐＤａｔＳｈ」，「ＣｍｐＤａｔＥｘ」，「ＣｍｐＳｈ」，「ＣｍｐＥｘ」，「ＮＣｍｐ」の１５種類のメッセージがある。これらのメッセージは、ブロック共有／排他読み出し／書き込みメッセージ群である。
【００７１】
このうち、「ＢｌｋＲｄＳｈ」，「ＢｌｋＲｄＥｘ」，「Ｕｐｇｒａｄｅ」，「ＢｌｋＷｒ」，「ＲｐＢａｃｋ」の５種類のメッセージは、図３（ａ）に示すように、メモリアクセスが行われたノードＰＥｉから、主メモリ３０にデータを保持するノードＰＥｉへ送信される要求メッセージである。
【００７２】
ＢｌｋＲｄＳｈメッセージはブロック共有読み出し要求メッセージ、ＢｌｋＲｄＥｘメッセージはブロック排他読み出しメッセージ、Ｕｐｇｒａｄｅメッセージはオーナーシップ獲得要求メッセージ、ＢｌｋＷｒおよびＲｐＢａｃｋメッセージはブロック書き込み要求メッセージである。
【００７３】
「ＩｎｔｖＳｈ」，「ＩｎｔｖＥｘ」，「Ｉｎｖ」の３種類のメッセージは、図３（ｂ）に示すように、主メモリ３０にデータを保持するノードＰＥｉから当該データのコピーをキャッシュメモリ２１に保持するノードＰＥｉへ送信される要求メッセージである。これらのメッセージは、ＢｌｋＲｄＳｈ，ＢｌｋＲｄＥｘ，Ｕｐｇｒａｄｅメッセージから派生する他のノードＰＥｉのキャッメモリ２１に対する要求メッセージである。
【００７４】
ＩｎｔｖＳｈメッセージは共有読み出し要求メッセージ、ＩｎｔｖＥｘメッセージは排他読み出し要求メッセージ、Ｉｎｖは無効化要求メッセージである。
【００７５】
「Ａｃｋ」，「ＡｃｋＤａｔａ」の２種類のメッセージは、図３（ｃ）に示すように、主メモリのデータのコピーをキャッシュメモリ２１に保持するノードＰＥｉから主メモリ３０にデータを保持するノードＰＥｉへ送信される報告メッセージである。Ａｃｋ，ＡｃｋＤａｔａメッセージは、ＩｎｔｖＳｈ，ＩｎｔｖＥｘ，Ｉｎｖメッセージに対する応答メッセージである。
【００７６】
Ａｃｋメッセージは応答、ＡｃｋＤａｔａメッセージはデータ付き応答メッセージである。
【００７７】
「ＣｍｐＤａｔＳｈ」，「ＣｍｐＤａｔＥｘ」，「ＣｍｐＳｈ」，「ＣｍｐＥｘ」，「ＮＣｍｐ」の５種類のメッセージは、図３（ｄ）に示すように、主メモリ３０にデータを保持するノードＰＥｉからメモリアクセスが行われたノードＰＥｉへ送信されるメモリアクセス完了応答メッセージである。
【００７８】
ＣｍｐＤａｔＳｈメッセージはＢｌｋＲＤＳｈメッセージに対する共有応答メッセージ、ＣｍｐＤａｔＥｘメッセージはＢｌｋＲｄＥｘメッセージに対する排他応答メッセージ、ＮＣｍｐメッセージはＢｌｋＲＤＳｈメッセージおよびＢｌｋＲｄＥｘメッセージに対する未完了応答メッセージである。
【００７９】
図５（ａ）は、基本メッセージの構成を示す図であり、図５（ｂ）は、ブロックデータ付メッセージの構成を示す図である。
【００８０】
次に、上述した各メッセージの構成について、図３（ａ），（ｂ），（ｃ），（ｄ）および図５（ａ），（ｂ）を参照しながら説明する。
【００８１】
メッセージは、基本メッセージとブロックデータ付きメッセージに分類される。「ＢｌｋＲｄＳｈ」，「ＢｌｋＲｄＥｘ」，「Ｕｐｇｒａｄｅ」，「Ａｃｋ」，「ＩｎｔｖＳｈ」，「ＩｎｔｖＥｘ」，「Ｉｎｖ」，「ＣｍｐＳｈ」，「ＣｍｐＥｘ」，「ＮＣｍｐ」の１０種類のメッセージは基本メッセージ  である。「ＢｌｋＷｒ」，「ＲｐＢａｃｋ」，「ＡｃｋＤａｔａ」，「ＣｍｐＤａｔＳｈ」，「ＣｍｐＤａｔＥｘ」の５種類のメッセージはブロックデータ付きのメッセージである。
【００８２】
基本メッセージは、図５（ａ）に示すように、宛先ノード番号（１０ビット）、メッセージの種類を表すコード（計１５個なので４ビットで表現）、要求元ノード番号（１０ビット）、ｍｉｄ（２ビット）、アドレス（４０ビット）の計６６ビットで構成される。
【００８３】
ブロックデータ付きメッセージは、図５（ｂ）に示すように、宛先ノード番号（１０ビット）、メッセージの種類を表すコード（４ビット）、要求元ノード番号（１０ビット）、ｍｉｄ（２ビット）、アドレス（４０ビット）に加えて、ブロックサイズのデータ（１２８バイト）の計６６ビット＋１２８バイトで構成される。
【００８４】
以下、図２に示した一貫性維持制御部１６について、さらに詳しく説明する。一貫性維持制御部１６は、タグメモリ２２と、リクエスト管理テーブル２４と、ローカルアクセス制御部２５と、書き戻しブロック選択手段２６と、ホームアクセス制御部２７と、ディレクトリメモリ３１と、メッセージ送信部３５と、メッセージ受信部３６と、を有する。
【００８５】
ディレクトリメモリ３１は、主メモリ３０に格納されているデータについて、各ブロックごとに、その状態を表す情報を格納している。ディレクトリメモリ３１に格納されている各ブロックの情報は、ブロックの状態、コピーをキャッシュメモリ２１に保持しているノードの情報（以降、保持ノード情報と呼ぶ）、保持ノード情報の形式、書き戻し回数である。
【００８６】
ブロックの状態は、「Ｃ」，「Ｍ」，「ＲＳＰ」，「ＲＥＰ」，「ＵＰ」  の５つのうちのいずれかで表され、例えば、「Ｃ」は「０００」，「Ｍ」は  「００１」，「ＲＳＰ」は「１００」，「ＲＥＰ」は「１０１」，「ＵＰ」は  「１１０」というように３ビットでコーディングされる。
【００８７】
ブロックの状態として「Ｃ」は、０以上の複数のノードＰＥｉのキャッシュメモリ２１にデータのコピーが存在する状態を表す。このとき、キャッシュメモリ２１のコピーと主メモリ３０のデータの値は同じである。「Ｍ」は、１つのノードＰＥｉのキャッシュメモリ２１のみがデータのコピーを保持している状態を表す。このとき、キャッシュメモリ２１のコピーの値と主メモリ３０のデータの値は異なり、コピーの値が最新の値である可能性がある。「ＲＳＰ」，「ＲＥＰ」，「ＵＰ」は、あるメモリアクセスから派生した一貫性維持処理の要求メッセージを受け、この要求メッセージに応答して一貫性維持の処理をしている最中であることを示して  いる。
【００８８】
本実施例に係わる保持ノード情報は、次の３つの形式をとる。
【００８９】
（１）ノードＰＥｉを特定するノード番号（１０ビットで表される）を一つ保持するポインタ形式。
【００９０】
（２）コースベクタ形式（ここでは８ビット）。
【００９１】
（３）キャッシュメモリ２１にコピーを保持するノード数（１０ビットで表  し、０から１０２３までをカウントする）を管理するカウンタ形式。
【００９２】
コースベクタ形式では、次のように保持ノードが管理される。
【００９３】
ノードＰＥｉをいくつかのグループに分割し、グループ数分のビットで保持者（ノード）を管理する。各ビットを立てるかどうかは、各ビットに対応するグループの中に一つでもコピーを保持するノードＰＥｉが存在するかどうか  によって決定される。ここでは、これを８ビットで表し、第０ビットがノードＰＥ０からノードＰＥ１２７、第１ビットがノードＰＥ１２８からノードＰＥ２５５、．．．．．、第７ビットがノードＰＥ８９６からノードＰＥ１０２３にそれぞれ対応する。
【００９４】
状態が「Ｍ」，「ＲＳＰ」の場合ポインタ形式で保持ノードを管理する。「ＲＥＰ」，「ＵＰ」の場合はカウンタ形式で保持ノードを管理する。「Ｃ」の場合は保持するノードの数によりポインタ形式とコースベクタ形式を切り替える。そのため、ディレクトリメモリ３１には各ブロックごとにどちらの形式で現在管理しているかを示す２ビット（例えば、「００」ならコースベクタ形式、「０１」ならポインタ形式、「１０」ならカウンタ形式）も保持される。
【００９５】
書き戻し回数は、書き戻しを受けた回数を記録するものである。ここでは１ビットからなるものとし、「０」から「１」までの数をカウントできるものとする。
【００９６】
この構成の場合、ディレクトリメモリ３１は１６ビット（状態３ビット、保持ノード情報１０ビット、保持形式ビット２ビット、書き戻し回数１ビット）幅４Ｍ（主メモリサイズ／ブロックサイズ）エントリ分のデータを保持するメモリとなる。ディレクトリメモリ３１に格納されている各エントリの初期値は、状態は「Ｃ」、保持ノード情報は「０ｘ０００」（０ｘは１６進表記）、保持形式はコースベクタ形式で、書き戻し回数は「０」となる。
【００９７】
タグメモリ２２は、キャッシュメモリ２１に格納されているデータについて、その状態を表す情報をブロック単位で保持している。タグメモリ２２に格納されている各ブロックの情報は、ブロックの状態およびタグアドレスである。ブロックの状態は、図６を再び参照すると、「Ｉ」，「Ｓ」，「Ｅ」，「Ｄ」の４つのいずれかによって表され、それぞれ対応するブロックがどの状態にあるかを示している。例えば、ブロックの状態は、「Ｉ」は「００」，「Ｓ」は「０１」，「Ｅ」は「１  ０」，「Ｄ」は「１１」というように２ビットでコーディングされる。
【００９８】
ブロックの状態として「Ｉ」は、一貫性が維持された有効なデータのコピーが存在しない状態を示す。「Ｓ」は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ２１にも有効なコピーが存在する可能性がある、という状態を示す。「Ｅ」は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ２１には  有効なコピーが存在せず、かつ主メモリ３０のデータの値と同じ状態を示す。「Ｄ」は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリ２１には有効なコピーが存在せず、かつ主メモリ３０のデータの値と異なる状態を示す。
【００９９】
タグアドレスは、対応するブロックがどのアドレスのデータであるかを示す。ここでは、あるアドレスのデータがキャッシュメモリ２１のどのブロックに格納されるかが一意に決定されるダイレクトマップ方式でキャッシュメモリ２１が制御されている。この場合、キャッシュメモリ２１のサイズが１Ｍバイトであるので、アドレス４０ビットのうち第３９ビットから第２０ビットまでの上位２０ビットがタグアドレスとなる。
【０１００】
この構成の場合、タグメモリ２２は２２ビット幅８Ｋ（＝キャッシュメモリサイズ÷ブロックサイズ）エントリ分のデータを保持するメモリとなる。タグメモリ２２に格納されている各エントリの初期値は、状態は「Ｉ」、タグアドレスは０ｘ０００００となる。
【０１０１】
図６は、ディレクトリメモリ３１とタグメモリ２２およびこのメモリブロックの状態を示す図である。
【０１０２】
メッセージ送信部３５およびメッセージ受信部３６は、それぞれ相互結合網１０と接続されており、ノードＰＥｉから相互結合網１０へのメッセージの送信、および相互結合網１０からのメッセージの受信を行う。
【０１０３】
メッセージ送信部３５は、ローカルアクセス制御部２５およびホームアクセス制御部２７の２モジュールと接続されており、各モジュールが出力するメッセージを調停し、取り込む。
【０１０４】
メッセージ受信部３６は、ローカルアクセス制御部２５およびホームアクセス制御部２７の２モジュールと接続しており、相互結合網１０から受け取ったメッセージの種類に応じて上記２モジュールにメッセージを出力する。受け取ったメッセージの種類が「ＢｌｋＲｄＳｈ」，「ＢｌｋＲｄＥｘ」，「Ｕｐｇｒａｄｅ」，「ＢｌｋＷｒ」，「ＲｐＢａｃｋ」，「Ａｃｋ」，「ＡｃｋＤａｔａ」の場合、メッセージの出力先はホームアクセス制御部２７となる。「ＩｎｔｖＳｈ」，「ＩｎｔｖＥｘ」，「Ｉｎｖ」，「ＣｍｐＤａｔＳｈ」，「ＣｍｐＤａｔＥｘ」，「ＣｍｐＳｈ」，「ＣｍｐＥｘ」，「ＮＣｍｐ」の場  合、メッセージの出力先はローカルアクセス制御部２５となる。
【０１０５】
リクエスト管理テーブル２４は、プロセッサ２０が同時に発行可能なメモリアクセスの最大数（ここでは４）に対応して４エントリからなるテーブルである。各エントリは、エントリが有効かどうかを示す有効ビット（１ビット）、アクセスの種類（１ビット）、アドレス（４０ビット）、データ（６４ビット）  の計１０６ビットからなる。
【０１０６】
リクエスト管理テーブル２４は次のような機能を有する。
【０１０７】
（ａ）ローカルアクセス制御部２５の指示に従い、ローカルアクセス制御部２５が出力する上記設定データ（１０６ビット）を、ローカルアクセス制御部２５が指定するエントリに書き込む機能。
【０１０８】
（ｂ）ローカルアクセス制御部２５が指定するエントリの内容をローカルアクセス制御部２５に出力する機能。
【０１０９】
ローカルアクセス制御部２５は、プロセッサ２０が出力するメモリアクセス、ホームアクセス制御部２７およびメッセージ受信部３６が出力するメッセージを調停して選択し、データ一貫性維持のための処理を行う機能を有する。ローカルアクセス制御部２５が行うデータ一貫性維持のための処理には、タグメモリ２２へのアクセス、キャッシュメモリ２１へのアクセス、リクエスト管理テーブル２４へのアクセス、書き戻しブロック選択手段２６へのアクセス、プロセッサ２０への応答、メッセージ送信部３５あるいはホームアクセス制御部２７へのメッセージの出力がある。
【０１１０】
図４は、書き戻しブロック制御手段２６の内部構成を示す図である。
【０１１１】
書き戻しブロック選択手段２６は、ローカルアクセス制御部２５が指定するアドレスを登録するアドレス登録手段１１０と、登録されたアドレスを複数保持するアドレス保持手段１１１と、アドレス保持手段に格納された複数のアドレスから一つを選択しローカルアクセス制御部２５に出力し書き戻しを要求するする書き戻し要求手段１１２と、ローカルアクセス制御部２５の指示に従い、書き戻し要求手段が選択しているエントリを削除するアドレス削除手段１１３と、を有する。
【０１１２】
ここで、アドレス保持手段１１１は２エントリを格納したＦＩＦＯ(First  In  First  Out)で構成される。保持するアドレスは第３９ビットから第７ビットまでの３３ビットである。アドレス登録手段１１０は、アドレス保持手段１１１の各エントリとローカルアクセス制御部２５が指定するアドレスの第３９ビットから第７ビットを比較し、一致するエントリがない場合アドレス保持手段１１１に登録する。書き戻し要求手段１１２はＦＩＦＯがいっぱいのときにＦＩＦＯの先頭エントリのアドレスをローカルアクセス制御部２５に出力し、書き戻しを要求する。このとき、アドレスの第６ビットから第０ビットを０で補完して出力する。また、アドレス削除手段１１３がエントリ削除の指示を受けると、ＦＩＦＯの先頭エントリを削除する。
【０１１３】
ホームアクセス制御部２７は、ローカルアクセス制御部２５およびメッセージ受信部３６が出力するメッセージを受け、データ一貫性維持のための処を行う機能を有する。ホームアクセス制御部２７が行うデータ一貫性維持のための処理には、ディレクトリメモリ３１へのアクセス、主メモリ３０へのアクセス、ローカルアクセス制御部２５あるいはメッセージ送信部３３へのメッセージ出力がある。
【０１１４】
また、ホームアクセス制御部２７は、書き戻し回数を制限する閾値を保持している。この閾値と、ディレクトリメモリ３１に格納されている書き戻し回数と同じビット数（ここでは１ビット）からなる。ここで、この閾値はプロセッサ２０から設定可能なものであっても構わないし、固定的に値が決まっていても構わない。ここでは、固定的に値「１」が書き込まれているとする。
【０１１５】
図７は、本実施例のノードＰＥｉ４０とその構成要素である主メモリ４１およびキャッシュメモリ４２の状態遷移を示す図である。
【０１１６】
図７は、本実施例のノードＰＥｉ４０とその構成要素である主メモリ４１およびキャッシュメモリ４２の状態遷移を示す図である。
【０１１７】
図７に示すように、ノードＰＥｉ４０にメモリアクセスがあると、メモリアクセスを受けたノードＰＥｉ４０は、主メモリ４１に対し要求メッセージを発行する。主メモリ４１はさらにキャッシュメモリ４２に対し要求を発行し、キャッシュメモリ４２中に所望のデータが存在すれば、それを主メモリ４１に報告メッセージで通知する。そして、主メモリ４１からノードＰＥｉ４０に完了メッセージを返す。
【０１１８】
以下、図８〜図１３を参照して、ローカルアクセス制御部２５の動作について説明する。本実施例は、原則的に図７に示した流れに従って動作する。
【０１１９】
図８（ａ）は、プロセッサ２０が出力するメモリアクセスを受けて、ローカルアクセス制御部２５が実行する処理を示すフローチャートであり、図８（ｂ９は、図８（ａ）の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。ローカルアクセス制御部２５は、図８（ｂ）の関係を示すテーブルを格納している。
【０１２０】
このとき、ローカルアクセス制御部２５は、プロセッサ２０からアクセスの種類（１ビット）、アドレス（４０ビット）、ｉｄ（２ビット）、データ（６４ビット）の情報を受ける。
【０１２１】
まず、ステップＳ１１１で、ローカルアクセス制御部２５は、タグメモリ２２にアクセスし、該当するブロックのデータ（状態およびタグアドレス）を読み出す。ここでは、８Ｋ（１Ｋ＝１０２４）あるエントリのうち、アドレスの第１９ビットから第７ビットの１３ビットで指定されるエントリのデータを読み出す。アクセスの種類、状態、アドレスの第３９ビットから第２０ビットまでの上位２０ビットとタグアドレス（２０ビット）が一致するかどうかの３つの情報から、後述する「ＡＡ」〜「ＡＤ」の処理タイプのうちのどの処理タイプとなるかを決定する。この３情報からは、処理タイプが「ＡＡ」または「ＡＢ」の場合にそれぞれステップＳ１１３およびＳ１１５で出力されるメッセージの種類、およびステップＳ１１８で更新されるブロックの状態（タグアドレスはアドレスの上位２０ビットに必ず更新される）も決定する。
【０１２２】
ステップＳ１１２において決定された処理タイプが「ＡＡ」の場合、ステップＳ１１３に進む。
【０１２３】
ステップＳ１１３では、図８（ｂ）に示すテーブルに従って生成するメッセージを決定する。メッセージの宛先ノード番号（１０ビット）には、アドレスの第３９ビットから第３０ビットまでの上位１０ビットが、要求元ノード番号（１０ビット）には、当該ノードＰＥｉのノード番号（１０ビット）が、それぞれ用いられる。ｍｉｄとアドレスには、プロセッサ２０から得たｉｄとアドレスがそれぞれ用いられる。このとき、生成したメッセージをメッセージ送信部３５へ出力するか、あるいはホームアクセス制御部２７へ出力するかを次のようにして決定する。宛先ノード番号と当該ノードＰＥｉのノード番号とを比較し、その結果が不一致の場合はメッセージをメッセージ送信部３５へ出力し、一致の場合はホームアクセス制御部２７へ出力する。同時にリクエスト管理テーブル２４への登録も行う。ローカルアクセス制御部２５は、有効ビットを「１」、受けたメモリアクセスに付加されていたアクセスの種類、アドレスおよびデータを設定データとしてリクエスト管理テーブル２４に出力し、受けたメモリアクセスに付加されていたｉｄ番目が示すエントリ（０〜３）に設定する。ステップＳ１１３の処理が終了すると、ステップＳ１１８に進む。
【０１２４】
ステップＳ１１２において決定された処理タイプが「ＡＢ」であった場合、ステップＳ１１４に進む。
【０１２５】
ステップＳ１１４では、プロセッサ２０から得られたアドレスの第１９ビットから第７ビットまでの１３ビットに０ｘ０から０ｘｆまで変化する４ビットを下位に付加した１７ビットで指定される合計１６エントリ、１２８バイトのブロックデータをキャッシュメモリ２１（１２８Ｋエントリ×６４ビット幅）から読み出し、そのブロックデータを付加した「ＢｌｋＷｒ」メッセージを生成する（ステップＳ１１４）。この「ＢｌｋＷｒ」メッセージの宛先ノード番号には、タグアドレスの第１９ビットから第１０ビットまでの上位１０ビットが用いられ、要求元ノード番号には、当該ノードＰＥｉのノード番号が用いられる。また、アドレスは、タグアドレス（２０ビット）を上位２０ビットとし、下位２０ビットにプロセッサ２０から得られたアドレスの第１９ビットから第０ビットまでの２０ビットが用いられる。また、ｍｉｄはどんな値でも構わない。生成したメッセージをメッセージ送信部３５とホームアクセス制御部２７とのいずれに出力するかは、ステップＳ１１３の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。ステップＳ１１４の処理が終了すると、ステップＳ１１５に進む。
【０１２６】
ステップＳ１１５で実行する処理は、ステップＳ１１３の処理と同じであるので、説明は省略する。ステップＳ１１５の処理が完了すると、ステップＳ１１８に進  む。
【０１２７】
ステップＳ１１２において決定された処理タイプが「ＡＣ」であった場合、ステップＳ１１６に進む。
【０１２８】
ステップＳ１１６では、プロセッサ２０から得たアドレスの第１９ビットから第３ビットまでの１７ビットで指定されるエントリに対応する６４ビットのデータをキャッシュメモリ２１から読み出し、その読み出したデータをプロセッサ２０に応答する。このとき、プロセッサ２０から得たｉｄも、同時にプロセッサ２０に渡し、当該ｉｄのメモリアクセスに対する応答であることを示す。ステップＳ１１６の処理が完了すると、ステップＳ１１８に進む。
【０１２９】
ステップＳ１１２において決定された処理タイプが「ＡＤ」であった場合、ステップＳ１１７に進む。
【０１３０】
ステップＳ１１７では、プロセッサ２０から得たアドレスの第１９ビットから第３ビットまでの１７ビットで指定されるキャッシュメモリ２１のエントリに、プロセッサ２０から得た６４ビットのデータを書き込む。また、プロセッサ２０に対してｉｄを出力し、メモリアクセスの完了通知を行う。これにより、当該ｉｄのメモリアクセスに対する処理が完了した旨がプロセッサに通知される。ステップＳ１１７の処理が終わると、ステップＳ１１８に進む。
【０１３１】
ステップＳ１１８では、タグメモリ２２を更新するための処理を行う。更新を行うエントリはステップＳ１１１においてアクセスしたエントリであり、状態は図８（ｂ）で示されるブロックの次状態に、タグアドレスはプロセッサ２０から得たアドレスの第３９ビットから第２０ビットまでの上位２０ビットに、更新する。ステップＳ１１８の処理が終了すると、当該メモリアクセスに関する処理は終了する。
【０１３２】
図９（ａ）は、ホームアクセス制御部２７あるいはメッセージ受信部３６が出力するメッセージのうち、ＩｎｔｖＳｈ，ＩｎｔｖＥｘ，Ｕｐｇｒａｄｅの３種類のメッセージを受けた場合に、ローカルアクセス制御部２５が実行する処理を示すフローチャートであり、図９（ｂ）は、図９（ａ）の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。ローカルアクセス制御部２５は、図９（ｂ）の関係を示すテーブルを格納している。まず、ステップＳ１２１で、メッセージに含まれるアドレスの値を用いてタグメモリ２２に読み出しアクセスを行う。アクセスされるタグメモリ２２のエントリは、アドレスの第１９ビットから第７ビットまでの１３ビットで指定される。これにより、該当するブロックの状態およびタグアドレスが読み出される。メッセージの種類、状態、およびメッセージに付加されていたアドレスの第３９ビットから第２０ビットまでの上位２０ビットと  タグアドレスが一致するかどうかの３つの情報から、後述する「ＢＡ」と「ＢＢ」のうちのどの処理タイプとなるかを決定する。また、上記３情報からは、ステップＳ１２３で出力するメッセージの種類、およびステップＳ１２５で更新するブロックの状態（タグアドレスの値は変更されない）も決定する。なお、上記３情報と処理タイプ、メッセージの種類、ブロックの次状態の関係は、図９（ｂ）に示すようになる。ローカルアクセス制御部２５は、この関係を示すテーブルを格納している。
【０１３３】
ステップＳ１２２において決定された処理タイプが「ＢＡ」であった場合、ステップＳ１２３に進む。
【０１３４】
ステップＳ１２３では、図９（ｂ）に示すテーブルに従って生成するメッセージを決定する。メッセージの生成時に、要求元ノード番号、アドレス、ｍｉｄには受けたメッセージのものがそのまま用いられる。また、宛先ノード番号には、受けたメッセージのアドレスの第３９ビットから第３０ビットまでの上位１０ビットが用いられる。生成したメッセージをメッセージ送信部３５とホームアクセス制御部２７とのいずれに出力するかを、図８（ａ）のステップＳ１１３の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。ステップＳ１２３の処理が終了すると、ステップＳ１２５に進む。
【０１３５】
ステップＳ１２２において決定された処理タイプが「ＢＢ」であった場合、ステップＳ１２４に進む。
【０１３６】
ステップＳ１２４では、受けたメッセージのアドレスの第１９ビットから第７ビットまでの１３ビットに０ｘ０から０ｘｆまで  変化する４ビットを下位に付加した１７ビットで指定される合計１６エントリ、１２８バイトのブロックデータを読み出す。図９（ｂ）のテーブルに従って生成するメッセージを決定し、読み出したブロックデータを生成されたメッセージに付加し、送信部３５を介して送信する。メッセージの生成時に、要求元ノード番号、アドレス、ｍｉｄには、受けたメッセージのものがそのまま用いられる。宛先ノード番号には、受けたメッセージのアドレスの第３９ビットから第３０ビットまでの上位１０ビットが用いられる。ローカルアクセス制御部２５は、生成したメッセージをメッセージ送信部３８とホームアクセス制御部２７とのいずれに出力するかを、ステップＳ１１３の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。ステップＳ１２４の処理が終了すると、ステップＳ１２５に進む。
【０１３７】
ステップＳ１２５では、タグメモリ２２の更新を行う。更新するエントリはステップＳ１２１においてアクセスしたエントリであり、状態は図８で示されるブロックの次状態に、タグアドレスはステップＳ１２１で読み出したタグアドレスに、それぞれ更新する。ステップＳ１２５の処理が終了すると、受けたメッセージに関する処理は終了する。
【０１３８】
図１０および図１１（ａ）は、ホームアクセス制御部２７あるいはメッセージ受信部３６が出力するメッセージのうち、「ＣｍｐＤａｔＳｈ」，「ＣｍｐＤａｔＥｘ」，「ＣｍｐＳｈ」，「ＣｍｐＥｘ」，「ＮＣｍｐ」の５種のメッセー  ジを受けた場合に、ローカルアクセス制御部２５が実行する処理を示すフロー  チャートであり、図１１（ｂ）は、図１０および図１１（ａ）の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。ローカルアクセス制御部２５は、図１１（ｂ）の関係を示すテーブルを格納している。
【０１３９】
まず、ステップＳ１３１で、メッセージに含まれるｍｉｄをリクエスト管理テーブル２４に出力し、ｍｉｄ番目のエントリの情報を読み出す。これにより、リクエスト管理テーブル２４から、有効ビット、アクセスの種類、アドレ  ス、データ（６４ビット）の情報を得る。ステップＳ１３１の処理が終了すると、ステップＳ１３２に進む。
【０１４０】
ステップＳ１３２では、受けたメッセージがデータ付きかどうか、即ち「ＣｍｐＤａｔＳｈ」あるいは「ＣｍｐＤａｔＥｘ」であるか、データ付きでない「ＣｍｐＳｈ」，「ＣｍｐＥｘ」，「ＮＣｍｐ」メッセージであるかを判定する（ステップＳ１３２）。データ付きのメッセージでないと判定された場合は、ステップＳ１３３に進む。一方、データ付きのメッセージであると判定された場合は、ステップＳ１３５に進む。
【０１４１】
ステップＳ１３３では、受けたメッセージが「ＮＣｍｐ」であるかどうか  を判定する。「ＮＣｍｐ」でない場合は、ステップＳ１３７に進む。「ＮＣｍ  ｐ」の場合、リクエスト管理テーブル２４から得たアクセスの種類、アドレス、  データをプロセッサ２０が出力したものとしてステップＳ１１１に進み、図８（ａ）  のフローチャートに示した処理を再度行う（ステップＳ１３３）。
【０１４２】
ステップＳ１３４では、メッセージについていたブロックデータ（１２８バイト）を、キャッシュメモリ２１の該当するブロックに書き込む。書き込まれるエントリは、リクエスト管理テーブル２４から得られるアドレスの第１９ビットから第７ビットまでの１３ビットに０ｘ０から０ｘｆまで変化する４ビットを下位に付加した１７ビットのインデックス信号で指定される１６エントリ  であり、それぞれ６４ビットずつ順に書き込まれていく。ステップＳ１３４の  処理が終了すると、ステップＳ１３５に進む。
【０１４３】
ステップＳ１３５では、リクエスト管理テーブル２４から得られるアクセスの種類がロードかストアかを調べる。アクセスの種類がストアであった場合には、ステップＳ１３６に進む。一方、アクセスの種類がロードであった場合には、ステップＳ１３８に進む。
【０１４４】
ステップＳ１３６では、リクエスト管理テーブル２４から得られるデータ（６４ビット）を、キャッシュメモリ２１の該当するエントリに書き込む。書き込まれるエントリは、リクエスト管理テーブル２４から得られるアドレスの  第１９ビットから第３ビットまでの１７ビットで指定される。また、リクエスト管理テーブル２４に有効ビットを「０」にしたデータを出力し、その値を受けたメッセージのｍｉｄで指定するエントリに対して書き込む。これにより、リクエスト管理テーブル２４から該当するエントリを削除する。さらにタグメモリ２２を更新するための処理も行う。更新されるエントリは、リクエスト管理テーブル２４より得られるアドレスの第１９ビットから第７ビットまでの１３ビットで特定される。更新するデータは、ブロックの状態およびタグアドレスである。ブロックの状態に関しては、図１１（ｂ）のテーブルに従って、アクセスの種類  （ここではストア）と受けたメッセージの種類によって決定される。タグアドレスには、リクエスト管理テーブル２４から読み出したアドレスの第３９ビットから第２０ビットまでの上位２０ビットが用いられる。さらに、プロセッサ２０への完了通知も行う。このとき、メッセージに付加されていたｍｉｄがプロセッサ２０へ出力され、どのメモリアクセスが完了したのかが通知される。ステップＳ１３６の処理が終了すると、ステップＳ１３７に進む。
【０１４５】
ステップＳ１３７では、受けたメッセージが「ＣｍｐＳｈ」あるいは「ＣｍｐＤａｔＳｈ」かどうかを調べる。「Ｙｅｓ」の場合はステップＳ１４１に進み、書き戻し処理を行う。「Ｎｏ」の場合は受けたメッセージの処理を終了する。
【０１４６】
ステップＳ１３８では、リクエスト管理テーブル２４から得られたアドレスの第１９ビットから第３ビットまでの１７ビットで指定されるキャッシュメモリ２１のエントリの６４ビットデータを読み出す。読み出された６４ビットのデータは、ｍｉｄとともにプロセッサ２０へ渡される。また、リクエスト管理テーブル２４の更新およびタグメモリ２２の更新も行う。これらの処理は、いずれもステップＳ１３６におけるそれぞれの処理と同一であり、説明は省略する。ステップＳ１３８の処理が終了すると、受けたメッセージの処理は終了する。
【０１４７】
ステップＳ１４１では、書き戻しブロック選択手段２６が書き戻しを要求しているかどうかを調べる。書き戻しが要求されている場合はステップＳ１４２に進む。要求されていない場合はステップＳ１４６に進む。
【０１４８】
ステップＳ１４２では、書き戻しブロック選択手段２６が出力するアドレスの第１９ビットから第７ビットまでの１３ビットで指定されるタグメモリ２２のエントリのデータを読み出し、タグアドレスおよび状態を得る。
【０１４９】
ステップＳ１４３では、タグアドレス２０ビットと書き戻しブロック選択手段２６が出力するアドレスの上位２０ビットが一致するかどうか、状態が「Ｄ」かどうかから書き戻しが必要かどうかを判断する。両方とも「Ｙｅｓ」の場合は書き戻しが必要と判断しステップＳ１４４に進み、どちらかでも「Ｎｏ」の場合はス  テップＳ１４５に進む。
【０１５０】
ステップＳ１４４では、書き戻しブロック選択手段２６から得られたアドレスの第１９ビットから第７ビットまでの１３ビットに０ｘ０から０ｘｆまで変化する４ビットを下位に付加した１７ビットで指定される合計１６エントリ、１２８バイトのブロックデータをキャッシュメモリ２１から読み出し、そのブロックデータを付加した「ＲｐＢａｃｋ」メッセージを生成する。この「ＲｐＢａｃｋ」メッセージの宛先ノード番号には、書き戻しブロック選択手段２６から得られたアドレスの上位１０ビットが用いられ、要求元ノード番号には、当該ノードＰＥｉのノード番号が用いられる。また、アドレスは、書き戻しブロック選択手段２６から得られたアドレスが用いられる。また、ｍｉｄはどんな値でも構わない。生成したメッセージをメッセージ送信部３５あるいはホームアクセス制御部２７のいずれに出力するかを、図８（ａ）のステップＳ１１３の場合と同様に、宛先ノード番号と当該ノード番号との比較結果によって決定する。また、タグメモリ２２の更新も行う。更新するエントリはステップＳ１４２において指定されたエントリであり、状態は「Ｓ」に、タグアドレスはステップＳ１４２で読み出したタグアドレスに、それぞれ更新する。ステップＳ１４４の処理が終了するとステップＳ１４５に進む。
【０１５１】
ステップＳ１４５では、書き戻しブロック選択手段２６から受けた要求のアドレスを削除する。ステップＳ１４５の処理が終了するとステップＳ１４６に進む。
【０１５２】
ステップＳ１４６では、受けたメッセージ（「ＣｍｐＳｈ」あるいは「ＣｍｐＤａｔＳｈ」）に付加されていたアドレスを書き戻しブロック選択手段２６に登録する。この処理が終了すると、受けたメッセージの処理を終了する。
【０１５３】
以下、図１２（ａ），（ｂ）および図１３を参照して、ホームアクセス制御部２７の動作に  ついて説明する。
【０１５４】
図１２（ａ）は、ホームアクセス制御部２７が実行する処理を示すフローチャー  トであり、図１２（ｂ）と図１３は、図１２（ａ）のフローチャートの処理で用いられる、受けたメッセージの種類、ディレクトリメモリ読み出したブロックの状態、保持形式および保持ノード情報から求めるアンキャッシュド情報、書き戻し回数と閾値が一致するかどうかの４つの情報と、ディレクトリメモリに格納するブロックの状態、保持ノード情報に対する操作、書き戻し回数に対する操作、処理タイプ、メッセージの種類を示すテーブルである。
【０１５５】
図１２（ａ）のフローチャートの処理において、ホームアクセス制御部２７は、  受けたメッセージの種類、ディレクトリメモリ３１から読み出したブロックの  状態、保持形式および保持ノード情報から求めるアンキャッシュド（Ｕｎｃａｃｈｅｄ）情報、書き戻し回数と閾値が一致するかどうかの４つの情報を元に、ステップＳ１５２で  ディレクトリメモリ３１に格納するブロックの状態、保持ノード情報に対する操作および保持形式、書き戻し回数に対する操作、ステップＳ１５３での処理タイプ、ステップＳ１５４、ステップＳ１５５、ステップＳ１５６で出力するメッセージの種類を決定する。
【０１５６】
ホームアクセス制御部２７は、図１２（ｂ），図１３に示すテーブルを格納している。なお、図１２（ｂ），  図１３において「−−」は、いずれの値でも構わないことを示している。
【０１５７】
図１２（ｂ），図１３に示すアンキャッシュド情報は、要求元ノードＰＥｉを除く他のノードＰＥｉがコピーを保持しているかどうかを求めるものである。アンキャッシュド情報は、保持ノード情報の形式によってそれぞれ求めかたが異なる。
【０１５８】
保持ノード情報がポインタ形式である場合は、受けたメッセージの要求元ノード番号１０ビットと保持ノード情報１０ビットが一致した場合に、アンキャッシュド情報は「Ｙｅｓ」となり、一致しなかった場合には「Ｎｏ」となる。
【０１５９】
保持ノード情報がコースベクタ形式の場合は、コースベクタが８ビットとも「０」の場合には、アンキャッシュド情報は「Ｙｅｓ」となり、１ビットでも「１」が立っている場合には「Ｎｏ」となる。
【０１６０】
保持ノード情報が、カウンタ形式の場合、保持ノード数から１引いた値が「０」になった場合には、アンキャッシュド情報は「Ｙｅｓ」となり、「０」にならなかった場合には「Ｎｏ」となる。
【０１６１】
次に、図１２（ａ），図１３に示した保持ノード情報に対する操作（図では、「保持ノード操作」と記す）について説明する。保持ノード情報に対する操作として、「ｓｅｔ」，「ａｄｄ」，「ｃｏｕｎｔ」，「ｄｅｃ」，「ｃｌｅａｎ」，「ｎｏｎｅ」の６つの操作がある。
【０１６２】
「ｓｅｔ」は、受けたメッセージの要求元ノード番号を保持ノード番号として設定するものであり、ポインタ形式で保持される。このとき、保持形式もポインタ形式を示す「０１」に設定される。
【０１６３】
「ａｄｄ」は、保持ノード番号形式とコースベクタ形式に対して行われる操作である。保持ノード番号形式の場合は読み出した保持ノード番号の上位３ビットをデコードして得られる８ビットを、コースベクタ形式の場合はそのままの８ビットを、要求元ノード番号の上位３ビットをデコードして得られる８ビットと論理和をとって得られる値に設定するものである。「ａｄｄ」操作を行うことにより保持形式はコースベクタ形式となる。それに従い、保持形式もコースベクタ形式を示す「００」に設定される。
【０１６４】
「ｃｏｕｎｔ」は、保持ノード番号形式あるいはコースベクタ形式に対して行われる操作であり、読み出した保持ノード情報から、要求元ノード番号をのぞいて幾つのノードＰＥｉがコピーを保持していることになるかを求める操作である。「ｃｏｕｎｔ」は、ポインタ形式の場合は「１」に設定される。コースベクタ形式の場合は、８ビット中１が立っているビットの数と１ビットが表すノードＰＥｉの数１２８とを掛けたもので求められる。ただし、要求元ノード番号に対応するビットが１の場合前記で求めた数から１を引いた値が設定される。これにより、保持形式もカウンタ形式を示す「１０」に設定される。
【０１６５】
「ｄｅｃ」は、カウンタ形式に対して行われる操作である。読み出した保持ノード数から１を引いた値に設定するものである。
【０１６６】
「ｃｌｅａｎ」は、１０ビットをすべて「０」に設定するものである。この場合、保持形式はコースベクタ形式を示す「００」に設定される。
【０１６７】
「ｎｏｎｅ」は、読み出した値に何の操作も加えずにそのまま設定するものである。保持形式の値も維持される。
【０１６８】
次に、図１２（ｂ），図１３に示した書き戻し回数について説明する。書き戻し回数に関する操作には、値を「０」に初期化する操作と、現在の値に１を足し  た値を次の値とする操作がある。図中「０」，「＋１」がそれぞれに該当する。  またなにも記述がない場合は現在の値と同じ値を次の値とすることを示している。
【０１６９】
以下、図１２（ａ）のフローチャートの処理について説明する。
【０１７０】
まず、ステップＳ１５１では、ホームアクセス制御部２７は、該当するディレクトリメモリのエントリのデータ（状態、保持ノード情報、保持形式、書き戻し回数）を読み出す（ステップＳ１５１）。読み出されるエントリは、受けたメッセージのアドレスの第２８ビットから第７ビットまでの２２ビットでインデックスされるディレクトリメモリ３１のデータである。ステップＳ１５１の処理が終了するとステップＳ１５２に進む。
【０１７１】
ステップＳ１５２では、ステップＳ１５１で読み出したディレクトリメモ  リ３１のエントリの値を更新する。状態は、図１２（ｂ），図１３に示すテーブルに  従って決定される。保持ノード情報は、図１２（ｂ），図１３に示した操作がステップＳ１３１で読み出した保持ノード情報に対して行われ求められる。また保持ノード形式もその操作によって前記のように決定する。書き戻し回数は、図１２（ｂ），図１３に示す操作が行われ求められる。ステップＳ１５２で更新するエントリは、ステップＳ１５１でアクセスしたエントリと同一のエントリである。また、データ付きのメッセージであれば主メモリ３０へブロックデータを書き込む処理も行う。ブロックデータが書き込まれる主メモリ３０のエントリは、受けたメッセージのアドレスの第２８ビットから第７ビットまでの２２ビットに０ｘ０から０ｘｆまで変化する４ビットを下位に付加した２６ビットで指定される合計１６エントリ（１２８バイト）である。ステップＳ１５２の処理が終了すると、ステップＳ１５３に進む。
【０１７２】
ステップＳ１５３では、受けたメッセージの種類、ディレクトリメモリ３１から読み出したブロックの状態、保持形式及び保持ノード情報から求めるアンキャッシュド情報、書き戻し回数と閾値の比較結果の４つの情報から処理タイプが「ＣＡ」〜「ＣＣ」のいずれになるかを判定する。処理タイプが「ＣＡ」であると判定された場合には、ステップＳ１５４に進む。ステップＳ１５３で処理タイプが「ＣＢ」であると判定された場合には、ステップＳ１５５に進む。ステップＳ１５３で処理タイプが「ＣＣ」であると判定された場合には、受けたメッセージの処理を終了する。
【０１７３】
ステップＳ１５４では、メッセージを必要であれば複数生成し出力する。出力先は、ローカルアクセス制御部２５あるいはメッセージ送信部３５のどちらかである。どちらに出力するかは、生成したメッセージの宛先ノード番号と、当該ノード番号との比較結果によって決められる。一致した場合はローカルア  クセス制御部２５となり、一致しない場合はメッセージ送信部３５となる。出力するメッセージ（宛先ノード番号、メッセージの種類、アドレス、ｍｉｄ、要求元ノード番号）は、次のようにして生成される。メッセージの種類は、図１２（ｂ），図１３に従って決定する。アドレス、ｍｉｄ、要求元ノード番号は、それぞれ受けたメッセージのアドレスとｍｉｄと要求元ノード番号となる。宛先ノード番号は、生成するメッセージの種類により異なる。以下にメッセージの種類による宛先ノード番号の求め方を示す。
【０１７４】
「ＣｍｐＤａｔＳｈ」，「ＣｍｐＤａｔＥｘ」，「ＣｍｐＳｈ」，「ＣｍｐＥｘ」，「ＮＣｍｐ」の場合、受けたメッセージの要求元ノード番号が宛先ノード番号となる。「ＩｎｔｖＳｈ」，「ＩｎｔｖＥｘ」の場合、ステップＳ１４１でディレクトリメモリ３１から読み出した保持ノード情報の形式がポインタ形式でありその値がそのまま用いられる。以上のメッセージの場合、生成されるメッセージは一つのみである。
【０１７５】
「Ｉｎｖ」の場合、宛先ノード番号のみが異なる複数のメッセージが生成され送信される。この宛先ノード番号は、保持ノード情報に従って生成される。保持ノード情報はポインタ形式あるいはコースベクタ形式である。ポインタ形式の場合は前記「ＩｎｔｖＳｈ」の場合と同様に保持ノード情報がそのまま用いられ一つのメッセージだけが生成される。コースベクタ形式の場合、この形式で表されている複数のノードＰＥｉ（要求元ノードを除く）に対して宛先の異なる同一のメッセージを生成し出力することとなる。例えば、保持ノード情報が「００１１０１００」で、要求元ノード番号が「００１００１０１１０」の場合、宛先ノードはＰＥ２５６〜ＰＥ３８３、ＰＥ５１２〜ＰＥ８０７の合計３８４ノードとなり、これらの３８４個のノードに「Ｉｎｖ」メッセージが送信される。また、例えば、保持ノード情報が「１１００１０１１」で、要求元ノード番号が「００１００１０１１０」の場合、宛先ノードはＰＥ０〜ＰＥ１４９，ＰＥ１５１〜ＰＥ２５５，ＰＥ３８４〜ＰＥ５１１、ＰＥ８０８〜ＰＥ１０２３の合計６７９ノードとなり、これらの６７９ノードに「Ｉｎｖ」メッセージが送信される。
【０１７６】
ステップＳ１５４で、メッセージの生成出力を終えると、受けたメッセージの処理は終了する。
【０１７７】
ステップＳ１５５では、主メモリ３０（６４Ｍエントリ×６４ビット幅）から該当するブロックデータ（１２８バイト）を読み出す。読み出されるブロックデータは、受けたメッセージのアドレスの第２８ビットから第７ビットまで  の２２ビットに０ｘ０から０ｘｆまで変化する４ビットを下位に付加した２６ビットで指定される合計１６エントリのデータで、１２８バイトで構成される。このブロックデータは、生成されるメッセージに付加され、出力される。出力先はローカルアクセス制御部２５あるいはメッセージ送信部３５のどちらかとなる。どちらに出力するかはステップＳ１５４と同様に決められる。また、メッセージの生成も同様である。ステップＳ１５５の処理が終了すると、受けたメッセージの処理は終了する。
【０１７８】
以上が本発明の第１の実施例の動作の説明である。それでは、次に、本実施例の理解を助けるため、本実施例の動作の具体例を図１から図３を参照しフェーズ１からフェーズ５Ｂに分けて説明する。
【０１７９】
ここで、フェーズ１は、ノードＰＥ１のプロセッサ２０がノードＰＥ１の主メモリ３０のデータにロドアクセスを行ってから、それが完了するまでの動作である。
【０１８０】
フェーズ２は、フェーズ１の後、ノードＰＥ２のプロセッサ２０がフェーズ１でノードＰＥ１がアクセスしたノードＰＥ１の主メモリ３０のデータと同じブロックのデータにロードアクセスを行ってから、それが完了するまでの動作である。
【０１８１】
フェーズ３は、フェーズ２の後、ノードＰＥ２のプロセッサ２０がフェーズ２でアクセスしたノードＰＥ１の主メモリ３０のデータと同じブロックのデータにストアアクセスを行ってから、それが完了するまでの動作である。
【０１８２】
フェーズ４は、フェーズ３の後、ノードＰＥ２において書き戻し処理が行われた結果「ＲｐＢａｃｋ」メッセージが送信され、それが処理されるまでの動作である。
【０１８３】
フェーズ５Ａは、フェーズ４の後、ノードＰＥ１のプロセッサ２０がフェーズ４で書き戻されたブロックのデータにロードアクセスを行ってから、それが完了するまでの動作である。
【０１８４】
フェーズ５Ｂは、フェーズ４の後、ノードＰＥ２のプロセッサ２０がフェーズ４で書き戻されたブロックのデータにストアアクセスを行ってから、それが完了するまでの動作である。
【０１８５】
１．  フェーズ１
（１）ロードアクセスの処理
ノードＰＥ１のプロセッサ２０がアドレス「０ｘ００４００３００００」にｉｄ＝「０」でロードアクセスを行ったとする。
【０１８６】
プロセッサ２０が行ったメモリアクセスを受けたローカルアクセス制御部２５は、図８（ａ）のフローチャートに従い次のように動作する。
【０１８７】
まず、ステップＳ１１１で、タグメモリ２２の「０ｘ０６００」番地（プロセッサ２０から得たアドレス「０ｘ００４００３００００」の第１９ビット〜第７ビットの１３ビット）のデータを読み出す。初期の状態は「Ｉ」であるため、図８（ｂ）より処理タイプは「ＡＡ」、発行するメッセージは「ＢｌｋＲｄＳｈ」、ブロックの次状態は「Ｉ」に決定する。以上の処理を終えると、ステップＳ１１２に進む。
【０１８８】
ステップＳ１１２では、処理タイプが「ＡＡ」であることからステップＳ１１３に進む。
【０１８９】
ステップＳ１１３では、メッセージの生成出力およびリクエスト管理テーブル２４への登録を行う。生成出力するメッセージの、宛先ノード番号は「０ｘ００１」（アドレス「０ｘ００４００３００００」の第３９ビット〜第３０ビットの１０ビット）、メッセージの種類は「ＢｌｋＲｄＳｈ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「０」（＝ｉｄ）、要求元ノード番号は「０ｘ００１」となる。また、宛先ノード番号と当該ノードＰＥ１のノード番号が両者とも「０ｘ００１」と一致するので、出力先は当該ノードＰＥ１のホームアクセス制御部２７となる。また、リクエスト管理テーブルの「０」（＝ｉｄ）番エントリに、有効ビットは「１」、アクセスの種類はロード、アドレスは「０ｘ００４００３００００」というデータを書き込む。以上の処理を終えると、ステップＳ１１8に進む。
【０１９０】
ステップＳ１１８では、タグメモリの０ｘ０６００番地のエントリのデータを、状態は「Ｉ」に、タグアドレスは「０ｘ００４００」（アドレス「０ｘ００４００３００００」の第３９ビット〜第２０ビットの２０ビット）に更新する。
【０１９１】
以上で、ノードＰＥ１のローカルアクセス制御部２５は、ロードアクセスの処理を終了する。
【０１９２】
（２）ＢｌｋＲｄＳｈメッセージの処理
上記「ＢｌｋＲｄＳｈ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「ＢｌｋＲｄＳｈ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「０」、要求元ノード番号は「０ｘ００１」）を受けたノードＰＥ１のホームアクセス制御部２７は図１２（ａ）のフローチャートに従い次のように動作する。
【０１９３】
まず、ステップＳ１５１で、ディレクトリメモリ３１の「０ｘ０００６００」（メッセージに付加されていたアドレス「０ｘ００４００３００００」の第２８ビット〜第７ビットの２２ビット）番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ初期状態の「Ｃ」、「０ｘ０００」、「００」（コースベクタ形式）、「０」である。受けたメッセージの種類が「ＢｌｋＲｄＳｈ」であり、読み出した状態が「Ｃ」、保持形式がコースベクタ形式で保持ノード情報が「０ｘ０００」でありアンキャッシュドであることから、処理タイプは「ＣＢ」、ブロックの次状態は「Ｍ」、保持ノード操作は「ｓｅｔ」、書き戻し回数はそのまま、出力するメッセージの種類は「ＣｍｐＤａｔＥｘ」に決定する（図１２（ａ），図１３参照）。以上の処理を終えると、ステップＳ１５２に進む。
【０１９４】
ステップＳ１５２では、これらの情報を元に、ディレクトリメモリ３１の「０ｘ０００６００」番地のデータを、状態は「Ｍ」、保持ノード情報は「０ｘ００１」、保持形式は「０１」（ポインタ形式）、書き戻し回数は「０」に更新する。また、データ付きのメッセージではないので主メモリ３０へのブロックデータの書き込みは行わない。以上の処理を終えると、ステップＳ１５３に進む。
【０１９５】
ステップＳ１５３では、処理タイプが「ＣＢ」であることからステップＳ１５５に進む。
【０１９６】
ステップＳ１５５では、主メモリ３０の「０ｘ０００６０００」番地〜「０ｘ０００６００ｆ」番地までの６４ビット×１６エントリ＝１２８バイトのブロックデータを読み出し、生成するメッセージに付加し出力する。このメッセージは、宛先ノード番号を「０ｘ００１」、メッセージの種類を「ＣｍｐＤａｔＥｘ」、アドレスを「０ｘ００４００３００００」、ｍｉｄを「０」、要求元ノード番号を「０ｘ００１」、ブロックデータを当該ステップＳ１４５で読み出したブロックデータとするメッセージである。このメッセージの出力先は、宛先ノード番号と当該ノード番号が両方と「０ｘ００１」で一致することから、当該ノードのローカルアクセス制御部２５となる。
【０１９７】
以上で、ノードＰＥ１のホームアクセス制御部２７は、「ＢｌｋＲｄＳｈ」メッセージの処理を終了する。
【０１９８】
（３）ＣｍｐＤａｔＥｘメッセージの処理
上記「ＣｍｐＤａｔＥｘ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「ＣｍｐＤａｔＥｘ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「０」、要求元ノード番号は「０ｘ００１」）を受けたノードＰＥ１のローカルアクセス制御部２５は、図１０および図１１（ａ）のフローチャートに従い次のように動作する。
【０１９９】
まず、ステップＳ１３１で、リクエスト管理テーブル２４の「０」（＝ｍｉｄ）  番エントリの情報を読み出し、アクセスの種類はロード、アドレスは「０ｘ０  ０４００３００００」という情報を得る。以上の処理を終えるとステップＳ１３２に進む。
【０２００】
ステップＳ１３２では、ブロックデータ付きのメッセージであるからステップＳ１３５に進む。
【０２０１】
ステップＳ１３５では、キャッシュメモリ２１の「０ｘ０６０００」番地から「０ｘ０６００ｆ」番地に、メッ  セージに付加されていたブロックデータを書き込む。以上の処理を終えると、ステップＳ１３６に進む。
【０２０２】
ステップＳ１３６では、アクセスタイプがロードであることからステップＳ１３９に進む。
【０２０３】
ステップＳ１３９では、キャッシュメモリ２１から「０ｘ０６０００」番地の６４ビットデータを読み出し、プロセッサ２０に対してｉｄ＝「０」のメモリアクセスに対する応答データとして渡す。これによりメモリアクセスは完了する。また、リクエスト管理テーブル２４の「０」番エントリに有効ビットを「０」としたデータを書き込み、エントリを削除する。また、タグメモリの「０ｘ０６００」番地の状態およびタグアドレスを、それぞれ「Ｅ」および「０ｘ００４００」に更新する（図１１（ｂ）参照）。
【０２０４】
以上で、ノードＰＥ１のローカルアクセス制御部２５は、受けた「ＣｍｐＤａｔＥｘ」メッセージの処理を終了する。
【０２０５】
この段階で「０ｘ００４００３００００」〜「０ｘ００４００３００７ｆ」番地までについて、最新のデータはノードＰＥ１の主メモリ３０およびノードＰＥ１のキャッシュメモリ２１に存在する状態となる。
【０２０６】
２．  フェーズ２
（１）ロードアクセスの処理
次いで、ノードＰＥ２で、ロードアクセスがｉｄ＝「２」でアドレス「０ｘ００４００３００００」に行われたとする。
【０２０７】
プロセッサ２０が行ったメモリアクセス（アクセスの種類はロード、アドレスは「０ｘ００４００３００００」、ｉｄ＝「２」）を受けたローカルアクセス制御部２５は、図８（ａ）のフローチャートに従い次のように動作する。
【０２０８】
まず、ステップＳ１１１で、タグメモリ２２の「０ｘ０６００」番地のデータを読み出す（ステップＳ１１１）。初期の状態は「Ｉ」であるため、図８（ｂ）より処理タイプは「ＡＡ」、発行するメッセージは「ＢｌｋＲｄＳｈ」、ブロックの次状態は「Ｉ」に決定する。以上の処理を終えると、ステップＳ１１２に進む。
【０２０９】
ステップＳ１１２では、処理タイプが「ＡＡ」であることからステップＳ１１３に進む。
【０２１０】
ステップＳ１１３では、メッセージの生成出力およびリクエスト管理テーブル２４への登録を行う。生成出力するメッセージの、宛先ノード番号は「０ｘ００１」（アドレス「０ｘ００４００３００００」の第３９ビット〜第３０ビットの１０ビット）、メッセージの種類は「ＢｌｋＲｄＳｈ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「２」、要求元ノード番号は「０ｘ００２」となる。また、宛先ノード番号と当該ノードＰＥ２のノード番号が異なるので、出力先はメッセージ送信部３５となる。また、この時リクエスト管理テーブルの「２」（＝ｉｄ）番エントリに、有効ビットは「１」、アクセスの種類はロード、アドレスは「０ｘ００４００３００００」というデータを書き込む。以上の処理を終えると、ステップＳ１１８に進む。
【０２１１】
ステップＳ１１８では、タグメモリの「０ｘ０６００」番地のエントリのデータを、状態は「Ｉ」に、タグアドレスは「０ｘ００４００」（アドレス「０ｘ００４００３００００」の第３９ビット〜第２０ビットの２０ビット）に更新する（ステップＳ１１８）。
【０２１２】
以上で、ノードＰＥ２のローカルアクセス制御部２５は、ロードアクセスの処理を終了する。
【０２１３】
（２）ＢｌｋＲｄＳｈメッセージの処理
上記「ＢｌｋＲｄＳｈ」メッセージは、ノードＰＥ２のメッセージ送信部３５、相互結合網１０、ノードＰＥ１のメッセージ受信部３６を介してノードＰＥ１のホームアクセス制御部２７に送られる。
【０２１４】
上記「ＢｌｋＲｄＳｈ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「ＢｌｋＲｄＳｈ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「２」、要求元ノード番号は「０ｘ００２」）を受けたホームアクセス制御部２７は図１２（ａ）のフローチャートに従い次のように動作する。
【０２１５】
まず、ステップＳ１５１で、ディレクトリメモリ３１の「０ｘ０００６００」（メッセージに付加されていたアドレス「０ｘ００４００３００００」の第２８ビット〜第７ビットの２２ビット）番地をアクセスし、状態等のデータを読み出す。フェーズ１において、状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ「Ｍ」、「０ｘ００１」、「０１」、「０」に更新されており、その値が読み出される。受けたメッセージの種類は「ＢｌｋＲｄＳｈ」であり、読み出した  状態は「Ｍ」、保持形式はポインタ形式で保持ノード情報は「０ｘ００１」で  ありアンキャッシュドでないことから、図１３に従い、処理タイプは「ＣＡ」、  ブロックの次状態は「ＲＳＰ」、保持ノード操作は「ｎｏｎｅ」、書き戻し回数は「０」、出力するメッセージの種類は「ＩｎｔｖＳｈ」に決定する。。以上の処理を終えると、ステップＳ１５２に進む。
【０２１６】
ステップＳ１５２では、これらの情報を元に、ディレクトリメモリ３１の「０ｘ０００６００」番地のデータを、状態は「ＲＳＰ」、保持ノード情報は「０ｘ００１」、保持形式は「０１」、書き戻し回数は「０」に更新する。ここでは、データ付きのメッセージではないので主メモリ３０へのブロックデータの書込は行わない。以上の処理を終えると、ステップＳ１５３に進む。
【０２１７】
ステップＳ１５３では、処理タイプが「ＣＡ」であることからステップＳ１５４に進む。
【０２１８】
ステップＳ１５４では、宛先ノー番号を「０ｘ００１」、メッセージの種類を「ＩｎｔｖＳｈ」、アドレスを「０ｘ００４００３００００」、ｍｉｄを「２」、要求元ノード番号を「０ｘ００２」、とするメッセージを生成する。メッセージの出力先は、宛先ノード番号と当該ノードＰＥ１のノード番号が一致することから、ローカルアクセス制御部２５とな  る（ステップＳ１４４）。
【０２１９】
以上で、ノードＰＥ１のホームアクセス制御部２７は、「ＢｌｋＲｄＳｈ」メッセージの処理を終了する。
【０２２０】
（３）ＩｎｔｖＳｈメッセージの処理
上記「ＩｎｔｖＳｈ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「ＩｎｔｖＳｈ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「２」、要求元ノード番号は「０ｘ００２」）を受けたノードＰＥ１のローカルアクセス制御部２５は、図９（ａ）のフローチャートに従い次のように動作する。
【０２２１】
まず、ステップＳ１２１で、タグメモリ２２の「０ｘ０６００」番地のデータを読みだす。フェーズ１において、状態およびタグアドレスはそれぞれ「Ｅ」および「０ｘ００４００」に更新されており、この値が読み出される。受けたメッセージが「ＩｎｔｖＳｈ」であり、タグアドレスが一致し、状態が「Ｅ」であることから、図９（ｂ）に従い、処理タイプは「ＢＡ」、出力するメッセージの種類は「Ａｃｋ」、ブロックの次状態は「Ｓ」に決定する。
【０２２２】
ステップＳ１２２では、処理タイプが「ＢＡ」であることからステップＳ１２３に進む。
【０２２３】
ステップＳ１２３では、「Ａｃｋ」メッセージを生成する。「Ａｃｋ」メッセージの、宛先ノード番号は「０ｘ００１」、メッセージの種類は「Ａｃｋ」、アドレスは「０ｘ００４００３００００」、要求元ノード番号は「０ｘ００２」、ｍｉｄは「２」となる。宛先ノード番号と当該ノードＰＥ１のノード番号が「０ｘ００１」で一致することから  出力先はホームアクセス制御部２７となる。以上の処理を終えると、ステップＳ１２５に進む。
【０２２４】
ステップＳ１２５では、タグメモリの「０ｘ０６００」番地の状態およびタグアドレスを、それぞれ「Ｓ」および「０ｘ００４００」に更新する。
【０２２５】
以上でノードＰＥ１のローカルアクセス制御部２５は、「ＩｎｔｖＳｈ」メッセージの処理を終了する。
【０２２６】
（４）Ａｃｋメッセージの処理
上記「Ａｃｋ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「Ａｃｋ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「２」、要求元ノード番号は「０ｘ００２」）を受けたホームアクセス制御部２７は、図１２（ａ）に従い次のように動作する。
【０２２７】
まず、ステップＳ１５１で、ディレクトリメモリ３１の「０ｘ０００６００」（メッセージに付加されていたアドレス「０ｘ００４００３００００」の第２８ビット〜第７ビットの２２ビット）番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれフェーズ２で「ＲＳＰ」、「０ｘ００１」、「０１」（ポインタ形式）、「０」に更新されており、その値が読み出される。受けたメッセージの種類が「Ａｃｋ」であり、読み出した状態が「ＲＳＰ」であることから、図１３に従い、処理タイプは「ＣＢ」、ブロックの次状態は「Ｃ」、書き戻し回数はそのまま、保持ノード操作は「ａｄｄ」、出力するメッセージの種類は「ＣｍｐＤａｔＳｈ」に決定する。以上の処理を終えると、ステップＳ１５２に進む。
【０２２８】
ステップＳ１５２では、これらの情報を元に、ディレクトリメモリ３１の「０ｘ０００６００」番地のデータを、状態は「Ｃ」、保持ノード情報は「０ｘ００１」、保持形式は「００」（コースベクタ形式）、書き戻し回数は「０」に更新する。また、「Ａｃｋ」メッセージがブロックデータ付きのメッセージではないことから、主メモリ３０へのデータの書き込みは行わない。ただし、主メモリ３０には最新のデータが存在している。以上の処理を終えると、ステップＳ１５３に進む。
【０２２９】
ステップＳ１５３では、処理タイプが「ＣＢ」であることからステップＳ１５５に進む。
【０２３０】
ステップＳ１５５では、主メモリ３０の「０ｘ０００６０００」番地〜「０ｘ０００６００ｆ」番地までの６４ビット×１６エントリ＝１２８バイトのブロックデータを読み出し、生成するメッセージに付加し出力する。このメッセージは、宛先ノード番号を「０ｘ００２」、メッセージの種類を「ＣｍｐＤａｔＳｈ」、アドレスを「０ｘ００４００３００００」、ｍｉｄを「２」、要求元ノード番号を「０ｘ００２」、ブロックデータを当該ステップＳ１４５で読み出したブロックデータとするメッセージである。このメッセージの出力先は、宛先ノード番号「０ｘ００２」と当該ノードＰＥ１のノード番号「０ｘ００１」が一致しないことから、メッセージ送信部３５となる。
【０２３１】
以上でノードＰＥ１のホームアクセス制御部２７は、「Ａｃｋ」メッセージの処理を終了する。
【０２３２】
（５）ＣｍｐＤａｔＳｈメッセージの処理
上記「ＣｍｐＤａｔＳｈ」メッセージは、ノードＰＥ１のメッセージ送信部３５、相互結合網１０、ノードＰＥ２のメッセージ受信部３６を介して、ノードＰＥ２のローカルアクセス制御部２５に出力される。
【０２３３】
上記「ＣｍｐＤａｔＳｈ」メッセージ（宛先ノード番号は「０ｘ００２」、メッセージの種類は「ＣｍｐＤａｔＳｈ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「２」、要求元ノード番号は「０ｘ００２」、ブロックデータは最新のデータ）を受けたノードＰＥ２のローカルアクセス制御部２５は、図１０のフローチャートに従い、次のように動作する。
【０２３４】
まず、ステップＳ１３１で、リクエスト管理テーブル２４の「２」（＝ｍｉｄ）番エントリの情報を読み出し、アクセスの種類はロード、アドレスは「０ｘ００４００３００００」という情報を得る。以上の処理を終えると、ステップＳ１３２に進む。
【０２３５】
ステップＳ１３２では、ブロックデータ付きのメッセージであるからステップＳ１３５に進む。
【０２３６】
ステップＳ１３５では、キャッシュメモリ２１の「０ｘ０６０００」番地から「０ｘ０６００ｆ」番地に、メッ  セージに付加されていたブロックデータを書き込む。以上の処理を終えると、ステップＳ１３６に進む。
【０２３７】
ステップＳ１３６では、アクセスタイプがロードであることからステップＳ１３９に進む。
【０２３８】
ステップＳ１３９では、キャッシュメモリ２１から「０ｘ０６０００」番地の６４ビットデータを読み出し、プロセッサ２０に対してｉｄ＝「２」のメモリアクセスに対する応答データとして渡す。これによりメモリアクセスは完了する。また、リクエスト管理テーブル２４の「２」番エントリに有効ビットを「０」としたデータを書き込み、エントリを削除する。また、タグメモリの「０ｘ０６００」番地の状態およびタグアドレスを、図１１（ｂ）に従い、それぞれ「Ｓ」および「０ｘ００４００」に更新する（ステップＳ１３９）。
【０２３９】
以上でノードＰＥ２のローカルアクセス制御部２５は、受けた「ＣｍｐＤａｔＳｈ」メッセージの処理を終了する。
【０２４０】
この段階で「０ｘ００４００３００００」〜「０ｘ００４００３００７ｆ」番地までについて、最新のデータはノードＰＥ１のキャッシュメモリ２１、ノードＰＥ１の主メモリ３０、ノードＰＥ２のキャッシュメモリ２１に存在する状態になる。
【０２４１】
３．  フェーズ３
（１）ストアアクセスの処理
次いで、ノードＰＥ２で、ストアアクセスがｉｄ＝「１」でアドレス「０ｘ００４００３００１０」に行われていたとする。
【０２４２】
プロセッサ２０が行ったメモリアクセスを受けたノードＰＥ２のローカルアクセス制御部２５は、図８（ａ）のフローチャートに従い次のように動作する。
【０２４３】
まず、ステップＳ１１１で、タグメモリ２２の「０ｘ０６００」番地のデータを読み出す。フェーズ２において状態は「Ｓ」、タグアドレスは「０ｘ００４００」に更新されており、その値が読み出される。アクセスの種類はストアであり、タグアドレスは「０ｘ００４００」で一致、状態は「Ｓ」であるため、図８（ｂ）に従い処理タイプは「ＡＡ」、出力するメッセージの種類は「Ｕｐｇｒａｄｅ」、ブロックの次状態は「Ｓ」に決定する。以上の処理を終えると、ステップＳ１１２に進む。
【０２４４】
ステップＳ１１２では、処理タイプが「ＡＡ」であることからステップＳ１１３に進む。
【０２４５】
ステップＳ１１３では、メッセージの生成出力およびリクエスト管理テーブル２４への登録を行う。生成出力するメッセージの、宛先ノード番号は「０ｘ００１」（アドレス「０ｘ００４００３００１０」の第３９ビット〜第３０ビットの１０ビット）、メッセージの種類は「Ｕｐｇｒａｄｅ」、アドレスは「０ｘ００４００３００１０」、ｍｉｄは「１」、要求元ノード番号は「０ｘ００２」となる。また、宛先ノード番号と当該ノードＰＥ２のノード番号が異なるので、出力先はメッセージ送信部３５となる。また、この時リクエスト管理テーブルの「１」（＝ｉｄ）番エントリに、有効ビットは「１」、アクセスの種類はストア、アドレスは「０ｘ００４００３００１０」、およびストアデータを書き込む。以上の処理を終えると、ステップＳ１１８に進む。
【０２４６】
ステップＳ１１８では、タグメモリの「０ｘ０６００」番地のエントリのデータを、状態は「Ｓ」に、タグアドレスは「０ｘ００４００」（アドレス「０ｘ００４００３００１０」の第３９ビット〜第２０ビットの２０ビット）に更新する。
【０２４７】
以上で、ノードＰＥ２のローカルアクセス制御部２５はストアアクセスの処理を終了する。
【０２４８】
（２）Ｕｐｇｒａｄｅメッセージの処理
上記「Ｕｐｇｒａｄｅ」メッセージは、ノードＰＥ２のメッセージ送信部３５、相互結合網１０、ノードＰＥ１のメッセージ受信部３６を介してノードＰＥ１のホームアクセス制御部２７に送られる。
【０２４９】
上記「Ｕｐｇｒａｄｅ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「Ｕｐｇｒａｄｅ」、アドレスは「０ｘ００４００３００１０」、ｍｉｄは「１」、要求元ノード番号は「０ｘ００２」）を受けたノードＰＥ１のホームアクセス制御部２７は図１２（ａ）のフローチャートに従い次のように動作する。
【０２５０】
まず、ステップＳ１５１で、ディレクトリメモリ３１の「０ｘ０００６００」（メッセージに付加されていたアドレス「０ｘ００４００３００１０」の第２８ビット〜第７ビットの２２ビット）番地をアクセスし、状態等のデータを読み出す。フェーズ２において、状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ  「Ｃ」、「０ｘ００１」、「００」（コースベクタ形式）、「０」に更新されており、その値が読み出される。受けたメッセージの種類が「Ｕｐｇｒａｄｅ」であり、読み出した状態が「Ｃ」であり、保持形式がコースベクタ形式で保持ノード情報が「０ｘ００１」でアンキャッシュドではないことことから、図１２（ｂ）に従い、処理タイプは「ＣＡ」、ブロックの次状態は「ＵＰ」、保持ノード操作は「ｃｏｕｎｔ」、書き戻し更新回数はそのまま、出力するメッセージの種類は「Ｉｎｖ」に決定する。以上の処理を終えると、ステップＳ１５２に進む。
【０２５１】
ステップＳ１５２では、これらの情報を元に、ディレクトリメモリ３１の「０ｘ０００６００」番地のデータを、状態は「ＵＰ」、保持ノード情報は「０ｘ０７ｆ」、保持形式は「１０」（カウンタ形式）、書き戻し回数は「０」に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから主メモリ３０への書き込みは行わない。以上の処理を終えると、ステップＳ１５３に進む。
【０２５２】
ステップＳ１５３では、処理タイプが「ＣＡ」であることからステップＳ１５４に進む。
【０２５３】
ステップＳ１５４では、宛先ノード番号のみが異なる複数の「Ｉｎｖ」メッセージを生成し出力する。この「Ｉｎｖ」メッセージは、メッセージの種類を「Ｉｎｖ」、アドレスを「０ｘ００４００３００１０」、ｍｉｄを「１」、要求元ノード番号を「０ｘ００２」とするメッセージである。また、宛先ノード番号は、要求元ノード番号「０ｘ００２」を除いた「０ｘ０００」から「０ｘ０７ｆ」となる。以上の処理で１２７個のメッセージが生成される。各メッセージの出力先は、宛先ノード番号と当該ノード番号の比較結果によって決定する。宛先ノード番号が「０ｘ００１」のメッセージは、当該ノードＰＥ１のノード番号「０ｘ００１」と一致するのでローカルアクセス制御部２５に出力される。宛先ノード番号が「０ｘ００１」ではない他のメッセージは当該ノードＰＥ１のノード番号と一致しないので、メッセージ送信部３５に出力される。
【０２５４】
以上で、ノードＰＥ２のホームアクセス制御部２７は「Ｕｐｇｒａｄｅ」メッセージの処理を終了する。
【０２５５】
（３）Ｉｎｖメッセージの処理
これらの「Ｉｎｖ」メッセージはノードＰＥ１のメッセージ送信部３５、相互結合網、各ノードＰＥ０〜ＰＥ１２７（ＰＥ１，ＰＥ２除く）のメッセージ受信部３６を介して各ノードのローカルアクセス制御部２５に出力される。ノードＰＥ１への「Ｉｎｖ」メッセージは上述のように直接ローカルアクセス制御部２５に出力される。
【０２５６】
上記「Ｉｎｖ」メッセージ（宛先ノード番号は受けたノードＰＥｉのノード番号、メッセージの種類は「Ｉｎｖ」、アドレスは「０ｘ００４００３００１０」、ｍｉｄは「１」、要求元ノード番号は「０ｘ００２」）を受けた各ノードＰＥｉ（ｉ＝０、１、３、・・・、１２７）のローカルアクセス制御部２５は、図９（ａ）のフローチャートに従い次のように動作する。
【０２５７】
まず、ステップＳ１２１で、「Ｉｎｖ」メッセージを受けたローカルアクセス制御部２５は、タグメモリ２２の「０ｘ０６００」番地のデータを読み出す。読み出したタグアドレスが「０ｘ００４００」と一致するかどうか、また状態がなにであるかによって、図９（ｂ）のテーブルに従い、処理タイプ、出力するメッセージの種類、タグメモリ２２のブロックの次状態が決定する。以上の処理を終えると、ステップＳ１２２に進む。
【０２５８】
ステップＳ１２２では、「Ｉｎｖ」メッセージを受けた場合の処理タイプが「ＢＡ」となることからステップＳ１２３に進む。
【０２５９】
ステップＳ１２３では、「Ａｃｋ」メッセージの生成が行われる。この「Ａｃｋ」メッセージは、宛先ノード番号を「０ｘ００１」、メッセージの種類を「Ａｃｋ」、アドレスを「０ｘ００４００３０００１０」、ｍｉｄを「１」、要求元ノード番号を「０ｘ００２」とする。出力先は宛先ノード番号「０ｘ００１」と当該ノード番号の比較結果によって決定する。ノードＰＥ１であれば、一致するのでホームアクセス制御部２７に出力する。他のノードであれば、一致しないのでメッセージ送信部３５に出力する。以上の処理を終えると、ステップＳ１２５に進む。
【０２６０】
ステップＳ１２５では、次いで、タグメモリの更新を行う。更新するエントリはステップ１２１で読み出しを行った「０ｘ０６００」番地のエントリであり、状態は図８から求まるブロックの次状態「Ｉ」に更新され、タグアドレスは先ほどタグメモリ２２から読み出した値がそのまま書き込まれる（ステップＳ１２５）。
【０２６１】
以上で各ノードＰＥｉ（ｉ＝０，１，３，…，１２７）のローカルアクセス制御部２５は、「Ｉｎｖ」メッセージの処理を終了する。
【０２６２】
（４）Ａｃｋメッセージの処理
ノードＰＥ０、ノードＰＥ３〜ノードＰＥ１２７は、それぞれ前記「Ａｃｋ」メッセージをノードＰＥ１に対して送信する。この「Ａｃｋ」メッセージは、各ノードのメッセージ送信部３５、相互結合網１０、ノードＰＥ１のメッセージ受信部３６を介してノードＰＥ１のホームアクセス制御部２７に出力される。
【０２６３】
一方、ノードＰＥ１では、ローカルアクセス制御部２５から、「Ａｃｋ」メッセージがホームアクセス制御部２７に出力される。
【０２６４】
ノードＰＥ１のホームアクセス制御部２７は、合計１２７個の同じ「Ａｃｋ」メッセージ（宛先ノードは「０ｘ００１」、種類は「Ａｃｋ」、アドレ  スは「０ｘ００４００３００１０」、ｍｉｄは「１」、要求元ノード番号は「０ｘ００２」）を受け取り、図１２（ａ）のフローチャートに従い処理することになる。最初の「Ａｃｋ」メッセージをノードＰＥ１のホームアクセス制御部２７が受けた場合、次のように動作する。
【０２６５】
まず、ステップＳ１５１で、ディレクトリメモリ３１の「０ｘ０００６００」（メッセージに付加されていたアドレス「０ｘ００４００３００１０」の第２８ビット〜第７ビットの２２ビット）番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれフェーズ３で「ＵＰ」、「０ｘ０７ｆ」、「１０」（カウンタ形式）、「０」に更新されており、その値が読み出される。受けたメッセージの種類が「Ａｃｋ」であり、読み出した状態が「ＵＰ」、また保持ノード形式がカウンタ形式で保持ノード情報が０ｘ０７ｆでありアンキャッシュドでないことから、図１３のテーブルに従い、処理タイプは「ＣＣ」、ブロックの次状態は「ＵＰ」、保持ノード操作は「ｄｅｃ」、書き戻し更新回数はそのまま、出力するメッセージはなしに決定する。以上の処理を終えると、ステップＳ１５２に進む。
【０２６６】
ステップＳ１５２では、これらの情報を元に、ディレクトリメモリ３１の「０ｘ０００６００」番地のデータを、状態は「ＵＰ」、保持ノード情報は「０ｘ０７ｅ」、保持形式は「１０」、書き戻し更新回数は「０」に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから、主メモリ３０への書き込みは行なわない。以上の処理を終えると、ステップＳ１５３に進む。
【０２６７】
ステップＳ１５３では、処理タイプが「ＣＣ」であることから処理を終了する。
【０２６８】
以上で、ノードＰＥ１のホームアクセス制御部２７は「Ａｃｋ」メッセージの処理を終了する。
【０２６９】
ホームアクセス制御部２７は、各ノードＰＥｉからの「Ａｃｋ」メッセージを、前記同様に処理していき、ディレクトリメモリ３１の値を読み出し保持ノード情報から「１」を引いた値に更新する処理が行われていく。この処理は、読み出した保持ノード情報から「１」を引いた値が「０ｘ０００」でない場合、即ちアンキャッシュドでない場合まで継続される。ただし、アンキャッシュドになる場合、即ち最後の１２７個目の「Ａｃｋ」メッセージを受けたときは、次のように動作する。
【０２７０】
まず、ステップＳ１５１で、ディレクトリメモリ３１の「０ｘ０００６００」（メッセージに付加されていたアドレス「０ｘ００４００３００１０」の第２８ビット〜第７ビットの２２ビット）番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ「ＵＰ」、「０ｘ００１」、「１０」（カウンタ形式）、「０」に更新されており、その値が読み出される。受けたメッセージの種類が「Ａｃｋ」であり、読み出した状態が「ＵＰ」、保持形式がカウンタ形式で保持ノード情報が「０ｘ００１」でありアンキャッシュドであることから、図１３のテーブルに従い、処理タイプは「ＣＡ」、ブロックの次状態は「Ｍ」、保持ノード操作は「ｓｅｔ」、書き戻し更新回数はそのまま、出力するメッセージの種類は「ＣｍｐＳｈ」に決定する。以上の処理を終えると、ステップＳ１５２に進む。
【０２７１】
ステップＳ１５２では、これらの情報を元に、ディレクトリメモリ３１の「０ｘ０００６００」番地のデータを、状態は「Ｍ」、保持ノード情報は「０ｘ００２」、保持形式は「０１」（ポインタ形式）、書き戻し回数は「０」に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから主メモリ３０への書き込みは行なわない。以上の処理を終えると、ステップＳ１５３に進む。
【０２７２】
ステップＳ１５３では、処理タイプが「ＣＡ」であることからステップＳ１４４に進む。
【０２７３】
ステップＳ１５４では、「ＣｍｐＳｈ」メッセージを生成する。この「ＣｍｐＳｈ」メッセージは、宛先ノード番号を「０ｘ００２」、メッセージの種類を「ＣｍｐＳｈ」、アドレスを「０ｘ００４００３００１０」」、ｍｉｄを「１」、要求元ノード番号を「０ｘ００２」とするものである（ステップＳ１４４）。このメッセージの出力先は、宛先ノード番号「０ｘ００２」と当該ノードＰＥ１のノード番号「０ｘ００１」が一致しないことから、メッセージ送信部３５となる。
【０２７４】
以上でノードＰＥ１のホームアクセス制御部２７は「Ａｃｋ」メッセージの処理を終了する。
【０２７５】
（５）ＣｍｐＳｈメッセージの処理
上記「ＣｍｐＳｈ」メッセージは、ノードＰＥ１のメッセージ送信部３５、相互結合網１０、ノードＰＥ２のメッセージ受信部３６を介して、ノードＰＥ２のローカルアクセス制御部２５に出力される。
【０２７６】
上記「ＣｍｐＳｈ」メッセージ（宛先ノード番号は「０ｘ００２」、メッセージの種類は「ＣｍｐＳｈ」、アドレスは「０ｘ００４００３００１０」、ｍｉｄは「１」、要求元ノード番号は「０ｘ００２」）を受けたノードＰＥ２のローカルアクセス制御部２５は、図１０のフローチャートに従い次のように動作する。まず、ステップＳ１３１で、リクエスト管理テーブル２４の「１」（＝ｍｉｄ）番エントリの情報を読み出し、アクセスの種類はストア、アドレスは「０ｘ００４００３００１０」、およびストアデータを得る。以上の処理を終えると、ステップＳ１３２に進む。
【０２７７】
ステップＳ１３２では、ブロックデータ付きのメッセージではないのでステップＳ１３３に進む。
【０２７８】
ステップＳ１３３では、「Ｎｃｍｐ」メッセージでもないのでステップＳ１３７に進む。
【０２７９】
ステップＳ１３７では、キャッシュメモリ２１の「０ｘ０６００２」番地のデータ６４ビットを、リクエスト管理テーブル２４から得たストアデータに更新する処理を行う。また、リクエスト管理テーブル２４の「１」（＝ｍｉｄ）番エントリに有効ビットを「０」としたデータを書き込み、エントリを削除する。また、タグメモリ２２の「０ｘ０６００」番地のデータを、図１１（ｂ）のテーブルに従い、状態は「Ｄ」、タグアドレスは「０ｘ００４００」（リクエスト管理テーブルから得たアドレス０ｘ００４００３００１０の第３９ビット〜第２０ビットの２０ビット）に更新する。また、プロセッサへｍｉｄを出力し、ｉｄ＝「１」のメモリアクセスが完了した旨を通知する。以上の処理を終えると、ステップＳ１３８に進む。
【０２８０】
ステップＳ１３８では、受けたメッセージが「ＣｍｐＳｈ」であるので（ステップＳ１３８）、ローカルアクセス制御部２５は、図１１（ａ）のフローチャートのステップＳ１６１に進み、書き戻し処理を開始する。
【０２８１】
ステップＳ１４１では、書き戻し選択手段２６から書き戻しが要求されているかどうかを調べる（ステップＳ１６１）。初期状態では、書き戻し選択手段２６のアドレス保持手段１１１（２エントリのＦＩＦＯ）にはなにも登録されていない状態であり、書き戻し要求手段１１２は要求を出していない。そのため、ステップＳ１４６に進む。
【０２８２】
ステップＳ１４６では、ローカルアクセス制御部２５は、書き戻しブロック選択手段２６のアドレス登録手段１１０にアドレス「０ｘ００４００３００１０」の登録を依頼する。依頼を受けたアドレス登録手段１１０は、アドレス保持手段１１１に前記アドレスの上位３３ビットを登録する。これで、アドレス保持手段１１１には「０ｘ０００８００６００」が一つ登録された状態となる。
【０２８３】
以上でローカルアクセス制御部２５は、受けた「ＣｍｐＳｈ」メッセージの処理を終了する。
【０２８４】
この段階で「０ｘ００４００３００００」〜「０ｘ００４００３００７ｆ」番地までについて、最新のデータはノードＰＥ２のキャッシュメモリ２１にのみ存在する状態になる。
【０２８５】
４．  フェーズ４
ノードＰＥ１のプロセッサ２０がアドレス「０ｘ００４００４００００」に対してロードアクセスを行うと、フェーズ１で示した動作と同様の処理が行われる。次いで、ノードＰＥ２のプロセッサ２０がアドレス「０ｘ００４００４００００」に対してロードアクセスを行うと、フェーズ２で示した動作と同様の処理が行われる。次いで、ノードＰＥ２のプロセッサ２０がアドレス「０ｘ００４００４００１０」に対してストアアクセスを行うと、フェーズ３で示した動作と同様の処理が行われる。これにより、ノードＰＥ２の書き戻しブロッ  ク選択手段２６のアドレス保持手段１１１にはアドレス「０ｘ０００８００６  ００」  (アドレス「０ｘ００４００３００１０」の上位３３ビット)と「０ｘ０００８００８００」（アドレス「０ｘ００４００４００００」の上位３３ビット）の２個が登録されることになる。
【０２８６】
上記と同様の処理がまた別のアドレス（例えば「０ｘ００４００５００００」）で行われ、ノードＰＥ２が行ったストアアクセスから「ＣｍｐＳｈ」メッセージが発生しノードＰＥ２のローカルアクセス制御部２５が、図９および図１０のフローチャートに従い処理したとする。この時、書き戻し選択手段２６のアドレス保持手段１１１には２個のアドレスが登録されており、フルの状態にある。そのため、書き戻し要求手段１１２はローカルアクセス制御部２５に対してアドレス「０ｘ００４００３００００」（「０ｘ０００８００６００」３３ビットの下位に７ビット「０」を付加した４０ビット）の書き戻しを要求している。
【０２８７】
（１）ＣｍｐＳｈメッセージの処理
ローカルアクセス制御部２５は、「ＣｍｐＳｈ」メッセージを受け処理し、ステップＳ１４１に進む。
【０２８８】
ステップＳ１４１では、書き戻し選択手段２６の書き戻し要求手段１１２は書き戻しを要求しているためステップＳ１４２に進む。
【０２８９】
ステップＳ１４２では、書き戻し要求手段１１２が出力するアドレス「０ｘ００４００３００００」の第１９ビットから第７ビットまでの１３ビット（０ｘ０６００）をインデックスとしてタグメモリ２２をアクセスし、状態およびタグアドレスを得る（ステップＳ１６２）。フェーズ３で状態およびタグアドレスはそれぞれ「Ｄ」と「０ｘ００４００」に更新されておりその値が読み出される。以上の処理を終えると、ステップＳ１４３に進む。
【０２９０】
ステップＳ１４３では、状態が「Ｄ」であり、またタグアドレスと書き戻し要求手段１１２が出力するアドレス「０ｘ００４００３００００」の上位２０ビットが一致することから、書き戻しが必要と判断しステップＳ１４４に進む。
【０２９１】
ステップＳ１４４では、書き戻しを行うために、キャッシュメモリ２１から該当するブロックのデータを読み出す。読み出すブロックデータは「０ｘ０６０００」番地から「０ｘ０６００ｆ」番地までの６４ビット×１６エントリ＝１２８バイトである。読み出されたブロックデータは生成する「ＲｐＢａｃｋ」メッセージに付加する。生成する「ＲｐＢａｃｋ」メッセージは、宛先ノード番号を「０ｘ００１」（書き戻しブロック要求手段１１２が出力するアドレスの上位１０ビッ  ト）、メッセージの種類を「ＲｐＢａｃｋ」、アドレスを「０ｘ００４００３００００」、要求元ノード番号を「０ｘ００２」、ｍｉｄは任意の値、ブロックデータは先ほどキャッシュメモリ２１から読み出したブロックデータとするメッセージである。この「ＲｐＢａｃｋ」メッセージの出力先は、宛先ノード番号「０ｘ００１」と当該ノードＰＥ２のノード番号「０ｘ００２」が異なることからメッセージ送信部３５となる。また、タグメモリ２２の「０ｘ０６００」番地のデータを、状態は「Ｓ」、タグアドレスはステップＳ１４２で読み出したタグアドレスに更新する。以上の処理を終えると、ステップＳ１４５に進む。
【０２９２】
ステップＳ１４５では、書き戻しブロック選択手段２６のアドレス削除手段１１３に、現在書き戻し要求手段１１２が要求しているアドレスを削除するよう要求する。要求を受けた書き戻し要求手段１１２は、アドレス保持手段１１１からアドレス「０ｘ０００８００６００」を削除する。これにより、アドレス保持手段１１１にはアドレス「０ｘ０００８００８００」一つが登録されている状態となる。以上の処理を終えると、ステップＳ１４６に進む。
【０２９３】
ステップＳ１４６では、ローカルアクセス制御部２５は、書き戻しブロック選択手段２６のアドレス登録手段１１０に、現在処理しているメッセージ「ＣｍｐＳｈ」のアドレス「０ｘ００４００５００００」を登録するように要求する。要求を受けた、アドレス登録手段１１０は、アドレス保持手段１１１にアドレス「０ｘ００４００５００００」の上位３３ビット「０ｘ０００８００Ａ００」を登録する。これにより、アドレス保持手段１１１には、「０ｘ０００８００８００」と「０ｘ０００８００Ａ００」が登録されている状態となる（ステップＳ１６６）。
【０２９４】
以上で、ノードＰＥ２のローカルアクセス制御部２５は、「ＣｍｐＳｈ」メッセージの処理を終了する。
【０２９５】
（２）ＲｐＢａｃｋメッセージの処理
ノードＰＥ２のローカルアクセス制御部２５がメッセージ送信部３５に出力した前記「ＲｐＢａｃｋ」メッセージは、相互結合網１０を通って、ノードＰＥ１のメッセージ受信部３６に渡される。メッセージ受信部３６は、「ＲｐＢａｃｋ」メッセージを受けると、それをホームアクセス制御部２７に出力する。
【０２９６】
上記「ＲｐＢａｃｋ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「ＲｐＢａｃｋ」、アドレスは「０ｘ００４００３００００」、要求元ノード番号は「０ｘ００２」、およびブロックデータ）を受けたノードＰＥ１のホームアクセス制御部２７は、図１２のフローチャートに従い次のように動作する。
【０２９７】
まず、ステップＳ１５１で、ディレクトリメモリ３１の「０ｘ０００６００」（メッセージに付加されていたアドレス「０ｘ００４００３００００」の第２８ビット〜第７ビットの２２ビット）番地をアクセスし、状態等のデータを読み出す。フェー３において、状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ「Ｍ」、「０ｘ００２」、「０１」（ポインタ形式）、「０」に更新されており、その値が読み出される。受けたメッセージの種類は「ＲｐＢａｃｋ」であり、読み出した状態は「Ｍ」であることから、図１３のテーブルに従い処理タイプは「ＣＣ」、ブロックの次状態は「Ｃ」、保持ノード操作は「ｎｏｎｅ」、書き戻し回数は「＋１」に決定する。以上の処理が終了すると、ステップＳ１５２に進む。
【０２９８】
ステップＳ１５２では、これらの情報を元に、ディレクトリメモリ３１の「０ｘ０００６００」番地のデータを、状態は「Ｃ」、保持ノード情報は「０ｘ００２」、保持形式  は「０１」（ポインタ形式）、書き戻し回数は「１」に更新する。ここでは、データ付きのメッセージであるので主メモリの「０ｘ０００６０００」番地から「０ｘ０００６００ｆ」番地に、メッセージに付加されていたブロックデータを書き込む。これにより、ノードＰＥ１の主メモリ３０にも最新のデータが存在する状態となる。以上の処理が終了すると、ステップＳ１５３に進む。
【０２９９】
ステップＳ１５３において、処理タイプが「ＣＣ」である。
【０３００】
以上で、ノードＰＥ１のホームアクセス制御部２７は、「ＲｐＢａｃｋ」メッセージの処理を終了する。
【０３０１】
この段階で「０ｘ００４００３００００」〜「０ｘ００４００３００７ｆ」番地までについて、最新のデータはノードＰＥ２のキャッシュメモリ２１に加え、ノードＰＥ１の主メモリ３０にも存在する状態となる。
【０３０２】
以降の動作は、ノードＰＥ１が再び「０ｘ００４００３００００」番地にロードアクセスする場合と、しない場合に分けて説明する。まず、ロードアクセスを行う場合の動作を説明する。
【０３０３】
５．  フェーズ５Ａ
（１）ロードアクセスの処理
ノードＰＥ１のプロセッサ２０がアドレス「０ｘ００４００３００００」にｉｄ＝「０」でロードアクセスを行ったとする。
【０３０４】
プロセッサ２０が行ったメモリアクセスを受けたローカルアクセス制御部２５は、図８（ａ）のフローチャートに従い次のように動作する。
【０３０５】
まず、ステップＳ１１１で、タグメモリ２２の「０ｘ０６００」番地（プロセッサ２０から得たアドレス「０ｘ００４００３００００」の第１９ビット〜第７ビットの１３ビット）のデータを読み出す。状態およびタグアドレスはフェーズ３で「Ｉ」および「０ｘ００４００」に更新されておりその値が読み出される。この値から、図８（ｂ）のテーブルに従い処理タイプは「ＡＡ」、発行するメッセージは「ＢｌｋＲｄＳｈ」、ブロックの次状態は「Ｉ」に決定する。以上の処理を終えると、ステップＳ１１２に進む。
【０３０６】
ステップＳ１１２では、処理タイプが「ＡＡ」であることからステップＳ１１３に進む。
【０３０７】
ステップＳ１１３では、メッセージの生成出力およびリクエスト管理テーブル２４への登録を行う。生成出力するメッセージの、宛先ノード番号は「０ｘ００１」（アドレス「０ｘ００４００３００００」の第３９ビット〜第３０ビットの１０ビット）、メッセージの種類は「ＢｌｋＲｄＳｈ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「０」（＝ｉｄ）、要求元ノード番号は「０ｘ００１」となる。また、宛先ノード番号と当該ノードＰＥ１のノード番号が両者とも「０ｘ００１」と一致するので、出力先は当該ノードＰＥ１のホームアクセス制御部２７となる。また、リクエスト管理テーブル２４の「０」（＝ｉｄ）番エントリに、有効ビットは「１」、アクセスの種類はロード、アドレスは「０ｘ００４００３００００」というデータを書き込む。以上の処理を終えると、ステップＳ１１８に進む。
【０３０８】
ステップＳ１１８では、タグメモリの「０ｘ０６００」番地のエントリのデータを、状態は「Ｉ」に、タグアドレスは０ｘ００４００（アドレス０ｘ００４００３００００の第３９ビット〜第２０ビットの２０ビット）に更新する。
【０３０９】
以上で、ノードＰＥ１のローカルアクセス制御部２５は、受けたロードアクセスの処理を終了する。
【０３１０】
（２）  ＢｌｋＲｄＳｈメッセージの送信
上記「ＢｌｋＲｄＳｈ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「ＢｌｋＲｄＳｈ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「０」、要求元ノード番号は「０ｘ００１」）を受けたノードＰＥ１のホームアクセス制御部２７は図１２（ａ）のフローチャートに従い次のように動作する。
【０３１１】
まず、ステップＳ１５１で、ディレクトリメモリ３１の「０ｘ０００６００」（メッセージに付加されていたアドレス「０ｘ００４００３００００」の第２８ビット〜第７ビットの２２ビット）番地をアクセスし、状態等のデータを読み出す。読み出した状態、保持ノード情報、保持形式、書き戻し回数はそれぞれフェーズ４で  「Ｃ」、「０ｘ００２」、「０１」（ポインタ形）、「１」に更新されておりその値が読み出される。受けたメッセージの種類が「ＢｌｋＲｄＳｈ」であり、読み出した状態が「Ｃ」、保持形式がポインタ形式で保持ノード情報が「０ｘ００２」でありアンキャッシュドでないことから、図１３のテーブルに従い、処理タイプは「ＣＢ」、ブロックの次状態は「Ｃ」、保持ノード操作は「ａｄｄ」、書き  戻し回数は「０」、出力するメッセージの種類は「ＣｍｐＤａｔＳｈ」に決定する。以上の処理を終えると、ステップＳ１５２に進む。
【０３１２】
ステップＳ１５２では、これらの情報を元に、ディレクトリメモリ３１の「０ｘ０００６００」番地のデータを、状態は「Ｃ」、保持ノード情報は「０ｘ００１」、保持形式  は「００」（コースベクタ）、書き戻し回数は「０」に更新する。以上の処理を終えると、ステップＳ１５３に進む。
【０３１３】
ステップＳ１５３では、処理タイプが「ＣＢ」であることからステップＳ１５５に進む。
【０３１４】
ステップＳ１５５では、主メモリ３０の「０ｘ０００６０００」番地〜「０ｘ０００６００ｆ」番地までの６４ビット×１６エントリ＝１２８バイトのブロックデータを読み出し、生成するメッセージに付加し出力する。このメッセージは、宛先ノード番号を「０ｘ００１」、メッセージの種類を「ＣｍｐＤａｔＳｈ」、アドレスを「０ｘ００４００３００００」、ｍｉｄを「０」、要求元ノード番号を「０ｘ００１」、ブロックデータを当該ステップＳ１５５で読み出したブロックデータとするメッセージである（ステップＳ１４５）。このメッセージの出力先は、宛先ノード番号と当該ノードＰＥ１のノード番号が一致することから、当該ノードのローカルアクセス制御部２５となる。
【０３１５】
以上で、ホームアクセス制御部２７は、「ＢｌｋＲｄＳｈ」メッセージの処理を終了する。
【０３１６】
（３）ＣｍｐｄａｔＳｈメッセージの処理
上記「ＣｍｐＤａｔＳｈ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「ＣｍｐＤａｔＳｈ」、アドレスは「０ｘ００４００３００００」、ｍｉｄは「０」、要求元ノード番号は「０ｘ００１」）を受けたノードＰＥ１のロー  カルアクセス制御部２５は、図１０のフローチャートに従い次のように動作する。
【０３１７】
まず、ステップＳ１３１で、リクエスト管理テーブル２４の「０」（＝ｍｉｄ）番エントリの情報を読み出し、アクセスの種類はロード、アドレスは「０ｘ００４００３００００」という情報を得る。以上の処理を終えると、ステップＳ１３２に進む。
【０３１８】
ステップＳ１３２では、ブロックデータ付きのメッセージであるからステップＳ１３５に進む。
【０３１９】
ステップＳ１５３では、キャッシュメモリ２１の「０ｘ０６０００」番地から「０ｘ０６００ｆ」番地に、メッセージに付加されていたブロックデータを書き込む。以上の処理を終えると、ステップＳ１３６に進む。
【０３２０】
ステップＳ１３６では、アクセスタイプがロードであることからステップＳ１３９では、キャッシュメモリ２１から「０ｘ０６０００」番地の６４ビットデータを読み出し、プロセッサ２０に対してｉｄ＝「０」のメモリアクセスに対する応答データとして渡す。これによりメモリアクセスは完了する。また、リクエスト管理テーブルの「０」番エントリに有効ビットを「０」としたデータを書き込み、エントリを削除する。また、タグメモリの「０ｘ０６００」番地の状態およびタグアドレスを、図１１のテーブルに従い、それぞれ「Ｓ」および「０ｘ００４００」に更新する。
【０３２１】
以上でノードＰＥ１のローカルアクセス制御部２５は、受けた「ＣｍｐＤａｔＳｈ」メッセージの処理を終了する。
【０３２２】
この段階で「０ｘ００４００３００００」〜「０ｘ００４００３００７ｆ」番地までについて、最新のデータはノードＰＥ１のキャッシュメモリ２１および主メモリ３０、ノードＰＥ２のキャッシュメモリ２１に存在する状態となる。
【０３２３】
ブロックをノードＰＥ２のキャッシュメモリ２１からノードＰＥ１の主メモリ３０に書き戻すことにより、既にデータを保持しているノードＰＥ２以外のノード（ここではノードＰＥ１）からのロードアクセスに対して、ノードＰＥ１の主メモリ３０から直接データを読み出し応答することが出来ている。書き戻しを行わなかった場合は、ノードＰＥ１を経由してノードＰＥ２に対してデータの書き戻しを要求し、書き戻しを受けた後データを応答することになる。
【０３２４】
これから明らかなように、本発明の第１の実施例のマルチプロセッサシステムは、ロードアクセスのレイテンシを短縮する効果がある。
【０３２５】
次に、ノードＰＥ２以外の他のノードがアドレス「０ｘ００４００３００００」を含むブロックに対してアクセスを行わず、ノードＰＥ２のみがアクセスを繰り返した場合の動作を説明する。
【０３２６】
６．  フェーズ５Ｂ
（１）ストアアクセスの処理
ノードＰＥ２のプロセッサ２０が、再びアドレス「０ｘ００４００３００２０」にｉｄ＝「１」でストアアクセスを行った場合の動作を説明する。
【０３２７】
プロセッサ２０が行ったメモリアクセスを受けたローカルアクセス制御部２５は、図８（ａ）のフローチャートに従い次のように動作する。
【０３２８】
まず、ステップＳ１１１で、タグメモリ２２の「０ｘ０６００」番地のデータを読み出す。フェーズ４において状態は「Ｓ」、タグアドレスは「０ｘ００４００」に更新されており、その値が読み出される。アクセスの種類はストアであり、タグアドレスは「０ｘ００４００」で一致、状態は「Ｓ」であるため、図８（ｂ）のテーブルに従い処理タイプは「ＡＡ」、出力するメッセージの種類は「Ｕｐｇｒａｄｅ」、ブロックの次状態は「Ｓ」に決定する。以上の処理を終えると、ステップＳ１１２に進む。
【０３２９】
ステップＳ１１２では、処理タイプが「ＡＡ」であることからステップＳ１１３に進む。
【０３３０】
ステップＳ１１３では、メッセージの生成出力およびリクエスト管理テーブル２４への登録を行う。生成出力するメッセージの、宛先ノード番号は「０ｘ００１」（アドレス「０ｘ００４００３００２０」の第３９ビット〜第３０ビットの１０ビット）、メッセージの種類は「Ｕｐｇｒａｄｅ」、アドレスは「０ｘ００４００３００２０」、ｍｉｄは「１」、要求元ノード番号は「０ｘ００２」となる。また、宛先ノード番号と当該ノードＰＥ２のノード番号が異なるので、出力先はメッセージ送信部３５となる。また、この時リクエスト管理テーブル２４の「１」（＝ｉｄ）番エントリに、有効ビットは「１」、アクセスの種類はストア、アドレスは「０ｘ００４００３００２０」、およびストアデータを書き込む。以上の処理を終えると、ステップＳ１１８に進む。
【０３３１】
ステップＳ１１８では、タグメモリの「０ｘ０６００」番地のエントリのデータを、状態は「Ｓ」に、タグアドレスは「０ｘ００４００」（アドレス「０ｘ００４００３００２０」の第３９ビット〜第２０ビットの２０ビット）に更新する。
【０３３２】
以上で、ノードＰＥ２のローカルアクセス制御部２５はストアアクセスの処理を終了する。
【０３３３】
（２）Ｕｐｇｒａｄｅメッセージの処理
上記「Ｕｐｇｒａｄｅ」メッセージは、ノードＰＥ２のメッセージ送信部３５、相互結合網１０、ノードＰＥ１のメッセージ受信部３６を介してノードＰＥ１のホームアクセス制御部２７に送られる。
【０３３４】
上記「Ｕｐｇｒａｄｅ」メッセージ（宛先ノード番号は「０ｘ００１」、メッセージの種類は「Ｕｐｇｒａｄｅ」、アドレスは「０ｘ００４００３００２０」、ｍｉｄは「１」、要求元ノード番号は「０ｘ００２」）を受けたノードＰＥ１のホームアクセス制御部２７は次のように動作する。
【０３３５】
まず、ステップＳ１５１で、ディレクトリメモリ３１の「０ｘ０００６００」（メッセージに付加されていたアドレス「０ｘ００４００３００２０」の第２８ビット〜第７ビットの２２ビット）番地をアクセスし、状態等のデータを読み出す。フェーズ４において、状態、保持ノード情報、保持形式、書き戻し回数はそれぞれ  「Ｃ」、「０ｘ００２」、「０１」（ポインタ形式）、「１」に更新されてお  り、その値が読み出される。受けたメッセージの種類が「Ｕｐｇｒａｄｅ」で  あり、読み出した状態が「Ｃ」であり、保持形式はポインタ形式で保持ノード  情報が「０ｘ００２」でアンキャッシュドであり、書き戻し回数と閾値「１」  が一致することから、図１２（ｂ）のテーブルに従い処理タイプは「ＣＡ」、ブロックの次状態は「Ｍ」、保持ノード操作は「ｎｏｎｅ」、書き戻し更新回数はそのまま、出力するメッセージの種類は「ＣｍｐＥｘ」に決定する。以上の処理を終えると、ステップＳ１５２に進む。
【０３３６】
ステップＳ１５２では、これらの情報を元に、ディレクトリメモリ３１の「０ｘ０００６００」番地のデータを、状態は「Ｍ」、保持ノード情報は「０ｘ００２」、保持形式  は「０１」（ポインタ形式）、書き戻し回数は「１」に更新する。また、処理しているメッセージがブロックデータ付きのメッセージでないことから主メモリ３０への書き込みは行わない。以上の処理を終えると、ステップＳ１５３に進む。
【０３３７】
ステップＳ１５３では、処理タイプが「ＣＡ」であることからステップＳ１５４に進む。
【０３３８】
ステップＳ１５４では、「ＣｍｐＥｘ」メッセージを生成する。この「ＣｍｐＥｘ」メッセージは、宛先ノード番号を「０ｘ００２」、メッセージの種類を「ＣｍｐＥｘ」、アドレスを「０ｘ００４００３００２０」、ｍｉｄを「１」、要求元ノード番号を「０ｘ００２」とするものである（ステップＳ１４４）。このメッセージの出力先は、宛先ノード番号「０ｘ００２」と当該ノードＰＥ１のノード番号「０ｘ００１」が一致しないことから、メッセージ送信部３５となる。以上で、ノードＰＥ１のホームアクセス制御部２７は、「Ｕｐｇｒａｄｅ」メッセージの処理を終了する。
【０３３９】
（３）ＣｍｐＥｘメッセージの処理
上記「ＣｍｐＥｘ」メッセージは、ノードＰＥ１のメッセージ送信部３５、相互結合網１０、ノードＰＥ２のメッセージ受信部３６を介して、ノードＰＥ２のローカルアクセス制御部２５に出力される。
【０３４０】
上記「ＣｍｐＥｘ」メッセージ（宛先ノード番号は「０ｘ００２」、メッセージの種類は「ＣｍｐＥｘ」、アドレスは「０ｘ００４００３００２０」、ｍｉｄは「１」、要求元ノード番号は「０ｘ００２」）を受けたノードＰＥ２のローカルアクセス制御部２５は、図１０のフローチャートに従い次のように動作する。まず、ステップＳ１３１で、リクエスト管理テーブル２４の１（＝ｍｉｄ）番エントリの情報を読み出し、アクセスの種類はストア、アドレスは「０ｘ００４００３００２０」、およびストアデータを得る。以上の処理を終えると、ステップＳ１３２に進む。
【０３４１】
ステップＳ１３２では、ブロックデータ付きのメッセージではないのでステップＳ１３３に進む。
【０３４２】
ステップＳ１３３では、ＮＣｍｐメッセージでもないのでステップＳ１３７に進む。
【０３４３】
ステップＳ１３７では、キャッシュメモリ２１の「０ｘ０６００４」（アドレス「０ｘ００４００３００２０」の第１９ビットから第３ビットまでの１７ビット）番地のデータ６４ビットを、リクエスト管理テーブル２４から得たストアデータに更新する処理を行う。また、リクエスト管理テーブルの「１」（＝ｍｉｄ）番エントリに有効ビットを「０」としたデータを書き込み、エントリを削除する。また、タグメモリ２２の「０ｘ０６００」番地のデータを、図１１（ｂ）のテーブルに従い状態は「Ｄ」、タグアドレスは「０ｘ００４００」（リクエスト管理テーブル２４から得たアドレス「０ｘ００４００３００２０」の第３９ビット〜第２０ビットの２０ビット）に更新  する。また、プロセッサへｍｉｄを出力し、ｉｄ＝「１」のメモリアクセスが完了した旨を通知する。以上の処理を終えると、ステップＳ１３８に進む。
【０３４４】
ステップＳ１３８において受けたメッセージは「ＣｍｐＳｈ」でも「ＣｍｐＤａｔＳｈ」でもない。
【０３４５】
以上でノードＰＥ２のローカルアクセス制御部２５は受けた「ＣｍｐＥｘ」メッセージの処理を終了する。
【０３４６】
この段階で「０ｘ００４００３００００」〜「０ｘ００４００３００７ｆ」番地までについて、最新のデータはノードＰＥ２のキャッシュメモリ２１にのみ存在する状態になる。
【０３４７】
このように閾値を「１」に設定した場合、同じノードＰＥｉ（ここではノードＰＥ２）からの書き戻しを１回受けてから次にノードＰＥ２で書き込みが発生するまでの間に他のノードからのアクセスがない場合は、ノードＰＥ１の主メモリ３０にデータを書きもどすのをやめ書き戻しブロックの対象から外している。
【０３４８】
また、閾値の設定により、何回書き戻しを受けたら書き戻しブロックの対象から外すかどうかを変更することができる。
【０３４９】
以上のように、本実施例によれば、主メモリ３０への不要な書き戻しが発生するのを防ぐことができる。
【０３５０】
本発明は、上記の第１の実施の形態で説明したものに限定されるものではなく、種々の変形が可能である。
【０３５１】
次に、本発明の第２の実施例について説明する。
【０３５２】
図１４は、本発明の第２の実施例に係わる疎結合型マルチプロセッサシステム１’の構成を示すブロック図である。
【０３５３】
本実施例は、ディレクトリメモリ３１を持たない  マルチプロセッサシステムを構成することも可能にしたものである。この場合は、ディレクトリメモリ３１に格納されていた情報は、主メモリ３０のある領域（ディレクトリ領域）に格納すればよい。ホームアクセス制御部２７がディレクトリメモリ３１に対して行っていたアクセスは、主メモリ３０のディレクトリ領域をアクセスすることで実現される。
【０３５４】
これ以外の構成は図１に示した第１の実施例と同様であるため、図１と同じ符号を付して示す。
【０３５５】
第１、第２の実施例におけるメッセージは、ノードＰＥｉ間での処  理要求および応答を的確に伝えられるものであれば、その種類および構成を様々に変形することが可能である。また、特に同一ノード間での要求（アクセス要求など）については、メッセージの形態をとらずに、ノード内に設けられた信号線を介して所定の信号を送ることで、その要求を伝える構成としてもよい。
【０３５６】
なお、上記の第１、第２の実施例において、一貫性維持制御部１６に含まれるロー  カルアクセス制御部２５、ホームアクセス制御部２７の各機能は、それぞれ次  のいずれかによって実現してもよい。
【０３５７】
（ａ）プロセッサ２０による主メモリ３０に格納された処理プログラム（あるいいは、命令キャッシュに記憶されたプログラム）の実行。
【０３５８】
（ｂ）プロセッサ２０および主メモリ３０（あるいは命令キャッシュ）とは別個  に設けられた、専用のサブプロセッサによる専用のメモリに格納された処理プ  ログラムの実行。
【０３５９】
（ｃ）それぞれのモジュールの機能を実現するためのロジックに従って構成された専用のハードウェア。
【０３６０】
上記の第１、第２の実施例で示したマルチプロセッサシステムは、１つの相互結合網１０を介して互いに接続された１０２４個のノードＰＥ０〜ＰＥ１０２３によって構成されていた。しかしながら、本実施例においては、ノード数は任意である。また、相互結合網が複数ある、冗長性のある構成となっていてもよい。この場合は、複数の相互結合網は、システムの障害対策のために用いることができる。
【０３６１】
以上のように、本実施例によれば、装置構成を簡略化するだけでなく、それと同時に主メモリ３０への不要な書き戻しが発生するのを防ぐことができる。
【０３６２】
以上本発明の実施の形態を述べたが、本発明は上記の実施の形態に限定されることなく、数々の変形が可能であることはいうまでもない。
【０３６３】
【発明の効果】
以上説明したように、本発明によれば、以下のような顕著な効果を奏する。
【０３６４】
（１）共有しているブロックに対してプロセッサが書き込みを行うと、当該ノードのキャッシュメモリを専有する状態になる。このようなブロックは、当該ノードの書き戻しブロック選択手段およびローカルアクセス制御部が働き、主メモリに書き戻される。この機能により、他のノードのプロセッサが当該ブロックにロードアクセスしたときに、専有していたノードのキャッシュメモリからでなく、主メモリからブロックを読み出すことができるため、ロードアクセスのレイテンシを短縮できる。
【０３６５】
（２）共有しているかいないかを示す情報をディレクトリメモリに持たせる。その情報をもとに、書き込み要求を受けたホームアクセス制御部が要求を出したノードに送信する応答メッセージに、共有していたかいなかったかの情報を持たせる。その応答メッセージを受けたローカルアクセス制御部は、共有していたかいなかったかにより、書き戻しブロック選択手段が選択する書き戻しを行うブロックの対象とするかしないかを決める。以上の機能により、共有していないブロックに関しては書き戻しを行わないようにできる。
【０３６６】
（３）ディレクトリメモリに、書き戻しを受けた回数、共有していることを示す状態であっても実際にブロックを保持するノードが一つの場合はそのノードを特定することができる情報を持たせる。また、ホームアクセス制御部に書き戻しを何回まで許容するかを決める閾値を持たせる。これらの情報をもとに、書き込みの要求を受けたホームアクセス制御部が、当該ブロックの状態が共有していることを示していても、要求を出したノードのみがブロックを保持している状態でかつ閾値と書き戻しを受けた回数が一致する場合は、応答メッセージに共有していない旨の情報を持たせ、書き戻しブロック選択手段の対象から外す。以上の機能により、共有していたブロックが時間の経過とともに共有されなくなったことを検出し、無駄な書き戻しが行われるのを防ぎ、書き戻しによりメッセージが増加するのを防ぐことができる。
【図面の簡単な説明】
【図１】本発明の第１の実施例に係わる疎結合型のマルチプロセッサシステムの構成を示すブロック図である。
【図２】図１に示したノードの内部構成を示すブロック図である。
【図３】（ａ）は、メモリアクセスが行われたノードから主メモリにデータを保持するノードへ送信される要求メッセージを示す図であり、（ｂ）は、主メモリにデータを保持するノードから当該データのコピーをキャッシュメモリに保持するノードへ送信される要求メッセージを示す図であり、（ｃ）は、データのコピーをキャッシュッメモリに保持するノードから主メモリにデータを保持するノードへ送信される報告メッセージを示す図であり、（ｄ）は、主メモリにデータを保持するノードからメモリアクセスが行われたノードへ送信されるメモリアクセス完了メッセージを示す図である。
【図４】書き戻しブロック制御手段の内部構成を示す図である。。
【図５】（ａ）は、ブロックデータ付メッセージの構成を示すであり、（ｂ）は、基本メッセージの構成を示す図である。
【図６】ディレクトリメモリとタグメモリおよびこのメモリブロックの状態を示す図である。
【図７】本実施例のノードとその構成要素である主メモリおよびキャッシュメモリの状態遷移を示す図である。
【図８】（ａ）は、プロセッサが出力するメモリアクセスを受けて、ローカルアクセス制御部が実行する処理を示すフローチャートであり、（ｂ）は、（ａ）の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである
【図９】（ａ）は、ホームアクセス制御部あるいはメッセージ受信部が出力するメッセージのうち、ＩｎｔｖＳｈ，ＩｎｔｖＥｘ，Ｕｐｇｒａｄｅの３種類のメッセージを受けた場合に、ローカルアクセス制御部が実行する処理を示すフローチャートであり、（ｂ）は、（ａ）の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。
【図１０】ホームアクセス制御部あるいはメッセージ受信部が出力するメッセージのうち、ＣｍｐＤａｔＳｈ，ＣｍｐＤａｔＥｘ，ＣｍｐＳｈ，ＣｍｐＥｘ，ＮＣｍｐの５種類のメッセー  ジを受けた場合に、ローカルアクセス制御部が実行する処理を示すフローチャートである。
【図１１】（ａ）は、ホームアクセス制御部あるいはメッセージ受信部が出力するメッセージのうち、ＣｍｐＤａｔＳｈ，ＣｍｐＤａｔＥｘ，ＣｍｐＳｈ，ＣｍｐＥｘ，ＮＣｍｐの５種類のメッセー  ジを受けた場合に、ローカルアクセス制御部が実行する処理を示すフロー  チャートであり、（ｂ）は、図１０および図１１（ａ）の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。
【図１２】（ａ）は、ホームアクセス制御部が実行する処理を示すフローチャートであり、（ｂ）は、（ａ）の処理における処理タイプ、メッセージの種類、ブロックの次状態等の関係を示すテーブルである。
【図１３】図１２（ａ）のフローチャートの処理で用いられる、受けたメッセージの種類、ディレクトリメモリ読み出したブロックの状態、保持形式および保持ノード情報から求めるアンキャッシュド情報、書き戻し回数と閾値が一致するかどうかの４つの情報と、ディレクトリメモリに格納するブロックの状態、保持ノード情報に対する操作、書き戻し回数に対する操作、処理タイプ、メッセージの種類を示すテーブルである。
【図１４】本発明の第２の実施例に係わる疎結合型マルチプロセッサシステムの構成を示すブロック図である。
【図１５】従来のマルチプロセッサシステムの構成を示すブロック図である。
【図１６】（ａ）は、複数のノードの主メモリにデータのコピーが存在する状態を示す図であり、（ｂ）は、１つのノードの主メモリにのみデータのコピーが存在する状態を示す図である。
【図１７】（ａ）は、複数のノードのキャッシュメモリに一貫性が維持された有効なデータが存在しない状態を示す図であり、（ｂ）は、データの有効なコピーが存在し、かつ他のノードのキャッシュメモリにも有効なデータが存在する可能性のある状態を示す図であり、（ｃ）は、データの有効なコピーが１つのノードにだけ存在し、他のノードのキャッシュメモリには有効なコピーが存在せず、かつ主メモリのデータとキャッシュメモリのデータが異なる状態を示す図である。
【符号の説明】
ＰＥ０〜ＰＥｎ−１，ＰＥ０’〜ＰＥｎ−１’  ノード
１０  相互結合網
１６  一貫性維持制御部
２０  プロセッサ
２１，４２  キャッシュメモリ
２２  タグメモリ
２４  リクエスト管理テーブル
２５  ローカルアクセス制御部
２６  書き戻しブロック選択手段
２７  ホームアクセス制御部
３０，４１  主メモリ
３１  ディレクトリメモリ
３５  メッセージ送信部
３６  メッセージ受信部
４０  ノードＰＥｉ
５５  一貫性制御部
１１０  アドレス登録手段
１１１  アドレス保持手段
１１２  書き戻し要求手段
１１３  アドレス削除手段１
【図１】
0003769411.tif 000002
【図２】
0003769411.tif 000003
【図３】
0003769411.tif 000004
【図４】
0003769411.tif 000005
【図５】
0003769411.tif 000006
【図６】
0003769411.tif 000007
【図７】
0003769411.tif 000008
【図８】
0003769411.tif 000009
【図９】
0003769411.tif 000010
【図１０】
0003769411.tif 000011
【図１１】
0003769411.tif 000012
【図１２】
0003769411.tif 000013
【図１３】
0003769411.tif 000014
【図１４】
0003769411.tif 000015
【図１５】
0003769411.tif 000016
【図１６】
0003769411.tif 000017
【図１７】
0003769411.tif 000018