(57)【要約】      （修正有）【課題】ディスクリプタ・プリフェッチ・バッファにディスクリプタをプリフェッチするＤＭＡ装置を提供する。【解決手段】ディスクリプタ・プリフェッチ・バッファ４５０の大きさが、所与のレイテンシ環境に適切な数のディスクリプタを維持する。ディスクリプタのリンク・リストをサポートするため、順次的なディスクリプタをプリフェッチし、これに反するディスクリプタを廃棄する。ＤＭＡエンジン４１２は、可能な限り１つのトランザクション当たり複数のディスクリプタを要求し、ディスクリプタ・プリフェッチ・バッファを満杯に保つ。バス・エンジン４１４がシステム・メモリ４３０からディスクリプタをフェッチし、プリフェッチ・バッファに書込む。ディスクリプタ・プリフェッチ・バッファにスペースがある時には、バッファがサポートする最大数のディスクリプタをバス・エンジンが要求するアグレッシブ・プリフェッチをＤＭＡエンジンが使用可能である。【選択図】図４
2008171426.tif 000002
【特許請求の範囲】
【請求項１】
ダイレクト・メモリ・アクセス装置においてディスクリプタ・プリフェッチを用いてダイレクト・メモリ・アクセス・ブロック移動を行なうための方法であって、
前記ダイレクト・メモリ・アクセス装置内のディスクリプタ・プリフェッチ・バッファにおけるスペースが利用可能であることに応答して、物理メモリに順次的に格納された複数のダイレクト・メモリ・アクセス・ディスクリプタを前記ディスクリプタ・プリフェッチ・バッファにフェッチするステップと、
前記ディスクリプタ・プリフェッチ・バッファからのディスクリプタに従ってダイレクト・メモリ・アクセス・ブロック移動を行なうために、前記ディスプリクタを処理するステップと、
を含む、方法。
【請求項２】
前記複数のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックするステップと、
前記複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して所与のダイレクト・メモリ・アクセス・ディスクリプタが非順次的であることに応答して、前記所与のダイレクト・メモリ・アクセス・ディスクリプタを無効としてマークするステップと、
を更に含む、請求項１に記載の方法。
【請求項３】
前記所与のダイレクト・メモリ・アクセス・ディスクリプタの後の各ディスクリプタを無効としてマークするステップを更に含む、請求項２に記載の方法。
【請求項４】
プリフェッチ・バッファを有するダイレクト・メモリ・アクセス・エンジンと、
バス・エンジンと、
を含む、ダイレクト・メモリ・アクセス装置であって、
前記ダイレクト・メモリ・アクセス装置内のディスクリプタ・プリフェッチ・バッファにおけるスペースが利用可能であることに応答して、前記バス・エンジンは、物理メモリに順次的に格納された複数のダイレクト・メモリ・アクセス・ディスクリプタを前記ディスクリプタ・プリフェッチ・バッファにフェッチし、
前記ダイレクト・メモリ・アクセス装置は、前記ディスクリプタ・プリフェッチ・バッファからのダイレクト・メモリ・アクセス・ディスプリクタに従ってダイレクト・メモリ・アクセス・ブロック移動を行なうために、前記ダイレクト・メモリ・アクセス・ディスクリプタ処理する、
前記ダイレクト・メモリ・アクセス装置。 
【請求項５】
前記ダイレクト・メモリ・アクセス・エンジンは、前記複数のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックし、前記複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して所与のダイレクト・メモリ・アクセス・ディスクリプタが非順次的であることに応答して、前記所与のダイレクト・メモリ・アクセス・ディスクリプタを無効としてマークする、請求項４に記載のダイレクト・メモリ・アクセス装置。
【請求項６】
前記ダイレクト・メモリ・アクセス・エンジンは、前記所与のダイレクト・メモリ・アクセス・ディスクリプタの後の各ディスクリプタを無効としてマークする、請求項５に記載のダイレクト・メモリ・アクセス装置。
【請求項７】
前記ダイレクト・メモリ・アクセス・エンジンは、前記複数のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックし、前記複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して前記所与のダイレクト・メモリ・アクセス・ディスクリプタが順次的であることに応答して、前記所与のダイレクト・メモリ・アクセス・ディスクリプタを有効としてマークする、請求項４に記載のダイレクト・メモリ・アクセス装置。
【請求項８】
バス・エンジンが、前記ディスクリプタ・プリフェッチ・バッファにおける複数の利用可能なスロットを決定し、前記複数の利用可能なスロットに対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチする、請求項４に記載のダイレクト・メモリ・アクセス装置。
【請求項９】
前記バス・エンジンは、前記ディスクリプタ・プリフェッチ・バッファにおける最大数のスロットに対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチし、フェッチされた複数のダイレクト・メモリ・アクセス・ディスクリプタを前記ディスクリプタ・プリフェッチ・バッファに格納しようとし、前記ディスクリプタ・プリフェッチ・バッファが満杯であることに応答して、前記ディスクリプタ・プリフェッチ・バッファに格納することができなかった残りのダイレクト・メモリ・アクセス・ディスクリプタを前記複数のダイレクト・メモメモリ・アクセス・ディスクリプタから廃棄する、請求項４に記載のダイレクト・メモリ・アクセス装置。
【請求項１０】
バスと、
前記バスに接続された複数のバス・ユニット装置と、
前記バスに接続され、ディスクリプタ・プリフェッチ・バッファを含むダイレクト・メモリ・アクセス装置と、
前記バスへのアクセスを行なう処理ユニットと、
前記処理ユニットに接続されたシステム・メモリと、
を含み、
前記処理ユニットは、ダイレクト・メモリ・アクセス・ディスクリプタを前記システム・メモリに格納し、各ダイレクト・メモリ・アクセス・ディスクリプタが前記複数のバス・ユニット装置内のソース装置およびターゲット装置を表わし、
前記ディスクリプタ・プリフェッチ・バッファにおけるスペースが利用可能であることに応答して、前記ダイレクト・メモリ・アクセス装置は前記システム・メモリから前記ディスクリプタ・プリフェッチ・バッファに複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチし、
前記ダイレクト・メモリ・アクセス装置は、前記ディスクリプタ・プリフェッチ・バッファからのダイレクト・メモリ・アクセス・ディスクリプタに従ってダイレクト・メモリ・アクセス・ブロック移動を行なうために、前記ダイレクト・メモリ・アクセス・ディスクリプタを処理する、データ処理システム。
【請求項１１】
前記ダイレクト・メモリ・アクセス装置は、前記複数のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックし、前記複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して所与のダイレクト・メモリ・アクセス・ディスクリプタが非順次的であることに応答して、前記所与のダイレクト・メモリ・アクセス・ディスクリプタを無効としてマークする、請求項１０に記載のデータ処理システム。
【請求項１２】
前記ダイレクト・メモリ・アクセス装置は、ディスクリプタ・プリフェッチ・バッファにおける複数の利用可能なスロットを決定し、前記複数の利用可能なスロットに対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチする、請求項１０に記載のデータ処理システム。
【請求項１３】
前記ダイレクト・メモリ・アクセス装置は前記ディスクリプタ・プリフェッチ・バッファにおける最大数のスロットに対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチし、前記フェッチされたダイレクト・メモリ・アクセス・ディスクリプタを前記ディスクリプタ・プリフェッチ・バッファに格納しようとし、前記ディスクリプタ・プリフェッチ・バッファが満杯であることに応答して、前記ディスクリプタ・プリフェッチ・バッファに格納することができなかった残りのダイレクト・メモリ・アクセス・ディスクリプタを前記複数のダイレクト・メモリ・アクセス・ディスクリプタから廃棄する、請求項１０に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にはデータ処理システムおよび方法の改良に関し、詳しく云えば、高レイテンシ装置ための支援を備えたダイレクト・メモリ・アクセス・コントローラに関するものである。
【背景技術】
【０００２】
多くのシステム・オン・チップ（ＳＯＣ）設計は、ダイレクト・メモリ・アクセス（ＤＭＡ）コントローラと呼ばれる装置を内蔵する。ＤＭＡの目的は、メモリ内の１つのロケーションから別のロケーションにデータ・ブロックを効率的に移動させることである。ＤＭＡコントローラは、通常、システム・メモリと入出力（Ｉ／Ｏ）装置との間でデータを移動させるために使用されるが、システム・メモリ内の１つの領域と別の領域との間でデータを移動させるためにも使用される。プロセッサはデータの移動に関与しないので、ＤＭＡコントローラは「ダイレクト」メモリ・アクセス・コントローラと呼ばれる。
【０００３】
ＤＭＡコントローラがない場合、データ・ブロックは、ソフトウェア制御の下に１つのメモリ・スペースから別のスペースへデータを１つずつプロセッサにコピーさせることによって、移動することが可能である。通常、これは、大きいデータ・ブロックにとって望ましいことではない。プロセッサが大きいデータ・ブロックを１つずつコピーするとき、プロセッサは大きいメモリ・バッファを持たないので、それは低速であり、一度に３２ビットのような小さい非効率的なサイズでデータを移動させなければならない。更に、プロセッサは、そのコピーを行なっている間、自由に他の仕事をすることができない。従って、その移動が完了するまで、プロセッサは拘束される。これらのデータ・ブロック移動を、遥かに速く且つ他の仕事と平行して行なうことができるＤＭＡコントローラにこれらのデータ・ブロック移動を負荷委譲する方がずっと効率的である。
【０００４】
ＤＭＡコントローラは、通常、複数の「チャネル」を有する。本明細書において使用されるように、「チャネル」は、ＤＭＡコントローラが移動させるべきデータの独立的なストリームである。従って、ＤＭＡコントローラは、異なるチャネルを介して幾つものブロック移動を同時に行なうようにプログラムされ得るし、ＤＭＡ装置が幾つものＩ／Ｏ装置に、或いはＩ／Ｏ装置から、データを同時に転送することを可能にする。
【０００５】
ＤＭＡコントローラの代表的なもう１つの特徴は、分散／収集オペレーションである。分散／収集オペレーションは、各データ・ブロックを或るソースから或る宛先に移動させるようにプロセッサによってプログラムされる必要のないオペレーションである。むしろ、プロセッサはシステム・メモリ内にディスクリプタ・テーブルまたはディスクリプタ・リンク・リストを設定する。ディスクリプタ・テーブルまたはリンク・リストは一組のディスクリプタである。各ディスクリプタは、データ・ブロックの移動について記述し、転送するべきバイトのソース・アドレス、宛先アドレス、および数を含む。ＤＭＡレジスタを介して直接プログラムされる非分散／収集ブロック移動は、「単一プログラミング」ＤＭＡブロック移動と呼ばれる。 
【０００６】
ＤＭＡコントローラのリンク・リスト・アーキテクチャはテーブル・アーキテクチャよりも融通性があり且つ動的である。リンク・リスト・アーキテクチャでは、プロセッサは、ＤＭＡチャネルのうちの１つをチェーンにおける第１ディスクリプタと呼び、そのリンク・リストにおける各ディスクリプタはメモリにおける次のディスクリプタに対するポインタを有する。ディスクリプタはシステム・メモリ内のどこにあってもよく、転送が生じるとき、プロセッサはリスト上に動的に加わることも可能である。ＤＭＡコントローラはテーブルまたはリストを自動的に調べ、そのテーブルまたはリスト終端に達するまで、各ディスクリプタによって記述されたデータ・ブロック移動を実行する。
【０００７】
ＤＭＡ装置は、適切な数のバッファを有するように、且つ、データへの高レイテンシ・パスがデータ転送において重大な機能停止を生じないよう適切な数の同時に存在する未解決トランザクションを処理するように、体系化されてもよい。典型的なＤＭＡプログラミング・モデルは、上述のように、分散／収集ディスクリプタのリストとしてデータ転送を連鎖するためのものである。これらのディスクリプタはメモリからフェッチされなければならない。この環境において、ディスクリプタ・メモリに対するレイテンシがデータに対するレイテンシと同じくらい高い場合、問題に遭遇することがある。後述するように、高レイテンシ・データ・ブロックのフェッチによって、低レイテンシ・ディスクリプタのフェッチを伴う問題が存在することさえある。
【０００８】
典型的なＤＭＡアーキテクチャは、ディスクリプタ内のフェッチされた情報を、「単一プログラミング」ＤＭＡブロック・データ移動によってロードされる同じ構成レジスタに、直接給送する。ＤＭＡ装置が現在のディスクリプタに対する最終トランザクションの書込みを始めるとすぐに、次のディスクリプタのリクエストが始まる。その時点では、データ・ブロック移動を実行した構成レジスタがロードのために再び利用可能であるので、この最終的な書込みが始まるまで、ＤＭＡ装置は待機しなければならない。このオーバラップは、ＤＭＡ装置が低レイテンシ環境におけるディスクリプタ間の推移としてデータ・バスの機能停止を減らすことはできるが、それを回避することはできない。しかし、この方式は高レイテンシ環境では１つの障害となることがある。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、従来技術の欠点を認識し、ディスクリプタ・プリフェッチ・バッファにディスクリプタをプリフェッチするＤＭＡ装置を提供することにある。
【課題を解決するための手段】
【００１０】
ディスクリプタ・プリフェッチ・バッファの大きさが、所与のレイテンシ環境にとって適切な数のディスクリプタを維持する。ディスクリプタのリンク・リストをサポートするために、ディスクリプタがメモリでは順次的であるという仮定に基づいてＤＭＡエンジンがディスクリプタをプリフェッチし、この仮定に反するということがわかったいずれのディスクリプタも廃棄する。ＤＭＡエンジンは、可能な限りいつも１つのトランザクション当たり複数のディスクリプタを要求することによって、ディスクリプタ・プリフェッチ・バッファを満杯に保つように務める。バス・エンジンがシステム・メモリからこれらのディスクリプタをフェッチし、プリフェッチ・バッファにそれらを書込む。ディスクリプタ・プリフェッチ・バッファに少しでもスペースがあるときには常に、そのバッファがサポートする最大数のディスクリプタをバス・エンジンが要求するというアグレッシブ・プリフェッチをＤＭＡエンジンが使用することが可能である。ＤＭＡ装置は、格納することができないいずれの残りのディスクリプタも廃棄する。
【００１１】
１つの実施例では、ダイレクト・メモリ・アクセス装置においてディスクリプタ・プリフェッチを用いてダイレクト・メモリ・アクセス・ブロック移動を行なうための方法が提供される。その方法は、ダイレクト・メモリ・アクセス装置内のディスクリプタ・プリフェッチ・バッファにおけるスペースが利用可能であることに応答して、物理メモリに順次的に格納された複数のダイレクト・メモリ・アクセス・ディスクリプタをディスクリプタ・プリフェッチ・バッファにフェッチするステップを含む。その方法は、更に、ディスクリプタ・プリフェッチ・バッファからのディスクリプタに従ってダイレクト・メモリ・アクセス・ブロック移動を行なうために、そのディスクリプタを処理するステップを含む。
【００１２】
１つの実施例では、その方法は、更に、複数のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックするステップと、複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して所与のダイレクト・メモリ・アクセス・ディスクリプタが非順次的であることに応答して、その所与のダイレクト・メモリ・アクセス・ディスクリプタを無効としてマークするステップとを含む。更なる実施例では、その方法は、更に、所与のダイレクト・メモリ・アクセス・ディスクリプタの後の各ディスクリプタを無効としてマークするステップを含む。
【００１３】
別の実施例では、その方法は、複数のダイレクト・メモリ・アクセス・ディスクリプタ内のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックするステップと、複数のダイレクト・メモリ・アクセスディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して所与のダイレクト・メモリ・アクセス・ディスクリプタが順次的であることに応答して、所与のダイレクト・メモリ・アクセス・ディスクリプタを有効としてマークするステップとを含む。
【００１４】
更なる実施例では、複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチする前記ステップは、ディスクリプタ・プリフェッチ・バッファにおける複数の利用可能なスロットを決定するステップと、複数の利用可能なスロットに対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチするステップとを含む。
【００１５】
更に別の実施例では、複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチする前記ステップは、ディスクリプタ・プリフェッチ・バッファにおける最大数のスロットに対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチするステップと、フェッチされた複数のダイレクト・メモリ・アクセス・ディスクリプタをディスクリプタ・プリフェッチ・バッファに格納しようとするステップと、ディスクリプタ・プリフェッチ・バッファが満杯であることに応答して、ディスクリプタ・プリフェッチ・バッファに格納することができなかった残りのダイレクト・メモリ・アクセス・ディスクリプタを複数のダイレクト・メモリ・アクセス・ディスクリプタから廃棄するステップとを含む。更に別の実施例では、その方法は、更に、ディスクリプタ・プリフェッチ・バッファにおけるスペースが利用可能であることに応答して、複数のダイレクト・メモリ・アクセス・ディスクリプタ内の所与のダイレクト・メモリ・アクセス・ディスクリプタをディスクリプタ・プリフェッチ・バッファに格納するステップを含む。
【００１６】
更に別の実施例では、その方法は、更に、所与のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックするステップと、所与のダイレクト・メモリ・アクセス・ディスクリプタが複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して非順次的であることに応答して、所与のダイレクト・メモリ・アクセス・ディスクリプタを無効としてマークするステップとを含む。更なる実施例では、その方法は、更に、無効としてマークされた所与のダイレクト・メモリ・アクセス・ディスクリプタの後の各ディスクリプタを廃棄するステップを含む。別の実施例では、その方法は、所与のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックするステップと、所与のダイレクト・メモリ・アクセス・ディスクリプタが複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して順次的であることに応答して、所与のダイレクト・メモリ・アクセス・ディスクリプタを有効としてマークするステップとを含む。
【００１７】
別の実施例では、ダイレクト・メモリ・アクセス装置が、プリフェッチ・バッファを有するダイレクト・メモリ・アクセス・エンジンとバス・エンジンとを含む。ダイレクト・メモリ・アクセス装置内のディスクリプタ・プリフェッチ・バッファにおけるスペースが利用可能であることに応答して、バス・エンジンは、物理メモリに順次的に格納された複数のダイレクト・メモリ・アクセス・ディスクリプタをディスクリプタ・プリフェッチ・バッファにフェッチする。ダイレクト・メモリ・アクセス装置は、ディスクリプタ・プリフェッチ・バッファからのダイレクト・メモリ・アクセス・ディスクリプタに従ってダイレクト・メモリ・アクセス・ブロック移動を行なうために、そのダイレクト・メモリ・アクセス・ディスクリプタを処理する。
【００１８】
別の実施例では、ダイレクト・メモリ・アクセス・エンジンは、複数のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックする。複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して所与のダイレクト・メモリ・アクセス・ディスクリプタが非順次的であることに応答して、ダイレクト・メモリ・アクセス・エンジンが所与のダイレクト・メモリ・アクセス・ディスクリプタを無効としてマークする。
【００１９】
別の実施例では、ダイレクト・メモリ・アクセス・エンジンは、所与のダイレクト・メモリ・アクセス・ディスクリプタの後の各ディスクリプタを無効としてマークする。更に別の実施例では、ダイレクト・メモリ・アクセス・エンジンは、複数のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックし、複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して所与のダイレクト・メモリ・アクセス・ディスクリプタが順次的であることに応答して、所与のダイレクト・メモリ・アクセス・ディスクリプタを有効としてマークする。
【００２０】
更に別の実施例では、バス・エンジンは、ディスクリプタ・プリフェッチ・バッファにおける複数の利用可能なスロットを決定し、複数の利用可能なスロットに対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチする。更に別の実施例では、バス・エンジンは、ディスクリプタ・プリフェッチ・バッファにおける最大数のスロットに対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチし、フェッチされた複数のダイレクト・メモリ・アクセス・ディスクリプタをディスクリプタ・プリフェッチ・バッファに格納しようとし、ディスクリプタ・プリフェッチ・バッファが満杯であることに応答して、ディスクリプタ・プリフェッチ・バッファに格納することができなかった残りのダイレクト・メモリ・アクセス・ディスクリプタを複数のダイレクト・メモリ・アクセス・ディスクリプタから廃棄する。
【００２１】
更に別の実施例では、データ処理システムは、バスと、バスに接続された複数のバス・ユニット装置と、バスに接続されたダイレクト・メモリ・アクセス装置（ディスクリプタ・プリフェッチ・バッファを含む）と、処理ユニットと、処理ユニットに接続されたシステム・メモリとを含む。処理ユニットはバスへのアクセスを行なう。処理ユニットは、ダイレクト・メモリ・アクセス・ディスクリプタをシステム・メモリに格納する。各ダイレクト・メモリ・アクセス・ディスクリプタは、複数のバス・ユニット装置内のソース装置およびターゲット装置を表わす。ディスクリプタ・プリフェッチ・バッファにおけるスペースが利用可能であることに応答して、ダイレクト・メモリ・アクセス装置は、システム・メモリからディスクリプタ・プリフェッチ・バッファに複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチする。ダイレクト・メモリ・アクセス装置は、ディスクリプタ・プリフェッチ・バッファからのダイレクト・メモリ・アクセス・ディスクリプタに従ってダイレクト・メモリ・アクセス・ブロック移動を行なうために、そのダイレクト・メモリ・アクセス・ディスクリプタを処理する。
【００２２】
１つの実施例では、ダイレクト・メモリ・アクセス装置は、複数のダイレクト・メモリ・アクセス・ディスクリプタの有効性をチェックする。複数のダイレクト・メモリ・アクセス・ディスクリプタ内の前のダイレクト・メモリ・アクセス・ディスクリプタに関して所与のダイレクト・メモリ・アクセス・ディスクリプタが非順次的であることに応答して、ダイレクト・メモリ・アクセス装置は所与のダイレクト・メモリ・アクセス・ディスクリプタを無効としてマークする。
【００２３】
別の実施例では、ダイレクト・メモリ・アクセス装置は、ディスクリプタ・プリフェッチ・バッファにおける複数の利用可能なスロットを決定し、その複数の利用可能なスロット対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチする。
【００２４】
更なる実施例では、ダイレクト・メモリ・アクセス装置は、ディスクリプタ・プリフェッチ・バッファにおける最大数のスロットに対応する複数のダイレクト・メモリ・アクセス・ディスクリプタをフェッチし、フェッチされた複数のダイレクト・メモリ・アクセス・ディスクリプタをディスクリプタ・プリフェッチ・バッファに格納しようとし、ディスクリプタ・プリフェッチ・バッファが満杯であることに応答して、ディスクリプタ・プリフェッチ・バッファに格納することができなかった残りのダイレクト・メモリ・アクセス・ディスクリプタを複数のダイレクト・メモリ・アクセス・ディスクリプタから廃棄する。
【００２５】
本発明の実施例についての下記の詳細な説明から、本発明に関するこれらのおよび他の特徴および利点が開示され、或いは当業者にとって明らかになるであろう。
【発明を実施するための最良の形態】
【００２６】
図面、特に、図１および図２を参照すると、本発明の実施例を具現化し得るデータ処理環境の例が示される。図１および図２は単なる例であり、本発明の諸局面または実施例を具現化し得る環境に関して何らかの制限を主張或いは意味することを意図するものではないことは明らかであろう。本発明の真意および範囲から逸脱することなく、図示の環境に対して多くの修正を施すことが可能である。
【００２７】
図１は、実施例の諸態様を具現化し得るデータ処理システムの例示的なブロック図である。図１に示された例示的なデータ処理システムは、セル・ブロードバンド・エンジン（Cell Broadband Engine - ＣＢＥ）データ処理システムの一例である。本発明の好適な実施例の説明ではＣＢＥが使用されるが、当業者には明らかなように、以下の説明を読む場合、本発明はそのようなものに限定されるべきではない。
【００２８】
図１に示されるように、ＣＢＥ１００は、プロセッサ（ＰＰＵ）１１６およびそのＬ１キャッシュ１１２、Ｌ２キャッシュ１１４を有するパワー・プロセッサ・エレメント（ＰＰＥ）１１０、並びに、複数の相乗作用プロセッサ・エレメント（synergistic processor element - ＳＰＥ）１２０〜１３４を含む。各ＳＰＥは、それ自身の相乗作用プロセッサ・ユニット（ＳＰＵ）１４０〜１５４、メモリ・フロー制御ユニット（ＭＦＣ）１５５〜１６２、ローカル・メモリまたは記憶装置（ＬＳ）１６３〜１７０、および、バス・インタフェース・ユニット（ＢＩＵ）１８０〜１９４を有する。各ＢＩＵは、例えば、ダイレクト・メモリ・アクセス（ＤＭＡ）、メモリ管理ユニット（ＭＭＵ）、およびバス・インタフェース・ユニットの結合体であってもよい。高帯域幅の内部エレメント相互接続バス（ＥＩＢ）１９６、バス・インターフェース・コントローラ（ＢＩＣ）１９７、およびメモリ・インタフェース・コントローラ（ＭＩＣ）１９８も設けられる。
【００２９】
ローカル・メモリまたはローカル記憶装置（ＬＳ）１６３-１７０は、大型メモリ・マップの非コヒーレントなアドレス可能部分であり、物理的にはＳＰＵ１４０〜１５４に接続された小型のメモリとして提供されてもよい。ローカル記憶装置１６３〜１７０は種々のアドレス空間にマップされ得る。これらのアドレス領域は非別名（non-aliased）構成で連続している。ローカル記憶装置１６３〜１７０は、更に詳しく後述されるように、ＳＰＵ識別レジスタを介するというような、そのアドレス・ロケーションによってその対応するＳＰＵ１４０〜１５４およびＳＰＥ１２０〜１３４に関連付けられる。ローカル記憶装置が安全なオペレーション・モードに置かれない限り、システムにおけるいずれの資源もローカル記憶装置１６３〜１７０からの読取りおよびそれらへの書込みを行なう機能を有する。なお、安全なオペレーション・モードでは、その関連するＳＰＵだけがローカル記憶装置１６３〜１７０を、またはローカル記憶装置１６３〜１７０の指定された安全な部分を、アクセスすることが可能である。
【００３０】
ＣＢＥ１００は、図１に示された各エレメントが単一のマイクロプロセッサ・チップ上に設けられるようなシステム・オン・チップであってもよい。更に、ＣＢＥ１００は、システムにおける他のＳＰＵの各々から相異なる命令を受けることができる異機種混合の処理環境である。更に、ＳＰＵのための命令セットは、ＰＰＵのそれとは異なる。例えば、ＰＰＵはＲＩＳＣベースの命令を実行し得るが、ＳＰＵはベクトル化された命令を実行する。
【００３１】
ＳＰＥ１２０-１３４は、ＥＩＢ１９６を介して相互に且つＬ２キャッシュ１１４に接続される。更に、ＳＰＥ１２０〜１３４は、ＥＩＢ１９６を介してＭＩＣ１９８およびＢＩＣ１９７に接続される。ＭＩＣ１９８は、共用メモリ１９９に対する通信インターフェースを提供する。ＢＩＣ１９７は、ＣＢＥ１００と他の外部バスおよび装置との間の通信インターフェースを提供する。
【００３２】
ＰＰＥ１１０はデュアル・スレッドＰＰＥである。このデュアル・スレッドＰＰＥ１１０と８個のＳＰＥ１２０〜１３４との組合せは、ＣＢＥ１００が１０個の同時スレッドおよび１２８個以上の未解決のメモリ要求を処理できるようにする。ＰＰＥ１１０は、ほとんどの計算作業を処理する他の８個のＳＰＥ１２０〜１３４に対するコントローラとして作用する。ＰＰＥ１１０は、通常のオペレーティング・システムを実行するために使用され得るし、一方、ＳＰＥ１２０〜１３４は、例えば、ベクトル化された浮動小数点コード実行を行なう。
【００３３】
ＳＰＥ１２０〜１３４は、相乗作用処理装置（ＳＰＵ）１４０〜１５４、メモリ・フロー制御ユニット１５５〜１６２、ローカル・メモリまたはローカル記憶装置１６３〜１７０、およびインタフェース・ユニット１８０〜１９４を含む。ローカル・メモリまたはローカル記憶装置１６３〜１７０は、１つの実施例では、ＰＰＥ１１０にとって可視的である２５６ＫＢの命令およびデータ・メモリを含み、ソフトウェアによって直接にアドレスされ得る。 
【００３４】
ＰＰＥ１１０は、小さいプログラムまたはスレッドをＳＰＥ１２０-１３４にロードすることが可能である。なお、小さいプログラムまたはスレッドは、それらのＳＰＥと連鎖して複雑なオペレーションにおける各ステップを処理するためのものである。例えば、ＣＢＥ１００を組込んだセットトップ・ボックスは、DVD、ビデオ、およびオーディオ・デコーディングのためのプログラムをロードし、表示し、そしてデータは、それが最終的に出力ディスプレイにおいて終わるまで、ＳＰＥ１２０〜１３４間で継続するであろう。４GHz 時に、各ＳＰＥ１２０-１３４は、３２ＧＦＬＯＰＳの理論的パフォーマンスを、ＰＰＥ１１０がそれと同様のレベルのパフォーマンスを有することにより、与える。
【００３５】
メモリ・フロー制御ユニット（ＭＦＣ）１５５〜１６２は、システムの残りのおよび他のエレメントに対する、ＳＰＵのためのインターフェースとして働く。ＭＦＣ１５５〜１６２は、主記憶装置とローカル記憶装置１６３〜１７０の間のデータ転送、保護および同期化のための主要な機構を提供する。論理的には、プロセッサにおける各ＳＰＵに対して１つのＭＦＣが存在する。いくつかの具現化態様は、複数のＳＰＵの間で単一のＭＦＣの資源を共有することが可能である。そのような場合、ＭＦＣのために定義されたすべての機能およびコマンドが各ＳＰＵにとってソフトウェアに依存しないように見えなければならない。ＭＦＣを共用するという効果は、実施態様に依存した機能およびコマンドに限定される。 
【００３６】
次に図２を参照すると、本発明の諸局面を具現化し得る例示的なデータ処理システムのブロック図が示される。図示の例では、データ処理システム２００が、サウス・ブリッジ兼入出力（Ｉ／Ｏ）コントローラ・ハブ（ＳＢ／ＩＣＨ）２０４を含むハブ・アーキテクチャを使用する。処理ユニット２０２が、メモリ・インタフェース・コントローラ（ＭＩＣ）２１０を介してシステム・メモリ２０８に接続される。処理ユニット２０２は、バス・インターフェース・コントローラ（ＢＩＣ）２０６を介してＳＢ／ＩＣＨ２０４に接続される。
【００３７】
図示の例では、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ２１２がＳＢ／ＩＣＨ ２０４に接続している。オーディオ・アダプタ２１６、キーボードおよびマウス・アダプタ２２０、モデム２２２、読取り専用メモリ（ＲＯＭ）２２４、ハードディスク・ドライブ（ＨＤＤ）２２６、ＣＤ−ＲＯＭドライブ２３０、ユニバーサル・シリアル・バス（ＵＳＢ）ポートおよび他の通信ポート２３２、並びに、ＰＣＩ／ＰＣＩｅ装置２３４がバス２３８およびバス２４０を介してＳＢ／ＩＣＨ２０４に接続している。ＰＣＩ／ＰＣＩｅ装置は、例えば、Ethernet（商標）アダプタ、アドイン・カードおよびノート型コンピュータのためのＰＣカードを含んでもよい。ＰＣＩはカード・バス・コントローラを使用するが、ＰＣＩｅはそれを使用しない。ＲＯＭ２２４は、例えば、フラッシュ・バイナリ・入力／出力システム（ＢＩＯＳ）であってもよい。
【００３８】
ＨＤＤ２２６およびＣＤ−ＲＯＭドライブ２３０はバス２４０を介してＳＢ／ＩＣＨ２０４に接続している。ＨＤＤ２２６およびＣＤ−ＲＯＭドライブ２３０は、例えば、統合ドライブ・エレクトロニクス（ＩＤＥ）またはシリアル先進技術アタッチメント（ＳＡＴＡ）インターフェースを使用してもよい。スーパＩ／Ｏ（ＳＩＯ）装置２３６がＳＢ／ＩＣＨ２０４に接続されてもよい。
【００３９】
オペレーティング・システムが処理ユニット２０２上で作動する。オペレーティング・システムは、図２におけるデータ処理システム２００内の様々なコンポーネントの制御を調整および提供する。クライアントとしてのオペレーティング・システムは市販のオペレーティング・システムであってもよい。Java（商標）プログラミング・システムのようなオブジェクト指向プログラミング・システムは、そのオペレーティング・システムと関連して作動し得るし、データ処理システム２００において実行されるJavaプログラムまたはアプリケーションからそのオペレーティング・システムにコールを行なうことも可能である（Java は、米国のサン・マイクロシステムズ社の商標である）。 
【００４０】
サーバーとしてのデータ処理システム２００は、例えば、拡張対話式イグゼクティブ（ＡＩＸ）オペレーティング・システムまたはＬＩＮＵＸオペレーティング・システムを実行するIBM eServer pSeries コンピュータ・システムであってもよい（eServer、pSeries およびＡＩＸは、米国ＩＢＭ社の商標であり、ＬＩＮＵＸは、米国LinusTorvalds の商標である）。データ処理システム２００は、処理ユニット２０２内に複数のプロセッサを含み得る。それとは別に、シングル・プロセッサ・システムが使用されてもよい。
【００４１】
オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムのための命令は、ＨＤＤ２２６のような記憶装置内に置かれ、処理ユニット２０２による実行のためにメイン・メモリ２０８にロードされ得る。本発明の実施例のプロセスは、処理ユニット２０２がコンピュータ使用可能プログラム・コードを使用することによって遂行される。そのコンピュータ使用可能プログラム・コードは、例えば、メイン・メモリ（システム・メモリ）２０８、ＲＯＭ２２４のようなメモリ内に、或いは、例えば、１つまたは複数の周辺装置２２６および２３０内に置かれることも可能である。 
【００４２】
図２に示されたバス２３８またはバス２４０のようなバス・システムは１つまたは複数のバスで構成されてもよい。もちろん、バス・システムは、任意のタイプの通信ファブリックまたはアーキテクチャを使用して具現化することも可能であり、そのファブリックまたはアーキテクチャ接続された種々のコンポーネントまたは装置の間でデータの転送を行なう。図２のモデム２２２またはネットワーク・アダプタ２１２のような通信ユニットは、データを送信および受信するために使用される１つまたは複数の装置を含み得る。メモリは、例えば、図２におけるメイン・メモリ２０８、ＲＯＭ２２４、または、ＮＢ／ＭＣＨ２０２において見られるようなキャッシュ、であってもよい。
【００４３】
図１および図２におけるハードウェアが実施態様次第で変わり得ることは当業者には明らかであろう。図１および図２に示されたハードウェアに加えて、或いはそのハードウェアの代わりに他の内部ハードウェア、或いはフラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブ等のような周辺装置が使用されてもよい。更に、本発明の真意および範囲から逸脱することなく、実施例のプロセスが、前述のＳＭＰシステム以外のマルチプロセッサ・データ処理システムにも適用されてもよい。
【００４４】
更に、データ処理システム２００は、クライアント・コンピューティング装置、サーバ・コンピューティング装置、タブレット・コンピュータ、ラップトップ・コンピュータ、電話または他の通信装置、パーソナル・デジタル・アシスタント（ＰＤＡ）、ビデオゲーム・コンソール等を含む多くの任意の種々のデータ処理システムの形体をとることが可能である。いくつかの例では、データ処理システム２００は、オペレーティング・システム・ファイルおよび／またはユーザ生成のデータを格納するための不揮発性メモリを提供するためにフラッシュ・メモリで構成されたポータブル・コンピューティング装置であってもよい。本質的には、データ処理システム２００は、アーキテクチャ上の制限のない任意の既知の、または今後開発されるデータ処理システムであってもよい。
【００４５】
サウス・ブリッジ２０４はダイレクト・メモリ・アクセス（ＤＭＡ）コントローラを含んでもよい。ＤＭＡコントローラは、通常、システム・メモリと入出力（Ｉ／Ｏ）装置との間でデータを移動させるために使用されるが、システム・メモリ内の１つの領域と別の領域との間でデータを移動させるためにも使用される。高いバス利用度が望まれる場合、高レイテンシ装置が独得のチャレンジ（誰何データ）を提示する。高レイテンシ装置と通信する場合、高レイテンシ装置からデータを受け取るために必要な時間が、それよりも前にキューに入れられたすべての他の未決のトランザクションからデータを転送するために必要な時間よりも少ないかまたはそれに等しくなるように、全く同時の未決のトランザクションが存在しなければならない。この基準に適合する場合、ＤＭＡがデータを待ち且つ転送のために使用し得るいずれの他のデータも持たないというギャップまたは機能停止状態はそのバス上には滅多に存在しないであろう。
【００４６】
更なる統合に向かう傾向によって、特に、システム・オン・チップによって、図２における多くの装置がサウス・ブリッジ２０４内に統合されてもよい。例えば、単一のバスをサウス・ブリッジ２０４内に統合することも可能である。更に、ＵＳＢコントローラ、ＰＣＩ、およびＰＣＩｅコントローラ、メモリ・コントローラ等のようなコントローラおよびインターフェースをサウス・ブリッジ２０４内に統合し、内部バスに接続することも可能である。更に、サウス・ブリッジ２０４は、ローカル・メモリのためのメモリ・モジュールが接続されるメモリ・コントローラを含んでもよい。更に、処理ユニット２０２は、ＤＭＡ装置がシステム・メモリ２０８をアクセスすることを可能にする、図１におけるＥＩＢ１９６（図１）のような内部バスを含んでもよい、ということにも留意されたい。
【００４７】
図３は、実施例に従ってサウス・ブリッジを示すブロック図である。例えば、処理ユニット３０２がサウス・ブリッジ３００におけるバス３２０にＤＭＡコマンドを発生する。そこで、サウス・ブリッジ３００内のＤＭＡ装置３１０が、バス・ユニット装置３２２のようなソース装置からの読取りオペレーション、およびバス・ユニット装置３２４のようなターゲット装置への書込みオペレーションを行なうことによってＤＭＡコマンドを実行することが可能である。それとは別の例では、ＤＭＡコマンドが、バス・ユニット装置３２２からシステム・メモリ３０４にデータ・ブロックを移動させることを要求し得るし、或いは、更に別の例によれば、ＤＭＡコマンドが、システム・メモリ３０４からバス・ユニット装置３２４にデータ・ブロックを移動させることを要求し得る。バス・ユニット装置３２２およびバス・ユニット装置３２４は、例えば、メモリ・コントローラ、ＵＳＢコントローラ、ＰＣＩコントローラ、記憶装置コントローラ等、或いはそれの組合せであってもよい。
【００４８】
ソース装置およびターゲット装置は、メモリのような低レイテンシ装置およびハードディスク・ドライブのような高レイテンシ装置を含み得る。しかし、メモリ装置のような一般に低レイテンシである装置は、場合によっては、バスおよびブリッジ・ハイアラーキにおけるそれらの位置次第で、高レイテンシにもなり得る。サウス・ブリッジ３００のコンポーネントの多くは、図の簡潔化のために、図示されていない。サウス・ブリッジ３００が、図３に示されていない更に多くの特徴および機能を含むであろうということは当業者には明らかであろう。
【００４９】
サウス・ブリッジ３００におけるＤＭＡ装置３１０はＤＭＡエンジン（ＤＥ）３１２およびバス・エンジン（ＢＥ）３１４を含む。特殊な読取り・書込み（ＲＷ）コマンドは、ＤＥ３１２がＢＥ３１４へのトランザクションを更に効率的にキューに入れることを可能にする。より標準的な実施態様を使用すると、ＢＥがバス上で実行するべきすべてのトランザクションを指定することによって、ＤＥはＢＥを綿密管理するであろう。しかし、図示の実施例では、特殊なＲＷコマンドは、ＤＥ３１２がデータ・ブロックの移動をより効率的に制御することができるように、ＤＥ３１２が読取りおよび書込みの両方を同時に指定することを可能にする。
【００５０】
ＢＥ３１４は、処理ユニット３０２からバス３２０に発生されたブロック移動要求のようなＤＭＡコマンドを読取ることが可能である。処理ユニット３０２は、ＤＭＡ装置３１０にＤＭＡコマンドを直接に発生することも可能である。それとは別に、処理ユニット３０２は、システム・メモリ３０４またはローカル・メモリ３２８におけるテーブルまたはリンク・リストであってもよい分散／収集リストを使ってＤＭＡコマンドを発生することも可能である。後者の場合、ＢＥ３１４は、次のＤＭＡコマンドを受取るために単に分散／収集リストからディスクリプタを読取るだけでよい。ＤＭＡ装置３１０は、ローカル・メモリ・コントローラ３２６を介して接続されたローカル・メモリ３２８を作業メモリとして使用することも可能である。
【００５１】
図３に示された実施例によれば、例えば、ＤＭＡ装置は疎結合のＤＭＡエンジン（ＤＭ）およびバス・エンジン（ＢＥ）として構成される。ＤＥは、プログラムされたデータ・ブロック移動を個別のトランザクションに分解し、分散／収集ディスクリプタを解釈し、そしてチャネル間の調停を行なう。ＢＥは、ＤＭＡ装置が接続されているバスのバス・プロトコルを理解し、ＤＥによって送られたトランザクションをすべて実行する。ＢＥは、同時のトランザクションを十分にサポートしなければならず、従って、データ・フローのパイプラインが機能停止しないように十分なバッファをサポートしなければならない。ＤＥは、ＢＥに対するトランザクションをキューに入れ、ＢＥのバッファ・スペース当たりのＢＥを遥かに越えることができる。ＢＥは、簡単な要求／確認ハンドシェイキングを介してＤＥを抑制する。
【００５２】
ＤＥは、ＢＥが如何に多くのバッファを実装しているかを知らないし、或いは知る必要がない。従って、種々のレイテンシ環境をサポートするために、または種々のバスに接続するために、種々のＢＥが同じＤＥと共に使用されことが可能である。スケーラビリティを最大にするために、ＢＥは論理的に独立した「ＢＥユニット」として構成されてもよく、各ＢＥユニットは、ＤＥのための１つのバッファおよび１つのトランザクションを管理する責任を負う。ＢＥユニットの数は、設定可能な合成パラメータであってもよい。
【００５３】
ＤＥがその現在の要求対して肯定応答を得る限り、それは別の要求を行なうことができる。ＢＥが利用可能なバッファを持たない場合、それはＤＥの現在の要求の肯定応答を保留する。それは、ＤＥがそれ以上の如何なるトランザクションも要求しないようにする。資源がＢＥにおいて使える状態なるとき、それは、ＤＥへの肯定応答を活性化するであろうし、従って、ＤＥは別のトランザクションを要求することができるであろう。
【００５４】
ＢＥは、バッファの汎用プールを含んでいる。例えば、ＢＥが１６個のバッファを含む場合、その１６個すべてが１つのＤＭＡチャンネルによって使用されてもよいし、或いは、ＤＥがチャネル間で必要とする任意の方法でそれらを割り当てることも可能である。ＤＥは、任意のチャネルからＢＥへのトランザクションをキューに入れる。ＤＥは、それが行なうべき更なる作業を持たないとき、または利用可能なバッファ・スペースがないことを示す通知をそのＢＥが撤回するときだけ、トランザクションをキューに入れることをやめるである。 
【００５５】
ＢＥは、そのキューに入れられたトランザクションすべてをバス・プロトコルに従って実行し、トランザクション・データが順序不同（out of order）のトランザクションおよび再試行されたトランザクションに戻るというような起り得るバス状況を処理する。順序不同のデータを処理するＤＭＡは、サブブロックの順序には意味がないデータ・ブロック移動に関して最適化される。データが正しい順序で移動されなければならないネットワーキングおよびビデオ・ストリーム搬送のようないくつかのアプリケーションが存在する。 
【００５６】
ＤＥがＢＥへのトランザクションをキューに入れる単純なインターフェースがＤＥとＢＥとの間に存在してもよい。ＤＥがすべてのプログラムされたデータ・ブロックを移動させてしまうまで、ＢＥはＤＥに関するトランザクションを実行する。ＤＥは、バスを介した読取りおよび書込みを行なう各読取りおよび各書込みをＢＥに対して指定することによって、すべてのデータ・ブロックを移動させることが可能である。ＤＥはチャネル間の調停を行い、通常は、すべてのチャネルからのデータが多かれ少なかれ同時に移ることができるように、種々のチャネルからの読取り及び書込みを公平な方法でインターリーブする。具現化し得る様々なチャネル調停優先順位方式がある。しかし、調停は本発明の焦点ではない。
【００５７】
ＤＭＡがデータの移動に関与するので、ＤＥがソース・アドレスから行なう各読取りトランザクションは、結局、宛先アドレスへの書込みトランザクションによって後続されなければならない。しかも、ＤＭＡはデータを処理するのではなくデータを移動させるので、読取りトランザクションによって転送されたデータは、対応する書込みトランザクションによって転送されるデータと同じものである。データは如何なる方法でも修正されない。従って、実施例によれば、ＤＥおよびＢＥは、そのＤＥおよびＢＥの間でキューに入れることができる読取り・書込み（ＲＷ）結合コマンドの使用により、プロセスを更に効率的することが可能である。
【００５８】
１つの実施例では、ＤＭＡ装置が、ディスクリプタ・プリフェッチ・バッファにディスクリプタをプリフェッチする。図３に示された例では、ディスクリプタ・プリフェッチ・バッファ３３０がＤＥ３１２内に設けられる。ディスクリプタ・プリフェッチ・バッファ３３０のサイズは、所与のレイテンシ環境にとって適切な数のディスクリプタを保持する。ＤＥ３１２は、可能な場合は常に１つのトランザクション当たり複数のディスクリプタを要求することによって、ディスクリプタ・プリフェッチ・バッファ３３０を満杯に維持するように努める。ＢＥ３１４は、システム・メモリ３０４あるいはローカル・メモリ３２８からこれらのディスクリプタをフェッチし、それらを、Ｒ／Ｗインターフェースにおける特別のデータ・パスを介してＤＥ３１２に直接送る。その特別のデータ・パスは、ディスクリプタをＢＥ３１４からＤＥ３１２におけるディスクリプタ・プリフェッチ・バッファに渡すためにのみ使用される。図示の例において、次のディスクリプタがプリフェッチ・バッファ内にあり得るので、ＤＥ３１２は、データ・トランザクションがディスクリプタ間で推移するとき、機能停止を必要とすることなく連続してデータ・トランザクションをキューに入れてもよい。
【００５９】
ディスクリプタ・テーブル・アーキテクチャでは、ディスクリプタは順次的であり、ディスクリプタのプリフェッチは簡単である。しかし、ディスクリプタ・テーブル・アーキテクチャは、ＤＭＡコントローラが更に融通性のあるリンク・リスト・アーキテクチャの使用によって回避しようとしている欠点を有する。ディスクリプタのプリフェッチは、各ディスクリプタがリンク・リストにおける次のディスクリプタを指すので、本質的には順次的なプロセスである。理論上、各ディスクリプタは次のディスクリプタの位置を「指示する」ので、ＤＭＡコントローラは、現在のディスクリプタが検索および検査されるまで次のディスクリプタを得るべき位置を知らないであろう。
【００６０】
実施例によれば、ＤＭＡコントローラは、ディスクリプタがメモリ内に順次的に格納されるということを仮定し、その仮定に従ってそれらを「投機的に」フェッチする。ＤＥ３１２がシステム・メモリから実際のディスクリプタ・データを受け取るとき、それは、仮定が妥当であったということを確認するために各ディスクリプタをチェックする。仮定が妥当でないと分かったとき、プリフェッチ・バッファがフラッシュされ、新しいフェッチが正しいアドレスに発せられる。従って、ディスクリプタをメモリに順次的に格納し得なかったとき、この方式の下では機能停止が時々にあるであろう。これは、正しく書かれたソフトウェアではまれなことであろう。この方法は、融通性の低い「ディスクリプタ・テーブル」アーキテクチャを使用することを必要とせずに大きいパフォーマンス向上を与える。
【００６１】
図４は、実施例に従ってディスクリプタ・プリフェッチ・バッファを有するダイレクト・メモリ・アクセス装置を示すブロック図である。ＤＭＡ装置４００はソース装置からの読取りオペレーションおよびターゲット装置への書込みオペレーションを行なうことによってＤＭＡコマンドを実行することができる。ＤＭＡ装置４００のコンポーネントの多くは、図を簡潔にするために示されていない。ＤＭＡ装置４００が、図４に示されていないもっと多くの特徴および機能を含み得るということは当業者には明らかであろう。ＤＭＡ装置４００は、ＤＭＡエンジン（ＤＥ）４１２およびバス・エンジン（ＢＥ）４１４を含む。ＢＥ４１４は、例えば、システム・メモリ４３０から、ディスクリプタ４３１〜４３５によって定義されるようなＤＭＡコマンドを読取ることが可能である。ディスクリプタ４３１〜４３５は、システム・メモリ４３０におけるリンク・リストであってもよい分散／収集リストを含む。
【００６２】
図示の実施例によれば、図４に示されるように、例えば、ＢＥ４１４は、所定の数のディスクリプタを、バス４２０を介してディスクリプタ・プリフェッチ・バッファ４５０にプリフェッチする。１つの実施例では、各チャネルがディスクリプタの異なるリンク・リストを追跡するので、各ＤＭＡチャンネルのためのディスクリプタ・プリフェッチ・バッファが存在し得る。しかし、図４では、図を簡素にするために、１つのディスクリプタ・プリフェッチ・バッファだけしか示されない。図示の例では、ディスクリプタ・プリフェッチ・バッファ４５０は４つのディスクリプタ４５１〜４５４を保持する。ディスクリプタ・プリフェッチ・バッファ４５０は、実施態様次第で、特にＤＭＡ装置４００のレイテンシ環境次第で、もっと多くのまたは少ないディスクリプタを保持することも可能である。
【００６３】
各ディスクリプタは、例えば、６４バイトの長さのものでもよい。分散／収集オペレーションがチャネルにおけるソフトウェアによって開始されると直ちに、ＤＥ４１２は、この例では、単一の２５６バイト・トランザクションで４つの順次的なディスクリプタを求める要求を送出する。ＢＥ４１４はそのトランザクションを遂行する。ＢＥ４１４は、ディスクリプタを受け取ると、それをディスクリプタ・プリフェッチ・バッファ４５０に格納する。
【００６４】
データがディスクリプタ・プリフェッチ・バッファ４５０に入れられると、ＤＭＡ装置４００は急いでそのデータを評価し、各ディスクリプタが前のディスクリプタに対して実際に順次的であるかどうか、或いは、そもそも、ディスクリプタであるかどうかさえ決定する。ディスクリプタ４５１〜４５４はバッファ４５０に格納され、有効／無効フラグ４５６を含んでいる。各順次的ディスクリプタは、有効／無効フラグ４５６を使用して有効なものとしてマークされる。ディスクリプタが非順次的な、即ち、無効なものである場合、ＤＭＡ装置４００は、フラグ４５６を使用して、そのディスクリプタおよびそれに続くすべてディスクリプタを無効なものとしてマークする。ＤＥ４１２は、ディスクリプタがＢＥ４１４に送られるとき、そのディスクリプタの有効化を行なう。
【００６５】
フラグ４５６を使用してディスクリプタが無効のものとしてマークされる場合、ディスクリプタ・プリフェッチ・バッファ４５０におけるスロットは空であると見なされる。従って、いずれのディスクリプタも無効としてマークされるる場合、バッファ４５０は実際には満杯でなく、ＢＥ４１４は、バッファ内の利用可能なスペースの量に基づいて別のディスクリプタ・フェッチを直ちに行なうことが可能である。
【００６６】
例えば、４つのディスクリプタを保持することができるバッファを考察すると、先ず、ＢＥが４つのディスクリプタをバッファにフェッチする。この例では、第１および第２のディスクリプタを有効であると見なすが、第３のディスクリプタは非順次的であることが分かっている。ＤＭＡ装置は第１および第２のディスクリプタを有効なものとしてマークし、第３および第４のディスクリプタを無効のものとしてマークする。ディスクリプタ・プリフェッチ・バッファに２つの利用可能なスロットがあるので、第３のディスクリプタが無効なものであることが分かると直ちに、ＤＥは２つの更なるディスクリプタを要求する。
【００６７】
ディスクリプタをフェッチするためのルールは、プリフェッチ・バッファに利用可能なスペースが存在するときには常に、有効なディスクリプタの処理によって、または、プリフェッチされたディスクリプタが到着したときにそれが無効なものであるとわかったことによって、ＤＥは、そのバッファにおける利用可能なスペースを満たすために必要な量のディスクリプタを要求する単一のトランザクションをキューに入れる。従って、上記の例によれば、ＤＥは、如何に多くのスペースがそのバッファにおいて現在利用可能であるかに従って、１つのトランザクションで１つ、２つ、３つ、または４つのディスクリプタを要求することができる。
【００６８】
典型的なオペレーション中に、ＤＥは、チャネルを開始させるために４つのディスクリプタを要求し、しかる後、ディスクリプタの処理を完了するたびに、１つのディスクリプタを要求するであろう。ＤＥは、それがバッファにおける他の３つのディスクリプタを完全に処理するまで、次のディスクリプタに対するデータを必要としないであろう。この機構は、合理的なサイズにされたパケットに対する機能停止を回避する時間に十分に先立って、ディスクリプタがフェッチされることを可能にしなければならない。もちろん、各ディスクリプタが指示するパケット・サイズが臨界的な大きさより小さい場合、機能停止があるであろう。プリフェッチ・エントリの数は、各ディスクリプタが記述し得る最大のデータ・フェッチ・レイテンシ、最大のディスクリプタ・フェッチ・レイテンシ、および最小パケット・サイズに従って大きさを決められなければならない。
【００６９】
上述のディスクリプタ・プリフェッチ・バッファを備えたＤＭＡコントローラが十分に機能するためには、ソフトウェアが、可能な場合は常にメモリにディスクリプタ・リンク・リストを順次形成しなければならない。各非逐次的ディスクリプタは、ＤＭＡエンジンに、それがプリフェッチしたデータを破棄させ、ディスクリプタ・フェッチを新しいアドレスに戻らせてそれを開始させ、従って機能停止を生じさせるであろう。ソフトウェアは、単に、所定ポイントまでディスクリプタ・リンク・リストの順次的性質を制御することだけができる。ソフトウェアは、例えば、仮想メモリにおいてディスクリプタを順次的にし得るが、オペレーティング・システムは、その対応する実ページを物理メモリにおいて非逐次的にマップし得る。ページは一般に少なくとも４ｋであるので、非逐次ページによる非逐次ディスクリプタの可能性が存在する前、少なくとも６４個の逐次的（６４バイト）ディスクリプタが存在し得る。ページ境界によるこれらの「ジャンプ」は、上述のディスクリプタ・プリフェッチ・バッファを使用するＤＭＡ装置におけるパフォーマンスに無視し得る程度の影響を及ぼすであろう。
【００７０】
しかし、順次ディスクリプタを有することはＤＭＡ装置の正しいオペレーションにとって不必要であるということを留意することが重要である。たとえディスクリプタがいずれも順次的でなくても、正しい結果が得られるであろう。メモリ内にディスクリプタ・リンク・リストを順次的に形成することは、パフォーマンスにだけインパクトを与えるが、機能には与えない。 
【００７１】
図５は、実施例に従って、ディスクリプタ・プリフェッチを有するダイレクト・メモリ・アクセス装置のオペレーションを示すフローチャートである。そのフローチャート表示の各ブロックおよびそのフローチャート表示におけるブロックの組合せを、コンピュータ・プログラム命令によって具現化し得るということは明らかであろう。プロセッサまたは他のプログラマブル・データ処理装置上で実行される命令がそのフローチャートのブロックにおいて指定された機能を具現化するための手段を作成するように、これらのコンピュータ・プログラム命令をプロセッサまたは他のプログラマブル・データ処理装置に提供してマシンを製造することも可能である。フローチャートのブロックにおいて指定された機能を具現化する命令手段を含むソフトウェアを生成するというような特定の方法で機能するよう、プロセッサまたは他のプログラマブル・データ処理装置を指示し得るコンピュータ可読メモリまたは記憶媒体にこれらのコンピュータ・プログラム命令を格納することも可能である。
【００７２】
従って、フローチャートのブロックは、指定された機能を遂行するための手段の組合せ、指定された機能を遂行するためのステップの組合せ、および指定された機能を遂行するためのプログラム命令手段をサポートする。フローチャートの各ブロック、およびフローチャートにおけるブロックの組合せが、指定された機能またはステップを遂行する特殊目的のハードウェア・ベースのコンピュータ・システムによって、或いは特殊目的ハードウェアおよびコンピュータ命令の組合せによって具現化され得ることも明らかであろう。
【００７３】
次に図５を参照すると、オペレーションが開始し、ＤＭＡ装置は、ディスクリプタがシステム・メモリにおける分散／収集リンク・リストにおいて利用可能であるかどうかを決定する（ブロック５０２）。ディスクリプタが利用可能でない場合、オペレーションはブロック５０２に戻り、ディスクリプタが利用可能になるまで待機する。ブロック５０２においてディスクリプタが利用可能である場合、ＤＭＡ装置は、スペースがディスクリプタ・プリフェッチ・バッファにおいて利用可能であるかどうかを決定する（ブロック５０４）。スペースが利用可能でない場合、オペレーションはブロック５０２に戻り、ディスクリプタが利用可能になるまで待機する。
【００７４】
ブロック５０４において、スペースがプリフェッチ・バッファにおいて利用可能である場合、ＤＭＡ装置はディスクリプタ・プリフェッチ・バッファにおける利用可能なディスクリプタ・スロットの数を決定する（ブロック５０６）。しかる後、バス・エンジンがディスクリプタをディスクリプタ・プリフェッチ・バッファにフェッチする（ブロック５０８）。
【００７５】
次に、ＤＭＡ装置が、プリフェッチされたディスクリプタの有効性をチェックし（ブロック５１０）、そのディスクリプタが有効かどうかを決定する（ブロック５１２）。例えば、それが、バッファにおける前のディスクリプタによって指示された順次ディスクリプタでない場合、そのディスクリプタは無効なものであろう。ディスクリプタが無効である場合、ＤＭＡ装置は、有効／無効フラグを使用してそのディスクリプタおよびその後のすべてのディスクリプタを無効としてマークし（ステップ５１４）、しかる後、オペレーションは、ブロック５０２に戻り、ディスクリプタが利用可能になるまで待機する。そうでない場合、ＤＭＡ装置はそのディスクリプタを有効としてマークする（ステップ５１６）。
【００７６】
その後、ＤＭＡ装置は、そのディスクリプタがフェッチされた最後のディスクリプタであるかどうかを決定する（ブロック５１８）。ディスクリプタが最後のプリフェッチされたディスクリプタでない場合、オペレーションはブロック５１０に戻り、ＤＭＡ装置は次のプリフェッチされたディスクリプタの有効性をチェックする。ブロック５１８においてディスクリプタが最後のプリフェッチされたディスクリプタである場合、オペレーションはブロック５０２に戻り、更なるディスクリプタが利用可能になるのを待つ。
【００７７】
上述のＤＭＡプリフェッチ機構は、或るデータ・パケット・サイズに対しては十分に機能するが、もっと小さいパケット・サイズに関しては機能停止を生じることがある。別の実施例では、ＤＭＡ装置はアグレッシブ・プリフェッチを使用する。アグレッシブ・プリフェッチは、それが最後に更なるディスクリプタを破棄しなければならないために多くのバス帯域幅を使用し、従って、それは、上述のディスクリプタ・プリフェッチ機構が扱い得るパケットよりも小さいパケットをサポートしなければならないときにだけ使用されるであろう。
【００７８】
小さいパケット・サイズで生じる問題は、ＤＥがＢＥへのトランザクションをキューに入れ始めること、および、プリフェッチ・バッファが早く空になり始めるということである。プリフェッチ・バッファが空になり始めると直ちに、ＤＥはプリフェッチ要求を行なう。並び方（how things line up）次第で、通常、ＢＥにより処理された２つのディスクリプタと、ＤＥが次のディスクリプタのプリフェッチを行なう準備ができているときにプリフェッチ・バッファに残っている２つのディスクリプタとが存在する。これは、ＤＥに更に２つのディスクリプタを要求させる。そこで、数クロック・サイクル後に、ＤＥは、ＢＥへの最後の２つのディスクリプタに対するトランザクションの残りをキューに入れ、プリフェッチ・バッファは空になる。従って、ＤＥは、それが更に数クロック・サイクル待っていた場合、それが実際には４つのディスクリプタを要求し得たとき、２つのディスクリプタを要求した。ＤＥは一度に１つの未処理のディスクリプタしかサポートし得ないので、順序の狂ったプリフェッチの復旧をサポートする必要があるというような２つ以上のことをサポートする場合に多くのかなりの困難が存在するとき、これは機能停止を引き起こす。
【００７９】
２つのディスクリプタが戻り、ＤＥがそれらを素早く処理する。従って、ＤＥは４つの更なるディスクリプタを要求する。４つのディスクリプタが戻ると、同じことが生じ、ＤＥは、次のフェッチにおいて更に２つのディスクリプタを要求する。その結果、ＤＥは、４つ、２つ、４つ、２つ等のパターンを繰り返す。これは、パフォーマンスにおける機能停止を引き起こす。
【００８０】
実施例によれば、ディスクリプタ・プリフェッチ・バッファに少しでもスペースある場合には常に、ＤＥは最大数のディスクリプタを要求する。これは、バッファが格納し得るディスクリプタの量よりも多くのディスクリプタ・データをＤＥが要求するので、非常に積極的である。利用可能なバッファ・スペースが存在しない到着したディスクリプタは廃棄される。しかし、高レイテンシ読取り環境では、バッファがディスクリプタを受け取る時までに、ＤＭＡ装置は更に幾つかのディスクリプタを処理してしまいそうなので、この積極的プリフェッチが機能する。従って、これがなければ、予想されなかったエクストラ・データを使用することも可能である。格納され得ない何らかのディスクリプタ・データを読取ることによって選択されたエクストラ帯域幅よりも、その後の要求を待つことなく使用することができるディスクリプタを早く受け取ることによって得られるパフォーマンスの方が非常に重要である。
【００８１】
パケット・サイズが大きいとき、バッファにはそれらを格納する空きがないので、ＤＭＡ装置は、結局、多くのディスクリプタを廃棄することになる。しかし、パケット・サイズが大きいと、ディスクリプタの不足によりパイプラインを機能停止するという危険がないので、廃棄されたディスクリプタによって使用される追加の帯域幅は無視し得る。
【００８２】
図６は、実施例に従って、アグレッシブ・ディスクリプタ・プリフェッチを有するダイレクト・メモリ・アクセス装置のオペレーションを示すフローチャートである。オペレーションが開始し、システム・メモリ内の分散／収集リンク・リストにおけるディスクリプタが利用可能であるかどうかをＤＭＡ装置が決定する（ブロック６０２）。ディスクリプタが利用可能でない場合、オペレーションはブロック６０２に戻り、ディスクリプタが利用可能になるまで待機する。ブロック６０２においてディスクリプタが利用可能である場合、ＤＭＡ装置は、ディスクリプタ・プリフェッチ・バッファにおけるスペースが利用可能であるかどうかを決定する（ブロック６０４）。スペースが利用可能でない場合、オペレーションはブロック６０２に戻り、ディスクリプタが利用可能になるまで待機する。
【００８３】
ブロック６０４においてプリフェッチ・バッファにおけるスペースが利用可能である場合、ディスクリプタ・プリフェッチ・バッファが保持する最大数のディスクリプタをバス・エンジンがフェッチする（ブロック６０６）。しかる後、ＢＥが、フェッチされたディスクリプタをディスクリプタ・プリフェッチ・バッファに格納する（ブロック６０８）。次に、ＤＭＡ装置は、格納されたプリフェッチされたディスクリプタの有効性をチェックし（ブロック６１０）、ディスクリプタが有効であるかどうか決定する（ブロック６１２）。例えば、ディスクリプタが、バッファにおける前のディスクリプタによって指示された順次的ディスクリプタでない場合、そのディスクリプタは無効であるかもしれない。ディスクリプタが無効である場合、ＤＭＡ装置は、有効／無効フラグを使用してそのディスクリプタを無効としてマークし（ブロック６１４）、残りのプリフェッチされたディスクリプタを廃棄し（ブロック６２０）、オペレーションはブロック６０２に戻って更なるディスクリプタが利用可能になるのを待つ。そうでない場合、ＤＭＡ装置は、ディスクリプタを有効としてマークする（ブロック６１６）。
【００８４】
しかる後、ＤＭＡ装置は、プリフェッチ・バッファがディスクリプタを格納するための空きを有するかどうかを決定する（ブロック６１８）。バッファが満杯でない場合、オペレーションはブロック６０８に戻り、ＤＭＡ装置が次のプリフェッチされたディスクリプタを格納するブロック６０８に戻る。ブロック６１８においてバッファが満杯である場合、ＤＭＡ装置は残りのプリフェッチされたディスクリプタを廃棄し（ブロック６２０）、オペレーションはブロック６０２に戻って、更なるディスクリプタが利用可能になるのを待つ。
【００８５】
従って、本実施例は、疎結合のＤＭＡエンジン（ＤＥ）およびバス・エンジン（ＢＥ）として構成されるＤＭＡ装置を提供することによって、従来技術の欠点を解決する。ＤＥは、プログラムされたデータ・ブロック移動を個別のトランザクションにし分解し、分散／収集ディスクリプタを解釈し、チャネル間の調整を行なう。ＢＥは、ＤＭＡ装置が接続されているバスのバス・プロトコルを理解し、ＤＥによって送られたトランザクションをすべて実行する。ＤＥおよびＢＥは、ＤＥとＢＥとの間でキューに入れることが可能な結合読取り・書込み（ＲＷ）コマンドを使用することによって、プロセスをより効率的にすることが可能である。
【００８６】
ＤＭＡ装置は、ディスクリプタをディスクリプタ・プリフェッチ・バッファにプリフェッチする。ディスクリプタ・プリフェッチ・バッファのサイズは、所与のレイテンシ環境にとって適切な数のディスクリプタを保持する。ディスクリプタのリンク・リストをサポートするために、ＤＭＡエンジンは、ディスクリプタがメモリにおいて順次的であるという仮定に基づいてそれらのディスクリプタをプリフェッチし、この仮定に反することがわかった如何なるディスクリプタも廃棄する。ＤＭＡエンジンは、可能な限り常に、１つのトランザクション当たり複数のディスクリプタを要求することによって、ディスクリプタ・プリフェッチ・バッファを満杯に保つように努める。バス・エンジンは、システム・メモリからこれらのディスクリプタをフェッチし、それらをプリフェッチ・バッファに書込む。ＤＭＡエンジンは、ディスクリプタ・プリフェッチ・バッファに少しでもスペースがある場合には常に、バッファがサポートし得る最大数のディスクリプタをバス・エンジンが要求するという、アグレッシブ・プリフェッチを使用することが可能である。ＤＭＡ装置は、格納することができないあらゆる残るディスクリプタを廃棄する。
【００８７】
実施例が、全体的にハードウェアの実施例、全体的にソフトウェアの実施例、或いは、ハードウェア要素およびソフトウェア要素の両方を含んだ実施例の形式を取ることが可能であるということは明らかであろう。１つの実施例では、その実施例の機構はソフトウェアにおいて具現化される。そのソフトウェアは、ファームウェア、常駐ソフトウェア、マイクロコード等を含むが、それに限定されない。
【００８８】
更に、実施例は、コンピュータまたは任意の命令実行システムによって、或いはそれに関連して使用するためのプログラム・コードを提供するコンピュータ使用可能媒体またはコンピュータ可読媒体からアクセスし得るコンピュータ・プログラムの形式を取ることも可能である。この説明のために、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって使用するための、或いはそれらに関連して使用のためのプログラムを含有し、格納し、通信し、伝播し、または搬送することができる任意の装置であってもよい。
【００８９】
その媒体は、電子システム、磁気システム、光学的システム、電磁気システム、赤外線システム、または半導体システム（もしくは装置もしくはデバイス）、或いは伝播媒体であってもよい。コンピュータ可読媒体の例は、半導体メモリまたはソリッド・ステート・メモリ、磁気テープ、取外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、固定磁気ディスク、および光ディスクを含む。光ディスクの現用の例は、読取り専用コンパクト・ディスク（ＣＤ−ＲＯＭ）、読取り／書込みコンパクト・ディスク（ＣＤ−Ｒ／Ｗ）、およびＤＶＤを含む。
【００９０】
プログラム・コードを格納および／または実行するために適したデータ処理システムは、システムバスを介してメモリ素子に直接あるいは間接的に接続された少なくとも１つのプロセッサを含むであろう。メモリ素子は、プログラム・コード、大容量記憶装置、およびキャッシュ・メモリの実際の実行中に使用されるローカル・メモリを含み得る。なお、ローカル・メモリは、コードが実行中に大容量記憶装置から検索されなければならない回数を減らすために、少なくとも幾つかのプログラム・コードの一時的記憶装置を提供する。
【００９１】
入出力装置またはＩ／Ｏ装置（キーボード、ディスプレイ、ポインティング・デバイス等を含むが、これらに限定されない）は、システムに直接または介在のＩ／Ｏコントローラを通して接続することが可能である。ネットワーク・アダプタは、データ処理システムが、介在の専用ネットワークまたは公衆ネットワークを介して他のデータ処理システム或いは遠隔のプリンター或いは記憶装置に接続されることを可能にするために接続されてもよい。モデム、ケーブル・モデムおよび Ethernet カードは、数少ない現在利用可能なタイプのネットワーク・アダプタである。
【００９２】
本発明に関する記述は、図解および説明を目的として行なわれたものであり、網羅的であること或いは開示された形式の発明に限定されることを意図するものではない。多くの修正および変更が当業者には明らかであろう。本実施例は、発明の原理および実用的な応用例を最もよく理解するために、および、意図する特定の用途に適するよう当業者が種々の実施例に関して本発明を理解することを可能にするために、選択および記述された。
【図面の簡単な説明】
【００９３】
【図１】実施例の諸局面を具現化し得るデータ処理システムの例示的なブロック図である。
【図２】実施例の諸局面を具現化し得る例示的なデータ処理システムのブロック図である。
【図３】実施例に従ってサウス・ブリッジを示すブロック図である。
【図４】実施例に従ってディスクリプタ・プリフェッチ・バッファを有するダイレクト・メモリ・アクセス装置を示すブロック図である。
【図５】実施例に従ってディスクリプタ・プリフェッチを用いたダイレクト・メモリ・アクセス装置のオペレーションを示すフローチャートである。
【図６】実施例に従ってアグレッシブ・ディスクリプタ・プリフェッチを用いたダイレクト・メモリ・アクセス装置のオペレーションを示すフローチャートである。
【図１】
2008171426.tif 000003
【図２】
2008171426.tif 000004
【図３】
2008171426.tif 000005
【図４】
2008171426.tif 000006
【図５】
2008171426.tif 000007
【図６】
2008171426.tif 000008