JP2006503361A - データ処理装置及びデータ処理装置内の少なくとも2つの処理手段を同期させる方法 - Google Patents

データ処理装置及びデータ処理装置内の少なくとも2つの処理手段を同期させる方法 Download PDF

Info

Publication number
JP2006503361A
JP2006503361A JP2004544529A JP2004544529A JP2006503361A JP 2006503361 A JP2006503361 A JP 2006503361A JP 2004544529 A JP2004544529 A JP 2004544529A JP 2004544529 A JP2004544529 A JP 2004544529A JP 2006503361 A JP2006503361 A JP 2006503361A
Authority
JP
Japan
Prior art keywords
branch
queue
record
task
pointer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004544529A
Other languages
English (en)
Inventor
アイ‐チー、カン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of JP2006503361A publication Critical patent/JP2006503361A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)

Abstract

本発明は、複数のリーダーが同じキューを共有できるデータ処理装置およびそのようなデータ処理装置内の少なくとも2つの処理手段を同期させる方法を提供する。複数のリーダーによってキュー管理情報に同時にアクセスするためにロックや特定の命令は不要である。書き込み処理中にデータはコピーされない。また、本発明によれば、例えば実行時間にリーダーを付加し或いは除去するために、アプリケーションはシングルライター・マルチプルリーダーキューを動的に再構成することができる。これは、本発明においては、生産タスクと第1の消費タスクとの間の主ブランチのための主ブランチ記録と、上記生産タスクと更なる消費タスクとの間の副ブランチのための副ブランチ記録とを含み、ブランチ記録のリンクリストを得るために、上記ブランチ記録が上記メモリ手段と同じ記憶場所へのポインタと次のブランチへの参照とを記憶するブランチ記録手段を設けることにより達成される。

Description

