(57)【特許請求の範囲】
【請求項１】
所定の格納データの読み出しのために読出要求を発行する読出要求発行段階と、
発行した読出要求に対する読出データが所定時間内に到来しない場合に再度読出要求を発行する読出要求再発行段階とを有するデータ読出方法であって、
前記読出要求再発行段階では、前記再度の発行に係る読出要求にフラグを付加することにより当該再度の発行に係る読出要求を最初に発行した読出要求と異なったものとし、
前記再度の発行に係る読出要求に付加した前記フラグと同一のフラグが付加された、前記再度の発行に係る読出要求に対する読出データにつき、当該読出データに付加されたフラグと、前記再度の発行に係る読出要求に付加したフラグとを照合することにより、当該読出データが、前記最初に発行した読出要求に対する読出データか、前記再度の発行に係る読出要求に対する読出データかを判定する判定段階を有することを特徴とするデータ読出方法。
【請求項２】
前記読出要求再発行段階では、前記再度の発行に係る読出要求に係るメモリ上のアドレスであるローアドレスおよび読み出すデータ長を示すバイトカウントを格納し、
前記判定段階では、前記再度の発行に係る読出要求に付加した前記フラグと同一のフラグ、並びに前記再度の発行に係る読出要求に係るローアドレスおよびバイトカウントが付加された、前記再度の発行に係る読出要求に対する読出データにつき、当該読出データに付加されたフラグ、並びにローアドレスおよびバイトカウントと、前記再度の発行に係る読出要求に付加したフラグ、並びに前記再度の発行に係る読出要求に係るローアドレスおよびバイトカウントとを照合することにより、当該読出データが、前記最初に発行した読出要求に対する読出データか、前記再度の発行に係る読出要求に対する読出データかを判定する、請求項１に記載のデータ読出方法。
【請求項３】
前記読出要求の発行は、発行された読出要求に対する読出データの順番が保証されない構成のデータ読出システムに対してなされる、請求項１または２に記載のデータ読出方法。
【請求項４】
読出データはパケット形式とされてなり、
前記読出要求に付加するフラグは、当該読出要求に対して提供されるパケットの未使用領域に埋め込まれた状態で当該パケットとともに提供される、請求項１乃至３のうちの何れか一項に記載のデータ読出方法。
【請求項５】
所定の格納データの読み出しのために読出要求を発行する読出要求発行手段と、
発行した読出要求に対する読出データが所定時間内に到来しない場合に再度読出要求を発行する読出要求再発行手段とを有するデータ読出装置であって、
前記読出要求再発行手段は、前記再度の発行に係る読出要求にフラグを付加することにより当該再度の発行に係る読出要求を最初に発行した読出要求と異なったものとし、
前記再度の発行に係る読出要求に付加した前記フラグと同一のフラグが付加された、前記再度の発行に係る読出要求に対する読出データにつき、当該読出データに付加されたフラグと、前記再度の発行に係る読出要求に付加したフラグとを照合することにより、当該読出データが、前記最初に発行した読出要求に対する読出データか、前記再度の発行に係る読出要求に対する読出データかを判定する判定手段を有することを特徴とするデータ読出装置。
【請求項６】
前記読出要求再発行手段は、前記再度の発行に係る読出要求に係るメモリ上のアドレスであるローアドレスおよび読み出すデータ長を示すバイトカウントを格納し、
前記判定手段は、前記再度の発行に係る読出要求に付加した前記フラグと同一のフラグ、並びに前記再度の発行に係る読出要求に係るローアドレスおよびバイトカウントが付加された、前記再度の発行に係る読出要求に対する読出データにつき、当該読出データに付加されたフラグ、並びにローアドレスおよびバイトカウントと、前記再度の発行に係る読出要求に付加したフラグ、並びに前記再度の発行に係る読出要求に係るローアドレスおよびバイトカウントとを照合することにより、当該読出データが、前記最初に発行した読出要求に対する読出データか、前記再度の発行に係る読出要求に対する読出データかを判定する、請求項５に記載のデータ読出装置。
出装置。
【請求項７】
前記読出要求の発行は、発行された読出要求に対する読出データの到来の順番が保証されない構成のデータ読出システムに対してなされる、請求項５または６に記載のデータ読出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ読出方法及びデータ読出装置に係り、特に読出要求を発行することによりあらかじめ格納された所望の読出データを得る構成のデータ読出方法及びデータ読出装置に関する。
【背景技術】
【０００２】
例えばハードディスク装置に格納されたデータを読み出す際のインタフェースの方式として、ＰＣＩ−Ｅｘｐｒｅｓｓと称される方式が提案されている。
【０００３】
ＰＣＩ−Ｅｘｐｒｅｓｓはインテル社が提唱し、ＰＣＩ−ＳＩＧが仕様策定を進めているものであり、「３ＧＩＯ（3ｒｄ  Ｇｅｎｅｒａｔｉｏｎ  Ｉ／Ｏ）」の名称で知られたシリアル転送インタフェースを示す。
【０００４】
現在ほとんどのコンピュータで採用されているＰＣＩバスはパラレル転送方式を使用している。このため物理的な技術レベルでは現在のＰＣＩと上記ＰＣＩ―Ｅｘｐｒｅｓｓとの間に互換性はないが、通信プロトコルなどは共通する。
【０００５】
また現在のＰＣＩの最大通信速度が１．０６Ｇｂｐｓであるのに対し、ＰＣＩ−Ｅｘｐｒｅｓｓの最大通信速度は２．５Ｇｂｐｓである。ただし複数本を束ねて使うことも可能なため、ＰＣＩ―Ｅｘｐｒｅｓｓバスを２本(「2レーン」と呼ぶ)束ねて５Ｇｂｐｓの通信速度を実現することが可能である。
【０００６】
このＰＣＩ―Ｅｘｐｒｅｓｓの規約においては後述のごとく、読出要求に対し提供される読出データの順番は保証されない。他方、メモリに格納されたデータを読み出す際、読出要求の発行の時点から該当する読出データが提供されるまでの時間を測定し、所定時間内に該当する読出データが得られない場合、すなわちタイムアウト検出時には再度読出要求を発行する構成とされる場合が多い。
【０００７】
ここで上記のごとくＰＣＩ−Ｅｘｐｒｅｓｓインタフェースの場合読出要求に対して提供される読出データの順番が保証されない。このため上記のごとくタイムアウト検出後に再度読出要求を発行した場合（以下「リトライ」と称する）、結果的に得られる該当読出データが、最初の読出要求に対するものか、あるいはタイムアウト検出後に発行された２番目の読出要求に対するものかが識別できない場合がある。
【０００８】
このような場合、最初の読出要求に対する読出データの獲得を一旦あきらめた上でリトライしているため、リトライ後に意に反して最初の読出要求に対する読出データが得られかつそれがリトライ前の要求に対するものかリトライ後の要求に対するものかを識別できない場合、問題が生ずる場合がある。すなわち一連の読出動作で得られた読出データ全体としてみた場合に正しいデータが得られない事態が生じ得る。
【特許文献１】特開２００２−４１４４５号公報
【特許文献２】特開２００５−８５０７９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明は上記問題点に鑑みてなされたものであり、ＰＣＩ−Ｅｘｐｒｅｓｓのごとく、読出要求に対する読出データの順番が保証されないインタフェースを用いる場合であっても、所望の読出データを確実に識別可能とする構成の提供を目的とする。
【課題を解決するための手段】
【００１０】
上記目的達成のため本発明では、読出要求を再発行する際、当該読出要求にフラグを付加することにより最初に発行した読出要求と異なったものとするようにした。
【００１１】
読出要求の発行後にこのフラグを保持しておき、読出要求に対して得られる読出データが当該読出要求に付加されたものと同じフラグを有するようにすれば、読出データを受けた際にそのフラグを参照することにより、当該読出データが最新の読出要求に対するものかを容易かつ確実に判定可能となる。
【発明の効果】
【００１２】
このように本発明によれば読出データが最新の読出要求に対するものかを容易かつ確実に判定可能となるため、読出要求に対し得られる読出データの順番が保証されない方式の場合であっても、常に正しいデータ読出を実行することが可能となる。したがってデータ読出の信頼性を効果的に向上し得る。
【発明を実施するための最良の形態】
【００１３】
以下本発明の実施例につき、図とともに詳細に説明する。
【００１４】
図１は本発明の一実施例によるファイル制御システムの構成を示す。
【００１５】
同ファイル制御システムはデバイス間インタフェースに上記ＰＣＩ−Ｅｘｐｒｅｓｓ  ＩＦを用いた、いわゆるＲＡＩＤｘ構成を有するファイル制御装置である。
【００１６】
図中、ファイル制御システムを構成する各セントラルモジュール１０−０，１０−１，...、１０−ｎ、１０−ｍはルータ２０によって互いにデータの授受が可能な構成で接続されている。
【００１７】
また各セントラルモジュールにはホスト（セントラルモジュール１０−０の場合、Ｈ０）、及びデバイスコントローラ（同上ＤＣ０）を介してハードディスク装置（同上Ｄ０）が接続されている。
【００１８】
また各セントラルモジュールは、ＣＰＵ１，メモリコントロールハブ（以下ＭＣＨと称する）２，メモリ４及びＤＭＡコントローラ３を有する。
【００１９】
以下図２乃至４とともに、このファイル制御システムにおけるデータ転送動作例について説明する。
【００２０】
図２中、ホストＨ０からハードディスク装置Ｄ１に対するデータ読出要求が出された場合（ステップＳ１）、セントラルモジュール１０−０のＣＰＵ１はこれを受け（ステップＳ２）、ハードディスク装置Ｄ１に対するデータ読出要求のコマンドをメモり４に書き込む指示をＭＣＨ２に発行する（ステップＳ３、Ｓ４）。これを受けたＭＣＨ２は同コマンドをメモり４に書き込む（ステップＳ５，Ｓ６）。
【００２１】
また上記ＣＰＵ１は、メモリ４に書き込んだコマンドをＤＭＡ転送するよう、ＭＣＨ２に対し指示する（ステップＳ８）。これを受けたＭＣＨ２はＤＭＡ動作を起動するよう、ＤＭＡコントローラ３に指示する（ステップＳ９，Ｓ１０）。
【００２２】
これを受けたＤＭＡコントローラ３はＤＭＡ動作を起動し、読出要求を発行する（ステップＳ１１，Ｓ１２）。これを受けたＭＣＨ２はメモリ４から、上記ハードディスク装置D1に対するデータ読出要求を読み出すとともに、ＤＭＡコントローラ３にこれを返信する（ステップＳ１３，Ｓ１５，Ｓ１６）。
【００２３】
これを受けたＤＭＡコントローラ３は、当該読出要求を、ルータ２０を介して目的のハードディスク装置Ｄ１に係るセントラルモジュール１０−１のＤＭＡコントローラ３に対して送信する（ステップＳ１７，Ｓ１８，Ｓ１９）。
【００２４】
図３に移り、これを受けたセントラルモジュール１０−１のＤＭＡコントローラ３は同セントラルモジュール内のＭＣＨ２を介してメモり４に対し、受信した読出要求を書き込む（ステップＳ２０，Ｓ２１，Ｓ２２，Ｓ２３）。
【００２５】
またセントラルモジュール１０−１のＤＭＡコントローラ３は、上記他のセントラルモジュールからのデータ受信の事実を同セントラルモジュール内のＣＰＵ１に通知する（ステップＳ２５）。これを受けたＣＰＵ１はメモリ４に書き込まれたデータを読み出すよう、ＭＣＨ２に指示する（ステップＳ２６，Ｓ２７）。
【００２６】
これを受けたセントラルモジュール１０−１内のＭＣＨ２はメモリ４からデータを読み出し、これをＣＰＵ１へ返信する（ステップＳ２８，Ｓ２９，Ｓ３０，Ｓ３１）。なおここでメモリ４から読み出されＣＰＵ１に返信されたデータは、元々ホストＨ０から発行され、当該ホストＨ０に係るセントラルモジュール１０−０を介し、さらにルータ２０を介して、図２とともに上述の動作によって転送されてきた、ハードディスク装置Ｄ１に対する読出要求である。
【００２７】
これを受けたセントラルモジュール１０−１のＣＰＵ１は当該読出要求に係るデータを解析し、その内容がハードディスク装置Ｄ１に対するデータの読出要求であることを認識する（ステップＳ３２，Ｓ３３）。そこでＣＰＵ１はこの認識内容にしたがって、ハードディスク装置Ｄ１へのデータ読出要求のコマンドをメモリ４に書き込むよう、ＭＣＨ２に指示する（ステップＳ３４、Ｓ３６）。これを受けたＭＣＨ２は当該コマンドをメモり４に書き込む。
【００２８】
図４に移り、ＣＰＵ１は当該メモリ４に書き込まれたコマンドをＤＭＡ転送する旨の指示をＭＣＨ２に行う（ステップＳ３７）。これを受けたＭＣＨ２はデバイスコントローラＤＣ１のＤＭＡ動作を起動させる（ステップＳ３８，Ｓ３９）。
【００２９】
ＤＭＡ動作を起動したデバイスコントローラＤＣ１は読出要求を発行し、これを受けたＭＣＨ２はメモリ４から上記コマンドを読み出してデバイスコントローラＤＣ１に対し返信する（ステップＳ４０，Ｓ４１，Ｓ４３，Ｓ４４）。ここで返信されたコマンドは、上記ハードディスク装置Ｄ１へのデータ読出要求のコマンドである。これを受けたデバイスコントローラＤＣ１は該当するハードディスク装置Ｄ１に対し読出要求を発行し、当該ハードディスク装置Ｄ１から該当するデータを読み出す（ステップＳ４５，Ｓ４６，Ｓ４７，Ｓ４８、Ｓ４９）。
【００３０】
このようにして読み出されたデータを受けたデバイスコントローラＤＣ１は、これをＭＣＨ２を介してメモり４に書き込む（ステップＳ５０，Ｓ５１，Ｓ５２）。
【００３１】
以降、上述の動作、すなわちセントラルモジュール１０−０のメモリ４に書き込まれたホストＨ０からのハードディスク装置Ｄ１に対する読出要求のデータが要求先のハードディスク装置Ｄ１へ転送された際の動作と同様の動作にて、セントラルモジュール１０−１のメモリ４に書き込まれた読出データが当該セントラルモジュール１０−１のＤＭＡコントローラ３等の機能により、要求元のセントラルモジュール１０−０に係るホストＨ０に対しＤＭＡ転送される（ステップＳ５４，Ｓ５５）。
【００３２】
図５は、一例として、上記セントラルモジュール１０−０中のＤＭＡコントローラ３が有するＤＭＡエンジンＤＥ０乃至ＤＥ３及びキューイングバッファ（以下単に「キュー」と称する）Ｑ０乃至Ｑ３の機能・動作を説明するための図である。
【００３３】
図示のごとくＤＭＡコントローラ３は複数（この例の場合４個）のＤＭＡエンジン及び複数（同じく４個）のキューを有することで、連続して複数のデータ読出要求を発行可能とされている。
【００３４】
ここで上記DMAコントローラ３は上記のごとく、ＭＣＨ２に対し、メモリ読出要求（図２中、ステップＳ１２）を発行する。その結果メモリ４から、要求元のホストＨ０から発行された、ハードディスク装置Ｄ１へのデータ読出要求が読み出される（ステップＳ１３，Ｓ１５，Ｓ１６、Ｓ１７）。これが要求先のセントラルモジュール１０−１のＤＭＡコントローラ３を介してＤＭＡ転送され、相手先セントラルモジュール１０−１のＣＰＵ１により解釈される（図３のステップＳ３３）。その結果要求先のハードディスク装置Ｄ１から該当するデータが読み出され、この読出データが相手側当該セントラルモジュール１０−１のＤＭＡコントローラ３及び当該セントラルモジュール１０−０のＤＭＡコントローラ３の機能によりＤＭＡ転送され、結果的に要求元のホストＨ０に転送、すなわち返信される（ステップＳ５４）。
【００３５】
ここではこれらのプロセス中、例えば上記ステップＳ１２，Ｓ１３，Ｓ１５，Ｓ１６、Ｓ１７の部分のプロセスに着目する。
【００３６】
このプロセス中、ＤＭＡコントローラ３からの読出要求に対する返信としてメモリ４から読み出されて当該ＤＭＡコントローラ３に転送される読出データはパケット形式とされ、コンプレション（Ｃｏｍｐｌｅｔｉｏｎ）パケットと呼ばれる。
【００３７】
上記のごとくＰＣＩ−Ｅｘｐｒｅｓｓの規約において、読出要求（Ｒｅａｄ  Ｒｅｑｕｅｓｔ）に対するコンプレションパケットは順番保証されずに返信される。要求元のＤＭＡコントローラ３は返ってこないコンプレションパケットに対しタイムアウト監視を行う。ＤＭＡのリソースを効率的に使用するためである。
【００３８】
図５に示すごとくＤＭＡコントローラ３はDMAエンジンとキューとを複数所持している。そのため前記のごとく、読出要求を連続して複数発行することができる。このように読出要求を複数発行した場合、上記のごとく返信の順番が保証されないことにより、これら複数発行した読出要求のうちのいずれの読出要求に対するコンプレションパケットかを識別する必要がある。
【００３９】
図６はコンプレションパケットのヘッダ部分の構成例を示す。上記コンプレションパケットの識別は例えば以下の通り実施される。
【００４０】
すなわち図５に示すＤＭＡエンジンが読出要求を発行すると、ＤＭＡ要求アービタ３ａによる調停を経て、当該読出要求に対しキューが割り当てられる（以下「アサイン」と称する）。そして当該アサインキューに対し、要求制御部３ｂにより、当該読出要求に係るメモリ４上のアドレス、読み出すデータ長を示すバイトカウント等の情報が書き込まれる。さらに当該キューに対し、要求元のデバイスを識別するリクエスタＩＤ及び当該読出要求を発行したＤＭＡエンジンの識別番号としてのタグが書き込まれる。
【００４１】
これらのキューに書き込まれた情報、すなわちアドレス、バイトカウント、リクエスタＩＤ及びタグを含めた形で要求制御部３ｂにより読出要求が生成され、ＭＣＨ２に対し発行される（図２中、ステップＳ１２）
この読出要求を受けたＭＣＨ２はその内容にしたがってメモり２からデータを読み出し、ＤＭＡコントローラ３に対し返信する（図２中、ステップＳ１３，Ｓ１５，Ｓ１６）。ここで返信されるデータは上記コンプレションパケットである。このコンプレションパケットのヘッダは、例えば図６に示すフォーマットを有する。
【００４２】
これを受けたＤＭＡコントローラ３のキュー管理部３ｃは、当該コンプレションパケットのヘッダの該当するフィールドに書き込まれたリクエスタＩＤ，タグ、アドレス（ここでは「ローアドレス」）、バイトカウント等を参照し、当該読出要求を発行した際にキューに書き込んだ対応する情報と照合する。このようにして同一性を判定する。この同一性の判定とは、読出要求と合致するコンプレションパケットが得られたか否かの判定を意味する。
【００４３】
他方上記のごとくキュー管理部３ｃではコンプレションパケットに対するタイムアウト監視を行っており、読出要求の発行から所定のタイムアウト時間内に該当するコンプレションパケットが得られなかった場合、読出要求を再発行する。この場合、再発行した読出要求に対するものと別に最初の読出要求に係るコンプレションパケットがタイムアウト後に得られてしまうと問題が生じ得る。
【００４４】
すなわち、最初の読出要求に係るコンプレションパケットと再発行した読出要求に係るコンプレションパケットとがともに得られてしまった場合、キュー管理部３ｃではその事実を認識し得ない場合がある。これは上記同一性の判定の際に照合するアドレスが、処理の簡略化の目的から、本来の６４ビットあるいは３２ビットから、例えば下位７ビット等の部分的なもの（これを「ローアドレス」と称する）に簡略化されたものとされることが一般的である。
【００４５】
したがって順次アドレスを更新しながら読出要求を発行するような場合、連続して発行する読出要求の間で、それらの下位７ビットがたまたま一致するような場合があり得る。さらにそれ以外の照合情報、すなわち、バイトカウント、リクエスタＩＤ及びタグは、連続して順次アドレスを更新することによってメモリ２からデータを読み出すような場合、共通するものとなる。
【００４６】
そのような場合、仮に全く同じアドレスの読出データ、すなわち全く同一内容のデータよりなるコンプレションパケットが得られた際、キュー管理部３ｃではそれが全く同一のデータなのか、あるいは異なるデータであるが、たまたま下位７ビットが一致するものであるのか、区別できない。したがってキュー管理部３ｃは同一のデータを得たことに気づかず、予定通り順次のアドレス更新による正しいデータを得たものと誤判断して以後の処理を進めることとなる。その結果正しいデータ読み出しがなされないこととなる。
【００４７】
本発明の実施例によるDMAコントローラ３の構成によれば、ＭＣＨ２に読出要求を発行する際、キュー管理部３ｃにおいて、当該読出要求に係るパケットの未使用領域にフラグを埋め込んだ状態で発行する。そして当該読出要求に対するコンプレションパケットの同一性の判定の際、上記のごとくタグ、ローアドレス、バイトカウントに加え、上記フラグを併せて判定する。その結果、タイムアウト後に再発行した読出要求に対するものか否かを確実に判定可能となる。
【００４８】
この動作につき、以下図７乃至図１０とともに説明する。
【００４９】
図７は通常のデータ転送時、すなわちタイムアウトの発生の無い場合の動作の流れを示す。
【００５０】
一例として、ステップＳ６１でＤＭＡエンジンＤＥ０から読出要求が発行されたとする。これがＤＭＡ要求アービタ３ａに送られ、ＤＭＡ要求アービタ３ａではキュー管理部３ｃに対し、キューの空きについて問い合わせる（ステップＳ６２）。キュー管理部３ｃではキューの空きがある場合、その旨を返信する（ステップＳ６３）。ＤＭＡ要求アービタ３ａはこれを受け、要求元のＤＭＡエンジンＤＥ０に、その旨返信する（ステップＳ６４）。またこの返信の事実が要求制御部３ｂに通知される（ステップＳ６６）。
【００５１】
ＤＭＡエンジンＤＥ０ではこの返信を受け、当該読出要求に係るアドレス及びバイトカウントをキュー管理部３ｃ及び要求制御部３ｂに通知する（ステップＳ６７）。キュー管理部３ｃはこれを受け、それらの読出要求に係る情報に、要求元のＤＭＡエンジンＤＥ０のタグ、すなわちその番号「０」を加え、該当するキューに格納する（ステップＳ６８）。
【００５２】
また要求制御部３ｂは該当する読出要求をＭＣＨ２に対し発行する（ステップＳ６９）。この場合、該当するキューのフラグカウンタの番号をフラグとして読出要求に埋め込む。その後キュー管理部３ｃは該当するキューのフラグカウンタを１インクリメントする（ステップＳ７０）。
【００５３】
ＤＭＡコントローラ３の要求制御部３ｂから読出要求を受けたＭＣＨ２のＤＭＡ受信部２ａはメモリ４に対し該当する読出要求を発行する（ステップＳ７１）。そしてそれに対しメモリ４から読み出されたデータをコンプレションパケットとして要求元のＤＭＡコントローラ３のキュー管理部３ｃに返信する（ステップＳ７２）。
【００５４】
この場合、ＤＭＡエンジンＤＥ０から該当する読出要求のアドレス及びバイトカウントの通知があった時点（ステップＳ６８）から、該当するコンプレションパケットがＭＣＨ２から返信される時点（ステップＳ７３）までの時間が所定のタイムアウト時間内であったため、当該読出要求の再発行はなされなかったものとする。
【００５５】
コンプレションパケットを受信したキュー管理部３ｃでは、そこに含まれるフラグ、バイトカウント、ローアドレスを参照し、同一性の判定を行う（ステップＳ７３，Ｓ７４）。すなわち、当該読出要求に対しステップＳ６８にてキューに格納したローアドレス、バイトカウント、さらに当該読出要求発行時の当該キューに係るフラグカウンタの値とを照合する。このようにして当該読出要求に対して得られたコンプレションパケットか否かを判定する。
【００５６】
判定の結果同一性が確認された場合、当該コンプレションパケットを要求元のＤＭＡエンジンＤＥ０に返信する（ステップＳ７６）。
【００５７】
図８乃至図１０とともに、当初発行の読出要求に対するコンプレションパケットの返信が所定のタイムアウト時間内になされず、読出要求を再発行する場合の動作の流れにつき、説明する。
【００５８】
この場合、図８のステップＳ８１でＤＭＡエンジンＤＥ０から読出要求が発行されるとこれがＤＭＡ要求アービタ３ａに送られる。ＤＭＡ要求アービタ３ａではキュー管理部３ｃに対し、キューの空きについて問い合わせる（ステップＳ８２）。キュー管理部３ｃではキューの空きがある場合、その旨を返信する（ステップＳ８３）。ＤＭＡ要求アービタ３ａはこれを受け、要求元のＤＭＡエンジンＤＥ０に、その旨返信する（ステップＳ８４）。またこの返信の事実が要求制御部３ｂに通知される（ステップＳ８５）。
【００５９】
ＤＭＡエンジンＤＥ０ではこの返信を受け、当該読出要求に係るアドレス及びバイトカウントをキュー管理部３ｃ及び要求制御部３ｂに通知する（ステップＳ８６）。キュー管理部３ｃはこれを受け、それらの読出要求に係る情報に、要求元のＤＭＡエンジンＤＥ０のタグ、すなわちその番号「０」を加え、該当するキューに格納する（ステップＳ８７）。また要求制御部３ｂは該当する読出要求をＭＣＨ２に対し発行する（ステップＳ８８）。この場合、該当するキューのフラグカウンタの番号をフラグとして読出要求に埋め込む。またこのフラグの値は、該当するキューにも格納される。
【００６０】
この場合当該キューのフラグカウンタは未だインクリメントされておらず「０」のままである。したがってフラグとして「０」が埋め込まれる。その後キュー管理部３ｃは該当するキューのフラグカウンタを１インクリメントする（ステップＳ９０）。ＤＭＡコントローラ３の要求制御部３ｂから読出要求はＭＣＨ２のＤＭＡ受信部２ａに受信される（ステップＳ８９）。
【００６１】
ここでは上記のごとく当該読出要求に対するコンプレションパケットの返信が所定のタイムアウト時間内に届かず（ステップＳ９１）、その結果要求元であるＤＭＡコントローラ３のキュー管理部３ｃでは、該当するキューに格納されていた当該読出要求に係るフラグ、バイトカウント、アドレス及びフラグの値の各情報を一旦破棄する（ステップＳ９３）。そして要求元のＤＭＡエンジンＤＥ０に対し、当該読出要求に対するタイムアウトの発生を通知する（ステップＳ９４）。
【００６２】
これを受けたＤＭＡエンジンＤＥ０は読出要求を再発行する（ステップＳ９５）。これがＤＭＡ要求アービタ３ａに送られ、ＤＭＡ要求アービタ３ａではキュー管理部３ｃに対し、キューの空きについて問い合わせる（ステップＳ９６）。キュー管理部３ｃではキューの空きがある場合、その旨を返信する（ステップＳ９７）。ＤＭＡ要求アービタ３ａはこれを受け、要求元のＤＭＡエンジンＤＥ０に、その旨返信する（ステップＳ９８）。またこの返信の事実が要求制御部３ｂに通知される（ステップＳ１０１）。
【００６３】
ＤＭＡエンジンＤＥ０ではこの返信を受け、当該読出要求に係るアドレス及びバイトカウントをキュー管理部３ｃ及び要求制御部３ｂに通知する（ステップＳ９９）。キュー管理部３ｃはこれを受け、それらの読出要求に係る情報に、要求元のＤＭＡエンジンＤＥ０のタグ、すなわちその番号「０」を加え、該当するキューに格納する（ステップＳ１０２）。また要求制御部３ｂは該当する読出要求をＭＣＨ２に対し発行する（ステップＳ１０３）。
【００６４】
この場合、該当するキューのフラグカウンタの番号をフラグとして読出要求に埋め込む。なお該当するキューのフラグカウンタはすでに当初の読出要求発行の際、ステップＳ９０において０から１にインクリメントされている。その結果、ここで埋め込まれるフラグは「１」である。このフラグの値は上記同様該当するキューに格納される。その後キュー管理部３ｃは該当するキューのフラグカウンタを１インクリメントする（ステップＳ１０５）。
【００６５】
ここで、一例として、当初の読出要求、すなわちフラグ「０」が埋め込まれた読出要求に対してメモリ４から読み出されたデータのコンプレションパケット、すなわち同じフラグ「０」が埋め込まれたコンプレションパケットがこの時点でＭＣＨ２から要求元のＤＭＡコントローラ３に対し返信された場合（ステップＳ１０６）を想定する。
【００６６】
この場合、当該コンプレションパケットを受信（ステップＳ１０７）したキュー管理部３ｃでは、そこに含まれるフラグ、バイトカウント、ローアドレスを参照し、同一性の判定を行う（ステップＳ１０８）。すなわち、当該読出要求に対しステップＳ１０２にてキューに格納したローアドレス、バイトカウント、さらに当該読出要求発行時の当該キューに係るフラグカウンタの値とを照合することのより、当該読出要求に対して得られたコンプレションパケットか否かを判定する。
【００６７】
この場合、すでに当初発行され該当するキューに格納された読出要求に係るフラグ等の情報は、タイムアウト検出時に一旦破棄され（ステップＳ９２）、該当するキューには、再発行に係る、更新後のフラグ等の情報が格納されている（ステップＳ１０２）。したがって破棄されたフラグ番号「０」を有するコンプレションパケットに対する同一性判定の結果フラグの不一致が発見されることとなり、その結果当該コンプレションパケットは破棄される（ステップＳ１０９）。
【００６８】
次に再発行に係る読出要求、すなわちフラグ「１」が埋め込まれた読出要求に対してメモリ４から読み出されたデータのコンプレションパケット、すなわち同じフラグ「１」が埋め込まれたコンプレションパケットがＭＣＨ２から要求元のＤＭＡコントローラ３に対し返信された（ステップＳ１０６）とする。
【００６９】
この場合、当該コンプレションパケットを受信（ステップＳ１１１）したキュー管理部３ｃでは、そこに含まれるフラグ、バイトカウント、ローアドレスを参照し、同一性の判定を行う（ステップＳ１１２）。すなわち、当該読出要求に対しステップＳ１０２にてキューに格納したローアドレス、バイトカウント、さらに当該読出要求発行時の当該キューに係るフラグカウンタの値とを照合することのより、当該読出要求に対して得られたコンプレションパケットか否かを判定する。
【００７０】
この場合両者のフラグの値が一致するため同一性が確認され、キュー管理部３ｃは当該コンプレションパケットを正規ののデータとして要求元のＤＭＡエンジンＤＥ０に返信する（ステップＳ１１４）。
【００７１】
このように本発明の実施例によればタイムアウト検出後の読出要求の再発行時、当初発行に係る読出要求の発行後にインクリメントされたフラグを埋め込む。そして返信されるコンプレションパケットには該当する読出要求に埋め込まれていたものと同じフラグが埋め込まれている。したがって受け取ったコンプレションパケットが当初の読出要求に対するものか、あるいは再発行に係る読出要求に対するものかにつき、容易にかつ確実に識別可能となる。
【００７２】
次に本発明の実施の形態によるフラグの割り付け方法につき説明する。
【００７３】
図１１に示すごとく、図５に示すキューＱ０乃至Ｑ３の各々に対応するフラグカウンタＣ０乃至Ｃ３が設けられ、該当するキューの動作にリンクしてそのカウント値がカウントアップされる。
【００７４】
図５の構成においてDMAエンジンから読出要求が発行されるとＤＭＡ要求アービタ３ａが調停を行い、競合に勝ったＤＭＡエンジンからの読出要求が要求制御部３ｂに転送される。
【００７５】
要求制御部３ｂではこれを受け、キューの現在の使用状況を見極め、空いているキューがアサインされる。図１２の例の場合、すべてのキューが空き状態である。このような場合、後述する「キュー未使用時」の動作が実行される。
【００７６】
また、このような状態において連続して読出要求が要求制御部３ｂで受信された場合、後述する「連続要求受信時」の動作が実行される。ここで図１２は読出要求が到来する前の初期状態における上記キュー及びフラグカウンタの状態を示す。
【００７７】
まず上記「キュー未使用時」の動作につき、図１３乃至図１８とともに説明する。
【００７８】
図１６において、ＤＭＡエンジンから読出要求が発行され（ステップＳ１２１）、これがＤＭＡ要求アービタ３ａを介し要求制御部３ｂで受信される（ステップＳ１２２）と、キューの空き状態が確認される（ステップＳ１２３）。ここでキューはすべて未使用状態なので、番号の若いキューＱ０がアサインされる（図１３、ステップＳ１２９）。
【００７９】
このようにキューの空き状態が存在するため、その旨がＤＭＡアービタ３ａ及び要求制御部３ｂに通知される（ステップＳ１２４，Ｓ１２５，Ｓ１２６、Ｓ１２７）。これを受けた要求元のＤＭＡエンジンは、当該読出要求に係るタグ、アドレス、バイトカウントの各情報を送信する（ステップＳ１２８）。
【００８０】
これを受けたキュー管理部３ｃでは、それら及び対応するフラグカウンタＣ０の値を、上記のごとくアサインされたキューＱ０に格納する（ステップＳ１３２）。またキュー管理部３ｃは該当する読出要求の発行後、当該キューＱ０に対応するフラグカウンタＣ０をインクリメントする（図１３，ステップＳ１３３）。
【００８１】
また要求制御部３ｂではＤＭＡエンジンから受信した、読出要求に係る情報及びインクリメント前の該当するフラグカウンタＣ０の値である「０」をフラグとして埋め込んで読出要求を生成し、ＭＣＨ２に対し発行する（ステップＳ１３０）。これがＭＣＨ２で受信される（ステップＳ１３１）。
【００８２】
ＭＣＨ２にて当該読出要求にしたがってメモリ４からデータを読み出した後、これをコンプレションパケットとして返信する（図１７のステップＳ１３４）。
【００８３】
これを受けたキュー管理部３ｃでは、使用中のキューＱ０に格納された発行済みの読出要求に係る情報、すなわちフラグ、バイトカウント、アドレスを、受信したコンプレションパケットに埋め込まれた対応する情報と照合する（ステップＳ１３５，Ｓ１３６）。この場合、両者は合致するため、正しいコンプレションパケットと判定し、これを要求元のＤＭＡエンジンに返信する（ステップＳ１３７，Ｓ１３８）。
【００８４】
その際、該当するキューＱ０のアサインを解除する（図１４，ステップＳ１３９）。
【００８５】
そしてその後さらにＤＭＡエンジンから新たな読出要求が発行された場合（図１８のステップＳ１４０）、これがＤＭＡ要求アービタ３ａを介し要求制御部３ｂで受信される（ステップＳ１４１）と、キューの空き状態が確認される（ステップＳ１４２）。上記アサインの解除によりこの時点で再びキューはすべて未使用状態となっているため、再び番号の若いキューＱ０がアサインされる（図１５、ステップＳ１５１）。
【００８６】
上記ステップＳ１４２以後の動作（ステップＳ１４３乃至Ｓ１５１）は、図１６とともに上述のステップＳ１２３乃至１３２の動作と同様である。ただし、当該キューＱ０に対応するフラグカウンタＣ０はすでに前回の読出要求発行後に０から１にインクリメントされているため、この場合、該当する読出要求発行後さらに１から２にインクリメントされる（ステップＳ１５２）。
【００８７】
次に上記「連続要求受信時」の動作につき、図１９乃至図２７とともに説明する。
【００８８】
最初にＤＭＡエンジンから読出要求が発行された際の動作（図２３乃至２４中、ステップＳ１６１乃至Ｓ１８０）は、図１６とともに上述の動作（ステップＳ１２１乃至Ｓ１３３）と同様である。その結果、図１９に示すごとく、キューＱ０が使用中となり、対応するフラグカウンタＣ０が１にインクリメントされた状態となる。
【００８９】
ここでは当該読出要求に対するコンプレションパケットの返信がある前に、ＤＭＡエンジンから他の読出要求が発行された場合を想定する。
【００９０】
その場合も図２３乃至図２４とともに上述の最初の読出要求発行時と同様の動作（図２４乃至図２５中、ステップＳ１８１乃至Ｓ２００）が実行される。ただしこの場合、すでにキューＱ０は使用中なため（図１９）、ここでは残りの空きキュー中、若い番号のキューＱ１がアサインされる（ステップＳ１９２）。そして当該２回目の読出要求発行後、該当するフラグカウンタＣ１が１にインクリメントされる（図２０）。この場合、新たにアサインされたキューＱ１に対応するフラグカウンタＣ１の値は未だインクリメントされていない状態（０）なので、この値が当該発行に係る読出要求に埋め込まれている。
【００９１】
なお、ほぼ同時に複数のＤＭＡエンジンから読出要求が発行された場合も同様の動作がなされる。
【００９２】
その後これら一回目及び２回目の読出要求に対するコンプレションパケットの返信がある前に、ＤＭＡエンジンからさらに他の読出要求が発行された場合を想定する。
【００９３】
その場合も図２３乃至図２４とともに上述の最初の読出要求発行時と同様の動作（図２５乃至図２６中、ステップＳ２０１乃至Ｓ２２０）が実行される。ただしこの場合、すでにキューＱ０、Ｑ１は使用中なため（図２０）、ここでは残りの空きキュー中、若い番号のキューＱ２がアサインされる（ステップＳ２１２）。そして当該３回目の読出要求発行後、該当するフラグカウンタＣ２が１にインクリメントされる。この場合、新たにアサインされたキューＱ２に対応するフラグカウンタＣ２の値は未だインクリメントされていない状態（０）なので、この値が当該発行に係る読出要求に埋め込まれている。
【００９４】
さらにこれら１乃至３回目の読出要求に対するコンプレションパケットの返信がある前にＤＭＡエンジンからさらに他の読出要求が発行された場合も同様の動作がなされる（図２６乃至図２７中、ステップＳ２２１乃至Ｓ２４０）。
【００９５】
その結果、すべてのキューが使用中となり、これに対応してすべてのフラグカウンタも１にインクリメントされた状態となる（図２１）。
【００９６】
ここで、最初に２回目の読出要求（図２４中、ステップＳ１８１）に対するコンプレションパケットが得られた場合（図２７中、ステップＳ２４１）を想定する。
【００９７】
この場合、図１７とともに上述の動作（ステップＳ１３５乃至Ｓ１３８）と同様の動作（ステップＳ２４２乃至Ｓ２４６）が実行される。その結果該当するキューＣ１のアサインが解除され（ステップＳ２４６）、図２２に示すごとく、アサインが解除されたキューＣ１が未使用状態となり、さらにＤＭＡエンジンから読出要求が発行された場合に対応可能とされる。
【００９８】
なおこのようにフラグカウンタは対応するキューがアサインされ、該当する読出要求の発行の都度、インクリメントされる。また、キューには要求元のＤＭＡエンジンの識別番号であるタグも格納される。そして同じＤＭＡエンジンからの読出要求に対する正しいコンプレションパケットが得られるまで、最初の読出要求発行の際にアサインされたキューは、当該ＤＭＡエンジンについてのアサイン状態が維持される。
【００９９】
他方、その間に当該アサイン中のキューについてタイムアウトが検出されればその都度同じＤＭＡエンジンから読出要求が再発行される。そして再発行の都度、対応するフラグカウンタがインクリメントされる。そしてその際、当該キューに格納されるフラグの値も対応して更新される。
【０１００】
そして当該キューのアサインに係るＤＭＡエンジンのタグが埋め込まれたコンプレションパケットが得られた場合、そこに埋め込まれているフラグが参照され、当該キューに格納された最新のフラグと合致しない場合には破棄されるが、合致する際には正しいコンプレションパケットと判定される。その場合コンプレションパケットが要求元に返信されるととに、当該キューのアサインが解除される。
【０１０１】
したがってコンプレションパケットの正しい識別が可能となり、識別誤りによるデータ読み出しの誤りの発生を確実に回避可能となる。
【０１０２】
上記説明ではフラグの値を他の読出に係る情報とともにキューに格納する例を述べたが、この方法に限られない。フラグカウンタは読出要求発行後にインクリメントされる。このため、コンプレションパケットが得られた場合、そこに埋め込まれたフラグの値と、現在のフラグカウンタの値とを比較し、コンプレションパケットのフラグの値がフラグカウンタの値より１少ない値であった場合に合致と判定するように構成することも可能である。そのように構成することにより、フラグの値をキューに格納する必要が無くなる。：
なお上記の説明では本発明の実施の形態として、図２乃至４とともに上述のファイル制御システムにおける動作の流れの中で、ハードディスク装置Ｄ１に対しデータを要求する側のセントラルモジュール１０−０において、ＤＭＡコントローラ３がＭＣＨ２を介し、メモリ４から当該ハードディスク装置Ｄ１に対する読出要求のコマンドのデータを読み出す場面（ステップＳ１２乃至Ｓ１７）を例にとって説明した。
【０１０３】
しかしながら本発明の実施の形態はこれに限られず、例えば上記読み出し要求先のハードディスク装置Ｄ１に係るセントラルモジュール１０−１中の、ＤＭＡコントローラ３が同じセントラルモジュール１０−１中のメモリ４からデータを読み出す場面、あるいはデバイスコントローラＤＣ１がディスク装置Ｄ１からデータを読み出す場面等、様々な場面において同様に適用可能である。
【０１０４】
本発明は以下の付記に記載の構成をとり得る。
（付記１）
所定の格納データの読み出しのために読出要求を発行する読出要求発行段階と、
発行した読出要求に対する読出データの到来が所定時間内に到来しない場合に再度読出要求を発行する読出要求再発行段階と、
前記読出要求再発行段階では、前記再度の読出要求にフラグを付加することにより最初に発行した読出要求と異なったものとすることを特徴とするデータ読出方法。
（付記２）
前記読出要求の発行は、発行された読出要求に対する読出データの順番が保証されない構成のデータ読出システムに対してなされてなる付記１に記載のデータ読出方法。
（付記３）
読出データはパケット形式とされてなり、
前記読出要求に付加したフラグは、当該読出要求に対して得られるパケットの未使用領域に埋め込まれた状態で当該パケットとともに提供される構成とされてなる付記１に記載のデータ読出方法。
（付記４）
同時に複数のデータ読出要求を受け付ける構成の複数のキューを設け、
各キューごとに前記読出要求に付加するフラグを決定するフラグカウンタを設け、
前記フラグカウンタは該当するキューについてデータ読出要求が発行されるたびに更新される構成とされてなる付記１に記載のデータ読出方法。
（付記５）
前記読出データはDMA転送により要求元に対し提供される構成とされてなる付記１に記載のデータ読出方法。
（付記６）
前記読出データはＰＣＩ−Ｅｘｐｒｅｓｓ方式によるインタフェースを介して得られる構成とされてなる付記１に記載のデータ読出方法。
（付記７）
所定の格納データの読み出しのために読出要求を発行する読出要求発行手段と、
発行した読出要求に対する読出データの到来が所定時間内に到来しない場合に再度読出要求を発行する読出要求再発行手段と、
前記読出要求再発行段階では、前記再度の読出要求にフラグを付加することにより最初に発行した読出要求と異なったものとすることを特徴とするデータ読出装置。
（付記８）
前記読出要求の発行は、発行された読出要求に対する読出データの順番が保証されない構成のデータ読出システムに対してなされてなる付記７に記載のデータ読出装置。
（付記９）
読出データはパケット形式とされてなり、
前記読出要求に付加したフラグは、当該読出要求に対し得られるパケットの未使用領域に埋め込まれた状態で当該パケットとともに提供される構成とされてなる付記７に記載のデータ読出装置。
（付記１０）
同時に複数のデータ読出要求を受け付ける複数のキューを設け、
各キューごとに前記読出要求に付加するフラグを決定するフラグカウンタを設け、
前記フラグカウンタは該当するキューについてデータ読出要求が発行されるたびに更される構成とされてなる付記７に記載のデータ読出装置。
（付記１１）
前記読出データはDMA転送により要求元に対し提供される構成とされてなる付記７に記載のデータ読出装置。
（付記１２）
前記読出データはＰＣＩ−Ｅｘｐｒｅｓｓ方式によるインタフェースを介して得られる構成とされてなる付記７に記載のデータ読出装置。
【図面の簡単な説明】
【０１０５】
【図１】本発明の一実施例によるファイル制御システムの概略構成図である。
【図２】図１に示すファイル制御システムにおけるデータ転送動作を説明するためのシーケンス図（その１）である。
【図３】図１に示すファイル制御システムにおけるデータ転送動作を説明するためのシーケンス図（その２）である。
【図４】図１に示すファイル制御システムにおけるデータ転送動作を説明するためのシーケンス図（その３）である。
【図５】図１に示すファイル制御システムを構成する各セントラルモジュールに含まれるDMAコントローラの機能を説明するためのブロック図である。
【図６】図１に示すファイル制御システムにおいてデータ転送パケットのヘッダの構成例について説明するための図である。
【図７】図５に示すDMAコントローラが実行するDMA転送動作（通常時）を説明するためのシーケンス図である。
【図８】図５に示すDMAコントローラが実行するDMA転送動作（タイムアウト時）を説明するためのシーケンス図（その１）である。
【図９】図５に示すDMAコントローラが実行するDMA転送動作（タイムアウト時）を説明するためのシーケンス図（その２）である。
【図１０】図５に示すDMAコントローラが実行するDMA転送動作（タイムアウト時）を説明するためのシーケンス図（その３）である。
【図１１】図５に示すDMAコントローラが実行するフラグの割り付け動作を説明するための図（その１）である。
【図１２】図５に示すDMAコントローラが実行するフラグの割り付け動作を説明するための図（その２）である。
【図１３】図５に示すDMAコントローラが実行するフラグの割り付け動作を説明するための図（その３）である。
【図１４】図５に示すDMAコントローラが実行するフラグの割り付け動作を説明するための図（その４）である。
【図１５】図５に示すDMAコントローラが実行するフラグの割り付け動作を説明するための図（その５）である。
【図１６】図５に示すDMAコントローラが実行するフラグの割り付け動作を説明するためのシーケンス図（その１）である。
【図１７】図５に示すDMAコントローラが実行するフラグの割り付け動作を説明するためのシーケンス図（その２）である。
【図１８】図５に示すDMAコントローラが実行するフラグの割り付け動作を説明するためのシーケンス図（その３）である。
【図１９】図５に示すDMAコントローラが実行する、連続的にデータ読出要求を受信した場合のフラグの割り付け動作を説明するための図（その１）である。
【図２０】図５に示すDMAコントローラが実行する、連続的にデータ読出要求を受信した場合のフラグの割り付け動作を説明するための図（その２）である。
【図２１】図５に示すDMAコントローラが実行する、連続的にデータ読出要求を受信した場合のフラグの割り付け動作を説明するための図（その３）である。
【図２２】図５に示すDMAコントローラが実行する、連続的にデータ読出要求を受信した場合のフラグの割り付け動作を説明するための図（その４）である。
【図２３】図５に示すDMAコントローラが実行する、連続的にデータ読出要求を受信した場合のフラグの割り付け動作を説明するためのシーケンス図（その１）である。
【図２４】図５に示すDMAコントローラが実行する、連続的にデータ読出要求を受信した場合のフラグの割り付け動作を説明するためのシーケンス図（その２）である。
【図２５】図５に示すDMAコントローラが実行する、連続的にデータ読出要求を受信した場合のフラグの割り付け動作を説明するためのシーケンス図（その３）である。
【図２６】図５に示すDMAコントローラが実行する、連続的にデータ読出要求を受信した場合のフラグの割り付け動作を説明するためのシーケンス図（その４）である。
【図２７】図５に示すDMAコントローラが実行する、連続的にデータ読出要求を受信した場合のフラグの割り付け動作を説明するためのシーケンス図（その５）である。
【符号の説明】
【０１０６】
１  CPU
２  メモリコントロールハブ
３  DMAコントローラ
３ａ  ＤＭＡ要求アービタ
３ｂ  要求制御部
３ｃ  キュー管理部
４  メモリ
１０−１，１０−２，１０−ｎ、１０−ｍ  セントラルモジュール
２０  ルータ
H0,H1  ホスト
D0,D1  ハードディスク装置
DC0,DC1  デバイスコントローラ
DE0,DE1,DE2,DE3  DMAエンジン
Q0,Q1,Q2,Q3  キュー
C0,C1,C2,C3  フラグカウンタ
【図１】
0004555791.tif 000002
【図２】
0004555791.tif 000003
【図３】
0004555791.tif 000004
【図４】
0004555791.tif 000005
【図５】
0004555791.tif 000006
【図６】
0004555791.tif 000007
【図７】
0004555791.tif 000008
【図８】
0004555791.tif 000009
【図９】
0004555791.tif 000010
【図１０】
0004555791.tif 000011
【図１１】
0004555791.tif 000012
【図１２】
0004555791.tif 000013
【図１３】
0004555791.tif 000014
【図１４】
0004555791.tif 000015
【図１５】
0004555791.tif 000016
【図１６】
0004555791.tif 000017
【図１７】
0004555791.tif 000018
【図１８】
0004555791.tif 000019
【図１９】
0004555791.tif 000020
【図２０】
0004555791.tif 000021
【図２１】
0004555791.tif 000022
【図２２】
0004555791.tif 000023
【図２３】
0004555791.tif 000024
【図２４】
0004555791.tif 000025
【図２５】
0004555791.tif 000026
【図２６】
0004555791.tif 000027
【図２７】
0004555791.tif 000028