(57)【要約】【課題】  複数のＣＰＵでもって同一のアクセス対象に対してアクセスを行う場合に、不具合なくセマフォの獲得に係る排他制御処理を行う為の技術を提供すること。【解決手段】  バスブリッジ部１０３は、ＣＰＵ１０１からセマフォの獲得要求を受けた場合には、バスブリッジ部１０４から受信したｓｅｍｉ＿ｏｕｔ信号と、信号線１１２を介して受けた優先度に応じて、セマフォの獲得を制御する。【選択図】    図１
2006119724.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵと、それぞれのＣＰＵに１対１で接続されている複数のバスブリッジとを有するＣＰＵシステムであって、
それぞれのバスブリッジは、
他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信手段と、
自バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けた場合には、前記受信手段が受信した信号、及び前記自バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御手段と
を備えることを特徴とするＣＰＵシステム。
【請求項２】
前記受信手段が他バスブリッジから、当該他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたことを示す信号を受信しており、且つ自バスブリッジに接続されているＣＰＵから、セマフォの獲得要求を受けた場合、
前記制御手段は、当該自バスブリッジに対して設定された優先度を参照し、当該自バスブリッジの優先順位の方が当該他バスブリッジよりも高い場合には、当該自バスブリッジに接続されているＣＰＵに対してセマフォを獲得すると共に、当該獲得した旨を当該他バスブリッジに対して送信することを特徴とする請求項１に記載のＣＰＵシステム。
【請求項３】
前記受信手段が他バスブリッジから、当該他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたことを示す信号を受信しており、且つ自バスブリッジに接続されているＣＰＵから、セマフォの獲得要求を受けた場合、
前記制御手段は、当該自バスブリッジに対して設定された優先度を参照し、当該自バスブリッジの優先順位の方が当該他バスブリッジよりも低い場合には、当該自バスブリッジを待機状態に制御すると共に、当該自バスブリッジが待機状態にある旨を当該他バスブリッジに対して送信することを特徴とする請求項１に記載のＣＰＵシステム。
【請求項４】
前記それぞれのバスブリッジはバス上に接続されており、且つ当該バス上には機器が接続されており、
前記複数のＣＰＵのぞれぞれは、前記機器との通信を行う前段でセマフォの獲得要求を、自身に接続されているバスブリッジに対して行うことを特徴とする請求項１乃至３の何れか１項に記載のＣＰＵシステム。
【請求項５】
請求項１乃至４の何れか１項に記載のＣＰＵシステムを搭載することを特徴とするコンピュータシステム。
【請求項６】
ＣＰＵに接続されているバスブリッジであって、
他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信手段と、
前記バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けた場合には、前記受信手段が受信した信号、及び前記バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御手段と
を備えることを特徴とするバスブリッジ。
【請求項７】
請求項６に記載のバスブリッジを搭載することを特徴とするコンピュータシステム。
【請求項８】
複数のＣＰＵと、それぞれのＣＰＵに１対１で接続されている複数のバスブリッジとを有するＣＰＵシステムの制御方法であって、
それぞれのバスブリッジの制御方法は、
他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信工程と、
自バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けた場合には、前記受信工程で受信した信号、及び前記自バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御工程と
を備えることを特徴とするＣＰＵシステムの制御方法。
【請求項９】
ＣＰＵに接続されているバスブリッジの制御方法であって、
他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信工程と、
前記バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けた場合には、前記受信工程で受信した信号、及び前記バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御工程と
を備えることを特徴とするバスブリッジの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵが同時にセマフォの獲得要求を行った場合に、獲得の排他的制御を行うための技術に関するものである。
【背景技術】
【０００２】
従来、複数のＣＰＵによる同一リソースへのアクセスを排他制御は、ＯＳ（オペレーティングシステム）により行うか、各ＣＰＵが共通でアクセスできるメモリ領域にセマフォフラグを用意し、そのフラグを確認した後にバスアクセスをするというような手段が取られていた（特許文献１を参照）。
【特許文献１】特開平５−２０２７９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記前者の従来技術では、排他制御処理は全てＯＳに任せるために、ソフトウェアに負担が掛かっていた。また後者の従来技術である、メモリ領域にフラグを用意する方法についてもメモリアクセスに対するタイムラグが発生するという不具合や、同時にメモリ領域のフラグアクセスを行うと排他処理ができなくなるといった不具合が発生してしまう。
【０００４】
本発明は以上の問題に鑑みて成されたものであり、複数のＣＰＵでもって同一のアクセス対象に対してアクセスを行う場合に、不具合なくセマフォの獲得に係る排他制御処理を行う為の技術を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の目的を達成する為に、例えば本発明のＣＰＵシステムは以下の構成を備える。
【０００６】
即ち、複数のＣＰＵと、それぞれのＣＰＵに１対１で接続されている複数のバスブリッジとを有するＣＰＵシステムであって、
それぞれのバスブリッジは、
他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信手段と、
自バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けた場合には、前記受信手段が受信した信号、及び前記自バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御手段と
を備えることを特徴とする。
【０００７】
本発明の目的を達成する為に、例えば本発明のコンピュータシステムは、上記ＣＰＵシステムを搭載することを特徴とする。
【０００８】
本発明の目的を達成する為に、例えば本発明のバスブリッジは以下の構成を備える。
【０００９】
即ち、ＣＰＵに接続されているバスブリッジであって、
他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信手段と、
前記バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けた場合には、前記受信手段が受信した信号、及び前記バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御手段と
を備えることを特徴とする。
【００１０】
本発明の目的を達成する為に、例えば本発明のコンピュータシステムは、上記バスブリッジを搭載することを特徴とする。
【００１１】
本発明の目的を達成する為に、例えば本発明のＣＰＵシステムの制御方法は以下の構成を備える。
【００１２】
即ち、複数のＣＰＵと、それぞれのＣＰＵに１対１で接続されている複数のバスブリッジとを有するＣＰＵシステムの制御方法であって、
それぞれのバスブリッジの制御方法は、
他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信工程と、
自バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けた場合には、前記受信工程で受信した信号、及び前記自バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御工程と
を備えることを特徴とする。
【００１３】
本発明の目的を達成する為に、例えば本発明のバスブリッジの制御方法は以下の構成を備える。
【００１４】
即ち、ＣＰＵに接続されているバスブリッジの制御方法であって、
他バスブリッジが当該他バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信工程と、
前記バスブリッジに接続されているＣＰＵからセマフォの獲得要求を受けた場合には、前記受信工程で受信した信号、及び前記バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御工程と
を備えることを特徴とする。
【発明の効果】
【００１５】
本発明の構成により、複数のＣＰＵでもって同一のアクセス対象に対してアクセスを行う場合に、不具合なくセマフォの獲得に係る排他制御処理を行うことができる。
【発明を実施するための最良の形態】
【００１６】
以下添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。
【００１７】
［第１の実施形態］
図１は、本実施形態に係るＣＰＵシステムの基本構成を示す図である。同図において１０１，１０２はＣＰＵ、１０３，１０４はバスブリッジ部、１０５，１０６はＣＰＵバス、１０７はシステムバス、１０８はＲＡＭ、１０９は機能ブロック、１１０はサブシステムバスブリッジ部、１１１はサブシステムバスである。
【００１８】
ＣＰＵ１０１，１０２は、それぞれバスブリッジ部１０３，１０４と電気的に接続されており、更にバスブリッジ部１０３、１０４はシステムバス１０７に接続されており、更にシステムバス１０７上には上記ＲＡＭ１０４、機能ブロック１０９、サブシステムバスブリッジ部１１０が接続されている。よってＣＰＵ１０１，１０２は、バスブリッジ部１０３、１０４を介してシステムバス１０７に接続されている上記ＲＡＭ１０４、機能ブロック１０９、サブシステムバスブリッジ部１１０等にアクセスすることができる。
【００１９】
更にこのアクセスについてより詳細に説明する。ＣＰＵ１０１を例に取ると、ＣＰＵ１０１から発行されるコマンドはＣＰＵバス１０５を介してバスブリッジ部１０３にトランザクションとして転送される。バスブリッジ部１０３はこのトランザクションをシステムバス１０７上に送出するのに適した形式に変換し、変換後のトランザクションをシステムバス１０７上に送出する。
【００２０】
このアクセスに係る説明についてはＣＰＵ１０２についても同様であり、ＣＰＵ１０２から発行されるコマンドはＣＰＵバス１０６を介してバスブリッジ部１０４にトランザクションとして転送される。バスブリッジ部１０４はこのトランザクションをシステムバス１０７上に送出するのに適した形式に変換し、変換後のトランザクションをシステムバス１０７上に送出する。
【００２１】
またバスブリッジ部１０３には信号線１１２が接続されており、この信号線１１２を介してバスブリッジ部１０３には、ＣＰＵ１０１がメインＣＰＵであることを示す信号が入力される。本実施形態では、信号線１１２にはＶＤＤを接続する。
【００２２】
一方、バスブリッジ部１０４には信号線１１３が接続されており、この信号線１１３を介してバスブリッジ部１０４には、ＣＰＵ１０２がサブＣＰＵであることを示す信号が入力される。本実施形態では信号線１１３にはＧＮＤを接続する。
【００２３】
本実施形態では、バスブリッジ部１０３、１０４は共に同じ構成を有するものであるので、それぞれのバスブリッジ部に接続する信号線を変更するだけで、それぞれのバスブリッジ部に接続されているＣＰＵがメインＣＰＵであるのかサブＣＰＵであるのかを切り替えることができる。
【００２４】
ここで、メインＣＰＵはサブＣＰＵよりも優先してアクセス対象にアクセスすることができるものとする。例えばＣＰＵ１０１とＣＰＵ１０２とが同じアクセス対象に対して同時にアクセスを行った場合にはＣＰＵ１０１がＣＰＵ１０２よりも先にこのアクセス対象にアクセスすることができる。
【００２５】
バスブリッジ部１０３とバスブリッジ部１０４との間には１対のサイドバインド信号線１１４、１１５が設けられている。信号線１１４はバスブリッジ部１０３からバスブリッジ部１０４に信号を送出するために設けられており、信号線１１５はバスブリッジ部１０４からバスブリッジ部１０３に信号を送出する為に設けられている。信号線１１４，１１５を介して互いに送出される信号については後述する。
【００２６】
以上のことから、それぞれのバスブリッジ部１０３，１０４は、ＣＰＵ１０１，１０２と各部（同図ではＲＡＭ１０４、機能ブロック１０９、サブシステムバスブリッジ部１１０）との間のデータ通信を管理、制御する。
【００２７】
図２は、バスブリッジ部１０３の基本構成を示すブロック図である。以下同図を用いてバスブリッジ部１０３の基本構成について説明するが、上述の通り、バスブリッジ部１０４はバスブリッジ部１０３と同じ基本構成を有するので、以下の説明はバスブリッジ部１０４についても実質的には同じである。即ち以下の説明において、「ＣＰＵ１０１」を「ＣＰＵ１０２」と読み替え、「ＣＰＵバス１０５」を「ＣＰＵバス１０６」と読み替え、「信号線１１４」を「信号線１１５」と読み替え、「信号線１１５」を「信号線１１４」と読み替え、「信号線１１２」を「信号線１１３」と読み替えれば良い。
【００２８】
同図において２０１はＣＰＵバスＩ／Ｆ部で、ＣＰＵバス１０５を介してＣＰＵ１０１から送信されたトランザクションを受信し、受信したトランザクションに応じて、後段のコマンドバッファ２０４へのコマンドの送信や、ライトデータバッファ２０５へのデータの送信（書き込み）、自身の内部に備わっているセマフォ獲得レジスタ（ｒｅｇｉｓｔｅｒ）２０２等とのデータの送受信、また、後段のシステムバスＩ／Ｆ部２０３からのデータの受信を行う。
【００２９】
また、後段のシステムバスＩ／Ｆ部２０３との通信によってシステムバスＩ／Ｆ部２０３の状態を確認し、システムバスＩ／Ｆ部２０３の状態が「混んでいる」場合には、ＣＰＵバス１０５を介してのトランザクションを停止させる為に、ＣＰＵ１０１に通知する等の制御処理を行う。
【００３０】
２０２は上記セマフォ獲得レジスタで、現在ＣＰＵ１０１がセマフォの獲得要求を行っている場合には、このレジスタには「１」が登録されており、逆に現在獲得要求を行っていない場合にはこのレジスタには「０」が登録されている。以下、この登録値を示す変数を「ｒｅｇ」と証する。
【００３１】
２０３はシステムバスＩ／Ｆ部で、システムバス１０７に接続されており、コマンドバッファ２０４に蓄積されているライトコマンドを受け取り、システムバス１０７に適した形式に変換してシステムバス１０７上に送出する。また、リードアクセス時は、システムバス１０７から受け取ったリードデータをＣＰＵバス１０５に適したプロトコルに変換して、ＣＰＵバスＩ／Ｆ部２０１に送出する。
【００３２】
２０４はコマンドバッファで、ＣＰＵバス１０５、ＣＰＵバスＩ／Ｆ部２０１を介してＣＰＵ１０１から受信したコマンドがシステムバス１０７へのライトコマンドである場合にはこのライトコマンドを受け、蓄積するバッファとして機能する。
【００３３】
２０５はライトデータバッファで、ＣＰＵバス１０５、ＣＰＵバスＩ／Ｆ部２０１を介してＣＰＵ１０１から受信したデータがシステムバス１０７へのライトデータである場合にはこのライトデータを受け、蓄積するバッファとして機能する。
【００３４】
コマンドバッファ２０４、ライトデータバッファ２０５は２コマンド／データ分の容量を有し、何らかの原因でシステムバス１０７に対してコマンド／データが送出できない場合には、最大２つまでのライトコマンド／ライトデータをキューイングすることができる。本実施形態で説明するバスブリッジは、ライトコマンドのみコマンドバッファ２０４に一旦キューイングする事で、ライトアクセス時に確実にシステムバス１０７上のリソースに対するライトアクセスが完了するまで待たずに、ＣＰＵ１０１からのトランザクションを終了できる、ポステッドライト方式のバスブリッジであり、ライト時はＣＰＵライト動作完了を待たなくても良いため、コマンドのスループット向上が期待できる。
【００３５】
２０６はセマフォ制御部で、セマフォ獲得レジスタ２０２に登録されている値（ｒｅｇ）と、信号線１１５を介してバスブリッジ部１０４から送出された信号ｓｅｍ＿ｉｎ（入力サイドバインド信号）、信号線１１２を介して送出される優先順位決定信号（ｓｔａｃｋ）によって、信号線１１４を介してバスブリッジ部１０４に送出する信号ｓｅｍ＿ｏｕｔ（出力サイドバインド信号）の値を決定する。
【００３６】
図３は、セマフォ制御部２０６によって制御される、バスブリッジ部（１０３，１０４）の状態遷移を示す図である。同図において「ｒｅｓｅｔ」は初期状態を示すステートである。このステートにおいてはｓｅｍ＿ｏｕｔ信号は０が出力される。ちなみにｓｅｍ＿ｏｕｔ＝０の場合、このバスブリッジに対応するＣＰＵはシステムバス１０７に対してアクセスできない、即ちセマフォが獲得できていないことを示している。そしてバスブリッジ部の状態は「ｒｅｓｅｔ」ステートから「ｉｄｌｅ」ステートに無条件で遷移する。
【００３７】
「ｉｄｌｅ」ステートではsem_out信号は１が出力される。ちなみにｓｅｍ＿ｏｕｔ＝１の場合、このバスブリッジに対応するＣＰＵはシステムバス１０７に対してアクセスできる、即ちセマフォが獲得できていることを示している。ここで、バスブリッジ部は、「ｉｄｌｅ」ステートにおいて以下の＜条件１＞が成り立つ場合、「ｂｕｓｙ」ステートに遷移する。
【００３８】
＜条件１＞
（ｒｅｇ＝０  且つ  ｓｅｍ＿ｉｎ＝１）  もしくは
（ｒｅｇ＝１  且つ  ｓｅｍ＿ｉｎ＝１  且つ  ｓｔａｃｋ＝０）
＜条件１＞の前半の条件について、ＣＰＵ１０１、バスブリッジ部１０３を例に取って説明すると、バスブリッジ部１０３内のセマフォ獲得レジスタ２０２に登録されている変数ｒｅｇの値が０（現在、バスブリッジ部１０３がＣＰＵ１０１からのセマフォの獲得要求を受けていない）の場合で、且つ信号線１１５を介して受けた信号ｓｅｍｉ＿ｉｎの値が１（バスブリッジ部１０４からセマフォの獲得要求を受けた）の場合には、バスブリッジ部１０４に接続されているＣＰＵ１０２がセマフォを獲得できるので、バスブリッジ部１０３の状態は「待機状態」であることを示す「ｂｕｓｙ」ステートに遷移する。また、バスブリッジ部１０３は、自身の状態が「ｂｕｓｙ」ステートであることをバスブリッジ部１０４に通知するために、信号線１１４を介して信号ｓｅｍｉ＿ｏｕｔ＝０を出力する。
【００３９】
これはＣＰＵ１０２、バスブリッジ部１０４についても同様で、バスブリッジ部１０４内のセマフォ獲得レジスタ２０２に登録されている変数ｒｅｇの値が０（現在、バスブリッジ部１０４がＣＰＵ１０２からのセマフォの獲得要求を受けていない）場合で、且つ信号線１１４を介して受けた信号ｓｅｍｉ＿ｉｎの値が１（バスブリッジ部１０３からセマフォの獲得要求を受けた）場合には、バスブリッジ部１０３に接続されているＣＰＵ１０１がセマフォを獲得できるので、バスブリッジ部１０４の状態は「待機状態」であることを示す「ｂｕｓｙ」ステートに遷移する。また、バスブリッジ部１０４は、自身の状態が「ｂｕｓｙ」ステートであることをバスブリッジ部１０３に通知するために、信号線１１５を介して信号ｓｅｍｉ＿ｏｕｔ＝０を出力する。
【００４０】
一方、＜条件１＞の後半の条件について、ＣＰＵ１０１、バスブリッジ部１０３を例に取って説明すると、バスブリッジ部１０３内のセマフォ獲得レジスタ２０２に登録されている変数ｒｅｇの値が１（現在、バスブリッジ部１０３がＣＰＵ１０１からのセマフォの獲得要求を受けてる）場合で、且つ信号線１１５を介して受けた信号ｓｅｍｉ＿ｉｎの値が１（バスブリッジ部１０４からセマフォの獲得要求を受けた）場合、即ちＣＰＵ１０１、ＣＰＵ１０２が共にセマフォの獲得要求を行っている場合には、信号線１１２を介してバスブリッジ部１０３に入力される信号、即ち、優先順位決定信号（ｓｔａｃｋ）の値を参照し、バスブリッジ部１０３がバスブリッジ部１０４よりも優先順位が高いか否かを判断する。
【００４１】
本実施形態の場合、バスブリッジ部１０３に信号線１１２を介して入力される優先順位決定信号（ｓｔａｃｋ）の値は「１」、バスブリッジ部１０４に信号線１１３を介して入力される優先順位決定信号（ｓｔａｃｋ）の値は「０」、そして優先順位決定信号の値が「１」である方が優先順位が高いものであるとする。従って、バスブリッジ部１０３とバスブリッジ部１０４とが共にセマフォの獲得要求を行っている場合には、バスブリッジ部１０３の方が、バスブリッジ部１０４より優先してセマフォを獲得することができる。
【００４２】
よってバスブリッジ部１０３は、信号線１１２を介してバスブリッジ部１０３に入力される優先順位決定信号（ｓｔａｃｋ）の値を参照し、「０」である場合にはバスブリッジ部１０４の方がバスブリッジ部１０３よりも優先してセマフォを獲得するので、バスブリッジ部１０３の状態は「待機状態」であることを示す「ｂｕｓｙ」ステートに遷移する。また、バスブリッジ部１０３は、自身の状態が「ｂｕｓｙ」ステートであることをバスブリッジ部１０４に通知するために、信号線１１４を介して信号ｓｅｍｉ＿ｏｕｔ＝０を出力する。
【００４３】
これはＣＰＵ１０２、バスブリッジ部１０４についても同様で、バスブリッジ部１０４内のセマフォ獲得レジスタ２０２に登録されている変数ｒｅｇの値が１（現在、バスブリッジ部１０４がＣＰＵ１０１からのセマフォの獲得要求を受けてる）場合で、且つ信号線１１４を介して受けた信号ｓｅｍｉ＿ｉｎの値が１（バスブリッジ部１０３からセマフォの獲得要求を受けた）場合、即ちＣＰＵ１０１、ＣＰＵ１０２が共にセマフォの獲得要求を行っている場合には、信号線１１３を介してバスブリッジ部１０４に入力される信号、即ち、優先順位決定信号（ｓｔａｃｋ）の値を参照し、「０」である場合にはバスブリッジ部１０３の方がバスブリッジ部１０４よりも優先してセマフォを獲得するので、バスブリッジ部１０４の状態は「待機状態」であることを示す「ｂｕｓｙ」ステートに遷移する。また、バスブリッジ部１０４は、自身の状態が「ｂｕｓｙ」ステートであることをバスブリッジ部１０３に通知するために、信号線１１５を介して信号ｓｅｍｉ＿ｏｕｔ＝０を出力する。
【００４４】
このように、＜条件１＞で示した条件が満たされた場合には、バスブリッジ部（１０３、１０４）のステートは「ｂｕｓｙ」ステートに移行すると共に、相手のバスブリッジ部に対してその旨を示す信号ｓｅｍｉ＿ｏｕｔ＝０を出力する。そしてバスブリッジ部が「ｂｕｓｙ」ステートに移行した場合には、このバスブリッジ部は、このバスブリッジ部に接続されているＣＰＵからのセマフォの獲得要求を却下する。
【００４５】
次に、バスブリッジ部が現在「ｂｕｓｙ」ステートにある場合に、以下に示す＜条件２＞が満たされれば、バスブリッジ部のステートは「ｉｄｌｅ」ステートに移行する。
【００４６】
＜条件２＞
（ｓｅｍ＿ｉｎ＝０）  もしくは
（ｒｅｇ＝１  且つ  ｓｅｍ＿ｉｎ＝１  且つ  ｓｔａｃｋ＝１）
＜条件２＞の前半の条件について、ＣＰＵ１０１、バスブリッジ部１０３を例に取って説明すると、信号線１１５を介して受けた信号ｓｅｍｉ＿ｉｎの値が０（バスブリッジ部１０４からセマフォの獲得要求を受けていない）場合には、バスブリッジ部１０３に接続されているＣＰＵ１０１は自由にシステムバス１０７にアクセス可能である（セマフォを獲得できる）ので、バスブリッジ部１０３の状態は「いつでもシステムバス１０７にアクセス可能」であることを示す「ｉｄｌｅ」ステートに遷移する。また、バスブリッジ部１０３は、自身の状態が「ｉｄｌｅ」ステートであることをバスブリッジ部１０４に通知するために、信号線１１４を介して信号ｓｅｍｉ＿ｏｕｔ＝１を出力する。
【００４７】
これはＣＰＵ１０２、バスブリッジ部１０４についても同様で、信号線１１４を介して受けた信号ｓｅｍｉ＿ｉｎの値が０（バスブリッジ部１０３からセマフォの獲得要求を受けていない）場合には、バスブリッジ部１０４に接続されているＣＰＵ１０２は自由にシステムバス１０７にアクセス可能である（セマフォを獲得できる）ので、バスブリッジ部１０４の状態は「いつでもシステムバス１０７にアクセス可能」であることを示す「ｉｄｌｅ」ステートに遷移する。また、バスブリッジ部１０４は、自身の状態が「ｉｄｌｅ」ステートであることをバスブリッジ部１０３に通知するために、信号線１１５を介して信号ｓｅｍｉ＿ｏｕｔ＝１を出力する。
【００４８】
一方、＜条件２＞の後半の条件について、ＣＰＵ１０１、バスブリッジ部１０３を例に取って説明すると、バスブリッジ部１０３内のセマフォ獲得レジスタ２０２に登録されている変数ｒｅｇの値が１（現在、バスブリッジ部１０３がＣＰＵ１０１からのセマフォの獲得要求を受けてる）の場合で、且つ信号線１１５を介して受けた信号ｓｅｍｉ＿ｉｎの値が１（バスブリッジ部１０４からセマフォの獲得要求を受けた）の場合、即ちＣＰＵ１０１、ＣＰＵ１０２が共にセマフォの獲得要求を行っている場合には、信号線１１２を介してバスブリッジ部１０３に入力される信号、即ち、優先順位決定信号（ｓｔａｃｋ）の値を参照し、バスブリッジ部１０３がバスブリッジ部１０４よりも優先順位が高いか否かを判断する。よってバスブリッジ部１０３は、信号線１１２を介してバスブリッジ部１０３に入力される優先順位決定信号（ｓｔａｃｋ）の値を参照し、「１」である場合にはバスブリッジ部１０３の方がバスブリッジ部１０４よりも優先してセマフォを獲得するので、バスブリッジ部１０３の状態は「ｉｄｌｅ」ステートに遷移する。また、バスブリッジ部１０３は、自身の状態が「ｉｄｌｅ」ステートであることをバスブリッジ部１０４に通知するために、信号線１１４を介して信号ｓｅｍｉ＿ｏｕｔ＝１を出力する。
【００４９】
これはＣＰＵ１０２、バスブリッジ部１０４についても同様で、バスブリッジ部１０４内のセマフォ獲得レジスタ２０２に登録されている変数ｒｅｇの値が１（現在、バスブリッジ部１０４がＣＰＵ１０１からのセマフォの獲得要求を受けてる）場合で、且つ信号線１１４を介して受けた信号ｓｅｍｉ＿ｉｎの値が１（バスブリッジ部１０３からセマフォの獲得要求を受けた）場合、即ちＣＰＵ１０１、ＣＰＵ１０２が共にセマフォの獲得要求を行っている場合には、信号線１１３を介してバスブリッジ部１０４に入力される信号、即ち、優先順位決定信号（ｓｔａｃｋ）の値を参照し、バスブリッジ部１０４がバスブリッジ部１０３よりも優先順位が高いか否かを判断する。よってバスブリッジ部１０４は、信号線１１４を介してバスブリッジ部１０４に入力される優先順位決定信号（ｓｔａｃｋ）の値を参照し、「１」である場合にはバスブリッジ部１０４の方がバスブリッジ部１０３よりも優先してセマフォを獲得するので、バスブリッジ部１０４の状態は「ｉｄｌｅ」ステートに遷移する。また、バスブリッジ部１０４は、自身の状態が「ｉｄｌｅ」ステートであることをバスブリッジ部１０３に通知するために、信号線１１５を介して信号ｓｅｍｉ＿ｏｕｔ＝１を出力する。
【００５０】
このように、＜条件２＞で示した条件が満たされた場合には、バスブリッジ部（１０３、１０４）のステートは「ｉｄｌｅ」ステートに移行すると共に、相手のバスブリッジ部に対してその旨を示す信号ｓｅｍｉ＿ｏｕｔ＝１を出力する。そしてバスブリッジ部が「ｉｄｌｅ」ステートに移行した場合には、このバスブリッジ部は、このバスブリッジ部に接続されているＣＰＵからのセマフォの獲得要求を採用し、ＣＰＵからのコマンドやデータをシステムバス１０７上に送出する。
【００５１】
図４は各信号値のタイミングチャートを示す図である。同図は優先順位の高いＣＰＵ（優先順位有り）と優先順位の低いＣＰＵ（優先順位無し）とが同時にセマフォアクセスを開始している場合のタイミングチャートを示したものであるが、途中で、ＣＰＵ（優先順位無し）のステート（ｓｍ＿ｓｔａｔｅ）が「ｂｕｓｙ」になっており、それ以降システムバス上にアクセスが禁止されていることを示している。
【００５２】
図５は、バスブリッジ部（１０３、１０４）におけるＣＰＵバスＩ／Ｆ部２０１が行う処理のフローチャートである。なお、同図のフローチャートに従った処理をＣＰＵバスＩ／Ｆ部２０１内の不図示の制御装置に実行させるためのプログラムやデータはＣＰＵバスＩ／Ｆ部２０１内の不図示のメモリに格納されており、これをこの制御装置が実行することで、ＣＰＵバスＩ／Ｆ部２０１は以下説明する各処理を実行する。
【００５３】
本フローチャートに従った処理は、ＣＰＵバス１０５を介してＣＰＵ（１０１、１０２）からコマンドがＣＰＵバスＩ／Ｆ部２０１に入力された後に行われる処理である。従って、このバスブリッジ部に接続されたＣＰＵはセマフォの獲得要求を行っているので、セマフォ獲得レジスタ２０２には「１」が登録される（ｒｅｇ＝１）。またこの処理の開始時におけるバスブリッジ部のステートは「ｂｕｓｙ」ステートである。
【００５４】
先ず、ステップＳ１０では、バスブリッジ部に入力された信号ｓｅｍｉ＿ｉｎの値を参照し、１であるか０であるかを判断する。そして１である場合、即ち、他のバスブリッジ部に接続されているＣＰＵがセマフォの獲得要求を行っている場合には処理をステップＳ１１に進め、信号ｓｔａｃｋの値を参照し、１であるか０であるかを判断する。そして０である場合、即ち、セマフォの獲得の為の優先順位が他のバスブリッジ部よりも低い場合には、セマフォの獲得要求は却下されるので、処理をステップＳ１０に戻す。
【００５５】
一方、ステップＳ１０で、ｓｅｍｉ＿ｉｎ＝０である場合（即ち、他のバスブリッジ部に接続されているＣＰＵがセマフォの獲得要求を行っていない場合）、或いはステップＳ１１でｓｔａｃｋ＝１である場合（即ち、セマフォの獲得の為の優先順位が他のバスブリッジ部よりも高い場合）には処理をステップＳ１２に進め、セマフォを獲得した旨を示す信号ｓｅｍｉ＿ｏｕｔ＝１を他のバスブリッジ部に対して出力する。
【００５６】
そしてステップＳ２０では、ＣＰＵバスＩ／Ｆ部２０１に入力されたコマンドを解析して、リードコマンドであるのかライトコマンドであるのかを判断する。そしてリードコマンドである場合にはＣＰＵはリードアクセスを行うので、処理をステップＳ３０に進め、以下説明するリードアクセス処理を行う。一方、ライトコマンドである場合にはＣＰＵはライトアクセスを行うので、処理をステップＳ１１０に進め、以下説明するライトアクセス処理を行う。
【００５７】
以下、リードアクセス処理、ライトアクセス処理のそれぞれについて説明する。
【００５８】
＜リードアクセス処理＞
ステップＳ３０では、リードコマンドを解析することでコマンド中の「リード先のアドレス」を参照し、そのアドレスがセマフォ獲得レジスタ２０２中のものであるのか否かを判断する。そして「リード先のアドレス」がセマフォ獲得レジスタ２０２中のものである場合には処理をステップＳ４０に進め、セマフォ獲得レジスタ２０２中の上記「リード先のアドレス」に対するリードアクセス処理を行い、この「リード先のアドレス」に保持されているデータを読み出す。
【００５９】
そして読み出し処理後、処理をステップＳ５０に進め、ｃｍｄ＿ｂｕｆ＿ｏｋ信号をアクティブにし、アクティブされたｃｍｄ＿ｂｕｆ＿ｏｋ信号をＣＰＵバスを介してＣＰＵに送出する。即ち、コマンドバッファ２０４の空き容量をＣＰＵバスを介してＣＰＵに通知する。
【００６０】
そして処理をステップＳ６０に進め、ステップＳ４０で読み出したデータをＣＰＵバスを介してＣＰＵに送出する。
【００６１】
以上で、セマフォ獲得レジスタ２０２へのリードアクセスが完了し、リードアクセス処理を終了する。
【００６２】
一方、ステップＳ３０で「リード先のアドレス」がセマフォ獲得レジスタ２０２中のものではない場合（即ち、システムバス１０７上に接続された何れかの機器のアドレスの場合）には処理をステップＳ７０に進め、リードコマンドをシステムバスＩ／Ｆ部２０３に送出する。これによりシステムバスＩ／Ｆ部２０３はこのリードコマンドをシステムバス１０７に送出する。そして処理をステップＳ８０に進め、ｃｍｄ＿ｂｕｆ＿ｏｋ信号をアクティブにし、アクティブされたｃｍｄ＿ｂｕｆ＿ｏｋ信号をＣＰＵバスを介してＣＰＵに送出する。即ち、コマンドバッファ２０４の空き容量をＣＰＵバスを介してＣＰＵに通知する。
【００６３】
そして処理をステップＳ９０に進め、上記リードコマンドによって上記機器から読み出されたデータ（リードデータ）がシステムバスＩ／Ｆ部２０３から戻ってきたか否かをチェックする。ステップＳ９０における処理は、リードデータが戻ってくるまで行う。
【００６４】
そして戻ってきた場合には処理をステップＳ１００に進め、このリードデータをＣＰＵバスを介してＣＰＵに送出する。
【００６５】
以上で、セマフォ獲得レジスタ２０２以外の機器へのリードアクセスが完了し、リードアクセス処理を終了する。
【００６６】
＜ライトアクセス処理＞
次にライトアクセス処理について説明する。ステップＳ２０でライトコマンドであると判断した場合には処理をステップＳ１１０に進め、ライトコマンドを解析することでコマンド中の「ライト先のアドレス」を参照し、そのアドレスがセマフォ獲得レジスタ２０２中のものであるのか否かを判断する。そして「ライト先のアドレス」がセマフォ獲得レジスタ２０２中のものである場合には処理をステップＳ１２０に進め、ｃｍｄ＿ｂｕｆ＿ｏｋ信号をアクティブにし、アクティブされたｃｍｄ＿ｂｕｆ＿ｏｋ信号をＣＰＵバスを介してＣＰＵに送出する。即ち、コマンドバッファ２０４の空き容量をＣＰＵバスを介してＣＰＵに通知する。そして処理をステップＳ１３０に進め、セマフォ獲得レジスタ２０２中の上記「ライト先のアドレス」に対するライトアクセス処理を行い、この「ライト先のアドレス」にライトコマンド中のデータを書き込む。
【００６７】
そして書き込み処理後、処理をステップＳ１４０に進め、ｄａｔａ＿ｂｕｆ＿ｏｋ信号をアクティブにし、アクティブされたｄａｔａ＿ｂｕｆ＿ｏｋ信号をＣＰＵバスを介してＣＰＵに送出する。即ち、データバッファ２０５の空き容量をＣＰＵバスを介してＣＰＵに通知する。
【００６８】
以上で、セマフォ獲得レジスタ２０２へのライトアクセスが完了し、ライトアクセス処理を終了する。
【００６９】
一方、ステップＳ１１０で「ライト先のアドレス」がセマフォ獲得レジスタ２０２中のものではない場合（即ち、システムバス１０７上に接続された何れかの機器のアドレスの場合）には処理をステップＳ１５０に進め、コマンドバッファ２０４にこのライトコマンドを保持するだけの空き容量があるかをチェックする。より具体的には、このライトコマンドがシングルアクセスかバーストアクセスかを判断し、シングルアクセスであると判断された場合は、コマンドバッファの空きが１つ以上であるか同かを判断する。また、このライトコマンドがバーストアクセスであると判断された場合には、コマンドバッファが空であるかどうかを判断する。いずれの場合にせよ、該当するライトコマンド分の空きがあると判断された場合、処理をステップＳ１６０に進める。
【００７０】
ステップＳ１６０では、ｃｍｄ＿ｂｕｆ＿ｏｋ信号をアクティブにし、アクティブされたｃｍｄ＿ｂｕｆ＿ｏｋ信号をＣＰＵバスを介してＣＰＵに送出する。即ち、コマンドバッファ２０４の空き容量をＣＰＵバスを介してＣＰＵに通知する。そして処理をステップＳ１７０に進め、コマンドバッファ２０４中に今回入力されたライトコマンドを書き込む。
【００７１】
そして書き込み処理後、処理をステップＳ１８０に進め、ｄａｔａ＿ｂｕｆ＿ｏｋ信号をアクティブにし、アクティブされたｄａｔａ＿ｂｕｆ＿ｏｋ信号をＣＰＵバスを介してＣＰＵに送出する。即ち、データバッファ２０５の空き容量をＣＰＵバスを介してＣＰＵに通知する。
【００７２】
以上で、セマフォ獲得レジスタ２０２以外の機器に対するライトアクセスが完了し、ライトアクセス処理を終了する。
【００７３】
尚、本実施形態では、ライトコマンドはコマンドバッファに書き込んだ時点で終了とする「ポステッドライト方式」を採用するため、以上説明した処理によって、システムバス１０７へのライトアクセス処理を完了とする。
【００７４】
以上の説明により、本実施形態によって、２つのＣＰＵが同一のリソースに対してアクセスを行う場合に、それぞれのアクセスの排他的制御を、ソフトウェアではなくハードウェアでもって行うことができ、この排他的制御をより高速に行うことができる。
【００７５】
また、本実施形態によれば、個々のＣＰＵに接続されているバスブリッジ部内に優先度を示す信号値、他のＣＰＵがセマフォの獲得要求を行っているのかを示す信号値が入力され、そして個々のバスブリッジ部でもって自身に接続されているＣＰＵがセマフォの獲得が可能であるのかを判断するので、例えばメモリアクセスに対するタイムラグが発生するという不具合や、同時にメモリ領域のフラグアクセスを行うと排他処理ができなくなるといった不具合は解消することができる。
【００７６】
［第２の実施形態］
第１の実施形態では、２つのＣＰＵを有するシステムについて説明したが、本実施形態に係るシステムは３つ以上のＣＰＵを有する。しかし３つ以上のＣＰＵを有するシステムにおいても、第１の実施形態と同様にそれぞれのバスブリッジ部間には１対のサイドバインド信号線が設けられており、自バスブリッジ部からｓｅｍｉ＿ｏｕｔ信号を他バスブリッジ部に対して送信できると共に、逆に他バスブリッジ部から出力されたｓｅｍｉ＿ｉｎ信号を自バスブリッジ部に入力することができるように構成される。これにより自バスブリッジ部は、現在どのＣＰＵがセマフォの獲得要求を行っているのかを把握することができる。
【００７７】
また、それぞれのバスブリッジ部間にはｓｔａｃｋ信号をやり取りするための信号線が設けられ、自バスブリッジ部における優先度決定信号を他バスブリッジ部に対して送出できると共に、他バスブリッジ部から送出された優先度決定信号を受けることができる。これにより、自バスブリッジ部は、自身に接続されているＣＰＵの優先度が、現在セマフォの獲得要求を行っているＣＰＵのうちどの程度のものであるのかを把握することができる。
【００７８】
以上の構成から、自バスブリッジ部に接続されているＣＰＵがセマフォの獲得要求を行っている場合にこのＣＰＵの優先度が、現在セマフォの獲得要求を行っているＣＰＵのうちどの程度の優先度であるのかを把握することができ、もし自バスブリッジ部に接続されているＣＰＵの優先度が最も高い場合にはこのＣＰＵに対してセマフォの獲得を行うことができる。
【００７９】
このような構成におけるシステムであっても、それぞれのＣＰＵに接続されているバスブリッジ部が行うべき処理は以下説明する点を除いて第１の実施形態と同じである。
【００８０】
３つ以上のＣＰＵを有するシステムの場合、それぞれのＣＰＵについて「セマフォの獲得の為の優先度の順序」を付けるため、それぞれのＣＰＵに入力される優先度決定信号の値は第１の実施形態で説明したように、「０」か「１」かでは表現することはできない。例えばｍ個のＣＰＵを有するシステムの場合、優先度決定信号はｎビット（ｎは２ｎ＞ｍを満たす最小の数）の値を有するものにする必要がある。そしてそれぞれのＣＰＵに入力される優先度決定信号は、優先度の高いＣＰＵほど大きい数値を有する優先度決定信号を入力するようにし、逆に優先度の低いＣＰＵほど小さい数値を有する優先度決定信号を入力するようにする。
【００８１】
そしてこのようなシステムにおける各バスブリッジ部が行うべき処理は、以下説明する点以外は図５のフローチャートに従った処理と同じである。即ちステップＳ１０では、自バスブリッジ部に入力される複数のｓｅｍｉ＿ｉｎ信号のうち、１であるものが１つ以上出もあるのかを判断し、ある場合には処理をステップＳ１１に進める。一方ない場合には処理をステップＳ２０に進め、以降の処理は第１の実施形態と同じである。
【００８２】
そしてステップＳ１１では、他バスブリッジ部から自バスブリッジ部に入力される複数のｓｔａｃｋ信号の値を参照し、ｓｅｍｉ＿ｉｎ＝１を出力したバスブリッジ部のうち、最も大きい値（最も高い優先度を示すｓｔａｃｋ信号値）を有する信号を特定し、更にこの最も大きい値が、自バスブリッジ部の優先度（自バスブリッジ部における優先度決定信号が示す値）よりも大きい数値である場合には処理をステップＳ１０に進め、逆に自バスブリッジ部の優先度が、他バスブリッジ部から自バスブリッジ部に入力される複数のｓｔａｃｋ信号のどの信号値よりも大きい場合には処理をステップＳ１２に進める。ステップＳ１２以降の処理については第１の実施形態と同じである。
【００８３】
そしてステップＳ１２では、自バスブリッジ部以外の全ての他バスブリッジ部に対してｓｅｍｉ＿ｏｕｔ＝１を出力する。
【図面の簡単な説明】
【００８４】
【図１】本発明の第１の実施形態に係るＣＰＵシステムの基本構成を示す図である。
【図２】バスブリッジ部１０３の基本構成を示すブロック図である。
【図３】セマフォ制御部２０６によって制御される、バスブリッジ部（１０３，１０４）の状態遷移を示す図である。
【図４】各信号値のタイミングチャートを示す図である。
【図５】バスブリッジ部（１０３、１０４）におけるＣＰＵバスＩ／Ｆ部２０１が行う処理のフローチャートである。
【図１】
2006119724.tif 000003
【図２】
2006119724.tif 000004
【図３】
2006119724.tif 000005
【図４】
2006119724.tif 000006
【図５】
2006119724.tif 000007