(57)【要約】【課題】マルチプロセッサを構成する各プロセッサ（ＣＰＵ）のスヌープ処理回数を減らすことができ、これにより、ＣＰＵの性能向上および低消費電力化を図ることができるバス結合型マルチプロセッサを提供する。【解決手段】本発明では、各ＣＰＵ＃０〜＃７は、各ＣＰＵ＃０〜＃７が所定の動作モードのときに、スヌープ処理を行うか否かを示す第一のビットを含む、ビット列が格納されているレジスタ１５および、レジスタ１０に格納されている第一のビットと、所定のＣＰＵがバスアクセスの際に出力する、動作モードの種別を示すモード情報とを比較する比較部１７を備える。さらに、比較部１７における比較の結果に基づいて、前記スヌープ処理を選択的に行う。【選択図】  図７
2008026944.tif 000002
【特許請求の範囲】
【請求項１】
各々がキャッシュメモリを備え、かつ各々が前記キャッシュメモリに対するスヌープ機能を有する複数のプロセッサが、同一バスを介して接続されている、バス結合型マルチプロセッサにおいて、
各前記プロセッサは、
各前記プロセッサが所定の動作モードのときに、スヌープ処理を行うか否かを示す第一のビットを含む、ビット列が格納されているレジスタと、
前記レジスタに格納されている前記第一のビットと、所定の前記プロセッサがバスアクセスの際に出力する、前記動作モードの種別を示すモード情報とを比較する比較部とを、備えており、
前記比較部における比較の結果に基づいて、前記スヌープ処理を選択的に行う、
ことを特徴とするバス結合型マルチプロセッサ。
【請求項２】
前記動作モードは、
スーパバイザーモードおよびユーザモードである、
ことを特徴とする請求項１に記載のバス結合型マルチプロセッサ。
【請求項３】
各前記プロセッサは、
実行するオペレーティングシステム（ＯＳ）単位で、複数のグループにグループ分けされており、
前記レジスタに格納されるビット列には、
自己が属する前記グループに属する前記プロセッサと、自己が属する前記グループに属さない前記プロセッサとの識別が可能な第二のビットも、含まれており、
前記比較部は、
前記レジスタに格納されている前記第二のビットと、前記所定のプロセッサがバスアクセスの際に出力する、各前記プロセッサに対して固有に付与される識別情報とを比較する処理も行う、
ことを特徴とする請求項２に記載のバス結合型マルチプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、各々がキャッシュメモリおよび当該キャッシュメモリに対するスヌープ機能を有する複数のプロセッサが、同一バスを介して接続されているバス型マルチプロセッサに係る発明である。
【背景技術】
【０００２】
バス結合型マルチプロセッサでは、他のＣＰＵがバスアクセスをする度に、自己のキャッシュメモリに同一内容のデータが無いかを各々のＣＰＵが確認（監視）することにより、当該キャッシュメモリのコヒーレンシを保っている。このように、ＣＰＵが内蔵キャッシュメモリの整合性を維持するためにバスを監視することを、バススヌープ処理（または、単にスヌープ処理）と称されている。
【０００３】
また、当該バス結合型マルチプロセッサでは、ＣＰＵのアクセスに対する調停をフェアに行うために、各ＣＰＵが備えるバスインターフェースは、他のＣＰＵから出力される識別情報（ＣＰＵＩＤ）に基づいてラウンドロビンに調停している。ここで、当該ＣＰＵＩＤとは、各ＣＰＵに付された固有の識別情報である。
【０００４】
なお、上述したバス結合型マルチプロセッサは、周知の技術であり、教科書にも多く記載されている。さらに、多くの企業において、当該バス結合型マルチプロセッサが製造されている。また、マルチプロセッサに関する先行文献として特許文献１ないし８が存在する。
【０００５】
【特許文献１】特開平２−２９７６５６号公報
【特許文献２】特開平２−２３８５３４号公報
【特許文献３】特開平９−６７３０号公報
【特許文献４】特開平２−７７８７０号公報
【特許文献５】特開２００５−１４１６０６号公報
【特許文献６】特開平３−２４１４５３号公報
【特許文献７】特開平４−２７８６６０号公報
【特許文献８】特開平８−５５０８９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、スヌープ処理を行うということは、他のＣＰＵがバスアクセスをする度に、自己のキャッシュメモリに同一内容のデータが無いかを確認することになるので、同一バスに接続されているＣＰＵの数が増加すれば、その分スヌープ回数も増えることになる。このように、ＣＰＵの増加に比例してスヌープ回数も増えると当然、キャッシュメモリへのアクセス回数も増加する。
【０００７】
そして、当該キャッシュメモリアクセス回数が増えることは、回路全体の消費電力の増加を招く。また、スヌープ処理によるキャッシュメモリへのアクセスにより、通常の処理動作のためのキャッシュメモリアクセス回数が減るので、同一バスに接続されるＣＰＵの数が増えれば、ＣＰＵの処理能力も低下する。
【０００８】
上記のような問題により（つまり、ＣＰＵ処理能力等の観点により）、同一のバスに接続できるＣＰＵの数は、１つの目安として「４」程度となっている。
【０００９】
一方、独立したプログラムを各々のＣＰＵで実行した場合のように、キャッシュメモリのコヒーレンシを保つ必要の無い場合でも、ハードウェアは必ずスヌープ処理を行う。当該無駄なスヌープ処理によっても、ＣＰＵの処理能力低下、および回路全体の消費電力の増加を招く。
【００１０】
そこで、本発明は、マルチプロセッサを構成する各プロセッサ（ＣＰＵ）のスヌープ処理回数を減らすことができ、これにより、ＣＰＵの性能向上および低消費電力化を図ることができるバス結合型マルチプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記の目的を達成するために、本発明に係る請求項１に記載のバス結合型マルチプロセッサは、各々がキャッシュメモリを備え、かつ各々が前記キャッシュメモリに対するスヌープ機能を有する複数のプロセッサが、同一バスを介して接続されている、バス結合型マルチプロセッサにおいて、各前記プロセッサは、各前記プロセッサが所定の動作モードのときに、スヌープ処理を行うか否かを示す第一のビットを含む、ビット列が格納されているレジスタと、前記レジスタに格納されている前記第一のビットと、所定の前記プロセッサがバスアクセスの際に出力する、前記動作モードの種別を示すモード情報とを比較する比較部とを、備えており、前記比較部における比較の結果に基づいて、前記スヌープ処理を選択的に行う。
【発明の効果】
【００１２】
本発明の請求項１に記載のバス結合型マルチプロセッサは、各々がキャッシュメモリを備え、かつ各々が前記キャッシュメモリに対するスヌープ機能を有する複数のプロセッサが、同一バスを介して接続されている、バス結合型マルチプロセッサにおいて、各前記プロセッサは、各前記プロセッサが所定の動作モードのときに、スヌープ処理を行うか否かを示す第一のビットを含む、ビット列が格納されているレジスタと、前記レジスタに格納されている前記第一のビットと、所定の前記プロセッサがバスアクセスの際に出力する、前記動作モードの種別を示すモード情報とを比較する比較部とを、備えており、前記比較部における比較の結果に基づいて、前記スヌープ処理を選択的に行う。
【００１３】
したがって、各プロセッサは、バスアクセスを行った所定のプロセッサが所定の動作モードのときのみに、スヌープ処理を行えば良くなるので、各プロセッサにおいて、無駄なスヌープ処理を省略することができる。よって、結果として、各プロセッサの処理能力を向上させることができ、また消費電力の削減を図ることができる。
【発明を実施するための最良の形態】
【００１４】
本発明に係わるバス結合型マルチプロセッサは、同一のバスに複数のプロセッサが接続されている。そして、各プロセッサは、キャッシュメモリを備え、また、各プロセッサは、当該キャッシュメモリに対するスヌープ機能を有している。以下に説明する各実施の形態では、当該構造のバス結合型マルチプロセッサを前提として構築されている。
【００１５】
以下、この発明をその実施の形態を示す図面に基づいて具体的に説明する。なお以下の説明では、プロセッサをＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と称する。
【００１６】
＜実施の形態１＞
図１は、本実施の形態に係わるバス結合型マルチプロセッサの構成を示すブロック図である。
【００１７】
図１に示すように、８個のＣＰＵ＃０，＃１，＃２，＃３，＃４，＃５，＃６，＃７が、同一のバスＢ１に各々接続されている。また、当該バスＢ１には、別途バスインターフェースＩＦ１およびメインメモリＭ１も接続されている。ここで、全てのＣＰＵ＃０〜＃７は、同じ機能を持ち、８個の対称型マルチプロセッサとして動作する。
【００１８】
さらに、図１に示すように、各プロセッサ＃０〜＃７は、複数のグループにグループ分けされている。たとえば、各プロセッサ＃０〜＃７は、実行するオペレーティングシステム（ＯＳ）単位で、複数のグループにグループ分けされている。つまり、各グループでは、各々異なるＯＳが動いている。
【００１９】
図１に示す例では、ＣＰＵ＃０およびＣＰＵ＃１は、グループＧ１に属している。また、ＣＰＵ＃４およびＣＰＵ＃５は、グループＧ２に属している。また、ＣＰＵ＃２，ＣＰＵ＃３，ＣＰＵ＃６およびＣＰＵ＃７は、グループＧ３に属している。ここで、グループＧ１に属するＣＰＵ＃０，＃１上では、第一のＯＳが稼動される。また、グループＧ２に属するＣＰＵ＃４，＃５上では、第二のＯＳが稼動される。また、グループＧ３に属するＣＰＵ＃２，＃３，＃６，＃７上では、第三のＯＳが稼動される。
【００２０】
ここで、最近のマルチプロセッサ用の所定のＯＳでは、ＣＰＵＳＥＴと呼ばれる分散処理のメカニズムが実装されている。当該所定のＯＳの機能は、ＯＳレベルでプログラムの実行ＣＰＵを制御するもので、たとえばＣＰＵ０とＣＰＵ１とはＡグループ、ＣＰＵ２とＣＰＵ３とはＢグループというようにグルーピングできるものである。この技術は、複数のプログラムの実行において、所定のプログラムを特定のＣＰＵで実行し続ける方が性能がいい、という背景に基づいている。ＣＰＵ間を移動する（これをプロセスマイグレーションという）場合、キャッシュやＴＬＢをフラッシュする必要があるので、非常にコストが高くなる。このようなことから、複数のＣＰＵで複数のプログラムを実行するときに、上記のようにグルーピングして各プログラムを実行するというソフトウェア実行環境が整ってきている。
【００２１】
話を戻し、各ＣＰＵ＃０〜＃７は、上述したように、キャッシュメモリｍ０〜ｍ７を備えており、当該キャッシュメモリｍ０〜ｍ７に対するバススヌープ（以下、単にスヌープと称する）機能を有している。
【００２２】
各ＣＰＵ＃０〜＃７のより具体的な構成を、図２を用いて説明する。ここで、図２では、一例として、ＣＰＵ＃１の内部構造を拡大したブロック図を示している。他のＣＰＵ＃０，＃２〜＃７の内部構造は、図２の構成と同様である。したがって、以下の説明では、ＣＰＵ＃１の構成のみに言及する。
【００２３】
図２に示すように、ＣＰＵ＃１は、ＣＰＵコアｃ１、キャッシュコントローラｃｃ１、バスインターフェースｉｆ１、およびキャッシュメモリｍ１を備えている（なお、図１では、図面簡略化のため、ＣＰＵコアｃ０〜ｃ７およびキャッシュメモリｍ０〜ｍ７以外の回路は、図示を省略している）。
【００２４】
また、図２には、バスインターフェースｉｆ１およびバスＢ１付近の構成（点線の丸で囲まれた領域）の拡大図も図示している。
【００２５】
バスインターフェースｉｆ１は、自己がバスアクセスする際に、バスＢ１に対して、他のＣＰＵに対するＣＰＵアクセスアドレス、自己からのデータ、および自己の識別情報（ＣＰＵＩＤ）を送信する。これに対して、バスインターフェースｉｆ１は、他のＣＰＵがバスアクセスする際に送信される、他のＣＰＵから送信されたＣＰＵアクセスアドレス、他のＣＰＵから送信されたデータ、および他のＣＰＵから送信されたＣＰＵＩＤを受信する。
【００２６】
ここで、ＣＰＵＩＤは、各ＣＰＵ＃０〜＃７に対して固有に付されている識別情報である。つまり、各ＣＰＵ＃０〜＃７は、重複しない一意なＣＰＵＩＤを有しており、各ＣＰＵ＃０〜＃７は、バスアクセスする場合には、ＣＰＵアクセスアドレス、データの他に、当該ＣＰＵＩＤもバスＢ１に対して出力する。
【００２７】
図３は、図２で示したキャッシュコントローラｃｃ１の内部構成の詳細を示した図である。なお、ＣＰＵ＃１以外の他のＣＰＵ＃０，＃２〜＃７において、図３に図示した構成のキャッシュコントローラを備えている。したがって、以下の説明では、ＣＰＵ＃１の構成のみに言及する。
【００２８】
図３に示すように、ＣＰＵ＃１（より具体的には、キャッシュコントローラｃｃ１）は、レジスタ１０と比較部２０とを備えている。ここで、当該キャッシュコントローラｃｃ１がスヌープ機能（機構）を有している。また、当該キャッシュコントローラｃｃ１は、自ＣＰＵ＃１のキャッシュアクセス要求と、他のＣＰＵ＃０，＃２〜＃７からのバススヌープ要求の２つの要求を調停して、キャッシュメモリｍ１にアクセスする。
【００２９】
各ＣＰＵ＃０〜＃７内に配設されている各レジスタ１０には、図４に例示するビット列が各々格納されている。ここで、図４の最上段に例示したビット列は、ＣＰＵ＃０内に配設されているレジスタ１０に格納されている。また、図４の二段目に例示したビット列は、ＣＰＵ＃１内に配設されているレジスタ１０に格納されている。また、図４の三段目に例示したビット列は、ＣＰＵ＃２内に配設されているレジスタ１０に格納されている。そして、図４の最下段に例示したビット列は、ＣＰＵ＃７内に配設されているレジスタ１０に格納されている。
【００３０】
図５は、レジスタ１０に格納されるビット列の構成を説明するための図である。
【００３１】
図５に示すように、各レジスタ１０には、３２ビットのビット列が格納されている。図５に示すビット列には、自ＣＰＵ（つまり、図５に示すビット列を格納しているレジスタ１０を備えているＣＰＵ）が属するグループに属するＣＰＵと、自ＣＰＵが属するグループに属さないＣＰＵとの識別が可能なグループ識別可能ビットが含まれている。図１に示すように、ＣＰＵが８個存在する場合には、図５に示すビット列において先頭８ビット目までが、当該グループ識別可能ビットに該当する。
【００３２】
図５において、先頭のビットは、自ＣＰＵがＣＰＵ＃０と同じグループに属するか否かを種別するためのビットであり、自ＣＰＵがＣＰＵ＃０と同じグループに属する場合には、当該先頭ビットが「１」となる。これに対して、自ＣＰＵがＣＰＵ＃０と異なるグループに属する場合には、当該先頭ビットが「０」となる。
【００３３】
また、図５において、２番目のビットは、自ＣＰＵがＣＰＵ＃１と同じグループに属するか否かを種別するためのビットであり、自ＣＰＵがＣＰＵ＃１と同じグループに属する場合には、当該先頭ビットが「１」となる。これに対して、自ＣＰＵがＣＰＵ＃１と異なるグループに属する場合には、当該先頭ビットが「０」となる。また、図５において、３番目のビットは、自ＣＰＵがＣＰＵ＃２と同じグループに属するか否かを種別するためのビットであり、自ＣＰＵがＣＰＵ＃２と同じグループに属する場合には、当該先頭ビットが「１」となる。これに対して、自ＣＰＵがＣＰＵ＃２と異なるグループに属する場合には、当該先頭ビットが「０」となる。
【００３４】
さらに、図５において、８番目のビットは、自ＣＰＵがＣＰＵ＃７と同じグループに属するか否かを種別するためのビットであり、自ＣＰＵがＣＰＵ＃７と同じグループに属する場合には、当該先頭ビットが「１」となる。これに対して、自ＣＰＵがＣＰＵ＃７と異なるグループに属する場合には、当該先頭ビットが「０」となる。
【００３５】
上記説明を考慮して、図４を参照する。
【００３６】
図４において、ＣＰＵ＃０内に配設されているレジスタ１０に格納されている、ビット列（図４の最上段）に着目する。すると、本実施の形態の場合、ＣＰＵ＃０は、ＣＰＵ＃１のみと同じグループに属するので、当該レジスタ１０に格納されるビット列は、図４の最上段に示すようになる。ここで、図４において、自ＣＰＵ＃０は当然、グループＧ１に属するので、先頭ビットにおいて「１」がセットされる。したがって、図４に示す最上段のビット列において、先頭ビットと２番目のビットが「１」となり、３番目から８番目のビットは「０」となる。
【００３７】
また、たとえば、ＣＰＵ＃４内に配設されているレジスタ１０に格納されている、ビット列（図４の５段目）に着目する。すると、本実施の形態の場合、ＣＰＵ＃４は、ＣＰＵ＃５のみと同じグループに属するので、当該レジスタ１０に格納されるビット列は、図４の５段目に示すようになる。ここで、図４において、自ＣＰＵ＃４は当然、グループＧ２に属するので、５番目のビットにおいて「１」がセットされる。したがって、図４に示す５段目のビット列において、５番目と６番目のビットが「１」となり、先頭ビットから４番目のビット、および７，８番目のビットは「０」となる。
【００３８】
同様にして別の例について説明すると、ＣＰＵ＃３内に配設されているレジスタ１０に格納されている、ビット列（図４の４段目）に着目する。すると、本実施の形態の場合、ＣＰＵ＃３は、ＣＰＵ＃２，＃６、＃７と同じグループに属するので、当該レジスタ１０に格納されるビット列は、図４の４段目に示すようになる。ここで、図４において、自ＣＰＵ＃３は当然、グループＧ３に属するので、４番目のビットにおいて「１」がセットされる。したがって、図４の４段目のビット列において、３，４，７，８番目のビットが「１」となり、１，２，５，６番目のビットは「０」となる。
【００３９】
図４に示す各ビット列において、上記で説明したビット列以外も図１との関係において同様の説明が可能である。よって、ここでは、図４に示した他のビット列の説明は省略する。
【００４０】
次に、比較部２０について説明する。
【００４１】
比較部２０では、所定のＣＰＵがバスアクセスの際に出力するＣＰＵＩＤと、レジスタ１０に格納されている上記第一のビットとを比較する。以下、図３を用いて当該比較部２０の動作について詳細に説明する。ここで、図３は、上述の通り、ＣＰＵ＃１であるとする。したがって、図３に示すレジスタ１０には、図４の２段目のビット列が格納されている。
【００４２】
まず、ＣＰＵ＃０がスヌープ要求を出している場合について説明する。
【００４３】
ＣＰＵ＃０からスヌープ要求が出されると（つまり、ＣＰＵ＃０がバスアクセスを行うと）、図３に示すバスインターフェースｉｆ１はこれを受信し、ＡＮＤ回路３０の一方の入力部に「１」の信号を出力する。また、ＣＰＵ＃０がバスアクセスを行うと、同時に、当該ＣＰＵ＃０のＣＰＵＩＤも送信される。よって、図３に示すバスインターフェースｉｆ１は、当該ＣＰＵ＃０のＣＰＵＩＤも受信し、当該ＣＰＵＩＤを図３に示すデコーダ２１に向けて送信する。
【００４４】
ＣＰＵ＃０のＣＰＵＩＤを受信したデコーダ２１は、ＣＰＵ＃０に対応する出力部から「１」の信号を出力し、他のＣＰＵ＃１〜＃７に対応する出力部から各々「０」の信号を出力する。
【００４５】
次に、当該デコーダ２１の後段に配設されている複数のＡＮＤ回路２２において、各ＡＮＤ回路２２では、デコーダ２１の一の出力部から送信されてくる信号と、レジスタ１０に格納されているビット列に含まれる第一のビットとの論理計算を行う。
【００４６】
たとえば、一のＡＮＤ回路２２ａに着目すると、当該ＡＮＤ回路２２ａの一方の入力部は、デコーダ２１のＣＰＵ＃０に対応する出力部と接続されている。したがって、当該ＡＮＤ回路２２ａの一方の入力部には、今の場合、「１」が入力される。他方、ＡＮＤ回路２２ａの他方の入力部は、レジスタ１０に格納されているビット列の先頭ビットに接続されている。ここで、レジスタ１０に格納されているビット列は図４の２段目である。よって、ＡＮＤ回路２２ａでは、一方の入力部入力された「１」の信号と、当該ビット列の先頭ビット「１」との論理計算を行う。当該論理計算の結果は、「１」である。
【００４７】
また、他のＡＮＤ回路２２ｂに着目すると、当該ＡＮＤ回路２２ｂの一方の入力部は、デコーダ２１のＣＰＵ＃７に対応する出力部と接続されている。したがって、当該ＡＮＤ回路２２ｂの一方の入力部には、今の場合、「０」が入力される。他方、ＡＮＤ回路２２ｂの他方の入力部は、レジスタ１０に格納されているビット列の先頭から８番目のビットに接続されている。ここで、レジスタ１０に格納されているビット列は図４の２段目である。よって、ＡＮＤ回路２２ａでは、一方の入力部入力された「０」の信号と、当該ビット列の先頭ビット「０」との論理計算を行う。当該論理計算の結果は、「０」である。
【００４８】
同様の議論から、ＣＰＵ＃０がスヌープ要求を出力している場合には、他のＡＮＤ回路（図３では省略）は、「０」の信号が出力されることが分かる。
【００４９】
したがって、ＯＲ回路２３の論理計算結果は、「１」となり、ＡＮＤ回路３０の他方の入力部には、当該「１」の信号が入力する。当該複数のＡＮＤ回路２２および一のＯＲ回路２３を用いた論理計算が、比較部２０における比較処理であると把握できる。
【００５０】
なお、ＡＮＤ回路３０の出力部からは、今の場合、「１」の信号が出力され、当該「１」の信号がセレクタ４０の入力部に入力される。ここで、セレクタ４０は、自ＣＰＵ＃１のアクセス要求よりも、他のＣＰＵからのスヌープ要求を優先するように構成されている。
【００５１】
以上により今の場合、ＣＰＵ＃１は、比較部２０における比較の結果、受信側ＣＰＵ＃１とＣＰＵ＃０と同じグループＧ１に属していると判定したので、当該ＣＰＵ＃１は、自己のキャッシュメモリｍ１に対してスヌープ処理を行う。
【００５２】
次に、たとえばＣＰＵ＃７がスヌープ要求を出している場合について説明する。
【００５３】
ＣＰＵ＃７からスヌープ要求が出されると（つまり、ＣＰＵ＃７がバスアクセスを行うと）、図３に示すバスインターフェースｉｆ１はこれを受信し、ＡＮＤ回路３０の一方の入力部に「１」の信号を出力する。また、ＣＰＵ＃７がバスアクセスを行うと、同時に、当該ＣＰＵ＃７のＣＰＵＩＤも送信される。よって、図３に示すバスインターフェースｉｆ１は、当該ＣＰＵ＃７のＣＰＵＩＤも受信し、当該ＣＰＵＩＤを図３に示すデコーダ２１に向けて送信する。
【００５４】
ＣＰＵ＃７のＣＰＵＩＤを受信したデコーダ２１は、ＣＰＵ＃７に対応する出力部から「１」の信号を出力し、他のＣＰＵ＃０〜＃６に対応する出力部から各々「０」の信号を出力する。
【００５５】
次に、当該デコーダ２１の後段に配設されている複数のＡＮＤ回路２２において、各ＡＮＤ回路２２では、デコーダ２１の一の出力部から送信されてくる信号と、レジスタ１０に格納されているビット列に含まれる第一のビットとの論理計算を行う。
【００５６】
たとえば、一のＡＮＤ回路２２ａに着目すると、当該ＡＮＤ回路２２ａの一方の入力部は、デコーダ２１のＣＰＵ＃０に対応する出力部と接続されている。したがって、当該ＡＮＤ回路２２ａの一方の入力部には、今の場合、「０」が入力される。他方、ＡＮＤ回路２２ａの他方の入力部は、レジスタ１０に格納されているビット列の先頭ビットに接続されている。ここで、レジスタ１０に格納されているビット列は図４の２段目である。よって、ＡＮＤ回路２２ａでは、一方の入力部入力された「０」の信号と、当該ビット列の先頭ビット「１」との論理計算を行う。当該論理計算の結果は、「０」である。
【００５７】
また、他のＡＮＤ回路２２ｂに着目すると、当該ＡＮＤ回路２２ｂの一方の入力部は、デコーダ２１のＣＰＵ＃７に対応する出力部と接続されている。したがって、当該ＡＮＤ回路２２ｂの一方の入力部には、今の場合、「１」が入力される。他方、ＡＮＤ回路２２ｂの他方の入力部は、レジスタ１０に格納されているビット列の先頭から８番目のビットに接続されている。ここで、レジスタ１０に格納されているビット列は図４の２段目である。よって、ＡＮＤ回路２２ａでは、一方の入力部入力された「１」の信号と、当該ビット列の先頭ビット「０」との論理計算を行う。当該論理計算の結果は、「０」である。
【００５８】
同様の議論から、ＣＰＵ＃７がスヌープ要求を出力している場合には、他のＡＮＤ回路（図３では省略）は、「０」の信号が出力されることが分かる。
【００５９】
したがって、ＯＲ回路２３の論理計算結果は、「０」となり、ＡＮＤ回路３０の他方の入力部には、当該「０」の信号が入力する。当該複数のＡＮＤ回路２２および一のＯＲ回路２３を用いた論理計算が、比較部２０における比較処理であると把握できる。
【００６０】
なお、ＡＮＤ回路３０の出力部からは、今の場合、「０」の信号が出力され、当該「０」の信号がセレクタ４０の入力部に入力される。
【００６１】
以上により今の場合、ＣＰＵ＃１は、比較部２０における比較の結果、受信側ＣＰＵ＃１とＣＰＵ＃７とは各々異なるグループに属していると判定したので、当該ＣＰＵ＃１は、自己のキャッシュメモリｍ１に対してスヌープ処理を行わない。
【００６２】
これまでの説明から分かるように、レジスタ１０と比較部２０とで、スヌープ対象のＣＰＵを識別している。
【００６３】
従来の技術に係わるバス結合型マルチプロセッサの場合には、他のＣＰＵがバスアクセスした際に、自ＣＰＵでは当該バスアクセスされたデータが共有データなのか非共有データなのか判別できなかった。したがって、当該自ＣＰＵでは、他のＣＰＵにおいて異なるＯＳが稼動させた場合でもハードウェアはそれを検知することができないため、他のＣＰＵからの全てのバスアクセスをスヌープ処理していた。つまり、各ＣＰＵ＃０〜＃７は、他のＣＰＵにおいて稼動しているソフトウェアの内容（共有、非共有）を知ること無く、スヌープ処理をしていた。
【００６４】
これにより、当該従来の技術に係わるバス結合型マルチプロセッサは、各ＣＰＵの処理能力が下がり、また消費電力が増加するという問題を有していた。
【００６５】
そこで、本実施の形態に係わるバス結合型マルチプロセッサは、ＣＰＵ＃０〜＃７がバスアクセスを行う際には、バスＢ１に自己のＣＰＵＩＤを出力し、スヌープ処理する側のＣＰＵ＃０〜＃７も、当該出力したＣＰＵＩＤを監視（受信）している。さらに、各ＣＰＵ＃０〜＃７は、他のＣＰＵが自ＣＰＵと同一のグループＧ１〜Ｇ３に属するか否か（つまり、共有関係にあるグループに属するか否か）を識別するビット列（特に、第一のビット）を格納するレジスタ１０を持ち、同一グループに属する他のＣＰＵからのアクセスだと自ＣＰＵが判断した場合のみ、当該自ＣＰＵはスヌープ動作を行う。
【００６６】
したがって、たとえば上述のようなＣＰＵ＃０〜＃７のグループ分けを行い（図１参照）、各グループＧ１〜Ｇ３内において各ユーザプログラムが動作している場合、ＣＰＵ＃０は、ＣＰＵ＃１のバスアクセスのみをスヌープすれば良く、ＣＰＵ＃２〜＃７がバスアクセスしているときは、ＣＰＵ＃０はキャッシュを引かない（スヌープを行わない）。そのため、キャッシュメモリｍ０に対するアクセスの空き時間が増えるので、ＣＰＵ＃０の処理性能が向上する（なお、他のＣＰＵ＃１〜＃７においても、同様の説明により処理性能が向上することは言うまでも無い）。
【００６７】
また、上述のように、各ＣＰＵ＃０〜＃７は、全てのＣＰＵのバスアクセスに対して、キャッシュメモリｍ０〜ｍ７をアクセスする必要がなくなるので（つまり、上述のようにスヌープ処理回数が従来の場合と比較して減少するので）、各ＣＰＵ＃０〜＃７は、低消費電力の削減が可能となる。
【００６８】
なお、上述のように、各ＣＰＵのグループ分けをＯＳプログラム単位で行う場合には、それぞれのグループＧ１〜Ｇ３間でデータを共有する必要が基本的に無いので、本実施の形態に係わるバス結合型マルチプロセッサは有効である。なお、前記において、異なるＯＳ間でのデータ共有が必要になる場合には、共有メモリを介さずにＣＰＵ間割込みを利用すれば良い。
【００６９】
＜実施の形態２＞
本実施の形態に係わるバス結合型マルチプロセッサは、実施の形態１を基本として、さらに各ＣＰＵの動作モードに依存して、各ＣＰＵがスヌープ処理を行うか否かを判定することができる。
【００７０】
したがって、本実施の形態に係わるバス結合型マルチプロセッサにおいても、図１に示した構成を有している。つまり、８個のＣＰＵ＃０，＃１，＃２，＃３，＃４，＃５，＃６，＃７が、同一のバスＢ１に各々接続されている。また、当該バスＢ１には、別途バスインターフェースＩＦ１およびメインメモリＭ１も接続されている。ここで、全てのＣＰＵ＃０〜＃７は、同じ機能を持ち、８個の対称型マルチプロセッサとして動作する。
【００７１】
また、実施の形態１で説明したように、各プロセッサ＃０〜＃７は、複数のグループにグループ分けされている。たとえば、各プロセッサ＃０〜＃７は、実行するオペレーティングシステム（ＯＳ）単位で、複数のグループにグループ分けされている。つまり、各グループでは、各々異なるＯＳが動いている。
【００７２】
また、各ＣＰＵ＃０〜＃７のより具体的な構成は、図６の通りである。ここで、図６の構成と図２の構成とは、以下の点を除いて同じである。なお、図６では、図２と同様に、一例として、ＣＰＵ＃１の内部構造を拡大したブロック図を示している。他のＣＰＵの内部構造は、図６の構成と同様である。したがって、以下の説明では、ＣＰＵ＃１の構成のみに言及する。
【００７３】
さて、上述した図２に示す構成と図６に示す構成との異なる点とは、図６のバスインターフェースｉｆ１およびバスＢ１付近の構成（点線の丸で囲まれた領域）の拡大図に示されているように、各バスインターフェースｉｆ１は、自己がバスアクセスする際に、バスＢ１に対して、他のＣＰＵに対するＣＰＵアクセスアドレス、自己からのデータ、および自己のＣＰＵＩＤを送信する他に、さらに自己の動作モードに関するモード情報を送信している。
【００７４】
また、各バスインターフェースｉｆ１は、他のＣＰＵがバスアクセスする際に送信される、他のＣＰＵから送信されたＣＰＵアクセスアドレス、他のＣＰＵから送信されたデータ、および他のＣＰＵから送信されたＣＰＵＩＤを受信する他に、さらに、他のＣＰＵから送信される当該他のＣＰＵの動作モードに関するモード情報を受信する。
【００７５】
ここで、各ＣＰＵ＃０〜＃７の動作モードとして、スーパバイザモードとユーザモードとがある。なお、当該各モードは、周知の動作モードであるので、ここでの説明は省略する。
【００７６】
なお、図６に示したように、自己が出力した、ＣＰＵアクセスアドレス、データ、ＣＰＵＩＤおよびモード情報は、当該自己のＣＰＵに帰還させても良い。
【００７７】
また、本実施の形態に係わる構成と実施の形態１に係わる構成とは、比較部の構成およびレジストに格納されるビット列の構成が異なる（図７，８参照）。
【００７８】
図７は、図６で示したキャッシュコントローラｃｃ１の内部構成の詳細を示した図である。なお、ＣＰＵ＃１以外の他のＣＰＵ＃０，＃２〜＃７において、図７に図示した構成のキャッシュコントローラを備えている。
【００７９】
図７に示すように、ＣＰＵ＃１（より具体的には、キャッシュコントローラｃｃ１）は、レジスタ１５と比較部１７とを備えている。ここで、当該キャッシュコントローラｃｃ１がスヌープ機能（機構）を有している。また、当該キャッシュコントローラｃｃ１は、自ＣＰＵ＃１のキャッシュアクセス要求と、他のＣＰＵ＃０，＃２〜＃７からのバススヌープ要求の２つの要求を調停して、キャッシュメモリｍ１にアクセスする。
【００８０】
各ＣＰＵ＃０〜＃７内に配設されている各レジスタ１５には、第一のビットと第二のビットを含むビット列が格納されている。ここで、第一のビットとは、各ＣＰＵ＃０〜＃７が所定の動作モード（スーパバイザーモードおよびユーザモード）のときに、スヌープ処理を行うか否かを示すビットのことである。また、第二のビットとは、実施の形態１で説明した識別可能ビットと同義のビットであり、すなわち自ＣＰＵが属するグループＧ１〜Ｇ３に属する他のＣＰＵと、自ＣＰＵが属するグループＧ１〜Ｇ３に属さない他のＣＰＵとの識別が可能なビットである。
【００８１】
たとえば、各レジスタ１５には、図８に例示するビット列が格納されている。ここで、図８の最上段に例示したビット列は、ＣＰＵ＃０内に配設されているレジスタ１５に格納されている。また、図８の二段目に例示したビット列は、ＣＰＵ＃１内に配設されているレジスタ１５に格納されている。また、図８の三段目に例示したビット列は、ＣＰＵ＃２内に配設されているレジスタ１５に格納されている。そして、図８の最下段に例示したビット列は、ＣＰＵ＃７内に配設されているレジスタ１５に格納されている。
【００８２】
図９は、レジスタ１５に格納されるビット列の構成を説明するための図である。
【００８３】
図９に示すように、各レジスタ１５には、３２ビットのビット列が格納されている。図９に示すビット列には、上述したように、各ＣＰＵ＃０〜＃７が所定の動作モード（スーパバイザーモードおよびユーザモード）のときに、スヌープ処理を行うか否かを示す第一のビットと、自ＣＰＵ（つまり、図９に示すビット列を格納しているレジスタ１５を備えているＣＰＵ）が属するグループＧ１〜Ｇ３に属する他のＣＰＵと、自ＣＰＵが属するグループＧ１〜Ｇ３に属さない他のＣＰＵとの識別が可能なグループ第二のビットとが含まれている。
【００８４】
図９において、先頭ビットから４ビット目までは、ＣＰＵ＃０との関係において規定されるビットである。また、５ビット目から８ビット目までは、ＣＰＵ＃１との関係において規定されるビットである。また、９ビット目から１２ビット目までは、ＣＰＵ＃２との関係において規定されるビットである。さらに、２９ビット目から３２ビット目までは、ＣＰＵ＃７との関係において規定されるビットである。
【００８５】
より具体的に説明すると、図９において、先頭ビットは、当該図９に示されているビット列を格納したレジスタ１５を有するＣＰＵが、ＣＰＵ＃０と同じグループに属するか否かを識別するためのビットである（同じグループに属する場合「１」となり、異なるグループに属する場合「０」となる）。また、２ビット目は、ＣＰＵ＃０がスーパバイザモードにてバスアクセスした場合、当該図９に示されているビット列を格納したレジスタ１５を有するＣＰＵが、スヌープ処理を行うか否かを識別するためのビットである（当該場合において、スヌープする場合「１」となり、スヌープしない場合「０」となる）。また、３ビット目は、ＣＰＵ＃０がユーザモードにてバスアクセスした場合、当該図９に示されているビット列を格納したレジスタ１５を有するＣＰＵが、スヌープ処理を行うか否かを識別するためのビットである（当該場合において、スヌープする場合「１」となり、スヌープしない場合「０」となる）。なお、図９に示す例では、４ビット目は未使用ビットである。
【００８６】
同様に、図９において、５ビット目は、当該図９に示されているビット列を格納したレジスタ１５を有するＣＰＵが、ＣＰＵ＃１と同じグループに属するか否かを識別するためのビットである（同じグループに属する場合「１」となり、異なるグループに属する場合「０」となる）。また、６ビット目は、ＣＰＵ＃１がスーパバイザモードにてバスアクセスした場合、当該図９に示されているビット列を格納したレジスタ１５を有するＣＰＵが、スヌープ処理を行うか否かを識別するためのビットである（当該場合において、スヌープする場合「１」となり、スヌープしない場合「０」となる）。また、７ビット目は、ＣＰＵ＃１がユーザモードにてバスアクセスした場合、当該図９に示されているビット列を格納したレジスタ１５を有するＣＰＵが、スヌープ処理を行うか否かを識別するためのビットである（当該場合において、スヌープする場合「１」となり、スヌープしない場合「０」となる）。なお、図９に示す例では、８ビット目は未使用ビットである。
【００８７】
上記記載から図９の他のビットについても同様に把握できる。したがって、図９において、２９ビット目は、当該図９に示されているビット列を格納したレジスタ１５を有するＣＰＵが、ＣＰＵ＃７と同じグループに属するか否かを識別するためのビットであり（同じグループに属する場合「１」となり、異なるグループに属する場合「０」となる）、３０ビット目は、ＣＰＵ＃７がスーパバイザモードにてバスアクセスした場合、当該図９に示されているビット列を格納したレジスタ１５を有するＣＰＵが、スヌープ処理を行うか否かを識別するためのビットであり（当該場合において、スヌープする場合「１」となり、スヌープしない場合「０」となる）、３１ビット目は、ＣＰＵ＃７がユーザモードにてバスアクセスした場合、当該図９に示されているビット列を格納したレジスタ１５を有するＣＰＵが、スヌープ処理を行うか否かを識別するためのビットであり（当該場合において、スヌープする場合「１」となり、スヌープしない場合「０」となる）、３２ビット目は未使用ビットである、ということが理解できる。
【００８８】
ここで、本実施の形態では図１０を参照して、グループＧ１において、各ＣＰＵ＃０，＃１間において、一方のＣＰＵから他方のＣＰＵに対してスーパバイザモードによるバスアクセスがある場合には、当該ＣＰＵ＃０，＃１は共にスヌープ処理を行うものとする。換言すれば、各ＣＰＵ＃０，＃１において、他のＣＰＵ＃２〜＃７からスーパバイザモードによるバスアクセスがあったとしても、スヌープ処理を行わないものとする。また、ＣＰＵ＃０は、他のＣＰＵ＃１〜＃７からユーザモードによるバスアクセスがある場合には、スヌープ処理を行わないものとする。また、ＣＰＵ＃１は、他のＣＰＵ＃０，＃２〜＃７からユーザモードによるバスアクセスがある場合には、スヌープ処理を行わないものとする。
【００８９】
また、グループＧ２において、各ＣＰＵ＃４，＃５間において、一方のＣＰＵから他方のＣＰＵに対してスーパバイザモードによるバスアクセスがある場合には、当該ＣＰＵ＃４，＃５は共にスヌープ処理を行うものとする。換言すれば、各ＣＰＵ＃４，＃５において、他のＣＰＵ＃０〜＃３，＃６，＃７からスーパバイザモードによるバスアクセスがあったとしても、スヌープ処理を行わないものとする。また、ＣＰＵ＃４は、他のＣＰＵ＃０〜＃３，＃５〜＃７からユーザモードによるバスアクセスがある場合には、スヌープ処理を行わないものとする。また、ＣＰＵ＃５は、他のＣＰＵ＃０〜＃４，＃６，＃７からユーザモードによるバスアクセスがある場合には、スヌープ処理を行わないものとする。
【００９０】
さらに、グループＧ３において、各ＣＰＵ＃２，＃３，＃６，＃７間において、一方のＣＰＵから他方のＣＰＵに対してスーパバイザモードによるバスアクセスがある場合には、当該ＣＰＵ＃２，＃３，＃６，＃７はスヌープ処理を行うものとする。換言すれば、各ＣＰＵ＃２，＃３，＃６，＃７において、他のＣＰＵ＃０，＃１，＃４，＃５からスーパバイザモードによるバスアクセスがあったとしても、スヌープ処理を行わないものとする。また、各ＣＰＵ＃２，＃３間において、一方のＣＰＵから他方のＣＰＵに対してユーザモードによるバスアクセスがある場合には、当該ＣＰＵ＃２，＃３はスヌープ処理を行うものとする。換言すれば、各ＣＰＵ＃２，＃３において、他のＣＰＵ＃０，＃１，＃４〜＃７からユーザモードによるバスアクセスがあったとしても、スヌープ処理を行わないものとする。また、ＣＰＵ＃６は、他のＣＰＵ＃０〜＃５，＃７からユーザモードによるバスアクセスがある場合には、スヌープ処理を行わないものとする。さらに、ＣＰＵ＃７は、他のＣＰＵ＃０〜＃６からユーザモードによるバスアクセスがある場合には、スヌープ処理を行わないものとする。
【００９１】
つまり、一のＣＰＵにおいて、同じグループに属するＣＰＵからのスーパバイザモードによるバスアクセスがあった場合には、スヌープ処理を行う。また、一のＣＰＵにおいて、他のＣＰＵからユーザモードによるバスアクセスがあっても、スヌープ処理を行わない。ただし、図１０のグループｇ１（つまり、ＣＰＵ＃２，ＣＰＵ＃３間）においては、一方のＣＰＵから他方のＣＰＵに対してユーザモードによるバスアクセスがあった場合には、スヌープ処理を行う。
【００９２】
上記前提を考慮すると、各レジスタ１５に格納されるビット列は図８に例示した通りになる。
【００９３】
たとえば、本実施の形態の場合、ＣＰＵ＃１は、ＣＰＵ＃０のみと同じグループに属するので、図８の２段目に示すように、先頭ビットは「１」となる。また、ＣＰＵ＃１は、ＣＰＵ＃０がスーパバイザモードによるバスアクセスがある場合にはスヌープ処理を行うので、２ビット目は「１」となる。また、ＣＰＵ＃１は、ＣＰＵ＃０がユーザモードによるバスアクセスがあったとしてもスヌープ処理を行わないので、３ビット目は「０」となる。なお、ＣＰＵ＃１は、当然自ＣＰＵ＃１と同じグループに属し、また、自ＣＰＵ＃１がスーパバイザモードによるバスアクセスをした場合も、自ＣＰＵ＃１がユーザモードによるバスアクセスをした場合も、当然スヌープ処理を行うので、図８の２段目に示すように、５ビット目から７ビット目までは「１」となる。また、ＣＰＵ＃１は、ＣＰＵ＃２〜＃７と異なるグループに属しており、ＣＰＵ＃２〜＃７からスーパバイザモードによるバスアクセスがあっても、ＣＰＵ＃２〜＃７からユーザモードによるバスアクセスがあっても、スヌープ処理は行わないので、図８の２段目に示すように、９ビット目から３２ビット目までの全ビットは「０」となる。
【００９４】
同様に、たとえば、本実施の形態の場合、ＣＰＵ＃２は、ＣＰＵ＃３，＃６，＃７と同じグループに属するので、図８の３段目に示すように、９，１３，２５，２９ビット目は「１」となる。また、ＣＰＵ＃２は、ＣＰＵ＃２，３，６，７がスーパバイザモードによるバスアクセスがある場合にはスヌープ処理を行うので、１０，１４，２６，３０ビット目は「１」となる。また、ＣＰＵ＃２は、ＣＰＵ＃２，＃３からユーザモードによるバスアクセスがあった場合にはスヌープ処理を行うので、１１，１５ビット目は「１」となる。なお、ＣＰＵ＃２は、ＣＰＵ＃０，＃１，＃４，＃５と異なるグループに属しており、ＣＰＵ＃０，＃１，＃４〜＃７からスーパバイザモードによるバスアクセスがあっても、ＣＰＵ＃０，＃１，＃４〜＃７からユーザモードによるバスアクセスがあっても、スヌープ処理は行わないので、図８の３段目に示すように、他の全てのビットは「０」となる。
【００９５】
図８に示す各ビット列において、上記で説明したビット列以外も同様の説明が可能である。よって、ここでは、図８に示した他のビット列の説明は省略する。
【００９６】
次に、比較部１７について説明する。
【００９７】
本実施の形態に係わる比較部１７では、所定のＣＰＵ＃０〜＃７がバスアクセスの際に出力する、動作モードの種別を示すモード情報と、レジスタ１５に格納されている第一のビットとを比較する（第一の比較処理と称する）。さらに、当該比較部１７は、所定のＣＰＵ＃０〜＃７がバスアクセスの際に出力する、各ＣＰＵ＃０〜＃７に対して固有に付与される識別情報（ＣＰＵＩＤ）と、レジスタ１５に格納されている第二のビットとを比較する（第二の比較処理と称する）。
【００９８】
上記第一の比較処理の結果、図７の構成を有する前記モード情報を受信した受信側ＣＰＵ＃１が（つまり、当該ＣＰＵ＃１を構成する比較部１７が）、所定のＣＰＵ＃０〜＃７が前記モード信号が示す種別の動作モードのときにスヌープ処理を行うと判定した場合には、当該比較部１７は、「１」の信号を後段のＡＮＤ回路３０に対して出力する。
【００９９】
さらに、上記第二の比較処理の結果、前記ＣＰＵＩＤを受信した前記受信側ＣＰＵ＃１が、当該受信側ＣＰＵ＃１と所定のＣＰＵ＃０〜＃７とが同じ前記グループに属していると判定した場合には、当該比較部１７は、上記とは別に「１」の信号を後段のＡＮＤ回路３０に対して出力する。
【０１００】
たとえば、ＣＰＵ＃０がスーパバイザモードによるバスアクセスを行った場合、当該ＣＰＵ＃０は、当該ＣＰＵ＃０のＣＰＵＩＤおよびスーパバイザモードのモード情報をバスＢ１に対して出力する。当該ＣＰＵＩＤおよび当該モード情報を受信したＣＰＵ＃１では、比較部１７において、当該受信したＣＰＵＩＤ、モード情報および自ＣＰＵ＃１が有するレジスタ１５のビット列を比較する。
【０１０１】
ここで、上述の通り、ＣＰＵ＃０がスーパバイザモードによるバスアクセスを行った場合には、ＣＰＵ＃１の比較部１７では、スヌープ処理を行うとの判定するので、第一の比較処理の結果、当該比較部１７は、「１」の信号をＡＮＤ回路３０対して出力する。
【０１０２】
また、上述の通り、ＣＰＵ＃０とＣＰＵ＃１とは同じグループＧ１に属するので、第二の比較処理の結果、当該比較部１７は、別途「１」の信号をＡＮＤ回路３０対して出力する。
【０１０３】
なお、他のスヌープ要求が送信された場合、ＡＮＤ回路３０には「１」のスヌープ要求信号が入力される。したがって、今の場合、ＡＮＤ回路３０の３つの入力部には、各々「１」の信号が入力されるので、当該ＡＮＤ回路３０からセレクタ４０に対して「１」の信号が出力される。ここで、セレクタ４０は、自ＣＰＵ＃１のアクセス要求よりも、他のＣＰＵからのスヌープ要求を優先するように構成されている。
【０１０４】
以上により今の場合、ＣＰＵ＃１は、第一のおよび第二の比較処理の結果、ＣＰＵ＃１とＣＰＵ＃０とが同じグループＧ１に属していると判定し、かつ、ＣＰＵ＃０がスーパバイザモードのときにスヌープ処理を行うと判定したので、当該ＣＰＵ＃１は、スヌープ処理を行う。つまり、当該ＣＰＵ＃１は、自己のキャッシュメモリｍ１に対してスヌープ処理を行う。
【０１０５】
また、たとえば、ＣＰＵ＃０がユーザモードによるバスアクセスを行った場合、当該ＣＰＵ＃０は、当該ＣＰＵ＃０のＣＰＵＩＤおよびユーザモードのモード情報をバスＢ１に対して出力する。当該ＣＰＵＩＤおよび当該モード情報を受信したＣＰＵ＃１では、比較部１７において、当該受信したＣＰＵＩＤ、モード情報および自ＣＰＵ＃１が有するレジスタ１５のビット列を比較する。
【０１０６】
ここで、上述の通り、ＣＰＵ＃０がユーザモードによるバスアクセスを行った場合には、ＣＰＵ＃１の比較部１７では、スヌープ処理を行わないと判定するので、第一の比較処理の結果、当該比較部１７は、「０」の信号をＡＮＤ回路３０対して出力する。
【０１０７】
また、上述の通り、ＣＰＵ＃０とＣＰＵ＃１とは同じグループＧ１に属するので、第二の比較処理の結果、当該比較部１７は、別途「１」の信号をＡＮＤ回路３０対して出力する。
【０１０８】
なお、他のスヌープ要求が送信された場合、ＡＮＤ回路３０には「１」のスヌープ要求信号が入力される。したがって、今の場合、ＡＮＤ回路３０の２つの入力部には、各々「１」の信号が入力され、他の１の入力部には「０」の信号が入力されるので、当該ＡＮＤ回路３０からセレクタ４０に対して「０」の信号が出力される。
【０１０９】
以上により今の場合、ＣＰＵ＃１は、第一のおよび第二の比較処理の結果、ＣＰＵ＃１とＣＰＵ＃０とが同じグループＧ１に属していると判定し、かつ、ＣＰＵ＃０がユーザモードのときにスヌープ処理を行わないと判定したので、当該ＣＰＵ＃１は、スヌープ処理を行わない。つまり、当該ＣＰＵ＃１は、自己のキャッシュメモリｍ１に対してスヌープ処理を行わない。
【０１１０】
また、たとえば、ＣＰＵ＃５がスーパバイザモードもしくはユーザモードによるバスアクセスを行った場合、当該ＣＰＵ＃５は、当該ＣＰＵ＃５のＣＰＵＩＤおよびスーパバイザモードもしくはユーザモードのモード情報をバスＢ１に対して出力する。当該ＣＰＵＩＤおよび当該モード情報を受信したＣＰＵ＃１では、比較部１７において、当該受信したＣＰＵＩＤ、モード情報および自ＣＰＵ＃１が有するレジスタ１５のビット列を比較する。
【０１１１】
ここで、上述の通り、ＣＰＵ＃５がスーパバイザモードもしくはユーザモードによるバスアクセスを行った場合には、ＣＰＵ＃１の比較部１７では、スヌープ処理を行わないと判定するので、第一の比較処理の結果、当該比較部１７は、「０」の信号をＡＮＤ回路３０対して出力する。
【０１１２】
また、上述の通り、ＣＰＵ＃５とＣＰＵ＃１とは異なるグループＧ１に属するので、第二の比較処理の結果、当該比較部１７は、別途「０」の信号をＡＮＤ回路３０対して出力する。
【０１１３】
なお、他のスヌープ要求が送信された場合、ＡＮＤ回路３０には「１」のスヌープ要求信号が入力される。したがって、今の場合、ＡＮＤ回路３０の２つの入力部には、各々「０」の信号が入力され、他の１の入力部には「１」の信号が入力されるので、当該ＡＮＤ回路３０からセレクタ４０に対して「０」の信号が出力される。
【０１１４】
以上により今の場合、ＣＰＵ＃１は、第一のおよび第二の比較処理の結果、ＣＰＵ＃１とＣＰＵ＃５とが異なるグループに属していると判定し、さらに、ＣＰＵ＃５がスーパバイザモードもしくはユーザモードのときにスヌープ処理を行わないと判定したので、当該ＣＰＵ＃１は、スヌープ処理を行わない。つまり、当該ＣＰＵ＃１は、自己のキャッシュメモリｍ１に対してスヌープ処理を行わない。
【０１１５】
当該比較部１７の処理およびスヌープ処理を行うか否かの判定動作の過誤を防ぐために、他のケースに置き換えて説明を行う。
【０１１６】
たとえば、ＣＰＵ＃７がスーパバイザモードによるバスアクセスを行った場合、当該ＣＰＵ＃７は、当該ＣＰＵ＃７のＣＰＵＩＤおよびスーパバイザモードのモード情報をバスＢ１に対して出力する。当該ＣＰＵＩＤおよび当該モード情報を受信したＣＰＵ＃３では、比較部１７において、当該受信したＣＰＵＩＤ、モード情報および自ＣＰＵ＃３が有するレジスタ１５のビット列を比較する。
【０１１７】
ここで、上述の通り、ＣＰＵ＃７がスーパバイザモードによるバスアクセスを行った場合には、ＣＰＵ＃３の比較部１７では、スヌープ処理を行うとの判定するので、第一の比較処理の結果、当該比較部１７は、「１」の信号をＡＮＤ回路３０対して出力する。
【０１１８】
また、上述の通り、ＣＰＵ＃７とＣＰＵ＃３とは同じグループＧ３に属するので、第二の比較処理の結果、当該比較部１７は、別途「１」の信号をＡＮＤ回路３０対して出力する。
【０１１９】
なお、他のスヌープ要求が送信された場合、ＡＮＤ回路３０には「１」のスヌープ要求信号が入力される。したがって、今の場合、ＡＮＤ回路３０の３つの入力部には、各々「１」の信号が入力されるので、当該ＡＮＤ回路３０からセレクタ４０に対して「１」の信号が出力される。
【０１２０】
以上により今の場合、ＣＰＵ＃３は、第一のおよび第二の比較処理の結果、ＣＰＵ＃３とＣＰＵ＃７とが同じグループＧ１に属していると判定し、かつ、ＣＰＵ＃７がスーパバイザモードのときにスヌープ処理を行うと判定したので、当該ＣＰＵ＃３は、スヌープ処理を行う。つまり、当該ＣＰＵ＃３は、自己のキャッシュメモリｍ３に対してスヌープ処理を行う。
【０１２１】
また、たとえば、ＣＰＵ＃７がユーザモードによるバスアクセスを行った場合、当該ＣＰＵ＃７は、当該ＣＰＵ＃７のＣＰＵＩＤおよびユーザモードのモード情報をバスＢ１に対して出力する。当該ＣＰＵＩＤおよび当該モード情報を受信したＣＰＵ＃３では、比較部１７において、当該受信したＣＰＵＩＤ、モード情報および自ＣＰＵ＃３が有するレジスタ１５のビット列を比較する。
【０１２２】
ここで、上述の通り、ＣＰＵ＃７がユーザモードによるバスアクセスを行った場合には、ＣＰＵ＃３の比較部１７では、スヌープ処理を行わないと判定するので、第一の比較処理の結果、当該比較部１７は、「０」の信号をＡＮＤ回路３０対して出力する。
【０１２３】
また、上述の通り、ＣＰＵ＃３とＣＰＵ＃７とは同じグループＧ１に属するので、第二の比較処理の結果、当該比較部１７は、別途「１」の信号をＡＮＤ回路３０対して出力する。
【０１２４】
なお、他のスヌープ要求が送信された場合、ＡＮＤ回路３０には「１」のスヌープ要求信号が入力される。したがって、今の場合、ＡＮＤ回路３０の２つの入力部には、各々「１」の信号が入力され、他の１の入力部には「０」の信号が入力されるので、当該ＡＮＤ回路３０からセレクタ４０に対して「０」の信号が出力される。
【０１２５】
以上により今の場合、ＣＰＵ＃３は、第一のおよび第二の比較処理の結果、ＣＰＵ＃３とＣＰＵ＃７とが同じグループＧ３に属していると判定し、かつ、ＣＰＵ＃７がユーザモードのときにスヌープ処理を行わないと判定したので、当該ＣＰＵ＃３は、スヌープ処理を行わない。つまり、当該ＣＰＵ＃３は、自己のキャッシュメモリｍ３に対してスヌープ処理を行わない。
【０１２６】
また、たとえば、ＣＰＵ＃２がユーザモードによるバスアクセスを行った場合、当該ＣＰＵ＃２は、当該ＣＰＵ＃２のＣＰＵＩＤおよびユーザモードのモード情報をバスＢ１に対して出力する。当該ＣＰＵＩＤおよび当該モード情報を受信したＣＰＵ＃３では、比較部１７において、当該受信したＣＰＵＩＤ、モード情報および自ＣＰＵ＃３が有するレジスタ１５のビット列を比較する。
【０１２７】
ここで、上述の通り、ＣＰＵ＃２がユーザモードによるバスアクセスを行った場合には、ＣＰＵ＃３の比較部１７では、スヌープ処理を行うと判定するので、第一の比較処理の結果、当該比較部１７は、「１」の信号をＡＮＤ回路３０対して出力する。
【０１２８】
また、上述の通り、ＣＰＵ＃２とＣＰＵ＃３とは同じグループＧ３に属するので、第二の比較処理の結果、当該比較部１７は、別途「１」の信号をＡＮＤ回路３０対して出力する。
【０１２９】
なお、他のスヌープ要求が送信された場合、ＡＮＤ回路３０には「１」のスヌープ要求信号が入力される。したがって、今の場合、ＡＮＤ回路３０の３つの入力部には、各々「１」の信号が入力されるので、当該ＡＮＤ回路３０からセレクタ４０に対して「１」の信号が出力される。
【０１３０】
以上により今の場合、ＣＰＵ＃３は、第一のおよび第二の比較処理の結果、ＣＰＵ＃３とＣＰＵ＃２とが同じグループに属していると判定し、さらに、ＣＰＵ＃２がユーザモードのときにスヌープ処理を行うと判定したので、当該ＣＰＵ＃３は、スヌープ処理を行う。つまり、当該ＣＰＵ＃３は、自己のキャッシュメモリｍ３に対してスヌープ処理を行う。
【０１３１】
なお、上記説明から、その他のケースにおける上記判定動作は容易に理解できる。よって、ここでの説明は省略する。また、上記第一の比較処理、第二の比較処理および各比較処理後の上記判定動作が可能な比較部１７は、複数のＡＮＤ回路と複数のＯＲ回路との組み合わせにより構成される。
【０１３２】
これまでの説明から分かるように、本実施の形態では、レジスタ１５と比較部１７とにより（つまり、各ＣＰＵ＃０〜＃７がバスアクセスの際に出力するＣＰＵＩＤとモード情報とを利用して）、当該ＣＰＵＩＤおよびモード情報を受信したＣＰＵでは、スヌープ対象のＣＰＵを識別している。
【０１３３】
以上のように、本実施の形態に係わるバス結合型マルチプロセッサでは、各ＣＰＵ＃０〜＃７は、上記第一のビットを含むビット列（図８参照）が格納されているレジスタ１５と、上記第一の比較処理を行う比較部１７とを備えている。そして、所定のＣＰＵから所定の動作モードによるバスアクセスがあった場合には、各ＣＰＵ＃０〜＃７は、比較部１７における第一の比較処理の結果、所定のＣＰＵがバスアクセスの際に送信したモード信号が示す種別の動作モードのときに、スヌープ処理を行うか否かを判定する。そして、スヌープ処理を行うと判定したＣＰＵは、スヌープ処理を行う。
【０１３４】
換言すれば、各ＣＰＵ＃０〜＃７が、所定の動作モードによるバスアクセスを行った場合には、各ＣＰＵ＃０〜＃７は上記モード情報を出力する。そして、各ＣＰＵ＃０〜＃７は、当該モード情報を監視（受信）しており、自己が有するレジスタ１５に格納されている第一のビットと当該モード情報とを用いた第一の比較処理を比較部１７で行っている。そして、各ＣＰＵ＃０〜＃７は、当該第一の比較処理の結果、スヌープ処理を行うか否かを判定している。各ＣＰＵ＃０〜＃７は、非共有データと判定したバスアクセスに関しては、キャッシュアクセスを行わない。
【０１３５】
このような構成を採用することにより、各ＣＰＵ＃０〜＃７は、バスアクセスを行ったＣＰＵが所定の動作モードのときのみに、スヌープ処理を行えば良くなるので、各ＣＰＵ＃０〜＃７において、無駄なスヌープ処理を省略することができる。よって、結果として、各ＣＰＵ＃０〜＃７の処理能力を向上させることができ、また消費電力の削減を図ることができる。
【０１３６】
たとえば、上記した例とは異なるが、８個のＣＰＵ＃０〜＃７が一のＯＳを稼動させ、また当該８個のＣＰＵ＃０〜＃７が各々異なるユーザプログラムを行動させたい場合を考える。ここで、各ＣＰＵ＃０〜＃７の内いくつかのＣＰＵが共同して一のユーザプログラムを稼動する場合であっても良い。たとえば、ＣＰＵ＃０〜ＣＰＵ５は、各々異なるユーザプログラムを稼動し、ＣＰＵ＃６，＃７が共同して別の一のユーザプログラムを稼動する場合であっても良い。
【０１３７】
当該場合には、各ＣＰＵ＃０〜＃７の各レジスタ１５には、各ＣＰＵ＃０〜＃７がスーパバイザモードによるバスアクセスがあった場合には、スヌープ処理を行うことを判定できる第一のビットを格納する。さらに、当該８個のＣＰＵ＃０〜＃７が各々異なるユーザプログラムを行動させる場合には、当該各レジスタ１５には、各ＣＰＵ＃０〜＃７がユーザモードによるバスアクセスがあった場合には、スヌープ処理を行わないと判定できる第一のビットを格納する。
【０１３８】
当該状況において上記第一の比較処理を比較部１７が行うことにより、結果として、本実施の形態に係わるバス結合型マルチプロセッサを構成する各ＣＰＵ＃０〜＃７は、一のＯＳプログラムを正常に動作させることができる。これに加えて、データの共有を行う必要が無いユーザモードによるバスアクセスを各ＣＰＵ＃０〜＃７が行った場合には、各ＣＰＵ＃０〜＃７はスヌープ処理を行わないので、その分、ＣＰＵ＃０〜＃７の処理能力が向上し、また消費電力の削減を図ることができる。
【０１３９】
しかし、実際のバス結合型マルチプロセッサでは、図１に示したように、各ＣＰＵ＃０〜＃７が実行するＯＳ単位で複数のグループＧ１〜Ｇ３にグループ分けされていることがある。そして、各グループＧ１〜Ｇ３内において、異なるユーザプログラムを稼動させることもある。
【０１４０】
このような場合には、上述したように、各ＣＰＵ＃０〜＃７の各レジスタ１５には、図８に例示したような第一のビットおよび第二のビットを含むビット列を格納し、さらに、比較部１７において、上述した第一の比較処理と第二の比較処理とを実施する。
【０１４１】
換言すれば、各ＣＰＵ＃０〜＃７が、所定の動作モードによるバスアクセスを行った場合には、各ＣＰＵ＃０〜＃７は上記モード情報および上記ＣＰＵＩＤを出力する。そして、各ＣＰＵ＃０〜＃７は、当該モード情報およびＣＰＵＩＤを監視（受信）しており、自己が有するレジスタ１５に格納されている第一のビットと当該モード情報とを用いた第一の比較処理、および第二のビットと当該ＣＰＵＩＤとを用いた比較処理を比較部１７で行う。そして、各ＣＰＵ＃０〜＃７は、当該第一の比較処理の結果、スヌープ処理を行うか否かを判定する。
【０１４２】
つまり、比較部１７における第一および第二の比較処理の結果、各ＣＰＵ＃０〜＃７が、上記ＣＰＵＩＤおよびモード情報を受信したＣＰＵと、上記ＣＰＵＩＤおよびモード情報を送信したＣＰＵとが同じグループＧ１〜Ｇ３に属していると判定し、かつ、ＣＰＵが送信したモード信号が示す種別の動作モードのときにスヌープ処理を行うと判定した場合には、上記ＣＰＵＩＤおよびモード情報を受信したＣＰＵは、スヌープ処理を行う。
【０１４３】
これにより、各グループＧ１〜Ｇ３において、正常に各ＯＳプログラムを動作させることができる。なお、図１０に示したように、グループＧ３に属するＣＰＵ＃２，＃３により、一のユーザモードを稼動させる場合において、図８の３，４段目に例示した第一のビットを当該ＣＰＵ＃２，＃３のレジスタ１５に格納させたなら、ＣＰＵ＃２，＃３において正常に一のユーザプログラムを稼動させることができる。
【０１４４】
これに加えて、所定のＣＰＵがスーパバイザモードもしくはユーザモードによるバスアクセスを行ったとしても、当該所定のＣＰＵと異なるグループＧ１〜Ｇ３に属するＣＰＵでは、スヌープ処理を行わない。よって、これに起因して、各ＣＰＵ＃０〜＃７の処理能力を向上させることができ、また消費電力の削減も図ることができる。
【０１４５】
さらに、上述の例においてＣＰＵ＃２がユーザモードによるバスアクセスを行った場合、当該ＣＰＵ＃２と同じグループｇ２に属するＣＰＵ＃３は、スヌープ処理を行うが、当該ＣＰＵ＃２と同じグループＧ３に属する他のＣＰＵ＃６，＃７は、スヌープ処理を行わない。よって、これに起因して、上記例の場合にはＣＰＵ＃６，＃７の処理能力を向上させることができ、また消費電力の削減も図ることができる。
【０１４６】
なお、実施の形態１の場合には、各グループＧ１〜Ｇ３において、各ＣＰＵ＃０〜＃７が各ユーザプログラムを稼動する場合、同じグループに属するＣＰＵがバスアクセスする度に、当該同じグループに属する他のＣＰＵはスヌープ処理を行われる。しかし、各グループでＯＳプログラムを稼動する場合、同じグループに属するＣＰＵ間においてデータの共有を行う必要があるが、同じグループに属する各ＣＰＵが各ユーザプログラムを稼動する場合、同じグループに属するＣＰＵがバスアクセスする度に、当該同じグループに属する他のＣＰＵがスヌープ処理を行う必要が無い場合も多々ある。
【０１４７】
したがって、上記のように、同じグループに属するＣＰＵがユーザモードによるバスアクセスする度に、当該同じグループに属する他のＣＰＵがスヌープ処理を行っていたのでは、その分、各ＣＰＵの処理能力が下がり、また消費電力が増加する。
【０１４８】
これに対して、本実施の形態に係わるバス結合型マルチプロセッサでは、当該実施の形態１の場合に有したいる問題を、上述したように解消できる。
【０１４９】
なお、上述の図８に示した各ビット列は例示であり、バス結合型マルチプロセッサの仕様に応じて、変更することができる。たとえば、第一のＣＰＵからのスーパバイザモードによるバスアクセスがあった場合にのみ、第二のＣＰＵがスヌープ処理を行うようにしても良く、また、第一のＣＰＵからのユーザモードによるバスアクセスがあった場合にのみ、第二のＣＰＵがスヌープ処理を行うようにしても良い。さらに、第一のＣＰＵからのスーパバイザモードおよびユーザモードによるバスアクセスがあった場合に、第二のＣＰＵがスヌープ処理を行うようにしても良い。
【０１５０】
また、上記各ＣＰＵ＃０〜＃７のグループＧ１〜Ｇ３も、バス結合型マルチプロセッサの仕様に応じて、変更することができる。
【図面の簡単な説明】
【０１５１】
【図１】本発明に係わるバス結合型マルチプロセッサの構成を示すブロック図である。
【図２】実施の形態１に係わる各ＣＰＵの内部構成および当該ＣＰＵが備えるバスインターフェース付近の構成を示す図である。
【図３】実施の形態１に係わるキャッシュコントローラの内部構成およびその周辺の構成を示す図である。
【図４】各ＣＰＵが備える各レジスタに格納されるビット列の構成を例示する図である。
【図５】ビット列のビット構成を説明するための図である。
【図６】実施の形態２に係わる各ＣＰＵの内部構成および当該ＣＰＵが備えるバスインターフェース付近の構成を示す図である。
【図７】実施の形態２に係わるキャッシュコントローラの内部構成およびその周辺の構成を示す図である。
【図８】各ＣＰＵが備える各レジスタに格納されるビット列の構成を例示する図である。
【図９】ビット列のビット構成を説明するための図である。
【図１０】動作モードに従った各ＣＰＵのグループ分けの一例を示す図である。
【符号の説明】
【０１５２】
＃０〜＃７  ＣＰＵ（プロセッサ）、Ｂ１  バス、Ｇ１〜Ｇ３  （ＯＳプログラム単位での）グループ、ｍ０〜ｍ７  キャッシュメモリ、ｃｃ１  キャッシュコントローラ、ｉｆ１  バスインターフェース、１０，１５  レジスタ、２０，１７  比較部、ｇ１  （ユーザモード共有の）グループ。
【図１】
2008026944.tif 000003
【図２】
2008026944.tif 000004
【図３】
2008026944.tif 000005
【図４】
2008026944.tif 000006
【図５】
2008026944.tif 000007
【図６】
2008026944.tif 000008
【図７】
2008026944.tif 000009
【図８】
2008026944.tif 000010
【図９】
2008026944.tif 000011
【図１０】
2008026944.tif 000012