(57)【特許請求の範囲】
【請求項１】
複数のプロセッサと、前記プロセッサにて共有される主記憶と、前記プロセッサと前記主記憶を結合する相互結合網と、複数の前記プロセッサの各々と対応する複数の通信レジスタモジュールと、複数の前記通信レジスタモジュールを結合するインターフェースから構成され、個々の前記通信レジスタモジュールは、複数の通信レジスタを有するマルチプロセッサシステムであって、
前記通信レジスタは、ロック／アンロック状態を保持する第１のレジスタとロック／アンロック情報を保持する第２のレジスタから構成され、
ロック／アンロック状態を保持する前記第１のレジスタは相異なる前記通信レジスタモジュール内の対応するレジスタと同一の内容を保持し、
ロック／アンロック情報を保持する前記第２のレジスタは個々の前記通信レジスタモジュール毎に個別の内容を保持し、
前記プロセッサからのロック処理要求に対しては、前記インターフェースを介して全ての前記通信レジスタモジュールに該要求をブロードキャストし、該プロセッサに対応する前記通信レジスタモジュール内の通信レジスタ内のロック／アンロック状態を保持する前記第１のレジスタの値を参照して、ロックの成功／失敗を該プロセッサに報告し、ロック可能時には全ての前記通信レジスタモジュール内のロック／アンロック状態を保持する前記第１のレジスタに同一のロックフラグを設定し、同時に対応するロック／アンロック情報を保持する前記第２のレジスタにロック処理要求を出した前記プロセッサ内のプロセス番号を設定することを特徴とするマルチプロセッサシステム。
【請求項２】
請求項１記載のマルチプロセッサシステムにおいて、ロック処理実行時に、従来プロセッサアーキテクチャに存在するロックフラグを操作する命令が発行されたとき、前記ロックフラグが前記主記憶上にある場合と前記通信レジスタ上にある場合とで命令動作を切り替えることを特徴とするマルチプロセッサシステム。
【請求項３】
請求項２記載のマルチプロセッサシステムにおいて、前記命令が、前記ロック／アンロック情報を保持する前記第２のレジスタをアクセスしたとき、同時にロック／アンロック状態を保持する前記第１のレジスタにもアクセスを行うことを特徴とするマルチプロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マルチプロセッサシステムにおける通信制御技術に関し、特にロック／アンロック処理を高速化する通信制御技術等に適用して有効な技術に関する。
【０００２】
【従来の技術】
マルチプロセッサシステムにおいて効率よいマルチプロセス制御または並列プロセス制御を行うためには、プロセッサ間の高速な同期、排他、通信制御が必要である。そのために通信レジスタと呼ばれる主記憶より高速な共有のレジスタを使用する場合がある。
【０００３】
特開２０００−１８７６５２号公報においては、図７に示すマルチプロセッサシステムにおいて、図８の構成をとる通信レジスタを用いたプロセッサ間の高速な同期の例が開示されている。
【０００４】
Ｎ個の通信レジスタモジュール４００〜４０２はＮ個のプロセッサ１０〜１２と信号線Ｌ８０〜Ｌ８２を介して１対１に接続される。各プロセッサ１０〜１２は、信号線Ｌ８０〜Ｌ８２にロードストア要求および主記憶の実アドレスを出力する。通信レジスタモジュール４００〜４０２は複数のレジスタから構成される通信レジスタ群５００〜５０２を有し、通信レジスタモジュール間は通信モジュール間バス７００で結合される。通信レジスタ群５００〜５０２の各々内の相対応する番号のレジスタは通信レジスタモジュール間で同一の値を保持するよう制御されている（これを「通信レジスタがミラーリングされている」と呼ぶ）。信号線Ｌ８０〜Ｌ８２上のロードストア要求は、通信レジスタモジュール内のデコーダ４３０〜４３２でデコードされ、要求が主記憶３０へのアクセス要求である場合は、相互結合網２０を介して主記憶３０をアクセスするよう制御され、要求が通信レジスタへのアクセス要求である場合は、通信モジュール間バス７００を介して通信レジスタ群５００〜５０２をアクセスするよう制御される。
【０００５】
具体的には、プロセッサから書き込み要求が来た場合は、全通信レジスタモジュールに対して同一の値を書き込むよう相互結合網２０、または通信モジュール間バス７００が制御し、プロセッサ１０〜１２からの読み出し要求に対しては、各プロセッサ１０〜１２に対応する通信レジスタモジュール４００〜４０２内のレジスタから値を読み出す。
【０００６】
各通信レジスタはメモリマップドレジスタ方式（ＭＭＲ方式）により、メモリアドレス空間上にマッピングされる。本従来例においては、ロック要求時、通信レジスタに非ロック状態を示す固定値が設定されていた場合、該通信レジスタには、ロック要求を発行したプロセッサのプロセッサ番号が設定され、リプライデータにも同じプロセッサ番号が返される。一方、通信レジスタに非ロック状態を示す固定値以外の値が設定されていたら、通信レジスタの内容（この場合はロックをかけている他のプロセッサ番号）をリプライデータとして返す。プロセッサはリプライデータの値が、自プロセッサ番号ならロック成功、他プロセッサ番号ならロック失敗を検知することができ、従来のプロセッサアーキテクチャを変えることなく、ロード／ストア要求によって、ロック／アンロック処理が可能になる。
【０００７】
また、ロック値をプロセッサ番号ではなく、個々のプロセッサ内にて並行動作する複数のプロセスの各々を識別するためにユニークに付与されたプロセス番号とし、マルチプロセス時にプロセス単位でロック／アンロック処理を実現することも可能である。
【０００８】
【発明が解決しようとする課題】
上述の特開２０００−１８７６５２号公報に示されるマルチプロセッサシステムではプロセス番号をロック値として使用する場合、通信レジスタモジュール内の通信レジスタ本数を、ロック要求元であるプロセスの数に応じて増加させる必要がある。また、通信レジスタがミラーリングされているため、通信レジスタの増加がシステム全体の物量に与える影響も大きい。
【０００９】
一方、ミラーリングせずに、通信レジスタが通信レジスタモジュール間で個別の内容を持つように制御する案も考えられる（これを「通信レジスタをフラットに置く」と呼ぶ）。こうすれば、物量の増大は抑えられるが、異なる通信レジスタモジュールに存在する通信レジスタへのアクセスやロック成功／失敗の報告信号が、通信モジュール間バスを中継しなければならず、アクセス速度が低下する。
【００１０】
本発明の目的は、複数のプロセッサにて主記憶を共有するマルチプロセッサシステムにおいて、回路や論理物量等を増大させることなく、プロセッサ間の同期、排他、通信制御のための多数のロック／アンロック要求の処理を的確に実現することが可能な技術を提供することにある。
【００１１】
本発明の他の目的は、複数のプロセッサにて主記憶を共有するマルチプロセッサシステムにおいて、主記憶に対するアクセス速度を低下させることなく、プロセッサ間の同期、排他、通信制御のための多数のロック／アンロック要求の処理を的確に実現することが可能な技術を提供することにある。
【００１２】
本発明の他の目的は、複数のプロセッサにて主記憶を共有するマルチプロセッサシステムにおいて、回路や論理物量等の増大や主記憶に対するアクセス速度の低下を生じることなく、個々のプロセッサにて並行動作する複数のプロセス間での同期、排他、通信制御のための多数のロック／アンロック要求の処理を的確に実現することが可能な技術を提供することにある。
【００１３】
本発明の他の目的は、複数のプロセッサにて主記憶を共有するマルチプロセッサシステムにおいて、プロセッサアーキテクチャ等に変更を加えることなく、プロセッサ間あるいはプロセス間の同期、排他、通信制御のための多数のロック／アンロック要求の処理を的確に実現することが可能な技術を提供することにある。
【００１４】
【課題を解決するための手段】
本発明は、主記憶と、この主記憶を共有する複数のプロセッサの各々との間に、通信レジスタを介在させた構成のマルチプロセッサシステムにおいて、前記通信レジスタは、ロック／アンロック状態を保持する第１のレジスタとロック／アンロック情報を保持する第２のレジスタを持つ構成としたものである。また、ロック／アンロック状態を保持する第１のレジスタは、通信レジスタモジュール間でミラーリングされている。つまり、通信レジスタモジュール間で同一の値を保持するよう制御される。一方、ロック／アンロック情報を保持する第２のレジスタは、各通信レジスタモジュール間でフラットに置かれる。つまり、通信レジスタモジュール毎に個別の内容を保持する。
【００１５】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照しながら詳細に説明する。
【００１６】
図１は、本発明の一実施の形態であるマルチプロセッサシステムの全体構成の一例を示す概念図であり、図２、図３および図４は、その構成の一例をより詳細に例示した概念図である。
【００１７】
本実施の形態のマルチプロセッサシステムは、複数のプロセッサ１０（＃１〜＃ＮのＮ個）が、通信レジスタ４０および相互結合網２０を介して主記憶３０を共有する構成となっている。通信レジスタ４０は複数の通信レジスタモジュール４００（＃１〜＃ＮのＮ個）を含んでいる。
【００１８】
複数の通信レジスタモジュール４００の各々は、複数のプロセッサ１０の各々と信号線Ｌ８０を介して１対１に接続される。各プロセッサ１０は、信号線Ｌ８０にロードストア要求および主記憶３０の実アドレスを出力する。
【００１９】
図２に例示されるように、個々の通信レジスタモジュール４００は複数のレジスタから構成される通信レジスタ群５００（＃１〜＃Ｎ）を有し、通信レジスタモジュール４００の間は通信モジュール間バス７００で結合される。信号線Ｌ８０上のロードストア要求は、通信レジスタモジュール４００内のデコーダ４３０でデコードされ、要求が主記憶３０へのアクセス要求である場合は、信号線Ｌ８０および相互結合網２０を介して主記憶３０をアクセスするよう制御され、要求が通信レジスタ４０へのアクセス要求である場合は、通信モジュール間バス７００を介して通信レジスタ群５００をアクセスするよう制御される。
【００２０】
なお、通信モジュール間バス７００は、全通信レジスタモジュール４００へのブロードキャスト書き込み要求が、同時に全通信レジスタモジュールに到達することが保証できれば、バスではなく結合網で構成してもよい。
【００２１】
図３に、本実施の形態における通信レジスタ群５００の構成の一例を示す。本実施の形態の場合、通信レジスタ群５００には、ロック情報レジスタ５１０とロック状態レジスタ５２０の２種類の通信レジスタが存在する。
【００２２】
ロック情報レジスタ５１０は、複数のビットから構成されるレジスタであり、通信レジスタ群５００の全てにわたって合計Ｎ×Ｍ本存在する。各レジスタには固有の番号（１からＮ×Ｍまで）がレジスタ番号として割り当てられている。各レジスタの実体は、Ｎ個の通信レジスタモジュールそれぞれにＭ本ずつ分配されて存在する。具体的には、通信レジスタモジュール＃１内にはレジスタ番号１からＭまで、通信レジスタモジュール＃２内にはレジスタ番号Ｍ＋１から２Ｍまで、通信レジスタモジュール＃Ｎ内にはレジスタ番号（Ｎ−１）Ｍ＋１からＮ×Ｍまで、といった形でレジスタが各通信レジスタモジュールに割り振られる。
【００２３】
ロック状態レジスタ５２０は、１ビットのフラグレジスタであり、各通信レジスタ群毎にＮ×Ｍ本ずつ存在する。レジスタ番号は各通信レジスタ群５００毎に１からＮ×Ｍまで割り当てられる。異なる通信レジスタモジュール４００間で対応するレジスタ番号をもつレジスタは同一の値を保持する（一つの通信レジスタモジュール４００内でのロック状態レジスタ５２０の変更が、常に他の通信レジスタモジュール４００内でのロック状態レジスタ５２０に反映される）ように制御される。
【００２４】
つまり、ロック情報レジスタ５１０は各通信レジスタモジュール間でフラットに置かれ、ロック状態レジスタ５２０は各通信レジスタモジュール間でミラーリングされる。これらはいずれも実アドレスにマッピングされ、レジスタへのアクセスは、メモリアクセスを行うロード／ストア等の命令で行う。
【００２５】
ロック状態レジスタ５２０のフラグがセットされている場合はその通信レジスタはロック状態にあることを示し、対応するレジスタ番号をもつロック情報レジスタ５１０には、ロック処理を要求したプロセスのプロセス番号が設定される。また、ロック状態レジスタ５２０のフラグがリセットされている場合はその通信レジスタはアンロック状態であることを示し、ロック情報レジスタ５１０の内容はＤｏｎ’ｔ  ｃａｒｅである。
【００２６】
プロセス番号を設定するレジスタ（ロック情報レジスタ５１０）はフラットに存在し、通信レジスタ全体をミラーリングする場合に比べ物量の増大を抑えることができる。また、フラグレジスタ（ロック状態レジスタ５２０）のみミラーリングするため、ロック要求に対するロック成功／失敗の報告を通信モジュール間バス７００を介さずにプロセッサ１０に返すことが可能になる。
【００２７】
ロック情報レジスタ５１０とロック状態レジスタ５２０へアクセスして、実際にロック／アンロック処理を行うには、従来アーキテクチャでロックフラグが主記憶３０上にある場合のロック／アンロック処理時に使用する命令を使用する。本実施例では、一例として、ＰｏｗｅｒＰＣアーキテクチャにおけるロックフラグ操作用命令を用いる。
【００２８】
なお、ＰｏｗｅｒＰＣアーキテクチャにおけるメモリ同期命令等については、たとえば、ソフトバンク株式会社１９９４年１２月１０日発行「Ｉｎｓｉｄｅ  ＰｏｗｅｒＰＣ」Ｐ１８１以降、等の文献に記載されている。
【００２９】
ＰｏｗｅｒＰＣアーキテクチャにおいて、主記憶上にロックフラグが存在する場合のロック／アンロック処理は図５に示す命令列によって実現する。
【００３０】
図５の各命令の意味を以下に示す。尚、ｒ３はロックフラグの存在する主記憶上のアドレスが入っているレジスタ、ｒ５は読み出したロックフラグ値を格納するレジスタ、ｒ４は新たに設定するロック値が入っているレジスタである。
【００３１】
ｌｗａｒｘ  ｒ５，０，ｒ３：ロックフラグの値を読み出し、レジスタｒ５に格納する。同時にリザベーション（後述）を確立する。
【００３２】
ｃｍｐ  ｒ５，０：ｒ５の値をゼロと比較する。
【００３３】
ｂｃ  ｌｏｏｐ：ｒ５の値がゼロでないならば、ｌｏｏｐへ戻る。
【００３４】
ｓｔｗｃｘ．ｒ４，０，ｒ３：リザベーションが残っていたらロックフラグにｒ４の値を書き込みに成功する。リザベーションが破棄されていたら、ロックフラグ書き込みに失敗する。
【００３５】
ｂｃ  ｌｏｏｐ：ロックフラグ書き込みが失敗していたらｌｏｏｐへ戻る。成功していたら、次行以降のクリティカル・リージョン内の命令列を実行する。
【００３６】
ｓｙｎｃ：クリティカル・リージョン内の命令実行がすべて完了したことを保証する。
【００３７】
ｓｔｗ  ０，０（ｒ３）：ロックフラグにゼロを書き込む。
【００３８】
前半５行に渡る命令列がロック処理、最後の１行がアンロック処理、それ以外はクリティカル・リージョンを示す。
【００３９】
ｌｗａｒｘ命令、ｓｔｗｃｘ．命令はそれぞれロード・アンド・リザーブ命令、ストア・コンディショナル命令と呼ばれ、ＰｏｗｅｒＰＣアーキテクチャにおけるアトミックな処理を実現する際に、常に対となって使用される命令である。
【００４０】
ロード・アンド・リザーブ命令は、指定アドレスに対して、内容をリードする動作を行うとともに、リザベーションと呼ばれる保護領域を確立する。ストア・コンディショナル命令は、先行するロード・アンド・リザーブ命令によって確立されたリザベーションが破棄されていなかったら、指定アドレスへのライト動作を実行し、プロセッサにストア動作の「成功」を報告する。もし、リザベーションが存在する時に、他のプロセッサがストア命令を発行して、該アドレスの内容を更新すると、リザベーションは破棄される。この状態で、最初にロード・アンド・リザーブ命令を発行したプロセッサが、ストア・コンディショナル命令を発行すると、ストア動作は行われず、「失敗」したことを示すリプライをプロセッサに報告する。
【００４１】
ロック処理を実現する場合、プロセッサはまず主記憶上のロックフラグに対してロード・アンド・リザーブ命令を発行する。読み出されたフラグ値がゼロでない場合は、他のプロセッサがロック中なので、自プロセッサはｌｏｏｐに戻り、フラグ値がゼロになるまで、ロード・アンド・リザーブ命令を繰り返す。フラグ値がゼロになったら、ストア・コンディショナル命令によって、ロックフラグを設定する。このとき、自プロセッサよりも他のプロセッサのロックフラグ設定が早いと、リザベーションが破棄されるので、フラグ値設定に失敗し、再びｌｏｏｐに戻ってロック値がゼロになるのを待つ。フラグ値設定に成功した場合、クリティカル・リージョンを実行する。クリティカル・リージョン実行後は、ロックフラグにゼロをストアしてアンロック処理を行う。
【００４２】
図６に、本実施の形態におけるロック情報レジスタ５１０およびロック状態レジスタ５２０を使用してロック／アンロック処理を行う場合の命令列を例示する。
【００４３】
図６の各命令の意味を以下に示す。尚、ｒ３はロック情報レジスタＲ０のマッピングされている実アドレスが格納されているレジスタ、ｒ４は新たに設定するロック値が入っているレジスタである。
【００４４】
ｓｔｗｃｘ．ｒ４，０，ｒ３：ロック状態レジスタＦ０の値がゼロの場合、ロック状態レジスタＦ０を１にセットし、ロック情報レジスタＲ０にｒ４の値を書き込むことに成功する。ロック状態レジスタＦ０の値が１の場合、書き込み動作に失敗する。
【００４５】
ｂｃ  ｌｏｏｐ：フラグ書き込みが「失敗」ならばｌｏｏｐへ戻る。「成功」ならば、次行以降のクリティカル・リージョンに移る。
【００４６】
ｓｙｎｃ：クリティカル・リージョン内の命令実行がすべて完了したことを保証する。
【００４７】
ｓｔｗ  ０，０（ｒ３）：ロック情報レジスタＲ０にゼロを書き込み、同時にロック状態レジスタＦ０にゼロをセットする。
【００４８】
前半２行分の命令列がロック処理、最後の１行がアンロック処理、それ以外がクリティカル・リージョンである。
【００４９】
ここでのストア・コンディショナル命令の動作は、図５の例の動作とは全く異なる。オペランドにはロック情報レジスタ５１０しか明示しないが、発行されると、対応するロック状態レジスタ５２０のフラグ値も参照・更新する。フラグ値がゼロならば、フラグをセットし、ロック情報レジスタ５１０にロック値を設定し、プロセッサに「成功」報告を行う。フラグ値が１ならば、フラグもロック値も設定せず、プロセッサに「失敗」報告を行う。
【００５０】
ロック処理を実現する場合、まず、ロック情報レジスタ５１０に対してストア・コンディショナル命令を発行する。すると、対応するロック状態レジスタ５２０のフラグ値を参照し、フラグ値がゼロならば非ロック状態であるので、フラグをセットし、ロック情報レジスタ５１０にロック値を設定する。フラグ値が１ならば、他のプロセスによってロックされている状態なので、ｌｏｏｐに戻り、再びストア・コンディショナル命令を繰り返す。ロック値設定に成功したら、クリティカル・リージョンを実行する。クリティカル・リージョン実行後は、ロック情報レジスタ５１０に対してストア命令を発行する。すると、対応するロック状態レジスタ５２０のフラグ値を無条件にゼロとし、ロック情報レジスタ５１０に値を書き込んで、アンロック処理を行う。
【００５１】
このように、本実施の形態では、主記憶３０をアクセスする場合と通信レジスタ４０をアクセスする場合とで、既存のロックフラグを操作する命令の動作を切り替えている。切り替え制御を通信レジスタモジュール４００内で行えば、従来のプロセッサアーキテクチャを変更することなく、通信レジスタ４０を用いた高速ロック処理を実現することができる。また、その高速性は、図５と図６との命令列数の差に示されるように、ロック処理に要する命令数を削減して実行時間を短縮できることからも明白である。
【００５２】
図４に本実施の形態のマルチプロセッサシステムにおける個々の通信レジスタモジュール４００の構成の一例を示す。
【００５３】
信号線Ｌ８０から入力された要求はデコーダ４３０により解析され、ロード／ストア要求であった場合には、アクセスアドレスが通信レジスタ４０にマッピングされた範囲外であれば、要求を信号線Ｌ８０、相互結合網２０を介して、主記憶３０に送る。アクセスアドレスが通信レジスタ４０にマッピングされた範囲内であれば、要求はリクエスト制御回路４１０に送られる。以下、要求ごとの動作を説明する。
【００５４】
尚、本実施の形態の説明においては、要求を出したプロセッサ１０と信号線Ｌ８０を介して直接接続されている通信レジスタモジュール４００を「マスタモジュール」、それ以外の通信レジスタモジュール４００を「スレーブモジュール」とそれぞれ定義する。
【００５５】
（ａ）ストア・コンディショナル要求（ロック要求）
ストア・コンディショナル要求が入力された場合、リクエスト制御回路４１０は、要求をセレクタ４８０に送り、それに基づきバス出力制御回路４９０は、通信モジュール間バス７００に全通信レジスタモジュールにブロードキャスト出力するためのバス権を確保する。バス権確保が完了しブロードキャストが実行されると、自モジュールを含む全通信レジスタモジュール４００のバス入力制御回路４２０に同時に要求が積まれる。
【００５６】
バス入力制御回路４２０は要求を解析し、ロック情報レジスタ５１０が自モジュールにあるか調べる。そして、要求をレジスタ入力回路４４０に送る。それに基づき、書き込み対象のロック状態レジスタ５２０の内容が読み出されて、レジスタ出力回路４５０から出力される。その際、レジスタ入力回路４４０にはロック情報レジスタ５１０への書き込み値（この場合はロック要求元のプロセス番号値）とロック状態レジスタ５２０への書き込み値（この場合はロック成功時に書き込む値１）が、信号線Ｌ７０からの指示信号を受け取るまで保持される。もし、書き込み対象となるロック情報レジスタ５１０が自モジュールに存在しない場合は、ロック状態レジスタ５２０への書き込み値のみが保持される。レジスタ出力回路４５０の出力は比較器４６０へ送られて、読み出された値がチェックされる。
【００５７】
以降の動作は、自モジュールが、マスタモジュールかスレーブモジュールかによって、以下のように異なる。
【００５８】
（ａ）−１：マスタモジュールの場合
読み出された値が１の場合は、他のプロセスによってロックされた状態であるのでロック失敗となり、リプライ制御回路４７０に、プロセッサへロックの「失敗」を示すリプライ報告を信号線Ｌ８０を介して返すよう指示する。同時にレジスタ入力回路４４０に保持された書き込み値は破棄される。
【００５９】
また、値がゼロの場合、非ロック状態なので、リプライ制御回路４７０に、プロセッサ１０へロックの「成功」を示すリプライ報告を信号線Ｌ８０を介して返すよう指示する。それと並行して、比較器４６０は信号線Ｌ７０を通じてレジスタ入力回路４４０に、ロック情報レジスタ５１０への書き込み値とロック状態レジスタ５２０への書き込み値をレジスタに書き込むよう指示する。自モジュールに書き込み対象となるロック情報レジスタ５１０が存在しない場合は、ロック状態レジスタ５２０へのみ書き込みを行う。
【００６０】
ロック状態レジスタ５２０はミラーリングされているため、プロセッサ１０へのロック成功／失敗の報告は、通信モジュール間バス７００を介さずに行うことができ、ロック処理の高速化が図れる。また、ロック情報レジスタ５１０はフラットに置かれるため、プロセス番号をロック値とする際に必要となる通信レジスタ数の増大によるシステムへの物量の影響を抑えることができる。
【００６１】
（ａ）−２：スレーブモジュールの場合
読み出された値が１の場合は、他のプロセスによってロックされた状態であるのでロック失敗となり、レジスタ入力回路４４０内の値を破棄して処理を終わる。
【００６２】
また、値がゼロの場合、非ロック状態なので、比較器４６０は信号線Ｌ７０を通じてレジスタ入力回路４４０に、ロック情報レジスタ５１０への書き込み値とロック状態レジスタ５２０への書き込み値をレジスタに書き込むよう指示する。自モジュールに書き込み対象となるロック情報レジスタ５１０が存在しない場合は、ロック状態レジスタ５２０へのみ書き込みを行う。
【００６３】
通信レジスタ４０へのアクセス要求は、いったん通信モジュール間バス７００経由でブロードキャストされ、バス入力制御回路４２０を介してからアクセスが行われる。そのため、複数のプロセスがほぼ同時に同じ通信レジスタ４０に対してロック要求を発しても、要求は通信モジュール間バス７００上でシリアライズされ、ロック要求のすり抜けは発生しない。
【００６４】
（ｂ）ストア要求（アンロック要求）
ストア要求が入力された場合、リクエスト制御回路４１０は、要求をセレクタ４８０に送り、それに基づきバス出力制御回路４９０は、通信モジュール間バス７００にロック情報レジスタ５１０への書き込み値（この場合ストア命令で指定されたストアデータ）とロック状態レジスタ５２０への書き込み値（この場合フラグリセット値）を出力するためのバス権を確保する。バス権を確保し書き込み値をブロードキャストすると、自モジュールを含む全通信レジスタモジュールのバス入力制御回路４２０に同時に書き込み要求が積まれる。バス入力制御回路４２０は要求を解析し、自モジュールにロック情報レジスタ５１０があるか調べる。ある場合には、ロック情報レジスタ５１０とロック状態レジスタ５２０の両方への書き込み値をレジスタ入力回路４４０に送り、ない場合にはロック状態レジスタ５２０への書き込み値だけをレジスタ入力回路４４０に送る。それに基づき、通信レジスタ群５００に書き込みが行われる。
【００６５】
（ｃ）ロード要求
ロード要求が入力された場合、リクエスト制御回路４１０は、要求をセレクタ４８０に送り、それに基づきバス出力制御回路４９０は、通信モジュール間バス７００にロック情報レジスタ５１０またはロック状態レジスタ５２０への読み出し要求を出力するためのバス権を確保する。バス権を確保し要求をブロードキャストすると、自モジュールを含む全通信レジスタモジュール４００のバス入力制御回路４２０に同時に読み出し要求が積まれる。
【００６６】
バス入力制御回路４２０は要求を解析し、自モジュールにアクセス先のレジスタが存在する場合、要求をレジスタ入力回路４４０に送る。それに基づき、通信レジスタ群５００内のレジスタの値が読み出され、レジスタ出力回路４５０から出力される。読み出された値はセレクタ４８０に送られ、バス出力制御回路４９０は、通信モジュール間バス７００に読み出し値を出力するためにバス権を確保する。バス権を確保すると、値はバスを通じてロード要求元の通信レジスタモジュール４００のバス入力制御回路４２０に送られる。
【００６７】
ロード要求元の通信レジスタモジュール４００のバス入力制御回路４２０は信号線Ｌ９０を通じて、リプライ制御回路４７０に、値をロード要求発行元のプロセッサにリプライするよう指示し、リプライ値が信号線Ｌ８０を通じてプロセッサ１０に返される。
【００６８】
以上説明したように、本実施の形態のマルチプロセッサシステムによれば、以下のことが可能となる。
【００６９】
通信レジスタ４０をロック情報レジスタ５１０とロック状態レジスタ５２０に分化し、通信レジスタモジュール４００間でロック情報レジスタ５１０をフラットに持ち、ロック状態レジスタ５２０をミラーリングして持つことで、たとえば各プロセッサ１０で稼働するプロセス単位でロック処理を行うマルチプロセッサシステムの物量増大を抑えることが可能になり、また、ロック処理時におけるプロセッサ１０へのロック成功／失敗報告を通信モジュール間バス７００を介さずにできるため、ロック処理の高速化が可能になる。
【００７０】
通信レジスタ４０へのアクセス要求は、通信モジュール間バス７００経由でブロードキャストされ、シリアライズされるので、複数のプロセスがほぼ同時に同じ通信レジスタ４０に対してロック要求を発しても、ロック要求のすり抜けを防ぐことができる。
【００７１】
従来ロックフラグ操作命令を用い、ロックフラグが主記憶３０に存在する場合と通信レジスタ４０に存在する場合とで命令の動作を通信レジスタモジュール４００内で切り替える制御を行うことにより、従来アーキテクチャのプロセッサ１０を使用して高速なロック／アンロック処理を実現することができる。
【００７２】
以上本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【００７３】
たとえば、プロセッサとしては、ＰｏｗｅｒＰＣアーキテクチャに限らず、一般のプロセッサに広く適用することができる。
【００７４】
【発明の効果】
本発明によれば、複数のプロセッサにて主記憶を共有するマルチプロセッサシステムにおいて、回路や論理物量等を増大させることなく、プロセッサ間の同期、排他、通信制御のための多数のロック／アンロック要求の処理を的確に実現することができる、という効果が得られる。
【００７５】
本発明によれば、複数のプロセッサにて主記憶を共有するマルチプロセッサシステムにおいて、主記憶に対するアクセス速度を低下させることなく、プロセッサ間の同期、排他、通信制御のための多数のロック／アンロック要求の処理を的確に実現することができる、という効果が得られる。
【００７６】
本発明によれば、複数のプロセッサにて主記憶を共有するマルチプロセッサシステムにおいて、回路や論理物量等の増大や主記憶に対するアクセス速度の低下を生じることなく、個々のプロセッサにて並行動作する複数のプロセス間での同期、排他、通信制御のための多数のロック／アンロック要求の処理を的確に実現することができる、という効果が得られる。
【００７７】
本発明によれば、複数のプロセッサにて主記憶を共有するマルチプロセッサシステムにおいて、プロセッサアーキテクチャ等に変更を加えることなく、プロセッサ間あるいはプロセス間の同期、排他、通信制御のための多数のロック／アンロック要求の処理を的確に実現することができる、という効果が得られる。
【図面の簡単な説明】
【図１】本発明の一実施の形態であるマルチプロセッサシステムの全体構成の一例を示す概念図である。
【図２】本発明の一実施の形態であるマルチプロセッサシステムの構成の一部をより詳細に例示した概念図である。
【図３】本発明の一実施の形態であるマルチプロセッサシステムの構成の一部をより詳細に例示した概念図である。
【図４】本発明の一実施の形態であるマルチプロセッサシステムの構成の一部をより詳細に例示した概念図である。
【図５】ロックフラグを主記憶上に置く場合の、プロセッサによるロック処理の命令列の一例を示す説明図である。
【図６】本発明の一実施の形態であるマルチプロセッサシステムにおけるプロセッサによるロック処理の命令列の一例を示す説明図である。
【図７】従来のマルチプロセッサシステムの構成を示す概念図である。
【図８】従来のマルチプロセッサシステムにおける構成の一部をより詳細に示す概念図である。
【符号の説明】
１０…プロセッサ、２０…相互結合網、３０…主記憶、４０…通信レジスタ、４００…通信レジスタモジュール、４１０…リクエスト制御回路、４２０…バス入力制御回路、４３０…デコーダ、４４０…レジスタ入力回路、４５０…レジスタ出力回路、４６０…比較器、４７０…リプライ制御回路、４８０…セレクタ、４９０…バス出力制御回路、５００…通信レジスタ群、５１０…ロック情報レジスタ（第２のレジスタ）、５２０…ロック状態レジスタ（第１のレジスタ）、７００…通信モジュール間バス、Ｌ７０…信号線、Ｌ８０…信号線、Ｌ９０…信号線。
【図１】
0003996355.tif 000002
【図２】
0003996355.tif 000003
【図３】
0003996355.tif 000004
【図４】
0003996355.tif 000005
【図５】
0003996355.tif 000006
【図６】
0003996355.tif 000007
【図７】
0003996355.tif 000008
【図８】
0003996355.tif 000009