(57)【特許請求の範囲】
【請求項１】
順序保証が必要な処理および順序保証が不要な処理のいずれかの処理に用いられるリクエストをバッファリングするバッファリング装置であって、
処理を待機する複数のリクエストと、前記複数のリクエストの各々について先行する他のリクエストの処理完了を待機する必要があるか否かを示す待ち合わせフラグとを対応付けて記憶する記憶手段と、
前記記憶手段から処理対象のリクエストを１つずつ読み出す読出手段と、
前記記憶手段に記憶された各リクエストについて前記記憶手段に記憶された先行する他のリクエストの処理が完了するまで前記読出手段による読み出しを待機すべきか否かを各リクエストに対応する待ち合わせフラグに設定し、各リクエストに対応付けられた待ち合わせフラグに応じて、先行する他のリクエストの処理完了を待機する必要がないリクエストを前記読出手段によって読み出させる制御手段とを有し、
前記記憶手段は、
複数のキューを備え、各キューにそれぞれ１つのリクエストと、当該１つのリクエストを記憶するキュー以外の複数のキューそれぞれに対応する複数の待ち合わせフラグとを対応付けて記憶し、
前記制御手段は、
１つのリクエストが、当該１つのリクエストを記憶するキューに含まれる複数の待ち合わせフラグの各々に対応するキューに格納された他のリクエストの処理完了を待機する必要があるか否かを、前記１つのリクエストを記憶するキューに含まれる複数の待ち合わせフラグそれぞれに設定することを特徴とするバッファリング装置。
【請求項２】
前記制御手段は、
リクエストが順序保証が必要な処理に用いられるか否かに応じて待ち合わせフラグを設定することを特徴とする請求項１記載のバッファリング装置。
【請求項３】
前記制御手段は、
順序保証が必要な処理に用いられるリクエストの待ち合わせフラグを、当該リクエストよりも先に前記記憶手段に記憶されたリクエストの処理完了を待機するように設定することを特徴とする請求項２記載のバッファリング装置。
【請求項４】
前記制御手段は、
順序保証が不要な処理に用いられるリクエストの待ち合わせフラグを、前記読出手段によって読み出し中のリクエストの読み出し完了のみを待機するように設定することを特徴とする請求項２記載のバッファリング装置。
【請求項５】
前記記憶手段にリクエストを１つずつ書き込む書込手段をさらに有し、
前記制御手段は、
前記書込手段がリクエストを書き込む際に、待ち合わせフラグをリクエストに付加させた上で書き込ませることを特徴とする請求項１記載のバッファリング装置。
【請求項６】
前記記憶手段はさらに、
各リクエストの処理の状態を示すステートをリクエストごとに対応付けて記憶し、
前記制御手段は、
前記記憶手段に記憶されたリクエストそれぞれについて読み出し待機、応答待機、および処理完了のいずれかのステートを決定し、前記記憶手段に記憶されたリクエストのステートが遷移するとステートの遷移を待ち合わせフラグに反映することを特徴とする請求項１記載のバッファリング装置。
【請求項７】
前記制御手段は、
いずれかのリクエストのステートが応答待機から処理完了に遷移した場合、順序保証が必要な処理に用いられるリクエストの待ち合わせフラグにおいて、ステートが遷移したリクエストの処理完了を待機不要に変更することを特徴とする請求項６記載のバッファリング装置。
【請求項８】
前記制御手段は、
いずれかのリクエストのステートが読み出し待機から応答待機に遷移した場合、順序保証が不要な処理に用いられるリクエストの待ち合わせフラグにおいて、ステートが遷移したリクエストの処理完了を待機不要に変更することを特徴とする請求項６記載のバッファリング装置。
【請求項９】
順序保証が必要な処理および順序保証が不要な処理のいずれかの処理に用いられるリクエストをバッファリングするバッファリング方法であって、
処理を待機する複数のリクエストと、前記複数のリクエストの各々について先行する他のリクエストの処理完了を待機する必要があるか否かを示す待ち合わせフラグとを対応付けて複数のキューを備えた記憶部に記憶する記憶工程と、
前記記憶工程にて記憶された各リクエストについて、先行する他のリクエストの処理が完了するまで読み出しを待機すべきか否かを各リクエストに対応する待ち合わせフラグに設定する設定工程と、
前記設定工程にて各リクエストに対応付けて設定された待ち合わせフラグに応じて、先行する他のリクエストの処理完了を待機する必要がないリクエストを読み出すように読出順序を制御する制御工程と、
前記制御工程における読出順序に従って処理対象のリクエストを１つずつ読み出す読出工程とを有し、
前記記憶工程は、
前記記憶部の各キューにそれぞれ１つのリクエストと、当該１つのリクエストを記憶するキュー以外の複数のキューそれぞれに対応する複数の待ち合わせフラグとを対応付けて記憶し、
前記設定工程は、
１つのリクエストが、当該１つのリクエストを記憶するキューに含まれる複数の待ち合わせフラグの各々に対応するキューに格納された他のリクエストの処理完了を待機する必要があるか否かを、前記１つのリクエストを記憶するキューに含まれる複数の待ち合わせフラグそれぞれに設定することを特徴とするバッファリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、順序保証が必要な処理および順序保証が不要な処理のいずれかの処理に用いられるデータをバッファリングするバッファリング装置およびバッファリング方法に関し、特に、小さい回路規模で順序保証が必要な処理と不要な処理とを実行可能にすることができるバッファリング装置およびバッファリング方法に関する。
【背景技術】
【０００２】
一般に、コンピュータなどの情報処理装置によって行われる処理には、順序保証すべきものと順序保証が不要なものとがある。順序保証すべき処理においては、前段の処理が完了するまでは次の処理が実行されないのに対し、順序保証が不要な処理においては、実行可能であれば、２つ以上の処理が並行して実行される。【０００３】
これらの２種類の処理が混在している場合、通常は処理の順序を調停することが不可欠となる。具体的には、例えば特許文献１に記載されているように、処理対象のデータを分類して複数のバッファに一時的に記憶し、処理の優先度や順序を考慮しながら、データをいずれかのバッファから読み出すことが行われる。【０００４】
【特許文献１】特開平１０−２０７８３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、順序保証のために複数のバッファが設けられる場合、回路規模が増大してしまうという問題がある。すなわち、順序保証が必要な処理と順序保証が不要な処理との両方が混在している場合には、少なくとも順序保証が必要な処理対象のデータ用のバッファと順序保証が不要な処理対象のデータ用のバッファとの２つのバッファが必要となり、バッファを構成する回路が複雑かつ大規模となってしまう。【０００６】
本発明はかかる点に鑑みてなされたものであり、小さい回路規模で順序保証が必要な処理と不要な処理とを実行可能にすることができるバッファリング装置およびバッファリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本願が開示するバッファリング装置は、１つの態様において、順序保証が必要な処理および順序保証が不要な処理のいずれかの処理に用いられるリクエストをバッファリングするバッファリング装置であって、処理を待機する複数のリクエストと、前記複数のリクエストの各々について先行する他のリクエストの処理完了を待機する必要があるか否かを示す待ち合わせフラグとを対応付けて記憶する記憶手段と、前記記憶手段から処理対象のリクエストを１つずつ読み出す読出手段と、前記記憶手段に記憶された各リクエストについて前記記憶手段に記憶された先行する他のリクエストの処理が完了するまで前記読出手段による読み出しを待機すべきか否かを各リクエストに対応する待ち合わせフラグに設定し、各リクエストに対応付けられた待ち合わせフラグに応じて、先行する他のリクエストの処理完了を待機する必要がないリクエストを前記読出手段によって読み出させる制御手段とを有し、前記記憶手段は、複数のキューを備え、各キューにそれぞれ１つのリクエストと、当該１つのリクエストを記憶するキュー以外の複数のキューそれぞれに対応する複数の待ち合わせフラグとを対応付けて記憶し、前記制御手段は、１つのリクエストが、当該１つのリクエストを記憶するキューに含まれる複数の待ち合わせフラグの各々に対応するキューに格納された他のリクエストの処理完了を待機する必要があるか否かを、前記１つのリクエストを記憶するキューに含まれる複数の待ち合わせフラグそれぞれに設定することを特徴とする。
【発明の効果】
【００１６】
本発明によれば、処理を待機する複数のデータを記憶し、記憶された各データがどのデータの処理完了を待機すべきかを示す待ち合わせフラグをデータそれぞれに対応付けて設定し、各データに対応付けられた待ち合わせフラグに応じて読出順序を制御しながら処理対象のデータを１つずつ読み出す。このため、順序保証の要不要に関わらずデータを１箇所に混在させて記憶させても、各データの待ち合わせフラグを参照して適切な順序でデータを読み出すことができ、小さい回路規模で順序保証が必要な処理と不要な処理とを実行可能にすることができる。【００１７】
また、本発明によれば、データが順序保証が必要な処理に用いられるか否かに応じて待ち合わせフラグを設定するため、順序保証が必要な処理に用いられるデータについては、先行するデータの処理完了を待機するように待ち合わせフラグを設定する一方、順序保証が不要な処理に用いられるデータについては、先行するデータの処理完了を待機しないように待ち合わせフラグを設定し、いずれのデータについても処理遅延を最小限に抑制することができる。【００１８】
また、本発明によれば、順序保証が必要な処理に用いられるデータの待ち合わせフラグを、当該データよりも先に記憶されたデータの処理完了を待機するように設定するため、順序保証が必要なデータに関しては、１つのデータの処理完了後に次のデータを読み出すことができ、確実に順序を維持することができる。【００１９】
また、本発明によれば、順序保証が不要な処理に用いられるデータの待ち合わせフラグを、読み出し中のデータの読み出し完了のみを待機するように設定するため、順序保証が不要なデータに関しては、データの伝送路が使用可能になると即座に次のデータを読み出すことができ、処理遅延を抑制することができる。【００２０】
また、本発明によれば、データを１つずつ書き込む際に、待ち合わせフラグに関する待ち合わせフラグ情報をデータに付加した上で書き込むため、各データと待ち合わせフラグとの対応が明確に記憶され、正確に読み出しの順序を制御することができる。【００２１】
また、本発明によれば、記憶されたデータそれぞれについて読み出し待機、応答待機、および処理完了のいずれかのステートを決定し、データのステートが遷移するとステートの遷移を待ち合わせフラグに反映する。このため、読み出されたデータに対する処理中に応答がある場合でも、より細かくデータの読み出しタイミングを制御することができ、処理遅延をさらに抑制することができる。【００２２】
また、本発明によれば、いずれかのデータのステートが応答待機から処理完了に遷移した場合、順序保証が必要な処理に用いられるデータの待ち合わせフラグにおいて、ステートが遷移したデータの処理完了を待機不要に変更する。このため、順序保証が必要なデータの待ち合わせフラグを効率良く更新するとともに、データが読み出されるまでの待機時間を最小限に抑制することができる。【００２３】
また、本発明によれば、いずれかのデータのステートが読み出し待機から応答待機に遷移した場合、順序保証が不要な処理に用いられるデータの待ち合わせフラグにおいて、ステートが遷移したデータの処理完了を待機不要に変更する。このため、順序保証が不要なデータの待ち合わせフラグを効率良く更新するとともに、データが読み出されるまでの待機時間を最小限に抑制することができる。
【図面の簡単な説明】
【００２４】
【図１】図１は、本発明の一実施の形態に係る情報処理装置の要部構成を示すブロック図である。
【図２】図２は、一実施の形態に係るＩ／Ｏコントローラの内部構成を示すブロック図である。
【図３】図３は、一実施の形態に係るキューのエントリの一例を示す図である。
【図４】図４は、一実施の形態に係るＩ／Ｏコントローラの動作を示すフロー図である。
【図５】図５は、一実施の形態に係る待ち合わせフラグの設定動作を示すフロー図である。
【図６】図６は、一実施の形態に係るリクエストの発行動作を示すフロー図である。
【図７−１】図７−１は、一実施の形態に係る待ち合わせフラグの一覧の具体例を示す図である。
【図７−２】図７−２は、図７−１に続く図である。
【図７−３】図７−３は、図７−２に続く図である。
【図７−４】図７−４は、図７−３に続く図である。
【図７−５】図７−５は、図７−４に続く図である。
【図７−６】図７−６は、図７−５に続く図である。
【図７−７】図７−７は、図７−６に続く図である。
【図７−８】図７−８は、図７−７に続く図である。
【図７−９】図７−９は、図７−８に続く図である。
【図７−１０】図７−１０は、図７−９に続く図である。
【図７−１１】図７−１１は、図７−１０に続く図である。
【図７−１２】図７−１２は、図７−１１に続く図である。
【符号の説明】
【００２５】
１００  Ｉ／Ｏコントローラ
１１０  書込部
１２０  バッファ
１３０  読出部
１４０  順序制御部
２００  システムコントローラ
３００  ＣＰＵ
４００  メモリ
【発明を実施するための最良の形態】
【００２６】
以下、本発明の一実施の形態について、図面を参照して詳細に説明する。以下においては、情報処理装置におけるリクエスト発行を例に挙げて説明するが、本発明は、例えばＡＴＭ（Asynchronous  Transfer  Mode）セルの転送におけるバッファリングなどにも適用することができる。【００２７】
図１は、本発明の一実施の形態に係る情報処理装置の要部構成を示すブロック図である。同図に示す情報処理装置は、Ｉ／Ｏ（Input/Output）コントローラ１００、システムコントローラ２００、ＣＰＵ３００、およびメモリ４００を有している。【００２８】
Ｉ／Ｏコントローラ１００は、情報処理装置と他装置間のデータの入出力を制御する。具体的には、Ｉ／Ｏコントローラ１００は、他装置から出力される様々な処理要求のためのリクエストをシステムコントローラ２００へ出力する。このとき、Ｉ／Ｏコントローラ１００は、順序保証が必要なリクエストに関しては、このリクエスト以前にＩ／Ｏコントローラ１００に入力されたリクエスト（以下「先行リクエスト」という）の発行が完了した後に出力する。なお、リクエストの発行元である他装置は、情報処理装置と同一装置内にあるものでも良く、情報処理装置の外部機器などでも良い。Ｉ／Ｏコントローラ１００と他装置とは、例えばＰＣＩエクスプレス（PCI  Express）などによって接続されている。なお、本実施の形態においては、リクエストを発行する他装置は１つの装置とは限らず、複数の他装置から様々なリクエストが発行されても良い。【００２９】
システムコントローラ２００は、ＣＰＵ３００やメモリ４００を制御し、他装置からのリクエストをＣＰＵ３００へ出力し、ＣＰＵ３００による演算処理の結果をＩ／Ｏコントローラ１００経由でリクエスト発行元の他装置へ出力する。【００３０】
ＣＰＵ３００は、メモリ４００に記憶されたプログラムやデータを読み出して演算処理を行い、その結果をシステムコントローラ２００へ出力する。図１においては、情報処理装置がＣＰＵ３００を２つ有する構成としたが、ＣＰＵ３００は１つでも良く、３つ以上でも良い。【００３１】
メモリ４００は、ＣＰＵ３００によって使用されるプログラムやデータを記憶しており、例えば複数のＤＩＭＭ（Dual  Inline  Memory  Module）などから構成されている。【００３２】
図２は、本実施の形態にかかるＩ／Ｏコントローラ１００の内部構成を示すブロック図である。同図においては、Ｉ／Ｏコントローラ１００のリクエストの出力に関する部分のみを示している。図２に示すＩ／Ｏコントローラ１００は、書込部１１０、バッファ１２０、読出部１３０、および順序制御部１４０を有している。【００３３】
書込部１１０は、他装置から出力されたリクエストをバッファ１２０内のいずれかの空いているキューに書き込む。このとき、書込部１１０は、順序制御部１４０の指示に従って、リクエストのステート情報および待ち合わせフラグ情報を付加し、得られたエントリを空きキューに書き込む。【００３４】
ここでエントリは、例えば図３に示すように、リクエストの本体に相当するコマンドおよびアドレスに、ステートおよび待ち合わせフラグが付加されたフォーマットとなっている。ステートとは、リクエストの状態を表しており、先行リクエストの発行を待機している状態（以下、この状態を「ＰＲ」という）、自己の発行を待機している状態（以下、この状態を「ＳＲ」という）、システムコントローラ２００からの受信応答を待機している状態（以下、この状態を「ＲＡ」という）、およびリクエスト発行が完了し無効化された状態（以下、この状態を「ＩＮＶ」という）の４種類があり、この順に遷移していく。また、待ち合わせフラグとは、各リクエストが発行の完了を待機すべきリクエストを示すものであり、例えばキュー＃１に記憶されたリクエストがキュー＃０に記憶されたリクエストの発行の完了を待機すべきである場合は、キュー＃１のリクエストの待ち合わせフラグにおいて、キュー＃０のフラグが立つ。【００３５】
バッファ１２０は、複数のリクエストを記憶可能な記憶容量を有しており、それぞれ１つのリクエストを記憶する領域である複数（図２では８つ）のキューに別れている。バッファ１２０内のキュー＃０〜＃７は、リクエストにステート情報および待ち合わせフラグ情報が付加されたエントリを記憶する。【００３６】
読出部１３０は、順序制御部１４０の指示に従って、バッファ１２０内のいずれかのキューからエントリに含まれているリクエストを読み出し、システムコントローラ２００へ出力する。【００３７】
順序制御部１４０は、他装置から書込部１１０へ新規リクエストが入力されると、このリクエストに関するステートをＰＲとし、リクエストのタイプおよび先行リクエストの有無などに応じて待ち合わせフラグを設定し、バッファ１２０内の空きキューへのエントリの書き込みを書込部１１０へ指示する。また、順序制御部１４０は、バッファ１２０内の各キュー＃０〜＃７のステートおよび待ち合わせフラグを参照し、それぞれのキューに記憶されているリクエストの発行順序を制御しながら、リクエストの読み出しを読出部１３０へ指示する。そして、順序制御部１４０は、リクエストの読み出しに伴ってステートおよび待ち合わせフラグが変化すると、バッファ１２０内の各キュー＃０〜＃７のエントリのステート情報および待ち合わせフラグ情報を書き換える。順序制御部１４０による具体的なリクエスト発行順序の制御については、後に詳述する。【００３８】
次いで、上記のように構成されたＩ／Ｏコントローラ１００の動作について、図４〜６に示すフロー図を参照しながら説明する。【００３９】
まず、他装置から新規リクエストが出力され、Ｉ／Ｏコントローラ１００内の書込部１１０に受け付けられると（ステップＳ１００）、順序制御部１４０によって、バッファ１２０内のキュー＃０〜＃７から空いているキューが選択される（ステップＳ２００）。ここで、キューが空いている状態とは、そもそもキューにエントリが記憶されていない状態か、キューに記憶されたエントリのステートがＩＮＶである状態のことである。ステートがＩＮＶであれば、対応するリクエストは既に発行済みであり、システムコントローラ２００からの受信応答も返ってきているため、リクエストは無効化されており、無いものとして扱うことができる。複数のキューが空いている場合は、順序制御部１４０によって、任意の空きキューの選択が可能だが、例えば番号が最も小さい空きキューが新規リクエスト用のキューとして選択される。【００４０】
そして、順序制御部１４０によって、新規リクエストのステートをＰＲに設定するように書込部１１０へ指示が出される（ステップＳ３００）。新規リクエストは、常に先行リクエストの発行待機を示すＰＲとされ、もし先行リクエストがすべて発行済みであったり、先行リクエストが無かったりすれば、キューに新規リクエストが書き込まれた後に、順序制御部１４０によって、このリクエストのステートが自己の発行待機を示すＳＲに書き換えられる。【００４１】
書込部１１０によって新規リクエストのステートが設定された後、順序制御部１４０によってこのリクエストの待ち合わせフラグが決定され、書込部１１０によって設定される（ステップＳ４００）。待ち合わせフラグの設定は、図５に示すフロー図に従って行われる。【００４２】
すなわち、順序制御部１４０によって、新規リクエストが順序保証を必要とするｓ（strong  order）タイプのリクエストか順序保証が不要なｗ（weakly  order）タイプのリクエストかが判定される（ステップＳ４０１）。新規リクエストがｗタイプであれば（ステップＳ４０１Ｎｏ）、このリクエストは先行リクエストの発行完了を待つ必要が無いため、すべてのキューに対応するフラグが待ち合わせ不要を示す０に設定される（ステップＳ４０４）。【００４３】
一方、新規リクエストがｓタイプであれば（ステップＳ４０１Ｙｅｓ）、このリクエストは先行リクエストの発行完了を待つ必要があり、順序制御部１４０によって、バッファ１２０内のいずれかのキューに先行リクエストがあるか否かが判定される（ステップＳ４０２）。この結果、いずれのキューにも先行リクエストが無ければ（ステップＳ４０２Ｎｏ）、全フラグが０に設定され（ステップＳ４０４）、いずれかのキューに先行リクエストがあれば（ステップＳ４０２Ｙｅｓ）、この先行リクエストに対応するキューのフラグが待ち合わせ必要を示す１に設定される（ステップＳ４０３）。【００４４】
このように他装置から新規リクエストが出力されるたびに、新規リクエストのタイプと先行リクエストの有無とから待ち合わせフラグを設定しておくことにより、バッファ１２０の各キューにリクエストが書き込まれた時点で発行可能であるか否かを待ち合わせフラグのみから判断することができる。【００４５】
図４に戻って、新規リクエストのステートおよび待ち合わせフラグが設定されると、書込部１１０によって、新規リクエストにステート情報および待ち合わせフラグ情報が付加されたエントリが順序制御部１４０によって選択されたバッファ１２０内の空きキューに書き込まれる（ステップＳ５００）。その後、順序制御部１４０によって、各キュー＃０〜＃７のリクエストの発行順序が決定され、決定された発行順序で読出部１３０によってリクエストが読み出されて発行される（ステップＳ６００）。具体的には、リクエスト発行は、順序制御部１４０および読出部１３０が図６に示すフロー図に従って動作することにより行われる。【００４６】
すなわち、順序制御部１４０によって、バッファ１２０内のキュー＃０〜＃７に記憶されているステートがＰＲのリクエストが選択される（ステップＳ６０１）。このとき、ステートがＰＲのリクエストが複数ある場合は、番号が最も小さいキューのリクエストが選択される。そして、順序制御部１４０によって、選択された発行対象のリクエストの待ち合わせフラグが確認され、全フラグが０であるか否かが判定される（ステップＳ６０２）。【００４７】
この結果、待ち合わせフラグがすべて０であれば（ステップＳ６０２Ｙｅｓ）、先行リクエストの発行を待つ必要が無いため、発行対象のリクエストのステートが発行待機を示すＳＲに設定され（ステップＳ６０３）、Ｉ／Ｏコントローラ１００とシステムコントローラ２００との間の伝送路が開放され次第、読出部１３０によってリクエストが読み出され（ステップＳ６０４）、システムコントローラ２００へ出力される。そして、順序制御部１４０によって、バッファ１２０内の読み出されたリクエストのステートが受信応答の待機を示すＲＡに書き換えられる（ステップＳ６０５）。その後、システムコントローラ２００からの受信応答（ＡＣＫ）がＩ／Ｏコントローラ１００へ返ってくると、順序制御部１４０によって、バッファ１２０内の読み出されたリクエストのステートが無効化を示すＩＮＶに書き換えられる。これにより、発行対象のリクエストの発行が完了する。【００４８】
一方、発行対象リクエストの待ち合わせフラグに１が含まれていれば（ステップＳ６０２Ｎｏ）、順序制御部１４０によって、このリクエストがｓタイプであるか否かが確認される（ステップＳ６０６）。そして、発行対象のリクエストがｓタイプである場合は（ステップＳ６０６Ｙｅｓ）、フラグが１であるリクエストが発行され、ステートがＩＮＶに遷移したか否かが監視される（ステップＳ６０７）。フラグが１であるリクエストのステートがＩＮＶに遷移すると（ステップＳ６０７Ｙｅｓ）、発行完了を待つ必要があった先行リクエストの発行が完了したことになるため、発行対象のリクエストの待ち合わせフラグにおいて、この先行リクエストのフラグが０に書き換えられ（ステップＳ６０８）、再び全フラグが０になったか否かが判定される（ステップＳ６０２）。【００４９】
また、発行対象のリクエストがｗタイプである場合は（ステップＳ６０６Ｎｏ）、フラグが１であるリクエストが読出部１３０によって読み出され、ステートがＲＡに遷移したか否かが監視される（ステップＳ６０９）。そして、フラグが１であるリクエストのステートがＲＡに遷移すると（ステップＳ６０９Ｙｅｓ）、先行リクエストによる伝送路の占有がなくなったことになるため、発行対象のリクエストの待ち合わせフラグにおいて、この先行リクエストのフラグが０に書き換えられ（ステップＳ６１０）、再び全フラグが０になったか否かが判定される（ステップＳ６０２）。【００５０】
以降、発行対象のリクエストの待ち合わせフラグにおいて、すべてのフラグが０になるまで上記の処理が繰り返され、すべての先行リクエストがシステムコントローラ２００へ出力されて全フラグが０となると、発行対象のリクエストが発行されてステートがＲＡおよびＩＮＶに順次書き換えられる。そして、発行対象のリクエストのステートがＲＡになることにより、後続のｗタイプのリクエストの待ち合わせフラグにおいて、発行対象であったリクエストのフラグが０に書き換えられることになる。また、発行対象のリクエストのステートがＩＮＶになることにより、後続のｓタイプのリクエストの待ち合わせフラグにおいて、発行対象であったリクエストのフラグが０に書き換えられることになる。【００５１】
次いで、本実施の形態に係るリクエスト発行の順序について、具体的に例を挙げて説明する。ここでは、ｓタイプのリクエストｓ１、ｗタイプのリクエストｗ１、ｓタイプのリクエストｓ２、およびｗタイプのリクエストｗ２がこの順に他装置から出力された場合について説明する。【００５２】
図７−１は、バッファ１２０内のすべてのキュー＃０〜＃７が空きキューである状態、換言すれば、すべてのキュー＃０〜＃７に記憶されたリクエストのステートがＩＮＶである状態の各キューにおける待ち合わせフラグの一覧を示す図である。図７−１の状態では、いずれのキューにも有効なリクエストが記憶されていないため、すべてのキューの待ち合わせフラグにおいては、全フラグが０に設定されている。【００５３】
その後、新規リクエストとしてリクエストｓ１が他装置から出力されると、リクエストｓ１は、書込部１１０によってキュー＃０に書き込まれる。このとき、リクエストｓ１のステートは先行リクエストの発行待機を示すＰＲとされる。リクエストｓ１は、先行リクエストが無い状態で記憶されるため、リクエストｓ１の待ち合わせフラグにおいては、全フラグが０のままである。この状態を図７−２に示す。【００５４】
次に、新規リクエストとしてリクエストｗ１が他装置から出力されると、リクエストｗ１は、書込部１１０によってキュー＃１に書き込まれる。このとき、リクエストｗ１のステートはＰＲとされる。また、先行リクエストであるリクエストｓ１のステートは自己の発行待機を示すＳＲへ遷移する。この状態を図７−３に示す。【００５５】
そして、新規リクエストとしてリクエストｓ２が他装置から出力されると、リクエストｓ２は、書込部１１０によってキュー＃２に書き込まれる。このとき、リクエストｓ２のステートはＰＲとされる。また、リクエストｓ２の書き込み時には、リクエストｓ１およびリクエストｗ１がそれぞれキュー＃０およびキュー＃１に既に記憶されているため、リクエストｓ２の待ち合わせフラグにおいて、これらのリクエストに対応するキュー＃０およびキュー＃１のフラグが１に設定される。さらに、リクエストｗ１は、リクエストｓ１の発行完了を待つ必要が無いため、ステートがＳＲに書き換えられるが、先行するリクエストｓ１によって伝送路が占有されているため、リクエストｗ１の待ち合わせフラグにおいて、リクエストｓ１に対応するキュー＃０のフラグが１に設定される。この状態を図７−４に示す。【００５６】
次に、新規リクエストとしてリクエストｗ２が他装置から出力されると、リクエストｗ２は、書込部１１０によってキュー＃３に書き込まれる。このとき、リクエストｗ２のステートはＰＲとされる。また、リクエストｓ１は読出部１３０からシステムコントローラ２００へ出力され、ステートがＲＡに遷移する。これに伴って、読出部１３０からシステムコントローラ２００への伝送路が使用可能となるため、リクエストｗ１の待ち合わせフラグにおいて、リクエストｓ１に対応するキュー＃０のフラグが０に設定される。そして、リクエストｗ１が読出部１３０によって読み出され、システムコントローラ２００へ出力される。この状態を図７−５に示す。【００５７】
そして、リクエストｗ２は、すべての先行リクエストの発行完了を待つ必要が無いため、ステートがＳＲに書き換えられるが、先行するリクエストｗ１によって伝送路が占有されているため、リクエストｗ２の待ち合わせフラグにおいて、リクエストｗ１に対応するキュー＃１のフラグが１に設定される。この状態を図７−６に示す。【００５８】
次に、リクエストｗ１が読出部１３０からシステムコントローラ２００へ出力され、ステートがＲＡに遷移する。これに伴って、読出部１３０からシステムコントローラ２００への伝送路が使用可能となるため、リクエストｗ２の待ち合わせフラグにおいて、リクエストｗ１に対応するキュー＃１のフラグが０に設定される。そして、リクエストｗ２が読出部１３０によって読み出され、システムコントローラ２００へ出力される。この状態を図７−７に示す。【００５９】
そして、リクエストｗ１の受信応答がシステムコントローラ２００から返ってくると、リクエストｗ１は無効化され、キュー＃１のステートがＩＮＶとなる。これに伴って、リクエストｓ２はリクエストｗ１の発行完了を待ったことになるため、リクエストｓ２の待ち合わせフラグにおいて、リクエストｗ１に対応するキュー＃１のフラグが０に設定される。また、リクエストｗ２が読出部１３０からシステムコントローラ２００へ出力され、ステートがＲＡに遷移する。この状態を図７−８に示す。【００６０】
次に、リクエストｓ１の受信応答がシステムコントローラ２００から返ってくると、リクエストｓ１は無効化され、キュー＃０のステートがＩＮＶとなる。これに伴って、リクエストｓ２はリクエストｓ１の発行完了を待ったことになるため、リクエストｓ２の待ち合わせフラグにおいて、リクエストｓ１に対応するキュー＃０のフラグが０に設定される。この状態を図７−９に示す。【００６１】
そして、リクエストｓ２の待ち合わせフラグにおいて、全フラグが０になったことから、リクエストｓ２のステートがＳＲに遷移し、リクエストｓ２が読出部１３０によってシステムコントローラ２００へ出力される。この状態を図７−１０に示す。【００６２】
続けて、リクエストｗ２の受信応答がシステムコントローラ２００から返ってくると、リクエストｗ２は無効化され、キュー＃３のステートがＩＮＶとなる。また、リクエストｓ２が読出部１３０からシステムコントローラ２００へ出力され、ステートがＲＡに遷移する。この状態を図７−１１に示す。【００６３】
最後に、リクエストｓ２の受信応答がシステムコントローラ２００から返ってくると、リクエストｓ２は無効化され、キュー＃２のステートがＩＮＶとなる。こうして、すべてのキュー＃０〜＃７が、図７−１２に示すように、再び空きキューとなる。【００６４】
以上のように、本実施の形態によれば、バッファ内のすべてのキューに対応するリクエストとの発行の待ち合わせの要不要を示す待ち合わせフラグを各リクエストに対応付けておき、リクエストのタイプおよび先行リクエストのステート遷移に応じて、待ち合わせフラグにおける各リクエストのフラグを適切に設定し、発行対象のリクエストの待ち合わせフラグにおいて、すべてのフラグが待ち合わせ不要であることを示している場合に、発行対象のリクエストを発行する。このため、１つのバッファ内に書き込まれた複数のリクエストに対して、必要な順序制御を行いながら発行することができ、小さい回路規模で順序保証が必要な処理と不要な処理とを実行可能にすることができる。【００６５】
なお、上記一実施の形態においては、システムコントローラ２００に接続されたＩ／Ｏコントローラ１００におけるバッファリングを例に挙げて説明したが、本発明は順序保証や優先度制御を必要とする様々なバッファに適用することができる。その際、上記一実施の形態においては、データそのものにステートおよび待ち合わせフラグの情報を付加することとしたが、データ自体には何の情報も付加せず、例えば順序制御部１４０が図７−１〜７−１２に示したような一覧表を管理することにより、読出部１３０の読出順序を制御することなどが考えられる。
【産業上の利用可能性】
【００６６】
本発明は、小さい回路規模で順序保証が必要な処理と不要な処理とを実行可能にする場合に適用することができる。
【図１】
0004779010.tif 000002
【図２】
0004779010.tif 000003
【図３】
0004779010.tif 000004
【図４】
0004779010.tif 000005
【図５】
0004779010.tif 000006
【図６】
0004779010.tif 000007
【図７−１】
0004779010.tif 000008
【図７−２】
0004779010.tif 000009
【図７−３】
0004779010.tif 000010
【図７−４】
0004779010.tif 000011
【図７−５】
0004779010.tif 000012
【図７−６】
0004779010.tif 000013
【図７−７】
0004779010.tif 000014
【図７−８】
0004779010.tif 000015
【図７−９】
0004779010.tif 000016
【図７−１０】
0004779010.tif 000017
【図７−１１】
0004779010.tif 000018
【図７−１２】
0004779010.tif 000019