本発明は、
同じ処理手段または他の処理手段による更なる処理のためにデータを供給することができる少なくとも1つの処理手段と、
第1の処理手段によって行なわれる1つの生産タスクと少なくとも1つの第2の処理手段によって実行される多数の消費タスクとの間に少なくとも2つのブランチを含むキュー構造と、
上記消費タスクによってアクセスされるデータを記憶するとともに、上記少なくとも2つのブランチ間で共有されるメモリ手段と、
を備えるデータ処理装置に関する。
また、本発明は、データ処理装置内の少なくとも2つの処理手段を同期させる方法であって、上記処理手段のうちの少なくとも1つが他の処理手段による更なる処理のためにデータを供給することができる方法において、
第1の処理手段によって行なわれる1つの生産タスクと少なくとも1つの第2の処理手段によって実行される消費タスクとの間に少なくとも2つのブランチを含むキュー構造を規定するステップと、
上記消費タスクによってアクセスされるデータを記憶するためのメモリ手段を上記少なくとも2つのブランチ間で共有するステップと、
を含む方法に関する。
現在、循環キューに関しては多くの実施が存在する。これらのキューは、高度並行処理システムにおいて必要とされる通信バッファとしての機能を果たす。そのようなキューは、通常、共有メモリ等の記憶媒体上にマッピングされる。そのようなキューの管理情報は、多くの場合、メモリ内のキューの要素のアドレス場所を参照する幾つかのリーダーポインタおよびライターポインタと、キューの満杯に関する幾つかの他の情報とから成る。この場合、キューのリーダーおよびライターを同期させるようにする、すなわち、リーダーが空のキューから読み取ることができずかつキューが満杯の時にライターがキューに対して書き込むことができないようにする幾つかの機構が存在する。しかしながら、提案された殆どのキュー構造および管理・同期機構は、1つのライターおよび1つのリーダーだけを有するキューのためのものである。シングルライター・マルチプルリーダーキューのための解決策は多く存在しない。
データの特定の生産者が複数の消費者を有している場合、1つの選択肢は、別個のキュー(各消費者毎に1つのキュー)を構成するとともに、生産者がそのデータをキューへコピーすることである。しかしながら、このコピーは望ましくない。なぜなら、これにより、多くのメモリおよび帯域幅を使用しなければならなくなるからである。他の選択肢は、キューの1つのコピーにこだわり、キュー構造を拡張してキューの様々なリーダーの進行の軌跡を維持することである。米国特許第6,304,924号には、キュー構造のシングルライター・マルチプルリーダーバージョンが開示されている。この場合、キューは、複数の読み取りポインタおよび対応するリーダーと、1つの書き込みポインタおよび対応するライターとを有している。また、読み取りポインタの方向(前方または後方)もリーダー毎に複製される。この構造に伴う問題は、リーダーの数が固定されているという点である。すなわち、シングルライター・マルチプルリーダーキューを例に挙げて説明すると、リーダーの数と読み取りポインタおよび方向のコピーの数とが知られており固定されている。しかしながら、益々複雑なアプリケーションが出現しており、例えばリーダーを動的に付加し或いは除去できる循環キューよりも高い自由度が求められている。これは、既知のキュー構造では不可能である。
したがって、基本的なキュー構造の拡張版を有していても、更なるアプリケーションのために必要な自由度を得ることはできない。固定された数のリーダーに伴う前述した問題を解決するための1つの選択肢は、最大数の考えられるリーダーのためのキュー構造内の管理フィールドを直線配列で記憶し、例えば読み取りポインタを直線配列で記憶し、その後、リーダーの実際の数を示す1つのカウンタを加えることである。この選択肢は、この最大数を幾分控えめに選択しなければならず、そのため、実行時間中におけるリーダーの実際の数がこの最大数を下回る時に絶対に必要とされるよりも多いメモリ空間をキュー構造が占めるという欠点を有している。また、リーダーを動的に加えることはこのように簡単であるが、リーダーを除去することはかなりの労力を要する。この場合、最初に、除去されるリーダーを配列内で線形探索により識別しなければならない。次に、この場所の後の配列内の要素を1つ前に移動させなければならない。最後に、リーダーカウンタが減少されることができる。
したがって、本発明の目的は、特に循環キュー構造に対するリーダーの付加および除去に関して更なる自由度を与えかつ取り扱いが簡単なデータ処理装置を提供することである。また、データ処理装置内の少なくとも2つの処理手段を同期させる対応する自由度の高い簡単な方法も提供される。
本発明によれば、これらの目的は、前述したデータ処理装置であって、
上記生産タスクと第1の消費タスクとの間の主ブランチのための主ブランチ記録と、上記生産タスクと更なる消費タスクとの間の副ブランチのための副ブランチ記録とを含み、ブランチ記録のリンクリストを得るために、上記ブランチ記録が上記メモリ手段の同じ記憶場所へのポインタと次のブランチへの参照とを記憶するブランチ記録手段、
を更に備えるデータ処理装置によって達成される。
また、本発明によれば、これらの目的は、前述した方法であって、
上記生産タスクと第1の消費タスクとの間の主ブランチのための主ブランチ記録と、上記生産タスクと更なる消費タスクとの間の副ブランチのための副ブランチ記録とを含み、ブランチ記録のリンクリストを得るために、上記ブランチ記録が上記メモリ手段の同じ記憶場所へのポインタと次のブランチへの参照とを記憶するブランチ記録手段を規定するステップ、
を更に含む方法によって達成される。
本発明は、ブランチのコレクションとしてシングルライター・マルチプルリーダー循環キューを表わすという考えに基づいている。生産タスクが同じデータを幾つかの消費タスクに対して通信する場合には、各消費タスクのためのプロセスにおいてデータが何回もコピーされない。生産タスクは、最初の消費者と通信するために最初に生成されたキューである主ブランチの構造にアクセスする。また、これは、主消費タスクによってアクセスされる構造でもある。その後、更なる副消費タスクに接続する副ブランチが生成され、この副ブランチはこれらの消費タスクのみによってアクセスされる。このようにすれば、生産タスクは消費者タスクの数に気付かず、また、消費タスクも互いに関する知識を全く持たない。
前述した既知の解決策とは異なり、消費タスクがキューにアクセスする際にそれ自体を特定する必要がある場合、どの読み取りポインタおよび配列方向がこの特定の消費タスクに属するかをキューは知らないため、各消費タスク毎に別個のキュー構造を有していれば、各消費タスクは、あたかもそれがキューの唯一のリーダーであるかのように、キューにアクセスすることができる。このようにすれば、キュー構造およびアクセス機構は、それがシングルリーダーまたはマルチリーダであるかどうかにかかわらず汎用を維持することができる。また、各消費者はキュー構造のそれ自身のコピーが分かるため、任意の共有データを保護するためにロックや特定の保護機構は不要である。
本発明においては、更に多くの消費タスクがキューに加えられるように、キュー構造が複製される。しかしながら、それらの全ての読み取り及び書き込みポインタがメモリ内の同じ記憶域を参照する。そのため、データをコピーする必要がない。
本発明においては、各ブランチが別個のキュー構造を有しているため、キュー構造同士をリンクさせてシングルライター・マルチプルリーダーキュー構造を形成するための機構が必要である。この目的のため、主ブランチ記録および副ブランチ記録を含むブランチ記録手段が規定される。この場合、各ブランチ記録は、次の副ブランチへの参照またはポインタである「次ブランチ」フィールドを有している。したがって、ブランチのリンクリストが得られる。
ここで、1つのブランチを主ブランチに加えることにより、リーダーをキューに加えることができる。リンクリストが末尾に達するまで全検索され、その後、請求項10で提案されているように新たなブランチキュー構造がリンクリストに付加される。このようにすれば、無限の数のリーダーを加えることができる。
本発明の好適な実施形態が従属請求項に記載されている。リーダーまたはブランチをそれぞれシングルライター・マルチプルリーダーキューから動的に除去できるようにするための1つの選択肢は、主ブランチから開始して、ブランチ構造ポインタを検査する度にリストを再び全検索することである。除去されるブランチに出くわすと、先行ブランチの「次ブランチ」フィールドを後継ブランチへの参照によって置換することにより、リストが簡単に更新される。しかしながら、リストを全検索することなくブランチをそれがあたかも通常のキュー(シングルライター・シングルリーダー)であるかのように直接に除去できる場合には、請求項2の好適な実施形態にしたがって提案されたように、リスト内の前のブランチを示す「前ブランチ」フィールドがキュー構造内に必要となる。そのため、ブランチの二重リンクリストが得られる。
特定のブランチを除去する場合には、請求項11の好適な実施形態にしたがって提案されているように、前のブランチを調べて「次ブランチ」フィールドを除去されたブランチの後継ブランチによって置換するとともに、次のブランチを調べてその「前ブランチ」フィールドを除去されたブランチの先行ブランチによって置換することにより、リストを更新することができる。請求項12には、キュー構造から主ブランチを除去するための好適な実施形態が記載されている。
キュー内における生産タスクおよび消費タスクの位置を示すためにライターポインタおよびリーダーポインタまたはライターカウンタおよびリーダーカウンタを使用するデータ処理装置の好適な実施形態が請求項3および請求項4に記載されている。
少なくとも2つの処理手段を同期させる方法であって、生産タスクによるキュー内へのデータ項目の書き込み及び特定の消費タスクによるキューからのデータ項目の読み取りと、消費タスクおよび生産タスクに対して送信できるポインタまたはカウンタに対するこれらの読み取りおよび書き込みの影響、キュー満杯におけるこれらの影響について説明している方法の好適な実施形態が請求項6〜9に記載されている。
図面を参照しながら、本発明について詳細に説明する。
図1は、本発明を適用することが好ましい処理装置の一例としての異種マルチプロセッサアーキテクチャテンプレートを示している。ここには、処理装置として、CPU(中央演算処理装置)1、DSP(デジタル信号プロセッサ)2、ASIP(特定用途向け命令セットプロセッサ)3、ASIC(特定用途向け集積回路)4が示されており、これらは相互接続ネットワーク5によって互いに接続されている。相互接続ネットワーク5と通信するため、DSP2、ASIP3、ASIC4には、アドレスデコーダ6が設けられている。中央共有メモリがオーバーロードしないように、幾つかのローカルメモリ7を付加しても良い。これらのローカルメモリは、アクセス待ち時間を減少させかつ性能を向上させるため、プロセッサに近接して配置されている。命令をバッファリングするため、CPU1およびDSP2には命令キャッシュ8が設けられており、また、CPU1には更にデータをバッファリングするためのデータキャッシュ9が設けられている。また、上記処理装置1,2,3,4間で共有される汎用メモリ10が設けられている。更に、相互接続ネットワーク5には周辺機器11を接続することもできる。以下に説明する本発明に係るキュー構造はメモリ10内に記憶されている。
図2は、本発明にしたがって提案されたブランチの集まり(コレクション)としてのシングルライター・マルチプルリーダー循環キューを示している。この図には、3つの消費タスクC1,C2,C3に対して同じデータを通信する生産タスクPが示されている。プロセスにおいてデータは3回コピーされない。生産者Pは、消費者C1と通信するために最初に生成されたキューである主ブランチB1の構造にアクセスする。また、これはC1によってアクセスされる構造でもある。その後に消費者C2,C3に接続している副ブランチB2,B3が生成され、これらの副ブランチB2,B3はこれらの消費者だけによってアクセスされる。このようにすると、生産者Pは消費者の数に気付かず、また、消費者は互いを認識しない。各消費者毎に別個のキュー構造を有することにより、あたかも消費者がキューの唯一のリーダーであるかのように各消費者がキューにアクセスすることができる。このようにすることで、キュー構造およびアクセス機構は、それがシングルリーダーまたはマルチリーダであるかどうかにかかわらず汎用を維持することができる。
図3は、本発明に係るブランチの二重リンクリストを示している。幾つかのブランチ記録、特に、主ブランチ記録R1および2つの副ブランチ記録R2,R3が示されている。各ブランチ記録は、次の副ブランチへの参照(ポインタ)である「次ブランチ」フィールドnextを有している。また、各ブランチ記録は、リスト内の前のブランチを示す「前ブランチ」フィールドprevを含んでいる。そのため、ブランチの二重リンクリストが得られる。更にまた、各ブランチ記録は、キューがマッピングされる記憶域への参照を示すキューポインタQを含んでいる。
ここで、1つのブランチを主ブランチに対して加えることにより、更なるリーダーをキューに加えることができる。リンクリストは末尾に達するまで全検索され、その後、新たなブランチキュー構造が形成されてリンクリストに追加される。このようにすれば、潜在的に無限の数のリーダーを加えることができる。
特定のブランチを除去すると、前のブランチを調べて、除去されたブランチの後継ブランチによって次ブランチフィールドを置換するとともに、次のブランチを調べて、除去されたブランチの先行ブランチによってその前ブランチフィールドを置換することにより、リストを更新することができる。
なお、前ブランチフィールドが空いているブランチ記録は、リスト内の最初のブランチ記録すなわち主ブランチであり、空の次ブランチフィールドを有するブランチ記録は、リスト内の最後のブランチ記録である。キューからリーダーを動的に除去できる必要がない場合、キュー構造中の前ブランチフィールドを省いてメモリを節約することができる。
本発明の好適な実施形態を説明するため、既存の循環バッファ実施すなわちC−HEAPを例として挙げる。O. P. Gangwal, A. K. Nieuwland, P. E. R. Lippensによる「組み込みHW−SW共有メモリシステムのための拡張可能でフレキシブルなデータ同期方式」(システム・シンセシス(ISSS)の国際シンポジウムの議事録、2001年10月、モントリオール)には、C−HEAPバッファのキュー構造・同期機構について広く記載されている。これに関連して、キューが「チャンネル」と称されるが、整合性を図るため、用語「キュー」は以下のように使用されるべきである。好適な実施形態においては、提案されたキュー構造を使用するためにアプリケーションプログラマーのインタフェース(API)が考慮される。
C−HEAPキュー記録は、現在、以下の情報を含んでいる。
−キュー識別子。
−キュー内のバッファの数。
−キューが操作しているモード(割り込みまたはポール、静的または動的)を示すフラグ。
−生産者タスク記録および消費者タスク記録へのポインタ。
−キューバッファポインタ。
−2つのキュー同期値(pcomおよびccom、生産者側の同期値および消費者側の同期値)。これらの値はキューの満/空を決定するために使用される。
(シングルライター・シングルリーダー)キューでの同期データ通信は、以下の4つの基本要素(プリミティブ)の使用から成る。
−claim space(キュー):書き込みのためキュー内の空のバッファを要求する
−release data(キュー):満杯になったバッファを解放して消費者に信号を送る
−claim data(キュー):読み取りのためのキュー内の満杯のバッファを要求する
−release space(キュー):空のバッファを解放して生産者に信号を送る
シングルライター・マルチプルリーダーキューはキューのコレクションとして規定される。この場合、キューは、それぞれがそれ自体のキュー記録を有するとともに、同じ生産タスクおよび属性(例えばキュー識別子、バッファ容量)を有している。物理バッファメモリ空間はこれらのキュー間で共有される。その結果、データをコピーする必要がなく、メモリ空間および帯域幅要件の両方が減少される。その他に、マルチリーダーサポートを有する1つの汎用キュー記録を規定することが挙げられる。このキュー記録は、その後、生産タスクおよび全ての消費タスクによって参照される。そのようなキュー記録は、その後、異なる消費者を示すccomの複数のインスタンス(例示)およびpcomの1つのコピーを含む。キュー情報の残りは共有され、これにより、複数のキュー記録が複製される最初の選択肢よりもメモリ使用量が低くなる。しかしながら、同じキュー記録にアクセスしている異なる消費者間を区別できなければならない。このことは、特定の消費タスクを識別するために幾つかの余分な情報がclaim dataおよびrelease space関数呼び出し(例えばタスク識別子)を通らなければならないことを意味している。これらの同期基本要素は1つの引数(すなわち、キュー構造への参照)だけを使用するため、これはAPIを変更することを意味している。タスクがシングルライター・シングルリーダーキューとシングルライター・マルチプルリーダーキューとの間の任意の差に気付くことは望ましくないため、この選択肢は好ましくない。また、最初の選択肢において、特定のシングルライター・マルチプルリーダーキューの各消費者は、キューについてのそれ自体の私見を有しており、そのため、それを通常のシングルライター・シングルリーダーキューのように取り扱う。したがって、claim dataおよびrelease spaceの実施に変化がないままであることができる。
以下の用語が使用される(図2も参照)。
マルチリーダーキューの主ブランチは、このキューを介して通信する最初の消費者および生産者を特定することにより通常の方法で生成される。このステップで生成されたキュー記録が生産者にとって明らかな唯一のものである。
シングルライター・マルチプルリーダーキューの副ブランチが主ブランチに加えられ、更なる消費者が生産タスクに接続される。このステップは、生産者および他の消費者にとって透過的であり(生産者および他の消費者が気付かず)、実行時間中に行なうことができる。主ブランチと同じ属性(例えばバッファの数、モードフラグ)を用いて新たなブランチ記録が生成される。
ブランチが一度に生成されない理由は、プログラム可能性を容易にするためである。複数の消費タスクを引数として受け入れかつ多くのキュー記録ポインタを個々のブランチに戻すAPI関数(機能)を規定することができる。しかしながら、ブランチの数が固定されず無限となる場合があるため、そのような関数を使用することは難しい。主ブランチおよび副ブランチの生成については後述する。
様々なブランチ間を区別できるようにするため、また、タスクに関してこれらのブランチを扱うことができるようにするためには、当初のキュー記録を拡張しなければならない。チェーン内の次の(副)ブランチに対する間接化技法(indirection)を用いて、次ブランチフィールドがキュー記録内に加えられる。また、前のブランチを示す前ブランチフィールドが含まれる。これは動的なキュー認識をサポートするために行なわれる。なお、これについては後述する。動的な認識が必要ない場合には、メモリを節約するためにこのフィールドを省いても良い。このようにすれば、マルチリーダーキューの全てのブランチの二重リンクリストが図3に示されるように得られる。
無論、その前ブランチフィールドが空であるキューが主ブランチであり、空の次ブランチフィールドを有するキューがチェーン内の最後のキューである。この更なる情報を使用してリンクリストを全検索することにより、全てのブランチのccomをアクセスすることができ、これらのccomをpcomと比較してキューの満杯(全てのブランチにわたって最大である)を決定することができるとともに、release data中にバッファ空間が満たされた後に全ての消費タスクに送信することができ、バッファ空間を割り当てるためのポインタを全てのブランチにわたってコピーしてバッファを共有することができる(図4参照)。また、各消費者がそれ自体のキュー記録のコピーにアクセスするため、共有された変数をロックまたは任意の特定の保護機構によって保護する必要がない。いずれにしても、この実施により消費者の数を無限にできる。
ここで、同期基本要素について説明する。claim spaceは、全ての消費者側でpcomとccomの値とを比較する。これは、リンクリストをリニアに全検索するとともに全てのブランチ記録から読み取ることによって行なわれる。比較処理のいずれもがキューの満杯を示していないかどうかだけがこのプリミティブリターンであっても良い。チェックの数を減らすため、claim spaceは、満杯のブランチに出くわすと直ぐにブロックする。それがブロックされかつその後にこの満杯のブランチに関して空間が自由にされたことを示す信号を受けると、それがリスト内の次のブランチに続く。先の比較を繰り返す必要はない。これは、前のブランチが一時的に変更されたかもしれないが、生産者がブロックされたことによりこれらのブランチが満杯になることができなかったためである。ポーリングモードにおいては、満杯のブランチのccomが繰り返し読み取られる。マルチプルリーダーの場合とシングルリーダーの場合との間の動作の違いは、行なわれる比較処理の数である。これは、シングルリーダーの場合、リスト内に1つの要素しか存在しないためである。
生産タスクがメモリバッファを満たしかつrelease data中にpcomを更新すると、副ブランチ記録内のpcomのコピーを更新しなければならない。また、たった1つではなく、全ての消費タスクに信号が送られる。ここで、キュー記録内のpcomフィールドを、pcomが実際に記憶される幾つかの他の記憶域への参照(ポインタ)に変更することにより、最適化が可能である。このようにすれば、全てのブランチにとって明らかなpcomのコピーがたった1つとなり、各ブランチ構造中のpcomの全てのコピーを更新する必要がなくなる。
claim dataにおいて、消費タスクは、それ自体のブランチ記録内のccomと pcomとを比較して、キューの満杯を決定する。このブランチに対するこの値の更新はいまだなされていないため、消費タスクが読み取るpcomの値が僅かに古くなるといった状況が生じる場合がある。結果として、この消費者が実際よりも満たされていないバッファしか見ない場合もあるため、claim dataが空のバッファを誤って戻すことはない。この基本要素の作用は、シングルリーダーキューおよびマルチプルリーダーキューの両方において全く同じである。
release space中、各消費者は、それ自体のブランチ内のccomを更新するとともに、この処理の生産者に信号を送る。その結果、生産者に送られる信号の数が増大する。この基本要素の作用もシングルリーダーキューおよびマルチプルリーダーキューにおいて同じである。
前述したように、マルチリーダーキューは主ブランチと1または複数の副ブランチとから成る。queue create関数を使用することにより主ブランチが生成される。すなわち、
queueT*queue create(int id,taskT*P,taskT*C,int nbuf,int flags)
この関数を使用することにより、識別子id、バッファの数nbuf、モードフラグflagsを用いて、生産者Pと最初の消費者Cとの間で1つのキューが生成される。これは、生産者にとって明らかな唯一のブランチである。このキューに副ブランチを加えるため、以下の関数が使用される。
queueT*queue add branch(queueT*ch,taskT*C)
この関数は、前述した関数において生成されたキュー記録(すなわち主ブランチ)を利用するとともに、その内容を副ブランチのために新たに生成されたキュー記録にコピーする(消費タスクフィールドを除く)。その後、関数は、この新たなブランチ記録の場所をリンクブラチリストの最後に加えるとともに、新たに生成されたブランチ記録に参照を戻す。
キューバッファメモリの割り当ては常に主ブランチで行なわれる。バッファ記憶場所が知られると、これらの記憶場所が副ブランチのキュー記録にコピーされる。このステップは、いずれにしてもバッファ記憶場所が主ブランチからコピーされるため、新たなブランチを加える前に行なうことができる。
C−HEAPキューは以下のような方法で認識される。
−破壊
−再ルート付け
−属性(例えばバッファサイズ、モードフラグ)の変更
−ブランチの付加または削除
シングルライター・マルチプルリーダーキューの全てのブランチを一度に破壊することはおそらく望ましくない。したがって、個々のブランチを個別に破壊することが支持される。この目的のために以下の関数が使用される。
void queue destroy(queueT*queue)
この関数は、ブランチ記録の記憶域へのポインタを引数と見なす。なお、これは、シングルライター・シングルリーダーキューを破壊するために使用される関数と全く同じ関数である。この場合も同様に、これは、多数のリーダーに対する我々の手法の透明性(透過性)を明示する。シングルライター・マルチプルリーダーキューの副ブランチを破壊することは簡単である。そのエントリは、消費タスク記録から最初に除去される。ブランチが除去されると、図3に示されるリンクリストが破壊され、したがって、リスト参照を改めなければならない。リスト項目が除去されると、その先行者の次ブランチフィールドをその後継者へのポインタによって置換しなければならない。これは、前ブランチフィールドがキュー記録内に加えられた理由である。なぜなら、破壊されたブランチから、その先行ブランチにアクセスすることができなければならないからである。同様に、その後継者の前ブランチフィールドがその先行者へのポインタによって置換されなければならない。この後、破壊されたブランチの記録がメモリから除去される。
ブランチを除去するには、生産者を最初に食い止める(停止させ、あるいは、一時停止させる)ことも必要である。これは、そうしないと、リンクリストが更新される際に信号送信(シグナリング)機構が乱される場合があるからである。例えば、その先行者から参照される直前に、破壊されたブランチの記録が自由にされても良い。リスト内の次のブランチ(もはや存在しない)として読み取られて判断される値がもはや規定されないため、これが致命的な結果を招く場合がある。主ブランチを破壊することは難しい問題である。なぜなら、主ブランチは、生産者によって分かる唯一のブランチだからである。主ブランチが除去されると、副ブランチのうちの1つを主ブランチに「起用」しなければならない。この操作は、非常に簡単であり、リスト内の副ブランチの前ブランチフィールドがNULLポインタに設定されることを単に意味している。また、この新たに選定された主ブランチへのポインタは生産タスクに通信されなければならない。これは、生産者のタスク記録を更新しかつ再びアクティブにされた後に新たなキュー記録ポインタをタスクにフェッチさせる(呼び出させる)ことにより行なうことができる。また、キューの破壊は、バッファメモリを自由にすることを含んでいる。無論、最後のブランチが破壊されると、これだけが行なわれる。
実行時間でqueue add branch関数を呼び出すことにより、既存のキューに対してブランチを動的に加えることができる。この新たなブランチの記録は主ブランチからコピーされるため、その初期状態(すなわち満杯状態)は主ブランチのそれと同じである。その時、他のブランチは全く異なる満杯状態を有していても良い。新たなブランチが加えられる際に全てのブランチが同じ状態をとることが望ましい場合がある。この場合、消費者はブランチを最初に排出しなければならない。
以下のようにしてシングルライター・マルチプルリーダーキューを再ルート付けすることができる。この操作が副ブランチで行なわれると、消費タスクだけを変えることができる。この場合、変更はこの特定のブランチの記録に関与するだけである。主ブランチに関してはキューの生産者を変更することしかできない。これを行なうためには、ブランチのリンクリストにわたって主ブランチおよび全ての副ブランチの記録を変更しなければならない。
キューの属性の変更は全てのブランチに影響を与え、個々のブランチの属性を変更することはできない。したがって、この操作は常に主ブランチで行なわれる。
本発明は、複数のリーダーが同じキューを共有できるデータ処理装置およびそのようなデータ処理装置内の少なくとも2つの処理手段を同期させる方法を提供する。複数のリーダーによってキュー管理情報に同時にアクセスするためにロックや特定の命令は不要である。書き込み処理中にデータはコピーされない。また、本発明によれば、例えば実行時間にリーダーを付加し或いは除去するために、アプリケーションはシングルライター・マルチプルリーダーキューを動的に再構成することができる。
異種マルチプロセッサアーキテクチャテンプレートを示している。 主ブランチおよび副ブランチの概略図である。 ブランチの二重リンクリストの概略図である。 バッファ共有を示す幾つかのブランチ記録の概略図である。

