(57)【要約】本発明に従ったデータ処理装置は、少なくとも第１及び第２の処理手段１．２、１．３を含む。第１の処理手段は、更なる処理のために第２の処理手段によって読出し可能なバッファ手段２．１内にトークンを書き込むことによってデータを供給可能である。処理手段には、第１及び第２の同期カウンタが割り当てられる。第１の同期カウンタ（writec）は第１の処理手段２．１によって更新され、第２の処理手段１．３によって読出し可能である。第２の同期カウンタ（readc）は、第２の処理手段１．３によって更新可能であり、第１の処理手段１．２によって読出し可能である。第１の同期カウンタ（writec）は、第１の処理手段１．２によって書き込まれるトークンの番号を示す。第２の同期カウンタ（readc）は、第２の処理手段１．３によって読出し可能なトークンの番号を示す。【特許請求の範囲】
【請求項１】
少なくとも第１及び第２の処理手段を有し、前記第１の処理手段は、前記第２の処理手段によって読出し可能なバッファ手段にトークンを書き込むことによって更なる処理のためにデータを供給可能に構成され、前記第１及び第２の処理手段には第１及び第２の同期インジケータが配置され、前記第１の同期インジケータは前記第１の処理手段によって更新可能であると共に前記第２の処理手段によって読出し可能であり、前記第２の同期インジケータは前記第２の処理手段によって更新可能であると共に前記第１の処理手段によって読出し可能である、データ処理装置であって、
前記同期インジケータはカウンタであり、前記第１の同期インジケータに対応するカウンタは、前記第１の処理手段によって書き込まれたトークンの数を示し、前記第２の同期インジケータに対応するカウンタは、前記第２の処理手段によって読み込まれたトークンの数を示すことを特徴とするデータ処理手段。
【請求項２】
前記プロセッサの少なくとも１つは、予約カウンタをローカルに維持し、プロセッサにより発行される第１の命令は、その予約カウンタを、もう一方のプロセッサによって維持される同期カウンタと比較することによって、あるトークンの数が前記プロセッサに利用可能であるかどうかの確認をもたらし、確認結果が肯定的な場合、前記予約カウンタは更新されることを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記両カウンタは、一杯状態のバッファ手段内に含まれる全てのトークンの数よりも大きい値域を有することを特徴とする請求項１に記載のデータ処理装置。
【請求項４】
前記処理手段の少なくとも１つは、専用プロセッサであることを特徴とする請求項１に記載のデータ処理装置。
【請求項５】
前記処理手段の少なくとも１つは、汎用目的プロセッサによって実行されるコンピュータプログラムあるいは専用用途プログラマブル装置であることを特徴とする請求項１に記載のデータ処理装置。
【請求項６】
第１の処理手段は、プロデューサ要求コールを用いて空のトークンにアクセスし、プロデューサ解放コールにより、満たされたトークンを解放することを特徴とする請求項５に記載のデータ処理装置。
【請求項７】
第２の処理手段は、コンシューマ要求コールによって、満たされたトークンを要求し、コンシューマ解放コールによってそのトークンを解放することを特徴とする請求項５に記載のデータ処理装置。
【請求項８】
前記第１のデータ処理手段は、書込みに利用可能なトークン量の表示をローカルに記憶するレジスタ手段を含むことを特徴とする前記請求項のいずれかに記載のデータ処理装置。
【請求項９】
前記第２のデータ処理手段は、読出しに利用可能なトークン量の表示をローカルに記憶するレジスタ手段を含むことを特徴とする前記請求項のいずれかに記載のデータ処理装置。
【請求項１０】
第１及び第２の同期インジケータを用いることによってデータ処理装置における第１及び第２の処理手段を同期させる方法にして、前記第１の処理手段は、バッファ手段を介してトークンを書き込むことによって更なる処理のために前記第２の処理手段に対してデータを供給可能な方法であって、
a.  前記第１の処理手段は１以上のトークンを生成し、
b.  前記第１及び第２の同期インジケータを比較し、
c.  この比較に基づいて、
c1. 前記バッファ手段にトークンを書き込み、前記第１の同期インジケータを更新し、その後、ステップaを続行し、
c2. あるいは、ステップb-cを繰り返し、
d.  前記第２の処理手段は前記第１及び第２の同期インジケータを比較し、
e.  この比較に基づいて、
e1. 前記バッファ手段からトークンを読み出し、前記第２の同期インジケータを更新し、
e2. あるいはステップd,eを繰り返し、
前記同期インジケータはカウンタであり、第１の同期インジケータに対応するカウンタは、前記第２の処理手段に利用可能なトークンの数を示し、第２の同期インジケータに相当するカウンタは、前記第１の処理手段により前記バッファ手段にトークンを書き込むために利用可能なスペース量を示し、前記同期手段の更新は、該当するカウンタの増加であることを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、少なくとも第１及び第２の処理手段を有し、前記第１の処理手段は、前記第２の処理手段によって読出し可能なバッファ手段にトークン書き込むことによって更なる処理のためにデータを供給可能に構成され、前記第１及び第２の処理手段には第１及び第２の同期インジケータが配置され、前記第１の同期インジケータは前記第１の処理手段によって更新可能であると共に前記第２の処理手段によって読出し可能であり、前記第２の同期インジケータは前記第２の処理手段によって更新可能であると共に前記第１の処理手段によって読出し可能である、データ処理装置に関する。
【０００２】
また、本発明は、第１及び第２の同期インジケータを用いることによって、データ処理装置における第１及び第２の処理手段を同期させる方法であって、前記第１の処理手段は、バッファ手段を介してトークンを書き込むことによって更なる処理のために前記第２の処理手段に対してデータを供給可能に構成され、以下のステップ、
a.  前記第１の処理手段は１以上のトークンを生成する
b.  前記第１及び第２の同期インジケータを比較する
c.  この比較に基づいて、
c1. 前記バッファ手段にトークンを書き込み、前記第１の同期インジケータを更新し、その後、ステップaを続行する
c2. あるいは、ステップb-cを繰り返す
d.  前記第２の処理手段は第１及び第２の同期インジケータを比較する
e.  この比較に基づいて、
e1. 前記バッファ手段からトークンを読み出し、前記第２の同期インジケータを更新する
e2. あるいはステップd,eを繰り返す
を含む方法に関する。
【背景技術】
【０００３】
信号処理機能は、MPEG-x, DVB, DAB, and UMTSのような標準に基づく多くの製品に対する性能要件を定める。このことは、これらの製品の信号処理部を効率的に実現することを要求する。しかしながら、標準が進展し、また、市場の要求が変化するため、その実現には、柔軟性と拡張が同様に要求される。データのストリームが処理されるので、マクロパイプラインのセットアップはこれらの用途をモデル化する自然な方法である。このセットアップにおいて、機能（タスク）はステージであり、パイプラインを形成するために、ステージ間にはバッファが存在する。全てのステージが並列に動作可能であるため、これはタスクレベルの並列処理(TLP)を利用する方法である。
【０００４】
導入の段落に従ったデータ処理装置及び方法は、国際公開第99/22296号パンフレットによって知られている。この詳細な説明及び請求項において、トークンは、任意数のデータエレメント数を含み得るバッファ手段内のユニットを表す。ユニットは例えば単一のオーディオストリームのサンプル、即ち、例えばビデオストリームの画素（ピクセル）からなる完全行列を含み得る。周知のデータ処理装置は、データブロックの形式でトークンを生成する第１のステーション、及びトークンを消費する第２のステーションを含む。第１のステーションは生成セマフォの形で第１の同期インジケータに対する制御を行い、第２のステーションは、消費セマフォの形で第２の同期インジケータに対する制御を行う。トークンを生成した後、第１のステーションは、第２のステーション及び可能性ある他の消費ステーションのセマフォの値が、それ自身のセマフォと同じ値を有するかどうかを検査する。もしその場合は、生成されたトークンをバッファ内にロードし、生成セマフォを反転させる（toggle）。消費ステーションは、バッファからトークンを読み出す前、生成セマフォがそれ自身のセマフォと異なることとなるまで待機する。各トークンはそれ自身のセマフォを有する。各セマフォは、１つのステーションによってのみ書込み可能であるため、周知のデータ処理装置は、セマフォに関して、書込み衝突を避ける。ステップａはステップｃ１まで遅らされ得ることに注意する。即ち、まず、バッファ手段がトークンを書き込むスペースを有するかどうかが検査され、その後、データが生成され及び／あるいはバッファ手段に書き込まれる。バッファ手段は、例えばシフトレジスタ、あるいはトークンを連続的に記憶可能な別種のメモリである。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、効率性の改善されたデータ処理装置を提供することにある。
【課題を解決するための手段】
【０００６】
それ故、本発明に従ったデータ処理装置は、各同期インジケータはカウンタによって表され、１つのカウンタ（ｐカウンタ）は、第１の処理手段によって書き込まれたトークン数を示す第１の同期インジケータに相当し、及びもう一方のカウンタ（ｃカウンタ）は、バッファ手段から第２の処理手段によって読み出されたトークン数を示す第２の同期インジケータに相当する。第１及び第２の処理手段はそれぞれ、トークンの最大数に関連して、両カウンタの差から、利用可能な満たされた／空のトークンの量を決定可能である。
【０００７】
例えば、もしバッファ手段がＮｂ＝１６トークンの容量を有し、ｐカウンタがＮｐ値として８トークンを、ｃカウンタがNc値として５トークンを有している場合、Ｎｐ−Nc（ｍｏｄ Ｎｂ）＝３トークンが第２の処理手段による読出しに利用可能であり、Nc−Ｎｐ（ｍｏｄ Ｎｂ）＝１３トークンが第１の処理手段による書込みに利用可能である。
【０００８】
本データ処理装置は、第１の処理手段における個々のセマフォを単一のカウンタによって置き換え、第２の処理手段における個々のセマフォを別のカウンタによって置き換えたという点において、周知の装置を越えた改善性を有する。
【０００９】
生成セマフォを反転させる代わりに、プロデューサが、バッファ手段にトークンを供給した後、第１の同期インジケータ（以降さらに生成カウンタと称される）に相当するカウンタを上昇させる。同様に、コンシューマは、トークンを消費したら、第２の同期インジケータ（消費カウンタ）に相当するカウンタを上昇させる。
【００１０】
各カウンタはそれぞれ処理手段の１つによってのみ変更されるため、読出し書込みハザードは阻止される。
【００１１】
トークンが書込みのために利用可能（空）かどうかを決定するために、プロデューサは生成カウンタから消費カウンタを減じ、その結果をバッファ内に記憶され得るトークンの最大数と比較する。同様に、コンシューマは、満たされたトークンが読出しに利用できるかどうかを検査するために、２つのカウンタを減算する。
【００１２】
米国特許第6,173,307号明細書は、複数のプロデューサと複数のコンシューマとによって共有される循環待ち行列を含むマルチプロセッサシステムを開示している。プロデューサあるいはコンシューマは、待ち行列の正確性を阻害することなく、いつでもプロデューサあるいはコンシューマよりも先に入手する（preempt）ことを許容され得る。
【００１３】
さらに、米国特許第4,916,658号明細書は、動的に制御されるバッファを含む装置について述べている。そのバッファは、記憶されるべき次の記憶位置を指示する第１のインジケータと、検索されるべき次の記憶位置を指示する第２のインジケータと、記憶に利用可能な位置の数及び検索に利用可能な位置の数を供給する回路とを備えた回路を伴って、いくつかの記憶位置からなるデータワードを記憶するのに好適である。
【００１４】
本発明のデータ処理装置の好適な実施例において、少なくとも１つのプロセッサは予約カウンタをローカルに維持し、その少なくとも１つのプロセッサによって発行される第１の命令は、その予約カウンタをもう一方のプロセッサによって維持される同期カウンタと比較することによって、要求された数（１以上）のトークンがそのプロセッサに利用可能であるかどうかを確認し、もし確認の結果が肯定的であれば、予約カウンタは更新される。
【００１５】
この方法において、プロセッサは、同期カウンタによって参照されるより低い境界且つ予約カウンタによって参照されるより低い境界を有するバッファ内にゾーンを予約可能である。このゾーン内において、プロセッサはバッファにランダムにアクセスし得る。好ましくは、予約カウンタ及び同期カウンタは、この情報の迅速なアクセスを可能にするため、単一のデータワードに記憶される。
【００１６】
本発明に従ったデータ処理装置の好適な実施例は、カウンタは、一杯にされたバッファ手段内に含まれる全てのデータエレメントの数よりも大きい値域（range）を有するという特徴を有する。この方法においては、カウンタが等しいときに生じ得る不定状態は阻止される。これは以下の例によって示される。ｐカウンタが０から１に増大されたとき、それは、第１のトークンが書き込まれたことを意味する。ブロックを読み出した後、ｃカウンタも０から１に増大され、それは、バッファが再び空になったことを意味する。仮にバッファ手段がＮｂ＝１６トークンの容量を有し、カウンタが０〜１６まで計数するとする。初期状態はＮｐ＝Nc＝０である。ｐカウンタが値１５に達したとき、バッファ手段は一杯になる。第２の処理手段すなわちコンシューマがトークンを読み出す前にｐカウンタを０に戻すと、バッファが一杯であるという誤った状況が生じ得、そして両カウンタは等しい。データエレメントの数よりも大きい値域を有するカウンタを用いることによってこの不定状態は阻止される。
【００１７】
本発明に従ったデータ処理装置の好適な実施例は、カウンタが余分な１ビットを有するという点に特徴がある。この方法において、カウンタの値域は、トークンの最大数の２倍である。定義により、もし２つのカウンタが余分なビットを含めて等しいならば、全てのトークンは空である。もしカウンタの余分なビットのみが異なるのであれば、バッファ内の全てのトークンは満たされている。さらに代替の定義を有することが可能である。両カウンタが等しく、余分なビットが異なるとき、バッファは空であり、余分なビットが等しいときバッファは一杯である。ビットの意味が定義され、一杯の状態と空の状態とが区別できることは重要である。
【００１８】
両処理手段は、特定のタスク専用のハードウェアとして、あるいは汎用目的プロセッサによって実行されるソフトウェアプログラムとして、あるいはハードウェア及びソフトウェアの結合として実現され得る。
【００１９】
実施例において、第１の処理手段はプロデューサ要求コールを用いて空のトークンにアクセスし、プロデューサ解放コールによって満たされたトークンを解放する。
【００２０】
プロデューサ要求サブルーチンへのコールの結果、生成カウンタ及び消費カウンタ間の差が決定され、その結果に基づいて、第１の処理手段はバッファ手段へアクセスする。プロデューサ解放コールの結果、生成カウンタは増大させられ、要求されたトークンは第１の処理手段によって生成されたデータによって満たされる。
【００２１】
実施例において、第２の処理手段はコンシューマ要求コールによって、満たされたトークンへアクセスし、コンシューマ解放コールによってそのトークンを解放する。トークンは空にされ得、あるいは変更された内容を有する。コンシューマ要求コールによって活性化されたサブルーチンは、生成カウンタ及び消費カウンタ間の差を決定し、その結果に基づいて、第２の処理手段はバッファ手段にアクセスする。コンシューマ解放サブルーチンへのコールによって、消費カウンタが増大させられ、要求され満たされたトークン（第１の処理手段によって生成された）に対応するデータが読み出される（読み出されたとして印を付けられる）。
【００２２】
前述した実施例の変形例として、第１の生成手段はプロデューサ要求コールを用いて複数のトークンにアクセスし得る。同様に、コンシューマは、コンシューマ要求コールを用いることによって複数のトークンにアクセスし得る。
【００２３】
多数のトークンが要求されたが直ちに解放されない場合、要求されたトークンの数が、例えば要求カウンタによって記録されるべきである。第１の処理手段の要求カウンタが第２の処理手段に対して読出し可能である必要はなく、その逆も同様である。例えば、第１の処理手段の要求カウンタは、別個のカウンタとして実現され得るが、別の方法では、例えば生成カウントと併合される。
【００２４】
両カウンタは、トークンバッファ（通信チャネル）へ属するデータ構造の一部として実現され得る。
【００２５】
好適な実施例において、データ構造のローカルコピーが処理手段の近くで例えばキャッシュによって維持され得る。これはデータ構造へアクセスする際の待ち時間、及びそれに伴う通信ネットワークの負荷を減少する。
【００２６】
トークンに対する要求が失敗したとき、利用可能な、満たされたトークン（コンシューマ）あるいは空のトークン（プロデューサ）は存在しない。その場合、両処理手段はいくつかの選択、例えば別のタスクの実行あるいは待機を有する。待機のとき、第２の処理手段は第１の処理手段の生成カウンタをポーリングし得る（キャッシュされていない）。待機状態の第１の処理手段は、消費カウンタをポーリングし得る（キャッシュされていない）。待機状態の両処理手段はさらにアイドル状態モード、例えばスリープモードに後退し得る。これは、エネルギーの使用量が低い利点を有する。両処理手段をスリープモードからウェイクアップするために、例えばメモリに対応付けられた信号が、適当なカウンタが更新された後、ウェイクアップ信号として送られ得る。これらの信号は、ウェイクアップ信号として要求されるだけなので、通常動作の間、無視され得る。
【００２７】
本発明に従ったデータ処理装置の実施例においては、第１の処理手段が、書込みに利用可能なトークン量の表示をローカルに記憶するレジスタ手段を含むという特徴を有する。第１の処理手段は、ｐカウンタ、ｃカウンタ及びバッファ手段内において利用可能なトークンの数から、書込みに利用可能なトークン量を計算した後、レジスタ手段内にこの量を記憶し得る。第１の処理手段が１以上のトークンを書き込むと、直ちに、ｐカウンタ及びレジスタ手段を更新する。レジスタ手段は書込みに利用可能なトークン量の悲観的な推定値を与え、それは保存される。トークンが第１の処理手段によって書き込まれると、レジスタ手段内の値は減少させられ、もしトークンが第２の処理手段によって読み出され、それと共に利用可能になるのならば、それは変更されないままである。それ故、トークンが書込みに利用可能であることをレジスタが示す限り、第１の処理手段は、そのようにし続け得る。その間、第１の処理手段はｃカウンタを検査する必要はなく、バス負荷（busload）を節約する。もしレジスタ手段がもうこれ以上トークンを書込みに利用できないことを示すだけならば、第１の処理手段はｃカウンタにアクセスして計算を再度実行しなければならない。
【００２８】
本発明に従ったデータ処理装置の実施例においては、第２の処理手段が読出しに利用可能なトークン量の表示をローカルに記憶したレジスタ手段を含む。上述したことに類似した方法において、このことは、ｐカウンタへの第２の処理手段のアクセスを減少する。
【００２９】
両処理手段のうちの１つが特定のタスク専用のハードウェアによって実行され、別の処理手段が汎用目的プロセッサによって実行されるソフトウェアプログラムとして実行される実施例では、同期情報が好ましくはシェル及び共有メモリ上に分配される。
【００３０】
プロセッサに結合されたシェルは、プロセッサ自身によって処理されなければならない割込みの数を減少し得る点において、マルチタスクを容易にする。これは、アイドル状態のプロセッサが不必要に活性化されなければならない回数、あるいは、処理中の別のタスクにプロセッサが割り込まなければならない回数を減少する。この方法において、プロセッサの効率が改善される。
【００３１】
割込み信号のタイプとそのコード化方法とに依存する割込み信号を選択するためのそのようなシェルを実現するために、いくつかの選択が可能である。１つの実施例では、割込み信号はプロセッサのデータチャネルを示す。これを実行する実際的な方法は、プロセッサの各入力チャネルに対してレジスタ内にビットを割り当てることによる。例えば３２ビットレジスタは３２の入力チャネルをサポートし得、例えばチャネル０はビット０が割り当てられ、チャネル１はレジスタのビット１が割り当てられる。他のプロセッサがプロセッサのチャネルｋを示す割込み信号を送ったとき、信号レジスタの対応するビットｋがセットされる。受取り側のプロセッサのシェルは、マスクレジスタを用いることによって特定の割込み信号を選択でき、各ビットは、特定のチャネルに対して、プロセッサが割込みを無視するか否かを表し、例えばもしチャネル２に対応するビットがマスクされていれば、この信号はそのプロセッサに割込みを生じさせず、ウェイクアップは起こらない。この例において、プロセッサは処理でビジーであり得、そこでは、全てのビットはマスクされ、あるいは、プロセッサ／タスクはチャネル１において満たされた／空トークンを待機中であり得、その場合、チャネル２で何が生じるかには関心がない。
【００３２】
その信号及びマスクレジスタは、サポートされるべきチャネルの数に依存する任意数のビットを有し得る。代替的に、番号により各チャネルをサポートすることが、また、プロセッサがそのチャネルに対して割り込まれるべきか否かを決定するためにリストあるいはルックアップテーブルを用いることが可能である。しかしながら、これは、より複雑な解決法である。
【００３３】
チャネル番号によって割込み信号を識別する代わりに、割込み信号はタスク番号によって識別可能である。この実施例では、特定のタスクに対する信号を伴う全てのチャネルは、シェルの信号レジスタに同一のビットをセットする。この方法において、信号レジスタ内のビットの数に等しい多くのタスクは、独自にアドレス指定され、各タスクは１以上のチャネルを有し得る。待機状態は、独自のチャネル識別を伴った場合と比べて特定的でないが、不必要なウェイクアップの数は依然として小さく、より多くのチャネルが制限されたハードウェアでサポートされ得る。
【００３４】
もちろん、関係が明確である限り、タスク番号はビット番号と同一である必要はない（その方法で実行することが実に簡易である）。さらに、タスク（のグループ）は、同じ信号割込み番号を共有可能である。
【００３５】
受け取り側によって実行されるタスクを識別する代わりに、送り側のタスク識別番号が伝えられ得る（signal）。その場合、受け取り側のプロセッサは、特定のタスクに対してではなく特定のタスクからの割込み信号を選択し得る。それは、外部タスクの数や、プロセッサ自身の選択に基づくタスクの数すなわち最も有用／効率的と思われるものに依存する。
【発明を実施するための最良の形態】
【００３６】
以下、図面を参照しながら、上述した本発明の特徴及びその他の特徴について詳しく説明する。
【００３７】
図１は、少なくとも第１及び第２の処理手段１．２、１．３を含むデータ処理装置を示す。第１の処理手段すなわちVLIWプロセッサ１．２は、メモリ１．５内に配置されたバッファ手段において利用可能なトークンを生成することによってデータを供給可能である。トークンは、更なる処理のために、第２の処理手段１．３すなわちデジタルシグナルプロセッサによって読出し可能である。データ処理装置はさらにRISCプロセッサ１．１、ASIP１．４及び専用ハードウェアユニット１．６を備える。VLIWプロセッサ１．２、DSP１．３、ASIP１．４、メモリ１．５及びASIC１．６は第１のバス１．７を介して相互に接続されている。RISCプロセッサ１．１は、第２のバス１．８と接続され、第２のバス１．８は、ブリッジ１．９を介して反対側の第１のバス１．７に接続されている。さらなるメモリ１．１０及び周辺装置１．１１は第２のバス１．８に接続されている。プロセッサは補助ユニットを有し得る。例えばRISCプロセッサ１．１は命令キャッシュ１．１．１及びデータキャッシュ１．１．２を有する。同様に、VLIWプロセッサは命令キャッシュ１．２．１及びデータキャッシュ１．２．２を有する。DSP１．３は命令キャッシュ１．３．１、ローカルメモリ１．３．２及びアドレスデコーダ１．３．３を有する。ASIP１．４はローカルメモリ１．４．１及びアドレスデコーダ１．４．２を有する。ASIC１．６はローカルメモリ１．６．１及びアドレスデコーダ１．６．２を有する。処理手段１．２、１．３はそれぞれ同期インジケータが割当てられる。両同期インジケータは第１及び第２の処理手段１．２、１．３の両方によってアクセス可能である。第１の同期インジケータは少なくとも第１の処理手段１．２によって更新可能であり、第２の処理手段１．３によって読出し可能である。第２の同期インジケータは少なくとも第２の処理手段１．３によって更新可能であり、第１の処理手段１．２によって読出し可能である。
【００３８】
各同期インジケータはカウンタで表される。第１の同期インジケータを表すカウンタ（ｐカウンタ）は第１の処理手段１．２によって書き込まれたトークンの数を示す。第２の同期インジケータ（ｃカウンタ）を表すカウンタは第２の処理手段１．３によって読み出されたトークンの数を示す。カウンタ値の比較により各プロセッサに利用可能なトークンの数を計算可能な限り、カウンタによってトークンの数を表すいくつかの選択が当業者に可能である。例えば、カウンタ値が、トークンの数mod n（ｎは整数）、に等しいことがあり得る。ここで、である。別の方法では、カウンタの各ステップが、固定されたトークンの数を表し得る、即ち、カウンタ値によるステップの数によってトークンが表され得る。
【００３９】
実際の実施例において、両カウンタはアドレスに対するポインタであり、このポインタまで、バッファ手段が他のプロセッサに対して利用可能である。このことは、概略的に図２に示される。この図は、第２の処理手段１．３にデータを供給するために第１の処理手段１．２によって用いられるメモリ１．５内のバッファスペース２．１を概略的に示す。バッファスペース２．１は循環バッファとして構成される。バッファスペース２．１は、第１のゾーン２．２と、現時点で第２の処理手段１．３に利用可能な第１の処理手段１．２によって書き込まれたデータを含む第２のゾーン２．４とを含む。バッファスペース２．１はさらに、第１の処理手段１．２が新たなデータを書き込むために利用可能な第３のゾーン２．３を含む。ｐカウンタwritecは第１のゾーン２．２の終わりを示し、ｃカウンタreadcは第２のゾーン２．３の終わりを示す。
【００４０】
第１のゾーン２．２及び第２のゾーン２．４内の部分２．６は、同期カウンタreadcと結合された予約カウンタreadrsvcによって予約される。
【００４１】
第３のゾーン２．３内の部分２．５は、同期カウンタwritecと結合された予約カウンタwritersvcによって予約される。
【００４２】
２つのカウンタの差をバッファサイズbuffszで割った余りは、第２の処理手段１．３に利用可能な有効なトークンの数Ncと、第１の処理手段１．２によって満たすために利用可能な空のトークンの数Npとを与える。
【００４３】
（１）  Nc=(writec-readc) mod buffsz
（２）  Np=(readc-writec) mod buffsz
ｐカウンタ及びｃカウンタは少なくとも２つの処理手段によってアクセス可能な位置に記憶される。これらのカウンタへの各アクセスは、前記位置へアクセスするためのアー人レーション機構が必要とされるため、遅延を引き起こす。その効率をさらに改善するため、利用可能なトークン量の表示をローカルに記憶するレジスタ手段が両処理手段に備えられる。実施例において、第１の処理手段１．２はカウンタ値readc'を記憶するレジスタを備え、第２の処理手段１．３はカウンタ値writec'を記憶するレジスタを備える。これらの手段がｐカウンタの進行を決定するときには、値writecは第１の処理手段１．２に既に利用可能である。同じような理由により値readcは第２の処理手段に利用可能である。実際に利用可能な有効なトークンの数Ncを計算する代わりに、第２の処理手段１．３は現時点で式（３）に従って、この値の悲観的な推定値Nc'を算出する。
【００４４】
（３） Nc'=(writec'-readc) mod buffsz
値writec'とreadcとで、読み出しに利用可能なトークンの数Ncに対する悲観的な推定値を示すので、これらの変数をローカルに記憶する装置は、読出しに利用可能なトークン量の表示をローカルに記憶するレジスタ手段をなす。代替的に、値Nc'は値writec'の代わりにローカルに記憶され得る。同様に、第１の処理手段１．２は次式に従って実際に利用可能な空トークンの数の悲観的な推定値Np'を算出する。
【００４５】
（４） Np'=(readc'-writec) mod buffsz
これらの変数をローカルに記憶する装置は、書込みに利用可能なトークン量の表示をローカルに記憶するレジスタ手段をなす。
【００４６】
代替的に値Np'は値readc'の代わりにローカルに記憶され得る。
【００４７】
Np'が値０を有することを第１の処理手段１．２が検知した時、第１の処理手段のローカルレジスタにおける値readc'を、ｃカウンタのそのときの値readcで更新することが必要である。Nc'が値０を有することを第２の処理手段１．３が検知した時、第２の処理手段のローカルレジスタにおける値writec'を、ｐカウンタのそのときの値writecに更新することが必要である。
【００４８】
第１及び第２の処理手段１．２、１．３の間の通信チャネルに関するデータは、ローカルに記憶された情報に加えて、共有データ構造で構成され得る。ｃ言語仕様のそのようなデータ構造CHP_channelTの例は以下の通りである。
【００４９】
2004531002.tif 000002
カウンタ値writec及びreadcとは別に、このデータ構造は以下のデータを含む。
【００５０】
idは、複数のチャネルを識別する値であって、例えば、第１の処理手段から第２の処理手段にデータを転送する第１のチャネル、第２の処理手段から第１の処理手段にデータを転送する第２のチャネル、及び第２の処理手段から第３の処理手段にデータを転送する第３のチャネル、を含む処理スキームを実行可能にするチャネルを識別する値である。
【００５１】
buffszの値はバッファサイズ、即ち、バッファ内に記憶可能なトークンの数を示す。
【００５２】
flagsの値は、チャネルの属性、例えば同期がポーリングあるいは割込みベースである場合、チャネルバッファが直接あるいは間接に割り当てられるかどうかを示す。代替方法として、所定のチャネル属性を与えること、例えば直接割り当てられたバッファと同期した割込みの実行を制限することが決定され得る。その場合、flagsの値は省略され得る。
【００５３】
ptask、及びctaskは、第１の処理手段すなわちプロデューサのタスク、及び第２の処理手段すなわちコンシューマのタスクを記述する構造へのポインタである。
【００５４】
そのタスク構造は、例えば、以下を含む。
【００５５】
- タスクに対する識別子（それは誰のタスク構造であるか）
- 関数ポインタ（もしそれが組み込みプロセッサにおけるタスクであるのならば、ブートの後、ルートタスクがこの関数にジャンプし、そのアプリケーションを開始し得る。さもなければ無効にする）
- 装置タイプ：タスクがどんなタイプの装置で実行されるかを示す。
【００５６】
これは、ブート処理に対して有用である。UNIX（Ｒ）プロセスとして実行されるタスクは、DSPあるいは組み込みプロセッサあるいは専用ハードウェアで実行されるタスクと異なった方法で初期化されなければならない。主要な装置タイプを有することによって適正なブート手順の選択が容易になる。
【００５７】
- 装置番号：これは、例えば第１及び第２のUNIXコプロセッサを識別することを可能にする。これは、それらに固有の番号を与えることによってなされ得る。
【００５８】
- チャネル数
- チャネルデータ構造に対するポインタのリスト
この方法では、例えば、UNIXタスクが開始されたとき、それは、まずそのタスク構造を読み出し、次いで、そのタスクに接続された全てのチャネルについて全ての情報を読み出し得る。このことは、ブート処理を非常に容易にし、また、タスクが追加されるたびに、全てのタスクに適正なデータ構造をロードさせるために制御プロセスが変更されなければならないことを阻止する。
【００５９】
ユニオンchannelはバッファの位置を示す。バッファは構造CHP_bufferTに対してポインタbuffer_pointerを介して間接的に配置されるか、あるいは構造CHP_channelT内に含まれる。
【００６０】
整数token_sizeはプロデューサあるいはコンシューマによって交換されるトークンのサイズを例えばバイト数で示す。
【００６１】
上述したように、もし処理手段が消費タスクのためのカウンタ値writec'のようなローカルデータを含むのならばそれが好ましい。データ構造CHP_channelTは、ローカルタスク情報を含むデータ構造へのリファレンスpchan, cchanを含むことが好ましい。
【００６２】
そのデータ構造はC言語で以下の形式を有し得る。
【００６３】
2004531002.tif 000003
その構造は、処理手段が通信する他の装置の信号レジスタアドレスを示す符号無し整数sgnl_reg_addrを含む。割込プロセッサは装置の信号レジスタ内に、割込みが発生したタスクあるいはチャネルの表示を残し得る。
【００６４】
その構造は、さらにそれ自身の信号値を示す符号無し整数sgnl_valueを含む。
【００６５】
符号無し値rsmpr_addrは他方の装置におけるリモート同期カウンタアドレスを示す。
【００６６】
上述したように、バッファサイズbuffszは利用可能な空トークンの数を計算するためにプロデューサによって用いられ、また、利用可能な書き込まれたトークンの数を計算するためにコンシューマによって用いられる。
【００６７】
値buf_ptrはバッファのベースアドレスを示す。
【００６８】
符号無しlsmpr_regはローカルチャネル同期カウンタの値を記憶する。
【００６９】
チャネル入力／出力のタイプは整数in_outから決定される。
【００７０】
整数token_sizeはチャネルを介して交換されるトークンのサイズを示す。
【００７１】
図３は、データ処理装置において第１及び第２の処理手段を同期させる、本発明による方法の第１の特徴を示す。
【００７２】
ステップ３．１において第１の処理手段１．２は、１以上のトークンを生成する。
【００７３】
ステップ３．２において第１の処理手段は、第２の処理手段に利用可能にされたトークンの数を示す第１のカウンタwritecを読み出す。
【００７４】
ステップ３．３において、第１の処理手段１．２は、第２の処理手段１．３によって消費されるトークンの数を示す第２のカウンタreadcを読み出す。
【００７５】
ステップ３．４において第１の処理手段は式（２）を用いてこれらのカウンタを比較する。
【００７６】
ステップ３．５において第１の処理手段１．２は、この比較に基づいて、Np値が、生成されたトークンの数よりも大きいかあるいは等しいならばステップ３．６、３．７を実行し、他の場合にはステップ３．８を実行することを決定する。
【００７７】
ステップ３．６において第１の処理手段１．２はバッファ手段２．１に対してトークンを書き込み、続いて、ステップ３．７において第１のカウンタwritecを更新し、その後、ステップ３．１に続く。
【００７８】
ステップ３．８において第１の処理手段は、例えば所定の期間あるいはそれが割り込まれるまで待機して、ステップ３．２から３．５までを繰り返す。
【００７９】
第２の処理手段１．３は類似の手続きを図４に示すように実行する。
【００８０】
ステップ４．２において第２の処理手段１．３は、第１の処理手段１．２によって第２の処理手段に利用可能に生成されたトークンの数を示す第１のカウンタwritecを読み出す。
【００８１】
ステップ４．３において第２の処理手段１．３は、第２の処理手段が消費したトークンの数を示す第２のカウンタreadcを読み出す。
【００８２】
ステップ４．４において第２の処理手段１．３はこれらのカウンタを、式（１）を用いて比較する。
【００８３】
ステップ４．５において第２の処理手段１．３はこの比較に基づいて、Nc値が、生成されたトークンの数よりも大きいあるいは等しいならばステップ４．６、４．７を実行し、他の場合には、ステップ４．８を実行することを決定する。
【００８４】
ステップ４．６において第２の処理手段１．３はバッファ手段からトークンを読み出し、続いて、ステップ４．７において第２のカウンタを更新する。第２の処理手段は、ステップ４．２に続く前にデータ処理ステップ４．９を実行する。
【００８５】
好ましい実施例において、処理手段は、通信対象となる他方の処理手段の値のコピーをローカルに記憶する。
【００８６】
図５は、本発明に従った好ましい方法におけるこのローカルコピーの用いられ方を示す。
【００８７】
ステップ５．１及び５．２は、図３におけるステップ３．１及び３．２と類似する。
【００８８】
しかしながら、ステップ５．３において、リモートに記憶されたｃカウンタの値readcを読み出す代わりに、第１の処理手段１．２は、ローカルに記憶された値readc'を読み出す。この読出し動作は、通常、リモート値readcを読み出すよりもはるかに少ない時間で行える。
【００８９】
ステップ５．４は、図３におけるステップ３．４と類似するが、第１の処理手段１．２が式（４）に示すようにNp'を計算するためにこのローカルに記憶された値を用いる点が異なる。
【００９０】
ステップ５．５において、第１の処理手段１．２はこの比較に基づいて、Np値が、生成されたトークンの数よりも大きいかあるいは等しい場合はステップ５．６、５．７を実行し、他の場合にはステップ５．８、５．１０、５．１１を実行することを決定する。
【００９１】
ステップ５．６及び５．７は、図３におけるステップ３．６及び３．７に類似する。
【００９２】
ステップ５．８において第１の処理手段は、例えば所定の期間あるいは第１の処理手段が割り込まれるまで待機する。続いて、第１の処理手段は、ステップ５．１０においてリモート値readcを読み出し、ステップ５．１１においてこの値を変数readc'としてローカルに記憶する。この方法によれば、もしローカルに記憶された値readc'から計算された空トークンの数が、バッファに書き込まれるトークンの数よりも小さいならば、リモート値readcを読み出すことが必要なだけである。値Np'はreadc'の値の代わりにローカルに記憶され得る。この場合、値Np'は、各書込み動作の後、例えばステップ５．７と同時に更新されるべきである。
【００９３】
同様に、ローカルに記憶されたprodcあるいはNc'の値を用いることによって、消費プロセスを実行する第２の処理手段の効率を改善することが可能である。
【００９４】
通信の過負荷をさらに軽減するために、図６に概略的に示すように、処理手段６．１は信号コントローラ６．２を備え得る。信号コントローラは信号レジスタ６．３及びマスクレジスタ６．４を有する。プロセッサ６．１が割込みを受け取るべきかどうかを決定するために、信号コントローラにおけるレジスタの内容は論理回路６．５において互いに比較される。同期カウンタを更新したメッセージをそのプロセッサに送る別のプロセッサが、どのタスクのためにこのカウンタを更新したのかを示すために、信号レジスタ６．５を更新する。例えば、もし信号レジスタ内の各ビットが特定のタスクを表すのならば、そのメッセージは、その特定のタスクに対するビットが設定されたという結果を保持する。一方、プロセッサ６．１は、どのタスクに対してプロセッサ６．１が割り込まれるべきかをマスクレジスタ６．４において示す。論理回路６．５は、プロセッサ６．１によって選択されたタスクのうちの１つのためにメッセージを受け取るたびに、割込み信号を生成する。実施例において、論理回路６．５は１組のＡＮＤゲート6.5.1-6.5.nを有し、各ＡＮＤゲートは信号レジスタ６．３の各ビットへ接続された第１の入力と、マスクレジスタの対応するビットに接続された第２の入力とを有する。論理回路６．５は、さらにＯＲゲート6.5.0を有する。ＡＮＤゲートのそれぞれはＯＲゲートの入力に接続された出力を有する。ＯＲゲート6.5.0の出力は割込み信号を供給する。
【００９５】
図７は、プロセッサ７．１がバス７．３等の通信ネットワークを介して他の処理手段と通信を行うことをサポートする別個の同期シェル７．２を備えた実施例を示す。同期シェル７．２はバスアダプタ７．４と、同期シェル７．２がメッセージを受け取ったタスクの識別結果を記憶する信号レジスタ７．５とを有する。同期シェル７．２はさらに、チャネルコントローラ７．６、７．７を有する。これらはプロセッサ７．６の命令をバス７．３への信号に変換する。通常、特定用途装置７．１は、プログラム可能なプロセッサ６．１の場合よりも少ないタスクを並列に実行する。それ故、図６に示すような割込選択技術を適用することはあまり重要ではない。
【００９６】
図８は、チャネルコントローラ８．１をさらに詳細に示す。チャネルコントローラ８．１は、汎用バス・マスタ・スレーブ部８．２、レジスタファイル８．３及びコントロール部８．４を含む。
【００９７】
バスアダプタ７．４及び汎用バス・マスタ・スレーブ部８．２は共にチャネルコントローラ８．１をバスへ接続する。バスアダプタ７．４は、特定の相互接続ネットワーク例えばＰＩバスあるいはＡＨＢバスを汎用インターフェースに適合させる。汎用バス・マスタ・スレーブ部８．２は上記汎用インターフェースへ同期信号を適合させる。この方法では、異なるチャネルコントローラタイプと異なるバスとを、比較的少数の異なる構成要素でサポートできる。
【００９８】
レジスタファイル８．３は同期情報を記憶する。
【００９９】
プロセッサ７．１のデバイス同期インターフェースが、バッファ内において書込みあるいは読出し可能なトークンの数を要求するために信号Claimを発行する場合、コントロール部８．４は、ローカルに記憶されたリモートカウンタ値remotecをその予約カウンタlocalsvcと比較することによってこの数が利用可能かどうかを確認する。表記（notation）remotecは入力チャネルに対してwritecを、出力チャネルに対してreadcを示す。表記（notation）localrsvcは入力チャネル対してreadrsvcを、出力チャネルに対してwritersvcを示す。
【０１００】
もしその確認が肯定的ならば、トークンのアドレスToken Addressが返される。さもなければ、プロセッサ７．１に対して確保されたバッファスペースの上界アドレス（upper boundary address）が返され得る。信号Token Validは、トークンに対する要求が承認されたか否かを示し、プロセッサの同期インターフェースは信号Claimを再び出すことが可能である。このようにして、トークンアドレスが各サイクルでそのプロセッサに供給され得る。もし第１の確認の結果が否定的ならば、チャネルコントローラ８．１は、アドレスremotecaddrによって示されるリモートカウンタを読み出し、ローカルに記憶された値remotecをそのアドレスに記憶された値によって置き換える。コントロール部８．４は、再度、要求されたトークンの数が利用可能かどうかを確認する。
【０１０１】
もし要求が通らなかったならば、チャネルコントローラ８．１はリモートカウンタをポーリングモードで定期的にポーリングするか、あるいは、それが割込モードにおいて通信を行うプロセッサによる割込みを待つ。その間他のタスクを進めることができる。レジスタ内の変数inputchannelはチャネルコントローラに対して現在のチャネルが入力及び出力チャネルのどちらであるかを、またこれらのモードのどちらがこのチャネルに対して選択されるのかを示す。
【０１０２】
要求が成功した後、変数localrsvcは、要求されたトークンの数に従って更新される。
【０１０３】
変数remotecの代わりに、レジスタファイルは、最後の確認で計算された利用可能なトークンの数を示す変数を含み得る。
【０１０４】
プロセッサ７．１がRelease_reqを送る場合、ローカルカウンタlocalcはこの要求に従って更新される。このローカルカウンタlocalcは入力チャネルに対するreadc及び出力チャネルに対するwritecである。選択的に、信号Release_reqは、プロセッサ７．１がいつでもトークンを解放できるように、高く保たれ得る。しかしながら、この信号は、それがほとんどバスにアクセスできないときに、コントローラが溢れるのを阻止するために用いられ得る。
【０１０５】
代替的に、同期プロセスは、要求及び解放関数を用いることによってソフトウェアで実行され得る。要求関数を実行することによって、プロセッサは特定のチャネルに対するトークンの数を要求し、その関数がトークンアドレスを伴って戻るまで待つ。解放関数を実行することによってそのプロセッサは特定のチャネルに対するトークンの数を解放する。別個の関数が、書込み用のトークンあるいは読出し用のトークンを要求するために存在し得る。  同様に、別個の関数は解放のために用いられ得る。
【０１０６】
本発明の保護範囲は上述した実施例に限定されない。また、本発明の一部を構成する手段は、専用ハードウェア、あるいはプログラムされた一般用途のプロセッサで実現され得る。本発明は新たな特徴あるいは新たな特徴の組み合わせを有する。
【図面の簡単な説明】
【０１０７】
【図１】本発明に従ったデータ処理装置を概略的に示す。
【図２】同期カウンタがバッファのパーティションを示す方法を概略的に示す。
【図３】本発明に従った同期方法の第１の特徴を示す。
【図４】本発明に従った同期方法の第２の特徴を示す。
【図５】本発明に従った別の同期方法を示す。
【図６】プロセッサ用の信号コントローラをより詳細に示す。
【図７】プロセッサ用の同期シェルを示す。
【図８】チャネルコントローラを示す。
【図１】
2004531002.tif 000004
【図３】
2004531002.tif 000005
【図４】
2004531002.tif 000006
【図５】
2004531002.tif 000007
【図６】
2004531002.tif 000008
【図７】
2004531002.tif 000009
【図８】
2004531002.tif 000010
【国際公開パンフレット】
2004531002.tif 000011
2004531002.tif 000012
2004531002.tif 000013
2004531002.tif 000014
2004531002.tif 000015
2004531002.tif 000016
2004531002.tif 000017
2004531002.tif 000018
2004531002.tif 000019
2004531002.tif 000020
2004531002.tif 000021
2004531002.tif 000022
2004531002.tif 000023
2004531002.tif 000024
2004531002.tif 000025
2004531002.tif 000026
2004531002.tif 000027
2004531002.tif 000028
2004531002.tif 000029
2004531002.tif 000030
2004531002.tif 000031
2004531002.tif 000032
2004531002.tif 000033
2004531002.tif 000034
2004531002.tif 000035
2004531002.tif 000036
2004531002.tif 000037
【国際公開パンフレット（コレクトバージョン）】
2004531002.tif 000038
【国際調査報告】
2004531002.tif 000039
2004531002.tif 000040
2004531002.tif 000041