(57)【要約】    【課題】  ＯＳに依存することなく、複数のＣＰＵによる同一のリソースへのアクセスに対する排他制御をハードウェアで行うことができるマルチＣＰＵシステムを提供する。    【解決手段】  ２つのＣＰＵ１０１，１０２とそれぞれ１対１で対応するポステッドライト方式のバスブリッジ部１０３，１０４が設けられている。バスブリッジ部１０３，１０４は、セマフォ制御部２０５を有する。セマフォ制御部２０５は、セマフォ獲得レジスタ２０２に設定された値（reg）、サイドバンド信号線１１４（１１５）の入力サイドバインド信号（sem_in）および信号線１１２（１１３）の優先順位決定信号の状態（stack）に基づいて、サイドバインド信号線１１５（１１４）の出力サイドバインド信号（sem_out）の値を決定する。【選択図】        図２
2006285872.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵが同一のシステムバスに接続されるマルチＣＰＵシステムであって、
前記複数のＣＰＵとそれぞれ１対１で対応する複数のバスブリッジ回路を備え、
前記複数のバスブリッジ回路は、対応するＣＰＵが前記システムバス上のリソースに対してライトアクセスを行う際にライトアクセスを行うことを示す値が書き込まれるセマフォ獲得レジスタと、対応するＣＰＵに対してセマフォ制御の優先順位を決定するためのセマフォ優先順位決定手段と、前記セマフォ獲得レジスタに書き込まれている値に基づいて対応するＣＰＵがライトアクセスを行うことを示すセマフォ信号を出力するとともに、他のバスブリッジ回路からのセマフォ信号を入力するセマフォ制御手段とを有し、
前記セマフォ制御手段は、前記セマフォ獲得レジスタに書き込まれている値と、前記決定されたセマフォ制御の優先順位と、前記他のバスブリッジ回路からのセマフォ信号とに基づいて対応するＣＰＵに対して前記リソースへのアクセスを許可することを特徴とするマルチＣＰＵシステム。
【請求項２】
前記複数のバスブリッジ回路は、ライトアクセス時のライトコマンドを一旦キューイングし、対応するＣＰＵからのライトコマンド発行タイミングとは異なるタイミングで前記システムバス上のリソースに対してライトコマンドを発行することを特徴とする請求項１記載のマルチＣＰＵシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵが同一のシステムバスに接続されるマルチＣＰＵシステムに関する。
【背景技術】
【０００２】
従来、複数のＣＰＵが同一のシステムバスに接続されるマルチＣＰＵシステムにおいては、各ＣＰＵによるシステムバス上の同一のリソースへのアクセスを排他制御するために、ＯＳ（Operating System）で対応する方法、各ＣＰＵが共通でアクセス可能なメモリにセマフォフラグを用意し、そのフラグを確認した後にバスアクセスを行う方法などが用いられる（例えば、特許文献１参照）。
【特許文献１】特開平５−２０２７９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来のＯＳで対応する方法においては、ＯＳに依存するため、ソフトウェアに負担が掛かることになる。また、各ＣＰＵが共通でアクセス可能なメモリにセマフォフラグを用意する方法においては、メモリアクセスに対するタイムラグが発生し、また、同時にフラグアクセスが行われる場合、排他処理を行うことができないという事態が発生する。
【０００４】
本発明の目的は、ＯＳに依存することなく、複数のＣＰＵによる同一のリソースへのアクセスに対する排他制御をハードウェアで行うことができるマルチＣＰＵシステムを提供することにある。
【課題を解決するための手段】
【０００５】
本発明は、上記目的を達成するため、複数のＣＰＵが同一のシステムバスに接続されるマルチＣＰＵシステムであって、前記複数のＣＰＵとそれぞれ１対１で対応する複数のバスブリッジ回路を備え、前記複数のバスブリッジ回路は、対応するＣＰＵが前記システムバス上のリソースに対してライトアクセスを行う際にライトアクセスを行うことを示す値が書き込まれるセマフォ獲得レジスタと、対応するＣＰＵに対してセマフォ制御の優先順位を決定するためのセマフォ優先順位決定手段と、前記セマフォ獲得レジスタに書き込まれている値に基づいて対応するＣＰＵがライトアクセスを行うことを示すセマフォ信号を出力するとともに、他のバスブリッジ回路からのセマフォ信号を入力するセマフォ制御手段とを有し、前記セマフォ制御手段は、前記セマフォ獲得レジスタに書き込まれている値と、前記決定されたセマフォ制御の優先順位と、前記他のバスブリッジ回路からのセマフォ信号とに基づいて対応するＣＰＵに対して前記リソースへのアクセスを許可することを特徴とするマルチＣＰＵシステムを提供する。
【発明の効果】
【０００６】
本発明によれば、ＯＳに依存することなく、複数のＣＰＵによる同一のリソースへのアクセスに対する排他制御をハードウェアで行うことができる。
【０００７】
また、各ＣＰＵの優先順位およびタイミングによりセマフォ獲得レジスタの動作は異なるが、ソフトウェアからは同一の手順でセマフォの確保を行うことができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施の形態について図面を参照しながら説明する。
【０００９】
図１は本発明の一実施の形態に係るマルチＣＰＵシステムの全体構成を示すブロック図である。ここでは、簡単のために、２つのＣＰＵを有するマルチＣＰＵシステムについて説明する。
【００１０】
マルチＣＰＵシステム１００は、図１に示すように、２つのＣＰＵ１０１，１０２を有する。一方のＣＰＵ１０１は、メインＣＰＵであり、バス１０５を介してバスブリッジ部１０３と接続される。ＣＰＵ１０１から発行された各コマンドは、ＣＰＵバス１０５上にバストランザクションとして発生し、バスブリッジ部１０３に転送される。また、他方のＣＰＵ１０２は、サブＣＰＵであり、これに１対１で対応するバスブリッジ部１０４とＣＰＵバス１０６を介して接続される。各バスブリッジ部１０３，１０４は、システムバス１０７と接続され、ＣＰＵバス１０５，１０６からのバストランザクションをシステムバス１０７のトランザクションに変換する機能を有する。システムバス１０７には、ＲＡＭ１０８、機能ブロック１０９、サブシステムバスブリッジ部１１０が接続されており、システムバス１０７と各ブロック１０８，１０９，１１０との間では、システムバス１０７のプロトコルでコマンド／データのやり取りが行われる。また、システムバス１０７は、サブシステムバスブリッジ部１１０を介してサブシステムバス１１１と接続される。
【００１１】
ここで、ＣＰＵ１０１とＣＰＵ１０２がそれぞれ同時にシステムバス１０７上の同一のリソース例えば上記ＲＡＭ１０８の同じアドレスの領域に対してアクセスを行う場合、ＣＰＵ１０１がメインＣＰＵであり、ＣＰＵ１０２がサブＣＰＵであるので、ＣＰＵ１０１からのアクセスが優先される。このため、ＣＰＵ１０１に１対１で接続されるバスブリッジ部１０３には、ＣＰＵ１０１がメインＣＰＵであることを指定するための信号線１１２が接続されており、ＣＰＵ１０２に接続されているバスブリッジ部１０４には、ＣＰＵ１０２がサブＣＰＵであることを指定するための信号線１１３が接続されている。
【００１２】
本実施の形態においては、各バスブリッジ部１０３，１０４は、同一の回路構成を有するものであり、それぞれがメインＣＰＵ用バスブリッジとして動作するかサブＣＰＵ用バスブリッジとして動作するかは、上記信号線１１２，１１３により自動的に切り替えられる。ここでは、メインＣＰＵ用バスブリッジ部１０３に対する信号線１１２は、ＶＤＤと接続され、サブＣＰＵ用バスブリッジ部１０４に対する信号線１１３は、ＧＮＤと接続される。バスブリッジ部１０３とバスブリッジ部１０４とは、１対のサイドバインド信号線１１４，１１５を介して接続されており、互いに、それぞれのシステムバス１０７上のアクセス先を監視する。
【００１３】
次に、バスブリッジ部１０３，１０４の内部回路構成について図２を参照しながら説明する。図２は図１のバスブリッジ部１０３，１０４の内部回路構成を示すブロック図である。上述したように、バスブリッジ部１０３，１０４は、同じ回路構成を有するものであるが、入出力する信号は異なる。よって、図中、バスブリッジ部１０４に接続される信号または信号線は、括弧内の符号で示す。
【００１４】
各バスブリッジ部１０３，１０４は、図２に示すように、ＣＰＵバスＩ／Ｆ部２０１、システムバスＩ／Ｆ部２０３、コマンドバッファ２０４およびセマフォ制御部２０５を有する。ＣＰＵバスＩ／Ｆ部２０１は、ＣＰＵバス１０５（１０６）のトランザクションを受信してコマンド／データの送受信を行う。ＣＰＵバスＩ／Ｆ部２０１は、セマフォ獲得レジスタ２０２を内蔵し、このレジスタ２０２へのリードライト制御、およびコマンドバッファ２０４へのデータの書き込みの制御を行う。また、ＣＰＵバスＩ／Ｆ部２０１は、ＣＰＵバス１０５（１０６）からのコマンドがシステムバス１０７上のリソースに対するリードコマンドである場合、このコマンドを、コマンドバッファ２０４には送らずに、システムバスＩ／Ｆ部２０３に転送する。また、ＣＰＵバスＩ／Ｆ部２０１は、コマンドバッファ２０４に現在蓄積されているかコマンドの数（count）を確認し、コマンドバッファ２０４がフルである場合は、ＣＰＵバス１０５（１０６）上のトランザクションを停止させるよう制御する。
【００１５】
システムバスＩ／Ｆ部２０３は、システムバス１０７と接続され、コマンドバッファ２０４に蓄積されたライトコマンドをシステムバス１０７のプロトコルに変換するなどして、コマンド／データの出力を行う。また、リードアクセス時には、システムバス１０７から受け取ったリードデータを、ＣＰＵバス１０５（１０６）のプロトコルに変換してＣＰＵバスＩ／Ｆ部２０１に送信する。
【００１６】
コマンドバッファ２０４は、ＣＰＵバス１０５（１０６）からのコマンドがシステムバス１０７へのライトコマンドである場合に、当該ライトコマンドを受け取り、バッファリングする。コマンドバッファ２０４は、４コマンド分の容量を有し、何らかの原因でシステムバス１０７上にコマンドを出力することができない場合、最大４つまでのライトコマンドをキューイングすることが可能である。
【００１７】
本実施の形態におけるバスブリッジ部１０３，１０４は、ライトコマンドのみをコマンドバッファ２０４に一旦キューイングすることにより、ライトアクセス時に、システムバス１０７上のリソースに対するライトアクセスが完了するのを待つことなく、確実に、ＣＰＵバス１０５（１０６）のトランザクションを終了させることができるポステッドライト方式のバスブリッジであり、ライト時は、ＣＰＵライト動作完了を待つ必要がないため、コマンドのスループット向上を期待することができる。
【００１８】
セマフォ制御部２０５は、セマフォ獲得レジスタ２０２に設定された値（reg）、サイドバンド信号線１１４（１１５）の入力サイドバインド信号（sem_in）および信号線１１２（１１３）の優先順位決定信号の状態（stack）に基づいて、サイドバインド信号線１１５（１１４）の出力サイドバインド信号（sem_out）の値を決定する。
【００１９】
次に、セマフォ制御部２０４の制御について図３および図４を参照しながら説明する。図３は図２のセマフォ制御部２０４の制御内容を示すステートマシン図、図４はＣＰＵ（優先順位有り）とＣＰＵ（優先順位無し）とが同時にセマフォアクセスを開始している場合のタイミングチャートを示す図である。
【００２０】
図３に示すように、初期状態すなわち［reset］で示されるステートにおいては、sem_out信号として「０」が出力される。sem_out＝０の場合、このバスブリッジ部に対応するＣＰＵは、システムバス１０７上のリソースに対してアクセスを行うことができない。［reset］ステートから［idle］ステートへの遷移は、無条件で行われる。［idle］ステートにおいては、sem_out信号として「１」が出力される。この状態においては、このバスブリッジ部に対するＣＰＵがシステムバス１０７上のリソースに対してアクセスを行うことが可能である。
【００２１】
［idle］ステートにおいて、以下の条件１が成立する場合、ステートは［busy］ステートへ遷移する。
【００２２】
条件１：（reg＝０かつsem_in＝１）または（reg＝１、sem_in＝１かつstack＝０）
上記条件１のうち、前者の条件（reg＝０かつsem_in＝１）は、自身のセマフォ獲得レジスタ２０２に対して設定されていない（＝自身のＣＰＵからは獲得要求が無い）状態において他方のＣＰＵからのセマフォ獲得要求が出されている場合の条件であるため、ステートはセマフォ獲得ステートである［busy］ステートへ遷移する。
【００２３】
後者の条件（reg＝１、sem_in＝１かつstack＝０）は、自身のセマフォ獲得レジスタ２０２に対して設定されている状態でかつ他方のＣＰＵからのセマフォ獲得要求が出されている場合の条件であるため、この場合は、自身に優先順位があるか否かを評価する必要があり、自身に優先順位がない場合（stack＝０が成り立つ場合）と同様に、ステートは、［busy］ステートへ遷移する。
【００２４】
［busy］ステートにおいては、sem_out信号として「０」が出力される。この状態においては、このバスブリッジに対するＣＰＵがシステムバス１０７上の領域に対してアクセスを行うことができない。このステートにおいては、以下の条件２が成り立つ場合、ステートは、［idle］ステートへ遷移する。
【００２５】
条件２：（sem_in＝０）または（reg＝１、sem_in＝１かつstack＝１）
上記条件２のうち、前者の条件は、他方のＣＰＵからのセマフォ獲得要求が出されていない場合の条件であるため、このバスブリッジに対するＣＰＵは、自由にシステムバス１０７に対してアクセスすることができる状態にある。よって、ステートは、［idle］ステートへ遷移する。
【００２６】
後者の条件は、自身のセマフォ獲得レジスタ２０２に対して設定されている状態でかつ他方のＣＰＵからのセマフォ獲得要求が出されている場合の条件であるため、この場合は、自身に優先順位があるか否かを評価する必要があり、自身に優先順位がある場合（stack＝１が成り立つ場合）は、他方のＣＰＵの要求を無視して、自身がセマフォを獲得することができるため、ステートは、［idle］ステートへ遷移する。
【００２７】
この場合すなわちＣＰＵ（優先順位有り）とＣＰＵ（優先順位無し）とが同時にセマフォアクセスを開始している場合、図４に示すように、途中で、ＣＰＵ（優先順位無し）のsm_stateが［busy］ステートになり、それ以降、ＣＰＵ（優先順位無し）からシステムバス１０７上の領域に対するアクセスが禁止されることになる。
【００２８】
次に、ＣＰＵバスＩ／Ｆ部２０１の制御について図５を参照しながら説明する。図５は図２のＣＰＵバスＩ／Ｆ部２０１の制御の手順を示すフローチャートである。
【００２９】
ＣＰＵバスＩ／Ｆ部２０１がＣＰＵバス１０５（１０６）からのコマンドを受信すると、図５に示すように、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ１において、受信したコマンドがリードコマンドであるかライトコマンドであるかを判定する。ここで、受信したコマンドがリードコマンドであると判定された場合、アクセスがリードアクセスであるので、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ２において、リードコマンドのアドレス値に基づいてアクセスが内部のセマフォ獲得レジスタ２０２へのアクセスであるか否かを判定する。
【００３０】
上記ステップＳ２においてアクセスがセマフォ獲得レジスタ２０２へのアクセスであると判定された場合、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ３において、セマフォ獲得レジスタ２０２に対してリード動作を開始し、セマフォ獲得レジスタ２０２に設定された値を読み出す。次いで、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ４において、セマフォ獲得レジスタ２０２から読み出された値をＣＰＵバス１０５（１０６）に対して送信する。そして、ＣＰＵバスＩ／Ｆ部２０１は、本処理を終了する。
【００３１】
上記ステップＳ２においてアクセスがセマフォ獲得レジスタ２０２へのアクセスでないと判定された場合、ＣＰＵバスＩ／Ｆ部２０１は、アクセスがシステムバス１０７へのリードアクセスであると判断して、ステップＳ５において、システムバスＩ／Ｆ部２０３にリードコマンドを渡す。次いで、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ６において、システムバスＩ／Ｆ部２０３からリードデータが返されるのを待ち、リードデータが返されると、ステップＳ７において、リードデータをＣＰＵバス１０５（１０６）へ送信する。そして、ＣＰＵバスＩ／Ｆ部２０１は、本処理を終了する。
【００３２】
上記ステップＳ１において受信したコマンドがライトコマンドであると判定された場合、アクセスがライトアクセスであるので、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ８において、コマンドのアドレス値に基づいてアクセスが内部のセマフォ獲得レジスタ２０２へのライトアクセスであるか否かを判定する。ここで、アクセスがセマフォ獲得レジスタ２０２へのアクセスであると判定された場合、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ９において、コマンドバッファ２０４が空き状態になるのを待つ。これは、コマンドバッファ２０４が空き状態にない場合にセマフォ獲得レジスタ２０２への書き込みを行うと、まだ、システムバス１０７へ送出されるライトコマンドがあるにもかかわらず、セマフォ獲得レジスタ２０２の内容が書き換えられることになるため、ＣＰＵが期待したセマフォの排他制御により保護されるべきライトコマンドが保護されないことを回避するためのものである。
【００３３】
そして、コマンドバッファ２０４が空き状態になると、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ１０において、sem_in信号が「１」になるのを待つ。sem_in信号が「０」である場合は、他方のＣＰＵがセマフォを獲得している状態であるため、ＣＰＵバスＩ／Ｆ部２０１は、他方のＣＰＵがセマフォを開放した場合すなわちsem_in信号が「１」になるまで待機することになる。ここで、sem_in信号が「１」になると、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ１１において、受信したライトコマンドに含まれるライトデータをセマフォ獲得レジスタ２０２へ書き込み、本処理を終了する。
【００３４】
上記ステップＳ８においてアクセスがセマフォ獲得レジスタ２０２へのライトアクセスでないすなわちシステムバス１０７へのライトアクセスであると判定された場合、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ１２において、コマンドバッファ２０４内に空きが生じるのを待つ。このとき、実際には、このライトコマンドがシングルアクセスかバーストアクセスかの判定が行われ、ライトコマンドがシングルアクセスであると判定された場合、コマンドバッファ２０４に１つ以上の空きがあるかの判定が行われる。また、このライトコマンドがバーストアクセスであると判定された場合、コマンドバッファ２０４にライトコマンド分の空きがあるか否かの判定が行われる。いずれの場合においても、コマンドバッファ２０４に必要な空きがあれば、ＣＰＵバスＩ／Ｆ部２０１は、ステップＳ１３において、受信したライトコマンドを、コマンドバッファ２０４へ書き込み、本処理を終了する。すなわち、本実施の形態においては、ポステッドライト方式により、ライトコマンドをコマンドバッファ２０４へ書き込んだ時点でライトアクセスが終了する。
【００３５】
以上より、ＣＰＵは、システムバス１０７上へのアクセス時の直前と直後にそれぞれ、１回ずつセマフォ獲得レジスタ２０２へのアクセスを行うことによって、２回のセマフォ獲得レジスタ２０２へのアクセスに挟まれた、システムバス１０７上のリソースへのライトコマンドに対して、排他処理を確実にかつ自動的に行うことが可能となる。
【００３６】
また、本実施の形態においては、簡単のため２つのＣＰＵ間での排他制御について説明したが、当然のことながら、本発明の原理を、３つ以上のＣＰＵを用いたマルチＣＰＵシステムに対して適用することは可能である。この場合、上記構成の内、優先順位指定用の信号（stack）の増設と、セマフォ制御部２０５のステートマシンの遷移条件を変更すればよい。
【図面の簡単な説明】
【００３７】
【図１】本発明の一実施の形態に係るマルチＣＰＵシステムの全体構成を示すブロック図である。
【図２】図１のバスブリッジ部１０３，１０４の内部回路構成を示すブロック図である。
【図３】図２のセマフォ制御部２０４の制御内容を示すステートマシン図である。
【図４】ＣＰＵ（優先順位有り）とＣＰＵ（優先順位無し）とが同時にセマフォアクセスを開始している場合のタイミングチャートを示す図である。
【図５】図２のＣＰＵバスＩ／Ｆ部２０１の制御の手順を示すフローチャートである。
【符号の説明】
【００３８】
１００  マルチＣＰＵシステム
１０１，１０２  ＣＰＵ
１０３，１０４  バスブリッジ部
１０７  システムバス
１１２，１１３  信号線
２０１  ＣＰＵバスＩ／Ｆ部
２０２  セマフォ獲得レジスタ
２０３  システムバスＩ／Ｆ部
２０４  コマンドバッファ
２０５  セマフォ制御部
【図１】
2006285872.tif 000003
【図２】
2006285872.tif 000004
【図３】
2006285872.tif 000005
【図４】
2006285872.tif 000006
【図５】
2006285872.tif 000007