(57)【要約】  複数の情報処理部中の一の情報処理部のデータ格納領域に格納されたデータを保持しているＣＰＵ又は当該ＣＰＵを有する情報処理部を示す情報を、データ格納領域に夫々対応するエントリを有する第１のフォーマットで登録するディレクトリを有し、第１のフォーマットの複数のエントリのうちデータを使用しないものとして登録されたエントリを除くことによりエントリ数を減らした第２のフォーマットに変換する構成を設ける。
2012035605.tif 000002
【特許請求の範囲】
【請求項１】
複数の第１のＣＰＵと、
夫々が複数の第１のデータ格納領域を有する複数の第１のメモリと、
前記複数の第１のデータ格納領域が格納するデータを保持しているＣＰＵを示す情報、および当該ＣＰＵを有する情報処理部を示す情報のうちの少なくともいずれか一方の情報を、前記複数の第１のデータ格納領域のいずれかに夫々が対応する複数のエントリを有する第１のフォーマットで登録する第１のディレクトリと、前記複数のエントリのうちデータを使用しないものとして登録されたエントリを除くことによってエントリ数を減らした第２のフォーマットに変換する第１のフォーマット変換部と、を有する第１の情報処理部と、
複数の第２のＣＰＵと、
夫々が複数の第２のデータ格納領域を有する複数の第２のメモリと、
前記複数の第２のデータ格納領域が格納するデータを保持しているＣＰＵを示す情報および当該ＣＰＵを有する情報処理部を示す情報のうちの少なくともいずれか一方の情報を、前記複数の第２のデータ格納領域のいずれかに夫々が対応する複数のエントリを有する第３のフォーマットで登録する第２のディレクトリと、前記複数のエントリのうちデータを使用しないものとして登録されたエントリを除くことによってエントリ数を減らした第４のフォーマットに変換する第２のフォーマット変換部と、を有する第２の情報処理部と、を有する情報処理装置。
【請求項２】
前記第１のフォーマット変換部は、データを保持しているＣＰＵを前記第１のディレクトリに新たに登録する際、当該第１のディレクトリのうち、当該データを格納するデータ格納領域に対応するエントリが属するブロックのフォーマットが前記第２のフォーマットであり、当該第２のフォーマット上で当該データ格納領域に対応するエントリが登録されておらず、且つ、当該第２のフォーマット上の有効なエントリの個数が既に前記第２のフォーマットの規定値に至っている場合、当該ブロックのフォーマットを前記第１のフォーマットに変換することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１のフォーマット変換部は、
前記第１のフォーマット上で登録されている夫々のエントリのうち、前記第２のフォーマット上で登録するものを選択するエントリ選択部と、
当該選択されたエントリの登録内容に基づいて前記第２のフォーマット上のエントリに登録する内容を生成する登録内容生成部と、
前記エントリ選択部によって選択された前記第１のフォーマット上のエントリを識別する情報に基づいて前記第２のフォーマット上のエントリに登録する識別情報を生成する識別情報生成部と、を有し、前記第１のフォーマットを前記第２のフォーマットに変換する１−２変換部と、
前記第２のフォーマット上の各エントリに登録された前記識別情報に基づいて前記第１のフォーマット上のエントリを決定するエントリ決定部と、
前記第２のフォーマットの各エントリの登録内容に基づいて前記第１のフォーマット上で登録する内容を生成する登録内容生成部と、を有し、前記第２のフォーマットを前記第１のフォーマットに変換する２−１変換部と、を有することを特徴とする、請求項２に記載の情報処理装置。
【請求項４】
複数の第１のＣＰＵと、夫々が複数の第１のデータ格納領域を有する複数の第１のメモリと、を有する第１の情報処理部と、複数の第２のＣＰＵと、夫々が複数の第２のデータ格納領域を有する複数の第２のメモリと、を有する第２の情報処理部と、を含む情報処理装置の制御方法であって、
前記第１の情報処理部のディレクトリに、前記第１のデータ格納領域が格納するデータを保持しているＣＰＵを示す情報および当該ＣＰＵを有する情報処理部を示す情報のうちの少なくともいずれか一方の情報を、前記複数の第１のデータ格納領域のいずれかに夫々が対応する複数のエントリを有する第１のフォーマットで登録するステップと、
前記第１の情報処理部のフォーマット変換部が、前記複数のエントリのうちデータを使用しないものとして登録されたエントリを除くことによってエントリ数を減らした第２のフォーマットに変換するステップと、を有する情報処理装置の制御方法。
【請求項５】
前記第１の情報処理部のフォーマット変換部は、データを保持しているＣＰＵを示す情報を前記第１の情報処理部のディレクトリに新たに登録する際、当該データを格納するデータ格納領域に対応するエントリが属するブロックのフォーマットが前記第２のフォーマットであり、当該第２のフォーマット上で当該データ格納領域に対応するエントリが登録されておらず、且つ、当該第２のフォーマット上の有効なエントリの個数が既に前記第２のフォーマットの規定値に至っている場合、当該ブロックのフォーマットを前記第１のフォーマットに変換することを特徴とする請求項４に記載の情報処理装置の制御方法。
【請求項６】
前記第１の情報処理部のフォーマット変換部による前記第１のフォーマットを前記第２のフォーマットへ変換するステップは、
前記第１のフォーマット上の夫々のエントリのうち、前記第２のフォーマット上で登録するものを選択するエントリ選択ステップと、
当該選択されたエントリの登録内容に基づいて前記第２のフォーマット上で登録する内容を生成する登録内容生成ステップと、
前記エントリ選択ステップで選択されたエントリを識別する情報に基づいて前記第２のフォーマット上で登録する識別情報を生成する識別情報生成ステップと、を有し、
前記第１の情報処理部のフォーマット変換部による前記第２のフォーマットを前記第１のフォーマットへ変換するステップは、
前記第２のフォーマットの各エントリに登録された前記識別情報に基づき、前記第１のフォーマット上のエントリを決定するエントリ決定ステップと、
前記第２のフォーマットの各エントリの登録内容に基づき、前記第１のフォーマット上で登録する登録内容を生成する登録内容生成ステップと、を有することを特徴とする、請求項５に記載の情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および情報処理装置の制御方法に関する。
【背景技術】
【０００２】
以下の構成を有するメモリ制御装置が知られている。主ディレクトリ情報の各ノードフィールドにはデータのコピーを保持しているキャッシュメモリの番号を記憶する（第１の記憶方式）。ノードフィールドが不足した場合、ノードフィールドの１つにコピーを保持しているキャッシュメモリの数を記憶する（第２の記憶方式）。そして、いずれの記憶方式を取っているのかを、計数ビットフィールドをフラグとして判別する。【０００３】
又、以下の構成を有するマルチプロセッサシステムが知られている。メモリデータの複製を保持しているプロセッシングエレメントの情報をデータメモリに付随したディレクトリメモリに有する共有メモリ型マルチプロセッサにおいて、複数のプロセッシングエレメントをグループ化し、グループ単位にディレクトリ情報を保持する。【０００４】
又、ディレクトリがメモリのラインのステータス情報を保持していない場合、セル外の全てのプロセッサに対しスヌープのブロードキャストを行う構成のマルチプロセッサシステムが知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平６−４４１３６号公報
【特許文献２】特開平６−２５９３８４号公報
【特許文献３】特開２００９−７００１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
複数の情報処理部中の一の情報処理部のデータ格納領域に格納されたデータを保持しているＣＰＵ又は当該ＣＰＵを有する情報処理部を示す情報をデータ格納領域ごとに登録するディレクトリを効果的に使用し得る構成を提供することが課題である。
【課題を解決するための手段】
【０００７】
データ格納領域に格納されたデータを保持しているＣＰＵ又は当該ＣＰＵを有する情報処理部を示す情報をデータ格納領域ごとに登録する第１のフォーマットを、エントリ数を減らした第２のフォーマットに変換する構成を設ける。第１のフォーマットを第２のフォーマットに変換する際には、第１のフォーマットの複数のエントリのうちデータを使用しないものとして登録されたエントリを除くことによりエントリ数を減らした第２のフォーマットに変換する。
【発明の効果】
【０００８】
第２のフォーマットに変換することにより、各エントリに保持する情報量が増加し、データ格納領域に格納されたデータを保持しているＣＰＵおよび当該ＣＰＵを有する情報処理部を示す情報をより多く保持することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施例１の情報処理装置の構成例を示すブロック図である。
【図２Ａ】図１に示す構成例において、ＣＰＵがデータを取得する動作の流れを説明する図（その１）である。
【図２Ｂ】図１に示す構成例において、ＣＰＵがデータを取得する動作の流れを説明する図（その２）である。
【図２Ｃ】図１に示す構成例において、ＣＰＵがデータを取得する動作の流れを説明する図（その３）である。
【図２Ｄ】図１に示す構成例において、ＣＰＵがデータを取得する動作の流れを説明する図（その４）である。
【図３】本発明の実施例１の情報処理装置において適用可能なディレクトリの構成例を説明する図である。
【図４Ａ】参考例のディレクトリの構成例を説明する図である。
【図４Ｂ】本発明の実施例１の情報処理装置において適用可能なディレクトリ（Ａタイプ）の構成例を説明する図である。
【図５】本発明の実施例１の情報処理装置において適用可能なディレクトリ（Ｂタイプ）の構成例を説明する図である。
【図６】参考例においてＣＰＵから読み出し要求が受信された場合の動作の流れ（ＣＰＵ同士がデータを共有して持とうとする場合）を示すフローチャートである。
【図７Ａ】本発明の実施例１の情報処理装置においてＣＰＵから読み出し要求が受信された場合の動作の流れ（ＣＰＵ同士がデータを共有して持とうとする場合のその１）を示すフローチャート（その１）である。
【図７Ｂ】本発明の実施例１の情報処理装置においてＣＰＵから読み出し要求が受信された場合の動作の流れ（ＣＰＵ同士がデータを共有して持とうとする場合のその１）を示すフローチャート（その２）である。
【図８Ａ】本発明の実施例１の情報処理装置においてＣＰＵから読み出し要求が受信された場合の動作の流れ（ＣＰＵ同士がデータを共有して持とうとする場合のその２）を示すフローチャート（その１）である。
【図８Ｂ】本発明の実施例１の情報処理装置においてＣＰＵから読み出し要求が受信された場合の動作の流れ（ＣＰＵ同士がデータを共有して持とうとする場合のその２）を示すフローチャート（その２）である。
【図９】参考例においてＣＰＵから読み出し要求が受信された場合の動作の流れ（ＣＰＵ同士がデータを共有せずに持とうとする場合）を示すフローチャートである。
【図１０Ａ】本発明の実施例１の情報処理装置においてＣＰＵから読み出し要求が受信された場合の動作の流れ（ＣＰＵ同士がデータを共有せずに持とうとする場合）を示すフローチャート（その１）である。
【図１０Ｂ】本発明の実施例１の情報処理装置においてＣＰＵから読み出し要求が受信された場合の動作の流れ（ＣＰＵ同士がデータを共有せずに持とうとする場合）を示すフローチャート（その２）である。
【図１１Ａ】本発明の実施例１の情報処理装置において適用可能なディレクトリのフォーマットを変換する手順の一例について説明する図（ＡタイプからＢタイプ）である。
【図１１Ｂ】本発明の実施例１の情報処理装置において適用可能なディレクトリのフォーマットを変換する手順の一例について説明する図（ＢタイプからＡタイプ）である。
【図１２】本発明の実施例１の情報処理装置において適用可能なノードコントローラの機能ブロック図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施例につき、図とともに説明する。
【実施例１】
【００１１】
図１は、本発明の実施例１による情報処理装置のブロック構成例を示す。尚、情報処理装置は、コンピュータシステムとも称することができる。図１に示すように、実施例１による情報処理装置は、ｎ枚のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１（総称してボードＢと称する場合がある）を含む。ｎ枚のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１の各々は、例えばプリント配線基板であり、情報処理部とも称する。【００１２】
実施例１では、ｎ枚のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１は夫々同様の構成を有する。例えばボードＢ−０は、４個のＣＰＵ  Ｃ０１、Ｃ０２，Ｃ０３，Ｃ０４，および４個のメモリＭ０１，Ｍ０２，Ｍ０３，Ｍ０４を有する。又、各ＣＰＵはキャッシュメモリを有する。すなわち、ＣＰＵ  Ｃ０１，Ｃ０２，Ｃ０３，Ｃ０４は、夫々キャッシュメモリＣＡ０１，ＣＡ０２，ＣＡ０３，ＣＡ０４を有する。【００１３】
同様に、ボードＢ−１も、４個のＣＰＵ  Ｃ１１、Ｃ１２，Ｃ１３，Ｃ１４，および４個のメモリＭ１１，Ｍ１２，Ｍ１３，Ｍ１４を有する。ここでも、各ＣＰＵはキャッシュメモリを有する。すなわち、ＣＰＵ  Ｃ１１，Ｃ１２，Ｃ１３，Ｃ１４は、夫々キャッシュメモリＣＡ１１，ＣＡ１２，ＣＡ１３，ＣＡ１４を有する。【００１４】
同様に、ボードＢ−ｎ−１も、４個のＣＰＵ  Ｃｎ−１１、Ｃｎ−１２，Ｃｎ−１３，Ｃｎ−１４，および４個のメモリＭｎ−１１，Ｍｎ−１２，Ｍｎ−１３，Ｍｎ−１４を有する。ここでも各ＣＰＵはキャッシュメモリを有する。すなわち、ＣＰＵ  Ｃｎ−１１，Ｃｎ−１２，Ｃｎ−１３，Ｃｎ−１４は、夫々キャッシュメモリＣＡｎ−１１，ＣＡｎ−１２，ＣＡｎ−１３，ＣＡｎ−１４を有する。【００１５】
尚、夫々のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１が有するＣＰＵ  Ｃ０１〜Ｃ０４，Ｃ１１〜Ｃ１４，...，Ｃｎ−１１〜Ｃｎ−１４を総称してＣＰＵ  Ｃと称する場合がある。同様に、夫々のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１が有するメモリＭ０１〜Ｍ０４，Ｍ１１〜Ｍ１４，...，Ｍｎ−１１〜Ｍｎ−１４を総称してメモリＭと称する場合がある。同様に夫々のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１が有するキャッシュメモリＣＡ０１〜ＣＡ０４，ＣＡ１１〜ＣＡ１４，...，ＣＡｎ−１１〜ＣＡｎ−１４を総称してキャッシュメモリＣＡと称する場合がある。【００１６】
ボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１は、夫々ノードコントローラＮＣ−０，ＮＣ−１，...，  ＮＣ−ｎ−１（総称してノードコントローラＮＣと称する場合がある）を有する。ノードコントローラＮＣの構成については、図１２とともに後述する。ノードコントローラＮＣは、ボードＢ間のデータの転送を行うとともに、後述するディレクトリＤＲを使用して自己が属するボードＢ内のメモリ空間が格納するデータを保持するＣＰＵ、或いはデータを保持するＣＰＵを有するボードを認識する。【００１７】
ボードＢ内のメモリ空間とは、例えばボードＢ−０の場合、ボードＢ−０が有する４つのメモリＭ０１，Ｍ０２，Ｍ０３，Ｍ０４の夫々のメモリ空間全てを含むメモリ空間を意味する。そしてノードコントローラＮＣはＣＰＵ或いはボードに対し、必要に応じてスヌープの発行を行う。ここでスヌープの発行（スヌーピングとも言う）とは、キャッシュメモリＣＡとメモリＭとの間のデータの一貫性（キャッシュコヒーレンシ）を確保する動作である。具体的には、ノードコントローラＮＣはデータを共有する他のキャッシュメモリＣＡとの間で連絡を取り合い、必要に応じてキャッシュメモリＣＡ上のデータを消去する指示等を行う動作を言う。【００１８】
又、ノードコントローラＮＣ−０，ＮＣ−１，...，  ＮＣ−ｎ−１は、夫々ディレクトリＤＲ−０，ＤＲ−１，...，ＤＲ−ｎ−１（総称してディレクトリＤＲと称する場合がある）を有する。ディレクトリＤＲの構成は図３〜図５とともに後述する。ノードコントローラＮＣは、自身が属するボードＢ内のメモリ空間に格納されたデータを保持するＣＰＵ  Ｃ、或いはデータを保持するＣＰＵ  Ｃを有する他のボードＢを識別する情報を自己のディレクトリＤＲに登録して管理する。又、ディレクトリＤＲは、更に、任意のＣＰＵ Ｃが保持するデータが他のＣＰＵ  Ｃと共有されている(Shared)か、データがＣＰＵ  Ｃに排他的に保持されている(Exclusive)か、或いは無効(Invalid)かを示す情報を保持する。尚、ディレクトリＤＲの実体は記憶装置（或いは記憶領域）であり、記憶装置の記憶領域がノードコントローラＮＣによって管理される。尚、データが「無効(Invalid)」とは、そのデータを「使用しない」（使用が禁じられている）ことを示す。【００１９】
又、図１の情報処理装置では、各ボードＢ内の各ＣＰＵは各々、メモリＭに接続されている。ボードＢ−０の場合で説明すると、ＣＰＵ  Ｃ０１はメモリＭ０１に接続されている。同様に，ＣＰＵ  Ｃ０２はメモリＭ０２に，ＣＰＵ  Ｃ０３はメモリＭ０２に，ＣＰＵ  Ｃ０４はメモリＭ０４に、夫々接続されている。又、同一のボードに搭載されているＣＰＵ  Ｃ０１，Ｃ０２，Ｃ０３，Ｃ０４は相互に通信可能なように接続される。又、ノードコントローラＮＣ−０は、ＣＰＵ  Ｃ０１，Ｃ０２，Ｃ０３，Ｃ０４の夫々と通信可能なように接続される。そして、夫々のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１が有するノードコントローラＮＣ−０，ＮＣ−１，...，  ＮＣ−ｎ−１同士も通信可能なように接続されている。【００２０】
図１に示す構成の情報処理装置において、あるボードＢに属するあるＣＰＵ  Ｃ、例えばボードＢ−０のＣＰＵ  Ｃ０２がデータを必要とした場合を想定する。ＣＰＵ  Ｃ０２のキャッシュメモリＣＡ０２がデータを保持する場合には、図２Ａに示す如く、ＣＰＵ  Ｃ０２はキャッシュメモリＣＡ０２からデータを取得する（ステップＳ１）。【００２１】
次に、自己のキャッシュメモリＣＡ０２がデータを保持しない場合、図２Ｂに示す如く、ＣＰＵ  Ｃ０２は、読み出し要求（以下、単にリード要求と称する）を、自身が搭載されているボードＢ−０内のノードコントローラＮＣ−０に発行する（ステップＳ１１）。ノードコントローラＮＣ−０は、ＣＰＵ  Ｃ０２からのリード要求を受けると、リード対象のデータを管理しているボードＢを調べる。ここで各ノードコントローラＮＣは、ｎ枚のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１各々のデータ格納領域を識別するアドレスを管理しているボードＢを認識する。言い換えると、個々のノードコントローラＮＣは、情報処理装置のメモリ空間内の各アドレスが、どのボードＢ内のメモリＭのアドレスであるのかを認識し、リード要求の対象となるアドレスを管理しているボードに属するノードコントローラを認識する。この目的のため、ノードコントローラＮＣは、例えば、情報処理装置のメモリ空間におけるアドレスと、当該アドレスを管理するボードＢとの対応関係を示すテーブルデータを有する。尚、「夫々のアドレスを管理するボードＢ」とは、当該アドレスを有するメモリＭが属するボードＢを意味する。【００２２】
ノードコントローラＮＣ−０は、リード要求を受け、例えばテーブルデータを参照することにより、リードの対象のデータのアドレスを管理しているボードＢがボードＢ−１であることを認識する。すなわち、リード対象データのアドレスはボードＢ−１が有する４つのメモリＭ１１，Ｍ１２，Ｍ１３，Ｍ１４の何れかに属し、アドレスにリード対象データが格納されている。ノードコントローラＮＣ−０は次に，リード要求をボードＢ−１のノードコントローラＮＣ−１に転送する（ステップＳ１２）。【００２３】
ノードコントローラＮＣ−0からリード要求を受けたノードコントローラＮＣ−１は、自己のディレクトリＤＲ−１を検索する（ステップＳ１３）。検索の結果、リード要求に対応するアドレスに格納されているデータを保持するＣＰＵがボードＢ−０のＣＰＵ  Ｃ０１であり、且つ、ＣＰＵ  Ｃ０１はデータを排他的(Exclusive)に保持していることが判明したとする。ここで「ＣＰＵ  Ｃがデータを保持する」とは、ＣＰＵ  ＣのキャッシュメモリＣＡがデータを保持していることを意味する。又、「排他的に保持する」とは、現在データを(Invalidでなく)保持するＣＰＵ  Ｃは、全ボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１が有するＣＰＵ  Ｃのうち、ＣＰＵ Ｃ０１のみであることを意味する。【００２４】
この場合、ノードコントローラＮＣ−１はＣＰＵ Ｃ０１に対しスヌープを発行するとともに、自己のディレクトリＤＲ−１を更新する（ステップＳ１４）。具体的には、スヌープを発行することで、ＣＰＵ  Ｃ０１に対し、自己が保持するリード対象のデータを当該データを求めているリクエスタＣＰＵ  Ｃ０２に転送するとともに、自己が保有するリード対象のデータを消去することを指示する。スヌープを受けたＣＰＵ  Ｃ０１は、自己が保持するデータをリクエスタＣＰＵ  Ｃ０２に転送する（ステップＳ１５）とともに、リクエスタCPUに転送したデータを自己のキャッシュメモリＣＡ０１から消去する。【００２５】
更に、ノードコントローラＮＣ−１は、自己のディレクトリＤＲ−１中、リード対象のデータが格納されたアドレスに係るエントリを更新する（ステップＳ１４）。具体的には、当該アドレスに格納されたデータは、元はＣＰＵ Ｃ０１が保持していたが、これがＣＰＵ  Ｃ０２に転送され、ＣＰＵ  Ｃ０１からは消去されている。その結果、現在はＣＰＵ  Ｃ０２がデータを排他的に保持しているため、ディレクトリＤＲ−１のエントリは、ＣＰＵ  Ｃ０２がデータを排他的に保持することを示す情報に更新される。尚、リード要求を発行するＣＰＵ（上記の例の場合、ＣＰＵ Ｃ０２）を、リクエスタＣＰＵと称することがある。【００２６】
次に、リクエスタＣＰＵ  Ｃ０２がリード要求を発行（ステップＳ２１）し、リード対象のデータが、ＣＰＵ  Ｃ０２が属するボードＢ−０内のメモリ、すなわち４つのメモリＭ０１，Ｍ０２，Ｍ０３，Ｍ０４のうち、メモリＭ０３に属するアドレスに格納されていたとする。この場合、ＣＰＵ  Ｃ０２から発行されたリード要求を受けたノードコントローラＮＣ−０が、自己のディレクトリＤＲ−０を検索する（ステップＳ２２）。検索の結果、ディレクトリＤＲ−０の情報により、リード要求に対応するアドレスに格納されているデータを（Invalidでなく）保持するＣＰＵが、情報処理装置内に存在しないことが判明したとする。この場合ノードコントローラＮＣ−０は、リード対象のデータが格納されたメモリＭ０３から直接読み出して、リクエスタＣＰＵ（Ｃ０２）に対し読み出したデータを転送する（ステップＳ２３）。【００２７】
次に、リクエスタＣＰＵが属するボードBとは別のボードBのＣＰＵが保持するデータを転送する場合につき、図２Ｄとともに説明する。図２Ｂの場合と同様、自己のキャッシュメモリＣＡ０２がデータを有さないため、ＣＰＵ  Ｃ０２は、リード要求をボードＢ−０内のノードコントローラＮＣ−０に発行する（ステップＳ３１）。ノードコントローラＮＣ−０は、ＣＰＵ  Ｃ０２からリード要求を受けると、テーブルデータを参照することにより、リード対象データを管理するボードＢを調べる。ここでも、図２Ｂの場合同様、リードの対象のデータのアドレスを管理しているボードがボードＢ−１であるとする。この場合ノードコントローラＮＣ−０は次に，当該リード要求をボードＢ−１のノードコントローラＮＣ−１に転送する（ステップＳ３２）。【００２８】
ノードコントローラＮＣ−0からリード要求を受けたノードコントローラＮＣ−１は、自己のディレクトリＤＲ−１を検索する（ステップＳ３３）。検索の結果、リード要求に対応するアドレスに格納されているデータを保持するＣＰＵがボードＢ−１のＣＰＵ  Ｃ１２であり、且つ、ＣＰＵ  Ｃ１２はリード対象データを排他的に保持していることが判明したとする。この場合、ノードコントローラＮＣ−１はＣＰＵ Ｃ１２に対しスヌープを発行するとともに、自己のディレクトリＤＲ−１を更新する（ステップＳ３４）。その結果、スヌープを受けたＣＰＵ  Ｃ１２は、自己が保持するリード対象のデータをＣＰＵ  Ｃ０２に転送する（ステップＳ３５）とともに、当該データを自己のキャッシュメモリＣＡ０１から消去する。更に、ノードコントローラＮＣ−１は、自己のディレクトリＤＲ−１中、リード対象のデータが格納されたアドレスに係るエントリを更新する（ステップＳ３４）。すなわち、当該アドレスに格納されたデータがＣＰＵ  Ｃ０２によって排他的に保持されていることを示す情報にディレクトリＤＲ−1を更新する。【００２９】
次に、図３とともに、実施例１に適用可能なディレクトリＤＲの構成例について説明する。図３中、左端に、例えば各ボードＢが有するメモリ空間のうちの一部分のメモリ空間ＭＳを模式的に示す。メモリ空間ＭＳには一例としてメモリ番地ＭＡ（アドレス）０ｘ０００〜０ｘ１０００が付与される。又、図３には、メモリ空間ＭＳに対応するディレクトリＤＲの部分ＤＲＲが示されている。メモリ空間ＭＳのメモリ番地０ｘ０００〜０ｘ１０００の各々（例えばＭＳ−ｉ）は、例えば６４バイトの容量を有するデータ格納領域に対し、付与される。【００３０】
ディレクトリＤＲでは、メモリ空間の６４バイトの各データ格納領域（例えばＭＳ−ｉ）に対し、１つのエントリ（２バイト）ＤＥ−ｉが割り当てられる。又、実施例１では、ノードコントローラＮＣがディレクトリＤＲに対する１回のアクセスで扱うブロックＤＲＲ−ｂのサイズは３２エントリである。図３では説明の便宜上、３２エントリのブロックＤＲＲ−ｂ（合計サイズ：２×３２＝６４バイト）を、８段×８バイト（６４ビット）の構成を有するものとして示している。ブロックＤＲＲ−ｂは上記の如く３２エントリを含み、各エントリは、例えば図３中、エントリＤＥ−ｊで示す構成を有する。尚、ディレクトリＤＲにおける各エントリの場所によって、対応するメモリ空間のメモリ番地が一意に決まる。又、ノードコントローラＮＣは、メモリ空間の各メモリ番地（アドレス）に対応するディレクトリＤＲ内のエントリの場所を認識している。したがってノードコントローラＮＣは、データを保持するＣＰＵ  Ｃ或いはボードＢを調べる場合、当該データのアドレス（すなわちメモリ空間上のメモリ番地）に基づき、ディレクトリＤＲ中の対応するエントリを認識する。【００３１】
次に図４Ａとともに、参考例のディレクトリのフォーマットについて説明する。図４Ａの例の場合、３２エントリのブロックＤＤＲ−ｂ１に含まれる各エントリＤＥ−ｊ１は、Ａ−１タイプのＤＥ−ｋ１と、Ａ−２タイプのＤＥ−ｋ２との２種類のフォーマットのうちの何れかのフォーマットを有する。Ａ−１タイプのエントリＤＥ−ｋ１では、２バイト（１６ビット）中、最初の２ビットが使用されず（Reserved）、次の２ビットがステータスビット（図中ステータス）ＳＢである。ステータスビットＳＢは、ＣＰＵ  Ｃが保持するデータが無効（Invalid:００）か、他のＣＰＵ  Ｃと共有されているか（Shared:０１）、或いは排他的に保持されている(Exclusive:１０)、を示す。【００３２】
次の６ビットはノードＩＤ(IDentifier)を示すビットＮＩＤ１であり、６ビットの内訳は、４ビットのボードＩＤと、２ビットのＣＰＵ−ＩＤとである。ここでボードＩＤとは、ｎ枚のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１の各々を識別する情報であり、例えばボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１の夫々のボードＩＤは、０，１，...，ｎ−１である。又、ＣＰＵ−ＩＤは、各ボード内のＣＰＵ  Ｃを識別する情報であり、例えば、ボードB-0のＣＰＵ  Ｃ０１，Ｃ０２，Ｃ０３，Ｃ０４は夫々ＣＰＵ−ＩＤ  ０，１，２，３を有する。同様にボードB-1のＣＰＵ  Ｃ１１，Ｃ１２，Ｃ１３，Ｃ１４も、夫々ＣＰＵ−ＩＤ  ０，１，２，３を有する。同様にボードB-nのＣＰＵ  Ｃｎ−１１，Ｃｎ−１２，Ｃｎ−１３，Ｃｎ−１４も、夫々ＣＰＵ−ＩＤ  ０，１，２，３を有する。【００３３】
エントリＤＥ−ｋ１の次の６ビットもノードＩＤ(IDentifier)を示すビットＮＩＤ２である。その内訳は、上記したノードＩＤを示すビットＮＩＤ１と同様である。  ノードＩＤ  ＮＩＤ２は、ノードＩＤ  ＮＩＤ１が対応しているノードとは別のノードに対応している。【００３４】
ノードＩＤは、データを保持するノードの識別情報が付与される。つまり、ボードＩＤにはデータを保持するボードの識別情報が、ＣＰＵ−ＩＤにはボードＩＤが示すボードに搭載されたＣＰＵのうち、データを保持するＣＰＵの識別情報が、夫々記録される。【００３５】
このようにＡ−１タイプの場合、各エントリは２個のノードＩＤを保持し得る。その結果、データを共有するＣＰＵが２個以内の場合には、データを共有する全てのＣＰＵを示す情報をエントリＤＥ−ｋ１に保持できる。しかしながら、データを共有するＣＰＵ  Ｃが３個以上の場合には、エントリのサイズの関係上、データを共有する全てのＣＰＵ  Ｃを示す情報を保持できない。【００３６】
Ａ−２タイプは、データを共有するＣＰＵ  Ｃが３個以上の場合にも、３個以上のボードＩＤを示す情報を保持することができる。Ａ−２タイプのエントリＤＥ−ｋ２のフォーマットは、図４Ａに示す如く、最初の２ビットが使用されず（Reserved）、次の２ビットがステータスビットＳＢである。ステータスビットＳＢは、エントリがＡ−２タイプであることを示す情報（１１）を保持する。エントリＤＥ−ｋ２の次の１２ビットがボードビットマップＢＢＭを示す。ここでは情報処理装置が有する全ボード数が１２の場合を想定し、ＢＢＭの各ビットが１２枚のボードの夫々に対応し、対応するビットが"１"のボードがデータを共有していることを示す。したがって、例えばボードＩＤが３，７，９の夫々のボードのＣＰＵがデータを保持する場合、ボードビットマップＢＢＭは００１０００１０１０００となる。【００３７】
Ａ−２タイプのエントリＤＥ−ｋ２の場合、データを共有するＣＰＵ  Ｃが３個以上の場合に対処できるが、エントリにはボードＩＤのみが示され個別のＣＰＵ−ＩＤが示されないため、データを保持しているＣＰＵを特定できない。その結果、スヌープの発行を行う場合、該当するボードが有する全てのＣＰＵに対しスヌープを発行する必要がある。したがって、Ａ−２タイプのエントリを用いる場合には、スヌープの発行数が増加して情報処理装置のシステムの性能が低下する場合が想定される。【００３８】
実施例１ではこのような問題点に鑑み、ディレクトリＤＲのフォーマットを工夫することにより、３個以上のＣＰＵがデータを共有する場合であってもスヌープの発行数の増加を避けることを可能にする。【００３９】
実施例１ではノードコントローラＮＣにおいて、図１１Ａ，１１Ｂ、１２とともに後述するフォーマット変換部ＦＣを設ける。実施例１の場合、ディレクトリＤＲは図４Ｂに示すＡタイプ（Ａｘ−１タイプ及びＡｘ−２タイプを含む）のフォーマットを使用する。そしてデータを共有するＣＰＵ  Ｃが３個以上となる場合に、図４ＢのＡタイプのフォーマットを図５に示すＢタイプのフォーマット（後述）に変換（以下、フォーマット変換と称する）する。尚、ＡタイプからＢタイプへのフォーマット変換は、ディレクトリＤＲのブロックごとに行う。その結果、ディレクトリＤＲのブロックのうち、あるブロックはＡタイプのフォーマットを有し、他のブロックはＢタイプのフォーマットを有する、という状態となり得る。なお、同一ブロック内では、ＡタイプのフォーマットとＢタイプのフォーマットとは混在しない。又、ディレクトリＤＲの各ブロックに属する夫々のエントリはフォーマット変換によって変動せず、常に固定されている。すなわちＢタイプの場合、後述するようにブロックごとに登録可能なエントリ数が最大で８であるため、１ブロックに属する３２エントリの全ての情報を同一ブロック内には登録できない。しかしながらＢタイプの場合であっても、当該ブロックに属する３２エントリの全ての情報をブロック内に登録できないだけであって、３２エントリが当該ブロックに属する事実は維持される。これは、ノードコントローラＮＣが、自己が管理するアドレスに対応するディレクトリＤＲのエントリを、その場所によって認識することにより、確保される。【００４０】
図４Ｂのフォーマットは、図４Ａのフォーマットとほぼ同様であり、重複する説明を省略する。図４Ｂに示すブロックＤＲＲ−ｂ２に含まれるエントリＤＥ−ｊ２がＡｘ−１タイプの場合（ＤＥ−ｋ３）、上述した図４ＡのＡｘ−１タイプと異なり、最初の１ビットがフォーマットビットＦＢである。フォーマットビットＦＢはエントリのフォーマットタイプを示す。フォーマットビットＦＢが"１"の場合はエントリがＡタイプであることを示し、"０"である場合はエントリがＢタイプであることを示す。図４Ｂに示すエントリＤＥ−ｋ３はＡｘ−１タイプであるため、フォーマットビットＦＢは"１"である。同様に、図４Ｂに示すブロックＤＲＲ−ｂ２に含まれるエントリＤＥ−ｊ２がＡｘ−２タイプの場合（ＤＥ−ｋ４）も、図４ＡのＡｘ−２タイプと異なり、エントリの最初の１ビットがフォーマットビットＦＢである。図４Ｂに示すエントリＤＥ−ｋ４はＡｘ−２タイプであるため、フォーマットビットＦＢは"１"である。【００４１】
次に図５とともに、Ｂタイプのフォーマットについて説明する。図５に示す如く、Ｂタイプのフォーマットでは、ブロックＤＤＲ−ｂ３のサイズ（６４バイト）は図４Ｂに示すＡタイプのフォーマットのブロックＤＤＲ−ｂ２と同様であるが、図５の例ではブロック内のエントリ数が８である。したがってＢタイプの各エントリＤＥ−ｋ５のサイズは８バイト（６４ビット）である。各エントリＤＥ−ｋ５の内訳を以下に示す。【００４２】
エントリＤＥ−ｋ５の最初の１ビットはフォーマットビットＦＢである。図５に示すエントリＤＥ−ｋ５はＢタイプであるため、フォーマットビットＦＢは"０"である。次の２ビットはステータスビットＳＢである。ステータスビットＳＢは、当該エントリが空（empty: 00）か、データが２個以内のＣＰＵで共有されている（Shared: 01）か、排他的に保持されている（Exclusive: 10）か、或いはデータが３個以上のＣＰＵで共有されている（Shared: 11）か、を示す。尚、データが無効(Invalid)の場合、当該データに対応するエントリはブロックＤＤＲ−ｂ２には含まれない。【００４３】
次の５ビットはアドレスビットＡＢであり、当該エントリが、Ａタイプのフォーマットのブロックのどのエントリに対応するかを示す情報である。エントリDE-ｋ５の残りの５６ビットには、ｎ個のＣＰＵ−ビットマップＢＩＤ０，ＢＩＤ１，...，ＢＩＤｎ−１が保持される。ｎ個のＣＰＵ−ビットマップＢＩＤ０，ＢＩＤ１，...，ＢＩＤｎ−１は、ｎ個のボードＢ−０，Ｂ−１，...，Ｂ−ｎ−１（ボードＩＤ：０〜ｎ−１）に夫々対応する。ボードの枚数が１２の場合、ＣＰＵ−ビットマップも１２個となる。又、ＣＰＵ−ビットマップＢＩＤ０，ＢＩＤ１，...，ＢＩＤｎ−１の各々は４ビットを有し、４ビットの夫々が、各ボードＢに含まれる４個のＣＰＵに対応する。【００４４】
例えばボードＢ−１のＣＰＵのうち、ＣＰＵ−ＩＤが１，３のＣＰＵがデータを保持する場合、ボードＢ−１に対応するＣＰＵ−ビットマップＢＩＤ１は、"１０１０"となる。同様に、ボードＢ−１のＣＰＵのうち、ＣＰＵ−ＩＤが２のＣＰＵだけがデータを保持する場合、ボードB-1に対応するＣＰＵ−ビットマップＢＩＤ１は、"０１００"となる。ボードＢ−１のＣＰＵのうち、ＣＰＵ−ＩＤが０，１，２，３のＣＰＵ（４個全て）がデータを保持する場合、ボードB-1に対応するＣＰＵ−ビットマップＢＩＤ１は、"１１１１"となる。【００４５】
尚、ボード数が１２の場合、ＣＰＵ−ビットマップＢＩＤ０，ＢＩＤ１，...，ＢＩＤ１１によって合計４８ビットが使用され、残りの８ビットは使用されない（Reserved）。【００４６】
上記の如く、図４Ｂに示すＡタイプのフォーマットでは、ディレクトリＤＲの各エントリのサイズ（２バイト）の関係から、データを共有する全てのＣＰＵ  Ｃを特定する情報を保持できない場合がある。これに対し図５に示すＢタイプのフォーマットでは、各エントリのサイズ（８バイト）が大きいため、データを共有する全てのＣＰＵ  Ｃを特定する情報をエントリ内に保持することができる。その結果、図５を用いた例では、例えばＡｘ−２タイプを用いている場合のようにディレクトリＤＲで特定されるボードＢ内の全てのＣＰＵ  Ｃに対しスヌープを発行する必要がなく、ディレクトリＤＲで特定されるＣＰＵ  Ｃに対してのみスヌープを発行すればよい。したがって、Ｂタイプのフォーマットを用いることにより、スヌープの発行数の増加による情報処理装置のシステムの性能の低下を防止できる。又、実施例１によれば、Ａタイプのフォーマットを、必要に応じてブロックごとにＢタイプのフォーマットに変換するため、ディレクトリＤＲの容量を増加することなく、情報処理装置の性能の低下を防止することができる。【００４７】
尚、Ｂタイプのフォーマットの場合、ブロックごとに保持できるエントリ数が８である。したがって当該ブロックに（Invalidでなく）保持すべきエントリ数が９以上の場合、フォーマットをＡタイプ（例えばＡｘ−２タイプ）に変換する。ここで、「ブロックにつき保持すべきエントリ数」とは、当該ブロックに属する３２エントリの夫々に対応するメモリ空間内の３２個のデータ格納領域のうち、ＣＰＵ  Ｃが(Invalidでなく)データを保持しているデータ格納領域の個数を意味する。ここで「データの個数」とは、１個のデータ格納領域に格納されているデータを「１個」として数える。【００４８】
図６は、図４Ａの参考例においてＣＰＵ  Ｃからリード要求を受信した場合のノードコントローラＮＣの動作の流れを示すフローチャートである。図６は特に、ＣＰＵ同士がデータを共有して持とうとする場合の動作を示す。【００４９】
図６中、ステップＳ１０１で、リードの対象データのアドレスを管理するノードコントローラＮＣがリクエスタＣＰＵ  Ｃからリード要求を受信すると、ノードコントローラＮＣは自己のディレクトリＤＲを検索する（ステップＳ１０２）。検索の結果得たディレクトリＤＲのエントリのステータスビットＳＢがInvalidを示す場合（ステップＳ１０３  ＹＥＳ）、ステップＳ１０４に進み、そうでない場合（ステップＳ１０３  ＮＯ）ステップＳ１０７に進む。【００５０】
ここで、検索で得たディレクトリＤＲのエントリとは、リードの対象データのアドレスに対応するエントリであり、以下、自エントリと称する。又、同じブロック内の自エントリ以外のエントリを他エントリと称する。尚、エントリのステータスビットＳＢがInvalid（００）ということは、図４Ａに示す如く、エントリがＡｘ−１タイプであることを意味する。Ａｘ−２タイプのフォーマットではステータスビットＳＢは常に１１であるからである。【００５１】
ステップＳ１０４で、ノードコントローラＮＣは自エントリに対応するメモリＭ上のデータ格納領域からデータを読み出して、リクエスタＣＰＵ  Ｃに転送する（ステップＳ１０４）。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、自エントリのステータスビットＳＢをExclusiveとして、リクエスタＣＰＵ  ＣのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する（ステップＳ１０５、Ｓ１０６）。【００５２】
ステップＳ１０７では、自エントリのステータスビットＳＢがExclusiveか否か判定する。ステータスビットがExclusiveの場合（Ｓ１０７ ＹＥＳ）、ステップＳ１０８に進み、そうでない場合（Ｓ１０７のＮＯ）、ステップＳ１１１に進む。尚、ステータスビットＳＢがExclusive（１０）ということは、図４Ａに示す如く、エントリがＡｘ−１タイプであることを意味する。【００５３】
ステップＳ１０８でノードコントローラＮＣは、自エントリに登録されているＣＰＵに対しスヌープを発行し、スヌープを発行したＣＰＵに対し、自エントリのデータの保持形態をExclusiveからSharedに変更することを通知する。次にステップＳ１０９でノードコントローラＮＣは、スヌープの宛先のＣＰＵからのデータをリクエスタＣＰＵに対し転送する。次にステップＳ１１０でノードコントローラＮＣは、自エントリのステータスビットＳＢをSharedとして、リクエスタＣＰＵ  ＣのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する（ステップＳ１０５、Ｓ１０６）。【００５４】
ステップＳ１１１では、自エントリのステータスビットＳＢがSharedか否かを判定する。尚、ステータスビットＳＢがShared（０１）ということは、図４Ａに示す如く、エントリがＡｘ−１タイプであることを意味する。ステータスビットがSharedの場合（Ｓ１１１  ＹＥＳ），ステップＳ１１２に進み、そうでない場合（Ｓ１１１  ＮＯ），ステップＳ１１５に進む。【００５５】
ステップＳ１１２でノードコントローラＮＣは、自エントリに対応するメモリＭ上のデータ格納領域からデータを読み出して、リクエスタＣＰＵに転送する。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、自エントリのステータスビットＳＢを１１として、リクエスタＣＰＵ  Ｃを有するボードＢのボードＩＤを自エントリに、Ａｘ−２タイプのフォーマットで登録する（ステップＳ１１３、Ｓ１１４）。【００５６】
すなわち、ステップＳ１１１で自エントリのステータスビットＳＢがSharedの場合、既に自エントリには２個のＣＰＵ  Ｃが登録されていることを意味する。そのような状態で自エントリに更にリクエスタＣＰＵを登録するため、自エントリに登録するＣＰＵの数が３となる。したがって自エントリを、エントリに登録し得るＣＰＵ数の最大値が２のＡｘ−１タイプのフォーマットから、エントリに登録し得るボード数が３以上のＡｘ−２タイプのフォーマットに変更する。そして、ノードコントローラＮＣは、すでに自エントリに登録されていた２個のＣＰＵを有するボードＢのボードＩＤとともに、リクエスタＣＰＵを有するボードＢのボードＩＤを登録する。【００５７】
尚、ステップＳ１１２，Ｓ１１５においてメモリＭからデータを転送する理由は以下の通りである。すなわち、ステップＳ１１２，Ｓ１１５の場合、データを保持するＣＰＵが２個以上である。この参考例の場合、一律、メモリＭからデータを読み出して転送することにして制御の簡便化を図る。【００５８】
ステップＳ１１５でノードコントローラＮＣは、自エントリに対応するメモリＭ上のデータ格納領域からデータを読み出して、リクエスタＣＰＵに転送する。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、リクエスタＣＰＵ  Ｃを有するボードＢのボードＩＤを自エントリに登録する（ステップＳ１１６、Ｓ１１４）。すなわち、ステップＳ１１１で自エントリのステータスビットＳＢがSharedでない場合（Ｓ１１１のＮＯ）、Ｓ１０３  ＮＯ，Ｓ１０７  ＮＯを経ており、ステータスがInvalidでもExclusiveでもない。したがってこの場合、ステータスビットＳＢは１１であり、自エントリがＡｘ−２タイプであることがわかる。【００５９】
図７Ａ，７Ｂは、実施例１の情報処理装置においてＣＰＵ  Ｃからリード要求を受信した場合のノードコントローラＮＣの動作の流れを示すフローチャートである。図７Ａ、図７Ｂは特に、ＣＰＵ同士がデータを共有して持とうとする場合の動作例を示す。尚、ＣＰＵ同士がデータを共有して(Sharedで)持とうとするか、或いは排他的に(Exclusiveで)データを持とうとするかは、外部から与えられる命令によって決定される。【００６０】
図７Ａ中、ステップＳ１２１で、リードの対象データのアドレスを管理するノードコントローラＮＣがリクエスタＣＰＵ  Ｃからリード要求を受信すると、ノードコントローラＮＣは自己のディレクトリＤＲを検索する（ステップＳ１２２）。検索の結果得た自エントリが属するブロックのフォーマットがＢタイプの場合（ステップＳ１２３  Ｂ−ｔｙｐｅ）、ステップＳ１２４に進み、フォーマットがＡタイプの場合（ステップＳ１２３  Ａ−ｔｙｐｅ）、図７ＢのステップＳ１３８に進む。ブロックのフォーマットは、ＦＢの参照などで判別可能である。【００６１】
Ｓ１２３でブロックのフォーマットがＢタイプであると判別された場合、ステップＳ１２４でノードコントローラＮＣは、自エントリがＢタイプのフォーマットでブロック上にすでに存在するか否かを判別する。自エントリがブロックにすでに存在している場合（ステップＳ１２４  ＹＥＳ）、ステップＳ１２５に進み、一方自エントリがまだブロック内に存在しない場合（ステップＳ１２４  ＮＯ），ステップＳ１３０に進む。尚、Ｂタイプのフォーマットでブロック内に登録し得る最大エントリ数は８である。したがってＢタイプのフォーマットのブロック上に自エントリが存在しない場合があり得る。【００６２】
Ｓ１２４で自エントリがブロック内に存在すると判定された場合、ステップＳ１２５でノードコントローラＮＣは、自エントリのステータスビットＳＢを判別する。自エントリのステータスビットＳＢがExclusiveであれば（ステップＳ１２５  Ｅ），ステップＳ１２６に進み、Sharedであれば（ステップＳ１２５ Ｓ）、ステップＳ１２９に進む。
ステップＳ１２６でノードコントローラＮＣは、自エントリに登録されたＣＰＵに対しスヌープを発行し、スヌープを発行したＣＰＵに対し、当該データの保有形態をExclusiveからSharedに変更する旨を通知する。又、このとき、自エントリのステータスビットＳＢをSharedに変更する。次にステップＳ１２７でノードコントローラＮＣは、スヌープの宛先のＣＰＵからのデータをリクエスタＣＰＵに転送する。このとき、リクエスタＣＰＵは自己のキャッシュメモリに転送されたデータを保持する。次にステップＳ１２８でノードコントローラＮＣは、自エントリにリクエスタＣＰＵのＣＰＵ−ＩＤを登録する。【００６３】
一方、Ｓ１２５で自エントリのステータスビットＳＢがSharedであると判定された場合、ステップＳ１２９でノードコントローラＮＣは、メモリＭからデータを読み出してリクエスタＣＰＵに転送する。このとき、リクエスタＣＰＵは自己のキャッシュメモリに転送されたデータを保持する。次にステップＳ１２８でノードコントローラＮＣは、自エントリにリクエスタＣＰＵのＣＰＵ−ＩＤを登録する。【００６４】
ブロック内に自エントリが存在しない場合、ステップＳ１３０でノードコントローラＮＣは、ブロックに既にエントリが８個登録済みであるか否かを判別する。ブロック内に他エントリが８個登録済みであれば（ステップＳ１３０  ＹＥＳ）、ステップＳ１３３に進み、登録された他エントリ数が８個未満であれば（ステップＳ１３０  ＮＯ），ステップＳ１３１に進む。
ブロックにエントリが８個登録されていない場合、ステップＳ１３１でノードコントローラＮＣは、メモリＭからデータを読み出して、リクエスタＣＰＵに転送する。このとき、リクエスタＣＰＵは自己のキャッシュメモリに転送されたデータを保持する。次にステップＳ１３２，Ｓ１２８でノードコントローラＮＣは、ステータスビットＳＢをExclusiveとして自エントリをブロックに追加し、追加した自エントリにリクエスタＣＰＵのＣＰＵ−ＩＤを登録する。【００６５】
一方、ブロックに他エントリが８個登録済みの場合、ステップＳ１３３でノードコントローラＮＣは、ブロックのフォーマットをＢタイプからＡタイプにフォーマット変換する。ここで、まずブロックに追加する自エントリに対応するデータをメモリＭから読み出してリクエスタＣＰＵに転送する（ステップＳ１３４）。そして自エントリのステータスビットＳＢをExclusiveとして（ステップＳ１３５）、Ａｘ−１タイプのフォーマットで自エントリをブロックに追加し、自エントリにリクエスタＣＰＵのＣＰＵ−ＩＤとリクエスタＣＰＵが搭載されているボードのボードＩＤとを登録する（ステップＳ１３６）。【００６６】
他方、ブロックに既に登録済みの８個の他エントリのうち、登録されているＣＰＵの個数が２個以内のエントリについては、Ａｘ−１タイプのフォーマットで夫々のボードＩＤとＣＰＵ−ＩＤとを登録する（ステップＳ１３６）。又、このとき、Ｂタイプのフォーマット上でステータスビットＳＢがemptyであったエントリにつき、Ａｘ−１タイプのフォーマットでステータスビットＳＢをInvalidとしてブロックに登録する。更に、上記８個に含まれなかった、当該ブロックに属する他のエントリについても、Ａｘ−１タイプのフォーマットでステータスビットＳＢをInvalidとしてブロックに登録する。又、ブロックに既に登録済みの８個の他エントリのうち、登録されているＣＰＵの個数が３個以上のエントリについては、Ａｘ−２タイプのフォーマットで夫々のボードＩＤをブロックに登録する（ステップＳ１３７）。【００６７】
ブロックのフォーマットがＡタイプの場合、図７ＢのステップＳ１３８でノードコントローラＮＣは、自エントリのステータスビットＳＢがInvalidを示すか否かを判別し、Invalidを示す場合（ステップＳ１３８  ＹＥＳ）、ステップＳ１３９に進み、そうでない場合（ステップＳ１３８  ＮＯ）ステップＳ１４１に進む。尚、ステータスビットＳＢがInvalid（００）ということは、図４Ｂに示す如く、エントリがＡｘ−１タイプであることを意味する。【００６８】
ステップＳ１３９でノードコントローラＮＣは、自エントリに対応するメモリＭ上のデータ格納領域からデータを読み出して、リクエスタＣＰＵ  Ｃに転送する。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、自エントリのステータスビットＳＢをExclusiveとして、リクエスタＣＰＵ  ＣのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する（ステップＳ１４０、Ｓ１３６）。【００６９】
ステップＳ１４１では、自エントリのステータスビットＳＢがExclusiveか否か判定する。ステータスビットがExclusiveの場合（Ｓ１４１ ＹＥＳ）、ステップＳ１４２に進み、そうでない場合（Ｓ１４１のＮＯ）、ステップＳ１４４に進む。ステータスビットＳＢがExclusive（１０）ということは、図４Ｂに示す如く、エントリがＡｘ−１タイプであることを意味する。【００７０】
ステップＳ１４２でノードコントローラＮＣは、自エントリに登録されているＣＰＵに対しスヌープを発行し、スヌープを発行したＣＰＵに対し、エントリのデータの保持形態をExclusiveからSharedに変更することを通知する。次にノードコントローラＮＣは、スヌープの宛先のＣＰＵからデータを読み出してリクエスタＣＰＵに対し転送する。次にノードコントローラＮＣは、自エントリのステータスビットＳＢをSharedとして、リクエスタＣＰＵ  ＣのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する（ステップＳ１４３，Ｓ１３６）。【００７１】
ステップＳ１４４では、自エントリのステータスビットＳＢがSharedか否かを判定する。ステータスビットＳＢがShared（０１）ということは、図４Ｂに示す如く、エントリがＡｘ−１タイプであることを意味する。Sharedの場合（Ｓ１４４  ＹＥＳ），ステップＳ１４５に進み、そうでない場合（Ｓ１４４  ＮＯ），ステップＳ１４９に進む。【００７２】
ステップＳ１４５でノードコントローラＮＣは、自エントリが属するブロック内に、ステータスビットＳＢがInvalid以外のエントリが８個以上であれば（ステップＳ１４５ ＹＥＳ），ステップＳ１４８に進む。自エントリが属するブロック内のステータスビットＳＢがInvalid以外のエントリが７個以下であれば（ステップＳ１４５ ＮＯ），ステップＳ１４６に進む。Invalid以外のエントリが７個以下であれば、自エントリを加えてもInvalid以外のエントリが合計で８個以下となり、Ｂタイプのフォーマットでブロックに登録可能なエントリの最大個数８以内に収まるからである。【００７３】
ステップＳ１４６でノードコントローラＮＣは、ブロックのフォーマットをＡタイプからＢタイプにフォーマット変換する。そして自エントリに対応するメモリＭ上のデータ格納領域からデータを読み出してリクエスタＣＰＵに転送する（ステップＳ１４７）。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、Ｂタイプのフォーマットで自エントリをブロックに追加登録し、リクエスタＣＰＵ  ＣのＣＰＵ−ＩＤを追加登録した自エントリに登録する（ステップＳ１２８）。【００７４】
Invalid以外の他エントリが８個以上ある場合、ステップＳ１４８では、自エントリに対応するメモリＭ上のデータ格納領域からデータを読み出してリクエスタＣＰＵに転送する。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、自エントリをＡｘ−２タイプのフォーマットに変更し、リクエスタＣＰＵ  Ｃを有するボードのボードＩＤを自エントリに登録する（ステップＳ１３７）。【００７５】
すなわち、ステップＳ１４４で自エントリのステータスビットＳＢがSharedの場合とは、既に自エントリには２個のＣＰＵ  Ｃが登録されていることを意味する。そのような状態で更にリクエスタＣＰＵをエントリに登録するため、自エントリに登録するＣＰＵの数が３となる。したがって自エントリを、各エントリに登録し得るＣＰＵ数の最大値が２のＡｘ−１タイプのフォーマットから、各エントリに登録し得るボード数が３以上のＡｘ−２タイプのフォーマットに変更する。そして、ノードコントローラＮＣは、すでに自エントリに登録されていた２個のＣＰＵを有するボードＢのボードＩＤとともに、リクエスタＣＰＵを有するボードＢのボードＩＤを登録する。【００７６】
尚、ステップＳ１４７，Ｓ１４８，Ｓ１４９においてメモリＭからデータを転送する理由は以下の通りである。すなわち、ステップＳ１４７，Ｓ１４８，Ｓ１４９は、自エントリのステータスビットＳＢがShared（Ｓ１４４  ＹＥＳ）或いはＡｘ−２タイプのフォーマット（Ｓ１４４ ＮＯ）である状況に対応する。したがって、データを保持するＣＰＵが２個以上である。このような場合、２個以上のＣＰＵのいずれからデータを転送するかを予め設定する方法を採ることも可能だが、実施例１の場合、そのような設定を行わず、一律、メモリＭから転送することにして制御の簡便化を図る。【００７７】
ステップＳ１４９でノードコントローラＮＣは、自エントリに対応するメモリＭ上のデータ格納領域からデータを読み出してリクエスタＣＰＵに転送する。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、リクエスタＣＰＵ  Ｃを有するボードＢのボードＩＤを自エントリに登録する（ステップＳ１３７）。すなわち、ステップＳ１４４で自エントリのステータスビットＳＢがSharedでない場合（Ｓ１４４のＮＯ）、Ｓ１３８  ＮＯ，Ｓ１４１  ＮＯを経ており、自エントリにステータスはInvalidでもExclusiveでもない。したがってこの場合、ステータスビットＳＢは１１であり、自エントリがＡｘ−２タイプであることがわかる。【００７８】
図８Ａ、８Ｂは、実施例１の情報処理装置においてＣＰＵからリード要求を受信した場合のノードコントローラＮＣの動作の流れを示すフローチャートである。図８Ａ、図８Ｂは、ＣＰＵ同士がデータを共有して持とうとする場合の動作のその他の例を示す。図８Ａ，８Ｂの例は、図７Ａ，７Ｂの例に対する変形例であり、図７Ａ，７Ｂにおける動作（ステップ）と同様のものには同一の符号を付し、重複する説明を省略する。【００７９】
自エントリのステータスビットＳＢがShared、すなわち２個のＣＰＵが自エントリに登録済み（図８Ｂ，ステップＳ１４４  ＹＥＳ）であって、ブロック内にInvalid以外のステータスビットＳＢを有する他エントリが８個以上ある（Ｓ１４５  ＹＥＳ）場合、図７Ｂの例では、Ａｘ−２タイプのフォーマットでボードＩＤを登録する（ステップＳ１３７）。【００８０】
他方、図８Ｂの例では、Ｓ１４５でブロック内にInvalid以外のステータスビットＳＢを有する他エントリが８個以上あると判定された場合、更に、ブロック内にあるInvalid以外のステータスビットＳＢを有する他エントリが８個以上１２個以下であるか否かをＳ１５１で判別する。ブロック内に存在するInvalid以外のステータスビットＳＢを有する他エントリが８個以上１２個以下である場合（Ｓ１５１  ＹＥＳ）、ステップＳ１５２に進む。他方、ブロック内にあるInvalid以外のステータスビットＳＢを有する他エントリが１３個以上の場合（Ｓ１５１  ＮＯ）、ステップＳ１４８に進む。【００８１】
Invalid以外のステータスビットを有する他エントリが８個以上１２個以下の場合、ステップＳ１５２では、Invalid以外のステータスビットを有する他エントリ全てにつき、或いはInvalid以外のステータスビットを有するエントリの個数が７個以下となるように、エントリの内容を消去（パージ）する。Invalid以外のエントリが７個以下であれば、自エントリを加えてもInvalid以外のエントリが合計で８個以下となり、Ｂタイプのフォーマットでブロックに登録可能なエントリの最大個数８以内に収まるからである。内容を消去するエントリは、Invalid以外のステータスビットＳＢを有するエントリから、例えば番号が小さい順に選択する。尚、エントリの番号は、例えば対応するメモリ空間上のメモリ番地の順で付与される。【００８２】
なお、「８個以上１２個以下」という条件は一例である。例えば、フォーマットをＢタイプに変換することによって得られるメリットと、エントリをパージすることによって生ずるデメリットとを総合的に勘案し、情報処理装置の性能が最も良くなる数値を選択することができる。実際には、実機で様々なバリエーションについて実験を行い、その結果を測定して決定することができる。【００８３】
一方、Invalid以外のステータスビットを有するエントリが１３個以上の場合、ステップＳ１４８では、自エントリに対応するメモリＭ上のデータ格納領域からデータを読み出してリクエスタＣＰＵに転送する。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、自エントリをＡｘ−２タイプのフォーマットに変更し、リクエスタＣＰＵ  Ｃを有するボードのボードＩＤを自エントリに登録する（ステップＳ１３７）。【００８４】
図９は、図４Ａの参考例でＣＰＵからリード要求を受信した場合の動作の流れを示すフローチャートである。図９は、ＣＰＵ同士がデータを共有せずに（つまりExclusiveで）持とうとする場合の動作を示す。【００８５】
図９中、ステップＳ２０１で、リードの対象データのアドレスを管理するノードコントローラＮＣがリクエスタＣＰＵ  Ｃからリード要求を受信すると、ノードコントローラＮＣは自己のディレクトリＤＲを検索する（ステップＳ２０２）。検索の結果得た自エントリのステータスビットＳＢがInvalidを示す場合（ステップＳ２０３  ＹＥＳ）、ステップＳ２０４に進み、そうでない場合（ステップＳ２０３  ＮＯ）ステップＳ２０６に進む。尚、ステータスビットＳＢがInvalid（００）ということは、エントリがＡｘ−１タイプであることを意味する。  ステップＳ２０４でノードコントローラＮＣは自エントリに対応するメモリＭ上のデータ格納領域からデータを読み出して、リクエスタＣＰＵに転送する（ステップＳ２０４）。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、自エントリのステータスビットＳＢをExclusiveとして、リクエスタＣＰＵのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する（ステップＳ２０５）。【００８６】
ステップＳ２０６では、自エントリのステータスビットＳＢがExclusiveか否か判定する。Exclusiveの場合（Ｓ２０６ ＹＥＳ）、ステップＳ２０７に進み、そうでない場合（Ｓ２０６のＮＯ）、ステップＳ２０９に進む。ステータスビットＳＢがExclusive（１０）ということは、エントリがＡｘ−１タイプであることを意味する。【００８７】
ステップＳ２０７でノードコントローラＮＣは、自エントリに登録されているＣＰＵに対しスヌープを発行し、スヌープを発行したＣＰＵに対しエントリのデータの保持形態をExclusiveからInvalidに変更することを通知し、自己のキャッシュメモリＣＡ内のリード対象データを転送後に消去することを指示する。次にステップＳ２０８でノードコントローラＮＣは、スヌープの宛先のＣＰＵからデータをリクエスタＣＰＵに対し転送する。スヌープの宛先のＣＰＵは、ノードコントローラNCからの指示に応じ、自己のキャッシュメモリＣＡからリード対象のデータを消去する。又リクエスタＣＰＵは、転送されたデータを自己のキャッシュメモリに保持する。次にステップＳ２０５でノードコントローラＮＣは、自エントリのステータスビットＳＢをExclusiveとして、リクエスタＣＰＵのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する。【００８８】
ステップＳ２０９では、自エントリのステータスビットＳＢがSharedか否かを判定する。ステータスビットＳＢがShared（０１）ということは、エントリがＡｘ−１タイプであることを意味する。Sharedの場合（Ｓ２０９  ＹＥＳ），ステップＳ２１０に進み、そうでない場合（Ｓ２０９  ＮＯ），ステップＳ２１２に進む。【００８９】
ステップＳ２１０でノードコントローラＮＣは、自エントリに登録されている全ＣＰＵに対しスヌープを発行する。すなわち、ノードコントローラＮＣは、全ＣＰＵに対しエントリのデータの保持形態をSharedからInvalidに変更することを通知し、自己のキャッシュメモリＣＡ内のリード対象のデータを消去することを指示する。次にステップＳ２１１でノードコントローラＮＣは、スヌープの宛先のＣＰＵのいずれか（予め設定することが可能）からデータを読み出して、リクエスタＣＰＵに対し転送する。スヌープの宛先となる全ＣＰＵは、ノードコントローラからの指示に応じ、自己のキャッシュメモリＣＡからデータを消去する。又リクエスタＣＰＵは、転送されたデータを自己のキャッシュメモリに保持する。次にステップＳ２０５でノードコントローラＮＣは、自エントリのステータスビットＳＢをExclusiveとして、リクエスタＣＰＵのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する。【００９０】
ステップＳ２１２でノードコントローラＮＣは、自エントリに登録されている全ＣＰＵに対しスヌープを発行する。すなわち、ノードコントローラＮＣは全ＣＰＵに対し、エントリのデータの保持形態をSharedからInvalidに変更することを通知し、自己のキャッシュメモリＣＡ内のリード対象データを消去することを指示する。次にステップＳ２１３でノードコントローラＮＣは、スヌープの宛先のＣＰＵのうち、リード対象データを保持するいずれかのＣＰＵから、データをリクエスタＣＰＵに対し転送する。データを転送する対象となるＣＰＵは、予め設定することも可能である。そしてスヌープの宛先の全ＣＰＵは、ノードコントローラからの指示に応じ、自己のキャッシュメモリＣＡからデータを消去する。又リクエスタＣＰＵは、転送されたデータを自己のキャッシュメモリに保持する。次にステップＳ２０５でノードコントローラＮＣは、自エントリをＡｘ−１タイプに変更する。そしてステータスビットＳＢをExclusiveとして、リクエスタＣＰＵのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する。
尚、ステップＳ２０９で自エントリのステータスビットＳＢがSharedでない場合（Ｓ２０９のＮＯ）、Ｓ２０３  ＮＯ，Ｓ２０６  ＮＯを経ており、InvalidでもExclusiveでもない。したがってこの場合、ステータスビットＳＢは１１であり、自エントリがＡｘ−２タイプである。【００９１】
図１０Ａ，１０Ｂは、実施例１の情報処理装置においてＣＰＵからリード要求を受信した場合の動作の流れを示すフローチャートである。図１０Ａ、図１０Ｂは、ＣＰＵ同士がデータを共有せずに、つまりExclusiveで持とうとする場合の動作を示す。【００９２】
図１０Ａ中、ステップＳ２２１で、リードの対象データのアドレスを管理するノードコントローラＮＣがリクエスタＣＰＵ  Ｃからリード要求を受信すると、ノードコントローラＮＣは自己のディレクトリＤＲを検索する（ステップＳ２２２）。検索の結果得た自エントリが属するブロックのフォーマットがＢタイプの場合（ステップＳ２２３  Ｂ−ｔｙｐｅ）、ステップＳ２２４に進み、Ａタイプの場合（ステップＳ２２３  Ａ−ｔｙｐｅ）、図１０ＢのステップＳ２３４に進む。【００９３】
ステップＳ２２４でノードコントローラＮＣは、Ｂタイプのフォーマットで自エントリ(emptyでない)がすでにブロック内に存在する場合（ステップＳ２２４  ＹＥＳ）、ステップＳ２２５に進み、自エントリがブロックに存在しない場合（ステップＳ２２４  ＮＯ），ステップＳ２２８に進む。【００９４】
ステップＳ２２５でノードコントローラＮＣは、自エントリに登録されている全ＣＰＵに対しスヌープを発行し、登録されている全ＣＰＵのＣＰＵ−ＩＤを自エントリから削除する。次にステップＳ２２６でノードコントローラＮＣは、エントリにＣＰＵ−ＩＤが登録されていたＣＰＵのいずれかからデータを受け、受けたデータをリクエスタＣＰＵに転送する。エントリに登録されていた全ＣＰＵは、ノードコントローラからのスヌープに応じ、自己のキャッシュメモリが保持するデータを消去する。このとき、リクエスタＣＰＵは自己のキャッシュメモリにデータを保持する。次にノードコントローラＮＣは、リクエスタＣＰＵのＣＰＵ−ＩＤを自エントリに登録し、自エントリのステータスビットＳＢをExclusiveにする（ステップＳ２２７）。【００９５】
ステップＳ２２８でノードコントローラＮＣは、ブロックに既にエントリが８個登録済みであれば（ステップＳ２２８  ＹＥＳ）、ステップＳ２３０に進み、そうでなければ（ステップＳ２２８  ＮＯ），ステップＳ２２９に進む。ステップＳ２２９でノードコントローラＮＣは、メモリＭからデータをリクエスタＣＰＵに転送する。このとき、リクエスタＣＰＵは自己のキャッシュメモリに転送されたデータを保持する。次にステップＳ２２７でノードコントローラＮＣは、ステータスビットＳＢをExclusiveとして自エントリを追加し、追加した自エントリにリクエスタＣＰＵのＣＰＵ−ＩＤを登録する。【００９６】
ステップＳ２３０でノードコントローラＮＣは、ブロックのフォーマットをＢタイプからＡタイプにフォーマット変換する。ここで、まず追加する自エントリにつき、データをメモリＭからリクエスタＣＰＵに転送する（ステップＳ２３１）。そしてステータスビットＳＢをExclusiveとして、Ａｘ−１タイプのフォーマットで自エントリをブロックに追加し、自エントリにリクエスタＣＰＵのＣＰＵ−ＩＤとボードＩＤとを登録する（ステップＳ２３６）。【００９７】
他方、ブロックに既に登録済みの８個のエントリのうち、登録されているＣＰＵの個数が２個以内のエントリにつき、Ａｘ−１タイプのフォーマットで夫々のボードＩＤとＣＰＵ−ＩＤとを登録する（ステップＳ２３２）。又このとき、Ｂタイプのフォーマット上でステータスビットＳＢがemptyであったエントリにつき、ステータスビットＳＢをInvalidとしてＡｘ−１タイプのフォーマットで登録する。更に、８個に含まれない、当該ブロックに属する他のエントリについても、Ａｘ−１タイプのフォーマットでステータスビットＳＢをInvalidとして登録する。【００９８】
他方、既に登録済みの８個のエントリのうち、登録されているＣＰＵの個数が３個以上のエントリにつき、Ａｘ−２タイプのフォーマットで夫々のボードＩＤを登録する（ステップＳ２３３）。【００９９】
図１０ＢのステップＳ２３４でノードコントローラＮＣは、自エントリのステータスビットＳＢがInvalidを示す場合（ステップＳ２３４  ＹＥＳ）、ステップＳ２３５に進み、そうでない場合（ステップＳ２３４  ＮＯ）ステップＳ２３７に進む。ステータスビットＳＢがInvalid（００）ということは、エントリがＡｘ−１タイプであることを意味する。【０１００】
ステップＳ２３５でノードコントローラＮＣは自エントリに対応するメモリＭ上のデータ格納領域から、データをリクエスタＣＰＵに転送する。このときリクエスタＣＰＵ  Ｃは、自己のキャッシュメモリＣＡに転送されたデータを保持する。次にノードコントローラＮＣは、自エントリのステータスビットＳＢをExclusiveとして、リクエスタＣＰＵのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する（ステップＳ２３６）。【０１０１】
ステップＳ２３７では、自エントリのステータスビットＳＢがExclusiveか否か判定する。Exclusiveの場合（Ｓ２３７ ＹＥＳ）、ステップＳ２３８に進み、そうでない場合（Ｓ２３７のＮＯ）、ステップＳ２４０に進む。【０１０２】
ステップＳ２３８でノードコントローラＮＣは、自エントリに登録されているＣＰＵに対しスヌープを発行し、スヌープを発行したＣＰＵに対し、エントリのデータの保持形態がExclusiveからInvalidに変化することを通知する。そして、自己のキャッシュメモリＣＡ内のデータを転送後に消去することを指示する。次にステップＳ２３９でノードコントローラＮＣは、スヌープの宛先のＣＰＵからデータをリクエスタＣＰＵに対し転送する。スヌープの宛先のＣＰＵは、ノードコントローラからの指示に応じ、自己のキャッシュメモリＣＡからデータを消去する。又リクエスタＣＰＵは、転送されたデータを自己のキャッシュメモリに保持する。次にステップＳ２３６でノードコントローラＮＣは、自エントリのステータスビットＳＢをExclusiveとして、リクエスタＣＰＵのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する。【０１０３】
ステップＳ２４０では、自エントリのステータスビットＳＢがSharedか否かを判定する。ステータスビットＳＢがShared（０１）ということは、自エントリがＡｘ−１タイプであることを意味する。Sharedの場合（Ｓ２４０  ＹＥＳ），ステップＳ２４１に進み、そうでない場合（Ｓ２４０  ＮＯ），ステップＳ２４３に進む。【０１０４】
ステップＳ２４１でノードコントローラＮＣは、自エントリに登録されている全ＣＰＵに対しスヌープを発行する。すなわち、全ＣＰＵに対し、エントリのデータの保持形態をSharedからInvalidに変更することを通知し、自己のキャッシュメモリＣＡ内のリード対象データを消去することを指示する。次にステップＳ２４２でノードコントローラＮＣは、スヌープの宛先のＣＰＵのうち、リード対象データを保持するいずれかのＣＰＵから、データをリクエスタＣＰＵに対し転送する。スヌープの宛先の全ＣＰＵは、ノードコントローラからの指示に応じ、自己のキャッシュメモリＣＡからデータを消去する。又リクエスタＣＰＵは、転送されたデータを自己のキャッシュメモリに保持する。次にステップＳ２３６でノードコントローラＮＣは、自エントリのステータスビットＳＢをExclusiveとして、リクエスタＣＰＵのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する。【０１０５】
ステップＳ２４３でノードコントローラＮＣは、自エントリに登録されている全ＣＰＵに対しスヌープを発行する。すなわち、登録されている全ＣＰＵに対し、エントリのデータの保持形態がSharedからInvalidに変化することを通知し、自己のキャッシュメモリＣＡ内のデータを消去することを指示する。次にステップＳ２４４でノードコントローラＮＣは、スヌープの宛先のＣＰＵのうち、リード対象データを保持するＣＰＵのいずれかから、データをリクエスタＣＰＵに対し転送する。スヌープの宛先の全ＣＰＵは、上記指示に応じ、自己のキャッシュメモリＣＡからデータを消去する。又リクエスタＣＰＵは、転送されたデータを自己のキャッシュメモリに保持する。次にステップＳ２３６でノードコントローラＮＣは、自エントリをＡｘ−１タイプに変更する。そしてステータスビットＳＢをExclusiveとして、リクエスタＣＰＵのＣＰＵ−ＩＤおよびリクエスタＣＰＵを有するボードＢのボードＩＤを自エントリに登録する。尚、ステップＳ２４０で自エントリのステータスビットＳＢがSharedでない場合（Ｓ２４０のＮＯ）、Ｓ２３４  ＮＯ，Ｓ２３７  ＮＯを経ており、InvalidでもExclusiveでもない。したがってこの場合、ステータスビットＳＢは１１であり、自エントリがＡｘ−２タイプである。【０１０６】
図１１Ａは、実施例１の情報処理装置において適用可能なディレクトリのフォーマットをＡタイプからBタイプに変換する手順の一例について説明する図である。当該手順は、図１２とともに後述するフォーマット変換部ＦＣが実行する。【０１０７】
フォーマット変換部ＦＣは、カウンタＣＮＴ１，エントリ選択指示回路(1st, 2nd, 3rd, ...., 8th)ＳＬＬ１，ＳＬＬ２，ＳＬＬ３，...，ＳＬＬ８，およびエントリ選択回路ＳＬ１，ＳＬ２，ＳＬ３，．．，ＳＬ８を有する。フォーマット変換部ＦＣは更に、ビットマップ変換回路(Bitmap変換回路)ＢＭＣ１，ＢＭＣ２，ＢＭＣ３，...，ＢＭＣ８、およびエンコーダＥＮＣ１，ＥＮＣ２，ＥＮＣ３，...，ＥＮＣ８を有する。【０１０８】
カウンタＣＮＴ１は、ＡタイプのフォーマットＦＴＡを有するブロックのエントリ中、Invalid以外のステータスビットＳＢを有するエントリ数を計数する。そして、Invalid以外のステータスビットＳＢを有するエントリ数が８を超える場合、当該ブロックのＢタイプへのフォーマット変換を許可しない。一方カウンタＣＮＴ１は、Invalid以外のステータスビットを有するエントリ数が８個以下であれば、当該ブロックのＢタイプへのフォーマット変換を許可する。【０１０９】
カウンタＣＮＴ１が当該ブロックのＢタイプへのフォーマット変換を許可した場合、エントリ選択指示回路ＳＬＬ１，ＳＬＬ２，ＳＬＬ３，...，ＳＬＬ８の各々は、以下の動作を行う。すなわち、エントリ選択指示回路ＳＬＬ１は、当該ブロック内の、Invalid以外のステータスビットＳＢを有するエントリ中、番号が小さい順に１エントリずつ選択する。エントリ選択指示回路ＳＬＬ２は、ブロックのInvalid以外のステータスビットＳＢを有するエントリ中、エントリ選択指示回路ＳＬＬ１が選択したエントリの次に番号が小さいエントリを選択する。エントリ選択指示回路ＳＬＬ３は、ブロックのInvalid以外のステータスビットＳＢを有するエントリ中、エントリ選択指示回路ＳＬＬ２が選択したエントリの次に番号が小さいエントリを選択する。このようにして、ブロック内のInvalid以外のステータスビットＳＢを有するエントリが夫々、エントリ選択指示回路ＳＬＬ１，ＳＬＬ２，ＳＬＬ３，...，ＳＬＬ８によって順次選択される。【０１１０】
エントリ選択回路ＳＬ１，ＳＬ２，ＳＬ３，．．，ＳＬ８は、エントリ選択指示回路ＳＬＬ１，ＳＬＬ２，ＳＬＬ３，...，ＳＬＬ８のいずれか、およびＢｉｔｍａｐ変換回路ＢＭＣ１・・・ＢＭＣ８のいずれかに対応している。符号末尾の数字が同じ要素は、互いに対応している。エントリ選択回路ＳＬ１，ＳＬ２，ＳＬ３，．．，ＳＬ８は、対応するエントリ選択指示回路ＳＬＬ１、ＳＬＬ２，ＳＬＬ３，...，ＳＬＬ８によって選択されたエントリの登録内容を、対応するビットマップ変換回路ＢＭＣ１，ＢＭＣ２，ＢＭＣ３，...，ＢＭＣ８に夫々出力する。ビットマップ変換回路ＢＭＣ１，ＢＭＣ２，ＢＭＣ３，...，ＢＭＣ８は、対応するエントリ選択回路から出力されたエントリの登録内容に基づき、Ｂタイプのフォーマットによるエントリに登録する、ボードＢごとのＣＰＵ−ビットマップに変換する。【０１１１】
エンコーダＥＮＣ１，ＥＮＣ２，ＥＮＣ３，...，ＥＮＣ８には、対応するエントリ選択指示回路ＳＬＬ１、ＳＬＬ２，ＳＬＬ３，...，ＳＬＬ４から、Ａタイプのフォーマットのうちいずれのエントリを選択したかを示す情報が夫々入力する。エンコーダＥＮＣ１，ＥＮＣ２，ＥＮＣ３，...，ＥＮＣ８の各々は、入力した情報をエンコードし、Ｂタイプのフォーマットのエントリに登録するアドレスビットＡＢを得る。【０１１２】
図１１Ａ中、ＡタイプのフォーマットＦＴＡの各エントリが有する情報は、図４Ｂに示されるステータスビットＳＢと、ノードＩＤ  ＮＩＤ１，ＮＩＤ２或いはボートビットマップＢＢＭとを含む。図１１Ａ中、ＡタイプのフォーマットＦＴＡにおける"Ｖ"はステータスビットＳＢを示し、"Ｄａｔａ"はノードＩＤ  ＮＩＤ１及びＮＩＤ２或いはボードビットマップＢＢＭを示す。【０１１３】
又、図１１Ａ中、ＢタイプのフォーマットＦＴＢが有する情報は、図５に示されるステータスビットＳＢと、アドレスビットＡＢと、ＣＰＵ−ビットマップＢＩＤｎ−１、...，ＢＩＤ１，ＢＩＤ０とを含む。図１１Ａ中、ＢタイプのフォーマットＦＴＢにおける"Ｖ"はステータスビットＳＢを示し、"Ｉｎｄｅｘ"はアドレスビットＡＢを示し、"Ｂｉｔｍａｐ"はＣＰＵ−ビットマップを示す。尚、アドレスビットＡＢ（Ｉｎｄｅｘ）は、アドレスビットＡＢ（Ｉｎｄｅｘ）が属するフォーマットＦＴＢにおけるエントリが、Ａタイプのフォーマットのブロックにおけるどのエントリに対応するかを示す情報（アドレス、インデックス等）である。【０１１４】
図１１Ｂは、実施例１の情報処理装置において適用可能なディレクトリのフォーマットをBタイプからAタイプに変換する手順の一例について説明する図である。当該手順も、図１１Ａとともに上述した手順とともに、図１２とともに後述するフォーマット変換部ＦＣが実行する。【０１１５】
フォーマット変換部ＦＣは、図１１Ａとともに説明した構成に加え、アンド回路ＡＮＤ１，デコーダＤＣ１，書き込みデータ生成回路ＷＤＧ１を有する。【０１１６】
カウンタＣＮＴ２は、各ブロックにつき、ＢタイプのフォーマットＦＴＢで登録されている、empty以外のステータスビットＳＢを有するエントリの個数を計数する。アンド回路ＡＮＤ１は、ＢタイプのフォーマットＦＴＢを有するブロックが以下の条件を満たす場合に、当該ブロックをＡタイプのフォーマットＦＴＡにフォーマット変換することを許可する。すなわち、ブロックにつき、エントリを新たに追加登録する要求ＥＲＲ１がなされ、且つ、カウンタＣＮＴ２が計数した登録済みのエントリの個数が８個である場合である。尚、エントリを新たに追加登録する要求ＥＲＲ１は、例えば図７Ａ中、ステップＳ１２４の判断結果がＮＯとなる場合のように、リード要求を受信した際に自エントリが登録されていない場合に生ずる。【０１１７】
アンド回路ＡＮＤ１によって当該ブロックをＡタイプに変換することを許可された場合、デコーダＤＣ１は、ＢタイプのフォーマットＦＴＢを有するブロックのアドレスビットＡＢをデコードする。アドレスビットＡＢは、図１１Ｂでは、Ｉｎｄｅｘとして示される。このようにして、ＢタイプのフォーマットＦＴＢの各エントリが、ＡタイプのフォーマットＦＴＡのいずれのエントリに対応するかを判断する。【０１１８】
書き込みデータ生成回路ＷＤＧ１は、ＢタイプのフォーマットＦＴＢでブロックに登録済みの各エントリのＣＰＵ−ビットマップの内容に基づき、ＡタイプのフォーマットＦＴＡの対応するエントリのフォーマットを決定する。すなわち元のエントリのフォーマットをＡｘ−１タイプのフォーマットとするかＡｘ−２タイプのフォーマットとするかを決定する。より具体的には、データを保持するＣＰＵのエントリでの登録個数が２以下の場合にはＡｘ−１タイプのフォーマットを選択し、データを保持するＣＰＵが３個以上登録されている場合にはＡｘ−２タイプのフォーマットを選択する。【０１１９】
更に書き込みデータ生成回路ＷＤＧ１は、Ａｘ−１タイプのフォーマットの場合にはエントリにデータを保持するＣＰＵのＣＰＵ−ＩＤと当該ＣＰＵを有するボードＢのボードＩＤとを示す情報を登録する。他方、Ａｘ−２タイプのフォーマットの場合には、データを保持する各ＣＰＵを有する夫々のボードＢのボードＩＤを示す情報をエントリに登録する。ここで登録するＡタイプのフォーマットＦＴＡ上のエントリは、デコーダＤＣ１によって判断される。【０１２０】
図１２は、実施例１の情報処理装置において適用可能なノードコントローラＮＣの機能ブロック図である。ノードコントローラＮＣは、ノードコントローラＮＣが属するボードＢに含まれる夫々のＣＰＵ  Ｃと接続されるルータＲＴ１，および他のボードのノードコントローラＮＣと接続されるルータＲＴ２を有する。ノードコントローラＮＣは更に、図１１Ａ，１１Ｂとともに上述した構成を有するフォーマット変換部ＦＣと、ディレクト検索機能部ＤＳとを有する。【０１２１】
ルータＲＴ１は、ノードコントローラＮＣが属するボードＢに含まれるＣＰＵ  Ｃとの間で、命令やデータのやり取りを行う。ルータＲＴ２は、他のボードのノードコントローラＮＣとの間で、命令やデータのやり取りを行う。ディレクトリ検索機能部ＤＳは、ルータＲＴ１を介してノードコントローラＮＣが属するボードＢ内のＣＰＵ  Ｃから転送されたリード要求に応じ、リードの対象のデータを保持するＣＰＵ  Ｃにつき、ディレクトリＤＲを検索する。ディレクトリＤＲは図４Ｂおよび図５等とともに上述した構成を有する。【０１２２】
このような構成を有するノードコントローラＮＣの動作例について以下に説明する。例えばルータＲＴ１は、ノードコントローラＮＣを有するボードＢに含まれるリクエスタＣＰＵ  Ｃからリード要求を受信し、リードの対象のデータを自己が管理する場合には、ディレクトリ検索機能部ＤＳを使用してディレクトリＤＲを検索する。このようにして、ノードコントローラはデータを保持するＣＰＵ  Ｃを認識する。データを保持するＣＰＵ  Ｃが、自身の属するボードＢ内のＣＰＵ  Ｃである場合、ルータＲＴ１はデータを保持するＣＰＵ  Ｃにリード要求を転送する。リード要求を受信したＣＰＵ  Ｃは、リードの対象のデータを自己のキャッシュメモリＣＡから読み出しリクエスタＣＰＵ  Ｃに転送する。【０１２３】
他方、データを保持するＣＰＵ  Ｃが他のボードＢに属する場合、ルータＲＴ１は、ルータＲＴ２，および他のボードＢのルータＲＴ２，ＲＴ１を介し、データを保持するＣＰＵにリード要求を転送する。リード要求を受信した他のボードＢのＣＰＵ  Ｃは、リード要求の対象のデータを自己のキャッシュメモリＣＡから読み出し、読み出したデータを、他のボードＢのルータＲＴ１，ＲＴ２、およびリクエスタＣＰＵ  Ｃが属するボードＢのルータＲＴ２，ＲＴ１を介し、リクエスタＣＰＵ Ｃに転送する。
【符号の説明】
【０１２４】
Ｂ，Ｂ−０，Ｂ−１，...，Ｂ−ｎ−１  ボード（情報処理部）
Ｃ，Ｃ０１，Ｃ０２，Ｃ０３，...，  Ｃ１１，Ｃ１２，Ｃ１３，...，  Ｃｎ−１１，Ｃｎ−１２，Ｃｎ−１３，Ｃｎ−１４  ＣＰＵ
ＣＡ，ＣＡ０１，ＣＡ０２，ＣＡ０３，...，  ＣＡ１１，ＣＡ１２，ＣＡ１３，...，ＣＡｎ−１１，ＣＡｎ−１２，ＣＡｎ−１３，ＣＡｎ−１４  キャッシュメモリ
Ｍ，Ｍ０１，Ｍ０２，Ｍ０３，...，  Ｍ１１，Ｍ１２，Ｍ１３，...，Ｍｎ−１１，Ｍｎ−１２，Ｍｎ−１３，Ｍｎ−１４  メモリ
ＮＣ，ＮＣ−０，ＮＣ−１，...，  ＮＣ−ｎ−１  ノードコントローラ
ＤＲ，ＤＲ−０，ＤＲ−１，...，ＤＲ−ｎ−１  ディレクトリ
ＦＣ  フォーマット変換部
【図１】
2012035605.tif 000003
【図２Ａ】
2012035605.tif 000004
【図２Ｂ】
2012035605.tif 000005
【図２Ｃ】
2012035605.tif 000006
【図２Ｄ】
2012035605.tif 000007
【図３】
2012035605.tif 000008
【図４Ａ】
2012035605.tif 000009
【図４Ｂ】
2012035605.tif 000010
【図５】
2012035605.tif 000011
【図６】
2012035605.tif 000012
【図７Ａ】
2012035605.tif 000013
【図７Ｂ】
2012035605.tif 000014
【図８Ａ】
2012035605.tif 000015
【図８Ｂ】
2012035605.tif 000016
【図９】
2012035605.tif 000017
【図１０Ａ】
2012035605.tif 000018
【図１０Ｂ】
2012035605.tif 000019
【図１１Ａ】
2012035605.tif 000020
【図１１Ｂ】
2012035605.tif 000021
【図１２】
2012035605.tif 000022
【国際調査報告】
2012035605.tif 000023
2012035605.tif 000024
2012035605.tif 000025
2012035605.tif 000026