(57)【要約】  【課題】プロセッサ数に関わらず、スケーラビリティに優れ、なおかつプロセッサ間通信にかかる処理時間を短縮することができるマルチプロセッサシステムを提供する。  【解決手段】送信側のプロセッサモジュールでは、プロセッサが通信バッファプールからバッファを確保して通信データをライトした後、バッファのアドレス情報をヘッダにライトする。受信側のプロセッサモジュールでは、キャッシュコントローラが、ヘッダが書き換えられたことを検出して、ヘッダに格納されたアドレス情報に対応するバッファに格納されている通信データをリードし、アドレス情報を新たなキャッシュタグに格納するとともに、通信データをキャッシュブロックに格納した後、プロセッサに割込みをかける。そして、割込みを受けたプロセッサが、キャッシュブロックに格納されている通信データをリードする。【選択図】  図１
2006185044.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも２つのプロセッサモジュールと、各々の前記プロセッサモジュールからアクセス可能な共有メモリとを備え、各々の前記プロセッサモジュール間で前記共有メモリを介してプロセッサ間通信を行うマルチプロセッサシステムであって、
各々の前記プロセッサモジュールは、プロセッサと、前記共有メモリに格納されたデータの一部を格納する複数のキャッシュブロックを含むキャッシュメモリと、各々の前記キャッシュブロックに対応して１つずつ設けられ、各々対応する前記キャッシュブロックを管理するための管理データを格納するキャッシュタグと、該キャッシュタグの管理データを使用して前記キャッシュメモリを管理するキャッシュコントローラとを備え、
各々の前記プロセッサモジュールのキャッシュコントローラは、他の前記プロセッサモジュールのプロセッサにより前記共有メモリのデータが書き換えられたかどうかを監視し、前記共有メモリのデータが書き換えられたことを検出すると、該書き換えられたデータが自分の前記プロセッサモジュールのキャッシュメモリに格納されている場合に、自分の前記プロセッサモジュールのキャッシュメモリに格納されているデータを前記書き換えられたデータに更新するスヌープ機能部と、自分の前記プロセッサモジュールのプロセッサに対して割込みを発生する割込み発生機能部とを備え、
前記共有メモリには、送信側の前記プロセッサモジュールから受信側の前記プロセッサモジュールに対して送信される通信データを格納するための複数のバッファを含む通信バッファプールと、各々の前記プロセッサモジュール間で送信用および受信用の１つずつが確保され、前記バッファのアドレス情報を格納するための複数のヘッダを含むヘッダ領域とが設けられ、
送信側の前記プロセッサモジュールから受信側の前記プロセッサモジュールに対して前記通信データを送信するに際し、
送信側の前記プロセッサモジュールでは、前記プロセッサが前記通信バッファプールからバッファを確保して、該確保したバッファに前記通信データをライトした後、該確保したバッファのアドレス情報を、送信側の前記プロセッサモジュールから受信側の前記プロセッサモジュールに対する送信用のヘッダにライトし、
受信側の前記プロセッサモジュールでは、前記キャッシュコントローラが、前記スヌープ機能部により、送信側の前記プロセッサモジュールから受信側の前記プロセッサモジュールに対する送信用のヘッダが書き換えられたことを検出すると、該書き換えられたヘッダに格納されているアドレス情報をリードし、該リードしたアドレス情報に対応するバッファに格納されている通信データをリードし、前記リードしたアドレス情報を新たな前記キャッシュタグに格納するとともに、前記リードした通信データを、前記アドレス情報を格納した新たな前記キャッシュタグに対応する前記キャッシュブロックに格納した後、前記割込み発生機能部により前記プロセッサに割込みをかけ、該割込みを受けたプロセッサが、前記アドレス情報を格納した新たな前記キャッシュタグに対応する前記キャッシュブロックに格納されている通信データをリードすることを特徴とするマルチプロセッサシステム。
【請求項２】
前記共有メモリのヘッダ領域には、送信用の前記プロセッサモジュールのプロセッサで動作する各々のソフトウェアプログラムと受信用のプロセッサモジュールのプロセッサで動作する各々のソフトウェアプログラムとの間で送信用および受信用のヘッダが１つずつ確保され、各々の前記ソフトウェアプログラム間でプロセッサ間通信が行われることを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項３】
各々の前記キャッシュタグは、前記管理データとして、データが該キャッシュタグに対応する前記キャッシュブロックに格納されている前記共有メモリのアドレス情報と、該キャッシュタグに対応する前記キャッシュブロックに格納されたデータの状態を表すステータス情報と、該キャッシュタグに対応する前記キャッシュブロックを常に確保するのか、しないのかを前記キャッシュコントローラに指示するフラグを格納する常駐＆更新割込スイッチと、前記アドレス情報を、該キャッシュタグに対応する前記キャッシュブロックにデータが格納されている前記共有メモリのアドレスとして扱うのか、前記通信データが格納されたバッファのアドレスが格納されているヘッダのアドレスとして使用するのかを前記キャッシュコントローラに指示するフラグを格納するアドレス参照スイッチとを含み、
前記キャッシュコントローラは、各々の前記キャッシュタグの前記常駐＆更新割込スイッチを参照して、該キャッシュタグに対応する前記キャッシュブロックを常に確保するのか、しないのかを判断するとともに、各々の前記キャッシュタグの前記アドレス参照スイッチを参照して、各々の前記キャッシュタグに格納されている前記アドレス情報を、該キャッシュタグに対応する前記キャッシュブロックにデータが格納されている前記共有メモリのアドレスとして扱うのか、前記通信データが格納されたバッファのアドレスが格納されているヘッダのアドレスとして使用するのかを判断することを特徴とする請求項１または２に記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサで構成されるマルチプロセッサシステムに関するものである。
【背景技術】
【０００２】
マルチプロセッサシステムでは、複数のプロセッサで各々ソフトウェアプログラムが動作しており、各々のプログラム間で互いに通信を行いたい場合がある。このため、マルチプロセッサシステムには、各々のプロセッサからアクセス（リード／ライト）することができる共有メモリが設けられており、この共有メモリを経由して相互にデータのやり取りが行われる。
【０００３】
例えば、プロセッサＡからプロセッサＢに対してデータを送信する場合、まず、送信側のプロセッサＡが共有メモリの所定のアドレスにデータをライトし、プロセッサＢに対して割込みをかける。受信側のプロセッサＢは、プロセッサＡから割込みを受けると、データがライトされた共有メモリのアドレスからデータをリードする。このようにして、プロセッサ間でデータのやり取りが行われる。
【０００４】
一方、各々のプロセッサは、その内部に、共有メモリよりも小容量ではあるが、高速なキャッシュメモリを備えている。共有メモリへのアクセスは時間がかかるため、共有メモリに格納されているデータの一部がキャッシュメモリに格納される。これにより、プロセッサが、共有メモリにアクセスしようとする時に、共有メモリではなくキャッシュメモリにアクセスすることで、そのアクセスタイムを短縮し、高速に動作することができる。
【０００５】
ところで、マルチプロセッサシステムでは、複数のプロセッサが、共有メモリに対してデータをライトする可能性がある。従って、自分以外の他のプロセッサが共有メモリの内容を書き換えた場合、書き換えられた部分の共有メモリの内容が自分のキャッシュメモリに格納されている時には、その内容を格納し直さなければ、各々のプロセッサのキャッシュメモリに格納されたデータの一貫性が保てない。
【０００６】
上記問題の解決策として、マルチプロセッサシステムには、スヌープキャッシュと呼ばれる機能（以下、スヌープ機能という）が設けられている。スヌープ機能とは、各々のプロセッサが、他のプロセッサによる共有メモリへのデータのライトを監視（スヌープ）し、あるアドレスのデータが書き換えられた場合に、自分のキャッシュメモリにそのアドレスのデータが格納されている場合は、キャッシュの状態を更新することによって、各々のプロセッサのキャッシュメモリに格納されているデータの一貫性を保つ機能である。
【０００７】
ここで、従来の代表的なマルチプロセッサシステムとしては、例えば特許文献１がある。特許文献１のマルチプロセッサシステムでは、共有メモリ上にプロセッサ間通信用のバッファプールが設けられている。プロセッサ間通信を行う場合、送信側のプロセッサは、割込み禁止と排他制御を行い、共有メモリ上に設けられているバッファプールからバッファを確保して、そこに送信メッセージを書き込む。その後、プロセッサ間割込機能によって受信側のプロセッサに処理要求を通知する。
【０００８】
一方、受信側のプロセッサは、送信側のプロセッサからの割込みによって処理要求を受け取ると、割込み処理中に送信側のプロセッサを認識し、該当するバッファを特定して送信メッセージを読み出す。そして、受信側のプロセッサは、読み出した送信メッセージに基づいて必要な処理を行った後、同じバッファに返信メッセージを書き込み、プロセッサ間割込機能によって送信側のプロセッサに割込みをかける。
【０００９】
送信側のプロセッサは、受信側のプロセッサからの割込みを受け取ると、割込み処理中に受信側のプロセッサを認識し、該当するバッファを特定して返信メッセージを読み出す。その後、送信側のプロセッサは、割込み禁止と排他制御を行い、バッファを解放した後、排他制御を終了して割込みを許可する。
【００１０】
【特許文献１】特開２０００−２３５５５３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
特許文献１のマルチプロセッサシステムでは、プロセッサ間割込機能を設ける必要があるが、システム内のプロセッサ数の増減に応じて、その構成を変更する必要があり、スケーラビリティに欠けるという問題がある。また、割込み発生後に共有メモリ上のバッファからデータを取り込むため、データの取り込み完了までに時間がかかり、その遅延時間がシステム上問題となることがある。
【００１２】
本発明の目的は、前記従来技術に基づく問題点を解消し、プロセッサ数に関わらず、スケーラビリティに優れ、なおかつプロセッサ間通信にかかる処理時間を短縮することができるマルチプロセッサシステムを提供することにある。
【課題を解決するための手段】
【００１３】
上記目的を達成するために、本発明は、少なくとも２つのプロセッサモジュールと、各々の前記プロセッサモジュールからアクセス可能な共有メモリとを備え、各々の前記プロセッサモジュール間で前記共有メモリを介してプロセッサ間通信を行うマルチプロセッサシステムであって、
各々の前記プロセッサモジュールは、プロセッサと、前記共有メモリに格納されたデータの一部を格納する複数のキャッシュブロックを含むキャッシュメモリと、各々の前記キャッシュブロックに対応して１つずつ設けられ、各々対応する前記キャッシュブロックを管理するための管理データを格納するキャッシュタグと、該キャッシュタグの管理データを使用して前記キャッシュメモリを管理するキャッシュコントローラとを備え、
各々の前記プロセッサモジュールのキャッシュコントローラは、他の前記プロセッサモジュールのプロセッサにより前記共有メモリのデータが書き換えられたかどうかを監視し、前記共有メモリのデータが書き換えられたことを検出すると、該書き換えられたデータが自分の前記プロセッサモジュールのキャッシュメモリに格納されている場合に、自分の前記プロセッサモジュールのキャッシュメモリに格納されているデータを前記書き換えられたデータに更新するスヌープ機能部と、自分の前記プロセッサモジュールのプロセッサに対して割込みを発生する割込み発生機能部とを備え、
前記共有メモリには、送信側の前記プロセッサモジュールから受信側の前記プロセッサモジュールに対して送信される通信データを格納するための複数のバッファを含む通信バッファプールと、各々の前記プロセッサモジュール間で送信用および受信用の１つずつが確保され、前記バッファのアドレス情報を格納するための複数のヘッダを含むヘッダ領域とが設けられ、
送信側の前記プロセッサモジュールから受信側の前記プロセッサモジュールに対して前記通信データを送信するに際し、
送信側の前記プロセッサモジュールでは、前記プロセッサが前記通信バッファプールからバッファを確保して、該確保したバッファに前記通信データをライトした後、該確保したバッファのアドレス情報を、送信側の前記プロセッサモジュールから受信側の前記プロセッサモジュールに対する送信用のヘッダにライトし、
受信側の前記プロセッサモジュールでは、前記キャッシュコントローラが、前記スヌープ機能部により、送信側の前記プロセッサモジュールから受信側の前記プロセッサモジュールに対する送信用のヘッダが書き換えられたことを検出すると、該書き換えられたヘッダに格納されているアドレス情報をリードし、該リードしたアドレス情報に対応するバッファに格納されている通信データをリードし、前記リードしたアドレス情報を新たな前記キャッシュタグに格納するとともに、前記リードした通信データを、前記アドレス情報を格納した新たな前記キャッシュタグに対応する前記キャッシュブロックに格納した後、前記割込み発生機能部により前記プロセッサに割込みをかけ、該割込みを受けたプロセッサが、前記アドレス情報を格納した新たな前記キャッシュタグに対応する前記キャッシュブロックに格納されている通信データをリードすることを特徴とするマルチプロセッサシステムを提供するものである。
【００１４】
ここで、前記共有メモリのヘッダ領域には、送信用の前記プロセッサモジュールのプロセッサで動作する各々のソフトウェアプログラムと受信用のプロセッサモジュールのプロセッサで動作する各々のソフトウェアプログラムとの間で送信用および受信用のヘッダが１つずつ確保され、各々の前記ソフトウェアプログラム間でプロセッサ間通信が行われることが好ましい。
【００１５】
また、各々の前記キャッシュタグは、前記管理データとして、データが該キャッシュタグに対応する前記キャッシュブロックに格納されている前記共有メモリのアドレス情報と、該キャッシュタグに対応する前記キャッシュブロックに格納されたデータの状態を表すステータス情報と、該キャッシュタグに対応する前記キャッシュブロックを常に確保するのか、しないのかを前記キャッシュコントローラに指示するフラグを格納する常駐＆更新割込スイッチと、前記アドレス情報を、該キャッシュタグに対応する前記キャッシュブロックにデータが格納されている前記共有メモリのアドレスとして扱うのか、前記通信データが格納されたバッファのアドレスが格納されているヘッダのアドレスとして使用するのかを前記キャッシュコントローラに指示するフラグを格納するアドレス参照スイッチとを含み、
前記キャッシュコントローラは、各々の前記キャッシュタグの前記常駐＆更新割込スイッチを参照して、該キャッシュタグに対応する前記キャッシュブロックを常に確保するのか、しないのかを判断するとともに、各々の前記キャッシュタグの前記アドレス参照スイッチを参照して、各々の前記キャッシュタグに格納されている前記アドレス情報を、該キャッシュタグに対応する前記キャッシュブロックにデータが格納されている前記共有メモリのアドレスとして扱うのか、前記通信データが格納されたバッファのアドレスが格納されているヘッダのアドレスとして使用するのかを判断することが好ましい。
【発明の効果】
【００１６】
本発明では、プロセッサ間通信に必要となる割込み発生機能を、各々のプロセッサモジュール内に実装している。これにより、システム内に含まれるプロセッサ数に関わらず、プロセッサモジュールの構成が同一となるため、プロセッサ数の増減に伴うスケーラビリティを確保することができる。また、プロセッサ間通信を行う時に、送信側のプロセッサモジュールから送信されるデータを、受信側のプロセッサモジュールのキャッシュメモリに格納してからプロセッサに割込みをかけるため、受信側のプロセッサモジュールにおけるプロセッサのデータへのアクセスを高速化することができ、システム全体としての通信処理時間を短縮することができる。
【発明を実施するための最良の形態】
【００１７】
以下に、添付の図面に示す好適実施形態に基づいて、本発明のマルチプロセッサシステムを詳細に説明する。
【００１８】
図１は、本発明のマルチプロセッサシステムの構成を表す一実施形態の概略図である。同図に示すマルチプロセッサシステム１０は、２つのプロセッサモジュール１２ａ、１２ｂと、共有メモリ１４とによって構成されている。プロセッサモジュール１２ａ、１２ｂおよび共有メモリ１４はシステムバス１６を介して双方向に接続されており、プロセッサモジュール１２ａ、１２ｂは、共有メモリ１４を介して相互にプロセッサ間通信を行うことが可能である。
【００１９】
プロセッサモジュール１２ａ、１２ｂは同一構成のもので、図２に示すように、プロセッサ２０と、キャッシュメモリ２２と、キャッシュタグ２４と、キャッシュコントローラ２６と、バスインタフェース１８とを備えている。キャッシュコントローラ２６と、プロセッサ２０、キャッシュメモリ２２、キャッシュタグ２４およびバスインタフェース１８とは双方向に接続されている。また、バスインタフェース１８は、システムバス１６と双方向に接続されている。
【００２０】
キャッシュメモリ２２は、共有メモリ１４に格納されたデータの一部を格納する所定容量の複数のキャッシュブロックを含む、小容量かつ高速なメモリである。キャッシュタグ２４は、各々のキャッシュブロックに対応して１つずつ設けられ、各々対応するキャッシュブロックを管理するための管理データを格納する。キャッシュコントローラ２６は、キャッシュタグ２４の管理データを利用して各々のキャッシュブロックに格納されるデータを管理する。
【００２１】
また、キャッシュコントローラ２６は、他のプロセッサ２０によって共有メモリ１４のデータが書き換えられたかどうかを監視（スヌープ）し、共有メモリ１４のデータが書き換えられたことを検出すると、書き換えられたデータが自分のキャッシュメモリ２２に格納されている場合に、自分のキャッシュメモリ２２に格納されているデータを、書き換えられたデータに更新し、データの一貫性を保つスヌープ機能部２８と、自プロセッサ２０に対して割込みを発生する割込み発生機能部３０とを備えている。
【００２２】
プロセッサ２０が、共有メモリ１４をアクセスしようとする時、そのデータがキャッシュメモリ２２内に存在する場合、プロセッサ２０は、キャッシュコントローラ２６により、キャッシュメモリ２２をアクセスするように制御される。一方、そのデータがキャッシュメモリ２２内に存在しない場合、プロセッサ２０は、キャッシュコントローラ２６により、バスインタフェース１８およびシステムバス１６を介して共有メモリ１４をアクセスするように制御される。
【００２３】
共有メモリ１４は、キャッシュメモリ２２と比べると大容量かつ低速で、各々のプロセッサモジュール１２ａ、１２ｂからアクセス可能なメモリである。共有メモリ１４には、送信側のプロセッサモジュールから受信側のプロセッサモジュールに対して送信される通信データを格納するための複数のバッファを含む通信バッファプールと、バッファのアドレス情報（先頭アドレス）を格納するための複数のヘッダを含むヘッダ領域とが設けられている。
【００２４】
ヘッダは、各々のプロセッサモジュール１２ａ、１２ｂ間で受信用および送信用の１つずつが確保されている。図１では、各々プロセッサモジュール１２ａ、１２ｂに対応するヘッダ３２ａ、３２ｂとバッファ３４ａ、３４ｂのみが示されている。本実施形態の場合、ヘッダ３２ａおよびバッファ３４ａは、プロセッサモジュール１２ａから１２ｂに対してデータの送信が行われる時に使用される送信用、ヘッダ３２ｂおよびバッファ３４ｂは、その逆方向にデータの送信が行われる時に使用される受信用であるとする。
【００２５】
例えば、バッファ３４ａに、プロセッサモジュール１２ａからプロセッサモジュール１２ｂに対して送信すべきデータがライトされると、ヘッダ３２ａには、バッファ３４ａのアドレス情報がライトされる。例えば、ヘッダ３２ａのアドレスが１００番地で、バッファ３４ａのアドレスが２００番地の場合、１００番地のヘッダ３２ａには、そこに格納されるデータとして、バッファ３４ａのアドレスである２００番地というアドレス情報がライトされる。ヘッダ３２ｂおよびバッファ３４ｂについても同様である。
【００２６】
なお、ヘッダ領域および通信バッファプールは、共有メモリ１４内のどのアドレス空間に割り当てられていてもよい。また、プロセッサモジュール１２ａ、１２ｂは、ヘッダ領域内に含まれる任意のヘッダ、および通信バッファプールに含まれる任意のバッファを選択的に使用することができる。
【００２７】
次に、キャッシュタグ２４の構成について説明する。キャッシュタグ２４は、既存のキャッシュメモリで用いられているキャッシュタグを拡張したもので、図３に示すように、既存のキャッシュタグに含まれているアドレス情報およびステータス情報に加えて、プロセッサ間通信のために使用される常駐＆更新割込スイッチおよびアドレス参照スイッチを含んでいる。
【００２８】
アドレス情報は、キャッシュタグ２４に対応するキャッシュブロックにデータが格納される共有メモリ１４のアドレス（先頭アドレス）を表す。
【００２９】
ステータス情報は、キャッシュブロックに格納されているデータの状態を表す。ステータス情報は、インバリッド（Invalid）状態、シェアード（Shared）状態、イクスクルーシブ（Exclusive）状態のうちのいずれかの状態となる。インバリッド状態は、キャッシュブロックに格納されているデータが無効な状態、シェアード状態は、キャッシュブロックに格納されているデータと共有メモリ１４に格納されているデータとが一致している状態、イクスクルーシブ状態は、通常両者が不一致である状態である。
【００３０】
常駐＆更新割込スイッチは、キャッシュタグ２４に対応するキャッシュブロックを解放することなく、常に確保する（キャッシュタグ２４のアドレス情報で指定される共有メモリ１４のアドレスに格納されているデータを格納するキャッシュブロックを常に確保しておく）のか、しないのか、また同時に、キャッシュブロックに格納されているデータと共有メモリ１４に格納されているデータの不一致を解消するのか、しないのかをキャッシュコントローラ２６に指示するフラグである。本実施形態の場合、常駐＆更新割込スイッチが‘１’に設定されると、キャッシュタグ２４のアドレス情報に対応するキャッシュブロックが常に確保され、また、キャッシュブロックに格納されているデータと共有メモリ１４に格納されているデータの不一致を解消するように動作する。
【００３１】
アドレス参照スイッチは、アドレス情報を、キャッシュタグ２４に対応するキャッシュブロックにデータが格納されている共有メモリ１４のアドレスとして扱うのか、送信側のプロセッサモジュールから受信側のプロセッサモジュールに対して送信される通信データが格納されたバッファのアドレスが格納されているヘッダのアドレスとして使用するのかをキャッシュコントローラ２６に指示するフラグである。
【００３２】
本実施形態の場合、アドレス参照スイッチが‘１’に設定されると、アドレス情報は、プロセッサ間通信を行う時に、送信側のプロセッサモジュールから受信側のプロセッサモジュールに対して送信される通信データが格納されたバッファのアドレスが格納されているヘッダのアドレスとして使用される。アドレス参照スイッチが‘０’に設定されると、アドレス情報は、キャッシュタグ２４に対応するキャッシュブロックにデータが格納されている共有メモリ１４のアドレスとして使用される。
【００３３】
ここで、例えばヘッダ３２ａのアドレスが１００番地、バッファ３４ａのアドレスが２００番地で、ヘッダ３２ａにバッファ３４ａのアドレス情報である２００番地が格納されているとする。
【００３４】
アドレス情報が１００番地であるキャッシュタグ２４のアドレス参照スイッチが‘１’に設定された場合、キャッシュコントローラ２６は、１００番地のヘッダ３２ａに格納されている２００番地というデータをリードし、これをアドレス情報として２００番地のバッファ３４ａからデータをリードし、新たなキャッシュタグ２４を作成して、そのアドレス情報を２００番地とし、この新たなキャッシュタグ２４に対応するキャッシュブロックに、バッファ３４ａからリードしたデータを格納する。
【００３５】
また、アドレス情報が１００番地であるキャッシュタグ２４のアドレス参照スイッチが‘０’に設定された場合、キャッシュコントローラ２６は、共有メモリ１４の１００番地に格納されているデータをリードして、キャッシュタグ２４に対応するキャッシュブロックに格納する。
【００３６】
常駐＆更新割込スイッチおよびアドレス参照スイッチは、プロセッサ間通信を行うために使用されるキャッシュブロックを管理するためのプロセッサ間通信専用のキャッシュタグと、プロセッサ間通信以外の目的で用いられるキャッシュタグとを区別するために用いられる。すなわち、マルチプロセッサシステム１０では、プロセッサ間通信以外の目的で使用されているキャッシュタグの常駐＆更新割込スイッチおよびアドレス参照スイッチは、‘０’に設定される。
【００３７】
なお、常駐＆更新割込スイッチおよびアドレス参照スイッチの極性は、上記に限定されず、適宜変更してもよい。
【００３８】
次に、図４に示す状態遷移図を参照し、プロセッサ間通信の一例として、送信側のプロセッサモジュール１２ａから受信側のプロセッサモジュール１２ｂに対してメッセージを送信し、受信側プロセッサモジュール１２ｂから送信側プロセッサモジュール１２ａに対してメッセージを返信する場合の動作を説明する。
【００３９】
プロセッサ間通信を行う前に、送信側プロセッサモジュール１２ａでは、プロセッサ２０から、キャッシュタグ２４のアドレス情報として、送信側プロセッサ２０から受信側プロセッサ２０に通信データを送信する時に使用するヘッダ３２ａのアドレスがライトされる。ここでは、ヘッダ３２ａのアドレス情報として１００番地がライトされるとする。また、プロセッサ２０から、キャッシュタグ２４の常駐＆更新割込スイッチおよびアドレス参照スイッチに‘１’がライトされる。
【００４０】
これにより、送信側キャッシュコントローラ２６は、まず、キャッシュタグ２４のアドレス情報である１００番地に対応するヘッダ３２ａに格納されているデータをリードして、このキャッシュタグ２４に対応するキャッシュブロックに格納する。この時、キャッシュタグ２４のステータス情報（ヘッダ３２ａのキャッシュ状態）は、インバリッド状態からシェアード状態となる。ここでは、ヘッダ３２ａに格納されているデータがバッファ３４ａのアドレスを表す２００番地であるとする。
【００４１】
以後、送信側キャッシュコントローラ２６は、スヌープ機能によって、このアドレス情報の１００番地に対応するヘッダ３２ａを監視する。また、送信側キャッシュコントローラ２６は、常駐＆更新割込スイッチが‘１’であることから、キャッシュタグ２４に対応するキャッシュブロックを常駐とし、なおかつアドレス参照スイッチが‘１’であることから、キャッシュタグ２４のアドレス情報を、通信データが格納されるバッファ３４ａのアドレスが格納されるヘッダ３２ａのアドレスとして使用する。
【００４２】
同様に、受信側プロセッサモジュール１２ｂにおいても、キャッシュタグ２４のアドレス情報として送信側プロセッサモジュール１２ａの場合と同じヘッダ３２ａのアドレスがライトされ、キャッシュタグ２４の常駐＆更新割込スイッチおよびアドレス参照スイッチとして‘１’が設定される。なお、この時の受信側プロセッサモジュール１２ｂにおける動作は、上記送信側プロセッサモジュール１２ａの動作と同様であるから、ここでは繰り返しの説明は省略する。
【００４３】
プロセッサ間通信を行う場合、送信側プロセッサ２０は、共有メモリ１４の通信バッファプールの中から、送信メッセージに対応する所定容量のバッファ３４ａを確保して、この確保したバッファ３４ａに送信メッセージをライトする。ここでは、前述の通り、バッファ３４ａのアドレスが２００番地であるとする。この時、送信側のキャッシュタグ２４のステータス情報（バッファ３４ａのキャッシュ状態）は、インバリッド状態からイクスクルーシブ状態となるが、常駐＆更新割込スイッチが‘１’であることから、送信側キャッシュコントローラ２６は、キャッシュポリシーがライトバックであってもライトスルー動作し、共有メモリ１４のバッファ３４ａに送信メッセージをライトする。
【００４４】
続いて、送信側プロセッサ２０は、確保したバッファ３４ａのアドレス情報を、送信側のプロセッサモジュール１２ａから受信側のプロセッサモジュール１２ｂに対する送信用のヘッダ３２ａにライトする。この時、キャッシュタグ２４のステータス情報（ヘッダ３２ａのキャッシュ状態）は、シェアード状態からイクスクルーシブ状態となるが、常駐＆更新割込スイッチが‘１’であることから、送信側キャッシュコントローラ２６はキャッシュポリシーがライトバックであってもライトスルー動作し、上記のように、バッファ３４ａのアドレスは２００番地であるから、共有メモリ１４のヘッダ３２ａには、バッファ３４ａのアドレス情報として２００番地がライトされる。
【００４５】
一方、受信側キャッシュコントローラ２６は、スヌープ機能によってヘッダ３２ａを監視している。受信側キャッシュコントローラ２６は、送信側プロセッサ２０によってヘッダ３２ａのデータが書き換えられたことを検出すると、１００番地のヘッダ３２ａに格納されているデータとしてアドレス情報となる２００番地をリードし、これを対応するキャッシュブロックに格納する。
【００４６】
続いて、受信側キャッシュコントローラ２６は、アドレス参照スイッチが‘１’であることから、１００番地のヘッダ３２ａからリードした２００というデータをアドレス情報として使用し、２００番地のバッファ３４ａに格納されている送信メッセージをリードし、新たなキャッシュタグ２４を作成して、そのアドレス情報を２００番地とするとともに、これに対応するキャッシュブロックに送信メッセージを格納する。
【００４７】
受信側キャッシュコントローラ２６は、送信メッセージをキャッシュブロックに格納した後、受信側プロセッサ２０に対して割込みをかける。受信側プロセッサ２０は、受信側キャッシュコントローラ２６から割込みを受けると、ヘッダ３２ａに対応するキャッシュブロックと新たなキャッシュタグ２４に対応するキャッシュブロックから送信メッセージをリードし、この送信メッセージに対応する処理を行う。このとき送信側／受信側双方のキャッシュタグのステータス情報はシェアード状態となる。
【００４８】
続いて、受信側プロセッサ２０は、送信側プロセッサ２０が確保した同じバッファ３４ａに返信メッセージをライトする。この時、新たなキャッシュタグ２４のステータス情報（バッファ３４ａのキャッシュ状態）は、シェアード状態からイクスクルーシブ状態となるが、常駐＆更新割込スイッチが‘１’であることから、受信側キャッシュコントローラ２６は、キャッシュポリシーがライトバックであってもライトスルー動作し、共有メモリ１４のバッファ３４ａに返信メッセージをライトする。続いて、受信側プロセッサ２０は、バッファ３４ａのアドレス情報をヘッダ３２ａにライトする。この時、受信側キャッシュタグ２４のステータス情報（ヘッダ３２ａのキャッシュ状態）は、シェアード状態からイクスクルーシブ状態となるが、常駐＆更新割込スイッチが‘１’であることから、受信側キャッシュコントローラ２６はキャッシュポリシーがライトバックであってもライトスルー動作し、共有メモリ１４のヘッダ３２ａにバッファ３４ａのアドレスをライトする。
【００４９】
送信側キャッシュコントローラ２６も同様に、スヌープ機能によってヘッダ３２ａを監視している。送信側キャッシュコントローラ２６は、受信側プロセッサ２０によってヘッダ３２ａにライトがあったことを検出すると、ヘッダ３２ａに格納されているデータをリードし、対応するキャッシュブロックに格納する。
【００５０】
続いて、送信側キャッシュコントローラ２６は、アドレス参照スイッチが‘１’であることから、アドレス情報である１００番地のヘッダ３２ａからリードした２００というデータをアドレス情報として使用し、２００番地のバッファ３４ａに格納されている返信メッセージをリードし、新たなキャッシュタグ２４を作成して、そのアドレス情報を２００番地とするとともに、これに対応するキャッシュブロックに返信メッセージを格納する。
【００５１】
送信側キャッシュコントローラ２６は、返信メッセージを対応するキャッシュブロックに格納した後、送信側プロセッサ２０に対して割込みをかける。送信側プロセッサ２０は、送信側キャッシュコントローラ２６から割込みを受けると、ヘッダ３２ａに対応するキャッシュブロックと新たなキャッシュタグ２４に対応するキャッシュブロックから返信メッセージをリードする。このとき送信側／受信側双方のキャッシュタグのステータス情報はシェアード状態となる。そして、確保したバッファ３４ａを解放してプロセッサ間通信を終了する。
【００５２】
マルチプロセッサシステム１０では、プロセッサ間通信に必要となる割込み発生機能を、各々のプロセッサモジュール内に実装している。これにより、システム内に含まれるプロセッサ数に関わらず、プロセッサモジュールの構成が同一となるため、プロセッサ数の増減に伴うスケーラビリティを確保することができる。また、プロセッサ間通信を行う時に、送信側プロセッサから送信されるデータを、受信側キャッシュメモリに格納してからプロセッサに割込みをかけるため、受信側プロセッサのデータへのアクセスを高速化することができ、システム全体としての通信処理時間を短縮することができる。
【００５３】
なお、返信メッセージは、受信側のプロセッサモジュール１２ｂから送信側のプロセッサモジュール１２ａに対する受信用のヘッダ３２ｂとバッファ３４ｂを使用して送信してもよい。また、上記実施形態とは逆に、プロセッサモジュール１２ａ、１２ｂをそれぞれ受信側および送信側のプロセッサモジュールとした場合の動作は、ヘッダ３２ａおよびバッファ３４ａの代わりに、ヘッダ３２ｂおよびバッファ３４ｂを使用する点を除いて同様である。
【００５４】
また、上記実施形態では、プロセッサモジュールが２つの場合を例に挙げて説明したが、本発明のマルチプロセッサシステムにおいて、プロセッサモジュールの個数は何ら制限されない。例えば、図５に示す例は、３つのプロセッサモジュールを含んでいる。この場合もプロセッサモジュールの構成は図２に示す構成と同一である。また、各々のプロセッサモジュール間で送信用および受信用のヘッダが１つずつ設けられる。プロセッサモジュールが４個以上の場合も同様である。
【００５５】
また、図６の例に示すように、プロセッサモジュールが２つの場合であっても、各々のプロセッサモジュールで２つのソフトウェアプログラムが動作しており、各々のプロセッサモジュールのプログラム間でプロセッサ間通信を行う場合も、プロセッサモジュールの構成は同じである。この場合、送信用のプロセッサモジュールのプロセッサで動作する各々のプログラムと受信用のプロセッサモジュールのプロセッサで動作する各々のプログラムとの間で送信用および受信用のヘッダが１つずつ設けられる。同一プロセッサモジュール上で同時動作するプログラムが３つ以上の場合も同様である。
【００５６】
また、上記実施形態では、汎用的なキャッシュメモリの機能を拡張して、プロセッサ間通信のために利用してもよいし、あるいは汎用キャッシュメモリとは別に、プロセッサ間通信専用のキャッシュメモリを構成しても良い。プロセッサ間通信専用のキャッシュメモリを使用する場合、キャッシュタグに明示的に常駐＆更新割込スイッチおよびアドレス参照スイッチを設けても良いが、これらのスイッチには常に‘１’が設定されているものとして動作させることができるため、これらのスイッチを設けなくても良い。
【００５７】
本発明は、基本的に以上のようなものである。
以上、本発明のマルチプロセッサシステムについて詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【図面の簡単な説明】
【００５８】
【図１】本発明のマルチプロセッサシステムの構成を表す一実施形態の概略図である。
【図２】図１に示すプロセッサモジュールの構成を表す概略図である。
【図３】図２に示すキャッシュタグの構成を表す概略図である。
【図４】図１に示すマルチプロセッサシステムの動作を表す状態遷移図である。
【図５】本発明のマルチプロセッサシステムの構成を表す別の実施形態の概略図である。
【図６】本発明のマルチプロセッサシステムの構成を表す別の実施形態の概略図である。
【符号の説明】
【００５９】
１０  マルチプロセッサシステム
１２ａ、１２ｂ  プロセッサモジュール
１４  共有メモリ
１６  システムバス
１８  バスインタフェース
２０  プロセッサ
２２  キャッシュメモリ
２４  キャッシュタグ
２６  キャッシュコントローラ
２８  スヌープ機能部
３０  割込み発生機能部
３２ａ、３２ｂ  ヘッダ
３４ａ、３４ｂ  バッファ
【図１】
2006185044.tif 000003
【図２】
2006185044.tif 000004
【図３】
2006185044.tif 000005
【図４】
2006185044.tif 000006
【図５】
2006185044.tif 000007
【図６】
2006185044.tif 000008