(57)【要約】本発明によるデータ処理装置は、少なくとも第１（１．２）と第２のプロセッサ（１．３）を含み、同期プロトコルによって、バッファを経由したトークンを交換することによって、互いにデータを通信することができるようになっている。そのプロトコルは、少なくとも、両方のプロセッサによって読出すことができる第１と第２の同期カウンタ（writec、readc）を含む、同期情報を維持する。少なくとも第１のプロセッサ（１．２）は第１のカウンタ（writec）を更新することができ、少なくとも第２のプロセッサ（１．３）は第２のカウンタ(readc)を更新することが出来る。そのプロトコルは、プロセッサから出されたときに、前記プロセッサに利用できるトークンの数を要求するか否かを確認する結果となる第１の命令（要求）と、他のプロセッサによって使用するために開放されたトークンを指示するために、同期カウンタの一つを更新する結果となる第２の命令（開放）を、少なくとも有している。少なくともプロセッサのうちの一つ（１．３）は、そのプロセッサに利用できるトークンの量の指示（Nc;writec;readc）をローカルに記憶するための記憶部を有し、第１の命令（要求）を出すと、前記指示に基づいた前記プロセッサの利用できるトークンの量を確認することとなることを特徴とする。確認の悲観的な結果が出ると、同期カウンタの少なくとも一つに基づいて、この指示の更新を行うことになる。プロセッサにより第２の命令（開放）を発すると、他のプロセッサに開放されたトークンの量に合わせて指示を更新することとなる。
2004522233.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１と第２のプロセッサを含み、そのプロセッサは同期プロトコルに従ってバッファを経由してトークンを互いに交換することが可能であり、
その同期プロトコルは、少なくとも第１と第２の同期カウンタを有する同期情報を維持しており、これらのカウンタはどちらのプロセッサからも読出すことが可能であり、
少なくとも第１のプロセッサは第１のカウンタを更新することが可能であり、
少なくとも第２のプロセッサは第２のカウンタを更新することが可能であり、
同期プロトコルは少なくともプロセッサから発されたときに要求されたトー
クン信号の数が前記プロセッサにとって利用できるかどうかを確認するという結果になる第１のコマンドと、
他方のプロセッサによって使用のためにトークンが解放されたことを指示するために、同期カウンタの１つを更新する結果になる第２のコマンドを有するデータ処理装置において、
少なくともプロセッサの一つはそのプロセッサが利用できるトークンの量の指示をローカルに記憶するための記憶部を有し、
前記指示に基づいて前記プロセッサが利用できるトークンの量を確認する結果になる第１のコマンドを発し、
前記確認の否定的な出力が、少なくとも同期カウンタの１つに基づいてこの指示の更新をする結果になり、
プロセッサによって発された第２のコマンドによって、他のプロセッサによって解放されたトークンの数に合わせてその指示を更新する結果になることを特徴とするデータ処理装置。
【請求項２】
その指示が、初めは利用できるバッファスペースがないことを指示するものであることを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
第１のコマンドと関係なく、少なくとも１つの同期カウンタに基づいて、その指示を更新する用意がされていることを特徴とする請求項１に記載のデータ処理装置。
【請求項４】
第１の同期カウンタが、第１のプロセッサによって解放されたトークンの量を指示し、第２の同期カウンタが第２のプロセッサによって解放されたバッファスペースの量を指示することを特徴とする請求項１に記載のデータ処理装置。
【請求項５】
第１の同期カウンタは第１のプロセッサが利用できるトークンの量を指示し、第２の同期カウンタは第２のプロセッサが利用できるトークンの量を指示することを特徴とする請求項１に記載のデータ処理装置。
【請求項６】
１つまたは複数の第２のプロセッサを含み、第２のプロセッサは各々第１のプロセッサによって作り出されたデータを読出すことを特徴とする請求項１に記載のデータ処理装置。
【請求項７】
少なくともプロセッサの１つが汎用プロセッサである、又はコンピュータプログラムを実行する特定用途向けにプログラムされたデバイスであることを特徴とする請求項１に記載のデータ処理装置。
【請求項８】
少なくともプロセッサの一つが専用のプロセッサであることを特徴とする、
請求項１に記載のデータ処理装置。
【請求項９】
少なくとも第１と第２のプロセッサを含み、
そのプロセッサは同期プロトコルに従ってバッファを経由してトークンを互いに交換することが可能であり、その同期プロトコルは、少なくとも第１と第２の同期カウンタを有する同期情報を維持しており、これらのカウンタはどちらのプロセッサからも読出すことが可能であり、少なくとも第１のプロセッサは第１のカウンタを更新することが可能であり、少なくとも第２のプロセッサは第２のカウンタを更新することが可能であり、同期プロトコルは少なくともプロセッサから発されたときに要求されたトークンの量を前記プロセッサが利用できるかどうか、および／又は、要求されたトークンの量の所有者か、を確認するという結果になる第１のコマンドと、他方のプロセッサによって解放されたトークンを指示するために同期カウンタの１つを更新する結果になる第２のコマンドを有しており、
少なくともプロセッサの一つはそのプロセッサが利用できるトークンの量の指示をローカルに記憶するための記憶部を有し、
第１のコマンドを発することにより、前記指示に基づいて前記プロセッサが利用できるトークンの量の確認をする結果になり、
前記確認の否定的な出力により、少なくとも同期カウンタの１つに基づいてこの指示の更新をする結果になり、
プロセッサによって第２のコマンドが発せられることによって、他方のプロセッサに対して解放されたトークンの量に合わせてその指示を更新する結果になることを特徴とするデータ処理装置を動作させる方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はデータ処理装置に関する。
【０００２】
この発明は、更にデータ処理装置を動作させる方法に関する。
【背景技術】
【０００３】
信号処理機能が、ＭＰＥＧ−ｘ、ＤＶＢ、ＤＡＢ、ＵＭＴＳのような標準に基づいている多くの製品に対する要件を定める。このことは、これらの製品の信号処理部の効率的な実現を要求する。しかしながら、標準の発展と、市場の要求の変化のため、拡張性とともに柔軟性が必要とされている。データのストリームが処理されるので、マクロパイプラインのセットアップはこれらのアプリケーションをモデル化する自然な方法である。このセットアップで、その機能（タスク）はステージであり、パイプラインを形成するために、ステージ間にはバッファが存在する。全てのステージは並列に動作させることができるので、この方法は、タスクレベルの並行処理（ＴＬＰ）を利用する方法である。
【０００４】
複数のプロセッサを含むマルチプロセッサシステムは、そのようなマクロパイプラインの実現に、非常に適している。マルチプロセッサシステムは、複数のタイプのプロセッサ、例えばプログラム可能なプロセッサであるＲＩＳＣプロセッサ、ＶＬＩＷプロセッサ、ＶＬＩＷプロセッサおよび専用のハードウェアを含むことができる。一つのプロセッサは特定のタスクを実行したり、２つ以上のタスクを時分割の方法で実行したりする。
【０００５】
マイクロパイプラインのそれに続くステージでタスクを実行するプロセッサの間でデータを交換するために、一般には、プロデューシングプロセッサがそのデータを共有メモリの中のバッファに書込み、コンシューミングプロセッサはそのバッファからこのデータを読出す。同期プロトコルは、そのコンシューミングプロセッサが、プロデューシングプロセッサによってまだ書込まれていないバッファの中のトークンを読出そうとすることを防ぐ。同様に、同期プロトコルは、まだコンシューミングプロセッサによって読出されていないトークンをプロデューシングプロセッサが上書きすることを防ぐ。
【０００６】
既知の同期プロトコルでは、プロデューシングプロセッサ（プロデューサ）が利用できるトークンの量は第１のカウンタで保持され、コンシューミングプロセッサ（コンシューマ）が利用できるトークンの量は第２のカウンタで保持される。プロデューサがトークンを手放す、すなわち、コンシューマに利用できるようにする度に、同期プロトコルが第２のカウンタを増加させ、第１のカウンタを減少させる。第１のカウンタを読出すことによって利用可能なトークンを有しているかを確認する。既知の同期プロトコルの短所は、カウンタが各々両方のプロセッサによってアクセス可能でなければないので、プロセッサからカウンタへのアクセスを管理するために一種のアービトレーション機構が必要であることである。このことによりプロセッサの動作が遅れ、それとともにデータ処理装置の効率が下がる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
高い効率を有するデータ処理装置を提供することが、本発明の目的である。さらに、データ処理装置を改善された効率で動作させる方法を提供することも本発明の目的である。
【課題を解決するための手段】
【０００８】
この目的を達成するための、本発明に基づくデータ処理装置は、請求項１によって定められる。
【０００９】
本発明によるデータ処理装置では、少なくともプロセッサの一つはそのプロセッサが利用できるトークンの量の指示をローカルに記憶するための記憶部を有する。２つのプロセッサによって共有されている同期情報に基づいて利用できるトークンの量を決定する代わりに、そのプロセッサが、前記ローカルに記憶された指示に基づいて利用できるトークンの量を確かめる。この方法によれば、ローカルに記憶された指示が利用可能なトークンを指示するのであれば、きわめて素早く進行することになる。もしそうでなければ、少なくとも１つの同期カウンタに基づいて指示は更新されている。プロセッサが同じバッファ・スペースを再び使おうとすることを防ぐために、互いに通信している他のプロセッサに１つ又は２つ以上のトークンを解放するとき、ローカルに記憶された指示は更新される。ローカルに記憶された指示は実際に利用可能なトークンの量の悲観的な指示である、ということに注意を要する。一旦、プロセッサ又はプロセッサに付けられた別個の通信シェルが、そのローカルに記憶された指示を更新すると、この指示の値は実際のトークンの数に等しくなるのである。しかし、もしそのプロセッサがトークンを解放すると、それに順応してローカルに記憶された指示を減少させる。従って、ローカルに記憶された指示は、せいぜい、実際の値と等しくなる程度であり、従って、トークンが書き込まれる前に読まれたり、読まれる前に上書きされるということはない。
【００１０】
多数のトークンを要求する第１の命令は、ソフトウェア、例えばトークンの数とチャネルを変数として持っている機能クレームで実行される。機能クレームは応答として、利用可能になった初めのトークンを返す。
【００１１】
個別の機能は書き込まれるトークン、すなわち出力チャネルと、読まれるトークン、すなわち入力チャネル、に対するクレームとして定められる。プロセッサは時分割の方法でいくつかのタスクを実行することができるので、プロセッサは２以上の入力チャネルを持ち、各タスクはそれ自身の入力チャネルを持っている。同様の理由で２以上の出力チャネルを持つ。
【００１２】
チャネルの識別と解放されたトークンの量を変数として持っている、ファンクション・コール・リリースによって、トークンを解放するための第２の命令が実行される。個別の機能は、特定の書かれているトークンと読まれているトークンを開放する。
【００１３】
これらの命令をソフトウェアで実行する代わりに、専用のハードウェアで実行することも同様に可能である。
【００１４】
米国特許ＵＳ６，１７３，３０７Ｂ１は、複数のプロデューサと複数のコンシューマに共有される循環待ち行列を含むマルチプロセッサシステムが開示されている。どのプロデューサ又はコンシューマも、待ち行列の正確さを阻害することなく、いつでもどのプロデューサ又はコンシューマよりも先に入手(preempt)することが許される。
【００１５】
さらに、米国特許ＵＳ４，９１６，６５８では、動的に制御されるバッファを有する装置が述べられている。そのバッファは、次の記憶位置を指定する第１のインジケータ、次に検索されるデータの記憶場所を指定する第２のインジケータ、記憶可能な位置の数と検索に利用できる位置の数を提供する回路とともに、いくつかの記憶場所からなるデータワードを記憶するのに適している。
【００１６】
請求項２は実際の実施例を権利主張している。利用可能なトークンの数を確認するとき、ローカルに記憶された指示は利用可能なトークンがないことを発見するであろう。その結果、正しい値を有するように、この指示を更新することになるであろう。
【００１７】
請求項３の実施例では、プロセッサは、ローカルに記憶されている値が利用できるトークンはない、例えば、値０を持っている、という指示がされるまでは待たないが、適切な時、例えば通信ネットワークの働きが低いとき、又はデータプロセッサの初期化の直後、に実際の値を先取る(prefetch)。
【００１８】
いくつかの同期プロトコルが可能であり、その１番目が請求項４，２番目が請
求項５で主張されている。
【００１９】
請求項６の実施例では、プロデューサによって生成されたデータが２つ以上のコンシューマに読まれる。
【００２０】
アプリケーションに依存して、少なくともプロセッサのうち１つは汎用のプロセッサ、又はコンピュータプログラムを実行する特定用途のためにプログラムされたアプリケーションデバイスである。代わりに又は共同して専用のプロセッサが使われる。
【００２１】
シェルがプロセッサと合わさることにより、プロセッサ自身が処理しなければならない割り込みの回数が減少する点で、マルチタスクを行うことが容易になる。このことにより、処理を行っていないプロセッサが不必要に動作される、又は、他の働いているプロセッサの割り込みを行ってしまう回数が減るのである。このようにしてプロセッサの効率は改善される。
【００２２】
割込み信号の種類と割込み信号がどのようにエンコードされているかに基づいて割込み信号を選択するためのシェルを実行するためのいくつかの選択が可能になっている。実施例では、割込み信号はプロセッサのデータチャネルのために指示されている。これを実行する方法は、レジスタのビットをプロセッサの各々の入力チャネルに割り当てることによって行われる。たとえば、３２ビットのレジスタは３２の入力チャネルをサポートすることができ、例えばチャネル０がレジスタのビット０に、チャネル１はレジスタのビット１、等というようにそれぞれ割り当てられる点に特徴がある。他のプロセッサがプロセッサのチャネルｋを指定した割込み信号を送ったとき、対応する信号レジスタのビットｋがセットされる。受け取る側のプロセッサのシェルは、割込みを無視したいか否かに関わらず、各ビットが特定のチャネルを表すことを特徴とするマスク・レジスタによって特定の割込み信号を選択することができる。例えば、もしチャネル２に対応するビットがマスクされていれば、この信号はプロセッサに割込みを引き起こさず、ウェーク・アップは起こらないだろう。この例では、プロセッサはデータ処理にかかりきりで、プロセッサ内のすべてのビットはマスクされ、または、チャネル２に何が起こっているかは関係なく、プロセッサ又はタスクはチャネル１の全ての又は空のトークンを待つことができる。
【００２３】
その信号とマスクレジスタはサポートされるべきチャネルの数に基づいて任意の数のアービトレーション用のビットを持つことができる。あるいは、番号によってそれぞれのチャネルをサポートし、そして、プロセッサがそのチャネルのために割込みすべきであるか否かを決定するためにリスト又は参照テーブルを用いることが可能である。しかしながら、これはより複雑な解決方法である。
【００２４】
そのチャネル番号によって割込み信号を特定する代わりに、タスク番号で特定することもできる。この実施例では、特定のタスク用の信号を有するすべてのチャネルはそのシェルの信号レジスタの中の同じビットをセットする。このようにして、信号レジスタ内のビットの数に等しい多数のタスクが独自にアドレス指定することができ、おのおののタスクは二つ以上のチャネルを持ちうる点に特徴がある。固有チャネルによる識別と比べて、待ち時間が少し不明確にはなるが、不必要なウェークアップの数は依然として少なく、より多くのチャネルを限られたハードウェアによってサポートすることができる。
【００２５】
もちろん、その関係が定められている限り（本例はそうであるための単純な例である）、タスク番号はそのビット番号と一致している必要はない。さらに、タスク（のグループ）が同じ信号割り込みナンバを共有することもできる。
【００２６】
受信者により実行されたタスクを特定する代わりに、送信者のタスク識別番号を信号で伝えることができる。その場合、その受信側のプロセッサは、特定のタスク用の割込み信号としてではなく、特定のタスクからの割込み信号を選択することができる。それは外部からのタスクの数と、そのプロセッサ自身の選択、またはもっとも有用または効率的であるように見えること、に基づいたタスクの数に依存している。
【発明を実施するための最良の形態】
【００２７】
以下、図面を参照しながら、これら特徴とその他の特徴を詳細に説明する。
【００２８】
図１に、少なくとも第１の処理手段１．２と第２の処理手段１．３を含むデータ処理装置を示す。第１の処理手段であるVLIWプロセッサ１．２は、メモリ１．５内に位置するバッファ手段の中のトークンを利用可能にすることによってデータを供給可能である。トークンは、更なる処理のため、デジタル信号プロセッサである第２の処理手段１．３によって読出し可能である。データ処理装置は、さらにRISCプロセッサ１．１、ASIP１．４、専用のハードウェアユニット１．６を含んでいる。VLIWプロセッサ１．２、DSP１．３、ASIP１．４、メモリ１．５、ASIC１．６は、第１のバス１．７を介して相互に接続されている。RISCプロセッサ１．１は第２のバス１．８に接続されており、第２のバス１．８は、ブリッジ１．９を経由して、第１のバス１．７に接続されている。さらに、メモリ１．１０と周辺装置１．１１は、第２のバス１．８に接続されている。プロセッサは補助装置部を有することができる。例えば、RISCプロセッサ１．１は命令・キャッシュ１．１．１とデータキャッシュ１．１．２を含む。同様にVLIWプロセッサは命令キャッシュ１．２．１、データキャッシュ１．２．２を有する。DSP１．３は、命令キャッシュ１．３．１、ローカル・メモリ１．３．２、アドレス・デコーダ１．３．３を有する。ASIP１．４は、ローカルメモリ１．４．１とアドレス・デコーダ１．４．２を有する。ASIC１．６は、ローカル・メモリ１．６．１と、アドレス・デコーダ１．６．２を有する。処理手段１．２、１．３には、各々、個別の同期インジケータが割り当てられている。どちらの同期インジケータも第１の処理手段１．２、第２の処理手段１．３のどちらからもアクセス可能である。第１の同期インジケータは少なくとも第１の処理手段１．２によって更新することができ、第２の処理手段１．３によって読出すことができる。第２の同期インジケータは少なくとも第２の処理手段１．３によって更新することができ、第１の処理手段１．２によって読出すことができる。
【００２９】
それぞれの同期インジケータはカウンタによって表される。第１の同期インジケータを表すカウンタ（Pカウンタ）は、第１の処理手段１．２によって書かれるトークンの数を指示している。第２の同期インジケータを表すカウンタ（Cカウンタ）は、第２の処理手段１．３によって読まれるトークンの数を指示している。カウンタの値を比較することによって、それぞれのプロセッサによって利用できるトークンの数を計算することが可能である限り、カウンタによってトークンの数を指示することに関していくつかの選択も当業者には可能である。例えば、カウンタの値は、トークンの値  mod n （nは整数値）と等しいことがあり得る。別の方法では、カウンタの各ステップが固定されたトークンの数を表し得る。すなわち、カウンタの値のステップの数によってトークンが表され得る。
【００３０】
実際の実施例では、両カウンタはアドレスに対するポインタであり、そのアドレスまで、バッファ手段は他のプロセッサによって利用可能である。このことは概略的に図２に示される。この図は、第２の処理手段にデータを送るための第１の処理手段によって使われるメモリ１．５内のバッファ・スペース２．１を概略的に示している。そのバッファ・スペース２．１は、循環バッファとして構成されている。バッファ・スペース２．１は、第１のゾーン２．２と、第２の処理手段１．３によって利用可能となる第１の処理手段１．２によって書かれたデータを含む第２のゾーン２．４を含む。バッファ・スペース２．１は、さらに、第１の処理手段１．２が新しいデータを書くことを可能にしている第３のゾーン２．３を含む。ｐカウンタのwritecは、第１のゾーン２．２の終わりを示しており、ｃカウンタのreadcは第２のゾーン２．４の終わりを示している。
【００３１】
第１のゾーン２．２と第２のゾーン２．４の中にある部分２．６は、同期カウンタreadcと結合された予約カウンタreadrsvcによって予約される。
【００３２】
第３のゾーンの中にある部分２．５は、同期カウンタwritecと結合して予約カウンタwritesvcによって予約される。
【００３３】
その２つのカウンタの引き算結果をバッファのサイズbuffszで除した余りは、第２の処理手段１．３が利用できる有効なトークンの数Nｃと、第１の処理手段１．２によって満たすことが可能な空のトークンの数NPを与える。
（１）  Nｃ= (writec - readc) mod buffsz
（２）  Nｐ= (readc - writec) mod buffsz
【００３４】
pカウンタとcカウンタは、少なくとも二つの処理手段から利用できる位置に記憶さる。これらのカウンタに対する各アクセスは、その位置に対するアクセスを許すアービトレーション機構を必要とするため、遅延を生じさせる。更なる効率の改善のためには、処理手段は、利用可能なトークンの量の指示をローカルに記憶するためのレジスタ手段に備えられる。実施例においては、第１の処理手段１．２はカウンタの値readc'を記憶するためのレジスタを有しており、第２の処理手段１．３はカウンタの値writec'を記憶するためのレジスタを有している。これらの手段がｐカウンタの進行を決定したときには、すでにwritecの値は第１の処理手段１．２に利用可能になっている。同様の理由で、readcの値も第２の処理手段に利用可能になっている。実際に利用可能な有効なトークンの数Nｃを計算する代わりに、第２の処理手段１．３は次の式に従って、この値の悲観的な推定値Nｃ’を計算する。
（３）  Nｃ’= (writec’ - readc) mod buffsz
【００３５】
writec’とreadcの値がともに読出すことができるトークンの数Ｎcを指示しているとき、すなわち悲観的な推定値であるとき、これらの変数を蓄えておくためのローカルな機能は読出すことができるトークンの量の指示をローカルに記憶するためのレジスタ手段を形成する。もう一つの方法として、writec’ の値の代わりに Nｃ’の値をローカルに記憶することがあげられる。
【００３６】
同様に第１の処理手段１．２は実際に利用可能な空のトークンの数の悲観的な推定値Nｐ’を、今度は以下の式によって計算する。
（４）  Nｐ’= (readc’ - writec) mod buffsz
【００３７】
これらの変数をローカルに記憶するための装置は、書込みに利用可能なトークン量の指示をローカルに記憶するためのレジスタ手段を形成する。
【００３８】
代替的には、readc’ の値の代わりにNｐ’の値がローカルに記憶され得る。
【００３９】
第１の処理手段１．２がNｐ’の値が０であることを検出した瞬間に、第１の処理手段のローカル・レジスタ内のreadc’ の値を、ｃカウンタのreadcのその瞬間の値に更新することが必要である。第２の処理手段１．３がNｃ’の値が０であることを検出した瞬間に、第２の処理手段のローカル・レジスタ内のwritec’ の値を、ｐカウンタのwritecのその瞬間の値に更新することが必要である。
【００４０】
第１の処理手段１．２と第２の処理手段１．３の間の通信チャネルに関するデータは、ローカルに記憶されている情報に加えて、データ共有構造の中で組織化されている。そのC言語仕様のデータ構造CHP_channelTの一例は以下のとおりである。
2004522233.tif 000003
【００４１】
カウンタの値writecとreadcのほかに、このデータ構造は以下のデータを含んでいる。
【００４２】
idは、チャネルを識別する値であって、複数のチャネル、例えば、第１の処理手段から第２の処理手段にデータを送信するための第１のチャネル、第２の処理手段から第１の処理手段にデータを送信するための第２のチャネル、第２の処理手段から第３の処理手段にデータを送信するための第３のチャネル、を含む処理スキームを可能にするためのものである。
【００４３】
buffszの値は、バッファのサイズ、すなわち、バッファの中に記憶することができる、トークンの数を示している。
【００４４】
flagsの値は、チャネルの属性をあらわし、例えば、同期がポーリングか割込みベースである場合、チャネルバッファが直接あるいは間接に割り当てられているかどうかを示す。代替方法として、チャネルに所定の属性を与えることができる。例えば、直接にバッファを割り当てられたバッファとの同期に基づく割込みの実行を制限することが決定され得る。その場合、flagsの値は省略される。
【００４５】
ptaskとctaskは第１の処理手段、すなわちプロデューサのタスクと、第２の処理手段、すなわちコンシューマのタスクを記述する構造に対するポインタである。
【００４６】
タスク構造は例えば以下のものを含んでいる。
-  そのタスクの識別子（どれのタスク構造であるか）
-  関数ポインタ（もし、プロセッサに組み込まれたタスクであれば、ブーティングの後、そのroot_taskは、この関数まで飛ぶことができ、アプリケーションをスタートさせる。さもなければ、無効（void）とする。）
-  装置タイプ：どの種類の装置でタスクが実行されるべきかを指示する。
これは、ブート処理において有用である。というのも、ＵＮＩＸ（Ｒ）プロセスとして実行されるタスクは、DSPや組み込みプロセッサあるいは専用のハードウェアの上で実行しているタスクと比べて、異なる方法によって初期化されなければならないからである。主要な装置タイプを持つことで、適切なブート手順を選択することが容易になる。
-  装置番号：例えば、第１のＵＮＩＸ（Ｒ）のコプロセッサを第２のものと、区別することが、この装置番号によって可能となる。このことは、それらに固有の番号を与えることによって可能となる。
-  チャネルの数
-  チャネルデータ構造に対するポインタのリスト
この方法では、例えばＵＮＩＸ（Ｒ）タスクが始まると、まず第１番目にそのタスク構造を読出すことができ、それからそのタスクに接続された全てのチャネルについての全ての情報を読出すことができる。このことにより、ブーティングが非常に容易になり、制御プロセスは、全てのタスクに適切なデータ構造をロードさせるように制御プロセスを更新されなければならないというタスクが追加されることを避けることができる。
【００４７】
ユニオンchannelはそのバッファの位置を示す。そのバッファが、ポインタbuffer_pointersを経由して、間接的にそのバッファが構造CHP_bufferTに配置されるか、そのバッファは構造CHP_channelTに含まれている。
【００４８】
その整数token_sizeは、プロデューサとコンシューマによって交換されるトークンの大きさを、例えばバイト数で示す。
【００４９】
上述のように、もし処理手段が消費タスク用のカウンタ値writec’のようなローカルなデータを含んでいれば、望ましい。データ構造CHP_channelTがローカルなタスク情報を含んでいるデータ構造に対する基準pchan,cchanを含むことが好ましい。
【００５０】
そのようなデータ構造は、以下に示すような形を有しており、C言語仕様では、以下のようになる。
2004522233.tif 000004
【００５１】
この構造は、処理手段が通信する他のデバイスの信号レジスタ・アドレスを指示している符号なし整数の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を読出すことだけが必要となる。readc’の値の代わりに、NP’をローカルに記憶することができる。この場合、各書込み動作後、例えばステップ５．７と同時に、NP’の値を更新するべきである。
【００８２】
同様にローカルに記憶されているproduc、又はNc’の値を用いることによって、消費プロセスを実行する第２の処理手段の効率を向上することができる。
【００８３】
上述したように、同期カウンタwritecとreadcを用いるかわりに、本発明によるとデータ処理システムは第１プロセッサに利用できるトークンの量を指示する第１の同期カウンタtoken１と、第２のプロセッサが利用できるトークンの量を指示する第２の同期カウンタtoken２を使い得る。プロデューサがトークンを手放すたびに、すなわち、コンシューマに利用可能にすると、第２のカウンタを増加させ、第１のカウンタを減少させる。第１のカウンタを読出すことによって、利用可能なトークンを有しているか否かを確認する。本発明によると、プロセッサの中の１つ、例えば第１のプロセッサ、がローカルな指示を有している。もし、第１のプロセッサが前述したローカルな指示に基づいて利用可能なトークンがないことを検出すると、第１の同期カウンタtoken1の値を単にコピーする。同様に、必要があればそのローカルな指示を更新するためにtoken2の値を用いる。
【００８４】
通信過負荷をさらに軽減するために、処理手段６．１は、図６に概略的に図示すように信号コントローラ６．２を備え得る。信号コントローラは信号レジスタ６．３とマスクレジスタ６．４を有する。信号コントローラ内のレジスタの内容は、プロセッサ６．１が割込みを受け入れるか否かを決定するために論理回路６．５で互いに比較される。同期カウンタを更新したというメッセージをそのプロセッサに送ったもう一つの別のプロセッサが、このカウンタをどのタスクのために更新するかを指示するために、信号レジスタ６．５を更新する。例えば、もし信号レジスタ内の各ビットが特定のタスクを表しているならば、そのメッセージはその特定のタスクのためのビットがセットされるという結果を保持する。一方、プロセッサ６．１は、マスクレジスタ６．４内で、どのタスクのために割込みするべきなのかを指示する。そして、論理回路６．５は、プロセッサ６．１によって選ばれたタスクのうちの一つのためのメッセージを受け取るたびに、割込み信号を生成する。ここに示した実施例においては、論理回路６．５は、６．５．１乃至６．５．nの一組のANDゲートを有し、各ANDゲートは信号レジスタ６．３のそれぞれのビットに接続された第１の入力と、マスクレジスタ６．４のそれぞれ対応したビットに接続された第２の入力を持っている。論理回路６．５は、さらに、ORゲート６．５．０を有する。各ANDゲートは、ORゲートの入力に接続された出力を有している。ORゲート６．５．０の出力は割込み信号を供給する。
【００８５】
図７は、プロセッサ７．１が、通信ネットワーク、例えばバス７．３を経由して、他の処理手段により通信を行うことをサポートする別個の同期シェル７．２を有することを特徴とする実施例を示す。同期シェル７．２は、バス・アダプタ７．４と、タスクを識別するために同期シェルがメッセージを受信し、そのタスク識別結果を記憶する信号レジスタ７．５を有する。同期シェル７．２は、さらにチャネルコントローラ７．６、７．７を有する。これらは、バス７．３に対して、プロセッサ７．６の命令を信号に変える役割をする。一般に、特定用途の装置は、プログラム可能なプロセッサ６．１による場合よりも、少ないタスクを並列的に実行する。その結果、図６に示した割込み選択技術を適用することは、あまり重要ではない。
【００８６】
図８は、チャネルコントローラ８．１をより詳細に示している。チャネルコントローラ８．１は、一般的なバス・マスター・スレーブ部８．２、レジスタファイル８．３、コントローラ８．４を有する。
【００８７】
バス・アダプタ７．４と汎用バス・マスター・スレーブ部８．２は共にチャネルコントローラ８．１をそのバスにつなぐ。バス・アダプタ７．４は、特定の相互接続ネットワーク、例えば、PIバス、又は、AHBバス、から汎用インターフェースへ適合させる。汎用バス・マスタ・スレーブ部８．２は、前述した汎用インターフェースに同期信号の適合させる。この方法では、比較的少数の異なる構成要素によって、異なるチャネルコントローラタイプと異なるバスをサポートできる。
【００８８】
レジスタファイル８．３は、同期情報を記憶する。
【００８９】
プロセッサ７．１のデバイス同期インターフェースがバッファ内の書込み可能又は読出し可能なトークンの数を要求するために、がClaim信号を発生する場合に、
コントローラ８．４はローカルに記憶されているリモートカウンタremotecをその予約カウンタlocalrsvcと比較することによって、この数が利用できるか否かを確認する。表記remotecは、入力チャネル用のwritec、出力チャネル用のreadcを意味する。表記localrsvcは、入力チャネル用のreadrsvc、出力チャネル用のwritersvcを示している。
【００９０】
もし、その確認が肯定的であれば、トークンのアドレスToken Addressが返される。さもなければ、プロセッサ７．１用に確保されていたバッファ・スペースの上界アドレス(‘Upper Boundary Address)が返され得る。信号Token Valid は、トークンの要求が、認められたか否かを指示し、プロセッサの同期インターフェースは再び信号Claimを出すことができる。このようにして、各サイクルで、トークンアドレスはプロセッサに供給することができる。もし、第１の確認が悲観的であったら、チャネルコントローラ８．１は、アドレスremotecaddrによって指示されているリモートカウンタを読出し、ローカルに記憶された値remotecを、そのアドレスに記憶された値に置き換える。コントロール部８．４は再び、要求された数のトークンが利用できるか否かを確認する。
【００９１】
もし、要求が失敗すると、チャネルコントローラ８．１は、リモートカウンタを規則的にポーリングモードで、定期的にポーリングを行うか、割り込みモードで、チャネルコントローラが通信を行っているプロセッサによる割り込みを待つことができる。その間、他のタスクを進めることもできる。レジスタ内の変数inputchannelは、現在のチャネルが入力か出力か、このチャネルには、どちらのモードが選択されているのか、をチャネルコントローラに指示する。
【００９２】
要求が成功した後、変数localrsvcは、要求されたトークンの数にしたがって更新される。
【００９３】
変数remotecの代わりに、レジスタファイルは、最後の確認によって計算された利用可能なトークンの数を指示する変数を含むことができる。
【００９４】
プロセッサ７．１がRelease_freqを信号で送る場合、この要求に合わせて、ローカル・カウンタlocalcは更新される。このローカル・カウンタlocalcは、インプットチャネルはreadc、アウトプットチャネルはwritecである。状況に応じて、プロセッサ７．１がいつでもトークンを手放すことができるように、信号Release_reqをハイに保っておくこともできる。しかしながら、バスへのアクセスがほとんどできないときに、この信号は、コントローラに大量の情報が送られることを防ぐために使われる。
【００９５】
もう一つの方法として、要求や開放の機能を用いることによって、同期プロセスをソフトウェア内に実行することができる。要求機能を実行することによって、プロセッサは個別のチャネルのために多数のトークンを要求し、その機能がトークンを返すまで待つ。開放機能を実行することによって、プロセッサは、個別のチャネルのために多数のトークンを開放する。別個の機能は、書込み用のトークン、又は、読出し込み用のトークンを要求するために存在しうる。同様に、別個の機能は、開放に対しても用いられる。
【００９６】
本発明の保護範囲は、ここに述べられた実施例には制限されない。本発明の保護範囲は、請求項内で言及された数字にも限定されない。”備える（comprising）”の語は、クレーム内で主張した部分以外の部分を排除するものではない。要素に先立って書かれている”a(n)”の語は、それらの要素が複数の場合を排除するものではない。本発明の部分を形成する手段は、専用のハードウェアの形態、又は、プログラムされた一般的な目的のプロセッサの形態、の両方で実行することができる。本発明は、各々の新しい特徴、又は特徴の結合によって存在する。
【図面の簡単な説明】
【００９７】
【図１】本発明によるデータ処理装置の概略図である。
【図２】同期カウンタがバッファの区分けを指示する方法の概略図である。
【図３】本発明による同期方法の第１の特徴を図示したものである。
【図４】本発明による同期方法の第２の特徴を図示したものである。
【図５】本発明によるさらなる同期方法を図示したものである。
【図６】プロセッサ用の信号制御器をより詳細に図示したものである。
【図７】プロセッサ用の同期シェルを図示したものである。
【図８】チャネルコントローラを図示したものである。
【図１】
2004522233.tif 000005
【図３】
2004522233.tif 000006
【図４】
2004522233.tif 000007
【図５】
2004522233.tif 000008
【図６】
2004522233.tif 000009
【図７】
2004522233.tif 000010
【図８】
2004522233.tif 000011
【国際公開パンフレット】
2004522233.tif 000012
2004522233.tif 000013
2004522233.tif 000014
2004522233.tif 000015
2004522233.tif 000016
2004522233.tif 000017
2004522233.tif 000018
2004522233.tif 000019
2004522233.tif 000020
2004522233.tif 000021
2004522233.tif 000022
2004522233.tif 000023
2004522233.tif 000024
2004522233.tif 000025
2004522233.tif 000026
2004522233.tif 000027
2004522233.tif 000028
2004522233.tif 000029
2004522233.tif 000030
2004522233.tif 000031
2004522233.tif 000032
2004522233.tif 000033
2004522233.tif 000034
2004522233.tif 000035
2004522233.tif 000036
【国際調査報告】
2004522233.tif 000037
2004522233.tif 000038
2004522233.tif 000039