Claims (12)

  1. 同じ処理手段または他の処理手段による更なる処理のためにデータを供給することができる少なくとも1つの処理手段と、
    第1の処理手段によって行なわれる1つの生産タスクと少なくとも1つの第2の処理手段によって実行される多数の消費タスクとの間に少なくとも2つのブランチを含むキュー構造と、
    前記消費タスクによってアクセスされるデータを記憶するとともに、前記少なくとも2つのブランチ間で共有されるメモリ手段と、
    前記生産タスクと第1の消費タスクとの間の主ブランチのための主ブランチ記録と、前記生産タスクと更なる消費タスクとの間の副ブランチのための副ブランチ記録とを含み、ブランチ記録のリンクリストを得るために、前記ブランチ記録が前記メモリ手段の同じ記憶場所へのポインタと次のブランチへの参照とを記憶するブランチ記録手段と、
    を備えている、データ処理装置。
  2. ブランチ記録の二重リンクリストを得るために、前記副ブランチ記録が前のブランチへの参照を更に記憶する、請求項1に記載のデータ処理装置。
  3. 前記各ブランチ記録は、キュー内における生産タスクの位置を示すライターポインタと、キュー内における消費タスクの位置を示すリーダーポインタとを含んでおり、前記ライターポインタが全てのブランチ記録において同じである、請求項1に記載のデータ処理装置。
  4. 前記各ブランチ記録は、キュー内における生産タスクの位置を示すライターカウンタと、キュー内における消費タスクの位置を示すリーダーカウンタとを含んでおり、前記ライターカウンタが全てのブランチ記録において同じである、請求項1に記載のデータ処理装置。
  5. データ処理装置内の少なくとも2つの処理手段を同期させる方法であって、前記処理手段のうちの少なくとも1つが他の処理手段による更なる処理のためにデータを供給することができる方法において、
    第1の処理手段によって行なわれる1つの生産タスクと少なくとも1つの第2の処理手段によって実行される消費タスクとの間に少なくとも2つのブランチを含むキュー構造を規定するステップと、
    前記消費タスクによってアクセスされるデータを記憶するためのメモリ手段を前記少なくとも2つのブランチ間で共有するステップと、
    前記生産タスクと第1の消費タスクとの間の主ブランチのための主ブランチ記録と、前記生産タスクと更なる消費タスクとの間の副ブランチのための副ブランチ記録とを含み、ブランチ記録のリンクリストを得るために、前記ブランチ記録が前記メモリ手段の同じ記憶場所へのポインタと次のブランチへの参照とを記憶するブランチ記録手段を規定するステップと、
    を含む方法。
  6. 前記主ブランチ記録からライターポインタまたはライターカウンタを読み取るステップと、
    前記リンクリスト内の前記副ブランチ記録からリーダーポインタまたはリーダーカウンタを読み取るステップと、
    前記リーダーポインタまたはリーダーカウンタと前記ライターポインタまたはライターカウンタとを比較して、前記生産タスクによる書き込みのために利用できる個々のブランチ内の使用可能バッファ空間の量を決定するステップと、
    前記生産タスクによってキュー内に新たなデータ項目を書き込んだ後に主キュー記録内の前記ライターポインタまたはライターカウンタをインクリメントするステップと、
    前記副ブランチ記録内で前記ライターポインタまたはライターカウンタの値を更新するステップと、
    キューに帰属する消費タスクに対してキュー満杯の変化を送信し、消費者タスクがブロック状態の場合にそのブロック状態を解除するステップと、
    を更に含む、請求項5に記載の方法。
  7. キュー全体で利用できる空のバッファ空間の実際の量は、全てのブランチにわたる空のバッファ空間の最小量によって示され、任意のブランチが満杯になった時に前記生産タスクがブロックされる、請求項6に記載の方法。
  8. 対応するブランチ記録からライターポインタまたはライターカウンタとリーダーポインタまたはリーダーカウンタとを読み取って、対応する消費タスクにより特定のブランチ内で読み取るために利用できるキュー内の利用可能なデータ項目の数を決定するステップと、
    特定の消費タスクによってキューからデータ項目を読み取った後に対応するブランチ記録内の前記リーダーポインタまたはリーダーカウンタをインクリメントするステップと、
    前記生産タスクに対してキュー満杯の変化を送信することにより、前記生産タスクがブロック状態の場合にそのブロック状態を解除するステップと、
    を更に含む、請求項5に記載の方法。
  9. 前記消費タスクは、その対応するブランチが空の時にブロックされる、請求項8に記載の方法。
  10. 前記主ブランチのブランチ記録を新たな副ブランチのブランチ記録内にコピーするとともに、前記新たな副ブランチへの参照を前の最後のブランチのブランチ記録に対して加えることにより、前記副ブランチが前記キュー構造に対して動的に加えられる、請求項5に記載の方法。
  11. 副ブランチは、その副ブランチ記録を前記キュー記録手段から除去するとともに、その先行ブランチのブランチ記録内に記憶された次のブランチへの参照を更新して除去されたブランチの後継ブランチを参照し、その後継ブランチのブランチ記録内に記憶された前のブランチへの参照を更新して除去されたブランチの先行ブランチを参照することにより、前記キュー構造からが除去される、請求項5に記載の方法。
  12. 前記主ブランチは、その主ブランチ記録を前記キュー記録手段から除去するとともに、最初の副ブランチのブランチ記録内に記憶された主ブランチ記録への参照を削除するとともに、主ブランチの削除および最初の副ブランチが主ブランチになったという事実を生産タスクに対して知らせることにより、前記キュー構造からが除去される、請求項5に記載の方法。
