次に、本発明の一実施例について図面を参照して説明する。図1は本発明の一実施例によるマルチプロセッサシステムの構成を示すブロック図である。図1において、本発明の一実施例によるマルチプロセッサシステムは二つのカード(#0)1,(#1)2にプロセッサ11,21を搭載し、それらのプロセッサ11,21用にストアインキャッシュメモリ(以下、キャッシュメモリとする)13a,23aを搭載し、これらのカード(#0)1,(#1)2間をアドレスバス101、スヌープバス102、データバス103によって接続している。
尚、図1中のプロセッサ数、カード数は、本実施例を説明するにあたって必要な最小構成を示したものであり、この個数に限定されるものではない。また、カード間をバス接続したことも、本実施例を説明するにあたって最も簡単なカード間接続方法を示したものであり、各カードのキャッシュと主記憶とのメモリコヒーレンシが保てるのであれば、ここで示したバス接続に限定されるものではない。
プロセッサ11,21はCPU(中央処理装置)やI/O(入出力)プロセッサ等、主記憶へのアクセスリクエストのリクエスタになるものであり、ごく一般的なものでよく、ここではその詳細については言及しない。
キャッシュメモリ13a,23aにはキャッシュラインサイズと呼ばれるキャッシュで管理する最小データ単位毎の主記憶データのコピーと、キャッシュラインサイズデータ毎のキャッシュステータス情報とが保持されている。特に、主記憶データのコピーを格納するキャッシュメモリはDA(Data Array)、キャッシュステータス情報を格納するキャッシュメモリはAA(Address Array)とそれぞれ呼ばれ、DAとAAとは必ず対で使用される。ここで使用するキャッシュステータスはMESI(Modify/Exclusive/Share/Invalidate)プロトコル等の一般的なストアイン方式のキャッシュプロトコルのものとする。
キャッシュコヒーレンシ及びバス制御部(以下、バス制御部とする)13,23はそれぞれカード(#0)1,(#1)2に搭載されるキャッシュメモリ13a,23aとメモリコントローラ3とのキャッシュメモリコヒーレンシ保証を行い、さらにそれを実現するためにカード(#0)1,(#1)2とメモリコントローラ3とを接続するカード間インタフェース、すなわちその用途によってアドレスバス101、スヌープバス102、データバス103と呼ばれるバスインタフェースを制御する。
キャッシュラインサイズライト用プリフェッチリクエスト発行回路(以下、プリフェッチリクエスト発行回路とする)12,22はそれぞれのカード(#0)1,(#1)2に搭載されるプロセッサ11,21からキャッシュラインサイズライトリクエストが発行されることを予見し、プロセッサ11,21が実際にキャッシュラインサイズライトリクエストを発行した際に即座にプロセッサ11,21が搭載されるのと同じカード(#0)1,(#1)2上のキャッシュメモリ13a,23a上でそのライト動作が実施可能となるような状態にキャッシュラインステータスを変更しておくことを目的としたリクエスト(以下、プリフェッチリクエストとする)を発行する。
プロセッサ11,21によるキャッシュラインサイズライトリクエストの予見は、例えば、プロセッサ11,21が連続した主記憶アドレスのキャッシュラインサイズライトを複数、連続発行させた等の一般的に考えられる予見アルゴリズムでよく、ここではその詳細については言及しない。
メモリコントローラ3はカード間インタフェースすなわちアドレスバス101、スヌープバス102、データバス103各々の制御と、DRAM(Dynamic Random Access Memory)等で構成される主記憶4との入出力の制御を行う。
アドレスバス101、スヌープバス102、データバス103各々はカード(#0)1,(#1)2とメモリコントローラ3とを接続するインタフェースである。アドレスバス101はメモリアクセスリクエストを発行するためのバス、スヌープバス102はアドレスバス101に発行されたバスリクエストに対する自カード(#0)1,(#1)2上に搭載のキャッシュメモリ13a,23aのキャッシュステータスを通知するためのバス、データバス103はキャッシュメモリ13a,23aからの読出しデータまたは主記憶4からの読出しデータをリクエスタに転送するためのバスである。ここで、アドレスバス101を使用してメモリアクセスリクエストを発行するカードをリクエストエージェント、メモリコントローラ3を除くそれ以外のカードをスヌープエージェントと称する。
本実施例でプロセッサ11,21またはプリフェッチリクエスト発行回路12,22が発行するリクエスト種類を図12に示し、そのリクエストの形式の一例を図13に示す。図12において、キャッシュラインサイズリード(F1)はプロセッサ11,21からのキャッシュラインサイズと同じデータ量の主記憶4の読出し要求である。パーシャルラインサイズリード(F2)はプロセッサ11,21からのキャッシュラインサイズよりも小さいデータ量の主記憶4の読出し要求である。尚、本実施例においては、キャッシュラインサイズリード(F1)とパーシャルサイズリード(F2)との動作になんら差がないため、以後、単にリードリクエストまたはリードと称する。
キャッシュラインサイズライト(F3)はプロセッサ11,21からのキャッシュラインサイズと同じデータ量の書込み要求である。パーシャルラインサイズライト(F4)はプロセッサ11,21からのキャッシュラインサイズよりも小さいデータ量の書込み要求である。
キャッシュラインサイズライト用プリフェッチリクエスト(プリフェッチリクエスト)は、プリフェッチリクエスト発生回路12,22からのリクエストで、後に実施が予見されるプロセッサ11,21からのキャッシュラインサイズライト(F3)に備えて予め自キャッシュステータスを排他的な状態としておくことを目的として実行されるリクエストである。ここで、排他的なキャッシュステータスとは、従来のMESIプロトコルで言えば、「M(Modify)」または「E(Exclusive)」を指す。本実施例ではこれに「PE(Pseudo−Exclusive)」ステータスを加える。
図13において、(G1)はこれらリクエストのコードを示す。(G2)はこのリクエストがアクセスすべき主記憶アドレスを示す。(G3)はリクエストがパーシャルサイズリード(F2)またはパーシャルサイズライト(F4)の時にリードまたはライトを実施すべきキャッシュラインサイズ内の位置を指定する。
図2は図1に示すアドレスバス101、スヌープバス102、データバス103におけるバスフェーズを示すタイムチャートである。図2において、バスリクエストはバスフェーズ#1〜#3にしたがって処理される。リクエストエージェントはバスフェーズ#1においてアドレスバス101にバスリクエストを発行する。バスリクエストについては図3に示し、その内容については後述する。
バスリクエストを受け取ったスヌープエージェントは、自カード搭載のキャッシュメモリにバスリクエストアドレスA2で指定されるデータが格納されているか、格納されているのであればどのようなステータスであるかの索引を行い、バスフェーズ#2においてスヌープバス102に自カード搭載のキャッシュメモリのキャッシュステータス情報を転送する。
バスフェーズ#3ではスヌープエージェント、またはバスフェーズ#2におけるスヌープ通知によってはメモリコントローラ3が、データバス103にリクエストエージェントに対するリプライデータ転送を行う。尚、ここではカード間インタフェースプロトコルとして3つの固定時間間隔のバスフェーズ#1〜#3を用いているが、これは本実施例における説明の簡単化のためであり、各カード間とメモリコントローラ3とを接続し、キャッシュメモリコヒーレンシを実現できるカード間インタフェースプロトコルであればどのようなものでもよい。
図3は本発明の一実施例によるバスフェーズ#1で使用するバスリクエストのコマンドコードの一例を示す図であり、図4は本発明の一実施例によるバスフェーズ#2で使用するスヌープ結果コードの一例を示す図である。図8及び図9は図1のバス制御部12,22の動作(リクエストエージェント)を示す図であり、図10は図1のバス制御部12,22の動作(スヌープエージェント)を示す図であり、図11は図1のメモリコントローラ3の動作に示す図である。これら図1〜図4及び図8〜図11を参照してバスにこれらリクエストが発行される条件とその際の動作、またスヌープ結果コードが発行される条件とその際の動作については説明する。尚、図8〜図11についての説明は後述する。
(A1)はバスリクエストのコマンドコードであり、Mem_Read(A4)は自キャッシュステータスが「I(Invalidate)」または「PE」の時に「S(Share)」または「E」への遷移を目的としてアドレスバス101へ発行される。
Invalidate(A5)は自キャッシュが「S」または「I」の時に他のキャッシュを全て「I」とし、自キャッシュのみに有効データが存在する「M」ステータスへの遷移を目的として発行される。
Invalidate(PE)(A6)は本実施例において追加となるリクエストであり、他のキャッシュを全て「I」とすることで、自キャッシュ上のデータ有無によらず、即時プロセッサリクエストのキャッシュラインサイズライトを実施することができる「PE」ステータスに遷移することを目的として発行する。
Mem_Read&Invalidate(A7)は自キャッシュが「I」の時に他のキャッシュを全て無効とし(Invalidate)、自キャッシュを「M」に遷移させることを目的とする。
(B1)はバスフェーズ#2で使用するスヌープ結果コードである。Miss(B2)はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが格納されていないか、「S」または「E」であり、バスリクエストを契機として「I」に遷移することを意味する。
「S Hit」(B3)はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが「E」または「S」で格納されており、「E」ならばバスリクエストを契機として「S」ステータスに遷移し、「S」ならばその後も「S」のままデータを格納し続けることを意味する。
「M Hit」(B4)はスヌープエージェントのキャッシュメモリにバスリクエストで指定されるアドレスのデータが格納されており、バスリクエストを契機として「I」に遷移することを意味する。
図5は図1のバス制御部13,23の動作(リクエストエージェントにおける動作)を示すフローチャートである。図5においては、プロセッサリクエストまたはプリフェッチリクエストを受付けたリクエストエージェントのバス制御部13,23の動作を示している。ここでは、便宜的に図1のカード(#0)1をリクエストエージェント、カード(#1)2をスヌープエージェントとして説明する。尚、図5に示す処理はバス制御部13,23が主記憶4のプログラムを読出して実行することで実現される。
リクエストエージェントのバス制御部13はプロセッサ11またはプリフェッチリクエスト発行回路12からメモリアクセスリクエスト、プリフェッチリクエストを受付けると、自カード(#0)1のキャッシュメモリ13a(AA)を参照し(図5ステップS1)、図8に示すバス制御部13の動作(リクエストエージェント)に応じてバスリクエストを発行するか否かを判定する(図5ステップS2)。
バス制御部13はバスリクエスト発行の必要がない場合、キャッシュメモリ13aに必要なデータが必要なステータスで登録されていることになるので、キャッシュメモリ13a(DA)に必要なアクセスを行い、また自カード(#0)1のキャッシュメモリ13a(AA)にアクセスしてキャッシュステータスを必要に応じて更新する(図5ステップS3)。
これに対し、バス制御部13はバスリクエスト発行が必要と判定した場合、キャッシュメモリ13aに必要なデータがないか、期待するキャッシュステータスでないことを意味し、キャッシュメモリ13a内のデータをプロセッサリクエスト、プリフェッチリクエストを処理するのに必要なキャッシュデータ、キャッシュステータスに更新するためにバスリクエスト発行が必要であることを意味する。
バス制御部13はバスフェーズ#1において、図8及び図9に示すバス制御部13の動作(リクエストエージェント)にしたがってプロセッサリクエスト、プリフェッチリクエスト及びキャッシュメモリ13aの状態に応じたバスリクエストを発行し(図5ステップS4)、バスフェーズ#2でスヌープエージェントのキャッシュの状態の報告を受取り(図5ステップS5)、バスフェーズ#3で必要ならばデータバス103のデータを受取る(図5ステップS6)。
その後に、バス制御部13は図8及び図9に示すバス制御部13の動作(リクエストエージェント)にしたがってキャッシュメモリ13a(AA)のステータス更新、キャッシュメモリ13a(DA)のデータの更新、プロセッサ11へのデータ転送等を行う(図5ステップS7)。尚、図8及び図9に示すバス制御部13の動作(リクエストエージェント)の詳細については、本実施例の動作説明の中で説明する。
図6は図1のバス制御部13,23の動作(スヌープエージェントにおける動作)を示すフローチャートである。図6においては、バスフェーズ#1でリクエストエージェントが発行したバスリクエストを受付けた以降のスヌープエージェントのバス制御部23における動作を示している。尚、図6に示す処理はバス制御部13,23が主記憶4のプログラムを読出して実行することで実現される。
スヌープエージェントのバス制御部23はバスリクエストを受付けると、キャッシュメモリ23a(AA)を索引し(図6ステップS11)、バスリクエストが指定するアドレスに対する自キャッシュステータスを確認する。バス制御部23は図10に示すバス制御部23の動作(スヌープエージェント)に応じてスヌープ結果をスヌープバス102に出力する必要があるか否かを判定し(図6ステップS12)、出力する必要がある場合、バスフェーズ#2でスヌープバス102にスヌープ結果を出力する(図6ステップS13)。
続いて、バス制御部23は自カード(#1)2のキャッシュメモリ23a(AA)のステータスを更新する必要の有無を判定し(図6ステップS14)、必要があれば、キャッシュメモリ23a(AA)のステータスを更新する(図6ステップS15)。
さらに、バス制御部23は自カード(#1)2のキャッシュメモリ23a(DA)のデータをデータバス103に出力する必要の有無を判定し(図6ステップS16)、データをデータバス103に出力する必要があれば、自カード(#1)2のキャッシュメモリ23a(DA)のデータを読出し(図6ステップS17)、バスフェーズ#3でデータバス103にデータを転送する(図6ステップS18)。尚、図10に示すバス制御部23の動作(スヌープエージェント)の詳細については本実施例の動作説明の中で説明する。
図7は図1のメモリコントローラ3における動作(メモリエージェントにおける動作)を示すフローチャートである。図7においては、バスフェーズ#1でリクエストエージェントが発行したバスリクエストを受付けた以降のメモリコントローラ3における動作を示している。尚、図7に示す処理はメモリコントローラ3が主記憶4のプログラムを読出して実行することで実現される。
メモリコントローラ3はバスリクエストを受付けると、バスフェーズ#2でスヌープエージェントが出力するスヌープ結果を受付け(図7ステップS21)、図11に示すメモリコントローラ3の動作にしたがってバスフェーズ#3でのデータ出力の必要有無を判定する(図7ステップS22)。
メモリコントローラ3はデータ出力が必要ありと判定した場合、主記憶4からバスリクエストで指定されたアドレスのデータを読出し(図7ステップS23)、バスフェーズ#3でデータバス103へ主記憶4の読出しデータを出力する(図7ステップS24)。
これに対し、メモリコントローラ3はデータ出力が不要と判定した場合、さらにスヌープエージェントがバスフェーズ#3で出力するデータの主記憶4への書込みの必要性の有無を図11に示すメモリコントローラ3の動作にしたがって判定する(図7ステップS25)。
メモリコントローラ3は主記憶4への書込みを必要と判定した場合、バスフェーズ#3でデータを受付け(図7ステップS26)、そのデータを主記憶4に書込む(図7ステップS27)。図11に示すメモリコントローラ3の動作の詳細については本実施例の動作説明の中で説明する。
図14は本発明の一実施例で用いるMESIプロトコルの各ステータス及びPEステータスを説明するための図である。図14において、「M」(H1)は、他キャッシュと排他的、すなわち自キャッシュのみが有効データを有している状態を示している。この状態では、プロセッサ11からのリードリクエスト、キャッシュラインサイズライトリクエスト、パーシャルサイズライトリクエスト、プリフェッチリクエスト発行回路12からのプリフェッチリクエストの全てがバスリクエストを発行することなく、自キャッシュメモリアクセスだけでその処理を完了する。
「E」(H2)は他キャッシュとは排他的だが、自キャッシュと同時に主記憶4にも有効データが存在する状態を示している。この状態でも、プロセッサ11からのリードリクエスト、キャッシュラインサイズライトリクエスト、パーシャルサイズライトリクエスト、プリフェッチリクエスト発行回路12からのプリフェッチリクエストの全てがバスリクエストを発行することなく、自キャッシュメモリアクセスだけでその処理を完了する。
「S」(H3)は自キャッシュに他キャッシュと共有可能な状態で、主記憶4と同じデータを有していることを示している。この状態ではプロセッサ11からのリードリクエストのみが自キャッシュメモリアクセスのみで処理を完了する。他のリクエストは図8及び図9に示すバス制御部13(リクエストエージェント)の動作にしたがってバスリクエストを発行し、バスリクエストの処理が完了した後でないと、その処理を完了しない。
「I」(H4)は自キャッシュ上に有効なデータが存在しないことを示している。この状態では全てのリクエストが図8及び図9に示すバス制御部13(リクエストエージェント)の動作にしたがってバスリクエストを発行し、バスリクエストの処理が完了した後でないと、その処理を完了しない。
「PE」(H5)は本実施例で追加するキャッシュステータスである。自キャッシュにデータは存在しないものの、データ更新の権利は有していることを示している。この状態では、プロセッサ11からのキャッシュラインサイズライトとプリフェッチリクエスト発生回路12からのプリフェッチリクエストのみが自キャッシュメモリアクセスのみで処理を完了する。他のリクエストは図8及び図9に示すバス制御部13(リクエストエージェント)の動作にしたがってバスリクエストを発行し、バスリクエストが完了した後でないと、その処理を完了しない。
図8及び図9は図1のバス制御部13(リクエストエージェント)の動作を示す図であり、図5に示すリクエストエージェントの動作フローに対応する。尚、説明中、便宜的にカード(#0)1をリクエストエージェント、カード(#1)2をスヌープエージェントとする。
(C1)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「M」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13aに登録されているので、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「M」登録されているデータを読出してプロセッサ11へと転送し(図5ステップS3)、処理を終了する。
(C2)はプロセッサ11がキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「M」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)またはパーシャルサイズライトリクエスト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、プロセッサ11が書込みを要求するデータは即時自キャッシュメモリ13aで実施可能状態であるから、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「M」登録されているデータに対してプロセッサ11からのライトデータを書込み(図5ステップS3)、処理を終了する。
(C3)はプリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「M」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発行回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13aは既にプリフェッチリクエストが目的としている排他的な状態「M」となっているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であり、また既に自キャッシュメモリ13a(AA)の更新も必要ないことから、何も行わず(図5ステップS3)、処理を終了する。
(C4)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「E」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13aに登録されているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「E」登録されているデータを読出してプロセッサ11へと転送し(図5ステップS3)、処理を終了する。
(C5)はプロセッサ11がキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「E」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)またはパーシャルサイズライトリクエスト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、プロセッサ11が書込みを要求するデータは即時自キャッシュメモリ13aで実施可能状態であるから、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「E」登録されているデータに対してプロセッサ11からのライトデータを書込み(図5ステップS3)、処理を終了する。
(C6)はプリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5を)発行し、自キャッシュメモリ13a(AA)のステータスが「E」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発行回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13aは既にプリフェッチリクエストが目的としている排他的な状態「E」となっているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であり、また既に自キャッシュメモリ13a(AA)の更新も必要ないことから、何も行わず(図5ステップS3)、処理を終了する。
(C7)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「S」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13aに登録されているので、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「S」登録されているデータを読出してプロセッサ11へと転送し(図5ステップS3)、処理を終了する。
(C8)はプロセッサ11がキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「S」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13a(AA)のステータスはプロセッサ11からのキャッシュラインサイズライト(F3)またはパーシャルサイズライト(F4)を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストのInvalidate(A5)を発行する(図5ステップS4)。
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(A5)であるから、バスフェーズ#3におけるデータ転送はない。
ここで、Invalidate(A5)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13は自キャッシュメモリ13a(DA)のデータに対してプロセッサ11からのライトデータを書込み、自キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
(C9)はプリフェッチリクエスト発生回路12がプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「S」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発生回路12からプリフェッチリクエストF5を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13a(AA)のステータスは、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストのInvalidate(A5)を発行する(図5ステップS4)。
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(A5)であるからバスフェーズ#3におけるデータ転送はない。ここで、Invalidate(A5)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関して無効化され、自キャッシュメモリ13aの排他性が保証されるため、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
(C10)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13a(AA)に存在しないため、リクエストエージェントのバス制御部13はバスリクエストの発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read(A4)を発行する(図5ステップS4)。
そして、リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けて保持する(図5ステップS5)。この結果は後にステップS7で使用する。リクエストエージェントのバス制御部13はバスフェーズ#3でスヌープエージェント[カード(#1)2]またはメモリコントローラ3がデータバス103に転送するデータを受付ける(図5ステップS6)。
リクエストエージェントのバス制御部13はこのデータをプロセッサ11に転送し、自キャッシュメモリ13a(DA)に格納し、キャッシュメモリ13a(AA)のステータスを更新し、処理を終了する。この際、リクエストエージェントのバス制御部13はバスフェーズ#2で受付けたスヌープ結果が「M Hit」ならば「E」に更新し、「S Hit」ならば「S」に更新し、「Miss」ならば「E」に更新する。
(C11)はプロセッサ11がキャッシュラインサイズライト(F3)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13a(AA)のステータスはプロセッサ11からのキャッシュラインサイズライト(F3)を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストのInvalidate(A5)を発行する(図5ステップS4)。
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(A5)であるから、バスフェーズ#3におけるデータ転送はない。
ここで、Invalidate(A5)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13は自キャッシュメモリ13a(DA)のデータに対してプロセッサ11からのライトデータを書込み、自キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
(C12)はプロセッサ11がパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からパーシャルサイズライト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13a(AA)のステータスはプロセッサ11からのパーシャルサイズライト(F4)を即時実行可能な排他的な状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read&Invalidate(A7)を発行する(図5ステップS4)。
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはMem_Read&Invalidate(A7)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でスヌープエージェント[カード(#1)2]またはメモリコントローラ3がデータバス103に転送するデータを受付ける(図5ステップS6)。
ここで、Mem_Read&Invalidate(A7)によって、スヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13はバスフェーズ#3で受付けたデータにプロセッサ11からのライトデータを書込み、さらにこれを自キャッシュメモリ13a(DA)のデータに格納し、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
(C13)はプリフェッチリクエスト発生回路12がプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合のMESIプロトコルのみを採用している従来の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発生回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13a(AA)のステータスは、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定する。そして、従来のMESIプロトコルのみで自キャッシュメモリ13a(AA)を排他的な状態とするためには、「M」または「E」に遷移する必要があり、これには主記憶4のデータをキャッシュメモリ13a(DA)に格納する必要があるため、リクエストエージェントのバス制御部13はバスフェーズ#1でアドレスバス101にMem_Read&Invalidate(A7)を発行する必要がある(図5ステップS4)。
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはMem_Read&Invalidate(A7)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がスヌープエージェント[カード(#1)2]またはデータバス103に転送するデータを受付ける(図5ステップS6)。
ここで、Mem_Read&Invalidate(A7)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13はバスフェーズ#3でスヌープエージェント[カード(#1)2]またはメモリコントローラ3から受付けたデータを自キャッシュメモリ13a(DA)のデータに格納し、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
(C14)はプリフェッチリクエスト発生回路12がプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「I」であった場合、従来のMESIプロトコルに加え、「PE」ステータスを採用する本実施例での動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発生回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13a(AA)のステータスは、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)が目的としている排他的な状態となっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定する。そして、本実施例では、従来の動作[上記の(C13)]とは異なり、自キャッシュメモリ13aを排他的であるが、データが無効であることを許される「PE」に遷移させるため、リクエストエージェントのバス制御部13はバスフェーズ#1でアドレスバス101にInvalidate(PE)(A6)を発行する(図5ステップS4)。
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはInvalidate(PE)(A6)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がデータバス103に転送するデータを受付けない(図5ステップS6)。リクエストエージェントのバス制御部13はキャッシュメモリ13a(AA)のステータスを本実施例で追加した「PE」に更新し(図5ステップS7)、処理を終了する。
このように、本実施例では、上述した従来のようなバスフェーズ#3におけるデータ転送の自キャッシュメモリ13aへのデータ格納を必要としない。以下、(C15)から(C19)は、本実施例で追加する「PE」ステータスに関する動作である。
(C15)はプロセッサ11がリードリクエスト(F1),(F2)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からリードリクエスト(F1),(F2)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、プロセッサ11が要求するリード対象データは自キャッシュメモリ13a(AA)に存在しないため、リクエストエージェントのバス制御部13はバスリクエストの発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read(A4)を発行する(図5ステップS4)。そして、リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102からスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。
リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がデータバス103に転送するデータを受付け(図5ステップS6)、このデータをプロセッサ11に転送し、自キャッシュメモリ13a(DA)に格納し、キャッシュメモリ13a(AA)のステータスを「E」に更新し(図5ステップS7)、処理を終了する。
(C16)はプロセッサ11がキャッシュラインサイズライト(F3)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からキャッシュラインサイズライト(F3)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、プロセッサ11が書込みを要求するデータは即時自キャッシュメモリ13aで実施可能状態であるから、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、自キャッシュメモリ13a(DA)に「E」登録されているデータに対してプロセッサ11からのライトデータを書込み、自キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS3)、処理を終了する。
(C17)はプロセッサ11がパーシャルサイズライト(F4)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプロセッサ11からパーシャルサイズライト(F4)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13a(AA)のステータスは排他的ではあるが、プロセッサ11からのパーシャルサイズライト(F4)を即時実行可能なデータ有効状態とはなっていないため、リクエストエージェントのバス制御部13はバスリクエスト発行が必要であると判定し、バスフェーズ#1でアドレスバス101にバスリクエストMem_Read&Invalidate(A7)を発行する(図5ステップS4)。
リクエストエージェントのバス制御部13はバスフェーズ#2でスヌープバス102よりスヌープ結果を受付けるが(図5ステップS5)、これは後の動作に影響しない。そして、バスリクエストはMem_Read&Invalidate(A7)であるから、リクエストエージェントのバス制御部13はバスフェーズ#3でメモリコントローラ3がデータバス103に転送するデータを受付ける(図5ステップS6)。
ここで、Mem_Read&Invalidate(A7)によってスヌープエージェントのキャッシュメモリ23aは対象アドレスに関しては無効化され、自キャッシュメモリ13aの排他性が保証されるため、リクエストエージェントのバス制御部13はバスフェーズ#3で受付けたデータにプロセッサ11からのライトデータを書込み、さらにこれを自キャッシュメモリ13a(DA)のデータに格納し、キャッシュメモリ13a(AA)のステータスを「M」に更新し(図5ステップS7)、処理を終了する。
(C18)であるが、従来は「PE」が存在しないので、プリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)に関する従来の動作というものも存在しない。
(C19)はプリフェッチリクエスト発生回路12からのプリフェッチリクエスト(F5)を発行し、自キャッシュメモリ13a(AA)のステータスが「PE」であった場合の動作を示すものである。すなわち、リクエストエージェントのバス制御部13はプリフェッチリクエスト発行回路12からプリフェッチリクエスト(F5)を受付けたならば、自キャッシュメモリ13a(AA)を索引し(図5ステップS1)、バスリクエスト発行の要/不要を判定する(図5ステップS2)。
この場合、自キャッシュメモリ13aは既にプリフェッチリクエストが目的としている排他的な状態「PE」となっているため、リクエストエージェントのバス制御部13はバスリクエスト発行が不要であると判定し、また既に自キャッシュメモリ13a(AA)の更新も必要ないことから、何も行わず(図5ステップS3)、処理を終了する。
図10はバス制御部13(スヌープエージェント)の動作を示す図であり、図6に示すスヌープエージェントの動作フローに対応する。
(D1)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)のステータスは「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102へ「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
さらに、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(DA)内に存在するシステム内唯一の有効データを読出し(図6ステップS16,S17)、バスフェーズ#3でこれをデータバス103に出力し(図6ステップS18)、処理を完了する。
(D2)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)は「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102に「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
ところで、図8及び図9を参照すると、リクエストエージェントがInvalidate(A5)を発行するのは、リクエストエージェントのキャッシュメモリ13aが「S」の時のキャッシュラインサイズライト(F3)、パーシャルサイズライト(F4)、プリフェッチリクエスト(F5)の発行時または「I」の時のキャッシュラインサイズライト(F3)の発行時であり、いずれの場合も有効データを必要としていない。そのため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力は不要と判定し(図6ステップS16)、処理を終了する。
(D3)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101から本実施例で追加のバスリクエストInvalidate(PE)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)のステータスは「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102に「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
ところで、図8及び図9を参照すると、リクエストエージェントがInvalidate(PE)(A6)を発行するのはリクエストエージェントのキャッシュメモリ13aが「I」の時のプリフェッチリクエスト(F5)の発行時であるから、リクエストエージェントは有効データを必要としていない。しかしながら、リクエストエージェントのキャッシュは「PE」へ遷移するため、有効データの保存が必要であるので、スヌープエージェントのバス制御部23は主記憶4への書き戻しのために、キャッシュメモリ23a(DA)のデータを読出し(図6ステップS16,S17)、バスフェーズ#3でデータバス103へ転送し(図6ステップS18)、処理を終了する。この処理は後に説明する図11に示すメモリコントローラ3の動作の(E7)へと続く。
(D4)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「M」の時にバスフェーズ#1でアドレスバス101からバスリクエストMem_Read&Invalidate(A7)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read&Invalidate(A7)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)のステータスは「M」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102に「M Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。
さらに、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(DA)内に存在するシステム内唯一の有効データを読出し(図6ステップS16,S17)、バスフェーズ#3でこれをデータバス103に出力し(図6ステップS18)、処理を終了する。
(D5)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「E」の時にバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)のステータスは「E」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェーズ#2でスヌープバス102へ「S Hit」を出力し(図6ステップS13)、続いて自キャッシュメモリ23a(AA)のステータスを「S」に更新する(図6ステップS14,S15)。リクエストエージェントが必要とするデータは後述する図11に示すメモリコントローラ3の動作の(E2)でメモリコントローラ3より転送されるため、スヌープエージェントはデータバス103へのデータ出力不要と判断し(図6ステップS16)、処理を終了する。
(D6)、(D7)、(D8)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「E」の時にそれぞれバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)のステータスは「E」であるが、このバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を契機にステータスを「I」に遷移させるので、スヌープエージェントのバス制御部23はスヌープ結果出力を不要と判断する。その後、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。データは後述する図11に示すメモリコントローラ3の動作の(E6)、(E9)、(E12)でメモリコントローラ3より転送されるため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力不要と判断し(図6ステップS16)、処理を終了する。
(D9)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「S」の時に、バスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)のステータスは「S」であるので、スヌープエージェントのバス制御部23はスヌープ結果の出力が必要と判断し、バスフェース#2でスヌープバス102に「S Hit」を出力する(図6ステップS13)。「S」ステータスに変更はないので、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスの更新を不要と判断する(図6ステップS14)。データは後述する図11に示すメモリコントローラ3の動作の(E2)でメモリコントローラ3より転送されるため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力不要と判断し(図6ステップS16)、処理を終了する。
(D10)、(D11)、(D12)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「S」の時に、バスフェーズ#1でアドレスバス101からそれぞれバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)のステータスは「S」であるが、このバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を契機にステータスを「I」に遷移させるので、スヌープエージェントのバス制御部23はスヌープ結果の出力を不要と判断する。
その後、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。データは後述する図11に示すメモリコントローラ3の動作の(E6)、(E9)、(E12)でメモリコントローラ3より転送されるため、スヌープエージェントのバス制御部23はデータバス103へのデータ出力を不要と判断し(図6ステップS16)、処理を終了する。
(D13)、(D14)、(D15)、(D16)はスヌープエージェントのキャッシュメモリ23a(AA)のステータスが「I」の時に、バスフェーズ#1でアドレスバス101からそれぞれバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)のステータスは「I」であるから、スヌープエージェントのバス制御部23はスヌープ結果の出力を不要と判断する。また、スヌープエージェントのバス制御部23はキャッシュメモリ23a(AA)のステータスの更新も行わず(図6ステップS14)、データの出力も行わず(図6ステップS16)、処理を終了する。
(D17)、(D18)、(D19)、(D20)は、スヌープエージェントのキャッシュメモリ23a(AA)のステータスが「PE」の時にバスフェーズ#1でアドレスバス101からそれぞれバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けた時の動作である。すなわち、スヌープエージェントのバス制御部23はバスリクエストInvalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を受け付けたならば、自キャッシュメモリ23a(AA)を索引し(図6ステップS11)、スヌープ結果出力の要/不要を判定する(図6ステップS12)。
今、自キャッシュメモリ23a(AA)のステータスは「PE」であるが、このバスリクエストMem_Read(A4)、Invalidate(A5)、Invalidate(PE)(A6)、Mem_Read&Invalidate(A7)を契機に、自キャッシュメモリ23a(AA)のステータスを「I」に遷移させるので、スヌープエージェントのバス制御部23はスヌープ結果の出力を不要と判断する。その後、スヌープエージェントのバス制御部23は自キャッシュメモリ23a(AA)のステータスを「I」に更新する(図6ステップS14,S15)。出力すべきデータは自キャッシュメモリ23a(DA)に存在しないので、これで処理を終了する。
図11はメモリコントローラ3の動作を示したものであり、図7に示すメモリコントローラ3の動作フローに対応する。
(E1)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
この場合、有効データはスヌープエージェントのキャッシュメモリ23a内にあるので、メモリコントローラ3は主記憶4の読出しを不要と判断する(図7ステップS22)。ところで、Mem_Readが行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C10)、(C15)のように、「E」か「S」に遷移する。
そして、「E」または「S」の場合、主記憶4にも有効データが存在しなければならないので、メモリコントローラ3はスヌープエージェントのバス制御部23がバスフェーズ#3でデータバス103に転送するデータの主記憶4への書込みが必要であると判断し(図7ステップS25)、バスフェーズ#3でデータバス103からデータを受付け(図7ステップS26)、そのデータを主記憶4に書込み(図7ステップS27)、処理を終了する。
(E2)、(E3)は、メモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read(A4)を受付け、バスフェーズ#2でスヌープバス102から「S Hit」を受付けた場合または「Miss」であった場合(図7ステップS21)の動作を示すものである。
この場合、スヌープエージェントのバス制御部23のバスフェーズ#3でのデータバス103へのデータ転送が行われないので、メモリコントローラ3は主記憶4の読出しが必要と判断し(図7ステップS22)、主記憶4のデータを読出し(図7ステップS23)、バスフェーズ#3でこのデータをデータバス103へ出力し(図7ステップS24)、処理を終了する。
(E4)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
バスリクエストInvalidate(A5)が行われると、リクエストエージェントのキャッシュメモリ13aは図8及び図9に示すバス制御部13(リクエストエージェント)の動作(C8)、(C9)、(C11)のように、データを受付けることなく、「M」に遷移する。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断し(図7ステップS22)、リクエストエージェントのキャッシュメモリ13a(AA)のステータスが「M」に遷移する場合、主記憶4に有効データが存在する必要はないので、主記憶4へのデータの書込みを不要と判断し(図7ステップS25)、処理を終了する。
(E5)に示すバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付け、バスフェーズ#2で「S Hit」を受付けるケース(図7ステップS21)は、図10に示すバス制御部23(スヌープエージェント)の動作によるとありえないことになる。
(E6)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストInvalidate(A5)を受付け、バスフェーズ#2でスヌープバス102が「Miss」であった場合(図7ステップS21)の動作を示すものである。
バスリクエストInvalidate(A5)が行われると、リクエストエージェントのキャッシュメモリ13aは図8及び図9に示すバス制御部13(リクエストエージェント)の動作(C8)、(C9)、(C11)のように、データを受付けることなく、「M」に遷移する。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断し(図7ステップS22)、リクエストエージェントのキャッシュメモリ13a(AA)のステータスが「M」に遷移する場合、主記憶4に有効データが存在する必要はないので、主記憶4へのデータの書込みを不要と判断し(図7ステップS25)、処理を終了する。
(E7)はメモリコントローラ3がバスフェーズ#1でアドレスバス101から本実施例で追加となるInvalidate(PE)(A6)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
バスリクエストInvalidate(PE)(A6)が行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C14)のように、データを受付けることなく、「PE」に遷移する。「PE」はスヌープエージェントがキャッシュラインサイズライト(F1)によるデータ更新権を保持しているものの、実際に更新が行われるまでは有効データを主記憶4に保持しておく必要がある。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断するが(図7ステップS22)、主記憶4へのデータの書込みは必要と判断し(図7ステップS25)、バスフェーズ#3でスヌープエージェントのバス制御部23がデータバス103に転送するデータを受付け(図7ステップS26)、そのデータを主記憶4に書込み(図7ステップS27)、処理を終了する。
(E8)、(E9)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からInvalidate(PE)(A6)を受付け、バスフェーズ#2でスヌープバス102からそれぞれ「S Hit」を受付けた場合または「Miss」であった場合(図7ステップS21)の動作を示すものである。
バスリクエストInvalidate(PE)(A6)が行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C14)のように、データを受付けることなく、「PE」に遷移する。「PE」はスヌープエージェントがキャッシュラインサイズライト(F1)によるデータ更新権を保持しているものの、実際に更新が行われるまでは有効データを主記憶4に保持しておく必要がある。しかしながら、バスフェース#2におけるスヌープ結果が「S Hit」または「Miss」であったということは、既に主記憶4に有効データが存在するということであるから、メモリコントローラ3は主記憶4への書込みを不要と判断し(図7ステップS25)、処理を終了する。
(E10)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read&Invaidate(A7)を受付け、バスフェーズ#2でスヌープバス102から「M Hit」を受付けた時(図7ステップS21)の動作を示すものである。
バスリクエストMem_Read&Invalidate(A7)が行われると、リクエストエージェントのキャッシュメモリ13aは図9に示すバス制御部13(リクエストエージェント)の動作(C14)のように、「M」に遷移する。そして、その時のデータは図10に示すバス制御部23(スヌープエージェント)の動作(D4)のように、スヌープエージェントのバス制御部23がデータ転送を行う。したがって、メモリコントローラ3は主記憶4の読出しを不要と判断し(図7ステップS22)、さらに主記憶4へのデータの書込みを不要と判断し(図7ステップS25)、処理を終了する。
(E11)、(E12)はメモリコントローラ3がバスフェーズ#1でアドレスバス101からバスリクエストMem_Read&Invalidate(A7)を受付け、バスフェーズ#2でスヌープバス102からそれぞれ「S Hit」を受付けた場合または「Miss」であった場合(図7ステップS21)の動作を示すものである。
この時、図10に示すバス制御部23(スヌープエージェント)の動作(D8)、(D12)、(D16)、(D20)のように、スヌープエージェントのバス制御部23からのデータ転送が行われなので、メモリコントローラ3は主記憶4の読出しが必要と判断し(図7ステップS22)、主記憶4の読出しを行い(図7ステップS23)、バスフェーズ#3でこのデータをデータバス103へ出力し(図7ステップS24)、処理を終了する。
従来のストアイン方式キャッシュ管理に使用されるMESIプロトコルでは、キャッシュラインサイズ用プリフェッチ動作時にリクエストエージェントのキャッシュステータスを「M」または「E」にする必要があるため、データを一度自キャッシュメモリに格納する必要がある。
しかしながら、本実施例では、MESIプロトコルに「PE」ステータスを追加定義することによって、キャッシュラインサイズライト用プリフェッチ動作時にリクエストエージェントのキャッシュメモリに対するデータ転送の必要性がなくなり、従来のキャッシュステータスMESIだけを使用した場合に比べ、主記憶4のアクセス頻度の低減とリクエストエージェントのDAアクセス頻度の低減とシステムインタフェースのデータ転送頻度の低減とを図ることができる。