(57)【要約】【課題】  主記憶アクセス頻度の低減とリクエストエージェントのＤＡアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることが可能なマルチプロセッサシステムを提供する。【解決手段】  カード（＃０）１，（＃１）２からなるマルチプロセッサシステムでは、キャッシュステータスＭＥＳＩに、データは無効であるが、キャッシュラインサイズライトはいつでも実施できるという状態を示すキャッシュステータスＰＥ（Ｐｓｅｕｄｏ−Ｅｘｃｌｕｓｉｖｅ）を新たに加え、この状態に遷移させるためのシステムインタフェース上のプロトコルを取り決めている。このマルチプロセッサシステムでは、キャッシュラインサイズライト用プリフェッチ動作時に、主記憶４の読出し、別カード上のキャッシュメモリからのデータを取り込みを行うことなく、即座に自キャッシュメモリ上で実施可能としている。【選択図】      図１
2006330947.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサを１個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにＭＥＳＩ（Ｍｏｄｉｆｙ／Ｅｘｃｌｕｓｉｖｅ／Ｓｈａｒｅ／Ｉｎｖａｌｉｄａｔｅ）プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムであって、
前記ＭＥＳＩプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスＰＥ（Ｐｓｅｕｄｏ−Ｅｘｃｌｕｓｉｖｅ）を加えたことを特徴とするマルチプロセッサシステム。
【請求項２】
前記制御回路は、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスＰＥに遷移させることを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項３】
前記プリフェッチリクエスト発行回路は、前記プロセッサが前記ライト動作のリクエストを発行した際に前記プロセッサが搭載されるのと同じカード上のキャッシュメモリでそのライト動作が実施可能となるような状態にステータスを変更しておくことを目的としたプリフェッチリクエストを発行することを特徴とする請求項１または請求項２記載のマルチプロセッサシステム。
【請求項４】
プロセッサを１個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにＭＥＳＩ（Ｍｏｄｉｆｙ／Ｅｘｃｌｕｓｉｖｅ／Ｓｈａｒｅ／Ｉｎｖａｌｉｄａｔｅ）プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法であって、
前記ＭＥＳＩプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスＰＥ（Ｐｓｅｕｄｏ−Ｅｘｃｌｕｓｉｖｅ）を加えたことを特徴とするプリフェッチリクエスト制御方法。
【請求項５】
前記制御回路が、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスＰＥに遷移させることを特徴とする請求項４記載のプリフェッチリクエスト制御方法。
【請求項６】
前記プリフェッチリクエスト発行回路が、前記プロセッサが前記ライト動作のリクエストを発行した際に前記プロセッサが搭載されるのと同じカード上のキャッシュメモリでそのライト動作が実施可能となるような状態にステータスを変更しておくことを目的としたプリフェッチリクエストを発行することを特徴とする請求項４または請求項５記載のプリフェッチリクエスト制御方法。
【請求項７】
プロセッサを１個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにＭＥＳＩ（Ｍｏｄｉｆｙ／Ｅｘｃｌｕｓｉｖｅ／Ｓｈａｒｅ／Ｉｎｖａｌｉｄａｔｅ）プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法のプログラムであって、
前記ＭＥＳＩプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスＰＥ（Ｐｓｅｕｄｏ−Ｅｘｃｌｕｓｉｖｅ）を加え、
前記制御回路に、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスＰＥに遷移させる処理を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチプロセッサシステム及びそれに用いるプリフェッチリクエスト制御方法並びにそのプログラムに関し、特にマルチプロセッサシステムにおけるキャッシュラインサイズライト用プリフェッチ動作のリクエスト制御方法に関する。
【背景技術】
【０００２】
マルチプロセッサシステムにおいては、ＣＰＵ（中央処理装置）やＩＯ（入出力）プロセッサ等のプロセッサを各々に１個あるいは複数個を接続するカードを備えている。また、マルチプロセッサシステムでは、上記のプロセッサが使用する主記憶データを一時的に格納するために、一般的なＭＥＳＩ（Ｍｏｄｉｆｙ／Ｅｘｃｌｕｓｉｖｅ／Ｓｈａｒｅ／Ｉｎｖａｌｉｄａｔｅ）プロトコル等を採用するストアイン方式のキャッシュメモリ及びその制御回路を搭載している（例えば、特許文献１参照）。
【０００３】
さらに、マルチプロセッサシステムでは、上記のカードに、これらプロセッサが発行するリクエストの振る舞いより、それ以降にプロセッサがキャッシュメモリの最小管理単位、すなわちキャッシュラインサイズのライト動作を行うことを予見して実際にプロセッサがキャッシュラインサイズライトリクエストを発生させる以前に主記憶の先読み動作を行うキャッシュラインサイズライト用プリフェッチリクエスト発行回路を搭載している。これらのカードはシステムインタフェースにて複数個接続することが可能となっている。
【０００４】
従来、キャッシュラインサイズライト用プリフェッチ動作を行う場合、後に実際に行われるであろうキャッシュラインサイズライト動作が、別のカード上に搭載されるキャッシュメモリの状態によらず、即座に自キャッシュメモリ上で実施できるよう、自キャッシュメモリの状態を他キャッシュメモリとの排他性を保証できる状態に更新しておく必要がある。これはＭＥＳＩプロトコルでいうところのＭ（Ｍｏｄｉｆｙ）またはＥ（Ｅｘｃｌｕｓｉｖｅ）状態にキャッシュメモリを遷移させておく、ということになる。
【０００５】
ところで、キャッシュラインサイズライト用プリフェッチ動作の完了後、実際にプロセッサによるキャッシュラインサイズライト動作が実施された場合、当然キャッシュ上のそのキャッシュラインアドレスのデータは全てプロセッサによるキャッシュラインサイズライトデータに書き換えられる。すなわち、この場合には、自キャッシュメモリの状態をＭまたはＥとするために、キャッシュラインサイズライト用プリフェッチ動作によって主記憶ないし別のカード上に搭載されるキャッシュメモリからデータが読出されて転送され、自キャッシュに格納されたデータは一切参照されないことになる。
【０００６】
【特許文献１】特開平０８−１９４６１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上述した従来のマルチプロセッサシステムでは、キャッシュラインサイズライト用プリフェッチ動作時に、実際にキャッシュラインサイズライトが実施される際に参照されることがないにも関わらず、自キャッシュをＭまたはＥにするために、主記憶またはスヌープエージェントのキャッシュからのデータ読出し、カード間インタフェースでのデータの転送、リクエストエージェントのキャッシュへのデータの格納という、無用なキャッシュアクセス、無用な主記憶アクセス、無用なシステムインタフェースのデータ転送が必要になる。
【０００８】
そこで、本発明の目的は上記の問題点を解消し、主記憶アクセス頻度の低減とリクエストエージェントのＤＡアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができるマルチプロセッサシステム及びそれに用いるプリフェッチリクエスト制御方法並びにそのプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明によるマルチプロセッサシステムは、プロセッサを１個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにＭＥＳＩ（Ｍｏｄｉｆｙ／Ｅｘｃｌｕｓｉｖｅ／Ｓｈａｒｅ／Ｉｎｖａｌｉｄａｔｅ）プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムであって、
前記ＭＥＳＩプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスＰＥ（Ｐｓｅｕｄｏ−Ｅｘｃｌｕｓｉｖｅ）を加えている。
【００１０】
本発明によるプリフェッチリクエスト制御方法は、プロセッサを１個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにＭＥＳＩ（Ｍｏｄｉｆｙ／Ｅｘｃｌｕｓｉｖｅ／Ｓｈａｒｅ／Ｉｎｖａｌｉｄａｔｅ）プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法であって、
前記ＭＥＳＩプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスＰＥ（Ｐｓｅｕｄｏ−Ｅｘｃｌｕｓｉｖｅ）を加えている。
【００１１】
本発明によるプリフェッチリクエスト制御方法のプログラムは、プロセッサを１個以上搭載する複数のカードから構成され、前記カード各々に、前記プロセッサが使用する主記憶データを一時的に格納するためにＭＥＳＩ（Ｍｏｄｉｆｙ／Ｅｘｃｌｕｓｉｖｅ／Ｓｈａｒｅ／Ｉｎｖａｌｉｄａｔｅ）プロトコルを採用するストアイン方式のキャッシュメモリ及びその制御回路と、前記プロセッサが前記キャッシュメモリの最小管理単位のライト動作を行うことを予見してそのライト動作のリクエストが発生する前に前記主記憶の先読み動作を行うためのプリフェッチリクエストを発行するプリフェッチリクエスト発行回路とを搭載するマルチプロセッサシステムに用いるプリフェッチリクエスト制御方法のプログラムであって、
前記ＭＥＳＩプロトコルに、データが無効でかつ前記ライト動作をいつでも実施可能とする状態を示すキャッシュステータスＰＥ（Ｐｓｅｕｄｏ−Ｅｘｃｌｕｓｉｖｅ）を加え、
前記制御回路に、前記プリフェッチリクエストが発行された時に自カードのキャッシュメモリのデータが無効である場合に前記キャッシュメモリを排他的としかつ前記データが無効であることを許す前記キャッシュステータスＰＥに遷移させる処理を実行させている。
【００１２】
すなわち、本発明のマルチプロセッサシステムは、従来のキャッシュステータスＭＥＳＩ（Ｍｏｄｉｆｙ／Ｅｘｃｌｕｓｉｖｅ／Ｓｈａｒｅ／Ｉｎｖａｌｉｄａｔｅ）に、新たなキャッシュステータスＰＥ（Ｐｓｅｕｄｏ−Ｅｘｃｌｕｓｉｖｅ）を加え、データは無効であるが、キャッシュラインサイズライトはいつでも実施できるという状態を取り決め、この状態に遷移させるためのシステムインタフェース上のプロトコルを取り決めている。
【００１３】
つまり、本発明のマルチプロセッサシステムでは、キャッシュラインサイズライト用プリフェッチ動作時に、主記憶を読出したり、別カード上のキャッシュメモリからデータを取り込んだりすることなく、それでいてプロセッサによるキャッシュラインサイズライトを他キャッシュメモリの状態によらず、即座に自キャッシュメモリ上で実施可能としている。
【００１４】
本発明のマルチプロセッサシステムでは、このキャッシュステータスを定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエスタカード上のキャッシュメモリに対するデータ転送の必要性がなくなり、従来のキャッシュステータスＭＥＳＩだけを使用した場合に比べ、自キャッシュアクセス頻度、主記憶アクセス頻度、システムインタフェースのデータ転送頻度の低減を期待することが可能となる。
【００１５】
従来のストアイン方式キャッシュ管理に使用されるＭＥＳＩプロトコルでは、キャッシュラインサイズ用プリフェッチ動作時にリクエストエージェントのキャッシュステータスをＭ（Ｍｏｄｉｆｙ）またはＥ（Ｅｘｃｌｕｓｉｖｅ）にする必要があるため、データを一度、自キャッシュに格納する必要がある。
【００１６】
しかしながら、本発明のマルチプロセッサシステムでは、ＭＥＳＩプロトコルにＰＥステータスを追加定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエストエージェントのキャッシュメモリに対するデータ転送の必要性がなくなる。また、本発明のマルチプロセッサシステムでは、従来のキャッシュステータスＭＥＳＩだけを使用した場合に比べ、主記憶アクセス頻度の低減、リクエストエージェントのＤＡ（Ｄａｔａ  Ａｒｒａｙ）アクセス頻度の低減、システムインタフェースのデータ転送頻度の低減が期待される。
【発明の効果】
【００１７】
本発明は、以下に述べるような構成及び動作とすることで、主記憶アクセス頻度の低減とリクエストエージェントのＤＡアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができるという効果が得られる。
【発明を実施するための最良の形態】
【００１８】
次に、本発明の一実施例について図面を参照して説明する。図１は本発明の一実施例によるマルチプロセッサシステムの構成を示すブロック図である。図１において、本発明の一実施例によるマルチプロセッサシステムは二つのカード（＃０）１，（＃１）２にプロセッサ１１，２１を搭載し、それらのプロセッサ１１，２１用にストアインキャッシュメモリ（以下、キャッシュメモリとする）１３ａ，２３ａを搭載し、これらのカード（＃０）１，（＃１）２間をアドレスバス１０１、スヌープバス１０２、データバス１０３によって接続している。
【００１９】
尚、図１中のプロセッサ数、カード数は、本実施例を説明するにあたって必要な最小構成を示したものであり、この個数に限定されるものではない。また、カード間をバス接続したことも、本実施例を説明するにあたって最も簡単なカード間接続方法を示したものであり、各カードのキャッシュと主記憶とのメモリコヒーレンシが保てるのであれば、ここで示したバス接続に限定されるものではない。
【００２０】
プロセッサ１１，２１はＣＰＵ（中央処理装置）やＩ／Ｏ（入出力）プロセッサ等、主記憶へのアクセスリクエストのリクエスタになるものであり、ごく一般的なものでよく、ここではその詳細については言及しない。
【００２１】
キャッシュメモリ１３ａ，２３ａにはキャッシュラインサイズと呼ばれるキャッシュで管理する最小データ単位毎の主記憶データのコピーと、キャッシュラインサイズデータ毎のキャッシュステータス情報とが保持されている。特に、主記憶データのコピーを格納するキャッシュメモリはＤＡ（Ｄａｔａ  Ａｒｒａｙ）、キャッシュステータス情報を格納するキャッシュメモリはＡＡ（Ａｄｄｒｅｓｓ  Ａｒｒａｙ）とそれぞれ呼ばれ、ＤＡとＡＡとは必ず対で使用される。ここで使用するキャッシュステータスはＭＥＳＩ（Ｍｏｄｉｆｙ／Ｅｘｃｌｕｓｉｖｅ／Ｓｈａｒｅ／Ｉｎｖａｌｉｄａｔｅ）プロトコル等の一般的なストアイン方式のキャッシュプロトコルのものとする。
【００２２】
キャッシュコヒーレンシ及びバス制御部（以下、バス制御部とする）１３，２３はそれぞれカード（＃０）１，（＃１）２に搭載されるキャッシュメモリ１３ａ，２３ａとメモリコントローラ３とのキャッシュメモリコヒーレンシ保証を行い、さらにそれを実現するためにカード（＃０）１，（＃１）２とメモリコントローラ３とを接続するカード間インタフェース、すなわちその用途によってアドレスバス１０１、スヌープバス１０２、データバス１０３と呼ばれるバスインタフェースを制御する。
【００２３】
キャッシュラインサイズライト用プリフェッチリクエスト発行回路（以下、プリフェッチリクエスト発行回路とする）１２，２２はそれぞれのカード（＃０）１，（＃１）２に搭載されるプロセッサ１１，２１からキャッシュラインサイズライトリクエストが発行されることを予見し、プロセッサ１１，２１が実際にキャッシュラインサイズライトリクエストを発行した際に即座にプロセッサ１１，２１が搭載されるのと同じカード（＃０）１，（＃１）２上のキャッシュメモリ１３ａ，２３ａ上でそのライト動作が実施可能となるような状態にキャッシュラインステータスを変更しておくことを目的としたリクエスト（以下、プリフェッチリクエストとする）を発行する。
【００２４】
プロセッサ１１，２１によるキャッシュラインサイズライトリクエストの予見は、例えば、プロセッサ１１，２１が連続した主記憶アドレスのキャッシュラインサイズライトを複数、連続発行させた等の一般的に考えられる予見アルゴリズムでよく、ここではその詳細については言及しない。
【００２５】
メモリコントローラ３はカード間インタフェースすなわちアドレスバス１０１、スヌープバス１０２、データバス１０３各々の制御と、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成される主記憶４との入出力の制御を行う。
【００２６】
アドレスバス１０１、スヌープバス１０２、データバス１０３各々はカード（＃０）１，（＃１）２とメモリコントローラ３とを接続するインタフェースである。アドレスバス１０１はメモリアクセスリクエストを発行するためのバス、スヌープバス１０２はアドレスバス１０１に発行されたバスリクエストに対する自カード（＃０）１，（＃１）２上に搭載のキャッシュメモリ１３ａ，２３ａのキャッシュステータスを通知するためのバス、データバス１０３はキャッシュメモリ１３ａ，２３ａからの読出しデータまたは主記憶４からの読出しデータをリクエスタに転送するためのバスである。ここで、アドレスバス１０１を使用してメモリアクセスリクエストを発行するカードをリクエストエージェント、メモリコントローラ３を除くそれ以外のカードをスヌープエージェントと称する。
【００２７】
本実施例でプロセッサ１１，２１またはプリフェッチリクエスト発行回路１２，２２が発行するリクエスト種類を図１２に示し、そのリクエストの形式の一例を図１３に示す。図１２において、キャッシュラインサイズリード（Ｆ１）はプロセッサ１１，２１からのキャッシュラインサイズと同じデータ量の主記憶４の読出し要求である。パーシャルラインサイズリード（Ｆ２）はプロセッサ１１，２１からのキャッシュラインサイズよりも小さいデータ量の主記憶４の読出し要求である。尚、本実施例においては、キャッシュラインサイズリード（Ｆ１）とパーシャルサイズリード（Ｆ２）との動作になんら差がないため、以後、単にリードリクエストまたはリードと称する。
【００２８】
キャッシュラインサイズライト（Ｆ３）はプロセッサ１１，２１からのキャッシュラインサイズと同じデータ量の書込み要求である。パーシャルラインサイズライト（Ｆ４）はプロセッサ１１，２１からのキャッシュラインサイズよりも小さいデータ量の書込み要求である。
【００２９】
キャッシュラインサイズライト用プリフェッチリクエスト（プリフェッチリクエスト）は、プリフェッチリクエスト発生回路１２，２２からのリクエストで、後に実施が予見されるプロセッサ１１，２１からのキャッシュラインサイズライト（Ｆ３）に備えて予め自キャッシュステータスを排他的な状態としておくことを目的として実行されるリクエストである。ここで、排他的なキャッシュステータスとは、従来のＭＥＳＩプロトコルで言えば、「Ｍ（Ｍｏｄｉｆｙ）」または「Ｅ（Ｅｘｃｌｕｓｉｖｅ）」を指す。本実施例ではこれに「ＰＥ（Ｐｓｅｕｄｏ−Ｅｘｃｌｕｓｉｖｅ）」ステータスを加える。
【００３０】
図１３において、（Ｇ１）はこれらリクエストのコードを示す。（Ｇ２）はこのリクエストがアクセスすべき主記憶アドレスを示す。（Ｇ３）はリクエストがパーシャルサイズリード（Ｆ２）またはパーシャルサイズライト（Ｆ４）の時にリードまたはライトを実施すべきキャッシュラインサイズ内の位置を指定する。
【００３１】
図２は図１に示すアドレスバス１０１、スヌープバス１０２、データバス１０３におけるバスフェーズを示すタイムチャートである。図２において、バスリクエストはバスフェーズ＃１〜＃３にしたがって処理される。リクエストエージェントはバスフェーズ＃１においてアドレスバス１０１にバスリクエストを発行する。バスリクエストについては図３に示し、その内容については後述する。
【００３２】
バスリクエストを受け取ったスヌープエージェントは、自カード搭載のキャッシュメモリにバスリクエストアドレスＡ２で指定されるデータが格納されているか、格納されているのであればどのようなステータスであるかの索引を行い、バスフェーズ＃２においてスヌープバス１０２に自カード搭載のキャッシュメモリのキャッシュステータス情報を転送する。
【００３３】
バスフェーズ＃３ではスヌープエージェント、またはバスフェーズ＃２におけるスヌープ通知によってはメモリコントローラ３が、データバス１０３にリクエストエージェントに対するリプライデータ転送を行う。尚、ここではカード間インタフェースプロトコルとして３つの固定時間間隔のバスフェーズ＃１〜＃３を用いているが、これは本実施例における説明の簡単化のためであり、各カード間とメモリコントローラ３とを接続し、キャッシュメモリコヒーレンシを実現できるカード間インタフェースプロトコルであればどのようなものでもよい。
【００３４】
図３は本発明の一実施例によるバスフェーズ＃１で使用するバスリクエストのコマンドコードの一例を示す図であり、図４は本発明の一実施例によるバスフェーズ＃２で使用するスヌープ結果コードの一例を示す図である。図８及び図９は図１のバス制御部１２，２２の動作（リクエストエージェント）を示す図であり、図１０は図１のバス制御部１２，２２の動作（スヌープエージェント）を示す図であり、図１１は図１のメモリコントローラ３の動作に示す図である。これら図１〜図４及び図８〜図１１を参照してバスにこれらリクエストが発行される条件とその際の動作、またスヌープ結果コードが発行される条件とその際の動作については説明する。尚、図８〜図１１についての説明は後述する。
【００３５】
（Ａ１）はバスリクエストのコマンドコードであり、Ｍｅｍ＿Ｒｅａｄ（Ａ４）は自キャッシュステータスが「Ｉ（Ｉｎｖａｌｉｄａｔｅ）」または「ＰＥ」の時に「Ｓ（Ｓｈａｒｅ）」または「Ｅ」への遷移を目的としてアドレスバス１０１へ発行される。
【００３６】
Ｉｎｖａｌｉｄａｔｅ（Ａ５）は自キャッシュが「Ｓ」または「Ｉ」の時に他のキャッシュを全て「Ｉ」とし、自キャッシュのみに有効データが存在する「Ｍ」ステータスへの遷移を目的として発行される。
【００３７】
Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）は本実施例において追加となるリクエストであり、他のキャッシュを全て「Ｉ」とすることで、自キャッシュ上のデータ有無によらず、即時プロセッサリクエストのキャッシュラインサイズライトを実施することができる「ＰＥ」ステータスに遷移することを目的として発行する。
【００３８】
Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）は自キャッシュが「Ｉ」の時に他のキャッシュを全て無効とし（Ｉｎｖａｌｉｄａｔｅ）、自キャッシュを「Ｍ」に遷移させることを目的とする。
【００３９】
（Ｂ１）はバスフェーズ＃２で使用するスヌープ結果コードである。Ｍｉｓｓ（Ｂ２）はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが格納されていないか、「Ｓ」または「Ｅ」であり、バスリクエストを契機として「Ｉ」に遷移することを意味する。
【００４０】
「Ｓ  Ｈｉｔ」（Ｂ３）はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが「Ｅ」または「Ｓ」で格納されており、「Ｅ」ならばバスリクエストを契機として「Ｓ」ステータスに遷移し、「Ｓ」ならばその後も「Ｓ」のままデータを格納し続けることを意味する。
【００４１】
「Ｍ  Ｈｉｔ」（Ｂ４）はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが格納されており、バスリクエストを契機として「Ｉ」に遷移することを意味する。
【００４２】
図５は図１のバス制御部１３，２３の動作（リクエストエージェントにおける動作）を示すフローチャートである。図５においては、プロセッサリクエストまたはプリフェッチリクエストを受付けたリクエストエージェントのバス制御部１３，２３の動作を示している。ここでは、便宜的に図１のカード（＃０）１をリクエストエージェント、カード（＃１）２をスヌープエージェントとして説明する。尚、図５に示す処理はバス制御部１３，２３が主記憶４のプログラムを読出して実行することで実現される。
【００４３】
リクエストエージェントのバス制御部１３はプロセッサ１１またはプリフェッチリクエスト発行回路１２からメモリアクセスリクエスト、プリフェッチリクエストを受付けると、自カード（＃０）１のキャッシュメモリ１３ａ（ＡＡ）を参照し（図５ステップＳ１）、図８に示すバス制御部１３の動作（リクエストエージェント）に応じてバスリクエストを発行するか否かを判定する（図５ステップＳ２）。
【００４４】
バス制御部１３はバスリクエスト発行の必要がない場合、キャッシュメモリ１３ａに必要なデータが必要なステータスで登録されていることになるので、キャッシュメモリ１３ａ（ＤＡ）に必要なアクセスを行い、また自カード（＃０）１のキャッシュメモリ１３ａ（ＡＡ）にアクセスしてキャッシュステータスを必要に応じて更新する（図５ステップＳ３）。
【００４５】
これに対し、バス制御部１３はバスリクエスト発行が必要と判定した場合、キャッシュメモリ１３ａに必要なデータがないか、期待するキャッシュステータスでないことを意味し、キャッシュメモリ１３ａ内のデータをプロセッサリクエスト、プリフェッチリクエストを処理するのに必要なキャッシュデータ、キャッシュステータスに更新するためにバスリクエスト発行が必要であることを意味する。
【００４６】
バス制御部１３はバスフェーズ＃１において、図８及び図９に示すバス制御部１３の動作（リクエストエージェント）にしたがってプロセッサリクエスト、プリフェッチリクエスト及びキャッシュメモリ１３ａの状態に応じたバスリクエストを発行し（図５ステップＳ４）、バスフェーズ＃２でスヌープエージェントのキャッシュの状態の報告を受取り（図５ステップＳ５）、バスフェーズ＃３で必要ならばデータバス１０３のデータを受取る（図５ステップＳ６）。
【００４７】
その後に、バス制御部１３は図８及び図９に示すバス制御部１３の動作（リクエストエージェント）にしたがってキャッシュメモリ１３ａ（ＡＡ）のステータス更新、キャッシュメモリ１３ａ（ＤＡ）のデータの更新、プロセッサ１１へのデータ転送等を行う（図５ステップＳ７）。尚、図８及び図９に示すバス制御部１３の動作（リクエストエージェント）の詳細については、本実施例の動作説明の中で説明する。
【００４８】
図６は図１のバス制御部１３，２３の動作（スヌープエージェントにおける動作）を示すフローチャートである。図６においては、バスフェーズ＃１でリクエストエージェントが発行したバスリクエストを受付けた以降のスヌープエージェントのバス制御部２３における動作を示している。尚、図６に示す処理はバス制御部１３，２３が主記憶４のプログラムを読出して実行することで実現される。
【００４９】
スヌープエージェントのバス制御部２３はバスリクエストを受付けると、キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、バスリクエストが指定するアドレスに対する自キャッシュステータスを確認する。バス制御部２３は図１０に示すバス制御部２３の動作（スヌープエージェント）に応じてスヌープ結果をスヌープバス１０２に出力する必要があるか否かを判定し（図６ステップＳ１２）、出力する必要がある場合、バスフェーズ＃２でスヌープバス１０２にスヌープ結果を出力する（図６ステップＳ１３）。
【００５０】
続いて、バス制御部２３は自カード（＃１）２のキャッシュメモリ２３ａ（ＡＡ）のステータスを更新する必要の有無を判定し（図６ステップＳ１４）、必要があれば、キャッシュメモリ２３ａ（ＡＡ）のステータスを更新する（図６ステップＳ１５）。
【００５１】
さらに、バス制御部２３は自カード（＃１）２のキャッシュメモリ２３ａ（ＤＡ）のデータをデータバス１０３に出力する必要の有無を判定し（図６ステップＳ１６）、データをデータバス１０３に出力する必要があれば、自カード（＃１）２のキャッシュメモリ２３ａ（ＤＡ）のデータを読出し（図６ステップＳ１７）、バスフェーズ＃３でデータバス１０３にデータを転送する（図６ステップＳ１８）。尚、図１０に示すバス制御部２３の動作（スヌープエージェント）の詳細については本実施例の動作説明の中で説明する。
【００５２】
図７は図１のメモリコントローラ３における動作（メモリエージェントにおける動作）を示すフローチャートである。図７においては、バスフェーズ＃１でリクエストエージェントが発行したバスリクエストを受付けた以降のメモリコントローラ３における動作を示している。尚、図７に示す処理はメモリコントローラ３が主記憶４のプログラムを読出して実行することで実現される。
【００５３】
メモリコントローラ３はバスリクエストを受付けると、バスフェーズ＃２でスヌープエージェントが出力するスヌープ結果を受付け（図７ステップＳ２１）、図１１に示すメモリコントローラ３の動作にしたがってバスフェーズ＃３でのデータ出力の必要有無を判定する（図７ステップＳ２２）。
【００５４】
メモリコントローラ３はデータ出力が必要ありと判定した場合、主記憶４からバスリクエストで指定されたアドレスのデータを読出し（図７ステップＳ２３）、バスフェーズ＃３でデータバス１０３へ主記憶４の読出しデータを出力する（図７ステップＳ２４）。
【００５５】
これに対し、メモリコントローラ３はデータ出力が不要と判定した場合、さらにスヌープエージェントがバスフェーズ＃３で出力するデータの主記憶４への書込みの必要性の有無を図１１に示すメモリコントローラ３の動作にしたがって判定する（図７ステップＳ２５）。
【００５６】
メモリコントローラ３は主記憶４への書込みを必要と判定した場合、バスフェーズ＃３でデータを受付け（図７ステップＳ２６）、そのデータを主記憶４に書込む（図７ステップＳ２７）。図１１に示すメモリコントローラ３の動作の詳細については本実施例の動作説明の中で説明する。
【００５７】
図１４は本発明の一実施例で用いるＭＥＳＩプロトコルの各ステータス及びＰＥステータスを説明するための図である。図１４において、「Ｍ」（Ｈ１）は、他キャッシュと排他的、すなわち自キャッシュのみが有効データを有している状態を示している。この状態では、プロセッサ１１からのリードリクエスト、キャッシュラインサイズライトリクエスト、パーシャルサイズライトリクエスト、プリフェッチリクエスト発行回路１２からのプリフェッチリクエストの全てがバスリクエストを発行することなく、自キャッシュメモリアクセスだけでその処理を完了する。
【００５８】
「Ｅ」（Ｈ２）は他キャッシュとは排他的だが、自キャッシュと同時に主記憶４にも有効データが存在する状態を示している。この状態でも、プロセッサ１１からのリードリクエスト、キャッシュラインサイズライトリクエスト、パーシャルサイズライトリクエスト、プリフェッチリクエスト発行回路１２からのプリフェッチリクエストの全てがバスリクエストを発行することなく、自キャッシュメモリアクセスだけでその処理を完了する。
【００５９】
「Ｓ」（Ｈ３）は自キャッシュに他キャッシュと共有可能な状態で、主記憶４と同じデータを有していることを示している。この状態ではプロセッサ１１からのリードリクエストのみが自キャッシュメモリアクセスのみで処理を完了する。他のリクエストは図８及び図９に示すバス制御部１３（リクエストエージェント）の動作にしたがってバスリクエストを発行し、バスリクエストの処理が完了した後でないと、その処理を完了しない。
【００６０】
「Ｉ」（Ｈ４）は自キャッシュ上に有効なデータが存在しないことを示している。この状態では全てのリクエストが図８及び図９に示すバス制御部１３（リクエストエージェント）の動作にしたがってバスリクエストを発行し、バスリクエストの処理が完了した後でないと、その処理を完了しない。
【００６１】
「ＰＥ」（Ｈ５）は本実施例で追加するキャッシュステータスである。自キャッシュにデータは存在しないものの、データ更新の権利は有していることを示している。この状態では、プロセッサ１１からのキャッシュラインサイズライトとプリフェッチリクエスト発生回路１２からのプリフェッチリクエストのみが自キャッシュメモリアクセスのみで処理を完了する。他のリクエストは図８及び図９に示すバス制御部１３（リクエストエージェント）の動作にしたがってバスリクエストを発行し、バスリクエストが完了した後でないと、その処理を完了しない。
【００６２】
図８及び図９は図１のバス制御部１３（リクエストエージェント）の動作を示す図であり、図５に示すリクエストエージェントの動作フローに対応する。尚、説明中、便宜的にカード（＃０）１をリクエストエージェント、カード（＃１）２をスヌープエージェントとする。
【００６３】
（Ｃ１）はプロセッサ１１がリードリクエスト（Ｆ１），（Ｆ２）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｍ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からリードリクエスト（Ｆ１），（Ｆ２）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００６４】
この場合、プロセッサ１１が要求するリード対象データは自キャッシュメモリ１３ａに登録されているので、リクエストエージェントのバス制御部１３はバスリクエスト発行が不要であると判定し、自キャッシュメモリ１３ａ（ＤＡ）に「Ｍ」登録されているデータを読出してプロセッサ１１へと転送し（図５ステップＳ３）、処理を終了する。
【００６５】
（Ｃ２）はプロセッサ１１がキャッシュラインサイズライト（Ｆ３）またはパーシャルサイズライト（Ｆ４）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｍ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からキャッシュラインサイズライト（Ｆ３）またはパーシャルサイズライトリクエスト（Ｆ４）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００６６】
この場合、プロセッサ１１が書込みを要求するデータは即時自キャッシュメモリ１３ａで実施可能状態であるから、リクエストエージェントのバス制御部１３はバスリクエスト発行が不要であると判定し、自キャッシュメモリ１３ａ（ＤＡ）に「Ｍ」登録されているデータに対してプロセッサ１１からのライトデータを書込み（図５ステップＳ３）、処理を終了する。
【００６７】
（Ｃ３）はプリフェッチリクエスト発生回路１２からのプリフェッチリクエスト（Ｆ５）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｍ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプリフェッチリクエスト発行回路１２からプリフェッチリクエスト（Ｆ５）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００６８】
この場合、自キャッシュメモリ１３ａは既にプリフェッチリクエストが目的としている排他的な状態「Ｍ」となっているため、リクエストエージェントのバス制御部１３はバスリクエスト発行が不要であり、また既に自キャッシュメモリ１３ａ（ＡＡ）の更新も必要ないことから、何も行わず（図５ステップＳ３）、処理を終了する。
【００６９】
（Ｃ４）はプロセッサ１１がリードリクエスト（Ｆ１），（Ｆ２）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｅ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からリードリクエスト（Ｆ１），（Ｆ２）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００７０】
この場合、プロセッサ１１が要求するリード対象データは自キャッシュメモリ１３ａに登録されているため、リクエストエージェントのバス制御部１３はバスリクエスト発行が不要であると判定し、自キャッシュメモリ１３ａ（ＤＡ）に「Ｅ」登録されているデータを読出してプロセッサ１１へと転送し（図５ステップＳ３）、処理を終了する。
【００７１】
（Ｃ５）はプロセッサ１１がキャッシュラインサイズライト（Ｆ３）またはパーシャルサイズライト（Ｆ４）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｅ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からキャッシュラインサイズライト（Ｆ３）またはパーシャルサイズライトリクエスト（Ｆ４）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００７２】
この場合、プロセッサ１１が書込みを要求するデータは即時自キャッシュメモリ１３ａで実施可能状態であるから、リクエストエージェントのバス制御部１３はバスリクエスト発行が不要であると判定し、自キャッシュメモリ１３ａ（ＤＡ）に「Ｅ」登録されているデータに対してプロセッサ１１からのライトデータを書込み（図５ステップＳ３）、処理を終了する。
【００７３】
（Ｃ６）はプリフェッチリクエスト発生回路１２からのプリフェッチリクエスト（Ｆ５を）発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｅ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプリフェッチリクエスト発行回路１２からプリフェッチリクエスト（Ｆ５）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００７４】
この場合、自キャッシュメモリ１３ａは既にプリフェッチリクエストが目的としている排他的な状態「Ｅ」となっているため、リクエストエージェントのバス制御部１３はバスリクエスト発行が不要であり、また既に自キャッシュメモリ１３ａ（ＡＡ）の更新も必要ないことから、何も行わず（図５ステップＳ３）、処理を終了する。
【００７５】
（Ｃ７）はプロセッサ１１がリードリクエスト（Ｆ１），（Ｆ２）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｓ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からリードリクエスト（Ｆ１），（Ｆ２）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００７６】
この場合、プロセッサ１１が要求するリード対象データは自キャッシュメモリ１３ａに登録されているので、リクエストエージェントのバス制御部１３はバスリクエスト発行が不要であると判定し、自キャッシュメモリ１３ａ（ＤＡ）に「Ｓ」登録されているデータを読出してプロセッサ１１へと転送し（図５ステップＳ３）、処理を終了する。
【００７７】
（Ｃ８）はプロセッサ１１がキャッシュラインサイズライト（Ｆ３）またはパーシャルサイズライト（Ｆ４）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｓ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からキャッシュラインサイズライト（Ｆ３）またはパーシャルサイズライト（Ｆ４）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００７８】
この場合、自キャッシュメモリ１３ａ（ＡＡ）のステータスはプロセッサ１１からのキャッシュラインサイズライト（Ｆ３）またはパーシャルサイズライト（Ｆ４）を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部１３はバスリクエスト発行が必要であると判定し、バスフェーズ＃１でアドレスバス１０１にバスリクエストのＩｎｖａｌｉｄａｔｅ（Ａ５）を発行する（図５ステップＳ４）。
【００７９】
リクエストエージェントのバス制御部１３はバスフェーズ＃２でスヌープバス１０２からスヌープ結果を受付けるが（図５ステップＳ５）、これは後の動作に影響しない。そして、バスリクエストはＩｎｖａｌｉｄａｔｅ（Ａ５）であるから、バスフェーズ＃３におけるデータ転送はない。
【００８０】
ここで、Ｉｎｖａｌｉｄａｔｅ（Ａ５）によってスヌープエージェントのキャッシュメモリ２３ａは対象アドレスに関しては無効化され、自キャッシュメモリ１３ａの排他性が保証されるため、リクエストエージェントのバス制御部１３は自キャッシュメモリ１３ａ（ＤＡ）のデータに対してプロセッサ１１からのライトデータを書込み、自キャッシュメモリ１３ａ（ＡＡ）のステータスを「Ｍ」に更新し（図５ステップＳ７）、処理を終了する。
【００８１】
（Ｃ９）はプリフェッチリクエスト発生回路１２がプリフェッチリクエスト（Ｆ５）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｓ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプリフェッチリクエスト発生回路１２からプリフェッチリクエストＦ５を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００８２】
この場合、自キャッシュメモリ１３ａ（ＡＡ）のステータスは、プリフェッチリクエスト発生回路１２からのプリフェッチリクエスト（Ｆ５）が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部１３はバスリクエスト発行が必要であると判定し、バスフェーズ＃１でアドレスバス１０１にバスリクエストのＩｎｖａｌｉｄａｔｅ（Ａ５）を発行する（図５ステップＳ４）。
【００８３】
リクエストエージェントのバス制御部１３はバスフェーズ＃２でスヌープバス１０２からスヌープ結果を受付けるが（図５ステップＳ５）、これは後の動作に影響しない。そして、バスリクエストはＩｎｖａｌｉｄａｔｅ（Ａ５）であるからバスフェーズ＃３におけるデータ転送はない。ここで、Ｉｎｖａｌｉｄａｔｅ（Ａ５）によってスヌープエージェントのキャッシュメモリ２３ａは対象アドレスに関して無効化され、自キャッシュメモリ１３ａの排他性が保証されるため、キャッシュメモリ１３ａ（ＡＡ）のステータスを「Ｍ」に更新し（図５ステップＳ７）、処理を終了する。
【００８４】
（Ｃ１０）はプロセッサ１１がリードリクエスト（Ｆ１），（Ｆ２）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｉ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からリードリクエスト（Ｆ１），（Ｆ２）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００８５】
この場合、プロセッサ１１が要求するリード対象データは自キャッシュメモリ１３ａ（ＡＡ）に存在しないため、リクエストエージェントのバス制御部１３はバスリクエストの発行が必要であると判定し、バスフェーズ＃１でアドレスバス１０１にバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を発行する（図５ステップＳ４）。
【００８６】
そして、リクエストエージェントのバス制御部１３はバスフェーズ＃２でスヌープバス１０２からスヌープ結果を受付けて保持する（図５ステップＳ５）。この結果は後にステップＳ７で使用する。リクエストエージェントのバス制御部１３はバスフェーズ＃３でスヌープエージェント［カード（＃１）２］またはメモリコントローラ３がデータバス１０３に転送するデータを受付ける（図５ステップＳ６）。
【００８７】
リクエストエージェントのバス制御部１３はこのデータをプロセッサ１１に転送し、自キャッシュメモリ１３ａ（ＤＡ）に格納し、キャッシュメモリ１３ａ（ＡＡ）のステータスを更新し、処理を終了する。この際、リクエストエージェントのバス制御部１３はバスフェーズ＃２で受付けたスヌープ結果が「Ｍ  Ｈｉｔ」ならば「Ｅ」に更新し、「Ｓ  Ｈｉｔ」ならば「Ｓ」に更新し、「Ｍｉｓｓ」ならば「Ｅ」に更新する。
【００８８】
（Ｃ１１）はプロセッサ１１がキャッシュラインサイズライト（Ｆ３）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｉ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からキャッシュラインサイズライト（Ｆ３）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００８９】
この場合、自キャッシュメモリ１３ａ（ＡＡ）のステータスはプロセッサ１１からのキャッシュラインサイズライト（Ｆ３）を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部１３はバスリクエスト発行が必要であると判定し、バスフェーズ＃１でアドレスバス１０１にバスリクエストのＩｎｖａｌｉｄａｔｅ（Ａ５）を発行する（図５ステップＳ４）。
【００９０】
リクエストエージェントのバス制御部１３はバスフェーズ＃２でスヌープバス１０２よりスヌープ結果を受付けるが（図５ステップＳ５）、これは後の動作に影響しない。そして、バスリクエストはＩｎｖａｌｉｄａｔｅ（Ａ５）であるから、バスフェーズ＃３におけるデータ転送はない。
【００９１】
ここで、Ｉｎｖａｌｉｄａｔｅ（Ａ５）によってスヌープエージェントのキャッシュメモリ２３ａは対象アドレスに関しては無効化され、自キャッシュメモリ１３ａの排他性が保証されるため、リクエストエージェントのバス制御部１３は自キャッシュメモリ１３ａ（ＤＡ）のデータに対してプロセッサ１１からのライトデータを書込み、自キャッシュメモリ１３ａ（ＡＡ）のステータスを「Ｍ」に更新し（図５ステップＳ７）、処理を終了する。
【００９２】
（Ｃ１２）はプロセッサ１１がパーシャルサイズライト（Ｆ４）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｉ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からパーシャルサイズライト（Ｆ４）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００９３】
この場合、自キャッシュメモリ１３ａ（ＡＡ）のステータスはプロセッサ１１からのパーシャルサイズライト（Ｆ４）を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部１３はバスリクエスト発行が必要であると判定し、バスフェーズ＃１でアドレスバス１０１にバスリクエストＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を発行する（図５ステップＳ４）。
【００９４】
リクエストエージェントのバス制御部１３はバスフェーズ＃２でスヌープバス１０２よりスヌープ結果を受付けるが（図５ステップＳ５）、これは後の動作に影響しない。そして、バスリクエストはＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）であるから、リクエストエージェントのバス制御部１３はバスフェーズ＃３でスヌープエージェント［カード（＃１）２］またはメモリコントローラ３がデータバス１０３に転送するデータを受付ける（図５ステップＳ６）。
【００９５】
ここで、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）によって、スヌープエージェントのキャッシュメモリ２３ａは対象アドレスに関しては無効化され、自キャッシュメモリ１３ａの排他性が保証されるため、リクエストエージェントのバス制御部１３はバスフェーズ＃３で受付けたデータにプロセッサ１１からのライトデータを書込み、さらにこれを自キャッシュメモリ１３ａ（ＤＡ）のデータに格納し、キャッシュメモリ１３ａ（ＡＡ）のステータスを「Ｍ」に更新し（図５ステップＳ７）、処理を終了する。
【００９６】
（Ｃ１３）はプリフェッチリクエスト発生回路１２がプリフェッチリクエスト（Ｆ５）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｉ」であった場合のＭＥＳＩプロトコルのみを採用している従来の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプリフェッチリクエスト発生回路１２からプリフェッチリクエスト（Ｆ５）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【００９７】
この場合、自キャッシュメモリ１３ａ（ＡＡ）のステータスは、プリフェッチリクエスト発生回路１２からのプリフェッチリクエスト（Ｆ５）が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部１３はバスリクエスト発行が必要であると判定する。そして、従来のＭＥＳＩプロトコルのみで自キャッシュメモリ１３ａ（ＡＡ）を排他的な状態とするためには、「Ｍ」または「Ｅ」に遷移する必要があり、これには主記憶４のデータをキャッシュメモリ１３ａ（ＤＡ）に格納する必要があるため、リクエストエージェントのバス制御部１３はバスフェーズ＃１でアドレスバス１０１にＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を発行する必要がある（図５ステップＳ４）。
【００９８】
リクエストエージェントのバス制御部１３はバスフェーズ＃２でスヌープバス１０２よりスヌープ結果を受付けるが（図５ステップＳ５）、これは後の動作に影響しない。そして、バスリクエストはＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）であるから、リクエストエージェントのバス制御部１３はバスフェーズ＃３でメモリコントローラ３がスヌープエージェント［カード（＃１）２］またはデータバス１０３に転送するデータを受付ける（図５ステップＳ６）。
【００９９】
ここで、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）によってスヌープエージェントのキャッシュメモリ２３ａは対象アドレスに関しては無効化され、自キャッシュメモリ１３ａの排他性が保証されるため、リクエストエージェントのバス制御部１３はバスフェーズ＃３でスヌープエージェント［カード（＃１）２］またはメモリコントローラ３から受付けたデータを自キャッシュメモリ１３ａ（ＤＡ）のデータに格納し、キャッシュメモリ１３ａ（ＡＡ）のステータスを「Ｍ」に更新し（図５ステップＳ７）、処理を終了する。
【０１００】
（Ｃ１４）はプリフェッチリクエスト発生回路１２がプリフェッチリクエスト（Ｆ５）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｉ」であった場合、従来のＭＥＳＩプロトコルに加え、「ＰＥ」ステータスを採用する本実施例での動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプリフェッチリクエスト発生回路１２からプリフェッチリクエスト（Ｆ５）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【０１０１】
この場合、自キャッシュメモリ１３ａ（ＡＡ）のステータスは、プリフェッチリクエスト発生回路１２からのプリフェッチリクエスト（Ｆ５）が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部１３はバスリクエスト発行が必要であると判定する。そして、本実施例では、従来の動作［上記の（Ｃ１３）］とは異なり、自キャッシュメモリ１３ａを排他的であるが、データが無効であることを許される「ＰＥ」に遷移させるため、リクエストエージェントのバス制御部１３はバスフェーズ＃１でアドレスバス１０１にＩｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）を発行する（図５ステップＳ４）。
【０１０２】
リクエストエージェントのバス制御部１３はバスフェーズ＃２でスヌープバス１０２よりスヌープ結果を受付けるが（図５ステップＳ５）、これは後の動作に影響しない。そして、バスリクエストはＩｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）であるから、リクエストエージェントのバス制御部１３はバスフェーズ＃３でメモリコントローラ３がデータバス１０３に転送するデータを受付けない（図５ステップＳ６）。リクエストエージェントのバス制御部１３はキャッシュメモリ１３ａ（ＡＡ）のステータスを本実施例で追加した「ＰＥ」に更新し（図５ステップＳ７）、処理を終了する。
【０１０３】
このように、本実施例では、上述した従来のようなバスフェーズ＃３におけるデータ転送の自キャッシュメモリ１３ａへのデータ格納を必要としない。以下、（Ｃ１５）から（Ｃ１９）は、本実施例で追加する「ＰＥ」ステータスに関する動作である。
【０１０４】
（Ｃ１５）はプロセッサ１１がリードリクエスト（Ｆ１），（Ｆ２）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「ＰＥ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からリードリクエスト（Ｆ１），（Ｆ２）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【０１０５】
この場合、プロセッサ１１が要求するリード対象データは自キャッシュメモリ１３ａ（ＡＡ）に存在しないため、リクエストエージェントのバス制御部１３はバスリクエストの発行が必要であると判定し、バスフェーズ＃１でアドレスバス１０１にバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を発行する（図５ステップＳ４）。そして、リクエストエージェントのバス制御部１３はバスフェーズ＃２でスヌープバス１０２からスヌープ結果を受付けるが（図５ステップＳ５）、これは後の動作に影響しない。
【０１０６】
リクエストエージェントのバス制御部１３はバスフェーズ＃３でメモリコントローラ３がデータバス１０３に転送するデータを受付け（図５ステップＳ６）、このデータをプロセッサ１１に転送し、自キャッシュメモリ１３ａ（ＤＡ）に格納し、キャッシュメモリ１３ａ（ＡＡ）のステータスを「Ｅ」に更新し（図５ステップＳ７）、処理を終了する。
【０１０７】
（Ｃ１６）はプロセッサ１１がキャッシュラインサイズライト（Ｆ３）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「ＰＥ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からキャッシュラインサイズライト（Ｆ３）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【０１０８】
この場合、プロセッサ１１が書込みを要求するデータは即時自キャッシュメモリ１３ａで実施可能状態であるから、リクエストエージェントのバス制御部１３はバスリクエスト発行が不要であると判定し、自キャッシュメモリ１３ａ（ＤＡ）に「Ｅ」登録されているデータに対してプロセッサ１１からのライトデータを書込み、自キャッシュメモリ１３ａ（ＡＡ）のステータスを「Ｍ」に更新し（図５ステップＳ３）、処理を終了する。
【０１０９】
（Ｃ１７）はプロセッサ１１がパーシャルサイズライト（Ｆ４）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「ＰＥ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプロセッサ１１からパーシャルサイズライト（Ｆ４）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【０１１０】
この場合、自キャッシュメモリ１３ａ（ＡＡ）のステータスは排他的ではあるが、プロセッサ１１からのパーシャルサイズライト（Ｆ４）を即時実行可能なデータ有効状態とはなっていないため、リクエストエージェントのバス制御部１３はバスリクエスト発行が必要であると判定し、バスフェーズ＃１でアドレスバス１０１にバスリクエストＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を発行する（図５ステップＳ４）。
【０１１１】
リクエストエージェントのバス制御部１３はバスフェーズ＃２でスヌープバス１０２よりスヌープ結果を受付けるが（図５ステップＳ５）、これは後の動作に影響しない。そして、バスリクエストはＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）であるから、リクエストエージェントのバス制御部１３はバスフェーズ＃３でメモリコントローラ３がデータバス１０３に転送するデータを受付ける（図５ステップＳ６）。
【０１１２】
ここで、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）によってスヌープエージェントのキャッシュメモリ２３ａは対象アドレスに関しては無効化され、自キャッシュメモリ１３ａの排他性が保証されるため、リクエストエージェントのバス制御部１３はバスフェーズ＃３で受付けたデータにプロセッサ１１からのライトデータを書込み、さらにこれを自キャッシュメモリ１３ａ（ＤＡ）のデータに格納し、キャッシュメモリ１３ａ（ＡＡ）のステータスを「Ｍ」に更新し（図５ステップＳ７）、処理を終了する。
【０１１３】
（Ｃ１８）であるが、従来は「ＰＥ」が存在しないので、プリフェッチリクエスト発生回路１２からのプリフェッチリクエスト（Ｆ５）に関する従来の動作というものも存在しない。
【０１１４】
（Ｃ１９）はプリフェッチリクエスト発生回路１２からのプリフェッチリクエスト（Ｆ５）を発行し、自キャッシュメモリ１３ａ（ＡＡ）のステータスが「ＰＥ」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部１３はプリフェッチリクエスト発行回路１２からプリフェッチリクエスト（Ｆ５）を受付けたならば、自キャッシュメモリ１３ａ（ＡＡ）を索引し（図５ステップＳ１）、バスリクエスト発行の要／不要を判定する（図５ステップＳ２）。
【０１１５】
この場合、自キャッシュメモリ１３ａは既にプリフェッチリクエストが目的としている排他的な状態「ＰＥ」となっているため、リクエストエージェントのバス制御部１３はバスリクエスト発行が不要であると判定し、また既に自キャッシュメモリ１３ａ（ＡＡ）の更新も必要ないことから、何も行わず（図５ステップＳ３）、処理を終了する。
【０１１６】
図１０はバス制御部１３（スヌープエージェント）の動作を示す図であり、図６に示すスヌープエージェントの動作フローに対応する。
【０１１７】
（Ｄ１）はスヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「Ｍ」の時にバスフェーズ＃１でアドレスバス１０１からバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３はバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を受付けたならば、自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１１８】
今、自キャッシュメモリ２３ａ（ＡＡ）のステータスは「Ｍ」であるから、スヌープエージェントのバス制御部２３はスヌープ結果の出力が必要と判断し、バスフェーズ＃２でスヌープバス１０２へ「Ｍ  Ｈｉｔ」を出力し（図６ステップＳ１３）、続いて自キャッシュメモリ２３ａ（ＡＡ）のステータスを「Ｉ」に更新する（図６ステップＳ１４，Ｓ１５）。
【０１１９】
さらに、スヌープエージェントのバス制御部２３は自キャッシュメモリ２３ａ（ＤＡ）内に存在するシステム内唯一の有効データを読出し（図６ステップＳ１６，Ｓ１７）、バスフェーズ＃３でこれをデータバス１０３に出力し（図６ステップＳ１８）、処理を完了する。
【０１２０】
（Ｄ２）はスヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「Ｍ」の時にバスフェーズ＃１でアドレスバス１０１からバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３はバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）を受付けたならば、自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１２１】
今、自キャッシュメモリ２３ａ（ＡＡ）は「Ｍ」であるから、スヌープエージェントのバス制御部２３はスヌープ結果の出力が必要と判断し、バスフェーズ＃２でスヌープバス１０２に「Ｍ  Ｈｉｔ」を出力し（図６ステップＳ１３）、続いて自キャッシュメモリ２３ａ（ＡＡ）のステータスを「Ｉ」に更新する（図６ステップＳ１４，Ｓ１５）。
【０１２２】
ところで、図８及び図９を参照すると、リクエストエージェントがＩｎｖａｌｉｄａｔｅ（Ａ５）を発行するのは、リクエストエージェントのキャッシュメモリ１３ａが「Ｓ」の時のキャッシュラインサイズライト（Ｆ３）、パーシャルサイズライト（Ｆ４）、プリフェッチリクエスト（Ｆ５）の発行時または「Ｉ」の時のキャッシュラインサイズライト（Ｆ３）の発行時であり、いずれの場合も有効データを必要としていない。そのため、スヌープエージェントのバス制御部２３はデータバス１０３へのデータ出力は不要と判定し（図６ステップＳ１６）、処理を終了する。
【０１２３】
（Ｄ３）はスヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「Ｍ」の時にバスフェーズ＃１でアドレスバス１０１から本実施例で追加のバスリクエストＩｎｖａｌｉｄａｔｅ（ＰＥ）を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３は自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１２４】
今、自キャッシュメモリ２３ａ（ＡＡ）のステータスは「Ｍ」であるから、スヌープエージェントのバス制御部２３はスヌープ結果の出力が必要と判断し、バスフェーズ＃２でスヌープバス１０２に「Ｍ  Ｈｉｔ」を出力し（図６ステップＳ１３）、続いて自キャッシュメモリ２３ａ（ＡＡ）のステータスを「Ｉ」に更新する（図６ステップＳ１４，Ｓ１５）。
【０１２５】
ところで、図８及び図９を参照すると、リクエストエージェントがＩｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）を発行するのはリクエストエージェントのキャッシュメモリ１３ａが「Ｉ」の時のプリフェッチリクエスト（Ｆ５）の発行時であるから、リクエストエージェントは有効データを必要としていない。しかしながら、リクエストエージェントのキャッシュは「ＰＥ」へ遷移するため、有効データの保存が必要であるので、スヌープエージェントのバス制御部２３は主記憶４への書き戻しのために、キャッシュメモリ２３ａ（ＤＡ）のデータを読出し（図６ステップＳ１６，Ｓ１７）、バスフェーズ＃３でデータバス１０３へ転送し（図６ステップＳ１８）、処理を終了する。この処理は後に説明する図１１に示すメモリコントローラ３の動作の（Ｅ７）へと続く。
【０１２６】
（Ｄ４）はスヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「Ｍ」の時にバスフェーズ＃１でアドレスバス１０１からバスリクエストＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３はバスリクエストＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受付けたならば、自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１２７】
今、自キャッシュメモリ２３ａ（ＡＡ）のステータスは「Ｍ」であるから、スヌープエージェントのバス制御部２３はスヌープ結果の出力が必要と判断し、バスフェーズ＃２でスヌープバス１０２に「Ｍ  Ｈｉｔ」を出力し（図６ステップＳ１３）、続いて自キャッシュメモリ２３ａ（ＡＡ）のステータスを「Ｉ」に更新する（図６ステップＳ１４，Ｓ１５）。
【０１２８】
さらに、スヌープエージェントのバス制御部２３は自キャッシュメモリ２３ａ（ＤＡ）内に存在するシステム内唯一の有効データを読出し（図６ステップＳ１６，Ｓ１７）、バスフェーズ＃３でこれをデータバス１０３に出力し（図６ステップＳ１８）、処理を終了する。
【０１２９】
（Ｄ５）はスヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「Ｅ」の時にバスフェーズ＃１でアドレスバス１０１からバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３はバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を受付けたならば、自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１３０】
今、自キャッシュメモリ２３ａ（ＡＡ）のステータスは「Ｅ」であるから、スヌープエージェントのバス制御部２３はスヌープ結果の出力が必要と判断し、バスフェーズ＃２でスヌープバス１０２へ「Ｓ  Ｈｉｔ」を出力し（図６ステップＳ１３）、続いて自キャッシュメモリ２３ａ（ＡＡ）のステータスを「Ｓ」に更新する（図６ステップＳ１４，Ｓ１５）。リクエストエージェントが必要とするデータは後述する図１１に示すメモリコントローラ３の動作の（Ｅ２）でメモリコントローラ３より転送されるため、スヌープエージェントはデータバス１０３へのデータ出力不要と判断し（図６ステップＳ１６）、処理を終了する。
【０１３１】
（Ｄ６）、（Ｄ７）、（Ｄ８）はスヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「Ｅ」の時にそれぞれバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３はバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受付けたならば、自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１３２】
今、自キャッシュメモリ２３ａ（ＡＡ）のステータスは「Ｅ」であるが、このバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を契機にステータスを「Ｉ」に遷移させるので、スヌープエージェントのバス制御部２３はスヌープ結果出力を不要と判断する。その後、スヌープエージェントのバス制御部２３は自キャッシュメモリ２３ａ（ＡＡ）のステータスを「Ｉ」に更新する（図６ステップＳ１４，Ｓ１５）。データは後述する図１１に示すメモリコントローラ３の動作の（Ｅ６）、（Ｅ９）、（Ｅ１２）でメモリコントローラ３より転送されるため、スヌープエージェントのバス制御部２３はデータバス１０３へのデータ出力不要と判断し（図６ステップＳ１６）、処理を終了する。
【０１３３】
（Ｄ９）はスヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「Ｓ」の時に、バスフェーズ＃１でアドレスバス１０１からバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３はバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を受け付けたならば、自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１３４】
今、自キャッシュメモリ２３ａ（ＡＡ）のステータスは「Ｓ」であるので、スヌープエージェントのバス制御部２３はスヌープ結果の出力が必要と判断し、バスフェース＃２でスヌープバス１０２に「Ｓ  Ｈｉｔ」を出力する（図６ステップＳ１３）。「Ｓ」ステータスに変更はないので、スヌープエージェントのバス制御部２３は自キャッシュメモリ２３ａ（ＡＡ）のステータスの更新を不要と判断する（図６ステップＳ１４）。データは後述する図１１に示すメモリコントローラ３の動作の（Ｅ２）でメモリコントローラ３より転送されるため、スヌープエージェントのバス制御部２３はデータバス１０３へのデータ出力不要と判断し（図６ステップＳ１６）、処理を終了する。
【０１３５】
（Ｄ１０）、（Ｄ１１）、（Ｄ１２）はスヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「Ｓ」の時に、バスフェーズ＃１でアドレスバス１０１からそれぞれバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３はバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受け付けたならば、自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１３６】
今、自キャッシュメモリ２３ａ（ＡＡ）のステータスは「Ｓ」であるが、このバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を契機にステータスを「Ｉ」に遷移させるので、スヌープエージェントのバス制御部２３はスヌープ結果の出力を不要と判断する。
【０１３７】
その後、スヌープエージェントのバス制御部２３は自キャッシュメモリ２３ａ（ＡＡ）のステータスを「Ｉ」に更新する（図６ステップＳ１４，Ｓ１５）。データは後述する図１１に示すメモリコントローラ３の動作の（Ｅ６）、（Ｅ９）、（Ｅ１２）でメモリコントローラ３より転送されるため、スヌープエージェントのバス制御部２３はデータバス１０３へのデータ出力を不要と判断し（図６ステップＳ１６）、処理を終了する。
【０１３８】
（Ｄ１３）、（Ｄ１４）、（Ｄ１５）、（Ｄ１６）はスヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「Ｉ」の時に、バスフェーズ＃１でアドレスバス１０１からそれぞれバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）、Ｉｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３はバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）、Ｉｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受け付けたならば、自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１３９】
今、自キャッシュメモリ２３ａ（ＡＡ）のステータスは「Ｉ」であるから、スヌープエージェントのバス制御部２３はスヌープ結果の出力を不要と判断する。また、スヌープエージェントのバス制御部２３はキャッシュメモリ２３ａ（ＡＡ）のステータスの更新も行わず（図６ステップＳ１４）、データの出力も行わず（図６ステップＳ１６）、処理を終了する。
【０１４０】
（Ｄ１７）、（Ｄ１８）、（Ｄ１９）、（Ｄ２０）は、スヌープエージェントのキャッシュメモリ２３ａ（ＡＡ）のステータスが「ＰＥ」の時にバスフェーズ＃１でアドレスバス１０１からそれぞれバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）、Ｉｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部２３はバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受け付けたならば、自キャッシュメモリ２３ａ（ＡＡ）を索引し（図６ステップＳ１１）、スヌープ結果出力の要／不要を判定する（図６ステップＳ１２）。
【０１４１】
今、自キャッシュメモリ２３ａ（ＡＡ）のステータスは「ＰＥ」であるが、このバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）、Ｉｎｖａｌｉｄａｔｅ（Ａ５）、Ｉｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）、Ｍｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を契機に、自キャッシュメモリ２３ａ（ＡＡ）のステータスを「Ｉ」に遷移させるので、スヌープエージェントのバス制御部２３はスヌープ結果の出力を不要と判断する。その後、スヌープエージェントのバス制御部２３は自キャッシュメモリ２３ａ（ＡＡ）のステータスを「Ｉ」に更新する（図６ステップＳ１４，Ｓ１５）。出力すべきデータは自キャッシュメモリ２３ａ（ＤＡ）に存在しないので、これで処理を終了する。
【０１４２】
図１１はメモリコントローラ３の動作を示したものであり、図７に示すメモリコントローラ３の動作フローに対応する。
【０１４３】
（Ｅ１）はメモリコントローラ３がバスフェーズ＃１でアドレスバス１０１からバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を受付け、バスフェーズ＃２でスヌープバス１０２から「Ｍ  Ｈｉｔ」を受付けた時（図７ステップＳ２１）の動作を示すものである。
【０１４４】
この場合、有効データはスヌープエージェントのキャッシュメモリ２３ａ内にあるので、メモリコントローラ３は主記憶４の読出しを不要と判断する（図７ステップＳ２２）。ところで、Ｍｅｍ＿Ｒｅａｄが行われると、リクエストエージェントのキャッシュメモリ１３ａは図９に示すバス制御部１３（リクエストエージェント）の動作（Ｃ１０）、（Ｃ１５）のように、「Ｅ」か「Ｓ」に遷移する。
【０１４５】
そして、「Ｅ」または「Ｓ」の場合、主記憶４にも有効データが存在しなければならないので、メモリコントローラ３はスヌープエージェントのバス制御部２３がバスフェーズ＃３でデータバス１０３に転送するデータの主記憶４への書込みが必要であると判断し（図７ステップＳ２５）、バスフェーズ＃３でデータバス１０３からデータを受付け（図７ステップＳ２６）、そのデータを主記憶４に書込み（図７ステップＳ２７）、処理を終了する。
【０１４６】
（Ｅ２）、（Ｅ３）は、メモリコントローラ３がバスフェーズ＃１でアドレスバス１０１からバスリクエストＭｅｍ＿Ｒｅａｄ（Ａ４）を受付け、バスフェーズ＃２でスヌープバス１０２から「Ｓ  Ｈｉｔ」を受付けた場合または「Ｍｉｓｓ」であった場合（図７ステップＳ２１）の動作を示すものである。
【０１４７】
この場合、スヌープエージェントのバス制御部２３のバスフェーズ＃３でのデータバス１０３へのデータ転送が行われないので、メモリコントローラ３は主記憶４の読出しが必要と判断し（図７ステップＳ２２）、主記憶４のデータを読出し（図７ステップＳ２３）、バスフェーズ＃３でこのデータをデータバス１０３へ出力し（図７ステップＳ２４）、処理を終了する。
【０１４８】
（Ｅ４）はメモリコントローラ３がバスフェーズ＃１でアドレスバス１０１からバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）を受付け、バスフェーズ＃２でスヌープバス１０２から「Ｍ  Ｈｉｔ」を受付けた時（図７ステップＳ２１）の動作を示すものである。
【０１４９】
バスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）が行われると、リクエストエージェントのキャッシュメモリ１３ａは図８及び図９に示すバス制御部１３（リクエストエージェント）の動作（Ｃ８）、（Ｃ９）、（Ｃ１１）のように、データを受付けることなく、「Ｍ」に遷移する。したがって、メモリコントローラ３は主記憶４の読出しを不要と判断し（図７ステップＳ２２）、リクエストエージェントのキャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｍ」に遷移する場合、主記憶４に有効データが存在する必要はないので、主記憶４へのデータの書込みを不要と判断し（図７ステップＳ２５）、処理を終了する。
【０１５０】
（Ｅ５）に示すバスフェーズ＃１でアドレスバス１０１からバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）を受付け、バスフェーズ＃２で「Ｓ  Ｈｉｔ」を受付けるケース（図７ステップＳ２１）は、図１０に示すバス制御部２３（スヌープエージェント）の動作によるとありえないことになる。
【０１５１】
（Ｅ６）はメモリコントローラ３がバスフェーズ＃１でアドレスバス１０１からバスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）を受付け、バスフェーズ＃２でスヌープバス１０２が「Ｍｉｓｓ」であった場合（図７ステップＳ２１）の動作を示すものである。
【０１５２】
バスリクエストＩｎｖａｌｉｄａｔｅ（Ａ５）が行われると、リクエストエージェントのキャッシュメモリ１３ａは図８及び図９に示すバス制御部１３（リクエストエージェント）の動作（Ｃ８）、（Ｃ９）、（Ｃ１１）のように、データを受付けることなく、「Ｍ」に遷移する。したがって、メモリコントローラ３は主記憶４の読出しを不要と判断し（図７ステップＳ２２）、リクエストエージェントのキャッシュメモリ１３ａ（ＡＡ）のステータスが「Ｍ」に遷移する場合、主記憶４に有効データが存在する必要はないので、主記憶４へのデータの書込みを不要と判断し（図７ステップＳ２５）、処理を終了する。
【０１５３】
（Ｅ７）はメモリコントローラ３がバスフェーズ＃１でアドレスバス１０１から本実施例で追加となるＩｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）を受付け、バスフェーズ＃２でスヌープバス１０２から「Ｍ  Ｈｉｔ」を受付けた時（図７ステップＳ２１）の動作を示すものである。
【０１５４】
バスリクエストＩｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）が行われると、リクエストエージェントのキャッシュメモリ１３ａは図９に示すバス制御部１３（リクエストエージェント）の動作（Ｃ１４）のように、データを受付けることなく、「ＰＥ」に遷移する。「ＰＥ」はスヌープエージェントがキャッシュラインサイズライト（Ｆ１）によるデータ更新権を保持しているものの、実際に更新が行われるまでは有効データを主記憶４に保持しておく必要がある。したがって、メモリコントローラ３は主記憶４の読出しを不要と判断するが（図７ステップＳ２２）、主記憶４へのデータの書込みは必要と判断し（図７ステップＳ２５）、バスフェーズ＃３でスヌープエージェントのバス制御部２３がデータバス１０３に転送するデータを受付け（図７ステップＳ２６）、そのデータを主記憶４に書込み（図７ステップＳ２７）、処理を終了する。
【０１５５】
（Ｅ８）、（Ｅ９）はメモリコントローラ３がバスフェーズ＃１でアドレスバス１０１からＩｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）を受付け、バスフェーズ＃２でスヌープバス１０２からそれぞれ「Ｓ  Ｈｉｔ」を受付けた場合または「Ｍｉｓｓ」であった場合（図７ステップＳ２１）の動作を示すものである。
【０１５６】
バスリクエストＩｎｖａｌｉｄａｔｅ（ＰＥ）（Ａ６）が行われると、リクエストエージェントのキャッシュメモリ１３ａは図９に示すバス制御部１３（リクエストエージェント）の動作（Ｃ１４）のように、データを受付けることなく、「ＰＥ」に遷移する。「ＰＥ」はスヌープエージェントがキャッシュラインサイズライト（Ｆ１）によるデータ更新権を保持しているものの、実際に更新が行われるまでは有効データを主記憶４に保持しておく必要がある。しかしながら、バスフェース＃２におけるスヌープ結果が「Ｓ  Ｈｉｔ」または「Ｍｉｓｓ」であったということは、既に主記憶４に有効データが存在するということであるから、メモリコントローラ３は主記憶４への書込みを不要と判断し（図７ステップＳ２５）、処理を終了する。
【０１５７】
（Ｅ１０）はメモリコントローラ３がバスフェーズ＃１でアドレスバス１０１からバスリクエストＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｉｄａｔｅ（Ａ７）を受付け、バスフェーズ＃２でスヌープバス１０２から「Ｍ  Ｈｉｔ」を受付けた時（図７ステップＳ２１）の動作を示すものである。
【０１５８】
バスリクエストＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）が行われると、リクエストエージェントのキャッシュメモリ１３ａは図９に示すバス制御部１３（リクエストエージェント）の動作（Ｃ１４）のように、「Ｍ」に遷移する。そして、その時のデータは図１０に示すバス制御部２３（スヌープエージェント）の動作（Ｄ４）のように、スヌープエージェントのバス制御部２３がデータ転送を行う。したがって、メモリコントローラ３は主記憶４の読出しを不要と判断し（図７ステップＳ２２）、さらに主記憶４へのデータの書込みを不要と判断し（図７ステップＳ２５）、処理を終了する。
【０１５９】
（Ｅ１１）、（Ｅ１２）はメモリコントローラ３がバスフェーズ＃１でアドレスバス１０１からバスリクエストＭｅｍ＿Ｒｅａｄ＆Ｉｎｖａｌｉｄａｔｅ（Ａ７）を受付け、バスフェーズ＃２でスヌープバス１０２からそれぞれ「Ｓ  Ｈｉｔ」を受付けた場合または「Ｍｉｓｓ」であった場合（図７ステップＳ２１）の動作を示すものである。
【０１６０】
この時、図１０に示すバス制御部２３（スヌープエージェント）の動作（Ｄ８）、（Ｄ１２）、（Ｄ１６）、（Ｄ２０）のように、スヌープエージェントのバス制御部２３からのデータ転送が行われなので、メモリコントローラ３は主記憶４の読出しが必要と判断し（図７ステップＳ２２）、主記憶４の読出しを行い（図７ステップＳ２３）、バスフェーズ＃３でこのデータをデータバス１０３へ出力し（図７ステップＳ２４）、処理を終了する。
【０１６１】
従来のストアイン方式キャッシュ管理に使用されるＭＥＳＩプロトコルでは、キャッシュラインサイズ用プリフェッチ動作時にリクエストエージェントのキャッシュステータスを「Ｍ」または「Ｅ」にする必要があるため、データを一度自キャッシュメモリに格納する必要がある。
【０１６２】
しかしながら、本実施例では、ＭＥＳＩプロトコルに「ＰＥ」ステータスを追加定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエストエージェントのキャッシュメモリに対するデータ転送の必要性がなくなり、従来のキャッシュステータスＭＥＳＩだけを使用した場合に比べ、主記憶４のアクセス頻度の低減とリクエストエージェントのＤＡアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができる。
【図面の簡単な説明】
【０１６３】
【図１】本発明の一実施例によるマルチプロセッサシステムの構成を示すブロック図である。
【図２】図１に示すアドレスバス、スヌープバス、データバスにおけるバスフェーズを示すタイムチャートである。
【図３】本発明の一実施例によるバスフェーズ＃１で使用するバスリクエストのコマンドコードの一例を示す図である。
【図４】本発明の一実施例によるバスフェーズ＃２で使用するスヌープ結果コードの一例を示す図である。
【図５】図１のキャッシュコヒーレンシ及びバス制御部の動作（リクエストエージェントにおける動作）を示すフローチャートである。
【図６】図１のキャッシュコヒーレンシ及びバス制御部の動作（スヌープエージェントにおける動作）を示すフローチャートである。
【図７】図１のメモリコントローラにおける動作（メモリエージェントにおける動作）を示すフローチャートである。
【図８】図１のキャッシュコヒーレンシ及びバス制御部の動作（リクエストエージェント）を示す図である。
【図９】図１のキャッシュコヒーレンシ及びバス制御部の動作（リクエストエージェント）を示す図である。
【図１０】図１のキャッシュコヒーレンシ及びバス制御部の動作（スヌープエージェント）を示す図である。
【図１１】図１のメモリコントローラの動作に示す図である。
【図１２】図１のプロセッサまたはキャッシュラインサイズライト用プリフェッチリクエスト発行回路が発行するリクエスト種類を示す図である。
【図１３】図１２に示すリクエストの形式の一例を示す図である。
【図１４】本発明の一実施例で用いるＭＥＳＩプロトコルの各ステータス及びＰＥステータスを説明するための図である。
【符号の説明】
【０１６４】
１  カード（＃０）
２  カード（＃１）
３  メモリコントローラ
４  主記憶
１１，２１  プロセッサ
１２，２２  キャッシュラインサイズライト用
プリフェッチリクエスト発行回路
１３，２３  キャッシュコヒーレンシ及びバス制御部
１３ａ，２３ａ  ストアインキャッシュメモリ
１０１  アドレスバス
１０２  スヌープバス
１０３  データバス
【図１】
2006330947.tif 000003
【図２】
2006330947.tif 000004
【図３】
2006330947.tif 000005
【図４】
2006330947.tif 000006
【図５】
2006330947.tif 000007
【図６】
2006330947.tif 000008
【図７】
2006330947.tif 000009
【図８】
2006330947.tif 000010
【図９】
2006330947.tif 000011
【図１０】
2006330947.tif 000012
【図１１】
2006330947.tif 000013
【図１２】
2006330947.tif 000014
【図１３】
2006330947.tif 000015
【図１４】
2006330947.tif 000016