JP2004544529A 2002-10-15 2003-09-12 データ処理装置及びデータ処理装置内の少なくとも2つの処理手段を同期させる方法 Pending JP2006503361A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP02079296 2002-10-15
PCT/IB2003/004041 WO2004036422A2 (en) 2002-10-15 2003-09-12 Data processing apparatus and method of synchronizing at least two processing means in a data processing apparatus

Publications (1)

Publication Number Publication Date
JP2006503361A true JP2006503361A (ja) 2006-01-26

Family

ID=32103945

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004544529A Pending JP2006503361A (ja) 2002-10-15 2003-09-12 データ処理装置及びデータ処理装置内の少なくとも2つの処理手段を同期させる方法

Country Status (6)

Country Link
US (1) US20060031839A1 (ja)
EP (1) EP1573535A2 (ja)
JP (1) JP2006503361A (ja)
CN (1) CN1714340A (ja)
AU (1) AU2003260857A1 (ja)
WO (1) WO2004036422A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7650386B2 (en) 2004-07-29 2010-01-19 Hewlett-Packard Development Company, L.P. Communication among partitioned devices

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7320063B1 (en) 2005-02-04 2008-01-15 Sun Microsystems, Inc. Synchronization primitives for flexible scheduling of functional unit operations
WO2009010982A2 (en) * 2007-07-18 2009-01-22 Feldman, Moshe Software for a real-time infrastructure
US8190624B2 (en) * 2007-11-29 2012-05-29 Microsoft Corporation Data parallel production and consumption
US8543743B2 (en) * 2009-01-27 2013-09-24 Microsoft Corporation Lock free queue
US8760460B1 (en) * 2009-10-15 2014-06-24 Nvidia Corporation Hardware-managed virtual buffers using a shared memory for load distribution
FR2965077B1 (fr) * 2010-09-21 2016-12-09 Continental Automotive France Procede de gestion de taches dans un microprocesseur ou un ensemble de microprocesseurs
US10725997B1 (en) * 2012-06-18 2020-07-28 EMC IP Holding Company LLC Method and systems for concurrent collection and generation of shared data
US9223638B2 (en) * 2012-09-24 2015-12-29 Sap Se Lockless spin buffer
US9311099B2 (en) * 2013-07-31 2016-04-12 Freescale Semiconductor, Inc. Systems and methods for locking branch target buffer entries
US20180203666A1 (en) * 2015-07-21 2018-07-19 Sony Corporation First-in first-out control circuit, storage device, and method of controlling first-in first-out control circuit
CN107197015B (zh) * 2017-05-23 2020-09-08 阿里巴巴集团控股有限公司 一种基于消息队列系统的消息处理方法和装置
CN110223361B (zh) * 2019-05-10 2023-06-20 杭州安恒信息技术股份有限公司 基于web前端技术实现飞线效果的方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07182170A (ja) * 1993-12-24 1995-07-21 Ricoh Co Ltd マイクロプロセッサ
US5559988A (en) * 1993-12-30 1996-09-24 Intel Corporation Method and circuitry for queuing snooping, prioritizing and suspending commands
DE69625652T2 (de) * 1995-08-18 2003-09-18 Ibm Ereignisverwaltungsdienst
US6219352B1 (en) * 1997-11-24 2001-04-17 Cabletron Systems, Inc. Queue management with support for multicasts in an asynchronous transfer mode (ATM) switch
US6201792B1 (en) * 1998-05-14 2001-03-13 3Com Corporation Backpressure responsive multicast queue
US6822958B1 (en) * 2000-09-25 2004-11-23 Integrated Device Technology, Inc. Implementation of multicast in an ATM switch
US6597595B1 (en) * 2001-08-03 2003-07-22 Netlogic Microsystems, Inc. Content addressable memory with error detection signaling
US7043559B2 (en) * 2002-06-27 2006-05-09 Seiko Epson Corporation System for distributing objects to multiple clients

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7650386B2 (en) 2004-07-29 2010-01-19 Hewlett-Packard Development Company, L.P. Communication among partitioned devices

