(57)【特許請求の範囲】
【請求項１】
複数のノードを接続した情報処理システムにおいて、
前記ノードの各々は、
少なくとも１つの演算処理ユニットと、
前記演算処理ユニットが使用するデータを格納するキャッシュメモリと、
前記演算処理ユニットからのデータ要求に応じて、前記キャッシュメモリの格納データが他のノードのキャッシュメモリに保持されているか否かの状態情報と前記他のノードを識別する情報とを格納するディレクトリを参照して、他のノードにスヌープを通信するノードコントローラとを有し、
前記ノードコントローラは、
前記キャッシュメモリの格納データが他のノードのキャッシュメモリに保持されているか否かの状態情報と前記他のノードを識別する情報とを格納する第１のディレクトリと、
前記キャッシュメモリの格納データが他のノードのキャッシュメモリに保持されている共有状態であるデータの共有ノードを識別する情報を格納する第２のディレクトリとを有し、
前記ノードコントローラは、前記演算処理ユニットからのデータ要求に応じて、前記第１のディレクトリを参照し、前記スヌープを通信すべき前記他のノードを識別できないことを判定し、前記第２のディレクトリを参照して、前記スヌープを通信すべき前記他のノードを識別し、前記識別した他のノードにスヌープを通信する
ことを特徴とする情報処理システム。
【請求項２】
請求項１の情報処理システムにおいて、
前記ノードコントローラは、前記演算処理ユニットからのデータ要求に応じて、前記第１のディレクトリに前記演算処理ユニットのノードの識別子を格納できるか否かを判定し、前記演算処理ユニットのノードの識別子を格納できると判定した場合には、前記第１のディレクトリに前記演算処理ユニットのノードの識別子を格納し、前記演算処理ユニットのノードの識別子を格納できないと判定した場合には、前記第２のディレクトリに前記演算処理ユニットのノードの識別子を格納する
ことを特徴とする情報処理システム。
【請求項３】
請求項１の情報処理システムにおいて、
前記ノードコントローラは、前記演算処理ユニットからのデータ要求に応じて、前記第１のディレクトリに前記演算処理ユニットのノードの識別子を格納できないと判定した場合には、前記第２のディレクトリに空き領域があるか否かを判定し、前記第２のディレクトリに空き領域があると判定した場合には、前記第２のディレクトリに前記演算処理ユニットのノードの識別子を格納し、前記第２のディレクトリに空きがないと判定した場合には、前記第１のディレクトリのエントリフォーマットを変更して、前記演算処理ユニットのノードの識別子をビットマップ形式で格納する
ことを特徴とする情報処理システム。
【請求項４】
請求項１の情報処理システムにおいて、
前記ノードコントローラは、前記演算処理ユニットからの排他状態でのデータ要求に応じて、前記第２のディレクトリを参照し、前記第２のディレクトリに登録されたスヌープ通信すべき他のノードを特定し、前記特定した他のノードにスヌープを通信する
ことを特徴とする情報処理システム。
【請求項５】
複数のノードを接続した情報処理システムにおいて、
前記ノードの各々は、
少なくとも１つの演算処理ユニットと、
前記演算処理ユニットが使用するデータを格納するキャッシュメモリと、
前記演算処理ユニットからのデータ要求に応じて、前記キャッシュメモリの格納データが他のノードのキャッシュメモリに保持されているか否かの状態情報と前記他のノードを識別する情報とを格納するディレクトリを参照して、他のノードにスヌープを通信するノードコントローラとを有し、
前記ノードコントローラは、
前記キャッシュメモリの格納データが他のノードのキャッシュメモリに保持されているか否かの状態情報と前記他のノードを識別する情報とを格納する第１のディレクトリと、
前記キャッシュメモリの格納データが他のノードのキャッシュメモリに保持されている共有状態であるデータの共有ノードを識別する情報を格納する第２のディレクトリとを有し、
前記ノードコントローラは、前記演算処理ユニットからのデータ要求に応じて、前記第１のディレクトリに前記演算処理ユニットのノードの識別子を格納できるか否かを判定し、前記演算処理ユニットのノードの識別子を格納できると判定した場合には、前記第１のディレクトリに前記演算処理ユニットのノードの識別子を格納し、前記演算処理ユニットのノードの識別子を格納できないと判定した場合には、前記第２のディレクトリに前記演算処理ユニットのノードの識別子を格納する
ことを特徴とする情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムに関する。
【背景技術】
【０００２】
複数のノードを相互に接続した情報処理システムは、並列計算処理の高速化に有効である。並列計算機が分散型共有メモリを持つことにより、高速な並列計算を実行できる。情報処理システムの各ノードは、演算処理ユニット（以下、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）という）と，キャッシュメモリ（Ｃａｃｈｅ  Ｍｅｍｏｒｙ）等を有する。情報処理システムは、各ノードのキャッシュメモリを分散型共有メモリとして使用する。【０００３】
キャッシュメモリを使用した分散型共有メモリでは、複数のノードが各キャッシュメモリを共有するため、キャッシュメモリの一貫性制御が必要となる。一貫性制御は、キャッシュコヒーレンス（Ｃａｃｈｅ  Ｃｏｈｅｒｅｎｃｅ）を保つ制御である。スヌープキャッシュ（Ｓｎｏｏｐ  Ｃａｃｈｅ）は、キャッシュコヒーレンスを保つ機構に有効である。【０００４】
スヌープキャッシュは、一のノードのＣＰＵが自分のキャッシュメモリに保持されたデータの書き込みがある場合に、他のノードが共有バスを介しその書き込みを受け、他ノードのキャッシュメモリのデータを更新する。ディレクトリ（Ｄｉｒｅｃｔｏｒｙ）方式は、キャッシュコヒーレンスを保持するハードウェア機構として、利用される。ディレクトリ方式は、同じデータがどのＣＰＵにキャッシュされているかを示す情報をキャッシュ内に保持しておき、キャッシュラインの無効化、更新を行う。【０００５】
ディレクトリによりキャッシュ管理するシステムでは、メモリの１のアドレスに対して、リードなどのリクエストが発行された場合に、ディレクトリに、状態（Ｓｔａｔｕｓ）、ノード（ボード）識別子（ＩＤ：Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）、ノード（ボード）内のＣＰＵ識別子（ＩＤ）などのスヌープの宛先を特定できる詳細情報を登録する。【０００６】
図１１及び図１２は、従来のディイレクトリの構成図である。図１１は、ディレクトリ１００のフォーマットタイプ１０１がＡ−ｔｙｐｅ（ビット「１」）のエントリフォーマットを示す。図１１に示すように、ディレクトリ１００のエントリフォーマットは、エントリのフォーマットタイプ欄１０１と、リザーブビット欄１０２と、ステータス（Ｓｔａｔｕｓ）欄１０３と、ＣＰＵ−ＩＤ（１）欄１０４と、ＣＰＵ−ＩＤ（２）欄１０５とを有する。【０００７】
ステータス欄１０３は、排他状態（Ｅｘｃｌｕｓｉｖｅ）、無効状態（Ｉｎｖａｌｉｄ）、１つ又は２つのＣＰＵと共有状態（Ｓｈａｒｅｄ）というデータの保持状態を示す。排他状態は、リクエスタＣＰＵが排他制御中（例えば、読み出し後更新前の状態）であることを示す。無効状態は、いずれのＣＰＵもデータを保持していないことを示す。共有状態は、複数のＣＰＵがデータを共有していることを示す。ＣＰＵ−ＩＤ欄１０４，１０５は、リクエストのあった（リクエスタという）ＣＰＵ−ＩＤ（識別子：Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）を格納する。【０００８】
図１２は、フォーマットタイプ１０６がＢ−ｔｙｐｅ（ビット「１」）のエントリフォーマットを示す。ステータス欄１０７は、排他状態（Ｅｘｃｌｕｓｉｖｅ）、無効状態（Ｉｎｖａｌｉｄ）、複数のＣＰＵと共有状態（Ｓｈａｒｅｄ）を示す。ボード（ノード）ＩＤのビットマップ欄１０８は、リクエストのあった（リクエスタという）ＣＰＵのボード(ノード)をビットマップ形式で格納する。【０００９】
例えば、ＣＰＵがデータの更新等のため、ＣＰＵが排他状態（以下、Ｅステートという)でのデータを要求した（リードリクエスト）場合には、リクエストしたアドレスでディレクトリ１００を検索し、データの保持状態（Ｓｔａｔｕｓ）を判定する。ディレクトリの検索により、リクエストしたアドレスのデータが、共有状態(以下、Ｓステートという)で保持されている場合には、当該データを保持しているＣＰＵへスヌープを送信し、該当データを無効状態(Ｉステートという)に更新する。又、要求したデータが排他状態で保持されている場合には、データを保持しているＣＰＵへスヌープを送信し、該当データを無効状態(I：Invalidステート)にする。【００１０】
更に、ＣＰＵが共有状態（Ｓステートという)でデータを要求した（リードリクエスト）場合には、リクエストしたアドレスでディレクトリ１００を検索し、データの保持状態を判定する。要求したデータが排他状態で保持されている場合、データを保持しているＣＰＵへ、データの状態(ステータス)を変更するためのスヌープを送信する。又、該当データが共有状態(Ｓステート)で保持されている場合に、データを保持しているＣＰＵへスヌープを送信し、ディレクトリにリクエスタのＣＰＵ−ＩＤを登録する。【００１１】
ここで、図１１のディレクトリフォーマット欄には、Ａ−Ｔｙｐｅ（Format  typeビットが「１」)が設定されている。フォーマットタイプＡ−Ｔｙｐｅは、ＣＰＵの識別子（ＩＤ）を格納するエントリフォーマットである。図１１の例では、ＣＰＵ−ＩＤを２個まで格納できる。一方、図１２のディレクトリフォーマット欄には、Ｂ−Ｔｙｐｅ(Format  typeビットが「０」)が設定されている。フォーマットタイプＢ−Ｔｙｐｅは、ＣＰＵ−ＩＤをビットマップで保持するタイプである。この例では、ノード又はＣＰＵを１２個まで識別できる。【００１２】
このように、登録すべきＣＰＵが２個を越えると、ディレクトリ１００のエントリのフォーマットをＡタイプ(図１１)からＢタイプ(図１２)に変更し、ノード（又はＣＰＵ）を１２個まで格納できるようにしていた。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】日本特許公開２００１−１０１１４８号公報
【特許文献２】日本特許公開２００５−０４４３４２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
近年、情報処理システムの大規模化に伴い、１つのノード（ボード）に複数のＣＰＵが存在し、且つ接続可能なシステムノード（ボード）数が増えている。このため、１つのノードのディレクトリが管理しなければならないノード（又はＣＰＵ）数も増える。【００１５】
ディレクトリが保持できる情報量は、物理的に限りがある。共有状態（Ｓステート）でデータを保持するノードまたはＣＰＵの数が増える場合には、ディレクトリ機構のエントリサイズが制限されるため、スヌープ宛先のＣＰＵを特定できるような詳細な情報を格納することができない。【００１６】
例えば、共有状態（Ｓステート）でデータ保持しているＣＰＵが３個以上発生した場合には、図１１のＡ−Ｔｙｐｅのエントリフォーマットでは、３個以上のＣＰＵの情報を格納できないので、図１２のＢ−ＴｙｐｅのエントリフォーマットでＣＰＵの情報を保持する。しかしながら、Ｂ−Ｔｙｐｅのエントリフォーマットであっても、保持できるＣＰＵの数は１２個までである。このため、Ｂ−Ｔｙｐｅのエントリフォーマットを使用しても、情報処理システム内にＣＰＵが１３個以上ある場合には、登録するＣＰＵを保持できなくなってしまう。【００１７】
又、Ｂ−Ｔｙｐｅのエントリフォーマットにおいて、保持する情報をＣＰＵの上位のハードウェアに変更することにより、対象とするＣＰＵ数を増加できる。即ち、ＣＰＵをある単位毎のＩＤ(例えば、システムボード単位となるボードＩＤ)のみで保持する。例えば、システムボード単位で情報を保持する場合には、システムボード内のＣＰＵを識別できない。【００１８】
このため、システムボード内では、全ＣＰＵに対してスヌープを送信する必要があり、十分にスヌープの宛先を絞ることができない。このように、Ｓステートでデータ保持しているノードやＣＰＵが増えると、リクエスト発行時などに、ＣＰＵの特定ができず、システムボード上の全ＣＰＵへスヌープを発行することになる。その結果、通信量が増大し、性能低下を引き起こす。【００１９】
本発明の目的は、ＣＰＵの数が増大しても、ディレクトリの容量の増加を最小限として、スヌープの送信回数を減少し、ＣＰＵ間の通信量を減少する情報処理システムを提供することにある。
【課題を解決するための手段】
【００２０】
この目的の達成のため、開示の情報処理システムは、複数のノードを有し、前記ノードの各々は、少なくとも１つの演算処理ユニットと、前記演算処理ユニットが使用するデータを格納するキャッシュメモリと、前記演算処理ユニットからのデータ要求に応じて、前記キャッシュメモリの格納データが他のノードのキャッシュメモリに保持されているか否かの状態情報と前記他のノードを識別する情報とを格納するディレクトリを参照して、他のノードにスヌープを通信するノードコントローラとを有し、前記ノードコントローラは、前記キャッシュメモリの格納データが他のノードのキャッシュメモリに保持されているか否かの状態情報と前記他のノードを識別する情報とを格納する第１のディレクトリと、前記キャッシュメモリの格納データが他のノードのキャッシュメモリに保持されている共有状態であるデータの共有ノードを識別する情報を格納する第２のディレクトリとを有し、前記ノードコントローラは、前記演算処理ユニットからのデータ要求に応じて、前記第１のディレクトリを参照し、前記スヌープを通信すべき前記他のノードを識別できないことを判定し、前記第２のディレクトリを参照して、前記スヌープを通信すべき前記他のノードを識別し、前記識別した他のノードにスヌープを通信する。
【発明の効果】
【００２１】
第１のディレクトリのフォーマットと異なるフォーマットを持ち、共有状態専用の第２のディレクトリを設定することにより、第１のディレクトリのエントリ幅を大きくすることなく、共有ノードの詳細な情報を保持することが可能となる。このため、第２のディレクトリを検索した情報により、宛先を絞ったスヌープ発行が可能となる。
【図面の簡単な説明】
【００２２】
【図１】実施の形態の情報処理システムのブロック図である。
【図２】図１のＣＰＵのブロック図である。
【図３】図１のノードコントローラのブロック図である。
【図４】図３のディレクトリの説明図である。
【図５】図３の拡張ディレクトリの説明図である。
【図６】図１乃至図５の実施の形態のＳステートでのデータ要求処理フロー図である。
【図７】図６に対する比較例のＳステートでのデータ要求処理フロー図である。
【図８】図１乃至図５の実施の形態のＥステートでのデータ要求処理フロー図である。
【図９】図８に対する比較例のＥステートでのデータ要求処理フロー図である。
【図１０】第２の実施の形態の情報処理システムのブロック図である。
【図１１】従来のディレクトリの説明図である。
【図１２】従来のＳステートでのディレクトリの説明図である。
【発明を実施するための形態】
【００２３】
以下、実施の形態の例を、情報処理システムの第１の実施の形態、Ｓステートでのデータ要求処理、Ｅステートでのデータ要求処理、情報処理システムの第２の実施の形態、他の実施の形態の順で説明するが、開示の情報処理システム、ディレクトリは、この実施の形態に限られない。
【００２４】
（情報処理システムの第１の実施の形態）
図１は、実施の形態の情報処理システムのブロック図である。図２は、図１のＣＰＵのブロック図である。図３は、図１のノードコントローラのブロック図である。図１は、情報処理システムとして、複数のシステムボードが連結された情報処理システムを例に示す。この例では、１つのシステムボードを１つのノードとして管理する。
【００２５】
図１に示すように、情報処理システムは多数（ここでは、ｎ＞３）台のシステムボード１−１〜１−ｎを有する。各システムボード１−１〜１−ｎは、複数（この例では、２台）の演算処理ユニット（以下、ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔという）３Ａ、３Ｂと、各ＣＰＵ３Ａ、３Ｂに接続されたメモリ４Ａ，４Ｂと、各ＣＰＵ３Ａ、３Ｂに接続されたノードコントローラ２とを有する。メモリ４Ａ、４Ｂは、例えば、Ｌ２、Ｌ３キャッシュメモリを構成する。メモリ４Ａ、４Ｂは、例えば、ＤＩＭＭ（Ｄｕａｌ  Ｉｎｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）を使用できる。しかし、他の揮発性メモリ等で構成してもよい。
【００２６】
図２に示すように、ＣＰＵ３Ａは、２つのＣＰＵコア（Ｃｏｒｅ）３０Ａ、３０Ｂと、各ＣＰＵコア３０Ａ，３０Ｂに接続された２つのキャッシュメモリ（Ｌ１キャッシュメモリ）３２Ａ、３２Ｂと、メモリ４ＡとＣＰＵコア３０Ａ、３０Ｂとを接続し、メモリアクセス制御するメモリコントローラ３４とを有する。図１のＣＰＵ３Ｂも同一の構成である。
【００２７】
図１に戻り、ノードコントローラ２は、システムボード１−１〜１−Ｎ間で通信を行う。この例では、第１のシステムボード１−１のノードコントローラ２が、第１の通信パス１４−１を介し第２のシステムボード１−２のノードコントローラ２に接続する。又、第２のシステムボード１−２のノードコントローラ２が、第２の通信パス１４−２を介し第３のシステムボードのノードコントローラ２に接続する。以下、同様に、第ｎ―１のシステムボードのノードコントローラ２が、第ｎ−１の通信パス１４−ｍを介し第ｎのシステムボード１−ｎのノードコントローラ２に接続する。
【００２８】
この通信パス１４−１〜１４−ｍは、共通バスを構成する。通信パス１４−１〜１４−ｍを図１の分離したパスでなく、共有したパスで形成してもよい。
【００２９】
システムコントローラ１０は、管理バス１２を介し各システムボード１−１〜１−ｎに接続する。システムコントローラ１０は各システムボード１−１〜１−ｎ内の回路（ＣＰＵ、メモリ等）の状態設定、状態監視等を行う。尚、図１では、図示していないが、別にメインメモリを設け、各ノードと接続してもよい。
【００３０】
図３に示すように、ノードコントローラ２は、他のシステムボードのノードコントローラと通信パス１４−１を介し通信する外部ノードインターフェース回路２０と、ＣＰＵ３Ａ（３Ｂ）のメモリコントローラ３４と通信するＣＰＵインターフェース回路２６と、ディレクトリ２２と、第２のディレクトリ２４と、処理ユニット２８とを有する。
【００３１】
処理ユニット２８は、外部ノードインターフェース回路２０と、ＣＰＵインターフェース回路２０と、ディレクトリ２２と、第２のディレクトリ２４とに接続する。処理ユニット２８は、ＣＰＵ３Ａ（及び３Ｂ）や他のノードからのリード／ライト要求に応じて、ディレクトリ２２及び第２のディレクトリ２４を検索し、スヌープ送信等を行う。
【００３２】
ディレクトリ２２は、ノードコントローラ２がデータを管理するために使用する。ディレクトリ２２は、自ノードが持っているキャッシュメモリ４Ａのアドレス空間において、データの状態と、同じデータがどのノードに保持されているかの管理情報を格納する。
【００３３】
図４は、図１及び図３のディレクトリの説明図である。図４に示すように、ディレクトリ２２は、自ノードのＬ２、Ｌ３キャッシュメモリのメモリアドレス毎にエントリを持つ。例えば、ＣＰＵのアクセス単位を６４ｂｉｔとし、自ノードのＬ２、Ｌ３キャッシュメモリ４Ａ，４Ｂの容量を６４ビットで割った結果の個数のエントリを持つ。
【００３４】
この例では、ディレクトリ２２の１つのエントリ幅が２Ｂｙｔｅ（＝１６ビット）で構成されている。又、図４の例では、フォーマットタイプＡのエントリとフォーマットタイプＢのエントリとが混在した例を示す。
【００３５】
図４に示すように、フォーマットタイプＡのエントリフォーマットは、エントリのフォーマットタイプ欄２２−１（Ａ−ｔｙｐｅ＝１）と、リザーブビット欄２２−２と、ステータス欄２２−３と、ＣＰＵ−ＩＤ（１）欄２２−４と、ＣＰＵ−ＩＤ（２）欄２２−５とを有する。フォーマットタイプＢのエントリフォーマットは、エントリのフォーマットタイプ欄２２−１（Ｂ−Ｔｙｐｅ＝０）と、第２のステータス欄２２−６と、ボードＩＤビットマップ欄２２−７とを有する。
【００３６】
リザーブビット欄２２−２は、１ビットの予備のビットである。ステータス欄２２−３は、２ビットで構成される。ステータス欄２２−３では、排他状態（Ｅステート）を「１０」、無効状態（Ｉステート）を「００」、１つのＣＰＵとの共有状態（Ｓステート）を「０１」、２つのＣＰＵとの共有状態を「１１」で示す。Ｅステートは、リクエストしたＣＰＵ（リクエスタＣＰＵと呼ぶ）が排他制御中であることを示す。Ｉステートは、いずれのＣＰＵもデータを保持していないことを示す。Ｓステートは、複数のＣＰＵがデータを共有していることを示す。
【００３７】
フォーマットタイプＡのＣＰＵ−ＩＤ（１）欄２２−４、ＣＰＵ−ＩＤ（２）欄２２−５は、それぞれリクエストを出したＣＰＵ（リクエスタ）のＣＰＵ−ＩＤを格納する。ＣＰＵ−ＩＤ欄２２−４，２２−５は、それぞれ６ビットで構成される。ＣＰＵ−ＩＤ欄２２−４，２２−５は、４ビットのボード(システムボード)のＩＤと２ビットのローカルＩＤ（ボード内のＣＰＵ−ＩＤ）とを格納する。従って、この例では、最大で、ノード数が１６個、ノード内ＣＰＵが４個までを特定できる。
【００３８】
３つ以上のＣＰＵが共有状態である場合に、フォーマットタイプＡを使用できない。３つ以上のＣＰＵが共有状態になった場合に、ディレクトリ２２において、フォーマットタイプＡのエントリが、フォーマットタイプＢのエントリに変更される。フォーマットタイプＢの第２のステータス２２−６欄は、３ビットで構成され、３つ以上のＣＰＵが共有している場合に、「１１１」がセットされる。ボードＩＤビットマップ欄２２−７は、１２ビットで構成され、リクエストのあった（リクエスタという）ＣＰＵのボードＩＤをビットマップ形式で格納する。この例では、１２個のノードまでを特定できる。しかし、ノード内のＣＰＵは特定できない。即ち、ＣＰＵ単位の詳細情報を格納できない。
【００３９】
図５は、図１の第２のディレクトリの説明図である。第２のディレクトリ（以下、拡張ディレクトリという）２４は、ディレクトリ２２に詳細情報を格納できなくなった場合に使用するディレクトリである。
【００４０】
拡張ディレクトリ２４は、共有状態（Ｓステート）でデータ保持しているＣＰＵが一定数以上発生した場合（この例では、ＣＰＵが３つ以上の場合）、図４のディレクトリ２２とは別に、共有状態（Ｓステート）でデータ保持しているＣＰＵを特定する詳細情報を格納する専用ディレクトリである。拡張ディレクトリ２４は、ｎ−ｗａｙのＲＡＭ（Ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）であっても、ｆｕｌｌアソシエイテイブのＣＡＭでもよい。
【００４１】
拡張ディレクトリ２４は、バリッド（Ｖａｌｉｄ）ビット欄２４−１と、メモリアドレス欄２４−２と、リザーブビット欄２４−３と、ＣＰＵ−ＩＤのビットマップ欄２４−４とを有する。バリッドビット欄２４−１は、１ビットを割り当てられる。バリッドビット欄２４−１は、拡張ディレクトリ２４のエントリが有効（Ｅｎａｂｌｅ＝「１」）であるか、無効（Ｄｉｓａｂｌｅ＝「０」）であるかを示す。
【００４２】
拡張ディレクトリ２４は、メモリアドレス毎に設けられず、共有状態（Ｓステート）でデータ保持しているＣＰＵの詳細情報を格納するのみである。このため、拡張ディレクトリ２４に、メモリアドレス２４−２欄を設ける。メモリアドレス欄２４−２は、共有状態のデータのメモリアドレスの内、キャッシュライン、インデックスを除いた上位２５ビットを格納する。リザーブビット欄２４−３は予備のビットである。ＣＰＵ−ＩＤのビットマップ欄２４−４は、４８ビットで構成される。ビットマップ欄２４−４の各１ビットが１つのＣＰＵを特定する。この例では、４８個のＣＰＵを特定できる。この例では、拡張ディレクトリ２４のエントリ幅は、８０ビットである。
【００４３】
このように、ディレクトリ２２のフォーマットと異なるフォーマットを持つ拡張ディレクトリ２４を設定することにより、図４で示した本来のディレクトリ２２のエントリ幅を大きくすることなく、ＣＰＵの詳細な情報を保持することが可能となる。このため、拡張ディレクトリ２４を検索した情報により、宛先を絞ったスヌープ発行が可能となる。
【００４４】
例えば、情報処理システムが１Ｔｅｒａ  Ｂｙｔｅのキャッシュメモリを備える場合には、ディレクトリ２２の各エントリが２Ｂｙｔｅであるため、必要なディレクトリ２２のメモリ容量は、３２ＧＢｙｔｅとなる。ディレクトリ２２のエントリフォーマットで、拡張ディレクトリ２４のような４８個のＣＰＵを特定するには、１エントリに更に３６ビットを要する。このため、ディレクトリ２２のエントリ幅は、６Ｂｙｔｅ以上（正確には、６．５Ｂｙｔｅ）に拡張しなければばらない。このため、ディレクトリ２２を拡張して、より多くのＣＰＵを識別するのは、最低、９６ＧＢｙｔｅを必要とする。
【００４５】
これに対し、この実施の形態では、拡張ディレクトリ２４は、３つ以上のＣＰＵが共有した場合に、データを保持するため、ディレクトリ２２内の共有状態のデータを対象とすれば、良い。また、情報処理システムにおいて、共有状態となる確率は、無効状態と排他状態となる確率より低い。このため、拡張ディレクトリ２４は、数ＫＢｙｔｅから最大１ＭＢｙｔｅであれば、良い。即ち、３２ＧＢｙｔｅのディレクトリ２２と最大１ＭＢｙｔｅの拡張ディレクトリ２４により、９６ＧＢｙｔｅのディレクトリ２２と同等の性能を付与できる。
【００４６】
このため、ディレクトリの物量の増大を最小限として、ＣＰＵの詳細情報の保持が可能になる。さらに、この拡張ディレクトリ２４の詳細情報からスヌープの発行数を最小限に抑えることができるので、通信量の増大も防ぐことが可能になる。
【００４７】
（Ｓステートでのデータ要求処理）
図６は実施の形態のＳステートでのデータ要求処理フロー図である。図６は、図1乃至図５で説明した構成において、ＣＰＵ３Ａ（又は３Ｂ）からＳ（共有）ステートでデータ要求（リード要求）した場合のノードコントローラ２のディレクトリ検索処理フロー図を示す。
【００４８】
（Ｓ１０）ＣＰＵ３Ａ（又は３Ｂ）は、ノードコントローラ２にＳステートでのリード（Ｒｅａｄ）リクエストを発行する。
【００４９】
（Ｓ１２）ノードコントローラ２では、処理ユニット２８がＣＰＵインターフェース回路２６を介しリードリクエストを受ける。処理ユニット２８は、リードリクエストに含まれるリードアドレスにより、ノードコントローラ２のディレクトリ２２を検索する。
【００５０】
（Ｓ１４）処理ユニット２８は、リードアドレスで、ディレクトリ２２のエントリのステータス欄２２−３を参照し、ステータス欄２２−３の情報を識別する。ステータス欄２２−３が無効ステート（Ｉステート）である場合には、どのＣＰＵもリクエストしたデータを持っていない。即ち、どのＣＰＵも当該リードアドレスのデータを要求していない状態である。処理ユニット２８は、ステータスが無効ステートと判定した場合、ステップＳ１６に進む。
【００５１】
（Ｓ１６）ノードコントローラ２の処理ユニット２８は、リクエストを発行したＣＰＵ(ここでは、リクエスタと呼ぶ)のＣＰＵ−ＩＤとステータス（Ｓステート）をディレクトリ２２へ登録する。
【００５２】
（Ｓ１８）処理ユニット２８は、ディレクトリ２２のステータス欄２２−３を参照した結果、リクエストしたデータのステータスが排他状態（Ｅステート）であるか判定する。
【００５３】
（Ｓ２０）処理ユニット２８は、ステータスがＥステートと判定した場合、外部ノードインターフェース回路２０を介しディレクトリ２２のＣＰＵ−ＩＤ欄２２−４，２２−５に登録されたＣＰＵ−ＩＤを持つＣＰＵへスヌープを送信する。スヌープ送信は、登録されたＣＰＵ−ＩＤのＣＰＵにデータのステートの変更を要求する。そして、ステップＳ１６に進み、処理ユニット２８は、リクエストを発行したＣＰＵのＣＰＵ−ＩＤをディレクトリ２２へ登録する。
【００５４】
（Ｓ２２）処理ユニット２８は、ディレクトリ２２のステータス欄２２−３を参照した結果、リクエストしたデータのステータスが共有状態（Ｓステート）であるか判定する。
【００５５】
（Ｓ２４）処理ユニット２８はステータスがＳステートと判定した場合、処理ユニット２８はディレクトリ２２にＣＰＵ−ＩＤを登録できるか判定する。前述のように、Ａ−Ｔｙｐｅのディレクトリ２２のエントリは、２つのＣＰＵ−ＩＤしか登録できない。処理ユニット２８は、ディレクトリ２２へ詳細情報の格納が可能な状態(図４のフォーマットＡ−Ｔｙｐｅ)で、且つ登録されたＣＰＵ−ＩＤが１つである場合に、ＣＰＵ−ＩＤを登録できると判定する。処理ユニット２８は、ＣＰＵ−ＩＤを登録できると判定した場合には、ステップＳ１６に進み、処理ユニット２８は、ディレクトリ２２へリクエスタのＣＰＵ−ＩＤを登録する。
【００５６】
（Ｓ２６）処理ユニット２８は、ＣＰＵ−ＩＤを登録できないと判定した場合には、ディレクトリ２２へ詳細情報が格納できない場合である。即ち、ディレクトリ２２のＡ−Ｔｙｐｅのエントリに、既にＣＰＵ―ＩＤが２つ格納されている、又はエントリフォーマットが、既にＢ−Ｔｙｐｅである場合である。処理ユニット２８は、ＣＰＵ−ＩＤを登録できないと判定した場合には、拡張ディレクトリ２４に空きがあるかを判定する。
【００５７】
（Ｓ２８)処理ユニット２８は拡張ディレクトリ２４に空きがあると判定した場合には、処理ユニット２８は、拡張ディレクトリ２４にリクエスタのＣＰＵ−ＩＤをビットマップ形式で登録する。又、処理ユニット２８はディレクトリ２２のＢ−ＴｙｐｅのエントリにリクエスタのＣＰＵのボードＩＤをビットマップ形式で登録する。この場合、ディレクトリ２２のエントリがＡ−ＴｙｐｅからＢ−Ｔｙｐｅへ変更することが必要な場合は、処理ユニット２８はディレクトリ２２のフォーマットタイプ２２−１とステータス２２−３を、Ｂ−Ｔｙｐｅ、共有ステートに更新する。
【００５８】
（Ｓ３０）処理ユニット２８は拡張ディレクトリ２４に空きがないと判定した場合には、ディレクトリ２２のＢ−ＴｙｐｅのエントリにリクエスタのＣＰＵのボードＩＤをビットマップ形式で登録する。
【００５９】
図７は、図６の比較例のデータ要求処理フロー図である。図７は、拡張ディレクトリ２４を設けない場合において、ＣＰＵ３Ａ（又は３Ｂ）からＳ（共有）ステートでデータ要求（リード要求）した場合のノードコントローラ２のディレクトリ検索処理フロー図を示す。
【００６０】
図７に示すように、ＣＰＵ３Ａ（又は３Ｂ）は、ノードコントローラ２にＳステートでのリード（Read）リクエストを発行する（Ｓ１００）。ノードコントローラ２の処理ユニット２８がＣＰＵインターフェース回路２６を介しリードリクエストを受ける。処理ユニット２８は、リードリクエストに含まれるリードアドレスにより、ノードコントローラ２のディレクトリ２２を検索する。処理ユニット２８は、リードアドレスでディレクトリ２２のエントリのステータス欄２２−３を参照し、ステータス欄２２−３の情報を識別する。処理ユニット２８は、ステータスがＩステートと判定した場合、ステップＳ１０３に進む（Ｓ１０２）。
【００６１】
ノードコントローラ２の処理ユニット２８は、リクエストを発行したＣＰＵのＣＰＵ−ＩＤとステータス（Ｓステート）をディレクトリ２２へ登録する（Ｓ１０３）。処理ユニット２８は、ディレクトリ２２のステータス欄２２−３を参照した結果、リクエストしたデータのステータスがＥステートであるか判定する。処理ユニット２８は、ステータスがＥステートと判定した場合、外部ノードインターフェース回路２０を介しディレクトリ２２のＣＰＵ−ＩＤ欄２２−４，２２−５に登録されたＣＰＵ−ＩＤを持つＣＰＵへスヌープを送信する（Ｓ１０４）。そして、ステップＳ１０３に進み、処理ユニット２８は、リクエストを発行したＣＰＵのＣＰＵ−ＩＤをディレクトリ２２へ登録する。
【００６２】
処理ユニット２８は、ディレクトリ２２のステータス欄２２−３を参照した結果、リクエストしたデータのステータスがＳステートであるか判定する（Ｓ１０５）。処理ユニット２８は、ステータスがＳステートと判定した場合、ディレクトリ２２にＣＰＵ−ＩＤを登録できるか判定する。処理ユニット２８は、ＣＰＵ−ＩＤを登録できると判定した場合には、ステップＳ１０３に進み、処理ユニット２８は、ディレクトリ２２へリクエスタのＣＰＵ−ＩＤを登録する。処理ユニット２８は、ＣＰＵ−ＩＤを登録できないと判定した場合には、処理ユニット２８はディレクトリ２２のＢ−ＴｙｐｅのエントリにリクエスタのＣＰＵ−ＩＤをビットマップ形式で登録する。この場合、ディレクトリ２２のエントリがＡ−ＴｙｐｅからＢ−Ｔｙｐｅへ変更することが必要な場合は、処理ユニット２８はディレクトリ２２のフォーマットタイプ２２−１とステータス２２−３を、Ｂ−Ｔｙｐｅ、共有ステートに更新する（Ｓ１０６）。
【００６３】
このように、本実施の形態では、ディレクトリ２２と異なるフォーマットを持つ拡張ディレクトリ２４をＳステート専用に設ける。そして、拡張ディレクトリ２４にビットマップ形式でリクエスタＣＰＵ−ＩＤを登録するため、情報処理システムに搭載されたＣＰＵの台数が増加しても、ディレクトリの容量の増加を最小限として、ＳステートのＣＰＵを認識できる。
【００６４】
（Ｅステートでのデータ要求処理）
図８は実施の形態のＥステートでのデータ要求処理フロー図である。図８は、図1乃至図５で説明した構成において、ＣＰＵ３Ａ（又は３Ｂ）からＥ（排他）ステートでデータ要求（リード要求）した場合のノードコントローラ２のディレクトリ検索処理フロー図を示す。
【００６５】
（Ｓ４０）ＣＰＵ３Ａ（又は３Ｂ）は、ノードコントローラ２にＥステートでのリード（Read）リクエストを発行する。
【００６６】
（Ｓ４２）ノードコントローラ２では、処理ユニット２８がＣＰＵインターフェース回路２６を介しリードリクエストを受ける。処理ユニット２８は、リードリクエストに含まれるリードアドレスにより、ノードコントローラ２のディレクトリ２２を検索する。
【００６７】
（Ｓ４４）処理ユニット２８は、リードアドレスでディレクトリ２２のエントリのステータス欄２２−３を参照し、ステータス欄２２−３の情報を識別する。ステータス欄２２−３がＩステートである場合には、どのＣＰＵもリクエストしたデータを持っていない。即ち、どのＣＰＵも当該リードアドレスのデータを要求していない状態である。処理ユニット２８は、ステータスがＩステートと判定した場合、ステップＳ４６に進む。
【００６８】
（Ｓ４６）ノードコントローラ２の処理ユニット２８は、リクエストを発行したＣＰＵのＣＰＵ−ＩＤとステータス（Ｅステート）をディレクトリ２２へ登録する。
【００６９】
（Ｓ４８）処理ユニット２８は、ディレクトリ２２のステータス欄２２−３を参照した結果、リクエストしたデータのステータスがＥステートであるか判定する。
【００７０】
（Ｓ５０）処理ユニット２８は、ステータスがＥステートと判定した場合、外部ノードインターフェース回路２０を介しディレクトリ２２のＣＰＵ−ＩＤ欄２２−４，２２−５に登録されたＣＰＵ−ＩＤを持つＣＰＵへスヌープを送信する。スヌープ送信は、登録されたＣＰＵ−ＩＤのＣＰＵにデータのステートの変更を要求する。そして、ステップＳ４６に進み、処理ユニット２８は、リクエストを発行したＣＰＵのＣＰＵ−ＩＤをディレクトリ２２へ登録する。
【００７１】
（Ｓ５２）処理ユニット２８は、ディレクトリ２２のステータス２２−３を参照した結果、リクエストしたデータのステータスがＳステートであるか判定する。
【００７２】
（Ｓ５４）処理ユニット２８は、ステータスがＳステートと判定した場合、ディレクトリ２２の登録されたＣＰＵ−ＩＤが２つ以下であるか否かを判定する。前述のように、Ａ−Ｔｙｐｅのディレクトリ２２のエントリは、２つのＣＰＵ−ＩＤしか登録できない。処理ユニット２８は、登録されたＣＰＵ−ＩＤが２つ以下であると判定した場合には、処理ユニット２８は、外部ノードインターフェース回路２０を介しディレクトリ２２のＣＰＵ−ＩＤ欄２２−４，２２−５に登録されたＣＰＵ−ＩＤを持つＣＰＵへスヌープを送信する。そして、ステップＳ４６に進み、処理ユニット２８は、ディレクトリ２２を更新する。即ち、処理ユニット２８は、ディレクトリ２２に１つのＣＰＵ−ＩＤが登録された場合には、リクエスタのＣＰＵ−ＩＤを登録する。又、ディレクトリ２２に２つのＣＰＵ−ＩＤが登録された場合には、ディレクトリ２２のエントリをＡ−ＴｙｐｅからＢ−Ｔｙｐｅへ変更する。即ち、処理ユニット２８はディレクトリ２２のフォーマットタイプ欄２２−１を、Ｂ−Ｔｙｐｅ、ボードＩＤビットマップ欄２２−７に既に登録されたＣＰＵ−ＩＤのＣＰＵを搭載するボードＩＤと今回登録すべきＣＰＵ−ＩＤを搭載するボードＩＤとをビットマップ形式で登録し、ステータス２２−６をＥステートに更新する。
【００７３】
（Ｓ５６）処理ユニット２８は、ディレクトリ２２に登録されたＣＰＵ−ＩＤが２つ以上でないと判定した場合には、拡張ディレクトリ２４をリクエストのリードアドレスで検索する。
【００７４】
（Ｓ５８）処理ユニット２８は、拡張ディレクトリ２４のアドレス欄２４−２にリクエストのリードアドレスに対応するものがあるか否かを判定（ＨＩＴ判定）する。
【００７５】
（Ｓ６０）処理ユニット２８は、拡張ディレクトリ２４のアドレス欄２４−２にリクエストのリードアドレスに対応するものがあると判定（ＨＩＴ判定）した場合には、拡張ディレクトリ２４のＣＰＵ−ＩＤのビットマップ欄２４−４に登録されたＣＰＵ−ＩＤを持つＣＰＵへ、外部ノードインターフェース回路２０を介しスヌープを送信する。
【００７６】
（Ｓ６２）処理ユニット２８は、スヌープ送信後、拡張ディレクトリ２４のＣＰＵ−ＩＤのビットマップ欄２４−４にリクエスタのＣＰＵ−ＩＤをビットマップ形式で登録する。又、処理ユニット２８はディレクトリ２２のＢ−ＴｙｐｅのエントリにリクエスタのＣＰＵ−ＩＤを持つボードＩＤをビットマップ形式で登録する。又、処理ユニット２８はディレクトリ２２のステータス欄２２−６のステータスを、Ｅステートに更新する。
【００７７】
（Ｓ６４）処理ユニット２８は拡張ディレクトリ２４のアドレス欄２４−２にリクエストのリードアドレスに対応するものがないと判定した場合には、処理ユニット２８はディレクトリ２２のＢ−ＴｙｐｅのエントリのボードＩＤビットマップ欄２２−７に登録されたボードへ外部ノードインターフェース回路２０を介しスヌープを送信する。そして、ディレクトリ２２のＢ−ＴｙｐｅのエントリにリクエスタのＣＰＵ−ＩＤのボードＩＤをビットマップ形式で登録し、ステータスをＥステートに更新する。
【００７８】
図９は図８の比較例のＥステートでのデータ要求処理フロー図である。図９は、図８において、拡張ディレクトリを設けない構成において、ＣＰＵ３Ａ（又は３Ｂ）からＥ（排他）ステートでデータ要求（リード要求）した場合のノードコントローラ２のディレクトリ検索処理フロー図を示す。
【００７９】
ＣＰＵ３Ａ（又は３Ｂ）は、ノードコントローラ２にＥステートでのリード（Read）リクエストを発行する（Ｓ１１０）。処理ユニット２８は、リードリクエストに含まれるリードアドレスにより、ノードコントローラ２のディレクトリ２２を検索する。処理ユニット２８は、リードアドレスで参照したディレクトリ２２のエントリのステータス欄２２−３が無効ステート（Invalid）であるか否かを判定する（Ｓ１１２）。処理ユニット２８は、ステータスがＩステートと判定した場合、ステップＳ１１３に進み、リクエストを発行したＣＰＵのＣＰＵ−ＩＤとステータス（Ｅステート）をディレクトリ２２へ登録する（Ｓ１１３）。
【００８０】
処理ユニット２８は、ディレクトリ２２のステータス欄２２−３を参照し、リクエストしたデータのステータスがＥステートであるか判定する（Ｓ１１４）。処理ユニット２８は、ステータスがＥステートと判定した場合、外部ノードインターフェース回路２０を介しディレクトリ２２に登録されたＣＰＵ−ＩＤを持つＣＰＵへスヌープを送信する。スヌープ送信は、登録されたＣＰＵ−ＩＤのＣＰＵにデータのステートの変更を要求する。そして、ステップＳ１１３に進み、処理ユニット２８は、リクエストを発行したＣＰＵのＣＰＵ−ＩＤをディレクトリ２２へ登録する（Ｓ１１５）。
【００８１】
処理ユニット２８は、ディレクトリ２２のステータス欄２２−３を参照した結果、リクエストしたデータのステータスがＳステートであるか判定する（Ｓ１１６）。処理ユニット２８は、ステータスがＳステートと判定した場合、ディレクトリ２２の登録されたＣＰＵ−ＩＤが２つ以下であるか否かを判定する（Ｓ１１７）。処理ユニット２８は、登録されたＣＰＵ−ＩＤが２つ以下であると判定した場合には、処理ユニット２８は、外部ノードインターフェース回路２０を介しディレクトリ２２に登録されたＣＰＵ−ＩＤを持つＣＰＵへスヌープを送信する（Ｓ１１５）。そして、ステップＳ１１３に進み、処理ユニット２８は、ディレクトリ２２を更新する。即ち、処理ユニット２８は、ディレクトリ２２に１つのＣＰＵ−ＩＤが登録された場合には、リクエスタのＣＰＵ−ＩＤを登録する。又、ディレクトリ２２に２つのＣＰＵ−ＩＤが登録された場合には、ディレクトリ２２のエントリをＡ−ＴｙｐｅからＢ−Ｔｙｐｅへ変更する。即ち、処理ユニット２８はディレクトリ２２のフォーマットタイプ２２−１を、Ｂ−Ｔｙｐｅ、ボードＩＤビットマップ２２−７に既に登録されたＣＰＵ−ＩＤと今回登録すべきＣＰＵ−ＩＤとをビットマップ形式で登録し、ステータス２２−６をＥステートに更新する（Ｓ１１３）。
【００８２】
処理ユニット２８は、ディレクトリ２２に登録されたＣＰＵ−ＩＤが２つ以上でないと判定した場合には、処理ユニット２８はディレクトリ２２のＢ−ＴｙｐｅのエントリのボードＩＤビットマップ欄２２−７に登録されたボード又はＣＰＵへ外部ノードインターフェース回路２０を介しスヌープを送信する。そして、ディレクトリ２２のＢ−ＴｙｐｅのエントリにリクエスタのＣＰＵ−ＩＤ又はボードＩＤをビットマップ形式で登録し、ステータスをＥステートに更新する（Ｓ１１８）。
【００８３】
このように、本実施の形態では、ディレクトリ２２と異なるフォーマットを持つ拡張ディレクトリ２４をＳステート専用に設ける。そして、拡張ディレクトリ２４にビットマップ形式でリクエスタＣＰＵ−ＩＤを登録するため、情報処理システムに搭載されたＣＰＵの台数が増加しても、ＳステートのＣＰＵを認識でき、スヌープ通信回数を減少できる。
【００８４】
このため、システムボード(ノード)１−１〜１−ｎのキャッシュメモリ４Ａ，４Ｂを共有キャッシュメモリに使用しても、スヌープの宛先を絞ることができ、通信量を減少できる。特に、Ｓステートでデータ保持しているノードやＣＰＵが増えても、リクエスト発行時などに、スヌープのＣＰＵの特定ができ、通信量が減少し、性能向上に寄与する。
【００８５】
（情報処理システムの第２の実施の形態）
図１０は、第２の実施の形態の情報処理システムのブロック図である。図１０において、図１乃至図５で説明したものと同一のものは、同一の記号を付してある。図１０も、図１と同様に、情報処理システムとして、複数のシステムボードが連結された情報処理システムを例に示す。
【００８６】
図１０に示すように、情報処理システムは多数（ここでは、４）台のシステムボード（ノード）１−１〜１−４を有する。各システムボード１−１〜１−４は、単数又は複数のＣＰＵ３Ａと、ＣＰＵ３Ａに接続された第1のメモリ４と、ＣＰＵ３Ａに接続されたノードコントローラ２、ノードコントローラ２に接続された第２のメモリ５と、ＣＰＵ３Ａとノードコントローラ２とに接続されたシステムコントローラ１０とを有する。
【００８７】
第1のメモリ４は、Ｌ２キャッシュメモリを構成する。第２のメモリ５は、Ｌ３キャッシュメモリを構成する。第1及び第２のメモリ４，５は、例えば、ＤＩＭＭ（Ｄｕａｌ  Ｉｎｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）を使用できる。ノードコントローラ２は、システムボード１−１〜１−４間で通信を行う。この例では、第１のシステムボード１−１のノードコントローラ２が、第１の通信パス１４−１を介し第２のシステムボード１−２のノードコントローラ２に接続する。又、第２のシステムボード１−２のノードコントローラ２が、第２の通信パス１４−２を介し第３のシステムボードのノードコントローラ２に接続する。以下、同様に、第３のシステムボード１−３のノードコントローラ２が、第３の通信パス１４−３を介し第４のシステムボード１−４のノードコントローラ２に接続する。
【００８８】
システムコントローラ１０は各システムボード１−１〜１−４内の回路（ＣＰＵ、メモリ等）の状態設定、状態監視等を行う。各システムボード１−１〜１−４に設けられたシステムコントローラ１０は、管理バス１２を介し互いに接続する。各システムコントローラ１０は、管理バス１２を介し各システムボード１−１〜１−４の運用状態を通知し、他のシステムボードの状態を監視する。
【００８９】
又、ノードコントローラ２は、図３乃至図５と構成と同様に、増設キャッシュメモリ５を含めたメモリ空間のディレクトリ２２と拡張ディレクトリ２４とを有する。第２の実施の形態では、第２のメモリ５は、増設用メモリであり、ノードコントローラ２に第２のメモリ５を設けたので、ＣＰＵ３Ａのキャッシュメモリの増設が容易である。
【００９０】
又、システムコントローラ１０を各システムボード１−１〜１−４に設けたため、第1の実施の形態に比し、システムコントローラの負荷を低減できる。このようなキャッシュメモリの増設が容易な構成の情報処理システムにおいても、第1の実施の形態と同様に、共有ステートにおいて、スヌープ相手先を絞ることができ、通信量を低減できる。
【００９１】
（他の実施の形態）
前述の実施の形態では、１ノードを１つのシステムボードとしているが、１ノードを複数のシステムボードとしてもよく、複数のノードを１つのシステムボードとしてもよい。又、システムボードに搭載したＣＰＵを２つの例で説明したが、３つ以上のＣＰＵを１つのシステムボードに搭載してもよい。
【００９２】
以上、本発明を実施の形態により説明したが、本発明の趣旨の範囲内において、本発明は、種々の変形が可能であり、本発明の範囲からこれらを排除するものではない。
【産業上の利用可能性】
【００９３】
第１のディレクトリのフォーマットと異なるフォーマットを持ち、共有状態専用の第２のディレクトリを設定することにより、第１のディレクトリのエントリ幅を大きくすることなく、共有ノードの詳細な情報を保持することが可能となる。このため、ディレクトリの容量の増加を最小限として、第２のディレクトリを検索した情報により、宛先を絞ったスヌープ発行が可能となる。
【符号の説明】
【００９４】
１−１〜１−Ｎ  ノード（システムボード）
２  ノードコントローラ
３Ａ，３Ｂ  ＣＰＵ
４，４Ａ，４Ｂ  キャッシュメモリ
５  増設キャッシュメモリ
１０  システムコントローラ
１２  管理バス
１４−１〜１４−ｍ  通信パス
２０  外部ノードインターフェース回路
２２  ディレクトリ
２２−１  フォーマットタイプ欄
２２−３，２２−６  ステータス欄
２２−４，２２−５  ＣＰＵ−ＩＤ欄
２２−７  ボードＩＤビットマップ欄
２４  拡張ディレクトリ
２４−１  有効ビット欄
２４−２  アドレス欄
２４−４  ＣＰＵ−ＩＤビットマップ欄
２６  ＣＰＵインターフェース回路
２８  処理ユニット
３０Ａ，３０Ｂ  ＣＰＵコア
３４  メモリコントローラ
【図１】
0005435132.tif 000002
【図２】
0005435132.tif 000003
【図３】
0005435132.tif 000004
【図４】
0005435132.tif 000005
【図５】
0005435132.tif 000006
【図６】
0005435132.tif 000007
【図７】
0005435132.tif 000008
【図８】
0005435132.tif 000009
【図９】
0005435132.tif 000010
【図１０】
0005435132.tif 000011
【図１１】
0005435132.tif 000012
【図１２】
0005435132.tif 000013