説明

CPUシステム、バスブリッジ、その制御方法、及びコンピュータシステム

【課題】 複数のCPUでもって同一のアクセス対象に対してアクセスを行う場合に、不具合なくセマフォの獲得に係る排他制御処理を行う為の技術を提供すること。
【解決手段】 バスブリッジ部103は、CPU101からセマフォの獲得要求を受けた場合には、バスブリッジ部104から受信したsemi_out信号と、信号線112を介して受けた優先度に応じて、セマフォの獲得を制御する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のCPUが同時にセマフォの獲得要求を行った場合に、獲得の排他的制御を行うための技術に関するものである。
【背景技術】
【0002】
従来、複数のCPUによる同一リソースへのアクセスを排他制御は、OS(オペレーティングシステム)により行うか、各CPUが共通でアクセスできるメモリ領域にセマフォフラグを用意し、そのフラグを確認した後にバスアクセスをするというような手段が取られていた(特許文献1を参照)。
【特許文献1】特開平5−20279号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
上記前者の従来技術では、排他制御処理は全てOSに任せるために、ソフトウェアに負担が掛かっていた。また後者の従来技術である、メモリ領域にフラグを用意する方法についてもメモリアクセスに対するタイムラグが発生するという不具合や、同時にメモリ領域のフラグアクセスを行うと排他処理ができなくなるといった不具合が発生してしまう。
【0004】
本発明は以上の問題に鑑みて成されたものであり、複数のCPUでもって同一のアクセス対象に対してアクセスを行う場合に、不具合なくセマフォの獲得に係る排他制御処理を行う為の技術を提供することを目的とする。
【課題を解決するための手段】
【0005】
本発明の目的を達成する為に、例えば本発明のCPUシステムは以下の構成を備える。
【0006】
即ち、複数のCPUと、それぞれのCPUに1対1で接続されている複数のバスブリッジとを有するCPUシステムであって、
それぞれのバスブリッジは、
他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信手段と、
自バスブリッジに接続されているCPUからセマフォの獲得要求を受けた場合には、前記受信手段が受信した信号、及び前記自バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御手段と
を備えることを特徴とする。
【0007】
本発明の目的を達成する為に、例えば本発明のコンピュータシステムは、上記CPUシステムを搭載することを特徴とする。
【0008】
本発明の目的を達成する為に、例えば本発明のバスブリッジは以下の構成を備える。
【0009】
即ち、CPUに接続されているバスブリッジであって、
他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信手段と、
前記バスブリッジに接続されているCPUからセマフォの獲得要求を受けた場合には、前記受信手段が受信した信号、及び前記バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御手段と
を備えることを特徴とする。
【0010】
本発明の目的を達成する為に、例えば本発明のコンピュータシステムは、上記バスブリッジを搭載することを特徴とする。
【0011】
本発明の目的を達成する為に、例えば本発明のCPUシステムの制御方法は以下の構成を備える。
【0012】
即ち、複数のCPUと、それぞれのCPUに1対1で接続されている複数のバスブリッジとを有するCPUシステムの制御方法であって、
それぞれのバスブリッジの制御方法は、
他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信工程と、
自バスブリッジに接続されているCPUからセマフォの獲得要求を受けた場合には、前記受信工程で受信した信号、及び前記自バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御工程と
を備えることを特徴とする。
【0013】
本発明の目的を達成する為に、例えば本発明のバスブリッジの制御方法は以下の構成を備える。
【0014】
即ち、CPUに接続されているバスブリッジの制御方法であって、
他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信工程と、
前記バスブリッジに接続されているCPUからセマフォの獲得要求を受けた場合には、前記受信工程で受信した信号、及び前記バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御工程と
を備えることを特徴とする。
【発明の効果】
【0015】
本発明の構成により、複数のCPUでもって同一のアクセス対象に対してアクセスを行う場合に、不具合なくセマフォの獲得に係る排他制御処理を行うことができる。
【発明を実施するための最良の形態】
【0016】
以下添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。
【0017】
[第1の実施形態]
図1は、本実施形態に係るCPUシステムの基本構成を示す図である。同図において101,102はCPU、103,104はバスブリッジ部、105,106はCPUバス、107はシステムバス、108はRAM、109は機能ブロック、110はサブシステムバスブリッジ部、111はサブシステムバスである。
【0018】
CPU101,102は、それぞれバスブリッジ部103,104と電気的に接続されており、更にバスブリッジ部103、104はシステムバス107に接続されており、更にシステムバス107上には上記RAM104、機能ブロック109、サブシステムバスブリッジ部110が接続されている。よってCPU101,102は、バスブリッジ部103、104を介してシステムバス107に接続されている上記RAM104、機能ブロック109、サブシステムバスブリッジ部110等にアクセスすることができる。
【0019】
更にこのアクセスについてより詳細に説明する。CPU101を例に取ると、CPU101から発行されるコマンドはCPUバス105を介してバスブリッジ部103にトランザクションとして転送される。バスブリッジ部103はこのトランザクションをシステムバス107上に送出するのに適した形式に変換し、変換後のトランザクションをシステムバス107上に送出する。
【0020】
このアクセスに係る説明についてはCPU102についても同様であり、CPU102から発行されるコマンドはCPUバス106を介してバスブリッジ部104にトランザクションとして転送される。バスブリッジ部104はこのトランザクションをシステムバス107上に送出するのに適した形式に変換し、変換後のトランザクションをシステムバス107上に送出する。
【0021】
またバスブリッジ部103には信号線112が接続されており、この信号線112を介してバスブリッジ部103には、CPU101がメインCPUであることを示す信号が入力される。本実施形態では、信号線112にはVDDを接続する。
【0022】
一方、バスブリッジ部104には信号線113が接続されており、この信号線113を介してバスブリッジ部104には、CPU102がサブCPUであることを示す信号が入力される。本実施形態では信号線113にはGNDを接続する。
【0023】
本実施形態では、バスブリッジ部103、104は共に同じ構成を有するものであるので、それぞれのバスブリッジ部に接続する信号線を変更するだけで、それぞれのバスブリッジ部に接続されているCPUがメインCPUであるのかサブCPUであるのかを切り替えることができる。
【0024】
ここで、メインCPUはサブCPUよりも優先してアクセス対象にアクセスすることができるものとする。例えばCPU101とCPU102とが同じアクセス対象に対して同時にアクセスを行った場合にはCPU101がCPU102よりも先にこのアクセス対象にアクセスすることができる。
【0025】
バスブリッジ部103とバスブリッジ部104との間には1対のサイドバインド信号線114、115が設けられている。信号線114はバスブリッジ部103からバスブリッジ部104に信号を送出するために設けられており、信号線115はバスブリッジ部104からバスブリッジ部103に信号を送出する為に設けられている。信号線114,115を介して互いに送出される信号については後述する。
【0026】
以上のことから、それぞれのバスブリッジ部103,104は、CPU101,102と各部(同図ではRAM104、機能ブロック109、サブシステムバスブリッジ部110)との間のデータ通信を管理、制御する。
【0027】
図2は、バスブリッジ部103の基本構成を示すブロック図である。以下同図を用いてバスブリッジ部103の基本構成について説明するが、上述の通り、バスブリッジ部104はバスブリッジ部103と同じ基本構成を有するので、以下の説明はバスブリッジ部104についても実質的には同じである。即ち以下の説明において、「CPU101」を「CPU102」と読み替え、「CPUバス105」を「CPUバス106」と読み替え、「信号線114」を「信号線115」と読み替え、「信号線115」を「信号線114」と読み替え、「信号線112」を「信号線113」と読み替えれば良い。
【0028】
同図において201はCPUバスI/F部で、CPUバス105を介してCPU101から送信されたトランザクションを受信し、受信したトランザクションに応じて、後段のコマンドバッファ204へのコマンドの送信や、ライトデータバッファ205へのデータの送信(書き込み)、自身の内部に備わっているセマフォ獲得レジスタ(register)202等とのデータの送受信、また、後段のシステムバスI/F部203からのデータの受信を行う。
【0029】
また、後段のシステムバスI/F部203との通信によってシステムバスI/F部203の状態を確認し、システムバスI/F部203の状態が「混んでいる」場合には、CPUバス105を介してのトランザクションを停止させる為に、CPU101に通知する等の制御処理を行う。
【0030】
202は上記セマフォ獲得レジスタで、現在CPU101がセマフォの獲得要求を行っている場合には、このレジスタには「1」が登録されており、逆に現在獲得要求を行っていない場合にはこのレジスタには「0」が登録されている。以下、この登録値を示す変数を「reg」と証する。
【0031】
203はシステムバスI/F部で、システムバス107に接続されており、コマンドバッファ204に蓄積されているライトコマンドを受け取り、システムバス107に適した形式に変換してシステムバス107上に送出する。また、リードアクセス時は、システムバス107から受け取ったリードデータをCPUバス105に適したプロトコルに変換して、CPUバスI/F部201に送出する。
【0032】
204はコマンドバッファで、CPUバス105、CPUバスI/F部201を介してCPU101から受信したコマンドがシステムバス107へのライトコマンドである場合にはこのライトコマンドを受け、蓄積するバッファとして機能する。
【0033】
205はライトデータバッファで、CPUバス105、CPUバスI/F部201を介してCPU101から受信したデータがシステムバス107へのライトデータである場合にはこのライトデータを受け、蓄積するバッファとして機能する。
【0034】
コマンドバッファ204、ライトデータバッファ205は2コマンド/データ分の容量を有し、何らかの原因でシステムバス107に対してコマンド/データが送出できない場合には、最大2つまでのライトコマンド/ライトデータをキューイングすることができる。本実施形態で説明するバスブリッジは、ライトコマンドのみコマンドバッファ204に一旦キューイングする事で、ライトアクセス時に確実にシステムバス107上のリソースに対するライトアクセスが完了するまで待たずに、CPU101からのトランザクションを終了できる、ポステッドライト方式のバスブリッジであり、ライト時はCPUライト動作完了を待たなくても良いため、コマンドのスループット向上が期待できる。
【0035】
206はセマフォ制御部で、セマフォ獲得レジスタ202に登録されている値(reg)と、信号線115を介してバスブリッジ部104から送出された信号sem_in(入力サイドバインド信号)、信号線112を介して送出される優先順位決定信号(stack)によって、信号線114を介してバスブリッジ部104に送出する信号sem_out(出力サイドバインド信号)の値を決定する。
【0036】
図3は、セマフォ制御部206によって制御される、バスブリッジ部(103,104)の状態遷移を示す図である。同図において「reset」は初期状態を示すステートである。このステートにおいてはsem_out信号は0が出力される。ちなみにsem_out=0の場合、このバスブリッジに対応するCPUはシステムバス107に対してアクセスできない、即ちセマフォが獲得できていないことを示している。そしてバスブリッジ部の状態は「reset」ステートから「idle」ステートに無条件で遷移する。
【0037】
「idle」ステートではsem_out信号は1が出力される。ちなみにsem_out=1の場合、このバスブリッジに対応するCPUはシステムバス107に対してアクセスできる、即ちセマフォが獲得できていることを示している。ここで、バスブリッジ部は、「idle」ステートにおいて以下の<条件1>が成り立つ場合、「busy」ステートに遷移する。
【0038】
<条件1>
(reg=0 且つ sem_in=1) もしくは
(reg=1 且つ sem_in=1 且つ stack=0)
<条件1>の前半の条件について、CPU101、バスブリッジ部103を例に取って説明すると、バスブリッジ部103内のセマフォ獲得レジスタ202に登録されている変数regの値が0(現在、バスブリッジ部103がCPU101からのセマフォの獲得要求を受けていない)の場合で、且つ信号線115を介して受けた信号semi_inの値が1(バスブリッジ部104からセマフォの獲得要求を受けた)の場合には、バスブリッジ部104に接続されているCPU102がセマフォを獲得できるので、バスブリッジ部103の状態は「待機状態」であることを示す「busy」ステートに遷移する。また、バスブリッジ部103は、自身の状態が「busy」ステートであることをバスブリッジ部104に通知するために、信号線114を介して信号semi_out=0を出力する。
【0039】
これはCPU102、バスブリッジ部104についても同様で、バスブリッジ部104内のセマフォ獲得レジスタ202に登録されている変数regの値が0(現在、バスブリッジ部104がCPU102からのセマフォの獲得要求を受けていない)場合で、且つ信号線114を介して受けた信号semi_inの値が1(バスブリッジ部103からセマフォの獲得要求を受けた)場合には、バスブリッジ部103に接続されているCPU101がセマフォを獲得できるので、バスブリッジ部104の状態は「待機状態」であることを示す「busy」ステートに遷移する。また、バスブリッジ部104は、自身の状態が「busy」ステートであることをバスブリッジ部103に通知するために、信号線115を介して信号semi_out=0を出力する。
【0040】
一方、<条件1>の後半の条件について、CPU101、バスブリッジ部103を例に取って説明すると、バスブリッジ部103内のセマフォ獲得レジスタ202に登録されている変数regの値が1(現在、バスブリッジ部103がCPU101からのセマフォの獲得要求を受けてる)場合で、且つ信号線115を介して受けた信号semi_inの値が1(バスブリッジ部104からセマフォの獲得要求を受けた)場合、即ちCPU101、CPU102が共にセマフォの獲得要求を行っている場合には、信号線112を介してバスブリッジ部103に入力される信号、即ち、優先順位決定信号(stack)の値を参照し、バスブリッジ部103がバスブリッジ部104よりも優先順位が高いか否かを判断する。
【0041】
本実施形態の場合、バスブリッジ部103に信号線112を介して入力される優先順位決定信号(stack)の値は「1」、バスブリッジ部104に信号線113を介して入力される優先順位決定信号(stack)の値は「0」、そして優先順位決定信号の値が「1」である方が優先順位が高いものであるとする。従って、バスブリッジ部103とバスブリッジ部104とが共にセマフォの獲得要求を行っている場合には、バスブリッジ部103の方が、バスブリッジ部104より優先してセマフォを獲得することができる。
【0042】
よってバスブリッジ部103は、信号線112を介してバスブリッジ部103に入力される優先順位決定信号(stack)の値を参照し、「0」である場合にはバスブリッジ部104の方がバスブリッジ部103よりも優先してセマフォを獲得するので、バスブリッジ部103の状態は「待機状態」であることを示す「busy」ステートに遷移する。また、バスブリッジ部103は、自身の状態が「busy」ステートであることをバスブリッジ部104に通知するために、信号線114を介して信号semi_out=0を出力する。
【0043】
これはCPU102、バスブリッジ部104についても同様で、バスブリッジ部104内のセマフォ獲得レジスタ202に登録されている変数regの値が1(現在、バスブリッジ部104がCPU101からのセマフォの獲得要求を受けてる)場合で、且つ信号線114を介して受けた信号semi_inの値が1(バスブリッジ部103からセマフォの獲得要求を受けた)場合、即ちCPU101、CPU102が共にセマフォの獲得要求を行っている場合には、信号線113を介してバスブリッジ部104に入力される信号、即ち、優先順位決定信号(stack)の値を参照し、「0」である場合にはバスブリッジ部103の方がバスブリッジ部104よりも優先してセマフォを獲得するので、バスブリッジ部104の状態は「待機状態」であることを示す「busy」ステートに遷移する。また、バスブリッジ部104は、自身の状態が「busy」ステートであることをバスブリッジ部103に通知するために、信号線115を介して信号semi_out=0を出力する。
【0044】
このように、<条件1>で示した条件が満たされた場合には、バスブリッジ部(103、104)のステートは「busy」ステートに移行すると共に、相手のバスブリッジ部に対してその旨を示す信号semi_out=0を出力する。そしてバスブリッジ部が「busy」ステートに移行した場合には、このバスブリッジ部は、このバスブリッジ部に接続されているCPUからのセマフォの獲得要求を却下する。
【0045】
次に、バスブリッジ部が現在「busy」ステートにある場合に、以下に示す<条件2>が満たされれば、バスブリッジ部のステートは「idle」ステートに移行する。
【0046】
<条件2>
(sem_in=0) もしくは
(reg=1 且つ sem_in=1 且つ stack=1)
<条件2>の前半の条件について、CPU101、バスブリッジ部103を例に取って説明すると、信号線115を介して受けた信号semi_inの値が0(バスブリッジ部104からセマフォの獲得要求を受けていない)場合には、バスブリッジ部103に接続されているCPU101は自由にシステムバス107にアクセス可能である(セマフォを獲得できる)ので、バスブリッジ部103の状態は「いつでもシステムバス107にアクセス可能」であることを示す「idle」ステートに遷移する。また、バスブリッジ部103は、自身の状態が「idle」ステートであることをバスブリッジ部104に通知するために、信号線114を介して信号semi_out=1を出力する。
【0047】
これはCPU102、バスブリッジ部104についても同様で、信号線114を介して受けた信号semi_inの値が0(バスブリッジ部103からセマフォの獲得要求を受けていない)場合には、バスブリッジ部104に接続されているCPU102は自由にシステムバス107にアクセス可能である(セマフォを獲得できる)ので、バスブリッジ部104の状態は「いつでもシステムバス107にアクセス可能」であることを示す「idle」ステートに遷移する。また、バスブリッジ部104は、自身の状態が「idle」ステートであることをバスブリッジ部103に通知するために、信号線115を介して信号semi_out=1を出力する。
【0048】
一方、<条件2>の後半の条件について、CPU101、バスブリッジ部103を例に取って説明すると、バスブリッジ部103内のセマフォ獲得レジスタ202に登録されている変数regの値が1(現在、バスブリッジ部103がCPU101からのセマフォの獲得要求を受けてる)の場合で、且つ信号線115を介して受けた信号semi_inの値が1(バスブリッジ部104からセマフォの獲得要求を受けた)の場合、即ちCPU101、CPU102が共にセマフォの獲得要求を行っている場合には、信号線112を介してバスブリッジ部103に入力される信号、即ち、優先順位決定信号(stack)の値を参照し、バスブリッジ部103がバスブリッジ部104よりも優先順位が高いか否かを判断する。よってバスブリッジ部103は、信号線112を介してバスブリッジ部103に入力される優先順位決定信号(stack)の値を参照し、「1」である場合にはバスブリッジ部103の方がバスブリッジ部104よりも優先してセマフォを獲得するので、バスブリッジ部103の状態は「idle」ステートに遷移する。また、バスブリッジ部103は、自身の状態が「idle」ステートであることをバスブリッジ部104に通知するために、信号線114を介して信号semi_out=1を出力する。
【0049】
これはCPU102、バスブリッジ部104についても同様で、バスブリッジ部104内のセマフォ獲得レジスタ202に登録されている変数regの値が1(現在、バスブリッジ部104がCPU101からのセマフォの獲得要求を受けてる)場合で、且つ信号線114を介して受けた信号semi_inの値が1(バスブリッジ部103からセマフォの獲得要求を受けた)場合、即ちCPU101、CPU102が共にセマフォの獲得要求を行っている場合には、信号線113を介してバスブリッジ部104に入力される信号、即ち、優先順位決定信号(stack)の値を参照し、バスブリッジ部104がバスブリッジ部103よりも優先順位が高いか否かを判断する。よってバスブリッジ部104は、信号線114を介してバスブリッジ部104に入力される優先順位決定信号(stack)の値を参照し、「1」である場合にはバスブリッジ部104の方がバスブリッジ部103よりも優先してセマフォを獲得するので、バスブリッジ部104の状態は「idle」ステートに遷移する。また、バスブリッジ部104は、自身の状態が「idle」ステートであることをバスブリッジ部103に通知するために、信号線115を介して信号semi_out=1を出力する。
【0050】
このように、<条件2>で示した条件が満たされた場合には、バスブリッジ部(103、104)のステートは「idle」ステートに移行すると共に、相手のバスブリッジ部に対してその旨を示す信号semi_out=1を出力する。そしてバスブリッジ部が「idle」ステートに移行した場合には、このバスブリッジ部は、このバスブリッジ部に接続されているCPUからのセマフォの獲得要求を採用し、CPUからのコマンドやデータをシステムバス107上に送出する。
【0051】
図4は各信号値のタイミングチャートを示す図である。同図は優先順位の高いCPU(優先順位有り)と優先順位の低いCPU(優先順位無し)とが同時にセマフォアクセスを開始している場合のタイミングチャートを示したものであるが、途中で、CPU(優先順位無し)のステート(sm_state)が「busy」になっており、それ以降システムバス上にアクセスが禁止されていることを示している。
【0052】
図5は、バスブリッジ部(103、104)におけるCPUバスI/F部201が行う処理のフローチャートである。なお、同図のフローチャートに従った処理をCPUバスI/F部201内の不図示の制御装置に実行させるためのプログラムやデータはCPUバスI/F部201内の不図示のメモリに格納されており、これをこの制御装置が実行することで、CPUバスI/F部201は以下説明する各処理を実行する。
【0053】
本フローチャートに従った処理は、CPUバス105を介してCPU(101、102)からコマンドがCPUバスI/F部201に入力された後に行われる処理である。従って、このバスブリッジ部に接続されたCPUはセマフォの獲得要求を行っているので、セマフォ獲得レジスタ202には「1」が登録される(reg=1)。またこの処理の開始時におけるバスブリッジ部のステートは「busy」ステートである。
【0054】
先ず、ステップS10では、バスブリッジ部に入力された信号semi_inの値を参照し、1であるか0であるかを判断する。そして1である場合、即ち、他のバスブリッジ部に接続されているCPUがセマフォの獲得要求を行っている場合には処理をステップS11に進め、信号stackの値を参照し、1であるか0であるかを判断する。そして0である場合、即ち、セマフォの獲得の為の優先順位が他のバスブリッジ部よりも低い場合には、セマフォの獲得要求は却下されるので、処理をステップS10に戻す。
【0055】
一方、ステップS10で、semi_in=0である場合(即ち、他のバスブリッジ部に接続されているCPUがセマフォの獲得要求を行っていない場合)、或いはステップS11でstack=1である場合(即ち、セマフォの獲得の為の優先順位が他のバスブリッジ部よりも高い場合)には処理をステップS12に進め、セマフォを獲得した旨を示す信号semi_out=1を他のバスブリッジ部に対して出力する。
【0056】
そしてステップS20では、CPUバスI/F部201に入力されたコマンドを解析して、リードコマンドであるのかライトコマンドであるのかを判断する。そしてリードコマンドである場合にはCPUはリードアクセスを行うので、処理をステップS30に進め、以下説明するリードアクセス処理を行う。一方、ライトコマンドである場合にはCPUはライトアクセスを行うので、処理をステップS110に進め、以下説明するライトアクセス処理を行う。
【0057】
以下、リードアクセス処理、ライトアクセス処理のそれぞれについて説明する。
【0058】
<リードアクセス処理>
ステップS30では、リードコマンドを解析することでコマンド中の「リード先のアドレス」を参照し、そのアドレスがセマフォ獲得レジスタ202中のものであるのか否かを判断する。そして「リード先のアドレス」がセマフォ獲得レジスタ202中のものである場合には処理をステップS40に進め、セマフォ獲得レジスタ202中の上記「リード先のアドレス」に対するリードアクセス処理を行い、この「リード先のアドレス」に保持されているデータを読み出す。
【0059】
そして読み出し処理後、処理をステップS50に進め、cmd_buf_ok信号をアクティブにし、アクティブされたcmd_buf_ok信号をCPUバスを介してCPUに送出する。即ち、コマンドバッファ204の空き容量をCPUバスを介してCPUに通知する。
【0060】
そして処理をステップS60に進め、ステップS40で読み出したデータをCPUバスを介してCPUに送出する。
【0061】
以上で、セマフォ獲得レジスタ202へのリードアクセスが完了し、リードアクセス処理を終了する。
【0062】
一方、ステップS30で「リード先のアドレス」がセマフォ獲得レジスタ202中のものではない場合(即ち、システムバス107上に接続された何れかの機器のアドレスの場合)には処理をステップS70に進め、リードコマンドをシステムバスI/F部203に送出する。これによりシステムバスI/F部203はこのリードコマンドをシステムバス107に送出する。そして処理をステップS80に進め、cmd_buf_ok信号をアクティブにし、アクティブされたcmd_buf_ok信号をCPUバスを介してCPUに送出する。即ち、コマンドバッファ204の空き容量をCPUバスを介してCPUに通知する。
【0063】
そして処理をステップS90に進め、上記リードコマンドによって上記機器から読み出されたデータ(リードデータ)がシステムバスI/F部203から戻ってきたか否かをチェックする。ステップS90における処理は、リードデータが戻ってくるまで行う。
【0064】
そして戻ってきた場合には処理をステップS100に進め、このリードデータをCPUバスを介してCPUに送出する。
【0065】
以上で、セマフォ獲得レジスタ202以外の機器へのリードアクセスが完了し、リードアクセス処理を終了する。
【0066】
<ライトアクセス処理>
次にライトアクセス処理について説明する。ステップS20でライトコマンドであると判断した場合には処理をステップS110に進め、ライトコマンドを解析することでコマンド中の「ライト先のアドレス」を参照し、そのアドレスがセマフォ獲得レジスタ202中のものであるのか否かを判断する。そして「ライト先のアドレス」がセマフォ獲得レジスタ202中のものである場合には処理をステップS120に進め、cmd_buf_ok信号をアクティブにし、アクティブされたcmd_buf_ok信号をCPUバスを介してCPUに送出する。即ち、コマンドバッファ204の空き容量をCPUバスを介してCPUに通知する。そして処理をステップS130に進め、セマフォ獲得レジスタ202中の上記「ライト先のアドレス」に対するライトアクセス処理を行い、この「ライト先のアドレス」にライトコマンド中のデータを書き込む。
【0067】
そして書き込み処理後、処理をステップS140に進め、data_buf_ok信号をアクティブにし、アクティブされたdata_buf_ok信号をCPUバスを介してCPUに送出する。即ち、データバッファ205の空き容量をCPUバスを介してCPUに通知する。
【0068】
以上で、セマフォ獲得レジスタ202へのライトアクセスが完了し、ライトアクセス処理を終了する。
【0069】
一方、ステップS110で「ライト先のアドレス」がセマフォ獲得レジスタ202中のものではない場合(即ち、システムバス107上に接続された何れかの機器のアドレスの場合)には処理をステップS150に進め、コマンドバッファ204にこのライトコマンドを保持するだけの空き容量があるかをチェックする。より具体的には、このライトコマンドがシングルアクセスかバーストアクセスかを判断し、シングルアクセスであると判断された場合は、コマンドバッファの空きが1つ以上であるか同かを判断する。また、このライトコマンドがバーストアクセスであると判断された場合には、コマンドバッファが空であるかどうかを判断する。いずれの場合にせよ、該当するライトコマンド分の空きがあると判断された場合、処理をステップS160に進める。
【0070】
ステップS160では、cmd_buf_ok信号をアクティブにし、アクティブされたcmd_buf_ok信号をCPUバスを介してCPUに送出する。即ち、コマンドバッファ204の空き容量をCPUバスを介してCPUに通知する。そして処理をステップS170に進め、コマンドバッファ204中に今回入力されたライトコマンドを書き込む。
【0071】
そして書き込み処理後、処理をステップS180に進め、data_buf_ok信号をアクティブにし、アクティブされたdata_buf_ok信号をCPUバスを介してCPUに送出する。即ち、データバッファ205の空き容量をCPUバスを介してCPUに通知する。
【0072】
以上で、セマフォ獲得レジスタ202以外の機器に対するライトアクセスが完了し、ライトアクセス処理を終了する。
【0073】
尚、本実施形態では、ライトコマンドはコマンドバッファに書き込んだ時点で終了とする「ポステッドライト方式」を採用するため、以上説明した処理によって、システムバス107へのライトアクセス処理を完了とする。
【0074】
以上の説明により、本実施形態によって、2つのCPUが同一のリソースに対してアクセスを行う場合に、それぞれのアクセスの排他的制御を、ソフトウェアではなくハードウェアでもって行うことができ、この排他的制御をより高速に行うことができる。
【0075】
また、本実施形態によれば、個々のCPUに接続されているバスブリッジ部内に優先度を示す信号値、他のCPUがセマフォの獲得要求を行っているのかを示す信号値が入力され、そして個々のバスブリッジ部でもって自身に接続されているCPUがセマフォの獲得が可能であるのかを判断するので、例えばメモリアクセスに対するタイムラグが発生するという不具合や、同時にメモリ領域のフラグアクセスを行うと排他処理ができなくなるといった不具合は解消することができる。
【0076】
[第2の実施形態]
第1の実施形態では、2つのCPUを有するシステムについて説明したが、本実施形態に係るシステムは3つ以上のCPUを有する。しかし3つ以上のCPUを有するシステムにおいても、第1の実施形態と同様にそれぞれのバスブリッジ部間には1対のサイドバインド信号線が設けられており、自バスブリッジ部からsemi_out信号を他バスブリッジ部に対して送信できると共に、逆に他バスブリッジ部から出力されたsemi_in信号を自バスブリッジ部に入力することができるように構成される。これにより自バスブリッジ部は、現在どのCPUがセマフォの獲得要求を行っているのかを把握することができる。
【0077】
また、それぞれのバスブリッジ部間にはstack信号をやり取りするための信号線が設けられ、自バスブリッジ部における優先度決定信号を他バスブリッジ部に対して送出できると共に、他バスブリッジ部から送出された優先度決定信号を受けることができる。これにより、自バスブリッジ部は、自身に接続されているCPUの優先度が、現在セマフォの獲得要求を行っているCPUのうちどの程度のものであるのかを把握することができる。
【0078】
以上の構成から、自バスブリッジ部に接続されているCPUがセマフォの獲得要求を行っている場合にこのCPUの優先度が、現在セマフォの獲得要求を行っているCPUのうちどの程度の優先度であるのかを把握することができ、もし自バスブリッジ部に接続されているCPUの優先度が最も高い場合にはこのCPUに対してセマフォの獲得を行うことができる。
【0079】
このような構成におけるシステムであっても、それぞれのCPUに接続されているバスブリッジ部が行うべき処理は以下説明する点を除いて第1の実施形態と同じである。
【0080】
3つ以上のCPUを有するシステムの場合、それぞれのCPUについて「セマフォの獲得の為の優先度の順序」を付けるため、それぞれのCPUに入力される優先度決定信号の値は第1の実施形態で説明したように、「0」か「1」かでは表現することはできない。例えばm個のCPUを有するシステムの場合、優先度決定信号はnビット(nは2>mを満たす最小の数)の値を有するものにする必要がある。そしてそれぞれのCPUに入力される優先度決定信号は、優先度の高いCPUほど大きい数値を有する優先度決定信号を入力するようにし、逆に優先度の低いCPUほど小さい数値を有する優先度決定信号を入力するようにする。
【0081】
そしてこのようなシステムにおける各バスブリッジ部が行うべき処理は、以下説明する点以外は図5のフローチャートに従った処理と同じである。即ちステップS10では、自バスブリッジ部に入力される複数のsemi_in信号のうち、1であるものが1つ以上出もあるのかを判断し、ある場合には処理をステップS11に進める。一方ない場合には処理をステップS20に進め、以降の処理は第1の実施形態と同じである。
【0082】
そしてステップS11では、他バスブリッジ部から自バスブリッジ部に入力される複数のstack信号の値を参照し、semi_in=1を出力したバスブリッジ部のうち、最も大きい値(最も高い優先度を示すstack信号値)を有する信号を特定し、更にこの最も大きい値が、自バスブリッジ部の優先度(自バスブリッジ部における優先度決定信号が示す値)よりも大きい数値である場合には処理をステップS10に進め、逆に自バスブリッジ部の優先度が、他バスブリッジ部から自バスブリッジ部に入力される複数のstack信号のどの信号値よりも大きい場合には処理をステップS12に進める。ステップS12以降の処理については第1の実施形態と同じである。
【0083】
そしてステップS12では、自バスブリッジ部以外の全ての他バスブリッジ部に対してsemi_out=1を出力する。
【図面の簡単な説明】
【0084】
【図1】本発明の第1の実施形態に係るCPUシステムの基本構成を示す図である。
【図2】バスブリッジ部103の基本構成を示すブロック図である。
【図3】セマフォ制御部206によって制御される、バスブリッジ部(103,104)の状態遷移を示す図である。
【図4】各信号値のタイミングチャートを示す図である。
【図5】バスブリッジ部(103、104)におけるCPUバスI/F部201が行う処理のフローチャートである。

