(57)【要約】【課題】アクセス権を持たないプロセッサのポーリング動作によってアクセス権を有するプロセッサと共有リソースのアクセスに影響を与えていた。【解決手段】マルチプロセッサシステムは、複数のプロセッサと、複数のプロセッサによってアクセス可能な共有リソースとを有するマルチプロセッサシステムであって、複数のプロセッサと共有リソースを接続する共有バスと、複数のプロセッサのうち、いずれのプロセッサが共有リソースに対するアクセス権を獲得しているかを示す識別情報を保持する相互排除制御ユニットと、相互排除制御ユニットと複数のプロセッサを接続するローカルバスとを有する。【選択図】  図１
2008033893.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、前記複数のプロセッサによってアクセス可能な共有リソースとを有するマルチプロセッサシステムであって、
前記複数のプロセッサと前記共有リソースを接続する共有バスと、
前記複数のプロセッサのうち、いずれのプロセッサが前記共有リソースに対するアクセス権を獲得しているかを示す識別情報を保持する相互排除制御ユニットと、
前記相互排除制御ユニットと前記複数のプロセッサを接続するローカルバスとを有するマルチプロセッサシステム。
【請求項２】
前記相互排除制御ユニットは、前記識別情報として、前記複数のプロセッサのそれぞれに対応して設定された固有値を保持するレジスタを有することを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項３】
前記相互排除制御ユニットは、
前記複数のプロセッサのうち、前記共有リソースに対するアクセス権を保持するプロセッサを識別する情報を記憶する状態保存部と、
前記複数のプロセッサのうち、前記共有リソースに対するアクセス権を要求したプロセッサを特定するアクセス元判定部と、
前記アクセス元判定部の判定結果及び前記状態保存部の記憶する状態に基づいて前記アクセス権を要求したプロセッサに対して前記共有リソースに対するアクセス権の有無を出力する状態判定部と
を有することを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項４】
前記状態保存部は、前記複数のプロセッサのいずれのプロセッサも前記共有リソースに対するアクセス権を獲得していないことを示す情報、又は前記複数のプロセッサのうち、どのプロセッサが前記共有リソースに対するアクセス権を獲得しているかを示す情報を保存することを特徴とする請求項３に記載のマルチプロセッサシステム。
【請求項５】
前記相互排除制御ユニットは、前記状態判定部の出力にもとづいて、前記アクセス権を要求したプロセッサに対して、新たにアクセス権を獲得したことを示す情報、またはアクセス権を既に獲得していたことを示す情報、または他のプロセッサがアクセス権を獲得していたことを示す情報のいずれかの情報を出力することを特徴とする請求項３に記載のマルチプロセッサシステム。
【請求項６】
前記複数のプロセッサのうち、前記共有リソースに対するアクセス権を獲得したプロセッサが、前記アクセス件を解放する際に前記相互排除制御ユニットに対して、前記アクセス権を解放することを示すライト値、または前記アクセス権を継続することを示すライト値のいずれかのライト値を出力することを特徴とする請求項３に記載のマルチプロセッサシステム。
【請求項７】
前記状態保存部に保存された情報が、前記ライト値にもとづいて維持または変更されることを特徴とする請求項６に記載のマルチプロセッサシステム。
【請求項８】
前記相互排除制御ユニットは、
前記複数のプロセッサのうち、前記共有リソースに対するアクセス権を要求したプロセッサが前記共有リソースに対するアクセス権を保持するプロセッサと異なる場合に、前記共有リソースに対するアクセス権を要求したプロセッサに対してアクセス不可を示す信号を出力することを特徴とする請求項３乃至７のいずれか１項に記載のマルチプロセッサシステム。
【請求項９】
前記相互排除制御ユニットは、さらに
前記複数のプロセッサのそれぞれに対応して設定された固有値を保持するレジスタを有することを特徴とする請求項３乃至８のいずれか１項に記載のマルチプロセッサシステム。
【請求項１０】
前記相互排除制御ユニットは、前記複数のプロセッサのうち、いずれか１つのプロセッサに対して前記ローカルバスを介して前記識別情報へのアクセスを許可するアービタを有する請求項１乃至９のいずれか１項に記載のマルチプロセッサシステム。
【請求項１１】
前記複数のプロセッサからの要求を受けて、前記複数のプロセッサのうち、いずれか１つのプロセッサに対して前記ローカルバスの使用権を与えるアービタを有する請求項１乃至９のいずれか１項に記載のマルチプロセッサシステム。
【請求項１２】
前記ローカルバスは、前記相互排除制御ユニットと前記複数のプロセッサの各々と１対１に接続されるよう複数備えた請求項１乃至９のいずれか１項に記載のマルチプロセッサシステム。
【請求項１３】
前記ローカルバスは、前記複数のプロセッサが共通に接続される請求項１乃至９いずれか1項に記載のマルチプロセッサシステム。
【請求項１４】
複数のプロセッサによって共有される共有リソースに対し、前記複数のプロセッサの１つにアクセス権を設定するアクセス権設定方法であって、
前記複数のプロセッサのうち前記共有リソースに対してアクセス権を有するプロセッサの情報を保持し、
前記共有リソースに対してアクセス権を要求したプロセッサを判定し、
前記判定結果と前記アクセス権を有するプロセッサの情報を比較し、
当該比較結果に基づいて、前記共有リソースに対してアクセス権を要求したプロセッサに対してアクセス権の有無を出力することを特徴とするアクセス権設定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムに関し、特にマルチプロセッサシステムにおける共有リソースのアクセス権設定方法に関する。
【背景技術】
【０００２】
近年、複数のＣＰＵを備えたマルチプロセッサシステムが普及してきている。このようなマルチプロセッサシステムにおいては複数のＣＰＵコアが、例えばメモリや、その他の周辺回路を共通して利用する場合がある。このように複数のＣＰＵコアが共通して利用する部分は共有リソースと呼ばれている。共有リソースを利用する場合、共有リソースの使用権を獲得したＣＰＵは、他のＣＰＵからの共有リソースに対するアクセスが競合しないようにする必要がある。
【０００３】
特許文献１には、このようなマルチプロセッサシステムにおける相互排除方式の技術が記載されている。図１３は、このような一般的な相互排除方式を説明する図である。図１３において複数のＣＰＵ１０１〜ＣＰＵ１０ｎは、共有バス２００を介して共有リソース３００に接続されている。共有リソース３００は、その内部のレジスタなどに相互排除変数３０１という値を保持している。相互排除変数３０１は、その共有リソース３００が現在、ＣＰＵによってアクセスされているかどうかを示すためのフラグである。この相互排除変数３０１において、仮に"０"が共有リソース３００に対するアクセスが可能、"１"が共有リソース３００に対するアクセスが不可能である変数であった場合を例として、従来の相互排除方式について説明する。
【０００４】
図１３におけるＣＰＵ１０１が共有リソース３００に対するアクセスを行う場合、ＣＰＵ１０１は、共有リソース３００内の相互排除変数３０１を読み出す。その結果、相互排除変数３０１が"０"であれば、共有リソースに対するアクセスが可能であるためＣＰＵ１０１は、相互排除変数３０１を"１"に書き換えて、共有リソース３００に対するアクセスを開始する。
【０００５】
この状態で、ＣＰＵ１０２が共有リソース３００に対してアクセスを行おうとした場合、ＣＰＵ１０２が読み出す相互排除変数３０１は"１"となっているためアクセス権は獲得できず、ＣＰＵ１０２は、例えば一定時間経過した後に再び共有リソース３００に対するアクセスを試みる。ＣＰＵ１０１が共有リソース３００に対するアクセスを終了した場合、ＣＰＵ１０１は相互排除変数を"０"に書き換えてアクセスを終了する。
【０００６】
この時点で、再びＣＰＵ１０２が共有リソース３００に対してアクセスを試みた場合、ＣＰＵ１０２が読み出す相互排除変数３０１は"０"となっているため、ＣＰＵ１０２が共有リソース３００に対するアクセス権を獲得する。従来では、このように相互排除変数３０１を利用することで、共有リソースに対する相互排除を行っている。
【０００７】
しかしながら、このような相互排除を行った場合、アクセス権を獲得できなかったＣＰＵは、共有リソース３００に対するアクセス権の獲得を試み続けることとなってしまう。その結果、共有リソース３００に対するアクセス権の要求が共有バス２００を介して繰り返し行われ、アクセス権を獲得しているＣＰＵと共有リソース３００のアクセス自体を阻害してしまう。
【０００８】
また、例えばＣＰＵ１０１が共有リソース３００に対するアクセス権を獲得し、ある処理を実施するときに、その、ある処理を実施するために必要な他の処理のために共有リソース３００を利用する場合がある。このような場合、他の処理中で共有リソース３００にアクセスする要求が含まれているとＣＰＵ１０１は、再び相互排除変数３０１を読み出してしまう。この時、ＣＰＵ１０１は、ＣＰＵ１０１自身が書き換えた相互排除変数"１"を読み出してしまい、アクセス権を永久に獲得できないデッドロック状態となってしまう。
【０００９】
そのため、従来では以下のような相互排除の制御も行われている。相互排除変数３０１として設定する値を"０"、"１"だけではなく、ＣＰＵ毎に固有の値に設定する。例えば、共有リソース３００が空いている状態の相互排除変数３０１を"０"、ＣＰＵ１０１がアクセスしている状態の相互排除変数３０１を"１"、ＣＰＵ１０２がアクセスしている状態の相互排除変数３０１を"２"などとして保持する。そして、ＣＰＵが共有リソースに対してアクセスを要求した場合に、各ＣＰＵは、まず相互排除変数３０１を読み出し、共有リソース３００が空いている状態、つまり相互排除変数３０１が"０"であるかを判定し、"０"ではなかった場合は、その後、読み出した相互排除変数３０１とＣＰＵ自身の固有の値を比較する。その結果、自身の固有の値と一致した場合は、相互排除変数３０１にＣＰＵ固有の値を上書きして再びアクセス権を獲得する。このように相互排除制御を行うことで上記したようなデッドロックの状態は、回避される。
【特許文献１】特開平４−３４３１４３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記のような相互排除の制御を行っても、アクセス権を獲得できなかったＣＰＵは、共有リソースに対するアクセス権の獲得を試み続け、共有バス上におけるアクセス権を獲得したＣＰＵと共有リソースのアクセスを阻害してしまう。
【００１１】
また、相互排除変数をＣＰＵの固有値とした場合は、各ＣＰＵにおいて、ＣＰＵ自身の固有値と読み出した相互排除変数の比較、ＣＰＵ固有の値の相互排除変数への書き込みといった作業が必要になる。このことは各ＣＰＵの実行命令数を増加させ、マルチプロセッサシステム全体の非効率化を招いてしまっていた。
【課題を解決するための手段】
【００１２】
本発明の１態様に基づくマルチプロセッサシステムは、複数のプロセッサと、複数のプロセッサによってアクセス可能な共有リソースとを有するマルチプロセッサシステムであって、複数のプロセッサと共有リソースを接続する共有バスと、複数のプロセッサのうち、いずれのプロセッサが共有リソースに対するアクセス権を獲得しているかを示す識別情報を保持する相互排除制御ユニットと、相互排除制御ユニットと複数のプロセッサを接続するローカルバスとを有する。
【００１３】
このように構成することによって、第１のバスを介した共有リソースと共有リソースに対してアクセス権を有するプロセッサとのアクセスに影響を与えずに第２のバスを介して相互排除の制御が行われる。
【００１４】
また本発明の１態様によるアクセス権設定方法は、複数のプロセッサによって共有される共有リソースに対し、前記複数のプロセッサの１つにアクセス権を設定するアクセス権設定方法であって、前記複数のプロセッサのうち前記共有リソースに対してアクセス権を有するプロセッサの情報を保持し、前記共有リソースに対してアクセス権を要求したプロセッサを判定し、前記判定結果と前記アクセス権を有するプロセッサの情報を比較し、当該比較結果に基づいて、前記共有リソースに対してアクセス権を要求したプロセッサに対してアクセス権の有無を出力することを特徴とする。
【００１５】
このようにアクセス権を設定することで、アクセス権を要求したプロセッサ側ではアクセス権の有無、すなわちアクセス権の獲得成功か失敗かのみを判定すればよく、命令実行数を減少させることが可能となる。
【発明の効果】
【００１６】
アクセス権を持たないＣＰＵのポーリング動作による共有バスへの影響を抑えることが可能となる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明の実施の形態について詳細に説明する。なお、以降の実施の形態では、マルチプロセッサシステムの例として、ＣＰＵを２つ有するマルチプロセッサシステムを用いて本発明を説明するが、３つ以上のＣＰＵを有する場合にも本発明は適用可能である。また、マルチプロセッサシステムとしては、１チップの半導体上に構成されたシステムであっても、各ＣＰＵが独立チップであって外部バスで接続された構成のシステムでもよい。
【００１８】
実施の形態１
図１は本発明の実施の形態１にかかるマルチプロセッサシステム１０を示すブロック図である。図１に示すように、本実施の形態のマルチプロセッサシステム１０は、第１のＣＰＵ（以下、ＣＰＵ１と称す）、第２のＣＰＵ（以下、ＣＰＵ２と称す）、周辺回路である共有リソース３、相互排除制御ユニット４、共有バス５、ローカルバス６、７を有している。
【００１９】
ＣＰＵ１、ＣＰＵ２は、共有バス５を介して共有リソース３にアクセスを行い、プログラムなどに基づいた各種の処理を実行する。相互排除制御ユニット４は、ローカルバス６、７を介して、それぞれＣＰＵ１、ＣＰＵ２と接続され、共有リソース３に対するＣＰＵのアクセス権の制御を行う部分である。本実施の形態における相互排除制御ユニット４の構成を図２に示す。図２に示すように実施の形態１の相互排除制御ユニット４は、アービタ４１、相互排除変数レジスタ４２を有している。
【００２０】
アービタ４１は、複数のＣＰＵが同時に相互排除制御ユニット４にアクセスした場合に、相互排除変数レジスタ４２とＣＰＵとの接続を調停する回路である。したがって、アービタ４１には、ローカルバス６、７及び相互排除変数レジスタ４２が接続されている。相互排除変数レジスタ４２は、アドレスが割り付けられ、このアドレスを指定することによってＣＰＵ１、ＣＰＵ２からアクセスされるレジスタである。相互排除変数レジスタ４２は、ＣＰＵ１、ＣＰＵ２によってリード／ライトされる相互排除変数を保持する。
図３は、図１に示したマルチプロセッサシステムを更に詳細に示した図である。図３に示すように本実施の形態のマルチプロセッサシステムは、共有バス５の使用権を調停するアービタ８を更に有している。
【００２１】
このように構成された本実施形態の相互排除制御の動作について以下に説明する。以下では、共有リソース３に対するアクセス権が空いている状態、つまりどのＣＰＵも共有リソースに対してアクセス権を獲得していない場合の相互排除変数は"０"として説明する。ＣＰＵ１あるいはＣＰＵ２によるアクセス権獲得の動作をフローチャートで示したものが図４に相当する。
【００２２】
相互排除変数レジスタ４２が"０"を保持した状態で、ＣＰＵ１が共有リソース３のアクセス権を要求する場合について説明する。ＣＰＵ１が共有リソース３のアクセス権を要求する場合、ローカルバス６を介してＣＰＵ１が相互排除制御ユニット４に対してリード要求を出力する（図３、６１および図４、Ｓ３０１参照）。このリード要求は、ローカルバス６を介して相互排除制御ユニット４へと与えられる。相互排除制御ユニット４では、相互排除変数レジスタ４２の保持する値を読み出し、このリード値をＣＰＵ１へと出力する。相互排除変数レジスタ４２が"０"を保持している状態であるとすれば、この"０"をＣＰＵ１へと出力する。
【００２３】
ＣＰＵ１では、リード値が"０"であるかどうかの判定が行われ、リード値が"０"であれば、相互排除制御ユニット４に対してライト要求を行う（図４、Ｓ３０２参照）。この時、ＣＰＵ１がライト要求を行う値は、ＣＰＵ１に固有の値（ここでは"ＩＤ１"とする）である。相互排除制御ユニット４は、ＣＰＵ１からのライト要求にしたがって相互排除変数レジスタ４２に"ＩＤ１"を書き込み（図４、Ｓ３０４参照）、ＣＰＵ１がアクセス権を獲得した状態となる。図１に示す相互排除制御ユニット４によってアクセス権を獲得したＣＰＵ１は、アービタ８に対して共有バス５の使用を要求する。アービタ８によって共有バス５の使用が許可された場合、ＣＰＵ１は、共有バス５を介して共有リソース３に対してアクセスし、必要な処理を実行する。
【００２４】
ＣＰＵ１がアクセス権を獲得した状態で、ＣＰＵ２が共有リソース３に対してアクセス権を要求する場合について説明する。ＣＰＵ２が共有リソース３に対してアクセス権を要求する場合、ＣＰＵ１がアクセス権を要求する場合と同様に、相互排除制御ユニット４に対してリード要求を出力する（図４、Ｓ３０１参照）。このリード要求は、ローカルバス７１を介して相互排除制御ユニット４へと与えられる。相互排除制御ユニット４では、相互排除変数レジスタ４２の保持する値"ＩＤ１"を読み出し、このリード値"ＩＤ１"をＣＰＵ２へと出力する。
【００２５】
ＣＰＵ２では、リード値が"０"であるかどうかの判定が行われる（図４、Ｓ３０２参照）。ここでは、リード値は"０"ではないのでライト要求は出力されず、次の判定動作に移行する。ＣＰＵ２は、リード値が"０"ではないため、リード値がＣＰＵ２の固有の値（ここでは"ＩＤ２"とする）と同じかどうかを判定する（図４、Ｓ３０３参照）。この場合、リード値は、"ＩＤ１"であるため、ＣＰＵ２の"ＩＤ２"とは異なり、ＣＰＵ２は、所定時間後に再びリード要求を行うなどのポーリング動作を行う。
【００２６】
また、ＣＰＵが実施するプログラムによっては、ある処理（ここでは処理Ａと呼ぶ）を実行中に共有リソース３のアクセス権を一旦獲得した後、処理Ａの終了前に他の処理（ここでは処理Ｂと呼ぶ）を行い、この処理Ｂが共有リソース３のアクセス権を獲得する場合がある。その後、処理Ｂの終了後にＣＰＵは、再び処理Ａの実行に復帰し、処理Ａを終了させる必要がある。そこで、ＣＰＵ１が処理Ａの中で共有リソース３のアクセス権を獲得した状態で、ＣＰＵ１が処理Ｂの中で共有リソース３のアクセス権を要求する場合について説明する。上記同様、ＣＰＵ１が相互排除制御ユニット４に対してリード要求を出力する（図４、Ｓ３０１参照）。このリード要求は、ローカルバス６を介して相互排除制御ユニット４へと与えられる。相互排除制御ユニット４では、相互排除変数レジスタ４２の保持する値"ＩＤ１"を読み出し、このリード値"ＩＤ１"をＣＰＵ１へと出力する。
【００２７】
ＣＰＵ１では、リード値が"０"であるかどうかの判定が行われ（図４、Ｓ３０２参照）、ここでは、リード値は"０"ではないので、次の判定動作に移行する。ＣＰＵ１は、リード値がＣＰＵ１の"ＩＤ１"と同じかどうかを判定する（図４、Ｓ３０３参照）。この場合、リード値は、"ＩＤ１"であるため、ＣＰＵ１の"ＩＤ１"と同じ値となる。したがって、ＣＰＵ１は、相互排除制御ユニット４へ"ＩＤ１"のライト要求を行い、相互排除制御ユニット４では相互排除変数レジスタ４２に"ＩＤ１"が書き込まれる（図４、Ｓ３０４参照）。ＣＰＵ１は、共有リソース３に対するアクセス権を獲得し、アービタ８に対して共有バスの使用を要求する。アービタ８によって共有バスの使用が許可された場合、ＣＰＵ１は、共有バス５を介して共有リソース３に対するアクセスを継続する。
【００２８】
このように実施の形態１では、共有バス５とは異なるローカルバス６、７を用いて各ＣＰＵと相互排除制御ユニット４を接続し、相互排除制御ユニット４内の相互排除制御レジスタ４２から、共有リソース３の空き状態、あるいは共有リソース３にアクセス権を有するＣＰＵの固有値（ＩＤ）を読み出すようにしている。そのため、共有リソース３に対するアクセス権を持たないＣＰＵのポーリング動作によるアクセス要求は共有バス５を介して行われない。したがって、共有バス５は、ポーリング動作による影響を受けず、共有リソース３とアクセス権を持つＣＰＵは、速やかにその処理を実行することが可能となる。
【００２９】
実施の形態２
図５は、本発明の実施の形態２の相互排除制御ユニット４の構成を示すブロック図である。なお、マルチプロセッサシステム１０としての構成は、図１と同一であるため、その詳細な説明は省略する。実施の形態２の相互排除制御ユニット４は、アービタ４１、相互排除制御部４３を有している。相互排除制御部４３は、アクセス元ＣＰＵ判定部４３１、リード／ライト判定部４３２、状態判定部４３３、リード値出力部４３４、状態保存部４３５、ライト値判定部４３６を有している。
【００３０】
アービタ４１は、複数のＣＰＵと相互排除制御部４３の調停を行う回路である。相互排除制御部４３は、アドレスが割り付けられ、このアドレスを指定することによってＣＰＵ１、ＣＰＵ２からアクセスされる。相互排除制御部４３は、共有リソース３に対してアクセスするＣＰＵを制御し、相互排除を行う。アクセス元ＣＰＵ判定部４３１は、アービタ４１を介して与えられた信号からアクセス元のＣＰＵを判定し、アクセス元のＣＰＵを特定する。リード／ライト判定部４３２は、与えられた信号がリード要求なのか、ライト要求なのかを判定しその判定結果を出力する。状態判定部４３３は、アクセス元ＣＰＵ判定部４３１、リード／ライト判定部４３２の出力に基づいて、状態保存部４３５から現在の状態を読み出す、あるいはライト値判定部４３６に対して状態保存部４３５に現在の状態に関する情報を書き込ませる信号を出力する。状態保存部４３５は、共有リソース３に対して現在アクセス権を有するＣＰＵに関する情報を保持している。ライト値判定部４３６は、状態判定部４３３の出力に基づいて状態保存部４３５に対するライト値を判定し、状態保存部４３５に書き込む情報を決定する。上記した各部のより詳細な説明は、以下の動作説明において例を示しながら説明する。
【００３１】
図６は、本実施の形態の相互排除制御ユニット４の動作を示すフローチャートである。また、図７は、相互排除制御ユニット４の動作に伴う状態を示す状態遷移図である。また、図８はＣＰＵ１あるいはＣＰＵ２が行うアクセス権要求時のフローチャートである。以下、図５乃至図８を用いて本実施の形態の動作について説明する。なお、以下の動作では、図１に示すようにＣＰＵ１、ＣＰＵ２が共有リソース３に対してローカルバス６、７を介してアクセス権を要求する場合を例として説明する。
【００３２】
まず、共有リソース３に対してアクセス権を保持するＣＰＵが無く、共有リソースが空いた状態でＣＰＵ１が共有リソースに対してアクセス権を要求した場合を例にして説明する。ＣＰＵ１は、共有リソース３に対してアクセス権を要求するため、相互排除制御ユニット４に対してローカルバス６を介してリード要求を行う（図８、Ｓ７０１参照）。このリード要求は、ローカルバス６、アービタ４１を介して相互排除制御部４３のアクセス元ＣＰＵ判定部４３１へと与えられる。
【００３３】
アクセス元ＣＰＵ判定部４３１では、どのＣＰＵからの要求なのかが判定される（図６Ｓ１参照）。アクセス元のＣＰＵは、図１のようにローカルバスが配置されたマルチプロセッサシステムであれば、どのローカルバスを介するアクセスかを判定するのみで可能であるため、即座に行うことが可能である。ここではＣＰＵ１からのアクセスであることが判定され、その情報は状態判定部４３３へと出力される。またＣＰＵ１からのリード要求はリード／ライト判定部４３２によってリード要求なのかライト要求なのかの判定が行われる（図６、Ｓ２参照）。ここではリード要求であるため、リード要求であることを示す情報が状態判定部４３３へと出力される。
【００３４】
状態判定部４３３では、ＣＰＵ１からのリード要求に基づいて、状態保存部４３５に保存されている共有リソース３の現在の状態を確認する（図６、Ｓ４参照）。
【００３５】
上記したように状態保存部４３５は、共有リソース３に対して、現在アクセス権を有するＣＰＵに関する情報を保持する部分である。ＣＰＵ１、ＣＰＵ２が存在する場合、共有リソース３に対するアクセス権の状態には、以下の３つの状態が存在する。
状態Ｐ０  共有リソース３が空いている状態
状態Ｐ１  共有リソース３に対するアクセス権をＣＰＵ１が獲得している状態
状態Ｐ２  共有リソース３に対するアクセス権をＣＰＵ２が獲得している状態
【００３６】
ここでは、共通リソース３が空いている状態なので、状態保存部４３５は、状態Ｐ０を保持している。ここで、状態判定部４３３では、現在、共有リソース３は、空いている状態Ｐ０であり、ＣＰＵ１によるリード要求であるためＣＰＵ１がアクセス権を獲得している状態の状態Ｐ１に状態保存部４３５の保持する状態を遷移させる（図６、Ｓ８及び図７参照）。その後、リード値出力部４３４に対して、ＣＰＵ１に出力するリード値を指定する。
【００３７】
リード値出力部４３４は、状態判定部４３３によって指定されたリード値を、ＣＰＵ１に出力する。ここでリード値出力部４３４が出力するリード値には、状態保存部４３５が保持していた状態、状態判定部４３３によって行われた動作によって、以下の３値が存在する。
リード値"０"  新たにアクセス権を獲得したことを示すリード値
リード値"１"  アクセス権を既に獲得していたことを示すリード値
リード値"２"  他のＣＰＵがアクセス権を獲得していたことを示すリード値
【００３８】
ここでは、共有リソース３が空いていた状態Ｐ０から、ＣＰＵ１が新たにアクセス権を獲得し、状態Ｐ１へと遷移したため新たにアクセス権を獲得した場合に相当するリード値"０"が出力される（図６、Ｓ８及び図７参照）。
【００３９】
ＣＰＵ１では、読み出したリード値がリード値"２"であるかどうかを判定している（図８、Ｓ７０２参照）。上記に説明したようにリード値"２"は、他のＣＰＵが共有リソース３を獲得している状態であるため、リード値が"２"であればポーリング動作を行う。ここでは、リード値は"０"である。そのためＣＰＵ１は、ＣＰＵ１自身がアクセス権を獲得したと判断し、アービタ８に対して共有バスの使用を要求する。アービタ８によって共有バスの使用が許可された場合、ＣＰＵ１は、共有リソース３に対してアクセスを開始する。
【００４０】
次に、このＣＰＵ１がアクセス権を獲得した状態でＣＰＵ２が共有リソースに対してアクセス権を要求する場合を例にして説明する。ＣＰＵ１がアクセス権を要求する時と同様に、ＣＰＵ２は、相互排除制御ユニット４に対してリード要求を行う（図８、Ｓ７０１参照）。このリード要求は、ローカルバス７、アービタ４１を介して相互排除制御部４３のアクセス元ＣＰＵ判定部４３１へと与えられ、どのＣＰＵからの要求なのかが判定される（図６、Ｓ１参照）。また、リード／ライト判定部４３２によってリード要求なのかライト要求なのかの判定が行われる（図６、Ｓ３参照）。
【００４１】
状態判定部４３３では、ＣＰＵ２からのリード要求に基づいて、状態保存部４３５に保存されている共有リソース３の現在の状態を確認する（図６、Ｓ６参照）。ここでは、状態保存部４３５は、上記した状態Ｐ１を保持している。アクセス元のＣＰＵ２と現在共有リソースに対するアクセス権を有するＣＰＵが異なるため、状態判定部４３３では、状態保存部４３５が保持する状態Ｐ１を変更せずに、リード値"２"を出力するようにリード値出力部４３４に指定する（図６、Ｓ２１及び図７参照）。
【００４２】
リード値出力部４３４は、リード値"２"を出力し、ＣＰＵ２は入力されたリード値の判定を行う。リード値が"２"であるため、ＣＰＵ２はＣＰＵ２以外のＣＰＵが共有リソースに対するアクセス権を有するものと判断し、ポーリング動作を行う（図８、Ｓ７０２参照）。
【００４３】
次に、ＣＰＵ１がアクセス権を獲得した状態で、実施の形態１でも説明したように、処理Ａを実行中に処理Ｂを行い、その後、処理Ａに復帰するような場合について説明する。例えば処理Ａから処理Ｂに移行した場合に、処理ＢにおいてＣＰＵ１が相互排除制御ユニット４に対してリード要求を出力する。このリード要求は、ローカルバス６を介して相互排除制御ユニット４へと与えられる。相互排除制御部４３では、アクセス元ＣＰＵ、リード／ライト要求の判定が行われる（図６、Ｓ１、Ｓ２参照）。
【００４４】
状態判定部４３３では、ＣＰＵ１からのリード要求に基づいて、状態保存部４３５に保存されている共有リソース３の現在の状態を確認する。ここでは、状態保存部４３５は、上記した状態Ｐ１を保持している。アクセス元のＣＰＵ１と現在共有リソースに対するアクセス権を有するＣＰＵと同一のため、状態判定部４３３では、状態保存部４３５が保持する状態Ｐ１を変更せずに、リード値"１"を出力するようにリード値出力部４３４に指定する（図６、Ｓ１４及び図７参照）。
【００４５】
ＣＰＵ１では、リード値が"２"であるかどうかの判定が行われ、ここでは、リード値は"２"ではないので、ＣＰＵ１は、共有リソース３に対するアクセス権を獲得したと判断し、アービタ８によって共有バスの使用が許可された場合、ＣＰＵ１は、共有バス５を介して共有リソース３に対するアクセスを継続する（図８、Ｓ７０２参照）。
【００４６】
次に、ＣＰＵ１がアクセス権を獲得した状態で、ＣＰＵ１が共有リソース３に対するアクセス権を解放する場合について説明する。ＣＰＵ１は、相互排除制御ユニット４に対してライト値と共にライト要求を出力する。ここで、ＣＰＵが相互排除制御ユニット４に出力するライト値には以下の２値が存在する。
ライト値"０"  アクセス権を解放するライト値
ライト値"１"  アクセス権を継続するライト値
なお、上記以外のライト値は、そもそもライト値として無効であるためライト値として出力しても相互排除制御ユニット４では無視される。
【００４７】
ここでは、ＣＰＵ１が共有リソース３を解放するため、ＣＰＵ１はライト値"０"を伴うライト要求を出力する。このライト要求は、ローカルバス６を介して相互排除制御ユニット４へと与えられる。相互排除制御部４３では、アクセス元ＣＰＵ、リード／ライト要求の判定が行われる（図６、Ｓ１、Ｓ２参照）。
【００４８】
状態判定部４３３では、ＣＰＵ１からのライト要求に基づいて、状態保存部４３５に保存されている共有リソース３の現在の状態を確認する（図６、Ｓ５参照）。ここでは、状態保存部４３５は、上記した状態Ｐ１を保持している。アクセス元のＣＰＵ１と現在共有リソースに対するアクセス権を有するＣＰＵと同一であるため、ライト値判定部４３６によって、ライト値の判定が行われる（図６、Ｓ１５参照）。ここで、仮にライト要求を出力してきたＣＰＵが現在アクセス権を獲得しているＣＰＵ１と異なる場合（例えばＣＰＵ２である場合）は、誤ったライト要求であるため無視される（図６、Ｓ１２参照）。ライト値判定部４３６では、ライト要求と共に入力されたライト値がライト値"０"であるのかライト値"１"であるのかの判定が行われる。ここでは、ＣＰＵ１が共有リソースを解放するためライト値は"０"である。そのためライト値判定部４３６は状態保存部４３５が保持する状態Ｐ１を共有リソースが解放された状態Ｐ０に変更して処理を終了する（図６、Ｓ１９及び図７参照）。
【００４９】
上記の例に示した動作において、例えば処理Ａから処理Ｂ、その後処理Ａに再帰するような動作では、処理Ｂから処理Ａに再帰する時に、ＣＰＵ１からライト値"１"のライト要求を出力する構成とすることも可能である。この場合、上記の共有リソース３を解放する動作と同様にライト値判定部４３６によってライト値が"１"と判定される。この場合ライト値が"１"であるので、状態は変更されずにＣＰＵ１が共有リソース３に対するアクセス権を継続する（図６、Ｓ２０及び図７参照）。
【００５０】
以上は、ＣＰＵ１が共有リソースに対するアクセス権を有する場合を中心に説明したが、図６乃至図８に示しているようにＣＰＵ２が共有リソースに対してアクセス権を有する場合にも基本的な動作は同様である。以下、表１、表２にＣＰＵ１、ＣＰＵ２を有するマルチプロセッサシステムにおけるリード要求の動作、ライト要求の動作を示す。
【表１】
2008033893.tif 000003
【表２】
2008033893.tif 000004
【００５１】
本実施の形態においても、実施の形態１と同様に共有バス５とは異なるローカルバス６、７を用いて各ＣＰＵと相互排除制御ユニット４を接続し、相互排除制御ユニット４内の相互排除制御部４３から、共有リソース３の空き状態を読み出すようにしている。そのため、共有バス５は、ポーリング動作による影響を受けず、共有リソース３とアクセス権を持つＣＰＵは、速やかにその処理を実行することが可能となる。
【００５２】
さらに、本実施の形態による相互排除制御ユニット４は、状態判定部４３３、状態保存部４３５によって、現在、共有リソースに対するアクセス権を有するＣＰＵを判定している。したがって、ＣＰＵ側での命令実行数の増加によるオーバーヘッドを軽減することが可能となる。本実施の形態では、相互排除制御部４３が、共有リソース３が空いている状態か、他のＣＰＵがアクセス権を有している状態かあるいはアクセス権を要求したＣＰＵ自身がアクセス権を有している状態かを出力している。そのためＣＰＵ側では図８に示すように他のＣＰＵが使用しているかどうかを判定するのみでアクセス権の有無が判定できるため命令実行数のオーバーヘッドを削減することが可能である。また、本実施の形態では、複数のＣＰＵがそれぞれ固有値を有する必要が無く、仮に持っていたとしてもリード要求、ライト要求時に、自ＣＰＵを示せればよいだけであるため上記の命令実行のオーバーヘッドを削減することが可能となる。
【００５３】
実施の形態３
図９は、本発明の実施の形態３の相互排除制御ユニット４の構成を示すブロック図である。なお、マルチプロセッサシステム１０としての構成は、図１と同一であるため、その詳細な説明は省略する。本実施の形態は、アービタ４1、相互排除変数レジスタ４２及び相互排除制御部４３を有している。アービタ４１は、相互排除変数レジスタ４２及び相互排除制御部４３とＣＰＵのアクセスを調停する。相互排除変数レジスタ４２は、実施の形態１と同様の相互排除変数レジスタ４２であり、共有リソース３の空き状態、あるいは共有リソース３に対するアクセス権を獲得しているＣＰＵのＣＰＵ毎の固有値を保持する。相互排除制御部４３は、実施の形態２と同様の相互排除制御部４３であり、共有リソース３が空いている状態か、他のＣＰＵがアクセスしている状態かあるいはアクセスを要求したＣＰＵ自身がアクセスしている状態かを出力する。
【００５４】
このように構成することで、ＣＰＵ毎の固有値を有するＣＰＵ、固有値を有さないＣＰＵなどが並存するマルチプロセッサシステムでも共有リソース３のアクセス権を適切に設定することが可能となる。
【００５５】
実施の形態４
図１０は、本発明の実施の形態４のマルチプロセッサシステム２０の構成を示すブロック図である。実施の形態１乃至３では、相互排除制御ユニット４内に、アービタ４１が内蔵される構成について説明したが、本実施の形態ではローカルバス用のアービタ９が相互排除制御ユニット４とは別に構成される。この場合、ＣＰＵ毎のローカルバス６および７がそれぞれ相互排除制御ユニットに接続されるのではなく、相互排除制御ユニット４に接続するためのローカルバス６'が共通に形成される。アービタ９は、複数のＣＰＵからの相互排除制御ユニット４に対するアクセス要求を調停し、いずれかのＣＰＵに対してローカルバス６'の使用を許可する。
ローカルバスの使用が可能となったＣＰＵの相互排除制御レジスタ４２に対する動作は、実施の形態１と同様であるため、その詳細な説明は割愛する。
【００５６】
実施の形態５
図１１は、本発明の実施の形態５の相互排除制御ユニットの構成を示す図である。本実施の形態は、実施の形態４で説明したローカルバス６'が共通して形成されている場合に、実施の形態２において説明した相互排除制御ユニット４を適用した場合に相当する。本実施の形態では、アクセス元ＣＰＵ判定部４３１に対し、ローカルバス用のアービタ９から、ローカルバス６'を使用しているＣＰＵに関する情報を与えることが可能である。あるいは、ローカルバス６'を使用するＣＰＵがＣＰＵ固有の識別情報と共にローカルバスを介してリード要求などを送信し、アクセス元ＣＰＵ判定部４３１によって、その固有情報からアクセス元ＣＰＵを判定しても良い。
その後の、状態判定、状態保存などの動作は実施の形態２と、同様であるため詳細な説明は、割愛する。
【００５７】
実施の形態６
図１２は、本発明の実施の形態６の相互排除制御ユニット４の構成を示すブロック図である。本実施の形態は、実施の形態４で説明したローカルバス６'が共通して形成されている場合に、実施の形態３において説明した相互排除制御ユニット４を適用した場合に相当する。詳細な動作や構成は実施の形態１および２と同様であるため割愛する。
【００５８】
以上、実施の形態に基づいて詳細に説明したが、本発明は上記した実施の形態に限定されず本発明の主旨を変更しない限り種々の変形が可能である。例えば、実施の形態では１つの共有リソースの例を用いて示したが、複数の共有リソースを有する場合でも、１つの相互排除制御ユニット内に各共通リソースに対応する相互排除変数レジスタ、相互排除制御部を用意することで対応が可能である。
【図面の簡単な説明】
【００５９】
【図１】本発明の実施の形態１のマルチプロセッサシステムを示す図である。
【図２】実施の形態１の相互排除制御ユニットを示す図である。
【図３】本発明の実施の形態１のマルチプロセッサシステムを示す図である。
【図４】実施の形態１のＣＰＵのフローチャート示す。
【図５】実施の形態２の相互排除制御ユニットを示す図である。
【図６】実施の形態２の相互排除制御ユニットのフローチャート示す。
【図７】実施の形態２の相互排除制御ユニットの状態遷移図示す。
【図８】実施の形態２のＣＰＵのフローチャート示す。
【図９】実施の形態３の相互排除制御ユニットを示す図である。
【図１０】実施の形態４のマルチプロセッサシステムを示す図である。
【図１１】実施の形態５の相互排除制御ユニットを示す図である。
【図１２】実施の形態６の相互排除制御ユニットを示す図である。
【図１３】特許文献1記載のマルチプロセッサシステムを示す図である。
【符号の説明】
【００６０】
ＣＰＵ１、ＣＰＵ２    ＣＰＵ
３    共有リソース
４    相互排除制御ユニット
５    共有バス
６、６'、７、６１、７１    ローカルバス
８    アービタ
１０、２０    マルチプロセッサシステム
９、４１    アービタ
４２    相互排除変数レジスタ
４３    相互排除制御部
４３１    アクセス元ＣＰＵ判定部
４３２    リード／ライト判定部
４３３    状態判定部
４３４    リード値出力部
４３５    状態保存部
４３６    ライト値判定部
【図１】
2008033893.tif 000005
【図２】
2008033893.tif 000006
【図３】
2008033893.tif 000007
【図４】
2008033893.tif 000008
【図５】
2008033893.tif 000009
【図６】
2008033893.tif 000010
【図７】
2008033893.tif 000011
【図８】
2008033893.tif 000012
【図９】
2008033893.tif 000013
【図１０】
2008033893.tif 000014
【図１１】
2008033893.tif 000015
【図１２】
2008033893.tif 000016
【図１３】
2008033893.tif 000017