Also Published As

Publication number Publication date
CN1714340A (zh) 2005-12-28
WO2004036422A2 (en) 2004-04-29
EP1573535A2 (en) 2005-09-14
AU2003260857A1 (en) 2004-05-04
US20060031839A1 (en) 2006-02-09
WO2004036422A3 (en) 2005-07-07

Similar Documents

Publication Publication Date Title
EP2240859B1 (en) A multi-reader, multi-writer lock-free ring buffer
US6668291B1 (en) Non-blocking concurrent queues with direct node access by threads
US8990510B2 (en) Read-copy update system and method
Hoare Monitors: An operating system structuring concept
JP4712877B2 (ja) 並列プロセッサのためのタスクマネージャ
US7730491B2 (en) Fair scalable reader-writer mutual exclusion
JP5142995B2 (ja) メモリページ管理
US8453121B2 (en) Managing the tracing of the execution of a computer program
US5887167A (en) Synchronization mechanism for providing multiple readers and writers access to performance information of an extensible computer system
US10268610B1 (en) Determining whether a CPU stalling a current RCU grace period had interrupts enabled
JP2006503361A (ja) データ処理装置及びデータ処理装置内の少なくとも2つの処理手段を同期させる方法
US7793023B2 (en) Exclusion control
JPH07117934B2 (ja) データ処理システムおよび方法
JP4763598B2 (ja) プロセッサおよびデバイス
US20060190689A1 (en) Method of addressing data in a shared memory by means of an offset
CN116257359A (zh) 数据处理方法及装置、存储介质及电子设备
US6704799B1 (en) Time-efficient inter-process communication in a harmonic rate system
US7503048B1 (en) Scheduling synchronization of programs running as streams on multiple processors
JP7078380B2 (ja) 命令制御装置、命令制御方法およびプログラム
US6345312B1 (en) Selectively dummying a data pipe transparent to a writer application
JP2002297416A (ja) プロファイル情報取得装置及びプロファイル情報取得プログラム
JP2014099215A (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム
JPH11134202A (ja) タスク切替え装置
Hoare Computer Science Department
JPS6134628A (ja) タグ付計算機

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060912

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20070510

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20080917

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081202

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090227

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090306

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090602