(57)【要約】      【課題】複数のキャッシュユニット及び主記憶側のメモリ管理ユニット（ディレクトリ側）を結合しているスヌープバスの負担を軽減する。      【解決手段】主記憶２８に最新データがなく複数のキャッシュユニット１８に存在する場合、複数のキャッシュユニットの１つが最新データを主記憶２８へコピーバックするための書込所有権を保有している。この状態で、書込所有権を有するキャッシュユニットでプロセッサ１６による最新データのリプレースが発生した場合、書込所有権を最新データを保有しているキャッシュユニットに委譲し、最新データを保有するキャッシュユニットが１つになるまで主記憶２８への最新データのコピーバックを抑止して行わないようにする。    【選択図】      図１
2006179033.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサ群と、
前記プロセッサ群に共有される主記憶と、
前記複数のプロセッサ毎に設けられ、前記主記憶のアクセスを高速化するキャッシュユニットと、
前記主記憶のデータの前記キャッシュユニットへの登録状態をキャッシュライン単位に記憶するディレクトリ記憶部と、
前記主記憶とキャッシュユニット間を接続する第１共通バスと、
前記複数のプロセッサ群の間を接続する第２共通バスと、
前記主記憶とキャッシュユニット間のキャッシュコヒーレンスを実現する内部コヒーレンス処理部と、
前記複数のプロセッサ群の間のキャッシュコヒーレンスを実現する外部コヒーレンス処理部とを有し、
前記キャッシュユニットは、前記キャッシュラインを複数のサブラインに分割して管理し、
前記ディレクトリ記憶部は、前記キャッシュユニット上のデータが最新値で前記主記憶上のデータが旧値となるダーティ状態である場合のキャッシュ状態を前記サブライン単位に記憶し、前記キャッシュユニット上と主記憶上のデータが同じ値になるシェア状態を前記キャッシュライン単位に記憶し、
前記複数のプロセッサ群は、少なくとも１つ以上のプロセッサで構成されるプロセッサモジュールに分割され、前記ディレクトリ記憶部へのキャッシュ状態の記憶を前記プロセッサモジュール単位に行うとともに、
前記主記憶に最新データがなく複数のキャッシュユニットに存在し、該複数のキャッシュユニットの１つが該最新データの前記主記憶へコピーバックのための書込所有権を保有している場合には、
前記書込所有権を有するキャッシュユニットで前記最新データのリプレースが発生した際に、該書込所有権を前記最新データを保有しているキャッシュユニットに委譲し、最新データを保有するキャッシュユニットが１つになるまで前記主記憶への最新データのコピーバックを抑止することを特徴とするキャッシュコヒーレンス装置。
【請求項２】
前記複数のキャッシュユニットは固有の識別番号をもち、前記最新データをリプレースしたキャッシュユニットの識別番号を基に、予め定めた順番に従って前記書込所有権を委譲することを特徴とする請求項１記載のキャッシュコヒーレンス装置。
【請求項３】
前記主記憶を管理するメモリ管理ユニットは、最新データが前記キャッシュユニットに存在し主記憶のデータがダーティ状態にあることを示す書込所有権を有し、前記キャッシュユニット間で書込所有権の委譲が行われても、前記メモリ管理ユニットの書込所有権を他のプロセッサモジュールに移動せずにそのまま維持することを特徴とする請求項１記載のキャッシュコヒーレンス装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサモジュールをシステムバスを介して接続したマルチプロセッサシステムのキャッシュコヒーレンス装置に関し、特に、モジュール内に主記憶と内部共有バスを介してキャッシュ付きプロセッサエレメントを複数接続したマルチプロセッサシステムのキャッシュコヒーレンス装置に関する。
【背景技術】
【０００２】
近年、コンピュータ装置の処理性能を飛躍的に向上させることが期待できることから、複数のプロセッサを共有バスを介して接続したマルチプロセッサシステムの開発が進められている。マルチプロセッサシステムにあっては、プロセッサにスパースカラ型やＶＬＩＷ（Very Long Instruction Word) 型を採用することで、プロセッサ単体の処理性能を向上させると同時に、キャッシュ機構の採用が性能向上に大きく寄与する。
【０００３】
このようなプロセッサのキャッシュ機構としては、プロセッサに一次キャッシュを内蔵させると同時に、外部の主記憶との間に２次キャッシュを設けており、２次キャッシュのヒット率を高めることで、主記憶へのアクセスを低減して性能向上を図る。
【０００４】
更に、複数のプロセッサに対する共有メモリとして、単独のメモリユニットを設けず、所定数のプロセッサ単位にその主記憶として機能するローカルメモリを分散配置し、このローカルメモリに共有メモリ領域を分散配置し、システム規模に応じたローカルメモリユニットの数により共有メモリを柔軟に構築できるようにしている。
【０００５】
図６５は従来の典型的なマルチプロセッサシステムを示す。このシステムは、例えば２台のプロセッサモジュール１０００−１，１０００−２を有する。プロセッサモジュール１０００−１，１０００−２は同一構成であり、例えばプロセッサモジュール１０００−１を例にとると、プロセッサエレメント１１００−１，１１００−２、キャッシュユニット１２００−１，１２００−２、共通バス１３００−１及びローカルストレージユニット１４００−１で構成される。
【０００６】
プロセッサエレメント１１００−１，１１００−２は、一次キャッシュを内蔵しており、外部に２次キャッシュとしてのキャッシュユニット１２００−１，１２００−２を設けている。ローカルストレージユニット１４００−１は、プロセッサエレメント１１００−１，１１００−２に固有の物理空間を割り当てることで各々の主記憶として機能し、同時に、プロセッサモジュール１０００−１，１０００−２の全てのプロセッサエレメント１１００−１〜１１００−４に共有される共有メモリ空間を割り当てている。
【０００７】
プロセッサモジュール１０００−２側も同様に、プロセッサエレメント１１００−３，１１００−４、キャッシュユニット１２００−３，１２００−４、共通バス１３００−２及びローカルストレージユニット１４００−２で構成される。プロセッサモジュール１０００−１，１０００−２の共通バス１３００−１，１３００−２は、モジュール筐体のバックパネルを経由して接続された１つのバスとして動作する。
【０００８】
複数のプロセッサ１１００−１〜１１００−４に設けたキャッシュユニット１２００−１〜１２００−４のキャッシュ制御は、あるプロセッサエレメントで読出アクセスがあり、ミスヒットであれば、対応するローカルストレージのアクセスで読出アドレスのコピー値をキャッシュに転送して応答する。
【０００９】
またプロセッサの書込アクセスでキャッシュがミスヒットになると、対応するローカルストレージのコピー値をキャッシュに転送して上書きする。このとき主記憶の値と上書きされたキャッシュのコピー値は異なることから、キャッシュ上の最新値を主記憶に転送して旧い値を更新するコピーバックによりキャッシュコヒーレンスが実現される。
【００１０】
また、あるローカルストレージの値を複数のキャッシュにコピーしている場合には、書込アクセスがあったキャッシュ以外の他のキュッシュ上のコピー値を無効化した後に、アクセス元のキャッシュ上のコピー値を更新して最新値とし、その後にローカルストレージにコピーバックすることで、キャッシュコヒーレンスが実現される。
【特許文献２】特開平６−２５９３８４号公報
【特許文献１】特開平５−１００９５２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、図６５のマルチプロセッサシステムにあっては、全てのプロセッサエレメント、キャッシュユニット及びローカルストレージを１つのバスに接続する構成をとっているため、次の問題があった。
【００１２】
まずキャッシュコヒーレンスを実現するために、読出又は書込アクセスを発生したプロセッサエレメントのキャッシュユニットとアクセスアドレスをもつローカルストレージユニットの間で命令及びデータの転送を行う。このため、複数のプロセッサエレメントでコヒーレンスを実現するためのバス転送要求が競合し、共通バスの負荷がプロセッサ数に応じて増加し、高速処理ができない。
【００１３】
勿論、共通バスを複数設けることで、バス負荷を下げることはできるが、プロセッサ数が１０台，２０台と増加すると、対応できなくなる。
【００１４】
またプロセッサモジュール１０００−１，１０００−２は、モジュール筐体単位に構築されている。このため共通バス１３００−１，１３００−２は、筐体のバックパネルを経由してコネクタでケーブル接続される。このためバスの線路長が長くなり、電気的な特性によりバスのクロック周波数を上げることができない。
【００１５】
例えばモジュール内のバスだけであればクロック周波数を６０ＭＨｚとできるものが、バックパネルを共有したバス接続では、４０ＭＨｚに下がってしまう。本発明は、このような従来の問題点に鑑みてなされたもので、プロセッサモジュールの内部と外部に共通バスを設けた２階層の共通バス構造により、各プロセッサモジュールに内蔵した複数のプロセッサのキャッシュと各モジュールに１つ設けたローカルストレージ間でのキャッシュコヒーレンスを効率良く実現して処理性能を高めたキャッシュコヒーレンス装置を提供することを目的とする。
【００１６】
またマルチプロセッサシステムにおいて、特に性能に大きな影響を及ぼすのがシステムバスである。システムバスはデータ転送速度と、バスサイクルの中でデータ転送に使われるサイクルの割合であるバス使用効率を高めなければならない。さもなければシステムバスがボトルネックとなり、プロセッサ数を増やしても性能が向上しなくなる。
【００１７】
データ転送速度を向上するためにはデータバスの幅を拡げたり、信号振幅の小さいインタフェースの採用でバスの動作周波数を上げるのが一般的である。またバス使用効率を高めるためには、メモリアクセスなどの要求を出してから応答を受け取るまでの間、他のバスユニットに使用権を譲るスプリット型転送方式の採用があげられる。
【００１８】
したがって本発明は、分散共有メモリ型のマルチプロセッサシステムにおいて、キャッシュコヒーレンス維持を効率よく実現し、且つシステムの拡張性を損なうことのないキャッシュコヒーセンス装置の共通バスを提供することを目的とする。
【課題を解決するための手段】
【００１９】
図１は本発明の原理説明図である。
【００２０】
まず本発明は、複数のプロセッサ１６を備えたプロセッサ群を有する。このプロセッサ群は、図１（Ａ）のように、少なくとも１つ以上のプロセッサで構成される例えば３つのプロセッサモジュール１０−１〜１０−３に分割される。またプロセッサ群が共有する主記憶が設けられる。主記憶は複数のローカル記憶部２８に分割され、各ローカル記憶部８はプロセッサモジュール１０−１〜１０−３上に配置される。以下の説明では、主記憶にローカル記憶の符号を付す。
【００２１】
プロセッサ１６の各々には主記憶２８のアクセスを高速化するキャッシュユニット１８が設けられる。主記憶２８のデータのキャッシュユニット１８への登録状態はキャッシュライン単位にディレクトリ記憶部３０に記憶される。主記憶２８とキャッシュユニット１８間は第１共通バス２２で接続され、プロセッサモジュール１０−１〜１０−３の間は第２共通バス１２で接続される。主記憶２８とキャッシュユニット１８間のキャッシュコヒーレンスは、スヌープユニット２０による内部コヒーレンス処理部で実現される。また複数のプロセッサモジュール１０−１〜１０−３の間のキャッシュコヒーレンスは、キャッシュ変換部８０による外部コヒーレンス処理部で実現される。
【００２２】
キャッシュユニット１８は、キャッシュラインを複数のサブラインに分割して管理し、ディレクトリ記憶部３０は、キャッシュユニット１８上のデータが最新値で主記憶２８上のデータが旧値となるダーティ状態である場合のキャッシュ状態をサブライン単位に記憶し、キャッシュユニット上と主記憶上のデータが同じ値になるシェア状態をキャッシュライン単位に記憶する。
【００２３】
またディレクトリ記憶部３０へのキャッシュ状態の記憶は、プロセッサモジュール単位に行われる。具体的には、プロセッサモジュール１０−１〜１０−３は、ディレクトリ記憶部３０に複数のプロセッサモジュール１０−１〜１０−３との対応状態を記憶するディレクトリ制御部を有し、このディレクトリ制御部によってディレクトリ記憶部３０への登録を複数のプロセッサモジュール単位に指定する。
【００２４】
複数のプロセッサモジュール１０−１〜１０−３の各々は、複数のプロセッサ１６と、各プロセッサ１６毎に設けられたキャッシュユニット１８と、主記憶として使用されるローカル記憶２８と、主記憶２８及びディレクトリ記憶部３０を管理するメモリ管理ユニット２６と、複数のキャッシュユニット１８とメモリ管理ユニット２６を接続する第１共通バス２２と、複数のプロセッサモジュール１０−１〜１０−３間を接続する第２共通バス１２と、第１共通バス２２と第１共通バス１２のプロトコル変換を管理するプロトコル管理ユニット２４と、プロセッサモジュール１０−１〜１０−３間を第２共通バス１２で結合するモジュール接続ユニット３２と、第１共通バス２２で特定マシンサイクルに同期させてキャッシュユニット１８をスヌープすることによりキャッシュコヒーレンスを実現するスヌープユニット２０と、メモリ管理ユニット２６に設けられ第２共通バス１２によるディレクトリ記憶部３０の参照に基づきプロセッサモジュール１０−１〜１０−３間でのコヒーレンスを実現するキャッシュ変換部８０を設けている。
【００２５】
キャッシュユニット１８は、例えば２５６バイトのキャッシュラインを６４バイトのサブラインに分割して管理する。これに対応してディレクトリメモリ３０には、キャッシュ上のデータが最新値で主記憶上のデータが旧値となるダーティ状態がサブライン単位に登録される。またキャッシュ上と主記憶上のデータが同じ値になるシェア状態は、キャッシュライン単位に登録される。
【００２６】
ディレクトリ記憶部３０にキャッシュライン単位に登録されたディレクトリエントリ１０４は、図１（Ｂ）のように、例えばダーティ状態の有無を示す複数のサブラインビットＤ３〜Ｄ０と、シェア状態を複数のプロセッサモジュール毎に示すシェアードマップビットＳ７〜Ｓ０を有する。更にシェアードマップビットＳ７〜Ｓ０のビット位置とプロセッサモジュール１０の対応関係を登録する構成レジスタを設け、この構成レジスタによって同一マップビットに複数の複数のプロセッサモジュールのシェア状態を登録可能としている。
【００２７】
更に、ディレクトリエントリ１０４のサブラインビットＤ３〜Ｄ０をセットした場合には、このビットセットに対応して最新値を持つキャッシュユニット１８が存在するプロセッサモジュール１０の情報（ＰＭ−ＩＤ）を、主記憶２８の特定領域に格納する。またサブラインビットＤ３〜Ｄ０をリセットした場合は、このリセットビットに対応して、最新値が存在するプロセッサモジュール１０の情報（ＰＭ−ＩＤ）を、主記憶２８の特定領域に格納する。
【００２８】
プロセッサ１６は、キャッシュラインのサブライン単位に読出アクセス又は書込アクセスを行う。第２共通バスとしてのシステムバス１２及び第１共通バスとしてのスヌープバス２２は、指令転送と応答転送を分離したスプリット形式により情報を転送する。
【００２９】
プロセッサの読出アクセスに対するキャッシュコヒーレンスには、次の読出モード１〜３がある。
【００３０】
［読出モード１］
この読出モード１は、第１のプロセッサモジュール１０−１内の任意のプロセッサ１６の読出アクセスに対し自己のキャッシュユニット１８及びスヌープバス２２で接続した他の全てのキャッシュユニット１８でミスヒットし、且つ読出アドレスが第１のプロセッサモジュール１０−１内の主記憶にあり、更に読出アドレスのデータがリモートとなる第２のプロセッサモジュール１０−２内のキャッシュユニット１８に最新値をもつダーティ状態で存在する場合である。
【００３１】
この場合、読出アクセスを発生した第１のプロセッサモジュール１０−１は、システムバス１２に指令を発行して第２のプロセッサモジュール１０−２にアクセスし、自己のスヌープバス２２を介してダーティ状態にあるキャッシュユニット１８から最新値を取得した後に、システムバス１２で最新値を第１のプロセッサモジュール１０−１に応答する。第１のプロセッサモジュール１０−１は、この応答で得られた最新値をアクセス元のキャッシュユニット１８に格納して読出アクセスに応答させ、同時に主記憶２８に最新値を書き込むことでキャッシュコヒーレントを実現する。
【００３２】
ここで第１のプロセッサモジュール１０−１、主記憶２８に最新値を書き込んだ際に、ディレクトリ記憶部３０のディレクトリエントリ１０４をダーティ状態をシェア状態に更新し、またアクセス元のキャッシュユニット１８はタグメモリの無効化状態をシェア状態に更新する。
【００３３】
［読出モード２］
この読出モード２は、第１のプロセッサモジュール１０−１内の任意のプロセッサ１６の読出アクセスに対し自己のキャッシュユニット１８及びスヌープバス２２で接続した他の全てのキャッシュユニット１８でミスヒットし、且つ読出アドレスが第２のプロセッサモジュール１０−２内の主記憶２８にあり、更に読出アドレスのデータが第３のプロセッサモジュール１０−３内のキャッシュユニット１８に最新値をもつダーティ状態で存在する場合である。
【００３４】
この場合、第１のプロセッサモジュール１０−１は、システムバス１２に指令を発行して第２のプロセッサモジュール１０−２にアクセスし、第２のプロセッサモジュール１０−２はシステムバス１２から受領した指令に基づき、システムバス１２に指令を発行して第３のプロセッサモジュール１０−３にアクセスする。第３のプロセッサモジュール１０−３は自己のスヌープバス２２によってダーティ状態にあるキャッシュユニット１８から最新値を取得した後に、システムバス１２で最新値を第１及び第２のプロセッサモジュール１０−１，１０−２に応答する。
【００３５】
第２のプロセッサモジュール１０−２は、応答の受領で得られた最新値を主記憶２８に書き込み、また第１のプロセッサモジュール１０−１は、応答の受領で得られた最新値をアクセス元のキャッシュユニット１８に格納して読出アクセスに応答させる。
【００３６】
ここで、第２のプロセッサモジュール１０−２は、主記憶２８に最新値を書き込んだ際にディレクトリ記憶部３０のディレクトリエントリ１０４をダーティ状態をシェア状態に更新する。また第１のプロセッサモジュール１０−１のアクセス元のキャッシュユニット１８は、タグメモリの無効化状態をシェア状態に更新する。
【００３７】
［読出モード３］
この読出モード３は、あるプロセッサモジュール内のキャッシュ間でキャッシュコヒーレンスを実現する。即ち、任意のプロセッサモジュール１０−１内の任意のプロセッサ１４の読出アクセスに対し自己のキャッシュユニット１４はミスヒットしたが、スヌープバス２２で接続した他のプロセッサのキャッシュユニットに最新値が存在する場合である。
【００３８】
この場合、両キャッシュユニット間でスヌープバス２２を介して最新値の転送を実行してアクセス元のキャッシュユニット１４に格納し、読出アクセスに応答させる。この場合のスヌープバス２２を使用した最新値の転送はキャッシュサブライン単位で実行される。
【００３９】
次にプロセッサの書込アクセスに対するキャッシュコヒーレンスには、次の書込モード１〜５がある。
【００４０】
［書込モード１］
この書込モード１は、第１のプロセッサモジュール１０−１内の任意のプロセッサ１６の書込アクセスに対し、自己のキャッシュユニット１４及びスヌープバス２２で接続した他のキャッシュユニット１４に書込権を所有した状態でコピー値が格納されておらずにミスヒットとなり、且つ書込アドレスが第１のプロセッサモジュール１０−１内の主記憶２８にあり、更に、主記憶２８の書込アドレスのコピー値が第１のプロセッサモジュール１０−１以外の他の複数のプロセッサモジュール１０−２，１０−３のキャッシュユニット１８にシェア状態で存在する場合である。
【００４１】
この場合、第１のプロセッサモジュール１０−１は、シェア状態にある全てのプロセッサモジュール１０−２，１０−３に対してシステムバス１２を使用して無効化指令を発行する。シェア状態にある全てのプロセッサモジュール１０−２，１０−３は、無効化指令を同時に受理して、無効化に成功した際にシステムバス１２を使用して第１のプロセッサモジュールに独立に応答する。
【００４２】
第１のプロセッサモジュール１０−１は、システムバス１２からの全ての応答を受理したことで無効化の成功を認識して、主記憶２８の書込アドレスのコピー値をアクセス元のキャッシュユニット１８に格納して書込アクセスにより上書きさせる。
【００４３】
ここで、第１のプロセッサモジュール１０−１は、無効化の成功を認識してアクセス元のキャッシュユニット１８にコピーバックした際に、ディレクトリ記憶部３０のディレクトリエントリにおけるシェア状態をダーティ状態に更新する。
【００４４】
［書込モード２］
この書込モード２は、第１のプロセッサモジュール１０−１内の任意のプロセッサ１６の書込アクセスに対し自己のキャッシュユニット１８及びスヌープバス２２で接続した他のキャッシュユニット１８にコピー値が書込権を所有した状態で登録されておらずにミスヒットとなり、且つ書込アドレスが第１のプロセッサモジュール１０−１内の主記憶２８であり、更に主記憶２８の書込アドレスのコピー値が第１のプロセッサモジュール１０−１を含む複数のプロセッサモジュール１０−１〜１０−３のキャッシュユニットにシェア状態で存在する場合である。
【００４５】
この場合、第１のプロセッサモジュール１０−１は、シェア状態にある全てのプロセッサモジュール１０−２，１０−３に対してシステムバス１２を使用して無効化指令を発行するのと並行して、第１のプロセッサモジュール１０−１内のキャッシュユニットにスヌープバス２２を使用して無効化指令を発行する。
【００４６】
シェア状態にある全てのプロセッサモジュール１０−２，１０−３は無効化指令を同時に受理して、無効化の成功をシステムバス１２を使用して第１のプロセッサモジュール１０−１に独立に応答するのと並行して、第１のプロセッサモジュール１０−１内のキャッシュユニット１８は、スヌープバス２２を使用して無効化の成功を応答する。
【００４７】
第１のプロセッサモジュール１０−１は、システムバス１２からの全ての応答と、自己のスヌープバス２２からの応答を受理したことで無効化の成功を認識して、主記憶２８の書込アドレスのコピー値をキャッシュユニット１８に格納してプロセッサ１６の書込アクセスにより上書きさせる。
【００４８】
この場合にも書込モード１と同様、第１のプロセッサモジュール１０−１は、無効化の成功を認識してアクセス元のキャッシュユニットにコピーした際に、ディレクトリ記憶部３０のディレクトエントリにおけるシェア状態をダーティ状態に更新する。
【００４９】
［書込モード３］
この書込モード３は、第１のプロセッサモジュール１０−１内のプロセッサ１６の書込アクセスに対し自己のキャッシュユニット１８及びスヌープバス２２を介して接続した他のキャッシュユニット１８にコピー値が書込権を所有した状態で登録されておらずにミスヒットとなり、書込アドレスが第２のプロセッサモジュール１０−２内の主記憶２８にあり、更に主記憶２８の書込アドレスのコピー値が第２のプロセッサモジュール１０−２以外の他の複数のプロセッサモジュール１０−３，１０−４のキャッシュユニットにシェア状態で存在する場合である。
【００５０】
この場合、第１のプロセッサモジュール１０−１は、システムバス１２を使用して第２のプロセッサモジュール１０−２に書込所有権の要求指令（ホームコマンド）を発行し、書込所有権の要求指令を受領した第２のプロセッサモジュール１０−２は、シェア状態にある他の全てのプロセッサモジュール１０−３，１０−４に対してシステムバス１２を使用して無効化指令（パージコマンド）を発行する。
【００５１】
シェア状態にある全てのプロセッサモジュール１０−３，１０−４は、無効化指令を同時に受理して、無効化に成功した際にシステムバス１２を使用して第２のプロセッサモジュール１０−２に独立に応答する。
【００５２】
第２のプロセッサモジュール１０−２は全ての無効化の応答を受理したことで無効化の成功を認識すると、第１のプロセッサモジュール１０−１に対してシステムバス１２を使用して、自己の主記憶２８のアクセスアドレスのコピー値を含む書込所有権の移動を応答する。
【００５３】
第１のプロセッサモジュール１０−１は、書込所有権の応答の受領により得られたコピー値をアクセス元のキュッシュユニット１８に格納して、プロセッサ１６の書込アクセスで上書きさせる。
【００５４】
ここで、第２のプロセッサモジュール１０−１は、無効化の成功を認識して書込所有権を移動した際に、自己のディレクトリ記憶部３０のディレクトリエントリにおけるシェア状態をダーティ状態に更新する。
【００５５】
［書込モード４］
この書込モード４は、第１のプロセッサモジュール１０−１内の任意のプロセッサの書込アクセスに対し自己のキャッシュユニット１８及びスヌープバス２２を介して接続した他のキャッシュユニット１４にコピー値が書込権を所有した状態で登録されておらずにミスヒットとなり、書込アドレスが第２のプロセッサモジュール１０−２内の主記憶２８にあり、更に、この主記憶２８の書込アドレスのコピー値が第２のプロセッサモジュール１０−２を含む複数のプロセッサモジュール１０−３，１０−４のキャッシュユニット１８にシェア状態で存在する場合である。
【００５６】
この場合、第１のプロセッサモジュール１０−１は、第２のプロセッサモジュール１０−２に書込所有権の要求指令（ホームコマンド）を発行する。書込所有権の要求指令を受領した第２のプロセッサモジュール１０−２は、シェア状態にある全てのプロセッサモジュール１０−３，１０−４に対してシステムバス１２を使用して無効化指令（パージコマンド）を発行するのと並行して、自己のシェア状態にあるキャッシュユニット１８に対しスヌープバス２２を使用して無効化指令を発行する。
【００５７】
シェア状態にある全てのプロセッサモジュール１０−３，１０−４が無効化指令を同時に受理して、無効化の成功をシステムバス１２を使用して第２にプロセッサモジュール１０−２に独立に応答するのと並行して、第２のプロセッサモジュール１０−２のキャッシュユニット１８は無効化の成功をスヌープバス２２を使用して応答する。
【００５８】
第２のプロセッサモジュール１０−２は、システムバス１２からの全ての無効化成功の応答とスヌープバス２２からの無効化成功の応答を受領したことで無効化の成功を認識して、第１のプロセッサモジュール１０−１に対してシステムバス１２を使用して、自己の主記憶２８の書込アドレスのコピー値を含む書込所有権の移動を応答する。
【００５９】
第１のプロセッサモジュール１０−１は、書込所有権の応答の受領で得られたコピー値をアクセス元のキュッシュユニット１８に格納して、プロセッサ１６の書込アクセスで上書きさせる。
【００６０】
ここで、第２のプロセッサモジュール１０−２は、無効化の成功を認識して書込所有権の移動を応答した際に、自己のディレクトリ記憶部３０のディレクトリエントリにおけるシェア状態をダーティ状態に更新する。
【００６１】
また書込モードにおける無効化指令は、キャッシュサブライン単位で発行する。更に、無効化指令の応答時には、無効化を指令したサブラインが含まれるキャッシュラインの他のサブラインの状態を返送する。
【００６２】
［書込モード５］
この書込モード５は、第１のプロセッサモジュール１０−１内の任意のプロセッサ１６の書込アクセスに対し自己のキャッシュユニット１８及びスヌープバス２２で接続した他のキャッシュユニット１８にコピー値が書込権を所有した状態で登録されておらずにミスヒットとなり、且つ書込アドレスが第１のプロセッサモジュール１０−１の主記憶２８にあり、更に主記憶２８の書込アドレスの最新値が第２のプロセッサモジュール１０−２のキャッシュユニット１８に書込権を所有したダーティ状態で存在する場合である。
【００６３】
この場合、第１のプロセッサモジュール１０−１は、ダーティ状態にある第２のプロセッサモジュール１０−２に対してシステムバス１２を使用して書込所有権の要求指令（リモートコマンド）を発行する。第２のメモリモジュール１０−２は、書込所有権の要求指令を受理して、キャッシュユニット１８の最新値を含む書込所有権の移動をシステムバス１２を使用して第１のプロセッサモジュール１０−１に応答する。
【００６４】
第１のプロセッサモジュール１０−１は、書込所有権の応答により得られた最新値を、アクセス元のキャッシュユニット１８に格納してプロセッサ１６による書込アクセスで上書きさせる。
【００６５】
ここで、第２のプロセッサモジュール１０−２のキャッシュユニット１８は、書込所有権を移動した際にタグメモリのダーティ状態を無効化状態に更新し、また第１のプロセッサモジュール１０−１は書込所有権を受領した際に、自己のディレクトリ記憶部３０のディレクトリエントリにおけるダーティ状態を、キャッシュ上に最新値が存在するメモリモジュール１０−１の情報に変更したダーティ状態に更新する。
【００６６】
［書込モード６］
この書込モード６は、第１のプロセッサモジュール１０−１内のプロセッサ１６の書込アクセスに対し自己のキャッシュユニット１８及びスヌープバス２２を介して接続した他のキャッシュユニット１８にコピー値が書込権を所有した状態で登録されておらずにミスヒットとなり、書込アドレスが第２のプロセッサモジュール１０−２内の主記憶２８にあり、更にこの主記憶２８の書込アドレスの最新値が第３のプロセッサモジュール１０−３のキャッシュユニット１８に書込権を所有したダーティ状態で存在する場合である。
【００６７】
この場合、第１のプロセッサモジュール１０−１は、第２のプロセッサモジュール１０−２にシステムバス１２を使用して書込所有権の要求指令を発行する。書込所有権の要求指令を受領した第２のプロセッサモジュール１０−２は、第３のプロセッサモジュール１０−３に対してシステムバス１２を使用して書込所有権の要求指令を発行する。
【００６８】
書込所有権の要求指令を受領した第３のプロセッサモジュール１０−３は、キャッシュユニット１８の最新値を含む書込所有権をシステムバス１２を使用して第１及び第２のプロセッサモジュール１０−１，１０−２に応答する。
【００６９】
第２のプロセッサモジュール１０−２は、書込所有権の応答を受領して書込所有権の移動を認識する。また第１のプロセッサモジュール１０−１は、書込所有権の受領で得られた最新値をアクセス元のキュッシュユニット１８に格納して、プロセッサ１６の書込アクセスで上書きさせる。
【００７０】
ここで、第３のプロセッサモジュール１０−３のキャッシュユニット１８は、書込所有権を移動した際にタグメモリのダーティ状態を無効化状態に更新する。また第２のプロセッサモジュール１０−２は、書込所有権の移動を認識した際に、自己のディレクトリ記憶部３０のディレクトリエントリにおけるダーティ状態を、最新値の存在するプロセッサモジュール１０−１の情報に変更したダーティ状態に更新する。
【００７１】
更に第１のプロセッサモジュール１０−１のアクセス元のキャッシュユニット１８は、最新値を格納した際に、タグメモリの無効化状態を書込権が存在するダーティ状態に更新する。
【００７２】
［書込モード７］
この書込モード７は、プロセッサモジュール内の複数のキャッシュ間でアクセスする場合である。即ち、第１のプロセッサモジュール１０−１内の任意のプロセッサ１６の書込アクセスに対し自己のキャッシュユニット１８はミスヒットしたが、スヌープバス２２を介して接続した他のキャッシュユニット１４に書込アドレスの最新値が書込権を所有したダーティ状態で存在する場合である。
【００７３】
この場合、スヌープバス２２を介してキャッシュユニット１８間でデータ転送及び書込所有権の移動を行ってアクセス元のキャッシュユニット１８に格納した後に、プロセッサ１６の書込アクセスにより上書きさせる。ここで、アクセス先のキャッシュユニット１８は書込所有権を移動した後に、タグメモリのダーティ状態を無効化状態に更新する。またアクセス元のキャッシュユニット１８は、書込権を獲得した後にタグメモリを無効化状態から書込所有権が存在するダーティ状態に更新する。
【００７４】
［キャッシュユニットのアクセス競合処理］
本発明は、プロセッサモジュールのキャッシュユニットに対し、モジュール内部からのアクセスとモジュール外部からのアクセスが競合した場合、次の競合処理を行う。まず先発したモジュールにキャッシュユニットを獲得させて後発のモジュールにリトライの指示を行わせる。更に、先発したモジュールに競合した相手先モジュールとアクセスアドレスを記憶させ、自己のアクセス終了後に競合した相手先モジュール以外からのアクセスコマンドを受けた場合はリトライを指示し、競合した相手先のリトライによるアクセスコマンドを優先的に受け付ける。
【００７５】
具体的には、プロセッサモジュール１０−２のキャッシュユニット１８に対し、モジュール内部のあるプロセッサ１６からのアクセスと外部のプロセッサモジュール１０−２からのアクセスが競合し、プロセッサ１６が先発してキャッシュユニット１８を獲得した場合である。
【００７６】
この場合、プロセッサ１６は、プロセッサモジュール１０−１にリトライの指示を行わせ、更に、競合したプロセッサモジュール１０−１とアクセスアドレスを記憶し、自己のアクセス終了後に競合したプロセッサモジュール１０−１以外からのアクセスコマンドを受けた場合はリトライを指示し、競合した第２プロセッサモジュール１０−１のリトライによるアクセスコマンドを優先的に受け付ける。
【００７７】
これにより外部のプロセッサモジュール１０−１が、プロセッサモジュール１０−２に内蔵している複数のプロセッサ１６とのアクセスの競合に負けてリトライを繰り返し、システムバス１２のタイムエラーとなってしまうことを未然に防止し、システムバス１２を経由したキャッシュコヒーレンスの効率化と高信頼性を向上できる。
【００７８】
またキャッシュユニット１８を獲得したモジュールは、自己のアクセス終了後、競合相手先のモジュールからのアクセスが所定時間発生しない場合は、競合相手先とアクセスアドレスの記憶内容を初期化して、競合相手先の優先受付けを解除する。
【００７９】
［主記憶に対するコピーバックの書込所有権］
本発明のプロセッサモジュールは、主記憶２８に最新データがなく複数のキャッシュユニット１８に存在する場合、複数のキャッシュユニットの１つが最新データを主記憶２８へコピーバックするための書込所有権を保有している。この状態で、書込所有権を有するキャッシュユニットでプロセッサ１６による最新データのリプレースが発生した場合、書込所有権を最新データを保有しているキャッシュユニットに委譲し、最新データを保有するキャッシュユニットが１つになるまで主記憶２８への最新データのコピーバックを抑止して行わないようにする。
【００８０】
これによって、複数のキャッシュユニット１８及び主記憶２８側のメモリ管理ユニット（ディレクトリ側）２６を結合しているスヌープバス２２の負担を軽減する。
【００８１】
書込所有権の委譲は、複数のキャッシュユニットは固有の識別番号＃０〜＃３をもつことから、最新データをリプレースしたキャッシュユニットの識別番号を基に、予め定めた順番に従って書込所有権を委譲する。
【００８２】
また主記憶２８を管理するメモリ管理ユニット２６は、最新データがキャッシュユニット１８に存在し主記憶２８のデータがダーティ状態にあることを示す書込所有権を有するが、キャッシュユニット１８間で書込所有権の委譲が行われても、メモリ管理ユニット２６の書込所有権を他のプロセッサモジュールに移動せずにそのまま維持する。
【００８３】
［共有システムバス］
また本発明に従えば、分散共有メモリ型のマルチプロセッサシステムにおいて、キャッシュコヒーレンシ維持を効率よく実現し、且つシステムの拡張性を損なうことのないキャッシュコヒーセンス装置の共通システムバスが提供される。更に、大規模なマルチプロセッサの利用が期待される基幹システムへの使用を考慮した信頼性の高い共有システムバスが提供される。更に、異なったバスとの接続を考慮し、既存のバス資産の有効活用を可能とする共有バスが提供される。
【００８４】
本発明の共有システムバスとして機能する第２共有バス１２は、複数のプロセッサモジュールのバス接続ユニット３２とバスアービタ（バス調停ユニット）とを結合して、複数のプロセッサモジュールの間でスプリット型パケット転送によりバスコマンドの転送を行い、バスコマンドに、アクセス要求元（ソースＩＤ）を示すソースフィールド、第１のアクセス要求先（第１宛先ＩＤ）を示す第１宛先フィールド、及び第２のアクセス要求先（第２宛先ＩＤ）を示す第２宛先フィールドの３つを備えたことを特徴とする。
【００８５】
ソースフィールド、第１宛先フィールド、及び第２宛先フィールドの３つをもつ本発明のバスコマンドは、リードバスコンドして使用される。リード要求元となる第１プロセッサモジュール１０−１は、自己のリード要求の対象データが第２プロセッサモジュール１０−２の主記憶２８に存在する場合、ソースフィールドに自己のユニットＩＤ＃１を指定し、第１宛先フィールドに第２プロセッサモジュールのユニットＩＤ＃２を指定した第１バスコマンドを送出する。この場合、第２宛先フィールドは使用しない。
【００８６】
第１バスコマンドを受信した第２プロセッサモジュール１０−２は、リード要求の最新データが主記憶２８に存在せずに第３プロセッサジュール１０−３のキャッシュユニット１８に存在する場合、ソースフィールドに自己のユニットＩＤ＃２を指定し、第１宛先フィールドに最新データをもつ第３プロセッサモジュール１０−３のユニットＩＤ＃３を指定し、更に第２宛先フィールドにアクセス要求元の第１プロセッサモジュール１０のユニットＩＤ＃１を指定した第２バスコマンドを送出する。
【００８７】
第２バスコマンドを受信した第３プロセッサモジュール１０−３は、ソースフィールドに自己のユニットＩＤ＃３を指定し、第１宛先フィールドに主記憶２８の第２プロセッサモジュール１０−２のユニットＩＤ＃２を指定し、更に第２宛先フィールドにリード要求元の第１プロセッサモジュール１０−１のユニットＩＤ＃１を指定したリプライコマンドを送出して、第１及び第２プロセッサモジュール１０−１，１０−２に同時にリードデータを応答する。
【００８８】
この場合、第１プロセッサモジュール１０−１は、第２プロセッサモジュール１０−２から第３プロセッサモジュール１０−３に対し第２バスコマンドが送出された際に、通常のバス転送より時間がかかることから、バス転送のタイムアウトを監視するタイマの設定時間を、第１時間からより長い第２時間に変更する。
【００８９】
更に、第２共有バス１２で使用するバスコマンドは、ソースフィールド、第１宛先フィールドおよび第２宛先フィールドの各々を、第２共有バスを示すバス識別子（バスＩＤ）とプロセッサモジュール等のユニットを示すユニット識別子（ユニットＩＤ）の２つで表現する。これによって複数の第２共有バスをバス間接続ユニットを介して相互に接続した場合、別の第２共有バス内のユニットを指定することができる。
【００９０】
また複数のプロセッサモジュールを第２共有バス１８で接続したサブシステムを、サブシステム接続ユニットを介して複数結合した拡張システムの場合、バスコマンドにサブシステム間での転送を示すサブシステム拡張識別子を設ける。このサブシステム拡張識別子が有効なときに、バスコマンドの各サブシステム毎のコマンドフィールドを有し、各々ソースフィールド、第１宛先フィールドおよび第２宛先フィールドの各々を指定して、異なるサブシステムのユニットを指定することができるようにする。
【００９１】
更に、複数のプロセッサモジュールを接続した第２共有バス１８に対し、異種のシステムバスをもつサブシステムが異種バス接続ユニットを介して結合された場合、バスコマンドは、異種のシステムバスをエミュレートするコマンドをコマンドフィールドの一部に備え、異種のシステムバス上のユニットを指定できるようにしている。
【００９２】
バスマスタとしての第１プロセッサモジュール１０−１がバススレーブとしての第２プロセッサモジュール１０−２へのバスコマンドの転送中に、第２プロセッサモジュール１０−２で異常を検出した場合、第２プロセッサモジュール１０−２は、エラーリプライバスコマンドを送出して第１プロセッサモジュール１０−１にエラー通知する。
【００９３】
またバスマスタとしての第１プロセッサモジュール１０−１から第２プロセッサモジュール１０−２へのバスコマンドのバス転送でバススレーブとして第２プロセッサモジュール１０−２が確定するまでは、バスアービタがバス異常を監視しており、バスアービタが異常を検出すると、リプライバスコマンドを送出して第１プロセッサモジュール１０−１にエラー通知する。
【００９４】
このエラーリプライバスコマンドは、検出した異常の原因を分類フィールド、アクセス経路が複数存在する場合にどのアクセス経路で異常が発生したかを示すフィールド、及び検出した異常の種類を示すフィールドを有する。
【００９５】
また第２共有バス１２で使用するバスコマンドは、第１宛先フィールドおよび第２宛先フィールドの各々に、ソースユニットの動作識別子（アクセスＩＤ）を格納するアクセス識別子フィールドを設け、このアクセス識別子フィールドの動作識別子によりバスコマンドを修飾し、バスコマンドの動作モードを変更する。
【００９６】
例えばキャッシュコヒーレンスのために、アクセス要求元となる第１プロセッサモジュール１０−１からのアクセス先の主記憶２８をもつ第２プロセッサモジュール１０−２に第１バスコマンドを送出し、第２プロセッサモジュール１０−２から最新データをキャッシュユニット１８に保有する第３プロセッサモジュール１０−３に第２バスコマンドを送出し、最終的に第３プロセッサモジュール１０−３からリプライバスコマンドを送出する場合、アクセス識別子を次のように指定する。
【００９７】
まず第１プロセッサモジュール１０−１は、第２バスコマンドにおける第１宛先フィールドのアクセス識別子フィールドに自己の動作識別子を指定する。第２プロセッサモジュール１０−２は、第２バスコマンドにおける第１及び第２宛先フィールドのアクセス識別子フィールドの各々に、第２バスコマンドと同じ動作識別子を指定する。
【００９８】
第３プロセッサモジュール１０−３は、リプライバスコマンドにおける第１及び第２宛先フィールドのアクセス識別子フィールドの各々に、第２バスコマンドと同じ動作識別子を指定する。そして、第１及び第２プロセッサモジュール１０−１，１０−２の各々は、リプライバスコマンドの自己の宛先フィールドの動作識別子とバスコマンド送出時に記憶保持した動作識別子との一致を判断して自己のバスコマンドに対するリプライであると判断する。
【００９９】
このためアクセス要求元の第１プロセッサモジュール１０−１は、自己の送出した第１バスコマンドが第２プロセッサモジュール１０−２による第２バスコマンドの送出の契機となり、結果として第２バスコマンドに対するリプライコマンドが第３プロセッサモジュールから送出されるが、第１プロセッサモジュールは第２バスコマンドを意識せず、あたかも自己の第１バスコマンドに対するリプライとして受領することができる。
【０１００】
第２共有バス１２のハードウェアとしては、データ及びパリティを並列転送するデータバス線と、データバス線とは独立にバスシーケンスの動作を規定するタグ情報線を有し、タグ情報線によるタグ情報の指定により、１回のバス獲得で複数のバスサイクルを継続する。このタグ情報線によるリトライの指定により、バスサイクルの任意のタイミングで実行中のバスシーケンスの無効化を指示することができる。
【０１０１】
またタグ制御線で相互に接続された複数のプロセッサモジュールのバス接続ユニット３２とバスアービタは、複数のバス接続ユニットのいずれもバスサイクルを開始していない場合には、バスアービタから各バス接続ユニットに対し個別に出力されるバス使用許可信号（バスグラント信号）とバスアービタから全てのバス接続ユニットに共通に出力されるバス使用開始指示信号（タグバス信号）を同時に受信した特定のバス接続ユニットがバスサイクルを開始する。
【０１０２】
既に他のバス接続ユニットがバスシーケンスを開始していた場合には、バス使用許可信号を受け取ったバス接続ユニットが、他のバス接続ユニットが出力するバスサイクルの終了信号を検出してバスサイクルを開始する。
【０１０３】
またバスアービタは、特定タイミングで受理したバス接続ユニットからのバス使用要求が全て処理されるまで、後続のバス使用要求処理を保留する。
【０１０４】
タグ情報線は、通常のバス使用要求信号に使用する第１バス使用要求線と、異常報告等の緊急バス使用要求信号に使用する第２バス使用要求線を有する。バスアービタは、特定タイミングで受理したバス使用要求信号の中で緊急要求信号を出力したバス接続ユニッに優先してバス使用許可を与える。
【０１０５】
更に、第１及び第２バス使用要求線の信号の組み合わせで、通常のバス使用要求、緊急バス使用要求、バス使用要求無し、及びバス接続ユニット自身の非動作状態の通知を行う。
【０１０６】
［第２ディリレクトリ記憶部］
本発明の別の形態にあっては、メモリ管理ユニット２６のディレクトリ記憶部３０に加え、バス接続ユニット３２は第２ディレクトリ記憶部を設けたことを特徴とする。この第２ディレクトリ記憶部には、他のプロセッサモジュールに対するアクセス要求で応答待ちにある状態をキャッシュライン単位に登録し、他のプロセッサモジュールからのアクセスに対し第２ディレクトリの記憶部の参照で同一キャッシュラインのアクセスを認識した場合、ビジーを応答する。
【０１０７】
具体的には、リモートとしての第１プロセッサモジュール１０−１からライトアクセスを受けたホームとしての第２プロセッサモジュール１０−２が、リモートの第３プロセッサモジュール１０−３に対し同じキャッシュラインの無効化を要求した場合、リモートに対する無効化要求の完了待ちの状態を第２ディレクトリ記憶部に登録し、他のプロセッサモジュールからの同一キャッシュラインのアクセス要求に対し、第２共有バス１２にビジーを応答する。
【０１０８】
このビジー応答は、要求元のプロセッサモジュール内のキャッシュユニットまで伝えてリトライを行わせる。また無効化完了待ちの状態で、ホームの第２プロセッサモジュール１０−２に対する他のプロセッサモジュールのアクセス要求で、パス接続ユニット３２のバッファフルとなった場合、アクセス要求元のプロセッサモジュールのバス接続ユニットにビジーを応答し、キャッシュユニットまでは伝えずに、第２共有バス３２上でのリトライを行わせる。
【０１０９】
このような第２共有バス側の第２ディレクトリ記憶部により、他のプロセッサモジュールのアクセス要求を、メモリ管理ユニット２６側まで伝える必要がなく、ビシー応答を高速化できる。
【０１１０】
このような本発明のキャッシュコヒーレント装置によれば次の作用が得られる。まず複数のプロセッサモジュールに設けた複数のキャッシュ付きのプロセッサを内部のスヌープバス（第１共通バス）を介して相互に接続すると共に主記憶と接続する。更に、各プロセッサモジュールは主記憶側をシステムバス（第２共通バス）を介して接続する。この２階層の共通バス構成により、プロセッサモジュール内でのキャッシュコヒーレンスのバス動作と、プロセッサモジュール間でのキャッシュコヒーレンスのバス動作を分離することができる。即ち、内部スヌープバスはモジュール内のプロセッサ数に外部からアクセスする１台のプロセッサを加えたバス負荷で済む。また外部のシステムバスは、プロセッサモジュールの数分のバス負荷で済む。このため、内部および外部の各共通バスの負荷をプロセッサ数が増加しても抑えることができ、高速のキャッシュコヒーレンスを実現して処理性能を向上できる。
【０１１１】
また内部のスヌープバスは、プロセッサモジュール外部への接続を必要としないため、線路長を短くして電気的な特性を良好に保つことができ、これによってバスのクロック周波数を高く、内部に設けたプロセッサのキャッシュ間でのキャッシュコヒーレンスを高速処理で実現できる。
【０１１２】
また外部のシステムバスを使用したプロセッサモジュール間で行われるキャッシュコヒーレンスにあっては、書込アクセスの際には、アクセス元のキャッシュに対し最新値を転送するが、書込アドレスをもつ主記憶へのオーナー（コピーバック）は行わずに、ディレクトリ記憶部のキャッシュ状態のみをダーティ状態（最新値がキュッシュ上に存在し、主記憶には旧い値が存在する状態）に更新して終了する。このため、主記憶へのオーナー（コピーバック）を行わない分、書込アクセス時のキャッシュコヒーレンスを高速に終了できる。
【０１１３】
この書込アクセスでダーティ状態となった主記憶は、同じアドレスの読出アクセスの際に、最新値をもつキャッシュのプロセッサモジュールからアクセス元のキャッシュが存在するプロセッサモジュールへの転送時に、同時にダーティ状態にある主記憶への転送オーナー（コピーバック）が行われ、読出アクセスとコピーバックによる主記憶更新が並行して行われることで、より高速の読出アクセスのキャッシュコヒーレンスが実現できる。
【発明の効果】
【０１１４】
以上説明してきたように本発明のキャッシュコヒーレンス装置によれば、複数のプロセッサモジュールの各々でキャッシュユニット付きのプロセッサエレメントの複数を内部の共通バスで相互に接続すると共に主記憶を備えたメモリモジュールを接続し、更にメモリモジュール側を外部の共通バスにより他のプロセッサモジュールと相互に接続する２階層の共通バス構成としたことで、プロセッサモジュール内でのキャッシュコヒーレンスのバス動作とプロセッサモジュール間でのキャッシュコヒーレンスのバス動作を分離することができ、処理性能を大幅に向上できる。
【０１１５】
また内部の共通バスはモジュール内のプロセッサ数に外部からのアクセスを受け付けるメモリモジュールを加えたアクセス源に対応したバス負荷で済み、バス負荷を軽くしてプロセッサ間での処理性能を向上できる。また外部のシステムバスのバス負荷は相互に接続したプロセッサモジュールの台数で決まり、プロセッサモジュール内に設けているプロセッサエレメントの数に依存しないことから、同様に、外部の共通バスのバス負荷を低減して処理性能を向上できる。
【０１１６】
また、内部の共通バスはプロセッサモジュールの外部への接続を必要としないため、線路長を短くして電気的な特性を良好に保つことができ、これによってバスのクロック周波数を高くして、内部接続したプロセッサ間でのキャッシュコヒーレンスの処理性能を、より高速化できる。
【０１１７】
更に、外部の共通バスを使用したプロセッサモジュール間で行われるキャッシュコヒーレンスにあっては、書込アクセスの際には、アクセス元のキャッシュに対しては最新データを転送するが、書込アドレスをもつ主記憶に対しては最新データのオーナーは行わずに、最新データがキャッシュ側に存在するダーティ状態をセットして処理を終了することで、主記憶に対する最新データのオーナーを行わない分、書込アクセスを高速に終了できる。
【０１１８】
更に、書込アクセスでダーティ状態となった主記憶は、同じアドレスの読出アクセスの際に外部の共通バスからのリプライデータを受領して主記憶に書き込むことで、アクセス元のキャッシュに対する格納と同時に、主記憶が最新データに更新でき、主記憶オーナーと読出アクセス元への転送が同時にできることで、読出アクセスのキャッシュコヒーレンスを、より高速に実現できる。
【発明を実施するための最良の形態】
【０１１９】
＜目 次＞
１．システム構成
２．ＣＰＵリードアクセス時のキャッシュコヒーレンス
３．ＣＰＵライトアクセス時のキャッシュコヒーレンス
４．キャッシュユニットのアクセス競合処理
５．コピーバックの書込所有権
６．システム共通バス
（１）バス構成
（２）バスアビトレーション動作
（３）バス転送シーケンス
（４）バス間転送
（５）バスコマンド
７．第２ディレクトリメモリ
８．その他
【０１２０】
１．システム構成
図２は本発明のキャッシュコヒーレンス装置が適用されるマルチプロセッサシステムのブロック図である。このシステムは、少なくとも１つのプロセッサエレメントをもつプロセッサ群として例えば５つのプロセッサモジュール１０−１〜１０−５を有し、プロセッサモジュール１０−１〜１０−５を２本のシステムバス（第２共通バス）１２−１，１２−２を介してお互いに接続している。
【０１２１】
プロセッサモジュール１０−１〜１０−５は、図３のプロセッサモジュール１０−１に代表して示すように、例えば４つのプロセッサエレメント１４−１〜１４−４を有し、スヌープバス２２を介してお互いに接続している。プロセッサエレメント１４−１〜１４−４のそれぞれは、プロセッサ１６−１〜１６−４、キャッシュユニット１８−１〜１８−４およびスヌープユニット２０−１〜２０−４を備える。
【０１２２】
メモリモジュール２５は、スヌープバス２２に接続されると同時に、他のポートよりシステムバス１２−１，１２−２に接続される。メモリモジュール２５はプロトコル管理ユニット２４、メモリ管理ユニット２６およびモジュール接続ユニット３２を備える。プロトコル管理ユニット２４は、システムバス１２−１，１２−２と内部のスヌープバス２２との間のプロトコル変換を行う。バス接続ユニット３２はメモリモジュール２５とシステムバス１２−１，１２−２の間のバスアクセスを行う。
【０１２３】
メモリ管理ユニット２６には、主記憶として機能するローカルストレージ２８と、プロセッサモジュール間でのキャッシュコヒーレンスの実現に使用されるディレクトリメモリ３０が接続される。
【０１２４】
スヌープユニット２２−１〜２２−４は、スヌープバス２２で特定のマシンサイクルに同期させて複数のキャッシュユニット１８−１〜１８−４をスヌープするスヌーププロトコルに従って、主記憶としてのローカルストレージ２８とキャッシュユニット１８−１〜１８−４の間のキャッシュコヒーレンスを実現する。即ち、スヌープユニット２２−１〜２２−４は、内部コヒーレンス処理部として機能する。
【０１２５】
他のプロセッサモジュールとの間のキャッシュコヒーレンスを実現する外部コヒーレンス処理部としての機能は、メモリ管理ユニット２６に設けたキャッシュ変換部８０により行われる。キャッシュ変換部８０は、システムバス１２−１，１２−２を使用した他のプロセッサモジュールとの間のやり取りを通じ、ディレクトリメモリ３０の参照に基づき、プロセッサモジュール間でのキャッシュコヒーレンスを実現する。
【０１２６】
プロセッサエレメント１４−１〜１４−４は、図４のプロセッサエレメント１４−１に代表して示すように、ＣＰＵ回路１６−１には１次キャッシュ３６をもつＣＰＵ３４が設けられ、ＣＰＵ３４の外部には２次キャッシュ３８が接続される。２次キャッシュ３８の制御部として２次キャッシュ制御モジュール３５が設けられ、２次キャッシュ制御モジュール３５にはタグメモリ４０が接続される。ＣＰＵ３４の１次キャッシュ３６はライトスルーで制御され、２次キャッシュ３８はコピーバックで制御される。
【０１２７】
２次キャッシュ制御モジュール３５は、２次キャッシュ３８のデータのアドレスと、そのエントリのキャッシュ状態を示す情報を、タグメモリ４０に登録している。ここで２次キャッシュ３８は、図５に示すように、キャッシュデータを２５６バイト他印のデータとして登録している。このためキャッシュ制御モジュール３５は、２５６バイトのアドレス単位でキャッシュ登録を管理する。この２次キャッシュ３８上の２５６バイト単位のデータをキャッシュライン１００という。
【０１２８】
したがって、タグメモリ４０の中には２５６バイト単位のキャッシュライン１００のアドレスが保持されている。更に本発明にあっては、２５６バイトのキャッシュライン１００を６４バイト単位のサブライン１０２−１〜１０２−４に分割して、サブライン１０２−１〜１０２−４ごとにキャッシュ状態を保持している。
【０１２９】
２次キャッシュ３８は常にＣＰＵ３４の１次キャッシュ３６を包含するように制御される。スヌープバス２２で接続されている例えば図３に示す４つのプロセッサエレメント１４−１〜１４−４における各キャッシュユニット１８−１〜１８−４間でのデータのコヒーレンスを保証するため、スヌープバス２２によって２次キャッシュ３８がスヌープされる。
【０１３０】
スヌープバス２２はパケットプロトコルによるバスで、２次キャッシュ３８のスヌープを行うための機構としてスヌープ送受信ユニット４２、スヌープバッファ４４、コピーバックバッファ４６およびプロセッサアクセスユニット４８を有する。スヌープバス２２には各種のスヌープコマンドが準備されている。スヌープバスはパケットプロトコルであるため、複数のアクセスを同時に進行させることができる。
【０１３１】
２次キャッシュ３８のスヌープは、スヌープバス２２に接続されている各プロセッサエレメント１４−１〜１４−４の２次キャッシュ制御モジュール３５で同時に行われ、その結果が同時にスヌープバス２２上のプロセッサエレメント固有のキャッシュ状態信号に反映される。このキャッシュ状態信号は、スヌープバスに接続している全てのプロセッサエレメント１４−１〜１４−４とメモリモジュール２５で参照される。
【０１３２】
メモリモジュール２５側のスヌープバス２２に対するユニットとしては、空間識別ユニット５０、スヌープ送受信ユニット５２およびスヌープバス送信ユニット６０が設けられている。プロセッサエレメント１４−１の２次キャッシュ制御モジュール３５がキャッシュ状態信号によってキャッシュ状態を表示すると同様に、メモリモジュール２５に設けているメモリ管理ユニット２６も、主記憶を分割配置したローカルストレージ２８の状態を表示するため、メモリ状態信号を持っている。このメモリ状態信号も、スヌープバス２２内の全ての２次キャッシュ制御モジュール３５に供給される。
【０１３３】
このようなスヌープバス２２上における２次キャッシュ３８に関するキャッシュ状態信号と、メモリモジュール２５に接続したローカルストレージ２８のメモリ状態信号の内容から、プロセッサエレメント１４−１〜１４−４に設けた２次キャッシュ制御モジュール３５のそれぞれは、ＣＰＵ３４のアクセスに対し応答を行うプロセッサエレメントの判定、アクセス対象となったキャッシュデータの最新値を書込権の所有状態で持っている所謂オーナーの決定、各種のスヌープコマンドの成否を判定する。
【０１３４】
更に、タグメモリ４０に保持している２次キャッシュ３８のキャッシュ状態の変更を必要に応じて行う。更に、１次キャッシュ３６の無効化や２次キャッシュ３８からのデータの応答を伴う場合もある。このようなスヌープバス２２による一連の動作はパイプラインで制御される。
【０１３５】
２次キャッシュ３８のキャッシュ状態信号による表示は、ビジー、ミス、クリーン、ダーティ、エラーの表示がある。ビジー表示は、受信コマンドが処理資源の枯渇で処理できない場合あるいはプロトコル上矛盾をきたすタイミングのときに表示される。ミス、クリーンおよびダーティ表示は、２次キャッシュ３８のタグメモリ４０のスヌープ結果である。
【０１３６】
即ち、ミス表示は、スヌープコマンドのアドレスで２次キャッシュ３８をスヌープした結果、そのアドレスのデータを２次キャッシュ３８で保持していないミスヒット検出の際に表示される。クリーン表示は、２次キャッシュ３８をスヌープした結果、ローカルストレージ２８の内容と同じデータを２次キャッシュ３８内に保持している場合と、ローカルストレージ２８の内容に対し変更が加えられたデータを２次キャッシュ３８内に保持している場合である。
【０１３７】
更にダーティ表示は、２次キャッシュ３８をスヌープした結果、ローカルストレージ２８の内容に対し変更が加えられた最新データを２次キャッシュ３８内に保持している場合であり、ローカルストレージ２８へのオーナーによる反映を行う責任を負っていることから、この状態を書込権を所有しているオーナーと呼ぶ。このようにプロセッサエレメント１４−１〜１４−４間は、スヌープバス２２を用いたスヌープ方式によりキャッシュコヒーレンスが保たれる。
【０１３８】
次にメモリモジュール２５側を説明する。メモリモジュール２５にはメモリ管理ユニット２６が設けられ、メモリ管理ユニット２６にメモリバス６６を介してローカルストレージ２８を接続し、また専用線を介してディレクトリメモリ３０を接続している。ローカルストレージ２８は４本のメモリバス６６ごとに、メモリアクセスユニット６８−１〜６８−４と主記憶素子としてのＳＲＡＭ７０−１〜７０−４を接続している。
【０１３９】
メモリバス６６は３２ビット幅のバスであり、２つのバスを同時にアクセスすることで、キャッシュラインにおけるサブラインの６４ビット幅に一致する１ワードのデータのアクセスを行う。ローカルストレージ２８は、４つのメモリバス６６で４グループに分けられており、例えばメモリアクセスユニット６８−１，６８−２の２グループで１ワードのアクセスを行い、メモリアクセスユニット６８−３と６８−４で１ワードのアクセスを行うインターリーブ方式でアクセス可能としている。
【０１４０】
メモリモジュール２５は、空間識別ユニット５０により、メモリユニット２６により接続したローカルストレージ２８のメモリ空間を全てのＰＭ１０−１〜１０−５から参照可能な物理空間にマッピングすることができる。図６は図４の空間識別ユニット５０のマッピング機能を示す。まずプロセッサエレメント１４−１に設けたＣＰＵ３４のＣＰＵ物理アドレス空間８６は、例えば６４ＧＢ（ギガバイト）のアドレス空間をもつ。
【０１４１】
このうち先頭の０〜４ＧＢの領域を、ＣＰＵで使用する制御レジスタ空間８８に割り当てている。また最後の６０〜６４ＧＢの領域を、ＣＰＵのＲＯＭ空間９２に割り当てている。残り４〜６０ＧＢの５６ＧＢ幅の領域は、ＰＭ１０−１〜１０−５に設けている全てのＣＰＵ３４でアクセス可能な共有空間９０としている。ＣＰＵで任意の３６ビット物理アドレス９４を指定したＣＰＵアクセス（読出アクセスまたは書込アクセス）が発生すると、この３６ビット物理アドレス９４はスヌープコマンドによってスヌープバス２２を経由して、メモリ制御モジュール２５の空間識別ユニット５０に送られる。
【０１４２】
勿論、空間識別ユニット５０にスヌープバス２２を介して送られるのは、スヌープバス２２で接続しているプロセッサエレメント１４−１〜１４−４のキャッシュ上に、アクセス対象となった物理アドレス９４のキャッシュラインが存在しない場合である。
【０１４３】
空間識別ユニット５０は、制御テーブル９５を保持している。制御テーブル９５には共有空間９０のアドレス４ＧＢから６０ＧＢのエントリが設けられ、このアドレスによるエントリに対応してＩＤ領域を設けている。対応ＩＤ領域には、共有空間９０のアドレスが割り当てられたプロセッサモジュールを示す情報としてユニットＩＤが登録されている。このユニットＩＤは、物理的には、図２のシステムバス１２−１，１２−２にプロセッサモジュールを接続することのできるスロット番号を示している。
【０１４４】
この例にあっては、４ＧＢから２４ＧＢのアドレスに対応してユニットＩＤ＃００〜＃０７を登録している。対応ＩＤ領域には、ユニットＩＤに加えてプロセッサモジュールの実装と未実装を示す情報も登録されている。この例では、１２〜１６ＧＢの物理アドレスをもつユニットＩＤ＝＃０２のプロセッサモジュールは未実装となっていることがわかる。またユニットＩＤ＝＃００〜＃０３の４つについては４ＧＢ幅のアドレス領域が割り当てられているが、ユニットＩＤ＝＃０４〜＃０３の４つにプロセッサモジュールについては１ＧＢ幅のアドレスが割り当てられている。
【０１４５】
更に、制御テーブル９５の対応ＩＤ領域には自ホーム情報も格納されている。自ホーム情報とは、ＣＰＵアクセスで発行された３６ビット物理アドレス９４がプロセッサモジュール自身に内蔵したローカルストレージのアドレス空間に存在することを意味する。
【０１４６】
このような空間識別ユニット５０に対するスヌープバス２２からの３６ビット物理アドレス９４によるアクセスで、生成情報としてホーム情報９６、ユニットＩＤ９８、３６ビット物理アドレス９４が生成される。ホーム情報９６は、アクセスされた物理アドレス９４が自ホームか否か、即ち物理アドレス９４がアクセスを起こしたプロセッサモジュール自身に存在するか否かを表わす。
【０１４７】
ユニットＩＤ９８は、物理アドレス９４が存在するプロセッサモジュールを示す。具体例を説明すると、次のようになる。ＣＰＵアクセスにより３６ビット物理アドレス９４として、１６進表示でＸ´４．Ｄ０００．００００´が発生したとする。この場合、空間識別ユニット５０の制御テーブル９５のエントリで対応ＩＤエリアからユニットＩＤ＝＃０３が生成され、右側の破線の枠に示すように、ホーム情報９６としてＰＭ自身がホームでないことを示す「ｎｏｔ Ｈｏｍｅ」、ユニットＩＤ＝＃０３、物理アドレス９４であるＸ´４．Ｄ０００．００００´を生成する。
【０１４８】
再び図４のメモリモジュール２５を参照するに、メモリモジュール２５はスヌープバス２２を通してプロセッサエレメント１４−１のＣＰＵ３４からアクセスされ、またシステムバス１２−１（１２−２を含む）を通して、他のプロセッサモジュール１０−２〜１０−５に設けているＣＰＵ３４からもアクセスされる。
【０１４９】
プロセッサモジュール１０−１内に設けたプロセッサエレメント１４−１〜１４−４のキャッシュ間におけるキャッシュコヒーレンスはスヌープバス２２を使用して実現されているのに対し、プロセッサモジュール１０−１〜１０−５間にあっては、システムバス１２−１，１２−２を使用したディレクトリ方式でキャッシュコヒーレンスを保っている。このディレクトリ方式によるキャッシュコヒーレンスを実現するため、ディレクトリメモリ３２には２５６バイトのキャッシュライン単位に１エントリが記憶されている。
【０１５０】
このディレクトリエントリは、ＣＰＵアクセスで発生した３６ビット物理アドレスで選択され、キャッシュラインの状態を表示している。このディレクトリエントリにおけるキャッシュラインの状態表示には、ダーティ、シェアおよびインバリッドの状態がある。
【０１５１】
ダーティとは、ある２次キャッシュ３８上のキャッシュラインが書き替えられて最新データとなっており、キャッシュラインのコピー元となるローカルストレージ２８上には旧いデータしかなく、書き替えたプロセッサエレメントが最新データを所有していることを意味する。
【０１５２】
シェアとは、キャッシュラインのデータがプロセッサモジュールによって参照されたことを示し、ローカルストレージ２８上のデータと同一のデータが２次キャッシュ３８に同時に存在している可能性を示す。
【０１５３】
更にインバリッドとは、キャッシュラインが、どのプロセッサモジュールからも参照されず、また書き替えられていない状態を示す。
【０１５４】
更に、あるキャッシュラインがダーティの場合、書き替えられた最新データをもつプロセッサモジュールの識別情報がメモリ管理ユニット２６に保持される。またキャッシュラインがシェアの場合にも、ローカルストレージ２８のデータのコピーをもつプロセッサモジュールの識別情報がメモリ管理ユニット２６に保持される。
【０１５５】
図７は、図４のメモリモジュール２５に設けたメモリ管理ユニット２６の詳細である。図７において、メモリ管理ユニット２６には、バスアービタ７４、メモリバス６０を介してローカルストレージ２８を接続したメモリバス制御ユニット７６、専用線でディレクトリメモリ３０を接続したディレクトリ制御ユニット７８が設けられる。
【０１５６】
またメモリ管理ユニット２６には、プロセッサモジュール間をディレクトリ方式を使ってキャッシュコヒーレンスを保つため、キャッシュ変換部８０が設けられ、ローカルステートマシン８１、ホームステートマシン８２およびリモートステートマシン８３を内蔵している。
【０１５７】
本発明のディレクトリ方式を使用したプロセッサモジュール間のキャッシュコヒーレンスの制御にあっては、アクセスを起動したプロセッサモジュールをローカルと呼び、アクセスしたアドレスをローカルストレージにもっているプロセッサモジュールをホームと呼ぶ。また、アクセスしたローカルストレージのアドレスがダーティ状態、即ちローカルストレージのアドレスに旧いデータしかなく他のプロセッサモジュールのキャッシュ上で最新データをキャッシュ上に所有しているプロセッサエレメントが属しているプロセッサモジュールをリモートと呼ぶ。
【０１５８】
このようなプロセッサモジュールのローカル、ホームおよびリモートの各ステートは、キャッシュ変換部８０に設けたローカルステートマシン８０、ホームステートマシン８２およびリモートステートマシン８４の処理動作で実現される。
【０１５９】
これら３つのステートマシン８１，８２，８３に対応し、図４のメモリモジュール２５には、バスアービタ７４を経由して、それぞれのステートマシンの処理対象となるコマンドおよびデータを保持するためのバッファキューが設けられている。即ち、ローカルステートマシン８０に対応してローカルアクセスバッファキュー５４が設けられる。
【０１６０】
ローカルアクセスバッファキュー５４には、空間識別ユニット５０で生成された図６の生成情報であるホーム情報Home、ユニットＩＤおよび３６ビット物理アドレスが格納される。更に、ローカルアクセスバッファキュー５４に対してはスヌープ送受信ユニット５２より応答割込みINT が与えられ、またローカルアクセスバッファキュー５４が一杯になると、フル状態を示す情報Fullをスヌープ送受信ユニット５２に返している。
【０１６１】
ホームステートマシン８２に対応しては、メモリモジュール２５にホームアクセスバッファキュー５６が設けられる。ホームアクセスバッファキュー５６には、システムバス１２−１，１２−２を使用して発行されたローカルとなったプロセッサモジュールからのアクセスコマンド、所謂ホームコマンドが格納される。リモートステートマシン８４に対応しては、リモートアクセスバッファキュー５８が設けられる。リモートアクセスバッファキュー５８には、ホームとなったプロセッサモジュールからシステムバス１２−１，１２−２を使用して発行されたアクセスコマンド、所謂リモートコマンドが格納される。
【０１６２】
ローカルアクセスバッファキュー５４に格納するローカルコマンドおよびホームアクセスバッファキュー５６に格納するホームコマンドについては、メモリ管理ユニット２６に設けているローカルステートマシン８０およびホームステートマシン８２のそれぞれでローカルストレージ２８のアクセスを伴うが、リモートアクセスバッファキュー５８のリモートコマンドはプロセッサエレメント１４−１の２次キャッシュ３８上のキャッシュラインを対象とするアクセスであるため、スヌープバス送信ユニット６０によって直接、スヌープバス２２に接続されている。
【０１６３】
次に、図７のメモリ管理ユニット２６に設けたディレクトリ制御ユニット７８および専用線で接続したディレクトリメモリ３０の内容を説明する。
【０１６４】
図８は、メモリ管理ユニット２６に設けたディレクトリ制御ユニット７８に設けられるディレクトリエントリレジスタ１０４の内容であり、このディレクトリエントリレジスタ１０４の内容がディレクトリメモリ３０に格納されたキャッシュラインごとのディレクトリエントリの読出結果である。したがってディレクトリエントリレジスタ１０４の内容は、これ即ちディレクトリメモリ３０に記憶されたディレクトリエントリデータそのものの説明となる。
【０１６５】
ディレクトリエントリレジスタ１０４は、下位８ビットにシェアードマップビット領域１０６を割り当てている。このシェアードマップビット領域１０６は、プロセッサモジュール内の主記憶であるローカルストレージ２８のキャッシュラインに対応するデータが参照されて、いずれのプロセッサモジュールの２次キャッシュ上に存在するかを示すビットである。
【０１６６】
このシェアードマップビット領域１０６に対しては、図９に示すシェアードマップビット対応レジスタ１１２が組み合わされ、更に、シェアードマップビット対応レジスタ１１２には図１０のプロセッサモジュール構成レジスタ１１４が組み合わされる。
【０１６７】
ディレクトリエントリレジスタ１０４のシェアードマップビット領域１０６はビットＳ０〜Ｓ７であり、このビットＳ０〜Ｓ７を１にセットすることで、シェアードマップビット対応レジスタ１１２で示されるプロセッサモジュール上にキャッシュラインのデータがシェア状態で存在することを示す。
【０１６８】
シェアードマップビット対応レジスタ１１２は例えば１６台のプロセッサモジュールのユニットＩＤ＝＃００〜＃１５に対応するマップビット対応エリアをもっている。これに対しシェアードマップビット領域１０６は、Ｓ０〜Ｓ７の８ビットと半分しかない。このため、シェアードマップビット対応レジスタ１１２にシェアードマップビット領域１０６のシェアードマップビットを重複して格納することで、シェアードマップビットを複数のプロセッサモジュールについて表現することができ、ディレクトリエントリレジスタ１０４のビット低減を実現している。
【０１６９】
更に、シェアードマップビット領域１０６に格納するシェアードマップビットＳ０〜Ｓ７は、２次キャッシュ上では２５６バイトのキャッシュラインを４分割した６４バイトのキャッシュサブラインごとに保持されている。これに対しシェアードマップビットは１ビットしかないことから、４つのキャッシュサブラインのシェア状態をＯＲによって表わしている。
【０１７０】
この４つのサブラインのＯＲによるシェアードマップビットの表現は、２次キャッシュのキャッシュコヒーレンスがスヌープ方式で実現されているため、シェア状態のキャッシュラインが存在するプロセッサエレメントを意識することなくアクセスでき、複数のサブラインのＯＲ表現が可能となっている。
【０１７１】
図９のシェアードマップビット対応レジスタ１１２に対応して設けた図１０１０のプロセッサモジュール構成レジスタ１１４には、プロセッサモジュール実装ビット領域１１６とバスＩＤビット領域１１８が設けられている。バスＩＤビット領域１１８にはシステムバス１２−１，１２−２に分けたバスＩＤが格納されている。各システムバス１２−１，１２−２は１６個のスロットをもっている。したがって最大１６台のプロセッサモジュールを実装することができる。
【０１７２】
プロセッサモジュール実装ビット領域１１６はユニットＩＤと同じスロット番号＃００〜＃１５に１対１に対応したビット領域をもっており、実装状態でビット１がセットされ、未実装状態でビット０にリセットされている。
【０１７３】
図１１は、ディレクトリエントリレジスタ１０４、シェアードマップビット対応レジスタ１１２およびプロセッサモジュール構成レジスタ１１４の具体的な対応関係を示している。まずプロセッサモジュール構成レジスタ１１４はプロセッサモジュール実装ビット領域１１６のみを示しており、ビット１にセットされたユニットＩＤが実装されたプロセッサモジュールを示している。
【０１７４】
この例ではユニットＩＤ＝＃００，＃０２，＃０５，＃０６，＃０８，＃１０，＃１１，＃１３にプロセッサモジュールが実装されて、それ以外は未実装となっている。プロセッサモジュール構成レジスタ１１４の各ビットは、シェアードマップビット対応レジスタ１１２に１対１に対応している。
【０１７５】
あるプロセッサモジュールのＣＰＵアクセスで、あるプロセッサモジュールの主記億となるローカルストレージのキャッシュラインが参照されて、そのコピーがキャッシュ上に存在するシェア状態が起きると、そのキャッシュラインのディレクトリエントリデータのシェアードマップビット領域１０６の空きビットが１にセットされ、同時にシェアードマップビット対応レジスタ１１２のコピーデータがシェア状態で存在するプロセッサモジュールのレジスタ領域、シェアードマップビット領域１０６のビット１を示すインデックス情報が格納される。
【０１７６】
例えば、シェアードマップビットＳ６については、シェアードマップビット対応レジスタ１１２のユニットＩＤ＝＃０６と＃１０に対応したエリアに、それぞれＳ６を格納している。これによって、シェアードマップビットＳ６はユニットＩＤ＝＃０６および＃１０の２つのプロセッサモジュールに参照され、それぞれキャッシュ上でシェア状態にあることを表わしている。
【０１７７】
再び図８のディレクトリエントリレジスタ１０４を参照するに、シェアードマップビット領域１０６に続いてはダーティサブラインビット領域１０８が設けられている。ダーティサブラインビット領域１０８は２５６バイトのキャッシュラインを分割した４つのサブラインに対応してビットＤ０〜Ｄ３が割り当てられている。
【０１７８】
このダーティサブラインビットＤ０〜Ｄ３は、ビット１にセットすることで、システム内のいずれかのプロセッサモジュールのキャッシュ上に、主記憶としてのローカルストレージ２８の旧いデータに対し、書き替えられた最新データが存在することを表わしている。また、ダーティサブラインビット領域１０８がビット０にリセットされている場合には非ダーティ状態を意味する。
【０１７９】
この場合には主記憶としてのローカルストレージ２８に最新データが存在し、シェアードマップビットＳ０〜Ｓ７で指定されるいずれかのプロセッサモジュール上に、シェア状態でそのコピーデータが存在することを意味する。データサブラインビットＤ０〜Ｄ３に関するプロセッサモジュールの識別情報は、主記憶としてのローカルストレージ２８上の特定領域、例えば図６のＣＰＵ物理アドレス空間８６における制御レジスタ空間８８に格納されている。
【０１８０】
図１２は、ディレクトリエントリレジスタ１０４の具体的な内容を示す。まずシェアードマップビット領域は、システムバス１２−１，１２−２に対応してシェアードマップビット領域１０６−１と１０６−２に分けられている。ここで、システムバス１２−１側についてのみプロセッサモジュールを実装しており、システムバス１２−２側についてはプロセッサモジュールを未実装であった場合には、シェアードマップビット領域１０６−１側が実装プロセッサモジュール用に使用される。
【０１８１】
シェアードマップビット領域１０６−１では、シェアードマップビットＳ３とＳ４にビット１がセットされている。この場合、図９に示したシェアードマップビット対応レジスタ１１２による対応で、例えばシェアードマップビットＳ３はユニットＩＤ＝＃０３のプロセッサモジュールのキャッシュラインのデータの全サブラインのシェア情報のＯＲを意味する。また、シェアードマップビットＳ４が同じく図９のシェアードマップビット対応レジスタ１１２による対応関係の指定で、例えばユニットＩＤ＝＃０４のプロセッサモジュール上のあるプロセッサエレメントのキャッシュ上の全サブラインのシェア状態のＯＲとなる。
【０１８２】
一方、ダーティサブラインビット領域１０８については、例えばダーティサブラインビットＤ１とＤ４がビット１にセットされ、Ｄ２とＤ３がビット０にリセットされている。このダーティサブラインビットＤ１〜Ｄ４に対応して、ローカルストレージ２８にはプロセッサモジュール情報格納領域１２０，１２２，１２４，１２６が設けられている。
【０１８３】
例えばダーティサブラインビットＤ１のプロセッサモジュール情報領域１２０には、ユニットＩＤ＝＃０１のプロセッサモジュールに存在するキャッシュ上にダーティ状態として最新データが存在することを示している。同様に、ビット１にセットされたダーティサブラインビットＤ４については、プロセッサモジュール情報領域１２６にユニットＩＤ＝＃０２のプロセッサモジュールに存在するキャッシュ上にダーティ状態として最新データが存在することを示している。
【０１８４】
またビット０にリセットされたダーティサブラインビットＤ２，Ｄ３のプロセッサモジュール情報領域１２２，１２４については、このキャッシュラインの物理アドレスが存在する主記憶としてのローカルストレージに最新データがあり、いずれかのプロセッサモジュールのキャッシュ上に主記憶の最新データの参照によりコピーデータがシェア状態で存在することを示す。
【０１８５】
シェア状態でコピーデータが存在するプロセッサモジュールのユニットＩＤについては、シェアードマップビット領域１０６−１のビット１にセットされたシェアードマップビットＳ３，Ｓ４に対する図９のシェアードマップビット対応レジスタ１１２の参照で得られ、例えばユニットＩＤ＝＃０３，＃０４のプロセッサモジュール上にシェア状態でコピーデータが存在する可能性を示す情報が格納されている。
【０１８６】
またビット０にセットされたダーティサブラインビットＤ２，Ｄ３のプロセッサモジュール情報領域１２２，１２４の内容は、シェアード以外に非シェアードが格納される場合もあり、この場合には、対応する主記憶としてのローカルストレージにのみ最新データが存在することを示す。
【０１８７】
次に、スヌープバス２２のパケットを説明する。パケットは起動コマンドと応答コマンドに分類される。起動コマンドと応答コマンドは、基本的に対になっている。パケットはコマンドフェーズとデータフェーズからなる。コマンドフェーズは１クロックである。データフェーズは、コマンドとサイズによって０から８クロックまでの長さをとることができる。
【０１８８】
起動コマンドのコマンドフェーズは、パケットの宛先を示す宛先フィールド、パケット処理について補助的な指示を含むフラグフィールド、処理対象のデータサイズを示すサイズフィールド、コマンドの種別を示すタイプフィールド、コマンドの処理対象のアドレスを示すアドレスフィールドから構成される。起動コマンドと応答コマンドの区別はタイプフィールドで識別する。
【０１８９】
一方、応答コマンドもコマンドフェーズとデータフェーズからなる。コマンドフェーズは１クロックで、データフェーズはコマンドとサイズによって０から８のクロックの長さをとることができる。応答コマンドのコマンドフェーズは、パケットの宛先を示す宛先フィールド、アクセスの成否，エラー要因およびリトライ指示を示すリプライコードフィールド、リプライの種別を示すリプライフィールド、コマンドの種別を示すコマンドフィールド（リプライであることを示す種別情報が格納される）、コマンドの処理対象のアドレスを示すアドレスフィールドから構成される。
【０１９０】
複数のプロセッサモジュール間を接続するシステムバス１２−１，１２−２についても、パケットは基本的にスヌープバス２２と同じであるが、バスクロックが相違する。即ち、スヌープバスはバスの線路長がモジュール筐体内で済むことから短く、電気的特性が良いので、例えば６０ＭＨｚのクロック周波数とできる。
【０１９１】
これに対しシステムバス１２−１，１２−２はバックパネルを介して複数のプロセッサモジュール間に接続されるために線路長が長く、電気的特性の制約から例えば４０ＭＨｚのクロック周波数に抑えられている。このようなスヌープバス２２とシステムバス１２−１，１２−２の間のクロック周波数の相違によるタイミングは、図３のメモリモジュール２５に示したプロトコル管理ユニット２４によるプロトコル変換機能により調整がとられている。
【０１９２】
図１３は、スヌープバス２２で使用されるコマンドの種類を、プロセッサ１６、スヌープユニット２０、メモリ管理ユニット２６に分けて示している。
【０１９３】
次に、図４のプロセッサエレメント１４−１に設けているキャッシュ制御モジュール３５側におけるキャッシュ状態の遷移を説明する。まず、２次キャッシュ制御モジュール３５のタグメモリ４０にキャッシュサブライン単位に保持されるキャッシュ状態には、図１４に示す無効状態、シェアードクリーン状態、シェアードモディファイ状態、排他的ダーティ状態、シェアードダーティ状態の５つがある。
【０１９４】
無効状態ＩＮＶは２次キャッシュ３８上にデータが存在しない非キャッシュ状態である。シェアードクリーン状態ＳＨ＆Ｃは、ホームとなるプロセッサモジュールの主記憶であるローカルストレージと同一内容のデータを保持している状態である。シェアードモディファイ状態ＳＨ＆Ｍは、ホームとなる主記憶上にあるデータは最新データではない旧いデータであり、自分自身の２次キャッシュには、そのコピーデータが存在し、更に自分のプロセッサモジュール内の他の２次キャッシュ上に排他的ダーティ状態ＥＸ＆Ｄにより、システム内で唯一の最新データが存在している状態である。
【０１９５】
排他的ダーティ状態ＥＸ＆Ｄはシステム内で唯一の最新データを保留している状態であり、この場合、書込権を所有した所謂オーナーとなっている。更に、シェアードダーティ状態ＳＨ＆Ｄは、ホームとしての主記憶上に最新データがなく、自分のプロセッサモジュール内の２次キャッシュ群に最新データを保留しており、更に、自分のプロセッサモジュール内の２次キャッシュ群にホームの主記憶データのコピーをもったシェアードモディファイ状態ＳＨ＆Ｍが存在し、最新データを保留しているキャッシュ制御モジュール自身が書込権を所有してオーナーとなっている場合である。
【０１９６】
図１５は図４の２次キャッシュ制御モジュール３５におけるキャッシュ状態の遷移を示す。まず初期状態は、ブロック１３０の無効状態ＩＮＶである。この状態でプロセッサのリードアクセスによって１次キャッシュ３６がミスヒットになると、アクセス要求が２次キャッシュ状態モジュール３５に発行される。このとき２次キャッシュ３８の該当するキャッシュサブラインが無効状態ＩＮＶであれば、スヌープバス２２へデータを要求するコマンドを送出する。
【０１９７】
この場合、遷移状態はブロック１５０のシェアードモディファイ状態ＳＨ＆Ｍに遷移するケース１の場合と、ブロック１４０のシェアードクリーン状態ＳＨ＆Ｃに遷移するケース２の場合の２つがある。ケース１の場合、ブロック１５０のシェアードモディファイ状態（ＳＨ＆Ｍ）は、他のプロセッサエレメントが排他的ダーティ状態ＥＸ＆Ｄあるいはシェアードダーティ状態ＳＨ＆Ｄで、アクセス対象となったサブラインをキャッシュ上に所有している場合であり、いずれかのプロセッサエレメントのキャッシュ状態信号によってダーティが表示される。
【０１９８】
そこで、ダーティが表示されたプロセッサエレメントのキャッシュ制御モジュール３５が２次キャッシュ３８をアクセスし、データ応答をスヌープバス２２に発行する。このとき応答を行ったプロセッサエレメントでキャッシュ状態がブロック１６０の排他的ダーティ状態ＥＸ＆Ｄであった場合には、ブロック１７０のシェアードダーティ状態ＳＨ＆Ｄに遷移する。応答を受け取ったプロセッサエレメントは、キャッシュ状態をブロック１５０のシェアードモディファイ状態ＳＨ＆Ｍへ遷移する。
【０１９９】
一方、ケース２の場合は、プロセッサのリードアクセスの１次キャッシュにおけるミスヒットに対するアクセス要求に対し、他のプロセッサエレメントがブロック１４０のシェアードクリーン状態ＳＨ＆Ｃか或いはブロック１３０の無効状態ＩＮＶであった場合であり、キャッシュ状態信号およびメモリモジュール２５側のメモリ状態信号はクリーン或いはミスが表示される。クリーン表示を行ったキャッシュ制御モジュール３５は、キャッシュ状態信号を参照して、応答を作成すべきか否か判断する。
【０２００】
同様に、メモリ状態信号を参照したメモリモジュール２５、即ちメモリモジュール２５に設けているメモリ管理ユニット２６も、メモリ状態信号を参照して、応答を作成すべきか否か判断する。応答すべきことを検出したモジュールが２次キャッシュ制御モジュール３５であれば、２次キャッシュメモリ３８にアクセスし、データの応答をスヌープバス２２に発行する。応答すべきことを検出したモジュールがメモリモジュール２５のメモリ管理ユニット２６であれば、主記憶としてのローカルストレージ２８へのアクセスを起動し、スヌープバス２２に応答データを発行する。
【０２０１】
このようにしてスヌープバス２２から応答データを受け取ったアクセス元の２次キャッシュ制御モジュール３５は、ブロック１３０の無効状態ＩＮＶからブロック１４０のシェアードクリーン状態ＳＨ＆Ｃに遷移する。
【０２０２】
２．ＣＰＵリードアクセス時のキャッシュコヒーレンス
次に、図２に示したプロセッサモジュール１０−１〜１０−５のいずれかのＣＰＵでリードアクセスが発生した場合のキャッシュコヒーレンスの処理を、読出モード１〜３に分けて説明する。
【０２０３】
（１）読出モード１
図１６は読出モード１のキャッシュコヒーレンスのプロトコルを示している。
【０２０４】
読出モード１は、プロセッサモジュール１０−１内の任意のＣＰＵの読出アクセスＰ−ＲＤに対し、キャッシュユニット群１８の中の自己のキャッシュユニットでミスヒットし、且つスヌープバス２２で接続した他の全てのキャッシュユニット１８でミスヒットした場合である。
【０２０５】
この場合には、メモリ管理ユニット２６に対し主記憶となるローカルストレージ２８をアクセスするためのリモートコマンドとしてコマンドＴ−ＣＲが発行される。ここで、読出アドレスがプロセッサモジュール１０−１のローカルストレージ２８にあることでプロセッサモジュール１０−１はホームとなり、更にローカルストレージ２８のデータがリモートとなるプロセッサモジュール１０−２内のキャッシュユニット群のいずれかに最新データをもつダーティ状態で存在していたものとする。
【０２０６】
このような場合、読出アクセスを発生したプロセッサモジュール１０−１のメモリ管理ユニット２６は、システムバス１２にリモートコマンド２２０を発行して、プロセッサモジュール１０−２にアクセスする。このリモートコマンド２２０を受領したプロセッサモジュール１０−２のメモリ管理ユニット２６は、スヌープバス２２を介してダーティ状態Ｄにあるキャッシュユニットから最新データを取得した後に、システムバス１２を使用して最新データをリプライデータ２３０として、ローカルで且つホームとなっているプロセッサモジュール１０−１に応答する。
【０２０７】
プロセッサモジュール１０−１は、システムバス１２の応答として得られたリプライデータ２３０をアクセス元のキャッシュユニットにスヌープバス２２を介して格納し、ＣＰＵの読出アクセスに対するリードデータとして応答させる。同時に、主記憶としてのローカルストレージ２８に最新データを書き込むことで、キャッシュコヒーレンスを実現する。ここでリモートコマンド２２０を受けて最新データの応答を行ったプロセッサモジュール１０−２のキャッシュユニットにあっては、ダーティ状態Ｄをクリーン状態Ｃに更新する。また、アクセス元のプロセッサモジュール１０−１のローカルストレージ２８のキャッシュデータを管理しているディレクトリメモリについて、アクセス対象となったキャッシュラインのダーティ状態Ｄをシェア状態Ｓに更新する。更に、アクセス元のキャッシュユニットについては、無効状態Ｉをクリーン状態Ｃに更新する。
【０２０８】
（２）読出モード２
図１７は読出モード２におけるキャッシュコヒーレンスのためのプロトコルを示す。この読出モード２は、任意のＣＰＵの読出アクセスＰ−ＲＤに対し自己のキャッシュユニットでミスヒットし、且つスヌープバス２２で接続した他の全てのキャッシュユニットでミスヒットし、且つ読出アドレスが他のプロセッサモジュール１０−２の主記憶であるローカルストレージ２８にあり、このローカルストレージ２８の読出アドレスのデータが別のプロセッサモジュール１０−３のいずれかのキャッシュユニット上に最新データをもつダーティ状態Ｄで存在する場合である。
【０２０９】
この場合、読出アクセスが起きたプロセッサモジュール１０−２のメモリ管理ユニット２６はローカルとして動作し、システムバス１２にホームコマンド２４０を発行してプロセッサモジュール１０−２にアクセスする。プロセッサモジュール１０−２は、システムバス１２から受領したホームコマンド２４０に基づき、読出アドレスによるディレクトリメモリの参照でプロセッサモジュール１０−３のキャッシュ上にダーティ状態Ｄで最新データが存在することを認識し、システムバス１２にリモートコマンド２５０を発行してプロセッサモジュール１０−３にアクセスする。
【０２１０】
プロセッサモジュール１０−３は、システム１２−２から受領したリモートコマンド２５０に基づき、メモリ管理ユニット２６がリモートとして動作し、スヌープバス２２によってダーティ状態Ｄにあるキャッシュユニットにアクセスして最新データを取得した後、システムバス１２を使用して、ホームとしてのプロセッサモジュール１０−２およびローカルとしてのプロセッサモジュール１０−１のそれぞれにリプライデータ２６０を応答する。ホームとしてのプロセッサモジュール１０−２は、システムバス１２の応答により得られたリプライデータ２６０により主記憶としてのローカルストレージ２８の対応データのオーナーを行って、最新データに更新する。
【０２１１】
同時に、ローカルとしてのプロセッサモジュール１０−１にあっては、システムバス１２からの応答で受領したリプライデータ２６０をスヌープバス２２を介してアクセス元のキャッシュユニットに転送して２次キャッシュ上に格納し、ＣＰＵの読出アクセスに対しリードデータとして応答させる。
【０２１２】
ここで、リモートとなったプロセッサモジュール１０−３で最新データの応答を行ったキャッシュユニットは、キャッシュ状態をダーティ状態Ｄからクリーン状態Ｃに更新する。またホームとなったプロセッサモジュール１０−２にあっては、アクセス対象となったキャッシュラインの状態をダーティ状態Ｄからシェア状態Ｓに更新する。
【０２１３】
具体的には、図８のディレクトリエントリレジスタ１０４のダーティサブラインビット領域１０８の対応するサブラインビットを１から０にリセットする。また、リモートとしてのプロセッサモジュール１０−３およびローカルとしてのプロセッサモジュール１０−１にシェア状態でホームにおけるローカルストレージ２８のデータと同一データが存在するシェア状態にあることから、シェアードマップビット領域１０６の対応するシェアードマップビットを１にセットする。
【０２１４】
更に、ローカルとなったプロセッサモジュール１０−１のアクセスが発生したキャッシュユニットにあっては、無効状態Ｉをクリーン状態Ｃに遷移させる。
【０２１５】
（３）読出モード３
図１８は読出モード３におけるキャッシュコヒーレンスのプロトコルであり、このモードにあっては、アクセスが発生したモジュールの内部のキャッシュユニット間でのスヌープバス２２を使用したキャッシュコヒーレンスが行われる。読出モードには図１８（Ａ）と図１８（Ｂ）の２つのケースがある。
【０２１６】
図１８（Ａ）はＣＰＵの読出アクセスＰ−ＲＤが発生したキャッシュユニット１８−４が無効状態ＩＮＶにあってミスヒットとなったが、スヌープバス２２で接続された他のキャッシュユニット１８−１に最新データがシェアードクリーン状態ＳＨ＆Ｃで存在していた場合である。この場合には、キャッシュユニット１８−４がスヌープバス２２を使用してコマンドＴ−ＣＲを発行し、キャッシュユニット１８−１から該当するサブラインを含むリプライデータ２７０の応答が行われ、キャッシュユニット１８−４上に格納されて、読出アクセスにリードデータとして応答する。
【０２１７】
このときアクセス元のキャッシュユニット１８−４にあっては、無効化状態ＩＮＶからシェアードクリーン状態ＳＨ＆Ｃに遷移し、アクセス先のキャッシュユニット１８−１にあってはシェアードクリーン状態ＳＨ＆Ｃを維持する。
【０２１８】
図１８（Ｂ）は無効化状態ＩＮＶにあるキャッシュユニット１８−４に対するＣＰＵからの読出アクセスＰ−ＲＤに対し、スヌープバス２２で接続したキャッシュユニット１８−１に最新データが排他的ダーティ状態ＥＸ−Ｄで存在した場合、即ち書込権を所有した状態で存在した場合である。この場合のキャッシュユニット１８−４からのアクセスＴ−ＣＲに対し、同様にキャッシュユニット１８−１から最新データのサブラインを含むリプライデータ２８０の応答が行われる。
【０２１９】
この場合、アクセス元のキャッシュユニット１８−４は無効化状態ＩＮＶからシェアードモディファイ状態ＳＨ＆Ｍ、即ち自分のプロセッサモジュール内の他のキャッシュユニットにシェアードダーティ状態で最新データが存在することを示す。またアクセス先のキャッシュユニット１８−１にあっては、排他的ダーティ状態ＥＸ＆Ｄからシェアードダーティ状態ＳＨ＆Ｄに遷移する。
【０２２０】
（４）ローカルプロセッサモジュールのリード処理
図１９のフローチャートは、図１６，図１７の読出モード１，２におけるローカルとなったプロセッサモジュールのリード処理である。まずステップＳ１で、プロセッサエレメントのリードアクセスを受けて、ステップＳ２で、キャッシュヒットの有無が判定され、キャッシュヒットであれば、ステップＳ１４で、プロセッサエレメントにデータを応答して処理を終了する。
【０２２１】
キャッシュミスヒットの場合には、ステップＳ３で、タグメモリ４０からキャッシュステータスを取得し、ステップＳ４で、他のプロセッサエレメントのキャッシュ上に最新データがあるか否かチェックする。他のプロセッサエレメントのキャッシュ上に最新データがあれば、ステップＳ１５に進み、スヌープバス２２にコマンドを送出し、ステップＳ１６でリプライデータを受けて、ステップＳ１３で、キャッシュに格納してプロセッサエレメントに応答する。このステップＳ１５〜Ｓ１７は、図１８の読出モード３の処理である。
【０２２２】
一方、ステップＳ４で他のプロセッサエレメントのキャッシュ上にも最新データがなかった場合には、ステップＳ５で、ローカルコマンドをスヌープバス２２を介してメモリ管理ユニット２６に送出する。メモリ管理ユニット２６側にあっては、まずステップＳ６で、図４に示した空間識別ユニット５０によりコマンドの物理アドレスからプロセッサモジュール空間を判別する。
【０２２３】
ステップＳ７で、リードアドレスが自分のプロセッサモジュールのローカルストレージ２８の主記憶空間であった場合、ステップＳ８で、自らをホームとしてディレクトリメモリ３０のディリクトリエントリからキャッシュステータスを取得する。キャッシュステータスについて、ステップＳ９で、サブラインがダーティか否かチェックし、ダーティであれば、ステップＳ１０で、リモートプロセッサモジュールに対しシステムバスを介してリモートコマンドを送出する。
【０２２４】
このリモートコマンドに対しステップＳ１１で応答があると、リプライデータをステップＳ１２で主記憶としてのローカルストレージ２８に書き込み、ダーティ状態をシェアード状態に更新する。そしてステップＳ１３で、アクセス元のキャッシュユニットに応答し、処理を終了する。ステップＳ９でサブラインがダーティでなかった場合には、ステップＳ２２で、主記憶としてのローカルストレージ２８からデータを読み出してアクセス元のキャッシュユニットに応答し、ステップＳ２３で、主記憶としてのローカルストレージ２８のサブラインのシェアードビットをオンする。
【０２２５】
またステップＳ７で、アクセスした物理アドレスが他のプロセッサモジュール空間であった場合には、ステップＳ１８で、システムバスを介してホームとなるプロセッサモジュールに対しホームコマンドを送出する。このホームコマンドの送出に対し、システムバスを介して最新データのリプライがあることから、ステップＳ１９でリプライを判別すると、ステップＳ２０で、アクセスごとのキャッシュに応答して処理を終了する。
【０２２６】
（５）ホームプロセッサモジュールのリード処理
図２０のフローチャートは、図１６，図１７の読出モード１，２においてホームとなったプロセッサモジュールのリード処理を示す。まずステップＳ１で、ホームコマンドを受領する。ホームコマンドは、システムバスを経由して受領する場合と、自分自身がローカルで且つホームとなる場合に自分自身で生成したホームコマンドを受領する場合とがある。
【０２２７】
ホームコマンドを受領すると、ステップＳ２で、自分自身をホームとしてディレクトリメモリ３０からキャッシュラインのステータスを取得し、ステップＳ３で、サブラインがダーティか否かチェックする。サブラインがダーティであった場合には、ステップＳ４で、自分のプロセッサモジュール内のプロセッサエレメントのキャッシュ上に最新データがあるか否かチェックする。
【０２２８】
最新データが自分自身のキャッシュ上にあれば、ステップＳ５でスヌープバス２２にコマンドを送出し、ステップＳ６でリプライを待って、ステップＳ７でリプライデータを主記憶としてのローカルストレージ２８に書き込み、ディレクトリエントリのダーティ状態をシェアード状態に更新する。続いてステップＳ８で、ローカルプロセッサモジュールに対しリプライデータをシステムバスを使用して送出する。
【０２２９】
またステップＳ４で、別のプロセッサモジュール内のプロセッサエレメントのキャッシュ上にダーティ状態の最新データが存在している場合には、ステップＳ１２で、システムバスを介してリモートプロセッサモジュールにリモートコマンドを送出し、ステップＳ１３でリプライを待って、ステップＳ１４で、主記憶としてのローカルストレージ２８に最新データを書き込んでディレクトリアントリのダーティ状態をシェアード状態に更新する。
【０２３０】
一方、ステップＳ３でサブラインがダーティでなかった場合には、主記憶としてのローカルストレージ２８から最新データを読み出して、システムバスを介してローカルプロセッサモジュールにリプライデータを送出し、処理を終了する。
【０２３１】
（６）リモートプロセッサモジュールのリード処理
図２１のフローチャートは、図１６，図１７の読出モード１，２におけるリモートプロセッサモジュールのリード処理である。まずステップＳ１で、システムバスを介してリモートコマンドを受領すると、ステップＳ２で、自分自身をリモートとしてキャッシュユニットにスヌープバスを介してコマンドを送出する。該当するプロセッサエレメントのキャッシュユニットからデータのリプライを受けると、ステップＳ４で、スヌープバス２２からリプライデータを受領し、ステップＳ５で、システムバスを介してホームプロセッサモジュールおよびローカルプロセッサモジュールにリプライデータを送出する。
【０２３２】
（７）プロセッサエレメントのリード処理
図２２のフローチャートはプロセッサエレメント自身のリード処理である。まずステップＳ１でＣＰＵのリード要求が発生すると、ステップＳ２でキャッシュヒットの有無を判定し、キャッシュヒットであれば、ステップＳ１２で、キャッシュデータをリードアクセスに対し応答する。
【０２３３】
キャッシュミスヒットとなった場合には、ステップＳ３で、キャッシュ制御モジュール３５でキャッシュラインのステータスをタグメモリ４０から取得し、ステップＳ４で、他のプロセッサエレメントのキャッシュ上でヒットか否か判定する。この場合、ミスヒットであればステップＳ１３に進み、メモリモジュール２０側に対するアクセスで他のプロセッサモジュールに対する処理を行う。
【０２３４】
ステップＳ４でキャッシュヒットとなった場合には、ステップＳ５で、他のプロセッサエレメントのキャッシュ状態はシェアードクリーン状態ＳＨ＆Ｃか否かチェックする。シェアードクリーン状態ＳＨ＆Ｃであれば、ステップＳ６で、スヌープバス２２にコマンドを送出し、ステップＳ７で、リプライデータを受領してキャッシュに応答し、ステップＳ８で、ステータスを無効化状態ＩＮＶからシェアードクリーン状態ＳＨ＆Ｃに更新する。
【０２３５】
一方、他のプロセッサが排他的ダーティ状態ＥＸ＆Ｄであった場合には、ステップＳ９でスヌープバス２２にコマンドを送出した後、ステップＳ１０で、リプライデータを受領してキャッシュに応答し、ステップＳ１１で、ステータスをシェアードモディファイ状態ＳＨ＆Ｍに更新する。
【０２３６】
３．ＣＰＵ書込アクセスに対するキャッシュコヒーレンス
（１）書込モード１
図２３は、書込モード１におけるキャッシュコヒーレンスのプロトコルを示す。この書込モード１は、プロセッサモジュール１０−１の任意のＣＰＵの書込アクセスＰ−ＷＴに対し自己のキャッシュユニットでミスヒットし、且つスヌープバス２２で接続した他のキャッシュユニットにおいてもミスヒットとなり、且つ書込アドレスがプロセッサモジュール１０−１の主記憶であるローカルストレージ２８にあり、更に、ローカルストレージ２８の書込アドレスのコピーデータが他の複数のプロセッサモジュール１０−２，１０−３のキャッシュ上にシェア状態で存在する場合である。
【０２３７】
この場合には、スヌープバス２２を介して書込アクセスＴ−ＣＲＩを受けたプロセッサモジュール１０−１のメモリ管理ユニット２６は、自らをローカルおよびホームとし、キャッシュディレクトリの参照で、シェア状態にある全てのプロセッサモジュール１０−２，１０−３に対し、システムバス１２を使用して無効化指令であるパージコマンド３００を発行する。
【０２３８】
このパージコマンド３００に対し、プロセッサモジュール１０−２，１０−３はリモートとして動作し、それぞれのメモリ管理ユニット２６はスヌープバス２２を介してシェア状態Ｃにあるメモリユニットに対し無効化を要求する。シェア状態にあるキャッシュユニットで無効化に成功すると、プロセッサモジュール１０−２，１０−３はシステムバス１２を使用して独立にパージ応答３１０，３２０を行う。このパージ応答３１０，３２０には、プロセッサモジュール１０−２，１０−３における対象となったキャッシュラインのキャッシュステータスが含まれている。
【０２３９】
ホームとしてのプロセッサモジュール１０−１は、システムバス１２から全てのパージ応答３１０，３２０を受理したことで無効化の成功を認識し、主記憶としてのローカルストレージ２８の書込アドレスのコピーデータをアクセス元のキャッシュユニットに格納して、書込アクセスにより上書きさせる。このときホームとしてのプロセッサモジュール１０−１にあっては、アクセス対象となったキャッシュラインのディレクトリエントリのシェア状態Ｓをダーティ状態Ｄに更新する。
【０２４０】
このように書込アクセスにあっては、アクセス元のキャッシュ上で主記憶としてのローカルストレージ２８と同一データが上書きにより変更されて最新データとなることで、ローカルストレージ２８のデータが旧いデータとなった状態で処理を終了し、ローカルストレージ２８の旧いデータの最新データとのコヒーレンスは、既に説明したリードアクセスを通じて行われることになる。
【０２４１】
（２）書込モード２
図２４は、書込モード２によるキャッシュコヒーレンスのプロトコルを示す。書込モード２は、ＣＰＵアクセスが発生したプロセッサモジュール１０−１のキャッシュユニットに、スヌープバス２２で接続した他のキャッシュユニットに書込権を所有しないシェア状態Ｃで主記憶としてのローカルストレージ２８と同一データが存在している場合であり、それ以外の状態は図２３のモード１と同じである。
【０２４２】
この書込モード２にあっては、ＣＰＵの書込アクセスＰ−ＷＴに基づいて、ホームとして動作したメモリ管理ユニット２６よりシステムバス１２を使用してリモートとしてのプロセッサモジュール１０−２，１０−３にパージコマンド３００を発行すると同時に、これに並行して、同じプロセッサモジュール１０内のキャッシュユニット群１８に対しパージコマンド３２５を発行する。
【０２４３】
このため、ホームとして動作したプロセッサモジュール１０−１のメモリ管理ユニット２６は、システムバス１２を介してリモートとしてのプロセッサモジュール１０−２，１０−３からのパージ応答３１０，３２０の全ての応答と、自己のスヌープバス２２からのパージ応答を受理したことで、無効化の成功を認識し、主記憶としてのローカルストレージ２８の最新データのコピーデータをアクセス元のキャッシュユニットに格納して、ＣＰＵの書込アクセスにより上書きする。この場合にも、書込モード１と同様、ディレクトリエントリのシェア状態Ｓはダーティ状態Ｄに更新される。
【０２４４】
（３）書込モード３
図２５は、書込モード３によるキャッシュコヒーレンスのプロトコルを示す。この書込モード３は、プロセッサモジュール１０−１のＣＰＵの書込アクセスＰ−ＷＴに対し、自己のキャッシュユニットおよびスヌープバス２２を介して接続したキャッシュユニットを含むキャッシュ群１８のいずれにもコピーデータがオーナーを所有した状態で登録されておらず、ミスヒットになり、書込アドレスがプロセッサモジュール１０−２の主記憶であるローカルストレージ２８にあり、更にローカルストレージ２８の最新データのコピーデータがプロセッサモジュール１０−２以外の他の複数のプロセッサモジュール１０−３，１０−４にシェア状態Ｃで存在する場合である。
【０２４５】
この場合、ローカルとしてのプロセッサモジュール１０のメモリ管理ユニット２６は、システムバス１２を使用してホームとしてのプロセッサモジュール１０−２に書込所有権の要求指令、所謂ホームコマンド３３０を発行する。書込所有権の要求指令であるホームコマンド３３０を受領したプロセッサモジュール１０−２は、シェア状態にある他のプロセッサモジュール１０−３，１０−４に対し、システムバス１２を使用して無効化指令としてのパージコマンド３４０を発行する。
【０２４６】
プロセッサモジュール１０−３，１０−４は、パージコマンド３４０を受理すると、スヌープバス２２を介して、シェア状態にあるキャッシュ群１８の中のキャッシュユニットに対し無効化を指令し、無効化に成功すると、システムバス１２を使用してホームとしてのプロセッサモジュール１０−２に独立にパージ応答３５０，３６０を返す。
【０２４７】
ホームとしてのプロセッサモジュール１０−２は、全てのパージ応答３５０，３６０を受理したことで無効化の成功を認識すると、ローカルとしてのプロセッサモジュール１０−１に対し、システムバス１２を使用して自分自身の主記憶であるローカルストレージ２８の最新データのコピーデータを含む書込所有権の移動を応答する。
【０２４８】
ローカルのプロセッサモジュール１０−１は、システムバス１２より書込所有権の応答であるリプライデータ３７０の受領により得られたコピーデータをアクセス元のキャッシュユニットに格納し、ＣＰＵの書込アクセスにより上書きさせる。ここで、無効化の成功を認識して書込所有権の移動を行ったホームとしてのプロセッサモジュール１０−２のメモリ管理ユニットは、ディレクトリエントリのシェア状態Ｓをダーティ状態Ｄに更新する。またプロセッサモジュール１０−１のアクセス元のキャッシュユニットにあっては、書込アクセスの終了でキャッシュ状態を書込権を所有したダーティ状態Ｄに更新する。
【０２４９】
（４）書込モード４
図２６は、書込モード４によるキャッシュコヒーレンスのプロトコルを示す。書込モード４は、ローカルとして動作するプロセッサモジュール１０−１におけるＣＰＵの書込アクセスＰ−ＷＴに対し、自己のキャッシュユニットがミスヒットで、且つスヌープバス２２を介して接続した他のキャッシュユニットにもコピーデータが書込権を所有した状態で登録されておらずにミスヒットとなり、書込アドレスがプロセッサモジュール１０−２の主記憶であるローカルストレージ２８にあり、更にローカルストレージ２８の最新データのコピーデータがプロセッサモジュール１０−２を含む複数のプロセッサモジュール１０−３，１０−４のキャッシュユニットにシェア状態Ｃで存在する場合である。
【０２５０】
この場合には、書込アクセスが発生したローカルとしてのプロセッサモジュール１０−１のメモリ管理ユニット２６が、ホームとしてプロセッサモジュール１０−２に対しシステムバス１２を使用して書込所有権の要求指令であるホームコマンド３７０を発行する。この書込所有権要求指令となるホームコマンド３７０を受領したプロセッサモジュール１０−２のメモリ管理ユニット２６は、シェア状態にある全てのプロセッサモジュール１０−３，１０−４に対し、システムバス１２を使用して無効化指令としてのパージコマンド３８０を発行する。
【０２５１】
このパージコマンド３８０の発行に並行して更に、メモリ管理ユニット２６は、自己のシェア状態にあるキャッシュ群１８の中のキャッシュユニットに対しスヌープバス２２を使用して無効化指令としてのパージコマンド４１０を発行する。
【０２５２】
キャッシュ上でシェア状態Ｃにある全てのプロセッサモジュール１０−３，１０−４はリモートとして動作し、パージコマンド３４０を同時に受理して、スヌープバス２２を介してキャッシュ群１８側に無効化を指令し、無効化に成功すると、システムバス１２を使用して、プロセッサモジュール１０−２に独立にパージ応答３５０，３６０を返す。これに並行してプロセッサモジュール１０−２のシェア状態Ｃにあるキャッシュユニットからは、無効化の成功がスヌープバス２２を使用して応答される。
【０２５３】
ホームとなるプロセッサモジュール１０−２は、システムバス１２からの全ての無効化成功のパージ応答３５０，３６０と、スヌープバス２２からの無効化成功の応答を受領したことで、無効化の成功を認識して、システムバス１２を使用してローカルのプロセッサモジュール１０−１に対し自分の主記憶であるローカルストレージ２８の最新データのコピーデータを含む書込所有権の移動をリプライデータ４３０として応答する。
【０２５４】
プロセッサモジュール１０−１は、システムバス１２から書込所有権の応答の受領で得られたコピーデータをアクセス元のキャッシュユニットに格納して、ＣＰＵの書込アクセスにより上書きさせる。ここでプロセッサモジュール１０−２は、無効化の成功を認識して書込所有権の移動を応答した際に、自己のディレクトリエントリのシェア状態Ｓをダーティ状態Ｄに更新する。
【０２５５】
（５）書込モード５
図２７は、書込モード５によるキャッシュコヒーレンスのプロトコルを示す。この書込モード５は、プロセッサモジュール１０−１のＣＰＵの書込アクセスＰ−ＷＴに対し自己のキャッシュユニットおよびスヌープバス２２で接続した他のキャッシュユニットのキャッシュ群１８にコピーデータが書込権を所有した状態で登録されておらずにミスヒットとなり、且つ書込アドレスがプロセッサモジュール１０−１の主記憶であるローカルストレージ２８にあり、更にローカルストレージ２８の書込アドレスの最新データがプロセッサモジュール１０−２のキャッシュユニットに書込権を所有したダーティ状態Ｄで存在する場合である。
【０２５６】
この場合、ローカルおよびホームとしてのプロセッサモジュール１０−１は、ダーティ状態Ｄにあるプロセッサモジュール１０−２に対し、システムバス１２を使用して、書込所有権の要求指令となるリモートコマンド４４０を発行する。プロセッサモジュール１０−２は、システムバス１２から書込所有権の要求指令であるリモートコマンド４４０を受理して、キャッシュユニット上のシェア状態Ｄの最新データを含む書込所有権の移動を示すリプライデータ４５０をシステムバス１２を使用してプロセッサモジュール１０−１に応答する。
【０２５７】
プロセッサモジュール１０−１は、リプライデータ４５０による書込所有権の応答で得られた最新データをアクセス元のキャッシュユニットに格納して、ＣＰＵによる書込アクセスで上書きさせる。
【０２５８】
ここでプロセッサモジュール１０−２の書込所有権を移動したキャッシュユニットにあっては、ダーティ状態Ｄを無効化状態Ｉに更新する。またプロセッサモジュール１０−１のメモリ管理ユニット２６は、書込所有権を受領した際にディレクトリエントリのダーティ状態Ｄを自分のキャッシュ上に最新データが存在するダーティ状態Ｄ´に更新する。
【０２５９】
（６）書込モード６
図２８は、書込モード６によるキャッシュコヒーレンスのプロトコルを示す。この書込モード６は、プロセッサモジュール１０−１のＣＰＵによる書込アクセスＰ−ＷＴに対し、自己のキャッシュユニットおよびスヌープバス２２で接続した他のキャッシュユニットを含むキャッシュ群１８にコピーデータが書込権を所有した状態で登録されておらずに、ミスヒットとなり、書込アドレスがプロセッサモジュール１０−２の主記憶であるローカルストレージ２８にあり、更にローカルストレージ２８の書込アドレスの最新データがプロセッサモジュール１０−３のキャッシュユニットに書込権を所有したダーティ状態Ｄで存在する場合である。
【０２６０】
この場合に、ローカルとしてのプロセッサモジュール１０−１のメモリ管理ユニット２６は、システムバス１２を使用して、書込所有権の要求指令となるホームコマンド４６０を発行する。ホームコマンド４６０を受領したホームとなるプロセッサモジュール１０−２のメモリ管理ユニット２６は、リモートとなるプロセッサモジュール１０−３に対し、システムバス１２を使用して、同じく書込所有権の要求指令であるリモートコマンド４７０を発行する。
【０２６１】
リモートコマンド４７０を受領したプロセッサモジュール１０−３は、ダーティ状態Ｄにあるキャッシュユニットの最新データを含む書込所有権を、システムバス１２を使用して、リプライデータ４８０としてホームであるプロセッサモジュール１０−２およびローカルであるプロセッサモジュール１０−１に応答する。
【０２６２】
ホームであるプロセッサモジュール１０−２は、書込所有権の応答であるリプライデータ４８０を受領して、書込所有権の移動を認識する。またローカルとなるプロセッサモジュール１０−１は、リプライデータ４８０による書込所有権の受領で得られた最新データをアクセス元のキャッシュユニットに格納して、ＣＰＵの書込アクセスで上書きさせる。
【０２６３】
ここで、リモートとなるプロセッサモジュール１０−３のキャッシュユニットにあっては、ダーティ状態Ｄを書込所有権を移動した際に無効化状態Ｉに更新する。またホームとなるプロセッサモジュール１０−２は、書込所有権の移動を確認した際に、ディレクトリエントリのダーティ状態Ｄを最新データが存在するプロセッサモジュール１０−１の情報に変更したダーティ状態Ｄ´に更新する。
【０２６４】
更に、ローカルとなるプロセッサモジュール１０−１のアクセス元のキャッシュユニットにあっては、最新データを格納した後に、書込権を所有しているダーティ状態Ｄに更新する。
【０２６５】
（７）書込モード７
図２９は、書込モード７によるキャッシュコヒーレンスのプロトコルを示す。この書込モード７は、プロセッサモジュール１０−１内の複数のキャッシュユニット間でアクセスする場合である。即ち、プロセッサモジュール１０−１内のＣＰＵの書込アクセスＰ−ＷＴに対し、自己のキャッシュユニット１８−４はミスヒットしたが、スヌープバス２２を介して接続した他のキャッシュユニット１８−１に書込アドレスの最新データが書込権を所有したダーティ状態、即ち排他的ダーティ状態ＥＸ＆Ｄで存在する場合である。
【０２６６】
この場合、アクセス元のキャッシュユニット１８−４はスヌープバス２２を介してコマンドＴ−ＣＲＩを発行し、これに応答してキャッシュユニット１８−１は最新のキャッシュサブラインのデータを含むリプライデータ４９０を応答し、キャッシュユニット１８−４に格納した後に、書込アクセスにより上書きさせる。
【０２６７】
ここで、アクセス先のキャッシュユニット１８−１にあっては、書込所有権を移動した後に無効化状態ＩＮＶに更新される。またアクセス元のキャッシュユニット１８−４は、書込権を獲得した後に無効化状態ＩＮＶから書込権を所有するダーティ状態である排他的ダーティ状態ＥＸ＆Ｄに更新される。
【０２６８】
（８）書込アクセスのプロセッサライト処理
図３０のフローチャートは、書込アクセスに伴うキャッシュコヒーレンスでローカルとなったプロセッサモジュールのライト処理である。ステップＳ１で、プロセッサエレメントのライトアクセスが発生すると、ステップＳ２で、２次キャッシュ３８のキャッシュヒットが判定され、キャッシュヒットであれば、ステップＳ１４で、キャッシュ上にデータを上書きする。
【０２６９】
キャッシュミスヒットであればタグメモリ４０からキャッシュステータスを取得し、スヌープバス２２で取得した他のキャッシュユニットに最新データがあるか否かステップＳ４でチェックする。他のキャッシュ上に最新データがあれば、ステップＳ１５で他のプロセッサエレメントにコマンドを送出し、ステップＳ１６でリプライを待ち、ステップＳ１７で、最新のリプライデータに上書きを行って、書込アクセスを終了する。
【０２７０】
ステップＳ１４で、スヌープバス２２で接続した他のプロセッサエレメントのキャッシュ上に最新データがなかった場合には、ステップＳ５で、ローカルコマンドをスヌープバス２２を介してメモリ管理ユニット２６に送出し、ステップＳ６で、空間識別ユニット５０からプロセッサモジュール空間を判別し、ステップＳ７で、自分自身のプロセッサモジュール空間か否か判断する。
【０２７１】
自分自身のプロセッサモジュール空間であれば、ステップＳ８で、自分自身をホームとしてディレクトリメモリ３０からキャッシュラインのステータスを見るためにディレクトリエントリを取得する。ステップＳ９で、ディレクトリエントリのサブラインはダーティか否かチェックし、ダーティであれば、ステップＳ１０で、リモートとなるプロセッサモジュールにシステムバス１２を介してパージを要求する。
【０２７２】
このパージ要求に対しステップＳ１１で応答があれば、ディレクトリエントリの別のサブラインにダーティをセットし、キャッシュステータスを更新する。そしてステップＳ１３で、プロセッサエレメントのアクセス元のキャッシュ上でリプライデータを上書きし、無効化状態ＩＮＶを書込所有権付きのダーティ状態ＥＸ＆Ｄに更新する。
【０２７３】
一方、ステップＳ９で、ディレクトリエントリのサブラインがダーティではなくシェアであった場合には、ステップＳ２１で、リモートプロセッサモジュールにパージを要求し、ステップＳ２２でリプライを待って、ステップＳ２３で、ディレクトリエントリのシェア状態Ｓをダーティ状態Ｄに更新するキャッシュステータスの更新を行い、最終的に、ステップＳ２４で、キャッシュデータに上書きを行って無効化状態ＩＮＶからシェアードダーティ状態ＳＨ＆Ｄに更新する。
【０２７４】
このステップＳ８〜Ｓ１３およびステップＳ２１〜Ｓ２４は、ローカルプロセッサモジュールが同時にホームプロセッサモジュールとなった場合の処理である。
【０２７５】
一方、ステップＳ７で、アクセス空間が自分自身のプロセッサモジュール空間でなかった場合には、ステップＳ１８で、他のプロセッサモジュールに対しホームコマンドを送出し、ステップＳ１９で、最新データのリプライを待って、ステップＳ２０で、リプライデータをキャッシュ上で上書きして無効化状態ＩＮＶから排他的ダーティ状態ＥＸ＆Ｄに更新する。これはホームコマンドにより書込所有権の移動を伴うものである。
【０２７６】
図３１のフローチャートは、書込アクセスによるキャッシュコヒーレンスでホームプロセッサモジュールとなった場合のライト処理である。ステップＳ１でホームコマンドを受領すると、ステップＳ２で、自分自身をホームとしてディレクトリメモリ３０からキャッシュステータスとしてのディレクトリエントリを取得する。
【０２７７】
ステップＳ３で、ディレクトリエントリのサブラインを参照してダーティか否かチェックし、ダーティであれば、ステップＳ４で、ダーティ状態の最新データの存在が自分自身のプロセッサモジュールのキャッシュ上か否かチェックする。自分自身のキャッシュ上であれば、ステップＳ５で、スヌープバス２２を介してパージを要求し、ステップＳ６のリプライを待って新データを、ステップＳ７で、主記憶としてのローカルストレージ２８のキャッシュ状態であるディレクトリエントリの新たなサブラインをダーティ状態にセットし、ステップＳ８で、ローカルプロセッサモジュールに最新データをリプライデータとして送出する。
【０２７８】
ステップＳ４で、ダーティ状態の最新データが他のプロセッサモジュールのキャッシュ上に存在する場合には、ステップＳ９で、リモートプロセッサモジュールに対しパージを要求し、ステップＳ１０でリプライを待って、ステップＳ１１に進み、ディレクトリエントリにおける新サブラインのダーティをセットする。
【０２７９】
一方、ステップＳ３で、ディレクトリエントリのサブラインがダーティでなくシェア状態であった場合には、ステップＳ１２で、自分自身のプロセッサモジュール内のキャッシュ上か否かチェックする。自分自身のキャッシュ上でなければ、ステップＳ１３で、リモートプロセッサモジュールにパージを要求し、ステップＳ１４でリプライを待って、ステップＳ１５で、主記憶としてのローカルストレージから最新データとしてのリプライデータを読み出してローカルプロセッサモジュールに送出し、キャッシュディレクトリをダーティ状態Ｄからシェア状態Ｓに更新する。
【０２８０】
またステップＳ２で、自分自身のプロセッサモジュール内のキャッシュ上にシェア状態が存在するときには、ステップＳ１６で、スヌープバス２２を介してパージを要求し、ステップＳ１７でリプライを待って、ステップＳ１８に進み、ディレクトリエントリのシェア状態をダーティ状態に更新する。そしてステップＳ１９で、主記憶としてのローカルストレージ２８の最新データをローカルプロセッサモジュールにリプライデータとして送出する。
【０２８１】
図３２のフローチャートは、書込アクセスにおいてリモートプとなるロセッサモジュールのライト処理である。リモートプロセッサモジュールのライト処理にあっては、まずステップＳ１で、システムバス１２からリモートコマンド、即ち書込所有権の要求指令を受領すると、ステップＳ２で、スヌープバス２２にコマンドを送出し、ステップＳ３で、スヌープバス２２からのリプライを待ち、ローカルプロセッサモジュールおよびホームプロセッサモジュールに対し、ステップＳ４で、書込所有権の移動を応答するコマンドと最新データをリプライデータとして送出する。
【０２８２】
図３３は、書込アクセスが発生した際のプロセッサエレメントのライト処理のフローチャートである。まずステップＳ１でライト要求が発生すると、ステップＳ２で、自分自身のキャッシュユニットおよびスヌープバス２２で接続した他のキャッシュユニットに書込権を所有した最新データが存在するか否かチェックする。
【０２８３】
他のキャッシュ上に存在すれば、ステップＳ９で、アクセス元に転送してキャッシュデータの上書きを行い、読出時のキャッシュユニットでキャッシュヒットとなるか否か、ステップＳ２でチェックする。キャッシュヒットであれば、ステップＳ９に進み、キャッシュデータにライト要求によるデータを上書きし、自分自身のキャッシュ状態を同じ書込所有権付きの排他的ダーティ状態ＥＸ＆Ｄ´に送信する。
【０２８４】
自分自身のキャッシュユニットに書込権を所有した状態で最新データが存在しなかった場合には、ステップＳ３に進み、キャッシュ制御モジュール３５でタグメモリ４０を参照して、キャッシュラインのステータスを取得し、他のプロセッサエレメントのキャッシュ上に書込権を所有した状態で最新データが存在するか否かチェックする。
【０２８５】
存在すればヒットと判定し、ステップＳ５で、スヌープバス２２にコマンドを送出し、書込所有権の要求指令を行う。ステップＳ６でリプライがあると、アクセス元のキャッシュ上にリプライデータを格納して上書きし、ステップＳ８で、キャッシュステータスを無効状態ＩＮＶから排他的ダーティ状態ＥＸ＆Ｄに更新する。
【０２８６】
ステップＳ４で、他のプロセッサエレメントに書込所有権が存在した状態で最新データがない場合には、ステップＳ１０に進み、他のプロセッサモジュールに対するアクセス処理となり、これは図３０のローカルプロセッサモジュールのライト処理を起動することになる。
【０２８７】
４．キャッシュユニットのアクセス競合処理
本発明のキャッシュコヒーレンス装置にあっては、複数のプロセッサモジュールの各々のプロセッサエレメント毎に設けたキャッシュユニットは、モジュール内のプロセッサエレメント及び外部のプロセッサモジュールのアクセス対象となり、このため特定のキャッシュユニットにアクセスが集中する可能性がある。
【０２８８】
例えばリモートのプロセッサモジュール内のプロセッサエレメントとキャッシュユニット間でデータ授受が行われているとき、外部のホームとして機能するプロセッサモジュールからのリモートコマンドがスヌープバスに現れたとき、後発のリモートコマンドは、先発したキャッシュ制御によってリトライが指示される。これは、先発のコマンドによって、キャッシュ状態が遷移過渡期にあるため、リモートコマンドへの対処が決定できないからである。
【０２８９】
このように、リモートのプロセッサモジュール内でのデータの授受が際限なく続いた場合、リモートコマンドを送出したホームのプロセッサモジュールは、リトライを繰り返す場合がある。このときシステムバスに対するバス接続ユニットでは、アクセス応答の時間監視を行っており、リトライの繰り返しがバスタイムアウトの引金になる。
【０２９０】
図３４において，プロセッサモジュール１０−１は，アクセス対象となるデータのアドレスを主記憶２８に持つことからホームとして機能する。この主記憶２８のアクセスアドレスのデータは最新データでないことから，ディレクトリを管理するメモリ管理ユニット２６はダーティ状態Ｄを登録している。このアクセスアドレスのデータの最新データは、プロセッサモジュール１０−２のキャッシュユニット群１８における４番目のプロセッサエレメントＰＥ＃３のキャッシュユニットに排他的ダーティ状態ＥＸ＆Ｄで保持されている。
【０２９１】
この状態でプロセッサモジュール１０−１の第４プロセッサエレメントＰＥ＃３でライトコマンドＰ−ＷＴが発生し、またプロセッサモジュール１０−２の第１プロセッサモジュールＰＥ＃０で同じアドレスに対するライトコマンドＰ−ＷＴが発生したとする。
【０２９２】
プロセッサモジュール１０−２にあっては、第１プロセッサエレメントＰＥ＃１の発生したライトアクセスに基づき、キャッシュユニット１８−１からスヌープバス２２に、ａのようにコヒーレントライト＆インバリデートのＣＲＩコマンドが発行される。この場合、第４プロセッサエレメントＰＥ＃３のキャッシュユニット１８−４にアクセスアドレスのデータが排他的ダーティ状態ＥＸ＆Ｄで記録されているため、ｃのように第４プロセッサエレメントＰＥ＃３のキャッシュユニットから第１プロセッサエレメントＰＥ＃０に対しデータが供給される。
【０２９３】
このようなプロセッサモジュール１０−２内におけるアクセスに並行して、プロセッサモジュール１０−１の第４プロセッサエレメントＰＥ＃３のライトアクセスに基づき、システムバス１２にリモートコマンド２２０が送出され、ｂのようにリモートとなるプロセッサモジュール１０−２のスヌープバス２２にリモートコマンドが現れる。
【０２９４】
このときａ，ｃに示した内部のプロセッサエレメントＰＥ＃０，＃３の間のアクセスが終了していれば問題ないが、アクセス中にリモートコマンドが現れるとバスビジーとなって、プロセッサモジュール１０−１に対しシステムバス１２を介してリトライを指示するためのリプライコマンド２３０がｅのように送出される。
【０２９５】
このため、リプライコマンド２３０を受けたプロセッサモジュール１０−１は、再度リモートコマンド２２０をプロセッサモジュール１０−２に送出するリトライ動作を行うが、このときのプロセッサモジュール１０−２の内部のアクセスによりスヌープバス２２がビジーであると、再度リプライコマンド２３０によるリトライとなり、リトライが際限なく続く可能性がある。
【０２９６】
図３５は、リモートコマンドに対するリトライ指示が繰り返されるプロセッサモジュール１０−２の処理のタイムチャートである。
【０２９７】
図３５のタイムチャートにあっては、横軸にバスクロックサイクルの処理タイミングを示し、縦軸にスヌープバス２２の使用中のプロセッサエレメント、プロセッサエレメントＰＥ＃０〜＃３ごとのビジー期間、更に各プロセッサエレメント＃０〜＃３に対応したキャッシュステータス信号ＣＳＴ０〜３を示している。
【０２９８】
まずａのように、第１プロセッサエレメントＰＥ＃０のライトコマンドの発行に伴い、スヌープバス２２がプロセッサエレメントＰＥ＃０で占有され、コヒーレント＆インバリデートのＣＲＴコマンドが送出される。このＣＲＴコマンドに伴い、アクセス先のプロセッサエレメントＰＥ＃０のビジー状態が設定される。アクセス先となるプロセッサエレメントＰＥ＃０のビジー期間中に、ｂのように、外部のプロセッサエレメント１０−１からのリモートコマンド＃ＲのＣＲＩコマンドが現われると、アクセス先のプロセッサエレメントＰＥ＃０はビジー状態にあることからビジー応答となり、例えば４サイクル後のｄのタイミングでリモートコマンド＃Ｒに対するビジー応答のリプライコマンドがプロセッサモジュール１０−１に送出される。
【０２９９】
一方、ｂのリモートコマンド＃ＲのＣＲＩコマンドの後にプロセッサエレメントＰＥ＃３からデータトランスファのＤＴコマンドが現われ、ＣＲＩコマンドを受けたプロセッサエレメントＰＥ＃０から要求元のプロセッサエレメントＰＥ＃３に対するデータ転送が行われる。このｃのＤＴコマンドに基づくデータ転送の終了後に、ｅのように、プロセッサエレメントＰＥ＃１のＣＲＩコマンドがスヌープバス２２に現われ、このアクセス要求先がビジーリプライとなったリモートコマンド＃Ｒと同じプロセッサエレメント＃０であったとすると、再びプロセッサエレメントＰＥ＃０がビジー状態となる。
【０３００】
このため、ｅのリモートコマンドに対するビジーリプライに基づいてプロセッサモジュール１０−１から、ｆのようにリモートコマンド＃Ｒのリトライがスヌープバス上に現われても、アクセス要求先となるプロセッサエレメント＃０はビジー状態にあるため、ｈのように、リモートコマンド＃Ｒに対するビジーリプライとなる。
【０３０１】
そして、このようなリモートコマンド＃Ｒに対するアクセス要求先のプロセッサエレメント＃０のビジー状態によるリトライ指示が際限なく繰り返され、結局はプロセッサモジュール１０−１からのアクセスがバスタイムアウトとなってエラー終了してしまう。
【０３０２】
このような特定のキャッシュユニットにおけるアクセスの競合に対し本発明にあっては、プロセッサモジュールの各プロセッサエレメントの中に、自己のアクセス処理中にリモートコマンドを受けてリトライの指示を行ったことを記憶するフラグと、そのときのアクセスアドレスを保持するアドレスレジスタを設ける。
【０３０３】
そして、リモートコマンドに対するリトラスの指示を行ったことを示すフラグが有効な期間の間は、アドレスレジスタにセットしたアクセスアドレスと同じリモートコマンド以外のアクセス要求は全て受け付けずにリトライを指示するように構成する。
【０３０４】
このため、プロセッサモジュールのスヌープバス２２上で内部的なアクセス中にリモートコマンドによるアクセスが競合した場合、１回はリトライ指示となるが、２回目のリトライによるリモートコマンドについては、他のアクセスが一切拒否されている。このため、２回目のリモートコマンドによるアクセスを優先的に受け付けた処理を行うことができる。
【０３０５】
図３６は、プロセッサエレメントにリモートコマンドのアクセスを優先させるためのフラグ及びアドレスレジスタを設けた場合の本発明による処理動作のタイムチャートである。
【０３０６】
図３６において、ａのようにプロセッサエレメントＰＥ＃０のライトアクセスによるＣＲＴコマンドがスヌープバス２２に現われたならば、このＣＲＴコマンドを発行したプロセッサエレメントＰＥ＃０において、ｂのように、プロセッサエレメントＰＥ＃３側のアクセス対象となるアドレスをレジスタに格納する。
【０３０７】
プロセッサエレメントＰＥ＃０のＣＲＩコマンドに伴うプロセッサエレメントＰＥ＃０のビジー期間中に、ｃのようにリモートコマンド＃ＲのＣＲＩコマンドが現われると、ｄのようにリモートコマンド＃Ｒに対するリトライ指示を行ったことを示すフラグをセットする。
【０３０８】
この第１回目のリモートコマンド＃Ｒについては、図３５と同様、ｆでビジーリプライによるリトライ指示となる。続いてｅのアクセス要求先のプロセッサエレメントＰＥ＃３からのデータ転送が行われ、スヌープバス２２の使用が解除された後に、ｆのように別のプロセッサエレメントＰＥ＃１から同じプロセッサエレメントＰＥ＃３の同一アドレスに対しＣＲＩコマンドが発行されたとする。
【０３０９】
これに対し、１回目のリモートコマンド＃Ｒに対しリトライ指示を行ったプロセッサエレメントＰＥ＃０は、リモートコマンドに対しリトライ指示を行ったことを示すフラグのセット状態と、そのときのアクセスアドレスを記憶保持していることから、ｆのプロセッサエレメントＰＥ＃１のＣＲＩコマンドに対しｇでバスビジーとなり、ｈでプロセッサエレメントＰＥ＃１に対するビジーリプライによってリトライを指示し、アクセス要求を拒否する。
【０３１０】
続いてｉでリトライによるリモートコマンド＃Ｒが現われると、このときアクセス要求先のプロセッサエレメントＰＥ＃０は空き状態にあることから、リモートコマンド＃ＲのＣＲＩコマンドによる処理が受け入れられ、リモート側に対するデータ転送に入る。このデータ転送を開始すると、その後のタイミングで、（１０）に示すように、プロセッサエレメント＃０に記憶されていたフラグ及びアクセスアドレスは順次初期化されて解除され、リトライを行ったリモートコマンド＃Ｒに対する優先受付けを解除することになる。
【０３１１】
尚、図３６のタイムチャートは外部のプロセッサモジュールからのリモートコマンドと内部のプロセッサエレメントのアクセスコマンドの競合を例にとっているが、内部のプロセッサエレメント同士のアクセスコマンドの競合についても同様な処理により、後続したアクセスコマンドは１回リトライとなるが、２回目については優先的に受け入れられ、スヌープバス２２上におけるキャッシュコヒーレントのためのアクセス競合を適切に調整することができる。
【０３１２】
５．コピーバックの書込所有権
図３７は、プロセッサモジュール１０−１のキャッシュユニットのいずれかで保有している最新データを、最新データのリプレースが発生した際に分散型の主記憶としてのローカルストレージ２８にコピーバックするための書込所有権の移動に関する制御手順の説明図である。
【０３１３】
いまプロセッサモジュール１０−１において、分散型主記憶としてのローカルストレージ２８のデーダか最新データでなく、スヌープバス２２でメモリ管理ユニット２６に接続された４つのキャッシュユニットの内のキャッシュユニット１８−１，１８−４に存在していたとする。更に同じ最新データを共有しているキャッシュユニット１８−１，１８−４の内、キャッシュユニット１８−１が、最新データをローカルストレージ２８にコピーバックする書込所有権を保有していたとする。
【０３１４】
この時のキャッシュ状態は、最新データ及び書込所有権を保有したキャッシュユニット１８−１がシェアードダーティ状態ＥＸ＆Ｄで表わされ、最新データを保有するが書込所有権はもたないキャッシュユニット１８−４がシェアードモディファイ状態ＳＨ＆Ｍで現わされる。更にメモリ管理ユニット２６にあっては、ローカルストレージ２８の対象データがダーティ状態Ｄにあることを表わしている。ここでローカルストレージ２８へのコピーバックのための書込所有権を保有しているキャッシュユニット１８−１をオーナーという。
【０３１５】
このような図３７のプロセッサモジュール１０−１におけるキャッシュ状態で、オーナーとして書込所有権を保有しているキャッシュユニット１８−１の最新データがプロセッサの動作によりデータ破棄等でリプレースされたとする。このリプレースに伴い、スヌープバス２２にはリプレースコマンドＰ−ＲＰが発生する。また書込所有権を保有していたキャッシュユニット１８−１は無効状態ＩＮＶに遷移する。
【０３１６】
一方、最新データを保有しているが書込所有権を保有していないキャッシュユニット１８−４は、スヌープバス２２に表われたリプレースコマンドＰ−ＲＰに基づき、書込所有権の委譲を受けてオーナーとなり、シェアードダーティ状態ＥＸ＆Ｄに遷移する。このため、メモリユニット１８−１で最新データのリプレースが行われても、書込所有権は別のキャッシュユニット１８−４に移り、最新データのローカルストレージ２８に対するコピーバックはこの時点では行われない。
【０３１７】
書込所有権が移った後にキャッシュユニット１８−４で同様なプロセッサ動作によるリプレースが起きると、この場合には他のメモリユニットに書込所有権を移すことができないことから、ローカルストレージ２８に対する最新データのコピーバックが行われる。
【０３１８】
またキャッシュユニット１８−１からキャッシュユニット１８−４に書込所有権を委譲した際に、メモリ管理ユニット２６にあっては、書込所有権の委譲の対象となったデータについてダーティ状態Ｄを保有しているが、書込所有権がキャッシュユニット１８−１，１８−４間で行われても、このダーティ状態はそのまま維持する。
【０３１９】
メモリ管理ユニット２６のダーティ状態は、最新データをもつキャッシュラインが別のプロセッサモジュールに移って初めて移動することになる。またローカルストレージ２８に対する最新データのコピーバックが行われると、ダーティ状態Ｄはクリーン状態Ｃに遷移する。
【０３２０】
図３７は、４つのキャッシュユニット１８−１〜１８−４の内の２つにローカルストレージ２８の最新データが保有されている場合を例にとっているが、３つまたは４つのキャッシュユニットに最新データが保有されている場合には、書込所有権を委譲するキャッシュユニットが複数となるため、この場合には例えば図３８に示す予め定めた順番に従った書込所有権の委譲が行われる。
【０３２１】
図３８は、キャッシュユニット１８−１〜１８−４の識別番号を＃０〜＃３として表わし、書込所有権を保有してリプレースしたキャッシュユニットをインデックスとして残りの３つのキャッシュユニットに対する書込所有権を移す順番を示している。
【０３２２】
例えばキャッシュユニット＃０が書込所有権を有し、他のキャッシュユニット＃１〜＃３の３つが最新データを保有していた場合には、キャッシュユニット＃０のリプレースが起きると書込所有権を移す優先度は＃１，＃２，＃３の順番に優先度が決まっている。このため、最も優先度の高いキャッシュユニット＃１に書込所有権を委譲する。そして次はキャッシュユニット＃２、そして最後はキャッシュユニット＃３となる。勿論、書込所有権を移すキャッシュユニットの順番は図３８のユニット識別番号以外にも適宜に定めることができる。
【０３２３】
６．システム共通バス
（１）バス構成
図３９は、図３の本発明によるキャッシュコヒーレンス装置を基幹としたサブシステムの構成図である。図３９において、サブシステム５００−１は基本システム５０１として例えば５つのプロセッサモジュール１０−１〜１０−５を、第２共有バスとしてのシステムバス１２により接続している。システムバス１２にはバス調停を行うバスアービタ５０２が設けられる。
【０３２４】
このような基本システム５０１に対し、例えばプロセッサモジュール５１０−１〜５１０−３の３台をバスアービタ５０３を備えたシステムバス１２−１０に接続した拡張システム５０６を接続している。基本システム５０１に対し拡張システム５０６は、同じ構成のバスアービタ及びプロセッサモジュールを使用している。更に基本システム５０１のシステムバス１２に対しては、異種バス拡張ユニット５４０を介して異種システム５０５を接続している。異種システム５０５はシステムバス５４２により適宜の処理ユニット５４４−１〜５４４−３を接続している。異種サブシステム５０５は、本発明によるキャッシュコヒーレンス装置を実現する基本システム５０１，拡張システム５０６とは全く異なったシステムであり、例えば外部記憶装置に対するＩ／Ｏシステムを構成している。
【０３２５】
このようなサブシステム５００−１に対しては、同じ構成をもつ別のサブシステム５００−２を拡張することができる。サブシステム５００−１は、サブシステム間接続ユニット５１２により拡張したサブシステム５００−２と接続することができる。サブシステム５００−２側もサブシステム５００−１側と同様、サブシステム間接続ユニットを介して自己のシステムバスと接続している。
【０３２６】
ここで基本ユニット５０１のシステムバス１２に対しては、最大で例えば１６台のモジュールもしくはユニットを接続することができる。この実施形態では、システムバスに５台のプロセッサモジュール１０−１〜１０−５、サブシステム間接続ユニット５１２、異種バス拡張ユニット５４０及びバスアービタ５０２の８台を接続している。
【０３２７】
システムバス１２に接続可能なモジュールもしくはユニットに対しては、ユニットＩＤ＃０〜＃１５が割り当てられる。例えばプロセッサモジュール１０−１〜１０−５にはユニットＩＤ（ＵＩＤ）＃０〜＃４が割り当てられ、サブシステム間接続ユニット５１２にはユニットＩＤ＃６が割り当てられ、異種バス拡張ユニット５１０にはユニットＩＤ＃８が割り当てられ、更にバスアービタ５０２にはユニットＩＤ＃１６が割り当てられている。
【０３２８】
残りのユニットＩＤは空きとなっている。なおバス拡張ユニット５０４は単なるシステムバス１２間のインタフェースであり、ユニットＩＤの指定は不要である。
【０３２９】
バス拡張ユニット５０４を介して接続した拡張システム５０６のシステムバス１２−１０に接続しているバスアービタ５０２及びプロセッサモジュール５１０−１〜５１０−３についても、システムバス１２−１０に固有な１６個のユニットＩＤが適宜に割り当てられている。更に異種サブシステム５０５については、基本システム５０１や拡張システム５０６とは全く異なった異種システム固有のユニットＩＤ＃Ａ，＃Ｂ，＃Ｃが割り当てられている。
【０３３０】
図４０は、図３９の基本システム５０１に設けているシステムバス１２の信号線の構成である。図４０４０において、プロセッサモジュール１２−１〜１２−５とバスアービタ５０２の間は、基本的にはバスデータ線５０７とタグ制御線５０９で構成される。
【０３３１】
バスデータ線５０７には共通データバス線５１４とデータパリティ線５１６が含まれる。共通データバス線５１４は例えば１２８回線で構成され、１バイトを８ビットとすると１６バイトのビットデータを並列転送することができる。データパリティ線５１６は１６回線であり、１バイトのデータパリティを転送する。
【０３３２】
タグ制御線は、バスリクエスト線５２０、緊急バスリクエスト線５２２、バスグラント線５２４、バスＩＤ線５２６、ユニットＩＤ線５２８、ホルト線５３０、マスタ権切替線５３２、インストール線５３４、ディスコネクト通知線５３６及びクロック線５３８で構成される。
【０３３３】
このような図４０のデータバス１２の構成を更に詳細に説明すると次のようになる。まず共通データバス線５１４及びデータパリティ線５１６は、全てのプロセッサモジュール１２−１〜１２−５とバスアービタ５０２に共通に接続され、データ１２８ビット（１６バイト），パリティ１６ビット（１バイト）の並列伝送を双方向に行ってデータを授受する。
【０３３４】
共通タグバス線５１８は４回線で構成され、全てのプロセッサモジュール１２−１〜１２−５とバスアービタ５０２に共通接続される。この共通タグバス線５１８の信号を参照することにより、そのときのバスサイクルの共通データバス線５１４上のデータの種類を知ることができる。共通タグバス線５１８で示される共通データバス線１２８上のデータの種類は図４１のようになる。
【０３３５】
図４１において、タグバスコード（ＴＢコード）は、３ビットのコードにより共通データバス線５１４の各バスクロックサイクルにおける動作を指定している。この共通タグバス線５１８の信号状態は、プロセッサモジュール１２−１〜１２−５における送信元となるバスマスタ及び宛先となるバススレーブ、更にバスアービタ５０２によって参照され、後の説明で明らかにするバスクラント（使用許可）の切替え、バスサイクルの切替え、及びデータ受信の制御を行う。
【０３３６】
図４１のタグバスコード０番は、コマンド終結とバス使用権の継続を意味する。タグバスコード１番はコマンド終結とバス使用権の開放を意味する。タグバスコード２番はコマンドの継続を意味する。タグバスコード３番はリトライ（無効化）とバス使用権の開放を意味する。タグバスコード４番はシングルワードコマンドとバス使用権の継続を意味する。タグバスコード５番はシングルワードコマンドとバス使用権の開放を意味する。タグバスコード６番はマルチワードコマンドの開始、必要ならばバス使用権の継続を意味する。タグバスコード７番はアイドルサイクルを意味する。
【０３３７】
ここでシングルワードコマンドとは、１バスクロックサイクルでパケット転送を終了するコマンドである。これに対しマルチワードコマンドとは、複数のバスクロックサイクルでのパケット転送を必要とするコマンドである。またバス使用権の開放とは、これを示すタグバスコードのバスサイクルでバス使用権を放棄し、他のバス使用要求者にバスを開放することを示す。
【０３３８】
またバス使用権の継続とは、タグバスコードが示すバスサイクルの次のサイクルも継続してバスを使用することを示す。更にリトライとは、タグバスコードが示すバスサイクル（バスコマンド）を強制終了してリトライすることを示す。このときバススレーブは、リトライ指示されたバスコマンドを破棄する。またリトライを実行するか否かはシステムのインプリメントに依存している。更にまたアイドルサイクルとは、如何なるユニットもバスを使用していないときの状態を示す。このときバススレーブ側は、アイドルサイクルとなるバスサイクルは無視することになる。
【０３３９】
次に図４０のバスリクエスト線５２０と緊急バスリクエスト線５２２を説明する。バスリクエスト線５２０及び緊急バスリクエスト線５２２はそれぞれ１５の信号線で構成され、プロセッサモジュール１２−１〜１２−５とバスアービタ５０２との間で１対１に接続され、プロセッサモジュール１２−１〜１２−５側からバスアービタ５０２に対しバス転送要求を行う。
【０３４０】
通常の転送要求については、バスリクエスト線５２０のみによる転送要求が行われる。これに対し異常検出等の緊急時にあっては、バスリクエスト線５２０と緊急バスリクエスト線５２２の両方を使用した転送要求が行われる。
【０３４１】
図４２は、バスリクエスト線５２０と緊急バスリクエスト線５２２の組合せによるバスアービタ５０２に対する要求事項を示す。まずバスリクエストＢＲＱと緊急バスリクエストＢＲＥが共にＬレベルの場合には、ユニットＩＤ＃Ｎのスロットのユニットが非動作状態にあることを示す。
【０３４２】
次の緊急バスリクエストＢＲＥのみがＨレベルとなった場合はバス要求なしであり、現在バスリクエストを行っていないユニットが緊急バスリクエストのみをアサートした場合である。
【０３４３】
３番目のバスリクエストＢＲＱのみがＨレベルとなるのは通常のバス要求であり、緊急バスリクエスト以外の通常のバス要求である。４番目のバスリクエストＢＲＱ及び緊急バスリクエストＢＲＥの両方がＨレベルとなるのは緊急バス要求であり、バススレーブがエラーを検出したときに、エラーリプライのためのバス獲得のためにこの要求を行う。
【０３４４】
再び図４０を参照するに、次のバスグラント線５２４はバスアービタ５０２と各プロセッサモジュール１２−１〜１２−５との間で１対１に接続され、バスアービタ５０２がバスグラント線５２４の信号をＨレベルとすることで、バスの使用許可を与えたことを示す。
【０３４５】
バスＩＤ線５２６は、プロセッサモジュール１２−１〜１２−５及びバスアービタ５０２が接続されているシステムバス１２の番号を設定している。同じシステムバスに接続されているユニットは全て同じ値が設定される。図３９のシステム構成にあっては、基本システム５０１のシステムバス１０２にバスＩＤ＃１が設定される。これに対し、バス拡張ユニット５０４を介して接続した拡張システム５０６のシステムバス１２−１０にはバスＩＤ＃２が設定される。
【０３４６】
次に図４０のユニットＩＤ線５２８を説明する。ユニットＩＤ線５２８は、バスアービタ５０２及びプロセッサモジュール１２−１〜１２−５のバス上での識別番号を設定する。図３９にあっては、プロセッサモジュール１０−１〜１０−５にユニットＩＤ＃１〜＃５を設定し、バスアービタ５０２にユニットＩＤ＃１６を設定している。
【０３４７】
このため、バスＩＤ線５２６とユニットＩＤ線５２８によるバスＩＤとユニットＩＤの組合せでシステム全体におけるプロセッサモジュール１２−１〜１２−５及びバスアービタ５０２の番号が一意に決まる。
【０３４８】
次に図４０のホルト線５３０とマスタ権切替線５３２を説明する。ホルト線５３０はバスアービタ５０２からプロセッサモジュール１２−１〜１２−５を含む全ユニットに例えば９通りに接続され、ホルト線５３０をＨレベルとすることでバスアービタ５０２が自分自身の故障を検出して停止状態にあることを示す。
【０３４９】
マスタ権切替線５３２はバスアービタ５−２からプロセッサモジュール１２−１〜１２−５を含む全ユニットに共通に接続され、ホルト線５３０と共にバスの調停処理に使用される。このホルト線５３０とマスタ権切替線５３２の信号の組合せによるバス調停処理は、図４３のようになる。
【０３５０】
図４３において、まずホルトＨＬＴがＨレベルでマスタ権切替ＭＦＣ(MasterForce Change) がＬレベルの状態は、バスアービタ５０２の非実装を意味する。次のホルトＨＬＴ及びマスタ権切替ＭＦＣの両方がＨレベルの場合には、バスアービタ５０２のホルト即ちバスアービタ５０２の自己診断等でエラーとなり、バスアービタ５０２が停止状態にあることを通知する。
【０３５１】
３番目のホルトＨＬＴ及びマスタ権切替ＭＦＣが共にＬレベルの場合はバスグラントＧＢＲの通常切替であり、バスアービタ５０２がバス要求を保持しているときにバスサイクルの終了を検出した場合のバスグラントＧＢＲを切り替えるタイミングを意味する。最後のホルトＨＬＴがＬレベルでバス権切替ＭＦＣがＨレベルの状態はバスグラントＧＢＲの強制切替えであり、バスアービタ５０２がバス要求を保持しており、且つそのバスが未使用の場合のバスグラント切替タイミングを与える。
【０３５２】
再び図４０を参照するに、インストール線５３４はプロセッサモジュール１２−１〜１２−５を含む各ユニットとバスアービタ５０２の間で１対１に接続され、Ｌレベルにセットすることでバスアービタ５０２に対しユニットが実装されていることを通知する。
【０３５３】
ディスコネクト通知線５３６は、プロセッサモジュール１２−１〜１２−５を含む各ユニットとバスアービタ５０２との間で１他１に接続される。ディスコネクト通知線５３６をＬレベルにすることで、バスアービタ５０２に対しユニットがシステムバス１２から切り離された状態にあることを通知する。
【０３５４】
（２）バスアビトレーション動作
次に図４０のバスデータ線５０７とタグ制御線５０９で構成されるシステムバス１２のバスアビトレーション動作を説明する。本発明のシステムバスのバスアビトレーション動作としては、ファーストモードとセーフティモードの２つのモードがある。また優先バスアビトレーションとしてバススレーブが優先バスアビトレーションを要求する場合と、バスアービタが優先バスアビトレーションを要求する場合とに分けられる。
【０３５５】
図４４は、ファーストモードによるアビトレーションのタイムチャートであり、横軸のバスクロックサイクルＴ１，Ｔ２，Ｔ３，・・・に対し縦軸方向にバスアービタ５０２の内部動作とシステムバス１２上のインタフェース信号に分けて示している。バスアービタ５０２の内部動作としては、バスリクエストのホールド動作である。システムバス１２上のインタフェース信号としては、バスリクエスト、バスグラント、タグバス及びデータバスを示している。
【０３５６】
まずサイクルＴ１で、ユニットＩＤ＃０，＃１からａに示すように、バスリクエスト信号の１サイクルのアサートが行われたとする。このときデータバスはアイドル状態にあることから、バスアービタ５０２は全てのバス要求元からのバスリクエストの立上がりを監視している。
【０３５７】
ａのようにユニットＩＤ＃０，＃１の２つのバスリクエスト信号がアサートされると、次のサイクルＴ２でｂに示すように全てのリクエスト要求をホールドする。ここで複数のバスリクエストがあった場合には、ユニットＩＤの番号の若い方が優先順位が高いものとする。
【０３５８】
このためバスアービタ５０２は、アイドル状態からの優先順位の高いユニットＩＤ＃０に対するバスグラント信号を、ｃに示すように、マスタ権切替信号と共にアサートする。続いてバスアービタ５０２は、次のサイクルＴ３で、バスの使用権を許可したユニットＩＤ＃０のバスリクエストのホールド要求を破棄すると同時に、他のホールド要求があればバスグラント信号を切り替える。
【０３５９】
このときユニットＩＤ＃１のホールド要求があることから、バスリクエスト信号をユニットＩＤ＃１に切り替える。このようにバスアービタ５０２からのバスグラント信号及びマスタ権切替信号により許可を受けたバスマスタとしてのユニットＩＤ＃０は、次のサイクルＴ３からデータ転送を開始する。このサイクルＴ３からはタグバス信号が図４１に示したタグバスコード０１０，１００または１１０（ＣＣ，ＳＣ＆Ｃ，ＭＣ＆Ｓ）のいずれかを示す。この場合には、複数のバスクロックサイクルでデータを送ることから、タグバスコードは１１０（ＭＣ＆Ｓ）のマルチワードコマンドの開始となる。
【０３６０】
このようなサイクルＴ３からのデータ転送中にバスシーケンスが、例えばサイクルＴ５に示すようにタグバスによって終了ＥＮＤを示すと、ｄのように、このときのバスグラント信号に従ってバスマスタがユニットＩＤ＃１に切り替わり、次のサイクルＴ６から、バスマスタとなったユニットＩＤ＃１からのデータ転送を開始する。ここでデータ転送終了を示すタグバスのタグバスコードは、図４１の００１，０１１，１０１（ＣＥ＆Ｅ，リトライ，ＳＣ＆Ｅ）のいずれかとなる。
【０３６１】
一方、バスアービタ５０２はサイクルＴ２で一旦保持したユニットＩＤ＃１からのバスリクエストの処理中に、例えばサイクルＴ３，Ｔ４のように他のユニットＩＤ＃０，＃２からのバスリクエストの立上がりを検出すると、それぞれのバスリクエストを別途記憶する。そしてサイクルＴ５のように、ホールド要求がないときのタグバスによる終了通知のタイミングで、ｅのように、ユニットＩＤ＃０，＃２の新たなバスリクエストをホールドする。
【０３６２】
更にサイクルＴ４のユニットＩＤ＃０からの２回目のバスリクエストはシングルコマンドであり、このためサイクルＴ８でユニットＩＤ＃１のデータ転送が終了すると、次のサイクルＴ９で、サイクルＴ３で出された下位のユニットＩＤ＃２のバスリクエストに先行してユニットＩＤ＃０のシングルコマンドのデータ転送を行う。このシングルコマンドのデータ転送は同時に転送終了を意味することから、ユニットＩＤ＃１がサイクルＴ６で行ったバスリクエストのホールドをサイクルＴ１０のｆのように行う。
【０３６３】
図４４のファーストモードのバスアビトレーションにあっては、バスアービタ５０２にバスリクエストがホールドされている限り、データバスに空きサイクルを生ずることなく連続的にバス転送が行われ、空きサイクルを発生しないことでバス転送速度を高めることができる。
【０３６４】
図４５は本発明のバスアビトレーションにおけるセーフティモードのタイムチャートである。このセーフティモードのタイムチャートにあっても、図４４のファーストモードと同様なユニットＩＤ＃０〜＃２によるバスリクエストが行われた場合を例にとっている。
【０３６５】
セーフティモードにあっては、バスアービタ５０２からのバスグラント信号とマスタ権切替信号のアサートによりバスマスタとしてのユニットＩＤが許可を受けた後に、１サイクルのアイドルサイクルを置いてデータ転送を開始するようにしている。
【０３６６】
即ち、サイクルＴ１におけるａのバスリクエストに対し、サイクルＴ２でｂのようにバスアービタ５０２のバスリクエストのホールドが行われ、優先順位の高いユニットＩＤ＃０に対するバスグラント信号と更にマスタ切替信号をｃのようにアサートすると、次のサイクルＴ３をアイドルサイクルとした後、サイクルＴ４よりデータ転送を開始する。
【０３６７】
このサイクルＴ３のアイドルサイクルはタグバスの過渡状態を安定化させるための期間であり、このアイドルサイクルにおいて全てのユニットはタグバスの値を無視する。サイクルＴ６でユニットＩＤ＃０のバスマスタによるデータ転送が終了して、そのときのユニットＩＤ＃１のバスグラント信号によるデータ転送についても、サイクルＴ７の１サイクルのアイドル期間を設けた後に、ｆのようにデータ転送を開始している。
【０３６８】
このようにバスアービタ５０２からデータ転送の許可を受けてデータ転送開始までの間に１サイクルのアイドル期間を置く以外の動作は、図４４のファーストモードと同じである。
【０３６９】
図４６は、バススレーブがデータ転送中にエラーを検出した場合のエラーリプライ動作のための優先バスアビトレーションのタイムチャートである。いまサイクルＴ１に示すように、ユニットＩＤ＃０〜＃２の３つのユニットからのバスリクエストがアイドル状態で同時に行われ、次のサイクルＴ２でバスアービタ５０２に全てのバスリクエストがホールドされると、優先順位の最も高いユニットＩＤ＃０に対しバスアービタ５０２よりバスグラント信号が出力される。
【０３７０】
同時にマスタ権切替信号もアサートされることで、サイクルＴ３よりバスマスタとなったユニットＩＤ＃０からバススレーブとしての例えばユニットＩＤ＃３に対しデータ転送が開始される。このデータ転送中のサイクルＴ４でバススレーブとなるユニットＩＤ＃３でエラーを検出したとすると、バスアービタ５０２に対しユニットＩＤ＃３からバスリクエスト信号及び緊急バスリクエスト信号の両方がａのように出力される。
【０３７１】
サイクルＴ６のバスリクエスト信号及び緊急バスリクエスト信号を受けたバスアービタ５０２は、バスリクエストを最優先でホールドすると同時に、ｂのように、バスを早期に切り替えるためにバスグラントを、エラー検出を行ったユニットＩＤ＃３に切り替える。このためサイクルＴ８でデータ転送が終了すると、このときバスグラント信号が有効となっているエラー検出を行ったバススレーブとしてのユニットＩＤ＃３をバスマスタに切り替え、サイクルＴ９で、ｃのように、エラーを検出したバスマスタのユニットＩＤ＃３からエラーリプライを行わせる。
【０３７２】
このときバスアービタ５０２内の最優先のホールド要求は破棄され、次のサイクルＴ１０からは通常のアビトレーションを続行する。ここで、バススレーブ側で検出するエラーには物理バッファフル等のブロック検出も含まれている。このようにバス転送中にバススレーブ側でエラー検出が行われると、次のバス転送に切り替える前に強制的にエラー検出を行ったバススレーブがバスマスタに切り替わってエラーリプライを行うことができ、バス転送中のエラーを迅速に検出してリトライ等の対応処置をとることができる。
【０３７３】
図４７は、バススレーブ側が確定する前のバス転送中に起きたエラーをバスアービタ５０２で検出した場合のエラーリプライのための優先バスアビトレーションのタイムチャートである。即ち本発明のバス転送にあっては、スプリット型のパケット転送を採用しており、パケットの第１ワードとしてコマンドワードを転送するため、コマンドワードの宛先フィールドの解読が終了しないとバススレーブが確定しない。
【０３７４】
このバススレーブが確定するまではバスアービタ５０２でバス転送のエラーを監視し、エラーを検出するとスレーブの代わりにバスアービタ５０２がエラーリプライを行うようになる。
【０３７５】
図４７にあっては、サイクルＴ１のユニットＴ１のユニットＩＤ＃０〜＃２からのバスリクエストがあると、サイクルＴ２で全てバスアービタ５０２がホールドする。そして優先順位の最も高いユニットＩＤ＃０について、バスグラント信号を有効とすると共にマスタ権切替信号をアサートし、次のサイクルＴ３からデータ転送を開始する。
【０３７６】
このサイクルＴ２において、バスアービタ５０２はａのように、バス使用許可を与えたバスマスタを示すユニットＩＤ＃０のバスマスタフラグをもっており、このバスマスタフラグをユニットＩＤ＃０のサイクルＴ３〜Ｔ８に亘るバスサイクル期間中ホールドしておく。
【０３７７】
バスマスタであるユニットＩＤ＃０からのデータ転送中のサイクルＴ５で、ｂのようにアービタ５０２がエラーを検出した場合、例えばパケットヘッダのパリティエラーを検出した場合、そのエラー内容を保持すると同時にバスアービタ５０２の内部に自分自身の緊急バス要求フラグをｃのようにセットする。尚、エラー検出が行われたサイクルＴ５は、バスマスタとしてのユニットＩＤ＃０１が、連続した複数のバスコマンドを転送中にエラーを検出した例である。
【０３７８】
続いてバスアービタ５０２は、自分自身のセットした緊急要求バスフラグｃにより、現在ホールドしている他のバスリクエストをマスクし、ホールド中のバスリクエストについてバスグラントをアサートしないようにする。そしてサイクルＴ８でバスマスタをユニットＩＤ＃０としたデータ転送を検出すると、このバスマスタ切替タイミングでバスアービタ５０２自身がバスマスタとなって、ｄのようにサイクルＴ９でエラーリプライを転送する。
【０３７９】
即ち、バス上には現われないバスアービタ５０２の内部でのアビトレーションにより、バスアービタ５０２自身がバスマスタとなってエラーリプライを行うことになる。このようなバスアービタ５０２のエラーリプライが済むと、同時にバスアービタ５０２内でセットした緊急バス要求フラグ及びバスマスタフラグが破棄され、次のバスマスタとしてのユニットＩＤ＃１への切替えがバスグラントにより行われ、次のサイクルＴ１０から通常のアビトレーションを実行する。
【０３８０】
（３）バス転送シーケンス
次に図４０のシステムバス１２上におけるバスコマンド及びデータの転送シーケンスを説明する。図４８はユニット＃１からユニット＃２にメモリの読出要求を行うときの転送シーケンスである。ここで読出要求元のユニット＃１をソースユニットとし、読出要求先のユニット＃２を宛先ユニット（ディストネーションユニット）とする。
【０３８１】
まず要求元のユニット＃１は、コマンド内容、要求元、要求先、転送バイト数及びアクセスアドレスを指定したパケットヘッダを、バスコマンドとして送信する。このパケットヘッダはバスコマンドの第１ワードを構成する。具体的には、ユニット＃１はパケットヘッダのコマンドフィールドにメモリリードを指定し、ソースフィールドに要求元となる自分自身のユニットＩＤ＃１を指定し、宛先フィールドに要求先のユニットＩＤ＃２を指定する。
【０３８２】
更に転送バイト数を示すサイドのフィールドに１６バイトを指定し、更にアドレスフィールドにアクセスアドレスを指定したパケットヘッダを作成して送信する。本発明のバス転送にあっては、パケットヘッダとして送信されるバスコマンドの第１ワードには、要求元を示すソースフィールド、要求先を示す宛先フィールドに加え、第２の要求先を示す第２宛先フィールドが設けられている。
【０３８３】
ここで、通常使用される宛先フィールドは、以下、第１宛先フィールドという。尚、第１宛先フィールドは、第２宛先フィールドの指定がない場合には単に宛先フィールドという場合もある。このパケットヘッダとして送出されるバスコマンドの第１ワードのソースフィールド、第１宛先フィールド及び第２宛先フィールドをもつバスコマンドの詳細は、後の説明で明らかにされる。
【０３８４】
図４８のメモリリードの転送シーケンスにあっては、宛先は１つであることから、ユニット＃１から送出されるパケットヘッダは第１宛先フィールドに読出要求先ユニットＩＤ＃２を指定しているだけである。システムバスはユニット＃１からのパケットヘッダの送信が終了すると開放され、次に割り当てられたユニットにバス使用権が移る。
【０３８５】
読出要求先となるユニット＃２にあっては、システムバス上の転送パケットを受信してその宛先フィールドのＩＤを識別しており、自分自身が指定されたパケットであればそれを受信し、受信パケットで指定された処理即ちユニット＃１からのパケットヘッダで指定されたメモリのリード処理を開始する。ユニット＃２において、要求されたリードデータが準備できたならば、ｂに示すリプライバスコマンドとデータを作成して返送する。
【０３８６】
このリプライバスコマンドの第１ワードは、ソースフィールドに自分自身のユニットＩＤ＃２を指定し、宛先フィールドに要求元のユニットＩＤ＃１を指定し、コマンドフィールドはリプライコマンドであることを指定し、更に必要に応じたステータス情報を付加して送出する。リプライバスコマンドのパケットヘッダである第１ワードの送出が済むと、続けて指定バイト数１６バイト分のデータを返送する。この実施例において、データバス幅は１６バイトであることから、２ワードのリプライバスコマンドは２バスサイクルで転送を終了する。
【０３８７】
図４９は、本発明のシステムバスにおけるメモリライトの転送シーケンスである。まず書込要求元のユニット＃１は、書込要求先となるユニット＃２に対しバスコマンドの第１ワードとなるパケットヘッダを作成して転送し、パケットヘッダに続いて例えば３２バイトデータを書き込む場合には、１６バイト単位に分けて２ワードのデータパケットを転送する。
【０３８８】
第１ワード目のパケットヘッダには、ソースフィールドを自分自身のユニットＩＤ＃１とし、宛先フィールドを書込相手先のユニットＩＤ＃２とし、コマンドフィールドにメモリライトを指定し、更にアドレスフィールドに３２バイトアドレスを指定して、バスに送出する。
【０３８９】
書込要求先のユニット＃２にあっては、宛先フィールドで自分自身のユニットＩＤ＃２を指定したパケットであればそのパケットを受信し、コマンドフィールドで指定された書込処理を開始する。書込処理が終了すると、ｂのように、書込要求元のユニット＃１に対するリプライバスコマンドを作成して処理のステータスを返送する。
【０３９０】
即ち、リプライバスコマンドはソースフィールドを自分自身のユニットＩＤ＃２、宛先フィールドを書込要求元のユニットＩＤ＃１、コマンドフィールドをリプライとし、更にステータスフィールドに例えば書込正常を示すステータスをセットして返送するようになる。
【０３９１】
図５０は、システムバスに接続している複数のユニットを同時に指定してデータを転送するブロードキャストの転送シーケンスである。この例では、ユニット＃１がキャッシュコヒーレントのためのキャッシュインバリデートのバスコマンドを、ユニット＃２，＃３，＃４にブロードキャストコマンドとして転送した場合である。
【０３９２】
まずキャッシュインバリデートの要求元のユニット＃１は、ブロードキャストバスコマンドのパケットヘッダにつき、ソースフィールドに要求元のユットＩＤ＃１を指定し、ブロードキャストフィールドに要求先となるユニット＃２，＃３，＃４の３つを指定する。更にコマンドフィールドにキャッシュインバリデートを指定し、更にアクセスアドレスを指定して送出する。
【０３９３】
キャッシュインバリデートの要求先となるユニット＃２，＃３，＃４のそれぞれは、要求元のユニット＃１からのブロードキャストバスコマンドを受信し、ブロードキャストフィールドに自己の指定があればそれを受信し、指定されたキャッシュインバリデートの処理を開始する。キャッシュインバリデート処理が完了すると、完了した順番に要求元のユニット＃１に対しリプライバスコマンドを送出する。
【０３９４】
この例では、ユニット＃２，＃４，＃３の順番にキャッシュインバリデート処理を終了してリプライバスコマンドを返送している。例えば最初のユニット＃２にあっては、ソースフィールドを自分自身のユニットＩＤ＃２とし、宛先フィールドを要求元のユニットＩＤ＃１とし、コマンドフィールドでリプライを指定し、更にステータスフィールドにキャッシュインバリデートの処理結果をセットして返送する。ユニット＃４，＃３についても同様である。
【０３９５】
要求元のユニット＃１は全ての要求先のユニット＃２，＃３，＃４からのリプライバスコマンドを受領し、そのステータス情報からキャッシュインバリデートの成功を認識すると、次の処理に移行する。図５１は、図３９において基本システム５０１のユニットから拡張システム５０６のユニットとの間でバス転送を行う場合の転送シーケンスである。図５１にあっては、基本システムにおけるシステムバス１のユニット＃１からバス拡張ユニット５０４を介して拡張システムのシステムバス＃２のユニット＃３にリード要求を行った場合の転送シーケンスである。
【０３９６】
まずシステムバス＃１のユニット＃１は、ａのように、システムバス＃２のユニット＃３を要求先とするバスコマンドを作成して送出する。このユニット＃１からのバスコマンドは、ソーススフィールドに要求元のシステムバスを示すバスＩＤ＃１とユニット＃１を示すユニットＩＤ＃１を指定している。また宛先フィールドには相手先のシステムバスを示すバスＩＤ＃２と相手先のユニットを示すユニットＩＤ＃３を指定している。
【０３９７】
これ以外の点は、同じシステムバス上のバスコマンドと同様、コマンドフィールドにメモリリードを指定し、更に転送バイト数を指定して送信する。バス拡張ユニット５０４は、ユニット＃１からのバスコマンドを受信し、このバスコマンドの宛先フィールドのバスＩＤ＃２が、自分自身が接続拡張しているバスであることを認識すると、そのバスコマンドを受理し、システムバス＃２に対し同じバスコマンドをｂのように発行する。
【０３９８】
システムバス＃２のユニット＃３にあっては、宛先フィールドのユニットＩＤが自己のユニットＩＤ＃３であることを認識すると、そのバスコマンドを受信してリード処理を行い、リードデータが準備できたならば、ｃのように、コマンドを第１ワード、データを第２ワードとするリプライバスコマンドを送信する。
【０３９９】
このリプライバスコマンドについても、ソースフィールドにシステムバスのＩＤ＃２と自分自身のユニットＩＤ＃３を指定し、宛先フィールドについては別のシステムバスのバスＩＤ＃１とユニットＩＤ＃１を指定し、更にコマンドフィールドにリプライを指定し、更にリード結果のステータスを付けて送信する。リプライバスコマンドの１ワード目の送信が済むと、次の２ワード目の１６バイトデータのパケットを送信する。
【０４００】
バス拡張ユニット５０４はｃのリプライコマンドを受信し、その宛先フィールドのバスＩＤ＃１から自分自身が接続拡張しているシステムバス＃１であることを認識すると、同じリプライコマンドをシステムバス＃１に転送する。システムバス＃１のユニット＃１は、このリプライコマンドから自分自身の宛先ユニットＩＤ＃１を認識するとリプライバスコマンドを受信し、次の２ワード目の１６バイトのリードデータを受信して処理を終了する。
【０４０１】
図５２は、図３９におけるサブシステム５００−１とサブシステム５００−２の間のサブシステム間接続ユニット５１２を経由したバス転送のシーケンスである。
【０４０２】
図５２にあっては、サブシステム＃１のユニット＃１から別のサブシステム＃２のユニット＃３にリード要求を行った場合である。まず要求元となるサブシステム＃１のユニット＃１は、ａのように、リード要求のためのバスコマンドを送出する。このバスコマンドはパケットヘッダを２つ使用した２ワードのバスコマンドで構成される。
【０４０３】
まずバスコマンドの第１ワード目には、拡張サブシステム＃２のアクセスを指定するための識別子、即ちサブシステム拡張識別子ＥＸの指定を行う。続いてソースフィールドにサブシステム＃１のバスＩＤ＃１とユニットＩＤ＃１をセットし、サブシステム＃２に対するサブシステム間接続ユニット５１２のユニットＩＤ＃６を宛先フィールドで指定する。
【０４０４】
更にコマンドフィールドにはメモリリードを指定し、アドレスフィールドにはアクセスアドレスを指定し、更に図示しないサイズフィールドに転送バイト数を指定する。次の２ワード目はシステムバス拡張識別子ＥＸの指定で付加された拡張バスコマンドであり、ソースフィールドに要求元のサブシステムＩＤ＃１、バスＩＤ＃１及びユニットＩＤ＃１が指定される。
【０４０５】
また宛先フィールドには、要求先のサブシステムＩＤ＃２、要求先のバスＩＤ＃２及び要求先のユニットＩＤ＃３が指定される。この２ワードとなるバスコマンドがシステムバスに送出されると、サブシステム間接続ユニット５１２において、第１ワード目の宛先フィールドのユニットＩＤ＃６を認識し、バスコマンドの第１ワード及び第２ワードを受信する。
【０４０６】
そしてサブシステム＃２側に設けているサブシステム間接続ユニット５１３に対し、同じバスコマンドをそのまま転送する。この転送制御はバスコマンドの第２ワード目の各ＩＤにより定まる。サブシステム＃１のサブシステム間接続ユニット５１２からのバスコマンドを受信したサブシステム＃２のサブシステム間接続ユニット５１３は、バスコマンドの第１ワード目のソースフィールドにおけるユニットＩＤを自分自身のユニットＩＤ＃７の指定に変更すると共に、宛先フィールドを第２ワードから解読したユニットＩＤ＃３の指定に変更してシステムバス＃２に送出する。バスコマンドの第２ワード目はそのまま送出する。
【０４０７】
システムバス＃２のユニット＃３は、サブシステム間接続ユニット５１３から送出されたバスコマンドの第１ワード目の受信で宛先フィールドのユニットＩＤが自分自身のユニットＩＤ＃３であることを認識すると、このコマンドを受信し、更に第２ワード目も受信する。そして第１ワード目のコマンドフィールドにより指定されたメモリリードを、指定されたアクセスアドレスについて行う。
【０４０８】
リードデータが準備できると、ｄに示すようにリプライバスコマンドを送出する。このリプライバスコマンドは、第１ワード目のソースフィールドにサブシステム識別子ＥＸをセットし、更にバスＩＤ＃２及びユニットＩＤ＃３をセットし、宛先フィールドはサブシステム間接続ユニット５１３のユニットＩＤ＃７を指定する。もちろんコマンドフィールドはリプライを指定し、図示しないステータスもセットする。
【０４０９】
リプライバスコマンドの第２ワード目は、ソースフィールドにサブシステムＩＤ＃２、システムバスＩＤ＃２及びユニットＩＤ＃３を指定し、宛先フィールドについては要求元となるサブシステムＩＤ＃１、システムバスＩＤ＃１及びユニットＩＤ＃１を指定する。そして第３ワード目がリードデータとなる１６バイトデータである。
【０４１０】
サブシステム間接続ユニット５１３は、ユニット＃３から送出されたリプライバスコマンドの第１ワード目の宛先フィールドから自己のユニットＩＤ＃７を認識すると、このバスコマンドを受信し、ｅのように、サブシステム間インタフェースを介してサブシステム＃１のサブシステム間接続ユニット５１２にリプライバスコマンドの第１ワード、第２ワード、第３ワードを転送する。
【０４１１】
サブシステム＃１のサブシステム間接続ユニット５１２は、リプライバスコマンドの第１ワードのソースフィールドのユニットＩＤを自分自身のユニットＩＤ＃６の指定に変更すると共に、宛先フィールドを要求元のユニットＩＤ＃１に変更してシステムバス＃１に送出する。
【０４１２】
このソースフィールド及び宛先フィールドのユニットＩＤの変更は、受信したリプライバスコマンドの第２ワード目を参照することで指定変更できる。リプライバスコマンドの第２ワード目は、そのまま送出する。第２ワード目の１６バイトデータについても、そのまま転送する。
【０４１３】
サブシステム＃１のユニット＃１は、リプライバスコマンドの第１ワードの宛先フィールドから自己のユニットＩＤを認識すると、このバスコマンドの受信を開始し、第３ワードまで受信して処理を終了する。
【０４１４】
図５３は、本発明のシステムバスのバス幅を８バイトバスとした場合の転送シーケンスである。図４０のシステムバスにあっては、共通データバス線５１４を１２８本とすることで１６バイト転送を行っているが、システムによっては半分の８バイトバスを使用する場合もある。このように８バイトシステムバスを使用した場合には、今まで説明した１６バイト幅の１クロックサイクルでのバス転送は２バスクロック分の転送を行うことになる。
【０４１５】
図５３は、８バイトバスを使用した場合のユニット＃１からユニット＃２にリード要求を行った場合の転送シーケンスである。ユニット＃１は、１６バイトのバスコマンドを８バイト単位の第１ワードと第２ワードに分けてシステムバスに送出する。８バイトバスコマンドの第１ワードには、ソースフィールド、宛先フィールド、コマンドフィールド及びサイドフィールドのそれぞれが設けられている。第２ワード目はアドレスフィールドである。
【０４１６】
このような８バイトの２ワードで構成されるバスコマンドがシステムバスに送出されると、要求先のユニット＃２はバスコマンドの第１ワード目の宛先ユニットＩＤ＃２を認識してバスコマンドを受信し、第２ワード目で指定されたアクセスアドレスについてメモリのリード動作を行う。リードデータが準備できると、ｂのようにリプライバスコマンドを送出する。リプライバスコマンドは、８バイトの第１ワードがパケットヘッダとなり、その後ろに８バイトずつ分けた合計１６バイトの２ワードを付加して送出する。
【０４１７】
図５４は、図３９のサブシステム５００−１における基本システム５０１と異種サブシステム５０５との間のバス転送シーケンスである。
【０４１８】
図５１において、基本システムのシステムバス＃１は異種バス拡張ユニット５４０を介して異種システムバス＃２に接続される。異種バス拡張ユニット５４０には、システムバス＃１側のコマンドを異種システムバス＃２側のコマンドに変換するコマンド変換機能が設けられている。
【０４１９】
いま、システムバス＃１のユニット＃１から異種システムバス＃２のユニット＃Ｂに対しアクセス要求を行うものとする。ユニット＃１はバスコマンドとして２ワードのパケットをパケットヘッダとして送出する。このバスコマンドの第１ワード目にはソースフィールドでバスＩＤ＃１及びユニットＩＤ＃１を指定し、また宛先フィールドにバスＩＤ＃１と異種バス拡張ユニット５４０のユニットＩＤ＃８を指定している。
【０４２０】
更にコマンドフィールドには、異種システムバス＃２のコマンド体系に変換するためのエミュレーション識別子ＥＭが指定されている。第２ワード目は異種システムバス＃２に適合したバスコマンドであり、ソースフィールドに異種システムバス＃２空間における異種バス拡張ユニット５４０のユニットｉｄ＃１が指定され、宛先フィールドには異種システムバス＃２のユニットＩＤｕｉｄ＃Ｂが指定されている。
【０４２１】
このシステムバス＃１のユニット＃１から送出された２ワードのバスコマンドは、異種バス拡張ユニット５４において、第１ワード目の宛先フィールドから自己のユニットＩＤ＃８を認識することで受信される。異種バス拡張ユニット５４０自身が接続拡張している異種システムバス＃２に対するエミュレーションコマンドであることを認識すると、コマンド依存フィールドとなる第２ワードのみを異種システムバス＃２にｂのように送出する。
【０４２２】
異種システムバス＃２のユニット＃Ｂは、その宛先フィールドのｕｉｄ＃Ｂから自己の宛先を認識して受信し、コマンドフィールドで指定された処理を実行し、処理が済むと、ｃに示すリプライコマンドを送出する。ユニット＃Ｂからのリプライコマンドは第１ワードのソースフィールドにユニットｉｄ＃Ｂを指定し、宛先フィールドに異種バス拡張ユニット５４０のユニットｉｄ＃１を指定し、更に２ワード目にステータスやその他必要なデータを転送する。
【０４２３】
異種バス拡張ユニット５４０は、ユニット＃Ｂからのリプライバスコマンドの第１ワード目から自分自身が接続しているシステムバス＃１に対するリプライコマンドであることを認識すると、このリプライコマンドを受理して、ｄのようにシステムバス＃１側に同様なリプライバスコマンドを送出する。
【０４２４】
このリプライバスコマンドの第１ワードはソースフィールドによりシステムバスＩＤ＃１と異種バス拡張ユニット５４０のユニットＩＤ＃８を指定し、宛先フィールドに要求元のシステムバスＩＤ＃１のユニットＩＤ＃１を指定している。第２ワード目及び第３ワード目は、異種システムバス＃２のユニット＃Ｂから送出されたバスコマンドがそのまま付加される。
【０４２５】
このような異種バス拡張ユニット５４０による簡単なバスコマンドの変換により、異なるバスシステムのユニット間でのデータ転送が可能となる。またエミュレーションバスコマンドで使用するそれぞれのバス上におけるユニットＩＤは、各々のバス上で一意であればよく、拡張された異種システムバス上のＩＤも異種バス拡張ユニット５４０を含めて一意となる。
【０４２６】
（５）バスコマンド
図５５は、本発明のキャッシュコヒーレンス装置のシステムバス１２のバス転送に使用するバスコマンドの基本的なコマンドフォーマットである。
【０４２７】
図５５において、１バイトを８ビットとすると、基本バスコマンドは１６バイト長で構成される。図５５にあっては、コマンドフィールドを４バイト（３２ビット）幅に分けて示している。
【０４２８】
基本バスコマンドは、先頭の基本バイト部分にソースフィールド５５２、第１宛先フィールド５６０及び第２宛先フィールド５６４を設けている。ソースフィールド５５２にはアクセス要求元の情報を指定する。第１宛先フィールド５６０には、ソースフィールドの要求元からアクセス要求を行う相手先の情報が指定される。第２宛先フィールド５６４には、ソースフィールド５５２と第１宛先フィールド５６０以外に、アクセスを行う別の相手先の情報が指定される。
【０４２９】
具体的には、例えば図１７に示した本発明のキャッシュコヒーレンス装置における読出モード２における処理動作を例にとると、次のようになる。図１７は、アクセス要求元であるローカルのプロセッサモジュール１０−１からアクセス対象となる主記憶を保持しているホームとなるプロセッサモジュール１０−２に対しリード要求を行ったが、主記憶２８に最新のデータが存在しておらず、リモートとなるプロセッサモジュール１０−３のキャッシュユニットに最新データが存在している場合の処理である。
【０４３０】
このようなリード処理にあって、まずローカルのプロセッサモジュール１０−１からホームのプロセッサモジュール１０−２にリード要求を行う場合には、図５５のソースフィールド５５２にローカルのユニットＩＤを指定し、第１宛先フィールド５６０はホームのユニットＩＤを指定する。このとき第２宛先フィールド５６４は使用しない。
【０４３１】
次にホームのプロセッサモジュール１０−２からリモートのプロセッサモジュール１０−３にリード要求を行う場合には、ソースフィールド５５２はホームＩＤとし、第１宛先フィールド５６０はリモートＩＤとし、更に第２宛先フィールド５６４に最初のアクセス要求元であるローカルＩＤを指定する。
【０４３２】
更に、リモートのプロセッサモジュール１０−３からリプライデータ２６０を送出する際には、図５５のソースフィールド５５２にリモートＩＤを指定し、第１宛先フィールド５６０は要求元であるホームＩＤを指定し、更に第２宛先フィールド５６４には最初の要求元であるローカルＩＤを指定する。具体的には、リモートのプロセッサモジュール１０−３で受信したバスコマンドと同じ情報をそのままセットしてリプライコマンドとしてのリプライデータを２６０を送出すればよい。
【０４３３】
このように本発明のキャッシュコヒーレンス装置でローカル、ホーム、リモートとなる３つのプロセッサモジュール間でのデータ転送を必要とするリードアクセスにおいて、図５５におけるソースフィールド５５２、第１宛先フィールド５６０及び第２宛先フィールド５６４のコマンドフォーマットが意味をもつことになる。
【０４３４】
図５５の基本バスコマンドにおいて、ソースフィールド５５２は実際にはソースバスＩＤフィールドとソースユニットＩＤフィールドに分けられている。ソースバスＩＤフィールドをもつことで、異なるシステムバス間でのデータ転送が可能となる。同様に、第１宛先フィールド５６０及び第２宛先フィールド５６４についても、宛先バスＩＤフィールドと宛先ユニットＩＤフィールドがそれぞれ設けられている。更に、第１宛先フィールド５６０と第２宛先フィールド５６４にはアクセスＩＤフィールドが設けられている。
【０４３５】
第１宛先フィールド５６０のアクセスＩＤフィールドは、スプリット転送でのバスアクセスの多重動作を行うための動作識別ＩＤ番号を指定するフィールドであり、コマンドあるいはコマンド群に対して有効である。このアクセスＩＤフィールドによる動作識別ＩＤ番号の用途は、複数のバスアクセスポートの同時動作や単一のＤＭＡポートのパイプライン動作等であり、１ユニット当たり１６種類までの多重動作が指定できる。
【０４３６】
第２宛先フィールド５６４の指定がない通常のバスコマンドにおいては、第１宛先フィールド５６０のＩＤフィールドにはソースユニットの任意の動作識別ＩＤ番号を指定すればよい。この場合、ソースユニットにおいてはアクセスユニットＩＤと同じ動作識別ＩＤ番号を記憶しており、リプライコマンドを受信した際に第１宛先フィールド５６０のアクセスＩＤフィールドとソースユニットに記憶している動作識別ＩＤ番号を比較し、一致したならば、自分自身が発行したバスコマンドに対するリプライコマンドであると判断する。
【０４３７】
一方、図１７の読出モード２におけるリード処理で、ホームのプロセッサモジュール１０−２からの第２バスコマンド及びリモートのプロセッサモジュール１０−３からのリプライコマンドのように、第２宛先フィールド５６４が指定されているときには、ソースユニット自身がバスコマンド送出の際に記憶している動作識別ＩＤ番号とリプライコマンドにおける第２宛先フィールド５６４のアクセスＩＤフィールドを比較し、一致したならば、自分自身が発行したバスコマンドに対するリプライが第１宛先フィールド５６０で指定されたリプライコマンドと判断する。
【０４３８】
具体的には、図１７においてローカルのプロセッサモジュール１０−１はホームのプロセッサモジュール１０−２に送出したバスコマンドに対するリプライコマンドを待っているが、実際にはホームのプロセッサモジュール１０−２からリモートのプロセッサモジュール１０−３に送出した第２バスコマンドに対するリプライコマンドがホームのプロセッサモジュール１０−２ではなくリモートのプロセッサモジュール１０−３から返送されてくる。
【０４３９】
このときに第２宛先フィールド５６４のアクセスＩＤフィールドをローカルのプロセッサモジュール１０−１でバスコマンド送出時に記憶した動作識別ＩＤ番号と比較して、一致すれば、これはホームのプロセッサモジュール１０−２に対する自分自身の送出したバスコマンドに対するリプライコマンドと見做してリプライコマンドを受信することになる。
【０４４０】
この結果、本来の要求元であるローカルのプロセッサモジュール１０−１は、リモートのプロセッサモジュール１０−３を意識することなく、ホームとなるプロセッサモジュール１０−２の主記憶２８には存在せずリモートのプロセッサモジュール１０−３のキャッシュユニットに存在する最新データを受領することができる。
【０４４１】
このときローカルのプロセッサモジュール１０−１にあっては、リプライデータの受信時間を監視するバスタイマとしてホームのプロセッサモジュール１０−２からのリプライを考慮した時間Ｔ１（第１時間）を設定しているが、ホームのプロセッサモジュール１０−２からリモートのプロセッサモジュール１０−３に対する第２のバスコマンドの送出によるリプライであることから、ローカルのプロセッサモジュール１０−１におけるバスタイムアウトの監視タイマの時間を、リモートのプロセッサモジュール１０−３を考慮した、より長い時間Ｔ２（第２時間）に変更して、バス転送のタイムアウトを監視する。
【０４４２】
このバスタイムアウトカウンタの時間変更は、ローカルのプロセッサモジュール１０−１でホームからリモートに送出されるリモートコマンド２５０の送出を監視して行えばよい。もちろん、図４０に示したタグ情報線５０９を利用した時間変更を行うことも可能である。
【０４４３】
更に図１７のリモートとなるプロセッサモジュール１０−３からのリプライデータ２６０であるリプライコマンドの返送については、リプライコマンドの契機となったホームとなるプロセッサモジュール１０−２からのリモートコマンド２５０であるバスコマンドの第１宛先フィールド５６０におけるアクセスＩＤフィールドの動作識別ＩＤ番号をそのまま指定することになる。
【０４４４】
図５５の基本バスコマンドは、先頭にサブシステム拡張指定フラグ５５０を設けている。このサブシステム拡張指定フラグ５５０は、図５２のように、異なったサブシステムのユニット間でデータ転送を行う場合に１にセットされ、これにより図５５の基本バスコマンドに加えて、図６２に示すサブシステム拡張用のバスコマンドの第２ワード目が作成される。このサブシステム拡張用の第２ワード目については後の説明で明らかにする。
【０４４５】
図５５の基本バスコマンドにおいて、ソースフィールド５５２と第１宛先フィールド５６０の境界部分にはブロードキャスト指定フラグ５５８が設けられ、ブロードキャストバスコマンドとして使用する際に１にセットされる。また第２宛先フィールド５６４の先頭部分には第２宛先指定フラグ５６２が設けられ、第２宛先フィールド５６４を使用する際に１にセットされる。
【０４４６】
基本バスコマンドの２行目となる５〜８バイト部分には、コマンドフィールド５６６、サイズフィールド５６８及びフラグフィールド５７０が設けられる。コマンドフィールド５６６には、リードコマンド、ライトコマンド、リプライコマンド、ブロードキャストコマンド等のコマンド識別コードが設定される。次のサイドフィールド５６８にはデータ転送サイズが設定される。
【０４４７】
リード系のバスコマンドではリプライコマンドで返送するデータサイズを指定し、ライト系のバスコマンドではバスコマンドに後続する書込データのデータサイズを指定する。次のフラグフィールド５７０には、コマンドの修飾フラグや属性フラグが必要に応じて設けられる。最後のコマンドパラメータフィールド５７２は、コマンドフィールド５６６のコマンド種別に依存した例えばアクセスアドレス等が指定される。
【０４４８】
図５６は、本発明で使用するブロードキャストバスコマンドのコマンドフォーマットである。ブロードキャストバスコマンドは、ソースフィールド５５２に続いて設けた第１宛先フィールド５６０について、図５５５５の基本バスコマンドにおける宛先ユニットＩＤの代わりに１６ビット幅のブロードキャスト宛先マップフィールド５７４を設けている。
【０４４９】
本発明のシステムバス１２は最大で１６ユニットを接続することができるので、ブロードキャスト宛先マップフィールド５７４はビット対応によりブロードキャストコマンドの相手先となるユニットをビット対応で指定することができる。プロードコースバスコマンドもブロードキャストバスコマンドと同じフォーマットをもつ。
【０４５０】
図５７は、本発明のシステムバスで使用される基本リプライ用及びエラーリプライ用のバスコマンドのコマンドフォーマットである。この基本リプライ及びエラーリプライ用のバスコマンドは、第２行目の部分にリプライタイプ５７４、エラーレベル５７６、エラータイプ５７８、エラーコード５８０の各フィールドを設けたことを特徴とする。それ以外の構造は図５５の基本バスコマンドと同じである。なお最後のコマンドパラメータ５７２のフィールドは使用していない。
【０４５１】
リプライタイプフィールド５７４には、リプライを要求したソースユニットが発行したバスコマンドのコマンドコードが指定される。またリプライコマンドの付加情報のフォーマットやデータの有無は、このリプライタイプフィールド５７４のコマンドコードによって決められる。
【０４５２】
次のエラーレベルフィールド５７６は、エラーリプライバスコマンドとして使用する際にエラーレベルが格納される。また次のエラータイプフィールド５７８には、エラー返信時のエラーの分類を示すエラータイプが通知される。更にエラーコードフィールド５８０には、エラー返信時にエラーの詳細な要因が通知される。
【０４５３】
図５９は図５７のエラータイプフィールド５７８の例であり、ソフトウェアエラー、システム構成エラー、ハードウェアエラー、バスエラーの分類情報がエラー検出に基づいてセットされる。図６０は図５７のエラーレベルフィールド５７６によるエラーの詳細分類をエラータイプと組み合わせて示している。
【０４５４】
ここで図６０R>０の「ｎｎｎ」は、エラーの種別によって異なる。また「ｘｘ」は、００でソース（ローカル）、０１で第１宛先（ホーム）、１０で第２宛先（リモート）、１１で第１宛先（ホーム）のミラーユニットを表わす。また「ｒ」は、０でライト、１でリードとなる。
【０４５５】
尚、図５６に示したブロードキャストバスコマンドは、図２３の書込モード１、図２４の書込モード２、図２５の書込モード３、図２６の書込モード４等におけるキャッシュインバリデードのためのバスコマンドとして使用される。
【０４５６】
図５８は、本発明のシステムバスで使用されるキャッシュステータスリプライバスコマンドのコマンドフォーマットである。このキャッシュステータスリプライコマンドにあっては、ソースフィールド５５２，第１宛先フィールド５６０に続いて、キャッシュサブラインステータスフィールド５８２−１を設け、更に２行目の最後の４ビットに同じくキャッシュサブラインステータスフィールド５８２−２を設けている。
【０４５７】
本発明のキャッシュコヒーレンス装置にあっては、６４バイトのキャッシュラインを１６バイト単位のキャッシュサブラインに分けている。そこで、キャッシュサブラインを＃０〜＃３で表わし、キャッシュサブラインステータス５８２−１，５８２−２の組合せで各サブラインを３ビットずつ割り当て、キャッシュバスコマンドに対するリプライバスコマンドにより、アクセス対象となったキャッシュサブラインの現在の状態を表示する。
【０４５８】
即ち、キャッシュサブラインステータスフィールド５８２−１にはサブラインＩＤ＃０〜＃３のビット０、ビット１の２ビットがそれぞれ割り当てられ、２行目の最後のキャッシュサブラインステータスフィールド５８２−２にビット２の第３ビット目が割り当てられている。このキャッシュサブラインステータスフィールド５８２−１，５８２−２によるキャッシュサブライン状態は、図６１に示すようになる。
【０４５９】
図６２は、図５５のサブシステムバス拡張識別フラグ５５０を１にセットした際にバスコマンドの第２ワードとして作成されるサブシステム拡張バスコマンドのコマンドフォーマットである。このサブシステム拡張バスコマンドは１行目にソースシステムフィールド５８６を設け、ソースユニットを設けているソースシステムＩＤ、ソースバスＩＤ及びソースユニットＩＤの各フィールドを指定する。
【０４６０】
２行目については、サブシステム第１宛先フィールド５５８が設けられ、宛先システムＩＤ、宛先バスＩＤ、宛先ユニットＩＤの各フィールドを設けている。続いてサブシステム第２宛先フィールド５９０が設けられ、同様に宛先システムＩＤ、宛先バスＩＤ、宛先ユニットＩＤの各フィールドを設けている。また第２宛先指定フラグ５９２もセットされる。このような図６２のサブシステム拡張バスコマンドを図５５の基本バスコマンドの第１ワードに対し第２ワードとして組み合わせることで、図５２に示した複数のサブシステムのユニット間でのデータ転送を行うことができる。
【０４６１】
このように本発明のキャッシュコヒーレンス装置で使用する第２共通バスとしてのシステムバス１２は、ディレクトリ方式に従った分散共有メモリ型のマルチプロセッサシステムにおいて、キャッシュコヒーレンスを効率良く実現するための共通バスを提供することができ、ディレクトリ方式の拡張性を損うことのない共通バスが提供できる。
【０４６２】
またシステムバス単位に構築されるサブシステムを複数結合した大規模なマルチプロセッサシステムへの拡張を考慮した信頼性の高い共通バスが提供できる。更に、異なったバスとの接続を考慮していることから、既存のバス資産の有効活用を可能とする共通バスが提供できる。
【０４６３】
７．第２ディレクトリメモリ
図６３は、本発明の他の実施形態であり、プロセッサモジュールのシステムバスに対するバス接続ユニットに第２ディレクトリメモリを設けたことを特徴とする。
【０４６４】
図６３は、プロセッモジュール１０−１がローカルとしてホームのプロセッサモジュール１０−２の主記憶２８に対しホームコマンド６００を発行して書込アクセスを行い、ホームからリモートとしてのプロセッサモジュール１０−３，１０−４にキャッシュインバリデートのリモートコマンド６０２を発行した場合を示している。
【０４６５】
プロセッサモジュール１０−１〜１０−４の各々は、メモモリ管理ユニット２６に対し分散主記憶としてのローカルストレージ２８とディレクトリメモリ３０を設けており、これは図３の実施形態と同じである。これに加え図６３の実施形態では、バス接続ユニット３２に第２ディレクトリメモリ３１を設けている。この第２ディレクトリメモリ３１に対しディレクトリメモリ３０を第１ディレクトリメモリと呼ぶ。
【０４６６】
第２ディレクトリメモリ３１は、自己のローカルストレージ２８に存在するキャッシュライン単位のデータにつき、そのデータがシスムテバス上で他のバスコマンドによりアクセス状態を登録している。この登録内容としては、例えば、リモートコマンドによるキャッシュインバリデート待ちがある。図６３のプロセッサモジュール１０−２は、ホームとしてプロセッサモジュール１０−３，１０−４にキャッシュインパリデータのリモートコマンド６０２を発行しており、コマンド応答を待っている。このときプロセッサモジュール１０−２の第２ディレクトリメモリ３１の該当するキャッシュラインについては、リモートからのキャッシュインバリデートの応答待ちが登録されている。
【０４６７】
この状態で、例えばプロセッサモジュール１０−３の２番目キャッシュユニット側から、同じキャッシュラインを対象にライトアクスセのホームコマンド６０８が発行されたとする。このホームコマンド６０２に対しバス接続ユニット３２は第２ディレクトリメモリ３１を参照してキャッシュインバリデートの完了待ちにあることをメモリ管理ユニット２６に送ることなく直ちに認識し、ビジー応答をリプライコマンドで返す。
【０４６８】
この場合、システムバス１２上でのリトライとすることは無駄になるので、アクセス元のキャッシュユニットまでビジーを通知し、リトライを行わせる。このように第２ディレクトリメモリ３１の参照でリモートコマンドによるアクセス不能な状態が判るので、メモリ管理ユニット２６側でアクセス不能を判断してビシーを応答する場合に比べ、処理を高速化できる。
【０４６９】
リモートのプロセッサモジュール１０−３，１０−４でキャッシュインバリデートが完了してリプライコマンドが帰されると、第２ディレクトリメモリ３１の登録は削除され、プロセッモジュール１０−３からのリトライによるリモートコマンド６０２が受け入れられる。
【０４７０】
図６４は、図６３のホームのキャッシュインバリデートの完了待ちの状態にあるホームとしてのプロセッサモジュール１０−２に対し、他のプロセッサモジュールからホームコマンド６０６が複数発行され、バス接続ユニット３２のバッファがフルとなった場合である。このバッファフルの状態で、プロセッサモジュール１０−３からリモートコマンド６０２が発行されたとすると、第２ディレクトリメモリ３１を参照することなく、直ちにバッファフルのビジー応答を返す。
【０４７１】
この場合、アクセス要求元のキャッシュユニットまでバッファフルのビジー応答を返すと、スヌープバス２２やキャッシュユニットがリトライ動作に忙殺されることから、システムバス１２上でのリモートコマンドのリトライとする。
【０４７２】
８．その他
図４のプロセッサエレメント１４−１に設けた２次キャッシュ制御モジュール３５は、２次キャッシュ３８のキャッシュデータをＬＲＵで管理しており、新たなキャッシュデータのオーナーで２次キャッシュ３８がオーバフローすると、キャッシュデータのＬＲＵ追出し処理が行われる。このＬＲＵ追い出し処理は、追い出し対象となったキャッシュラインが書込権を所有した排他的ダーティ状態、即ちオーナーであった場合には、メモリモジュール２５に対しスヌープバス２２を介してコピーバックコマンドを発行し、ホームとなるプロセッサモジュールのローカルストレージ２８に、追い出されたキャッシュデータを格納する。
【０４７３】
一方、書込所有権が存在した排他的ダーティ状態ＥＸ＆ＤのキャッシュラインのＬＲＵ追い出しの際に、他のスヌープバスを介して接続した他のキャッシュ上にシェアードモディファイ状態でキャッシュデータが存在する場合には、追い出されたキャッシュデータを消した後、他のキャッシュユニットにリプライコマンドＲＰを送って、シェアードモディファイ状態ＳＨ＆Ｍから排他的ダーティ状態ＥＸ＆Ｄに切り替えて書込所有権を移す。この場合には、ＬＲＵで追い出されたキャッシュデータのローカルストレージ２８へのオーナーは不要である。
【０４７４】
尚、上記の実施例は、１つのプロセッサモジュールに４つのプロセッサエレメントを設けた場合を例にとっているが、プロセッサモジュールには少なくとも１台のプロセッサエレメントが設けられればよい。また、プロセッサエレメントの数は必要に応じて適宜に設けることができる。更に、システムバスで接続されるプロセッサモジュールの実施例に限定されず、２以上であれば任意の数のプロセッサモジュールを接続できる。
【図面の簡単な説明】
【０４７５】
【図１】本発明の原理説明図
【図２】本発明のマルチプロセッサモジュール構成のブロック図
【図３】図２のプロセッサモジュールの内部構成のブロック図
【図４】図３のプロセッサモジュールの内部構成の詳細ブロック図
【図５】本発明のキャッシュラインの説明図
【図６】図３の空間識別ユニットの機能説明図
【図７】図４のメモリ管理ユニットのブロック図
【図８】ディレクトリエントリレジスタの説明図
【図９】シェアードマップビット対応レジスタの説明図
【図１０】プロセッサモジュール構成レジスタの説明図
【図１１】ディレクトリエントリレジスタ、シェアードマップビット対応レジスタ及びプロセッサモジュール構成レジスタの具体例の説明図
【図１２】ディレクトリエントリレジスタの具体例の説明図
【図１３】図４のスヌープバスに対するコマンド説明図
【図１４】図４のキャッシュユニットのキャッシュ状態の説明図
【図１５】図４のキャッシュユニットのキャッシュ遷移状態の説明図
【図１６】本発明の読出モード１における処理動作の説明図
【図１７】本発明の読出モード２における処理動作の説明図
【図１８】本発明の読出モード３における処理動作の説明図
【図１９】本発明のローカルプロセッサモジュールのリード処理のフローチャート
【図２０】本発明のホームプロセッサモジュールのリード処理のフローチャート
【図２１】本発明のリモートプロセッサモジュールのリード処理のフローチャート
【図２２】本発明のプロセッサエレメントのリード処理のフローチャート
【図２３】本発明の書込モード１における処理動作の説明図
【図２４】本発明の書込モード２における処理動作の説明図
【図２５】本発明の書込モード３における処理動作の説明図
【図２６】本発明の書込モード４における処理動作の説明図
【図２７】本発明の書込モード５における処理動作の説明図
【図２８】本発明の書込モード６における処理動作の説明図
【図２９】本発明の書込モード７における処理動作の説明図
【図３０】本発明のローカルプロセッサモジュールのライト処理のフローチャート
【図３１】本発明のホームプロセッサモジュールのライト処理のフローチャート
【図３２】本発明のリモートプロセッサモジュールのライト処理のフローチャート
【図３３】本発明のプロセッサのライト処理のフローチャート
【図３４】キャッシュユニットに対する内部コマンドと外部のリモートコマンドが競合してリトライの繰り返しとなる動作の説明図
【図３５】図２のリトライ繰り返しの具体例のタイムチャート
【図３６】リモートコマンドに対するリトライ指示を１回として優先的に受け付ける本発明の処理のタイムチャート
【図３７】プロセッサモジュールのキャッシュユニット間で行う書込所有権（オーナー）の委譲の説明図
【図３８】書込所有権を委譲する順番の説明図
【図３９】図３のキャッシュコヒーレンス装置を基幹に拡張したシステム構成の説明図
【図４０】図３９のシステムバスの線路構成の説明図
【図４１】図４０のタグバス線によるタグバスコードの説明図
【図４２】図４０のリクエトスト線と緊急リクエスト線の組合わせによる制御内容の説明図
【図４３】図４０のホルト線とマスタ権切替線の組合せによる制御内容の説明図
【図４４】図４０のシステムバスのファーストモードでのバスアビトレーションのタイムチャート
【図４５】図４０のシステムバスのセーフティモードでのバスアビトレーションのタイムチャート
【図４６】図４０のシステムバスのバススレーブでエラーを検出した際の優先バスアビトレーションのタイムチャート
【図４７】図４０のシステムバスのバスアービタでエラーを検出した際の優先バスアビトレーションのタイムチャート
【図４８】図３９のシステムバスのメモリリードの転送シーケンスのタイムチャート
【図４９】図３９のシステムバスのメモリライトの転送シーケンスのタイムチャート
【図５０】図３９のシステムバスのブロードキャスト／ブロードコールの転送シーケンスのタイムチャート
【図５１】図３９のシステムバス間の転送シーケンスのタイムチャート
【図５２】図３９のサブシステムバス間の転送シーケンスのタイムチャート
【図５３】図３９のシステムバスを８バイトバスとした場合の転送シーケンスのタイムチャート
【図５４】図３９のシステムバスと異種システムバス間の転送シーケンスのタイムチャート
【図５５】図３９のシステムバスの基本的なバスコマンドのフォーマット説明図
【図５６】図３９のシステムバスのブロードキャストバスコマンドのフォーマット説明図
【図５７】図３９のシステムバスの基本的なリプライ／エラーバスコマンドのフォーマット説明図
【図５８】図３９のシステムバスのキャッシュステータスバスコマンドのフォーマット説明図
【図５９】図５７のエラーバスコマンドで指定するエラータイプの説明図
【図６０】図５７のエラーバスコマンドで指定するエラーレベルをエラータイプと共に示した説明図
【図６１】図５８のキャッシュステータスバスコマンドで指定するキャッシュステータスの説明図
【図６２】図３９のサブシステムバス間のバス転送時に基本バスコマンドに付加して使用される拡張バスコマンドのフォーマット説明図
【図６３】バス接続ユニットに第２ディレクトリメモリを設けた実施形態のライトアクセス説明図
【図６４】図６３のキャッシュインバリデートの完了待ちでホームへのアクセス要求がバッファフルとなった場合のアクセス説明図
【図６５】従来のマルチプロセッサシステムのブロック図
【符号の説明】
【０４７６】
１０，１０−１〜１０−５：プロセッサモジュール（ＰＭ）
１２，１２−１，１２−２：システムバス（第１共通バス）
１４，１４−１〜１４−４：プロセッサエレメント（ＰＥ）
１６，１６−１〜１６−４：ＣＰＵ回路
１８，１８−１〜１８−４：キャッシュユニット（キャッシュ）
２０，２０−１〜２０−４：スヌープユニット
２２：スヌープバス（第１共通バス）
２４：プロトコル管理ユニット
２５：メモリモジュール
２６：メモリ管理ユニット
２８：ローカルストレージ（分割配置された主記憶）
３０：ディレクトリメモリ
３１：第２ディレクトリメモリ
３２：モジュール接続ユニット
３４：ＣＰＵ
３５：２次キャッシュ制御モジュール
３６：１次キャッシュ
３８：２次キャッシュ
４０：タグメモリ
４２，５２：スヌープ送受信ユニット
４４：スヌープバッファ
４６：コピーバックバッファ
４８：プロセッサアクセス制御ユニット
５０：空間制御ユニット
５４：ローカルアクセスバッファキュー
５６：ホームアクセスバッファキュー
５８：リモートアクセスバッファキュー
６２：バス受信ユニット
６４：バス送信ユニット
６６：メモリバス
６８−１〜６８−４：メモリアクセスコントローラ
７０−１〜７０−４：ＳＲＡＭ
７４：バスアービタ
７６：メモリバス制御ユニット
７８：ディレクトリ制御ユニット
８０：キャッシュ変換部
８１：ローカルステートマシン
８２：ホームステートマシン
８３：リモートステートマシン
８６：ＣＰＵ物理アドレス空間
８８：制御レジスタ空間
９０：ＲＯＭ空間
９４：３６ビット物理アドレス
９５：制御テーブル
９６：ホーム情報
９８：ユニットＩＤ
１００：キャッシュライン
１０２−１〜１０２−４：キャッシュサブライン（サブライン）
１０４：ディレクトリエントリレジスタ
１０６：シェアードマップビット対応レジスタ
１０８：プロセッサモジュール構成レジスタ
１２０，１２２，１２４，１２８：キャッシュステータス格納エリア
５００−１，５００−２：サブシスタム
５０１：基本システム
５０２，５０３：バスアービタ
５０４：バス拡張ユニット
５０５：異種システム
５０６：拡張システム
５０７：データバス線
５０９：タグ制御線
５１０−１〜５１０−３：プロセッサモジュール
５１２：サブシステム間接続ユニット
５１４：共通データバス線（ＤＢ）
５１６：データバリティ線（ＤＰ）
５１８：共通タグバス線（ＴＢ）
５２０：バスリクエスト線（ＢＲＱ）
５２２：緊急バスリクエスト線（ＢＲＥ）
５２４：バスグラント線（ＢＧＲ）
５２６：バスＩＤ線（ＢＩＤ）
５２８：ユニットＩＤ線（ＵＩＤ）
５３０：ホルト線（ＨＬＴ）
５３２：マスタ権切替線（ＭＦＣ：Master Force Change））
５３４：インストール線（ＩＮＳＴ）
５３６：ディスコネクト線（ＤＣＯＮ）
５３８：クロック線（ＣＬＫ）
５５０：システムバス拡張指定フラグ
５５２：ソースフィールド
５５８：ブロードキャスト指定フラグ
５６０：第１宛先フィールド
５６２：第２宛先指定フラグ
５６４：第２宛先フィールド
５６６：コマンドフィールド
５６８：サイズフィールド
５７０：フラグフィールド
５７２：コマンドパラメータフィールド
５７４：ブロードキャスト宛先マップフィールド
５７５：リプライタイプフィールド
５７６：エラーレベルフィールド
５７８：エラータイプフィールド
５８０：エラーコードフィールド
５８２−１，５８２−２：キャッシュサブライステータスフィールド
５８６：ソースシステムフィールド
５８８：サブシステム第１宛先フィールド
５９０：サブシステム第２宛先フィールド
５９２：第２宛先指定フラグ
【図１】
2006179033.tif 000003
【図２】
2006179033.tif 000004
【図３】
2006179033.tif 000005
【図４】
2006179033.tif 000006
【図５】
2006179033.tif 000007
【図６】
2006179033.tif 000008
【図７】
2006179033.tif 000009
【図８】
2006179033.tif 000010
【図９】
2006179033.tif 000011
【図１０】
2006179033.tif 000012
【図１１】
2006179033.tif 000013
【図１２】
2006179033.tif 000014
【図１３】
2006179033.tif 000015
【図１４】
2006179033.tif 000016
【図１５】
2006179033.tif 000017
【図１６】
2006179033.tif 000018
【図１７】
2006179033.tif 000019
【図１８】
2006179033.tif 000020
【図１９】
2006179033.tif 000021
【図２０】
2006179033.tif 000022
【図２１】
2006179033.tif 000023
【図２２】
2006179033.tif 000024
【図２３】
2006179033.tif 000025
【図２４】
2006179033.tif 000026
【図２５】
2006179033.tif 000027
【図２６】
2006179033.tif 000028
【図２７】
2006179033.tif 000029
【図２８】
2006179033.tif 000030
【図２９】
2006179033.tif 000031
【図３０】
2006179033.tif 000032
【図３１】
2006179033.tif 000033
【図３２】
2006179033.tif 000034
【図３３】
2006179033.tif 000035
【図３４】
2006179033.tif 000036
【図３５】
2006179033.tif 000037
【図３６】
2006179033.tif 000038
【図３７】
2006179033.tif 000039
【図３８】
2006179033.tif 000040
【図３９】
2006179033.tif 000041
【図４０】
2006179033.tif 000042
【図４１】
2006179033.tif 000043
【図４２】
2006179033.tif 000044
【図４３】
2006179033.tif 000045
【図４４】
2006179033.tif 000046
【図４５】
2006179033.tif 000047
【図４６】
2006179033.tif 000048
【図４７】
2006179033.tif 000049
【図４８】
2006179033.tif 000050
【図４９】
2006179033.tif 000051
【図５０】
2006179033.tif 000052
【図５１】
2006179033.tif 000053
【図５２】
2006179033.tif 000054
【図５３】
2006179033.tif 000055
【図５４】
2006179033.tif 000056
【図５５】
2006179033.tif 000057
【図５６】
2006179033.tif 000058
【図５７】
2006179033.tif 000059
【図５８】
2006179033.tif 000060
【図５９】
2006179033.tif 000061
【図６０】
2006179033.tif 000062
【図６１】
2006179033.tif 000063
【図６２】
2006179033.tif 000064
【図６３】
2006179033.tif 000065
【図６４】
2006179033.tif 000066
【図６５】
2006179033.tif 000067