【特許請求の範囲】
【請求項1】
複数のCPUと、それぞれのCPUに1対1で接続されている複数のバスブリッジとを有するCPUシステムであって、
それぞれのバスブリッジは、
他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信手段と、
自バスブリッジに接続されているCPUからセマフォの獲得要求を受けた場合には、前記受信手段が受信した信号、及び前記自バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御手段と
を備えることを特徴とするCPUシステム。
【請求項2】
前記受信手段が他バスブリッジから、当該他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたことを示す信号を受信しており、且つ自バスブリッジに接続されているCPUから、セマフォの獲得要求を受けた場合、
前記制御手段は、当該自バスブリッジに対して設定された優先度を参照し、当該自バスブリッジの優先順位の方が当該他バスブリッジよりも高い場合には、当該自バスブリッジに接続されているCPUに対してセマフォを獲得すると共に、当該獲得した旨を当該他バスブリッジに対して送信することを特徴とする請求項1に記載のCPUシステム。
【請求項3】
前記受信手段が他バスブリッジから、当該他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたことを示す信号を受信しており、且つ自バスブリッジに接続されているCPUから、セマフォの獲得要求を受けた場合、
前記制御手段は、当該自バスブリッジに対して設定された優先度を参照し、当該自バスブリッジの優先順位の方が当該他バスブリッジよりも低い場合には、当該自バスブリッジを待機状態に制御すると共に、当該自バスブリッジが待機状態にある旨を当該他バスブリッジに対して送信することを特徴とする請求項1に記載のCPUシステム。
【請求項4】
前記それぞれのバスブリッジはバス上に接続されており、且つ当該バス上には機器が接続されており、
前記複数のCPUのぞれぞれは、前記機器との通信を行う前段でセマフォの獲得要求を、自身に接続されているバスブリッジに対して行うことを特徴とする請求項1乃至3の何れか1項に記載のCPUシステム。
【請求項5】
請求項1乃至4の何れか1項に記載のCPUシステムを搭載することを特徴とするコンピュータシステム。
【請求項6】
CPUに接続されているバスブリッジであって、
他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信手段と、
前記バスブリッジに接続されているCPUからセマフォの獲得要求を受けた場合には、前記受信手段が受信した信号、及び前記バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御手段と
を備えることを特徴とするバスブリッジ。
【請求項7】
請求項6に記載のバスブリッジを搭載することを特徴とするコンピュータシステム。
【請求項8】
複数のCPUと、それぞれのCPUに1対1で接続されている複数のバスブリッジとを有するCPUシステムの制御方法であって、
それぞれのバスブリッジの制御方法は、
他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信工程と、
自バスブリッジに接続されているCPUからセマフォの獲得要求を受けた場合には、前記受信工程で受信した信号、及び前記自バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御工程と
を備えることを特徴とするCPUシステムの制御方法。
【請求項9】
CPUに接続されているバスブリッジの制御方法であって、
他バスブリッジが当該他バスブリッジに接続されているCPUからセマフォの獲得要求を受けたか否かを示す信号を、当該他バスブリッジから受信する受信工程と、
前記バスブリッジに接続されているCPUからセマフォの獲得要求を受けた場合には、前記受信工程で受信した信号、及び前記バスブリッジに対して設定された優先度に応じて、セマフォの獲得を制御する制御工程と
を備えることを特徴とするバスブリッジの制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2006−119724(P2006−119724A)
【公開日】平成18年5月11日(2006.5.11)
【国際特許分類】
【出願番号】特願2004−304345(P2004−304345)
【出願日】平成16年10月19日(2004.10.19)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】