(57)【要約】【課題】  本発明はキュー装置に関し、キューが満杯になった場合でもキューにデータを書き込む装置が、キューに“空き”が生じるまで待たされることなくキューへのデータ出力を行えるようにすることを目的とする。【解決手段】  複数のプロセスによってパケットが書き込まれるＦＩＦＯバッファ４１と、記憶手段４２と、プロセスＡが上記ＦＩＦＯバッファ４１にパケットを書き込んでいる途中で別のプロセスＢに実行権が切り換えられた際、上記プロセスＡが書き込んだ未完結のパケットデータを上記ＦＩＦＯバッファ４１から取り出し上記記憶手段４２に退避させるデータ退避手段４３と、再び前記プロセスＡに実行権が移行した際、該プロセスＡの実行開始前に前記記憶手段４２に退避させておいたパケットデータを前記ＦＩＦＯバッファに転送させるデータリストア手段４４と、を備える。【選択図】図４
2005216317.tif 000002
【特許請求の範囲】
【請求項１】
パケットが格納されるＦＩＦＯバッファと、
記憶手段と、
前記ＦＩＦＯバッファ内に格納されているパケットデータの個数を計数する計数手段と、
前記計数手段の計数値と、パケットデータのパケット数とに基づいて、前記ＦＩＦＯバッファ内に完結しているパケットが存在するか否かを検出するパケット完結検出手段と、
前記パケット完結手段により未完結と判別された前記ＦＩＦＯバッファ内のデータを、前記記憶手段に退避させるデータ退避手段と、
を備えたことを特徴とするキュー装置。
【請求項２】
前記パケット完結検出手段は、前記計数手段の計数値と、前記ＦＩＦＯに格納されたパケットデータのパケット内に格納されるパケットサイズ情報とに基づいて、前記ＦＩＦＯバッファ内に完結したデータが存在するか否かを判別することを特徴とする請求項１記載のキュー装置。
【請求項３】
前記ＦＩＦＯバッファは、複数のプロセスによってパケットデータが書き込まれるものであり、
前記パケット完結手段は、プロセスＡが前記ＦＩＦＯバッファにパケットを書き込んでいる途中で別のプロセスＢに実行権が切り替えられた際、前記ＦＩＦＯバッファに書込未完結のデータが存在するか否かを判別し、
前記データ退避手段は、前記データパケット完結手段により前記ＦＩＦＯバッファに書込未完結のデータが存在すると判別された場合に、前記ＦＩＦＯバッファ内の書込未完結データを前記記憶装置に退避させることを特徴とする請求項１又は２記載のキュー装置。
【請求項４】
前記プロセスＡに再び実行権が移行した際、前記プロセスＡの実行開始前に前記記憶手段に退避させておいたパケットデータを前記ＦＩＦＯバッファに転送させるデータリストア手段を更に備えることを特徴とする請求項３記載のキュー装置。
【請求項５】
複数のプロセスによってパケットが書き込まれるＦＩＦＯバッファと、
記憶手段と、
プロセスＡが前記ＦＩＦＯバッファにパケットを書き込んでいる途中で別のプロセスＢに実行権が切り換えられた際、前記プロセスＡが書き込んだ未完結のパケットデータを前記ＦＩＦＯバッファから取り出し前記記憶手段に退避させるデータ退避手段と、
再び前記プロセスＡに実行権が移行した際、該プロセスＡの実行開始前に前記記憶手段に退避させておいたパケットデータを前記ＦＩＦＯバッファに転送させるデータリストア手段と、
を備えたことを特徴とするキュー装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの生成側と該データを利用する側との間でのデータの授受に用いられるキュー装置に関する。
【背景技術】
【０００２】
キューは、データを生成する側（データ生成装置）と該データを入力して利用する側（データ処理装置）との間での処理タイミングの差異を吸収するために利用される。該データには、例えば、メッセージ、パケット、ジョブ、トランザクションなどがある。キューは、一般にＦＩＦＯ（First In First Out) メモリ（ＦＩＦＯバッファ）などで実現され、データ生成装置は、生成したデータをキューに入れ、データ処理装置はそのデータをキューから取り出して所定の処理を行う。
【０００３】
キューは、複数のデータを格納可能な容量を持っており、このため、データ処理装置は、キューから１つづつデータを取り出しながら、自己の処理能力に応じて逐次データ処理することができる。また、キューを複数のデータ生成装置で共有することにより、１つのデータ処理装置が該複数のデータ生成装置からのデータ処理要求を受け付けることが可能となる。さらに、各データ生成装置は、キューに空きがあるときには、いつでも生成したデータを直ちにキューに入れることによって、すぐに次の処理に移れるので効率的な動作が可能になる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のキュー装置は以下のような問題点をかかえていた。
（１）キューのデータ容量には限界があるため、キューが満杯となり空き容量が無くなった場合には、データをキューに投入する側、すなわちデータ生成装置は、該キューに空き領域が生じるまでそのデータの投入を待たねばならない。このため、データ生成装置側にとっては、キューに空きが生じるまで待機していなければならず、その間の待ち時間が処理効率の低下をもたらす。
【０００５】
（２）また、データ処理装置として、ある一連のデータ列をパケットとして処理するような装置がキューの出力側に接続されている場合、キューにパケットの全データが投入されるまでの間、該データ処理装置はそのパケット処理を終了することができない。すなわち、データ生成装置がパケットの全データをキューに投入するまで、データ処理装置は処理を中断しなければならない。したがって、この場合には、キューにパケットの全データが投入されてからパケットの取り出しを開始しないとパケット処理装置に待ち時間が生じ処理効率が低下することになる。
【０００６】
（３）また、パケット処理においては、キューにパケットデータを投入中にそのデータを取り除く必要が生じる場合があるが、パケット処理装置側が既にそのデータをキューから取り出してパケット処理を開始しているときには、その出力済のデータを取り戻すのは不可能であった。すなわち、この場合、そのパケットデータは廃棄されることになる。このような場合は、例えばデータ生成装置が複数のプログラム（プロセス）を並列して実行するプロセッサから成り、各プロセスがそれぞれ個別にパケットを生成して共有キューにその書き込みを行うシステムにおいて発生する。すなわち、あるプロセスがキューにパケットデータを書き込んでいる途中で、実行権が他のプロセスに切り換えられ、この新たにスケジューリングされたプロセスがキューに自己の生成したパケットデータを続けて書き込もうとした場合である。
【０００７】
本発明は、キューが満杯になった場合でも、データ生成装置側が該キューに空きが生じるまで待たされることなく、キューへのデータ投入操作を行えるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するため、本発明は以下のように構成する。
請求項１に記載の発明は、パケットが格納されるＦＩＦＯバッファと、記憶手段と、前記ＦＩＦＯバッファ内に格納されているパケットデータの個数を計数する計数手段と、前記計数手段の計数値と、パケットデータのパケット数とに基づいて、前記ＦＩＦＯバッファ内に完結しているパケットが存在するか否かを検出するパケット完結検出手段と、前記パケット完結手段により未完結と判別された前記ＦＩＦＯバッファ内のデータを、前記記憶手段に退避させるデータ退避手段と、を備えたことを特徴とするキュー装置である。
【０００９】
請求項２に記載の発明は、請求項１記載のキュー装置において、前記パケット完結検出手段は、前記計数手段の計数値と、前記ＦＩＦＯに格納されたパケットデータのパケット内に格納されるパケットサイズ情報とに基づいて、前記ＦＩＦＯバッファ内に完結したデータが存在するか否かを判別することを特徴とするものである。
【００１０】
請求項３に記載の発明は、請求項１又は２記載のキュー装置において、前記ＦＩＦＯバッファは、複数のプロセスによってパケットデータが書き込まれるものであり、前記パケット完結手段は、プロセスＡが前記ＦＩＦＯバッファにパケットを書き込んでいる途中で別のプロセスＢに実行権が切り替えられた際、前記ＦＩＦＯバッファに書込未完結のデータが存在するか否かを判別し、前記データ退避手段は、前記データパケット完結手段により前記ＦＩＦＯバッファに書込未完結のデータが存在すると判別された場合に、前記ＦＩＦＯバッファ内の書込未完結データを前記記憶装置に退避させることを特徴とするものである。
【００１１】
請求項４に記載の発明は、請求項３記載のキュー装置において、前記プロセスＡに再び実行権が移行した際、前記プロセスＡの実行開始前に前記記憶手段に退避させておいたパケットデータを前記ＦＩＦＯバッファに転送させるデータリストア手段を更に備えることを特徴とするものである。
【００１２】
請求項５に記載の発明は、複数のプロセスによってパケットが書き込まれるＦＩＦＯバッファと、記憶手段と、プロセスＡが前記ＦＩＦＯバッファにパケットを書き込んでいる途中で別のプロセスＢに実行権が切り換えられた際、前記プロセスＡが書き込んだ未完結のパケットデータを前記ＦＩＦＯバッファから取り出し前記記憶手段に退避させるデータ退避手段と、再び前記プロセスＡに実行権が移行した際、該プロセスＡの実行開始前に前記記憶手段に退避させておいたパケットデータを前記ＦＩＦＯバッファに転送させるデータリストア手段と、を備えたことを特徴とするものである。
【００１３】
以下に、本発明又はそれと関連する発明（以下、関連発明と言う）の原理について説明する。
図１は、第１の関連発明の原理を説明する図である。
【００１４】
この発明は、ＦＩＦＯバッファ１と、該ＦＩＦＯバッファに書き込まれるデータが退避される退避バッファ２と、該退避バッファにデータが退避されているか否かを示すフラグ３を備える。また、さらに第１の検出手段４とデータ退避手段５を備える。
【００１５】
第１の検出手段４は、上記ＦＩＦＯバッファ１の残り容量が予め定められた第１の閾値より少なくなったことを検出する。
データ退避手段５は、該第１の検出手段４により上記ＦＩＦＯバッファ１の残り容量が上記第１の閾値よりも少なくなったことが検出されると、その後のＦＩＦＯバッファ１に対する書き込みデータを前記退避バッファ２に退避させると共に前記フラグ３をセットさせ、該フラグがセットされている状態の間、上記ＦＩＦＯバッファ１に対する書き込みデータを前記退避バッファの方に書き込む。
【００１６】
第２の関連発明は、上述した第１の関連発明が有する各構成要素に加え、さらに以下の手段を有する。
第２の検出手段６は、前記フラグ３がセットされている状態のときに、前記ＦＩＦＯバッファ１の残り容量が予め定められた第２の閾値よりも多くなったことを検出する。
【００１７】
データリストア手段７は、該第２の検出手段６よりＦＩＦＯバッファ１の残り容量が上記第２の閾値よりも多くなったことが検出された際、前記退避バッファ２に退避されていたデータを上記ＦＩＦＯバッファ１に転送し、前記退避バッファ２に退避されているデータが無くなったときに前記フラグ３をリセットする。
【００１８】
第３の関連発明は、上記第１の関連発明が有する各構成要素に加え、下記の第３の検出手段８を備える。
第３の検出手段８は、前記退避バッファ２の残り容量が予め定められた第３の閾値よりも少なくなったことを検出し、該検出時に例えば、割り込み信号などの特定の信号を発生する。
【００１９】
図２は、第４乃至第７の関連発明の原理を説明する図である。
第４の関連発明は、パケットが格納されるＦＩＦＯバッファ１１と、該ＦＩＦＯバッファ１１に格納されるパケットの個数を計数する計数手段１２とを備える。
【００２０】
第５の関連発明は、上記第４の関連発明が有する各構成要素に加え、前記ＦＩＦＯバッファ１１に書き込まれるパケットのデータが退避される退避バッファ１３と、該退避バッファ１３にパケットデータが退避されているか否かを示すフラグ１４と、前記ＦＩＦＯバッファ１１の残り容量が予め定められた第１の閾値よりも少なくなったことを検出する第１の検出手段１５と、該第１の検出手段１５により前記ＦＩＦＯバッファ１１の残り容量が前記第１の閾値よりも少なくなったことが検出されると、その後のＦＩＦＯバッファ１１に対する書き込みデータを前記退避バッファ１３に退避させると共に、前記フラグ１４をセットさせ、該フラグがセットされている状態の間、上記ＦＩＦＯバッファ１１に対する書き込みパケットデータを前記退避バッファの方に書き込むパケットデータ退避手段１６と、を更に備える。
【００２１】
前記ＦＩＦＯバッファ１１に格納される各パケットデータには、例えば、該パケットデータが当該パケットの最後のデータであるか否かを示す情報が設定されたビットが付加されるようにしてもよい。
【００２２】
第６の関連発明は、上記第５の関連発明が有する各構成要素に加え、前記フラグ１４がセットされている状態のときに、前記計数手段１２の計数値が予め定められた第２の閾値よりも少なくなったことを検出する第２の検出手段１７と、該第２の検出手段１７により前記ＦＩＦＯバッファ１１に格納されているパケット数が上記第２の閾値よりも少なくなったことが検出された際、前記退避バッファ１３に退避されていたデータを上記ＦＩＦＯバッファ１１に転送し、前記退避バッファ１３に退避されているデータが無くなったときに前記フラグ１４をリセットするデータリストア手段１８と、をさらに備える。
【００２３】
第７の関連発明は、上記第４の関連発明が有する各構成要素に加え、前記計数手段１２の計数値を参照して、前記ＦＩＦＯバッファ１１内に完結しているパケットデータが存在するか否かを検出するパケット完結検出手段１９を、さらに備える。
【００２４】
図３は、第８乃至第１０の関連発明の原理を説明する図である。
第８の関連発明は、請求項１に記載の発明とも一部共通するものであり、パケットサイズを示す情報が設定されているデータを先頭に有するパケットが格納されるＦＩＦＯバッファ２１と、前記ＦＩＦＯバッファ２１内に格納されているパケットデータの個数を計数する計数手段２２と、該計数手段２２の計数値と、前記ＦＩＦＯバッファ２１に格納されているパケットの上記パケットサイズ情報が設定されているデータとを入力して、前記ＦＩＦＯバッファ２１内に完結しているパケットが存在するか否かを検出するパケット完結検出手段２３と、を備える。
【００２５】
第９の関連発明は、上記第８の関連発明が有する各構成要素に加え、前記ＦＩＦＯバッファ２１に書き込まれるパケットのデータが退避される退避バッファ２３と、該退避バッファ２３にパケットデータが退避されているか否かを示すフラグ２４と、前記ＦＩＦＯバッファ２１の残り容量が予め定められた第１の閾値よりも少なくなったことを検出する第１の検出手段２５と、該第１の検出手段２５により前記ＦＩＦＯバッファ２１の残り容量が前記第１の閾値よりも少なくなったことが検出されると、その後のＦＩＦＯバッファ２１に対する書き込みデータを前記退避バッファ２３に退避させると共に、前記フラグ２４をセットさせ、該フラグ２４がセットされている状態の間、上記ＦＩＦＯバッファ２１に対する書き込みデータを前記退避バッファの方に書き込むパケットデータ退避手段２６と、をさらに備える。
【００２６】
第１０の関連発明は、上記第９の関連発明が有する各構成要素に加え、前記フラグ２４がセットされている状態のときに、前記計数手段２２の計数値が予め定められた第２の閾値よりも少なくなったことを検出する第２の検出手段２７と、該第２の検出手段２７によりＦＩＦＯバッファ２１の残り容量が上記第２の閾値よりも少なくなったことが検出された際、前記退避バッファ２３に退避されていたデータを上記ＦＩＦＯバッファ２１に転送し、前記退避バッファ２３に退避されているデータが無くなったときに前記フラグ２４をリセットするデータリストア手段２８と、をさらに備える。
【００２７】
次に、図４は請求項５に記載の発明を説明する原理図である。
この発明は、複数のプロセスによってパケットが書き込まれるＦＩＦＯバッファ４１と、記憶手段４２と、プロセスＡが上記ＦＩＦＯバッファ４１にパケットを書き込んでいる途中で別のプロセスＢに実行権が切り換えられた際、上記プロセスＡが書き込んだ未完結のパケットデータを上記ＦＩＦＯバッファ４１から取り出し上記記憶手段４２に退避させるデータ退避手段４３と、再び前記プロセスＡに実行権が移行した際、該プロセスＡの実行開始前に前記記憶手段４２に退避させておいたパケットデータを前記ＦＩＦＯバッファに転送させるデータリストア手段４４と、を備える。
【００２８】
次に、上述した発明の作用について説明する。
第１の関連発明においては、第１の検出手段４がＦＩＦＯバッファ１の残り容量が予め定められた第１の閾値よりも少なくなったことを検出する。データ退避手段５は、該検出後にＦＩＦＯバッファ１に対するデータの書き込み要求があると、該データを退避バッファ２の方に書き込み、フラグ３をセットする。そして、該フラグ３がセットされている状態の間、データ退避手段５はＦＩＦＯバッファ１に対する書き込みデータを退避バッファ２の方に書き込む。
【００２９】
これにより、ＦＩＦＯバッファ１に対してデータを書き込むデータ生成装置は、ＦＩＦＯバッファ１が満杯になっても、ＦＩＦＯバッファ１に空きが生ずるまで待たされることなくデータの出力が可能になり、処理効率が向上する。
【００３０】
また、第２の関連発明においては、第２の検出手段６がフラグ３がセットされている状態においてＦＩＦＯバッファ１の残り容量が予め定められた所定の閾値よりも多くなったことを検出する。データリストア手段７は、この検出を受けて、退避バッファ２に退避されていたデータをＦＩＦＯバッファ１に転送する。そして、退避バッファ２に退避データが無くなるとフラグ３をリセットする。
【００３１】
これにより、退避バッファ２に退避されていたデータは正しい順序でＦＩＦＯバッファ１に書き込まれる。そして、フラグ３がリセットされると、ＦＩＦＯ１に空きがある間再びＦＩＦＯバッファ１の方にデータが書き込まれる。
【００３２】
第３の関連発明においては、第３の検出手段８が退避バッファの残り容量が予め定められた第３の閾値よりも少なくなった状態を検出し、その旨を示す特定の信号を外部に出力する。
【００３３】
これにより、例えば、プロセッサ等に割り込みをかけ、退避バッファ２のサイズを拡張することが可能になる。
第４の関連発明においては、計数手段１２によりＦＩＦＯバッファ１１に格納されるパケットの個数が計数される、したがって、この計数手段１２の計数値を参照することにより、ＦＩＦＯバッファ１１にパケットが格納されているか否かを判断することが可能になり、パケット処理装置２０は、ＦＩＦＯバッファ１１内においてパケットが完結してからパケットのデータを連続して取り出すことが可能になり、パケット処理を効率良く行うことができる。
【００３４】
第５の関連発明においては、退避バッファ１３、フラグ１４、第１の検出手段１５、及びパケットデータ退避手段１６により、上述した請求項２記載の発明と同様な動作が、ＦＩＦＯバッファ１１に対するパケットデータの書き込みに対して行われる。したがって、パケット生成装置１０はＦＩＦＯバッファ１１が満杯になっても、ＦＩＦＯバッファ１１に空きが生ずるまで待たされることなく、パケットデータの出力が可能となり、処理効率が向上する。
【００３５】
第６の関連発明においては、第２の検出手段１７がフラグ１４がセットされている状態のときに計数手段１２の計数値すなわちＦＩＦＯバッファ１１内の格納パケット数が予め定められた第２の閾値よりも少なくなったことを検出する。データリストア手段１８は、この検出を受けて退避バッファ１３に退避されていたパケットデータをＦＩＦＯバッファ１１に転送する。そして、退避バッファ１３に退避パケットデータが無くなると、フラグ１４をリセットする。
【００３６】
したがって、退避バッファ１３に退避されていたパケットが、その一部のデータが退避されていたパケットも含め、正しい順序並びに正しい形式でＦＩＦＯバッファ１１にリストアされる。
【００３７】
第７の関連発明においては、パケット完結検出手段１９が計数手段１２の計数値を参照して、ＦＩＦＯバッファ１１内に完結しているパケットデータが存在するか否か検出する。したがって、この検出を利用して、未完結のパケットのデータがＦＩＦＯバッファ１１から出力されてしまう事態を抑止できる。
【００３８】
なお、ＦＩＦＯバッファ１１からパケットデータと共に出力される特定のビットの値を参照するようにすれば、パケット処理装置はＦＩＦＯバッファ１１から読み出したデータがパケットの最後のデータであるか否かを容易に検出できる。
【００３９】
請求項５に記載の発明と一部共通する第８の関連発明においては、計数手段２２によりＦＩＦＯバッファ２１に格納されているパケットデータの個数が計数される。パケット完結検出手段２３は、該計数値とＦＩＦＯバッファ２１の先頭に格納されているパケットのそのサイズ情報が設定されているデータを入力して、両者を比較することによりＦＩＦＯバッファ２１内に完結しているパケットが存在するか否か検出する。
【００４０】
したがって、このパケット完結手段２３の検出情報を利用して、ＦＩＦＯバッファ２１内の未完結のパケットデータがパケット処理装置４０に出力されてしまう状態を回避させることができる。
【００４１】
第９の関連発明においては、前述した第５の関連発明と同様な動作が、退避バッファ２３、第１の検出手段２５、及びパケットデータ退避手段２６により行われる。
したがって、パケット生成装置３０は、ＦＩＦＯバッファ２１に空きが生じていない間でも、生成したパケットを出力できるので、処理効率が向上する。
【００４２】
第１０の関連発明においては、前述した第６の関連発明と同様な動作が、第２の検出手段２７とデータリストア手段２８により行われる。
したがって、退避バッファ２３に退避されていたパケットが、その一部のデータが退避されていたパケットも含め、正しい順序並びに正しい形式でＦＩＦＯバッファ１１にリストアされる。
【００４３】
請求項５に記載の発明においては、プロセスＡがＦＩＦＯバッファ４１にパケットを書き込んでいる途中で別のプロセスＢに実行権が切り換えられた際、データ退避手段４３が上記プロセスＡが書き込んだ未完結のパケットデータを上記ＦＩＦＯバッファ４１から取り出し記憶手段４２に退避させる。そして、再び前記プロセスＡに実行権が移行した際、データリストア手段４４が該プロセスＡの実行開始前に前記記憶手段に退避させておいたパケットデータを前記ＦＩＦＯバッファ４１に転送させリストアさせる。
【００４４】
したがって、プロセスＡがＦＩＦＯバッファ４１にパケットのデータを書き込んでいる途中であっても、新たに起動されたプロセスＢはＦＩＦＯバッファ４１にパケットを書き込むことが可能になる。そして、再びプロセスＢが再起動された際には、プロセスＢはＦＩＦＯバッファ４１に残りのパケットデータを書き込むことにより、ＦＩＦＯバッファ４１に正しくパケットを書き込むことが可能になる。
【発明の効果】
【００４５】
請求項１乃至４に記載の発明によれば、ＦＩＦＯバッファに格納されているパケットデータの個数が計数手段により計数され、パケット完結検出手段は、上記計数値とＦＩＦＯバッファに格納されているパケットデータのパケット数とに基づいて、ＦＩＦＯバッファ内に完結しているパケットが存在するか否か検出し、未完結と判別されたＦＩＦＯバッファ内のデータをデータ退避手段が記憶手段に退避させる。したがって、パケット完結検出手段の検出情報を利用して、ＦＩＦＯバッファ内の未完結のパケットデータがパケット処理装置に出力されてしまう状態を回避させることができる。
【００４６】
請求項５に記載の発明によれば、プロセスＡがＦＩＦＯバッファにパケットのデータを書き込んでいる途中であっても、新たに起動されたプロセスＢはＦＩＦＯバッファにパケットを書き込むことが可能になる。そして、再びプロセスＢが再起動された際には、プロセスＢはＦＩＦＯバッファに残りのパケットデータを書き込むことにより、ＦＩＦＯバッファに正しくパケットを書き込むことが可能になる。したがって、ＦＩＦＯバッファ内に既に格納済の未完結のパケットのデータの退避及びその復帰が可能である。
【発明を実施するための最良の形態】
【００４７】
図５は、本発明の一実施例のキュー装置の全体構成を示すブロック図である。
ＦＩＦＯバッファ１１０は、ｎビット単位でのデータの一括入出力が可能なFirst-In, First-Out 方式のメモリであり、例えば１チップで構成される。そして、ＦＩＦＯバッファ１１０の残り容量が予め定められた第１の閾値以下になったことを示すフルフラグ信号ｆｕｌｌ（以下、ｆｕｌｌ信号と記述する）並びにＦＩＦＯバッファ１１０が現在、全くデータを格納していない状態であることを示すエンプティ・フラグ信号empty （以下、ｅｍｐｔｙ信号と記述する）の出力端子と、該ＦＩＦＯバッファ１１０へのデータ書き込み時にイネーブルとする書き込みイネーブル信号Ｗ１並びに該ＦＩＦＯバッファ１１０からデータを読み出すときにイネーブルとする読み出しイネーブル信号Ｒ１の入力端子を備えている。
【００４８】
また、さらにｎビットのデータ入力線Ｄ１とｎビットのデータ出力線Ｑ１を備えている。また、ＦＩＦＯバッファ１１０は、バッファ内の残り容量が予め定められた第２の閾値よりも大きくなった場合には、Almost-Empty信号を出力する。
【００４９】
該ＦＩＦＯバッファ１１０は、例えばＳＲＡＭ（Static Random Access Memory)のアレイから構成され、該アレイに対してデータの入・出力が行われる。また、該ＳＲＡＭに対する次の入力データの書き込みアドレスを指す入力ポインタと該ＳＲＡＭから次に読み出すデータのアドレスを指す出力ポインタを内蔵している。これらのポインタは、例えばリングカウンタから成る。またさらに、上記２つのポインタが指すアドレス値の差を常に監視・比較しているコンパレータも内蔵しており、該コンパレータにより上記ｆｕｌｌ信号や上記ｅｍｐｔｙ信号並びにAlmost-Empty信号を生成・出力する。
【００５０】
尚、該ＦＩＦＯバッファ１１０をＳＲＡＭではなく、シフトレジスタにより構成するようにしてもよい。
退避バッファ１２０は、例えばＤＲＡＭ（Dynamic Random Access Memory) 等から成り、例えば上記ＦＩＦＯバッファ１１０よりも大きな記憶容量を有する。この退避バッファ１２０も、ｎビット幅のデータ入力線Ｄ２並びにデータ出力線Ｑ２を備え、さらに、上記ＦＩＦＯバッファ１１０が有する書き込みイネーブル信号Ｗ１と同等の機能を有するライトイネーブル信号Ｗ２と、例えば、データ読み出し用のアウトプット・イネーブル信号ＯＥを有する。この退避バッファ１２０には、ＦＩＦＯバッファ１１０の残り容量が上記第１の閾値よりも少なくなったとき、すなわち、ＦＩＦＯバッファ１１０からｆｕｌｌ信号が出力されたとき、オーバーフロー制御部１３０の制御によってＦＩＦＯバッファ１１０に対して書き込み要求がなされたデータが退避・格納される。
【００５１】
オーバーフロー制御部１３０は、ＦＩＦＯバッファ１１０に対するデータの投入要求をデータ書き込み要求信号write のイネーブル入力により受け付け、ＦＩＦＯバッファ１１０から入力される上記ｆｕｌｌ信号の状態に応じて、上記投入要求データをＦＩＦＯバッファ１１０または退避バッファ１２０のいずれかに格納する。
【００５２】
このオーバーフロー制御部１３０は、書き込み先決定装置１３１、フラグ１３２、書き込みポインタ１３３、及び退避バッファフル検出装置１３４を備えている。
書き込み先決定装置１３１は、上記データ書き込み要求信号write がイネーブルになって加わると、ＦＩＦＯバッファ１１０から入力されるｆｕｌｌ信号がアクティブとなっているか否か調べ、アクティブでない間は上記信号write と共に、外部装置から入力されるデータＤ１を、書き込みイネーブル信号Ｗ１を制御してＦＩＦＯバッファ１１０に書き込む。
【００５３】
ＦＩＦＯバッファ１１０に対するデータの投入の方が、ＦＩＦＯバッファ１１０からのデータ取り出しよりも高速に行われる場合には、ＦＩＦＯバッファ１１０はやがて充満状態となり、ＦＩＦＯバッファ１１０はｆｕｌｌ信号を“アクティブ”とする。書き込み先決定装置１３１は、ｆｕｌｌ信号が“アクティブ”になった状態のときにデータ書き込み要求信号write がイネーブルになって加わると、書き込みポインタ１３３に上記信号write がイネーブルになった後に送られてきたＦＩＦＯバッファ１１０に対する書き込みデータの退避バッファ１２０上の格納先アドレスをセットする。
【００５４】
書き込みポインタ１３３にセットされたアドレス値は、退避バッファ１２０にアドレス信号として送られ入力される。そして、書き込み先決定装置１３１が、ライトイネーブル信号Ｗ２をイネーブルにすることにより、ＦＩＦＯバッファ１１０に対する書き込み要求データＤ１が退避データＤ２として書き込みポインタ１３３にセットされたポインタ値の指す退避バッファ１２０上のアドレスに書き込まれ、一時的に退避される。書き込み先決定装置１３１は、このようにして退避バッファ１２０にデータを書き込んだ後、フラグ１３２をセットする。
【００５５】
書き込み先決定装置１３１は、一度、フラグ１３２がセットされると、外部装置からのＦＩＦＯバッファ１１０に対する書き込みデータを、退避バッファ１２０の方へ転送し書き込む。この間、ＦＩＦＯバッファ１１０から出力されるAlmost-Empty信号を監視し、該信号が“アクティブ”になる、すなわち、ＦＩＦＯバッファ１１０に上記第２の閾値以上の“空き”が生ずると、退避バッファ１２０に退避させていたデータを、不図示のデータリスト装置を介してＦＩＦＯバッファ１１０に転送・復帰させる。
【００５６】
一方、Almost-Empty信号が“アクティブ”になる前に、退避バッファ１２０の残り容量が予め定められた第３の閾値よりも少なくなる場合がある。退避バッファフル検出装置１３４は、退避バッファ１２０がこのような状態になったことを、書き込みポインタ１３３から入力されるポインタ値すなわち退避バッファ１２０の次のデータの格納先アドレスにより検出する。そして、該検出時に、バッファフル検出信号buffer-full を外部出力する。この信号は、例えばプロセッサなどのデータ生成装置に対する割り込み信号として用いられる。
【００５７】
次に、図６はＦＩＦＯバッファ１１０を、コマンドなどを表現する１個以上のデータ列である“パケット”を格納するキューとして使用する場合の一実施例を示す模式図である。
【００５８】
カウンタ１４０は、ＦＩＦＯバッファ１１０に格納されているパケット数を計数し、その計数値value を該ＦＩＦＯバッファ１１０からパケットを取り出して処理するパケット処理装置へ出力する。
【００５９】
このカウンタ１４０のインクリメント（＋１）は、プロセッサなどのＦＩＦＯバッファ１１０にパケットを投入するパケット生成装置によって行われ、デクリメント（−１）は該ＦＩＦＯバッファ１１０からパケットを取り出すパケット処理装置により行われる。すなわち、ＦＩＦＯバッファ１１０へのデータ入力側のパケットの投入の終了においてカウンタ１４０をインクリメントし、データ出力側のパケットの取り出しの終了においてカウンタ１４０をデクリメントすることによって、ＦＩＦＯバッファ１１０に格納されているパケットの数を検出することができる。
【００６０】
このように、パケット数を計数するカウンタ１４０を付加することにより、パケット処理装置はＦＩＦＯバッファ１１０内においてパケットが完結してから、該パケットのデータを連続して取り出して効率良く処理することが可能になる。
【００６１】
続いて、図７に示す実施例は上述した図６に示す構成において、ＦＩＦＯバッファ１１０Ａに格納するパケットの各データに該データがパケットの最後のデータであるか否かを示す１ビットの情報（end bit)を付加するようにしたものである。このような構成とすることにより、ＦＩＦＯバッファ１１０Ａの出力側では、上記end bit の出力端子を監視することにより、ＦＩＦＯバッファ１１０Ａからデータを取り出す過程でパケットの終了を容易に検出することができる。
【００６２】
図８は本発明の実施例のキュー装置１０００を適用したプロセッサ要素の全体的な回路構成を示すブロック図である。
プロセッサ１００は、例えばＲＩＳＣ（Reduced Instruction Set Computer)型またはＣＩＳＣ（Complex Instruction Set Computer) 型のマイクロプロセッサから成り、コマンドなどから成るパケットを生成する。
【００６３】
このプロセッサ１００には、バス２００を介してメモリ３００が接続されている。このメモリ３００は、例えばＤＲＡＭ等から成り、その内部には退避バッファ１０２０の領域が確保される。この退避バッファ１０２０は、上記退避バッファ１２０と同等の機能を有するもので、上記プロセッサ１００により生成されるパケットの一時的な退避領域として利用される。
【００６４】
本実施例のキュー装置１０００の上記退避領域１０２０を除く部分は、バスインタフェース４００を介してバス２００に接続されている。
次に、上記退避領域１０２０以外のキュー装置１０００の構成を説明する。
【００６５】
２つのＦＩＦＯバッファ（ＦＩＦＯ１、ＦＩＦＯ２）から成るＦＩＦＯバッファ１０１０は、プロセッサ１００がバスインタフェース４００を介して書き込むパケットを格納するキューとして機能するＦＩＦＯメモリである。プロセッサ１００は、ＦＩＦＯ１または２のいずれにデータを書き込むかは、バスインタフェース４００を介してオーバーフロー制御部１０３０に出力する書き込み要求信号Ｗ１１またはＷ１２を制御することにより指示する。
【００６６】
これらの各ＦＩＦＯバッファ１，２にそれぞれ対応するカウンタＣ１，Ｃ２を有するカウンタ１０４０が設けられている。
カウンタＣ１，Ｃ２は、それぞれ、ＦＩＦＯ１，２に格納されているパケット数を計数する。
【００６７】
オーバーフロー制御部１０３０は、これらＦＩＦＯ１，２並びにカウンタＣ１，Ｃ２と上記バスインタフェース４００との間に介在して設けられている。
オーバーフロー制御部１０３０は、２つのフラグＦ１，Ｆ２を有するフラグ１０３２、パケットデータラッチ回路１０３６（以下、単にラッチ回路１０３６と表現する）、退避バッファ１０２０用の書き込みポインタ１０３３，該退避バッファ１０２０のサイズに応じて決定される該書き込みポインタ１０３３の限界値（最終格納アドレス）が設定されるlimit レジスタ１０３７、上記ポインタ１０３３とlimit レジスタ１０３７とを比較するコンパレータ１０３８、さらには前記フラグＦ１，Ｆ２及び前記カウンタＣ１，Ｃ２の値を基に、プロセッサ１００に対してデータリストアを要求する割り込みをかけるインタラプト発生部１０３９を備えている。
【００６８】
フラグＦ１は、対応するＦＩＦＯ１から入力されるｆｕｌｌ１信号が“アクティブ”になったとき、すなわちＦＩＦＯ１が充満状態になったときに“セット”される。そして、退避バッファ１０２０に退避されていた全てのデータがＦＩＦＯバッファ１に投入された時点で“クリア”（リセット）される。
【００６９】
フラグＦ２は、ＦＩＦＯ２に対して、上記フラグＦ１と同様の動作をする。書き込み先ポインタ１０３３には、最初、退避バッファ１０２０の先頭アドレスか設定される。そして、ＦＩＦＯバッファ１０１０に対する書き込みデータが格納される毎にインクリメントされる。この書き込み先ポインタ１０３３の値は、バスインタフェース４００及びバス２００を介してメモリ３００にアドレス信号（address)として供給される。
【００７０】
コンパレータ１０３８は、上記書き込み先ポインタ１０３３の値がlimit レジスタ１０３７の値を越えた時に、割り込み信号（Interrupt １）をバスインタフェース４００及びバス２００を介してプロセッサ１００に加える。この割り込みは、退避バッファ１０２０に“空き”が無くなったことをプロセッサ１００に通知するものである。
【００７１】
ラッチ回路１０３６は、バスインタフェース４００を介して入力されるプロセッサ１００がバス２００上に出力したＦＩＦＯバッファ１０１０に対する書き込みデータ（data) を一時的に保持する。また、プロセッサ１００は、パケットの最後のデータを書き込む時には、バス２００上のエンド・ビット（end bit)の信号線を有効（“１”）にする。このend bit の値もバスインタフェース４００を介してラッチ回路１０３６にラッチされる。
【００７２】
オーバーフロー制御部１０３０内の不図示のカウンタ制御部は、このラッチ回路１０３６にラッチされたend bit が“１”に設定されていることを検出することにより、ラッチ回路１０３６にパケットの最後のデータがラッチされたことを検出する。そしてＦＩＦＯ１またはＦＩＦＯ２にパケットの最後のデータを書き込んだ後に、カウンタＣ１またはＣ２をインクリメント（＋１）する。
【００７３】
インタラプト発生部１０３９は、フラグＦ１またはＦ２がセットされているときに、そのセットされているフラグＦ１またはＦ２に対応するカウンタＣ１またはＣ２の値が“０”または所定の閾値以下になると割り込み信号（Interrupt ２）を発生し、バスインタフェース４００及びバス２００を介してプロセッサ１００に割り込みをかける。この割り込みは、ＦＩＦＯバッファ１０１０に対する書き込みデータが、退避バッファ１０２０に退避されている状態のときに、ＦＩＦＯ１またはＦＩＦＯ２に格納されているパケットが“皆無”になったときに発生する。
【００７４】
図９(a) ，(b) は、上記インタラプト発生部１０３９の回路構成例を示す図である。
同図(a) に示すインタラプト発生部１０３９は、フラグＦ１がセットされており、かつカウンタＣ１の値（ＦＩＦＯ１の格納パケット数）value 1 が“０”のとき、またはフラグＦ２がセットされており、かつカウンタＣ２の値（ＦＩＦＯ２の格納パケット数）value ２が“０”のとき、共通の割り込み信号Interrupt２を発生する。
【００７５】
コンパレータ１１０２は、カウンタＣ１の値value １が“０”のとき“Ｈ”信号をアンドゲート１１０４の一方の入力端子に出力する。アンドゲート１１０４は他方の入力端子にフラグＦ１の値（“１”（セット状態）のときに“Ｈ”、“０”（クリア状態）のときに“Ｌ”）を入力する。そして、フラグＦ１がセットされており、かつカウンタＣ１の値value １が“０”のときに“Ｈ”信号をオアゲート１１１０に出力する。また、上記フラグＦ１とカウンタＣ１の出力に対する回路と同様な回路が、コンパレータ１１０６とアンドゲート１１０８によりフラグＦ２の出力とカウンタＣ２の出力に対しても設けられている。アンドゲート１１０８は、フラグＦ２がセットされており、かつカウンタＣ２の値value ２が“０”のときに“Ｈ”信号をオアゲート１１１０に出力する。
【００７６】
オアゲート１１１０は、アンドゲート１１０４またはアンドゲート１１０８のいずれか一方が“Ｈ”となったときに、割り込み信号Interrupt ２をバスインタフェース４００に出力する。
【００７７】
この場合、プロセッサ１００は、オーバーフロー制御部１０３０並びにバスインタフェース４００を介してカウンタＣ１，Ｃ２の値を読み出して、値が“０”となっているカウンタＣｉ（ｉ＝１，２，）を検出することにより、ＦＩＦＯ１またはＦＩＦＯ２のいずれが格納パケット数が“０”になったか判断する。
【００７８】
一方、図９(b) に示す回路は、上述した同図(a) に示す回路からオアゲート１１１０を省略したものであり、上記アンドゲート１１０４と上記アンドゲート１１０８の出力が、それぞれ独立の割り込み信号Interrupt ２Ａ，２Ｂとなって、バスインタフェース４００に出力される。この場合、プロセッサ１００は、ＦＩＦＯ１またはＦＩＦＯ２のいずれの方が格納パケット数が“０”になったかを認識できる。
【００７９】
アービタ１０５０は、カウンタＣ１，Ｃ２の値value １，２を監視しており、該カウンタ値value １または２の値が“０”より大きくなると、２つのＦＩＦＯ１，２のうち適当な方を選択し、該選択したＦＩＦＯ１または２からそれに加えるイネーブル信号ｒ１またはｒ２を“イネーブル”にしてパケットデータを順次読み出す。これらの読み出されたパケットデータはマルチプレクサ１０６０に入力される。アービタ１０５０は、該マルチプレクサ１０６０に入力選択信号selectを加え、上記ＦＩＦＯ１またはＦＩＦＯ２から読み出されたパケットデータdataをパケット処理装置５００に入力させる。
【００８０】
マルチプレクサ１０６０は、ＦＩＦＯ１及びＦＩＦＯ２からアービタ１０５０によって取り出されたパケットデータが入力されるデータセレクタであり、アービタ１０５０から加わる入力選択信号selectに応じて、ＦＩＦＯ１またはＦＩＦＯ２のいずれか一方から出力されるパケットデータdataをパケット処理装置５００に出力する。
【００８１】
マルチプレクサ１０７０は、ＦＩＦＯ１及びＦＩＦＯ２からそれぞれｅｍｐｔｙ信号１，２を入力し、アービタ１０５０から上記マルチプレクサ１０６０と同様に入力選択信号selectを入力する。そして、該選択信号selectに応じて、上記２つのｅｍｐｔｙ信号１または２のいずれか一方をパケット処理装置５００に選択出力する。
【００８２】
パケット処理装置５００は、パケット処理の開始に際して前記アービタ１０５０にパケットの読み出し要求信号readを送り、アービタ１０５０にＦＩＦＯバッファ１０１０に格納されているパケットの取り出しを依頼する。アービタ１０５０は、この信号readを受け取るとカウンタＣ１，Ｃ２を参照し、マルチプレクサ１０６０を介してＦＩＦＯ１またはＦＩＦＯ２に格納されているパケットデータをパケット処理装置５００に入力させる。パケット処理装置５００は、マルチプレクサ１０６０を介してパケットの最後のデータを受け取ると、パケットの取り出し終了を示すdone信号をアービタ１０５０に出力する。アービタ１０５０は、このdone信号を受信すると、上記パケットが取り出されたＦＩＦＯｉ（ｉ＝１，２）に対応するカウンタＣｉをデクリメント（−１）する。パケット処理装置５００には前述したようにマルチプレクサ１０７０を介してｅｍｐｔｙ信号が入力されるので、該ｅｍｐｔｙ信号が非アクティブとなっている間はＦＩＦＯバッファ１０１０にパケットが格納されていることを知ることができる。
【００８３】
図１０は、ＦＩＦＯバッファ１０１０（ＦＩＦＯ１，ＦＩＦＯ２）に格納されるパケットの形式を示す図である。
パケットの先頭（第１ワード）には、コマンドの種類を示す情報が設定される。これに続く第２ワード目以降には、該コマンドに付随するパラメータが必要な個数だけ設定される。
【００８４】
また、図１１は、退避バッファ１０２０に退避されるパケットの形式を示す図である。このパケットには、パケットデータdataに加え、さらに投入すべきＦＩＦＯバッファを示すキュー番号（例えばＦＩＦＯ１の場合には“１”、ＦＩＦＯ２の場合には“２”）と対応するパケットデータが当該パケットの最後のデータであるか否かを示す情報であるend-bit が付加される。該end-bit は、例えば“１”のときに有効である。プロセッサ１００が退避バッファ１０２０に退避されているパケットデータを該当するＦＩＦＯｉ（ｉ＝１，２）に戻す場合には、これらの付加情報を参照する。
【００８５】
次に、上記構成のプロセッサ要素の動作を説明する。
プロセッサ１００は、パケットを生成すると、該パケットをバス２００のデータバス幅に合わせて分割し、end bit データに該当値を設定して逐次バス２００に出力する。そして、オーバーフロー制御部１０３０に対し、ＦＩＦＯ１またはＦＩＦＯ２に対するパケットデータdataの書き込み要求信号Ｗ１１またはＷ１２をイネーブルにしてバス２００上のコマンドバスに出力する。
【００８６】
バスインタフェース４００は、上記書き込み要求信号Ｗｉ（ｉ＝１，２）のイネーブル出力を検出すると、この信号Ｗｉをオーバーフロー制御部１０３０に出力し、その内部のラッチ回路１０３６にバス２００上に出力されているパケットデータdata並びにend bit をラッチさせる。
【００８７】
このようにして、ラッチ回路１０３６にラッチされたパケットデータは、オーバーフロー制御部１０３０によって書き込み要求がなされたＦＩＦＯｉに順次書き込まれる。そして、プロセッサ１００がパケットの最後のデータと共に“１”に設定したend bit データをバス２００上に出力すると、オーバーフロー制御部１０３０は、該当するＦＩＦＯｉにそのパケットの最後のデータを書き込み、その後、対応するカウンタＣｉをインクリメント（＋１）する。
【００８８】
以上のようにして、プロセッサ１００によってＦＩＦＯバッファ１０１０（ＦＩＦＯ１またはＦＩＦＯ２）に対してパケットが書き込まれ、各ＦＩＦＯ１，２に書き込まれるパケット数がオーバーフロー制御部１０３０によってカウンタＣ１，２により計数される。
【００８９】
アービタ１０５０は、カウンタＣ１，Ｃ２の値を常時、監視しており、該カウンタＣ１又はＣ２の値が“０”より大きくなると、マルチプレクサ１０６０を制御して２つのＦＩＦＯ１，２の内、適当な方をパケットを取り出すキューとして選択する。また、該制御に伴って、マルチプレクサ１０７０からパケット処理装置５００に対して非アクティブのｅｍｐｔｙ信号が加わる。非アクティブのｅｍｐｔｙ信号は、ＦＩＦＯバッファ１０１０すなわちＦＩＦＯ１またはＦＩＦＯ２の少なくともいずれか一方にパケットが格納されていることを示している。
【００９０】
パケット処理装置５００は、マルチプレクサ１０７０から非アクティブのｅｍｐｔｙ信号が加わると、アービタ１０５０に対して出力される信号readをアクティブにして、パケットの受信要求を行う。アービタ１０５０は、この要求を受けて、ＦＩＦＯ１またはＦＩＦＯ２のいずれか適切な方にリードイネーブル信号ｒ１またはｒ２を“イネーブル”にして出力し、該イネーブル出力を行ったＦＩＦＯｉ（ｉ＝１，２）からパケットデータを順次読み出す。アービタ１０５０は、例えば、カウンタＣ１，２の値が共に“０”より大きな値であった場合、カウンタ値すなわち格納パケット数が多いＦＩＦＯｉの方を優先的に選択する。そして、マルチプレクサ１０６０を制御して、該選択したＦＩＦＯｉから読み出されたパケットデータをパケット処理装置５００に順次入力させる。
【００９１】
パケット処理装置５００は、該ＦＩＦＯｉから読み出されてくるパケットデータを順次取り込んでパケット処理を開始する。そして、パケットの最後のデータを取り込むと、アービタ１０５０に対してdone信号を送信する。アービタ１０５０は、これを受けて上記ＦＩＦＯｉに対応するカウンタＣｉの値をデクリメント（−１）する。すなわち、ＦＩＦＯｉの格納パケット数は“１”減少したので、これに合わせてカウンタＣｉの値を更新する。パケット処理装置５００は、例えば、各種コマンドの全体長を記憶しており、その記憶情報により各パケットの取り出し終了を検出する。
【００９２】
プロセッサ１００がＦＩＦＯ１またはＦＩＦＯ２にパケットを書き込む速度の方が、パケット処理装置５００がＦＩＦＯ１またはＦＩＦＯ２からパケットを取り出して処理する速度よりも速い場合には、ＦＩＦＯ１またはＦＩＦＯ２が充満状態になる場合があり得る。
【００９３】
このような場合、オーバーフロー制御部１０３０は、プロセッサ１００から現在、充満状態にあるＦＩＦＯｉに対するパケットデータの書き込み要求を受け取ると、該書き込み要求のあったパケットデータを図１１に示す形式で退避バッファ１０２０のポインタ１０３３の指すアドレスに書き込む。そして、対応するフラグＦｉをセットする。このように、いったんフラグＦｉがセットされると、オーバーフロー制御部１０３０はその後プロセッサ１００からＦＩＦＯｉに対して書き込み要求がなされるパケットを、ポインタ１０３３を更新しながら退避バッファ１０２０の方に書き込む。
【００９４】
このように退避バッファ１０２０にパケットの書き込みが行われている間に、充満状態にあったＦＩＦＯｉからパケット処理装置５００によってパケットが順次、取り出されていく。そして、やがて、該ＦＩＦＯｉの格納パケット数は“０”となる。すなわち、該ＦＩＦＯｉに対応するカウンタＣｉの値は“０”になる。これにより、オーバーフロー制御１０３０においてインタラプト発生部１０３９からプロセッサ１００に対して割り込み信号Interrupt ２が加わる。
【００９５】
プロセッサ１００は、この割り込みにより当該割り込み処理ルーチンを実行し、退避バッファ１０２０からＦＩＦＯｉに投入すべきパケットデータを読み出し、該パケットデータを該ＦＩＦＯｉに書き込む。そして、この結果退避バッファ１０２０内にＦＩＦＯｉに投入すべきパケットデータが残らなくなれば、対応するフラグＦｉをクリア（リセット）する。このフラグＦｉのクリアにより、オーバーフロー制御１０３０は、再びＦＩＦＯｉが充満状態になるまで、プロセッサ１００から書き込み要求がなされるパケットデータをＦＩＦＯｉに書き込む。
【００９６】
一方、上記退避バッファ１０２０からＦＩＦＯｉへのデータのリストアにおいて、まだ、退避バッファ１０２０の中にＦＩＦＯｉへの投入パケットデータが残っている場合には、フラグＦｉはクリアしない。したがって、この場合には、オーバーフロー制御１０３０は引き続いて、プロセッサ１００のＦＩＦＯｉに対する投入データを、退避バッファ１０２０の方に書き込む。すなわち、この場合には、退避バッファ１０２０の方にＦＩＦＯｉに先に投入すべきパケットデータが残っているからである。
【００９７】
ところで、あるパケットにおいてＦＩＦＯｉにデータを投入している途中で、ＦＩＦＯｉが充満状態となり、それ以降のデータが退避バッファ１０２０の方に格納される場合もありえる。この場合においては、カウンタＣｉはインクリメント（＋１）されないので、ＦＩＦＯｉには該パケットは格納されていないものとみなされる。そして、退避バッファ１０２０に退避されていた残りの全てのデータがＦＩＦＯｉに転送された時点でカウンタＣｉがインクリメント（＋１）される。したがって、パケット処理装置５００は、常にＦＩＦＯｉ内でパケットが完結した時点でＦＩＦＯｉからパケットを効率良く取り出すことができる。
【００９８】
一方、退避バッファ１０２０がオーバーフローする状態もありえる。この場合には、コンパレータ１０３８により割り込み信号Interrupt １がプロセッサ１００に加えられる。プロセッサ１００は、この割り込みが加わると、例えばメモリ３００上の退避バッファ１０２０のサイズを拡張する処理などを行う。そして、これに伴ってlimit レジスタ１０３７の値を更新する。
【００９９】
上述した実施例では、退避バッファ１０２０から該当するＦＩＦＯｉへのデータのリストアを、プロセッサ１００のソフトウェア処理により実行している。
次に述べる実施例は、上記データリストア処理を完全にハードウェアで実現するキュー装置を実装したプロセッサ要素の例である。
【０１００】
この実施例では、図１２に模式的に示すように、退避バッファ１０２０に対して書き込みポインタＷＰ（図８のポインタ１０３３に対応）の他に、退避バッファ１０２０から読み出すべき先頭のパケットデータの格納アドレスを指す読み出しポインタＲＰを用意する。これにより、退避バッファ１０２０をリングバッファとして取り扱うことが可能になる。そして、ＦＩＦＯバッファ１０１０が空になったことを検出したら、退避バッファ１０２０に退避されていたデータを上記読み出しポインタＲＰで示されるアドレスから読み出し、ＦＩＦＯバッファ１０１０に転送する。そして、このデータ転送により、退避バッファ１０２０が“空”になったならば、退避バッファ１０２０に退避データがあることを示すフラグ１０３２をリセット（クリア）する。これらの一連の処理をハードウェアにより実現する。
【０１０１】
図１３は上記データリストア処理をハードウェアにより実現するキュー装置２０００を実装したプロセッサ要素の全体構成を示すブロック図である。
同図において、前述した図８に示す実施例内のブロックと同一のブロックには同一の符号を付与しており詳しい説明は省略する。
【０１０２】
本実施例においては、ＦＩＦＯバッファ１０１０は１個のみ備えられ、これに対応して該ＦＩＦＯバッファ１０１０内の格納パケット数を計数するカウンタ１０４０が設けられている。
【０１０３】
本実施例のオーバーフロー制御部２０３０は、前記図８に示す実施例と同様に、ラッチ回路１０３６、退避バッファ１０２０にＦＩＦＯバッファ１０１０に書き込まれるべきパケットデータが退避されていることを示すフラグ１０３２を備えている。そして、これらの回路以外に、上述した退避バッファ１０２０用に設けられた書き込みポインタＷＰと読み出しポインタＲＰ、ポインタ比較器２０３１、シーケンサ２０３２、２つのマルチプレクサ２０３３，２０３４を備えている。
【０１０４】
ポインタ比較器２０３１は、上記２つのポインタＷＰ，ＲＰの値を入力・比較し、退避バッファ１０２０が現在、“空”になっているか又は“充満状態”にあるかを検出する。そして、退避バッファ１０２０が“空”になっていればｅｍｐｔｙ３信号を、“充満状態”になっていればｆｕｌｌ３信号をシーケンサ２０３２に出力する。退避バッファ１０２０は、上述したようにリングバッファの構成となっているので、“空”の状態のときには上記両ポインタの値は一致し、充満状態のときには上記両ポインタはリングバッファ上における隣接するアドレスを指すことになる。
【０１０５】
シーケンサ２０３２は、オーバーフロー制御部２０３０を全体を制御し、プロセッサ１００からのＦＩＦＯバッファ１０１０に対するパケットデータdataとそれに付加されるend bit データの書き込み要求信号Ｗをバスインタフェース４００を介して受信する。そして、ラッチ回路１０３６に該パケットデータdataとend bit データをラッチさせる。
【０１０６】
マルチプレクサ２０３３は、シーケンサ２０３２から加えられる入力選択信号select１に従って上記ポインタＷＰまたはＲＰのいずれか一方をアドレス信号としてバスインタフェース４００に出力する。このアドレス信号は、バス２００を介してメモリ２００に送られる。すなわち、シーケンサ２０３２は、ＦＩＦＯバッファ１０１０への投入データを退避バッファ１０２０に退避させる場合には、書き込みポインタＷＰの値が選択出力されるように、退避バッファ１０２０に退避されているデータをＦＩＦＯバッファ１０１０にリストアさせる場合には読み出しポインタＲＰの値が選択出力されるようにマルチプレクサ２０３３を制御する。
【０１０７】
マルチプレクサ２０３４は、シーケンサ２０３２から加えられる入力選択信号select２に従って、ラッチ回路１０３６にラッチされたプロセッサ１００の書き込みデータまたは退避バッファ１０２０から読み出されたリストア用のデータのいずれか一方を、ＦＩＦＯバッファ１０１０に選択出力する。すなわち、シーケンサ２０３２は、プロセッサ１００から書き込み要求がなされたパケットデータdataをＦＩＦＯバッファ１０１０に直接書き込む場合にはラッチ回路１０３６にラッチされているパケットデータdataが選択出力されるように、退避バッファ１０２０から読み出されたリストア用のパケットデータdataをＦＩＦＯバッファ１０１０に書き込む場合にはバスインタフェース４００から入力される上記リストア用のパケットデータdataが選択出力さるようにマルチプレクサ２０３４を制御する。また、シーケンサ２０３２は、上記マルチプレクサ２０３４からの出力パケットデータdataをＦＩＦＯバッファ１０１０に書き込むときには、ライトイネーブル信号write ２をイネーブルにしてＦＩＦＯバッファ１０１０に加える。
【０１０８】
シーケンサ２０３２は、ラッチ回路１０３６にパケットの最後のデータdataがラッチされると、該データdataと共にもラッチ回路１０３６にラッチされたend-bit の値によりラッチ回路１０３６にパケットの最後のデータdataがラッチされたことを認識する。そして、該最後のデータdataをＦＩＦＯバッファ１０１０に書き込んだ後にカウンタ１０４０をインクリメント（＋１）する。
【０１０９】
本実施例においては、ＦＩＦＯバッファ１０１０は１個しか実装されていないので、退避バッファ１０２０に格納されるパケットデータの形式は図１４に示すように、前述した実施例とは異なり、end-bit のみが付加された形式となる。シーケンサ２０３２は退避バッファ１０２０からＦＩＦＯバッファ１０１０へリストアするパケットデータdataを読み出した際、該end-bit の情報によりパケットの最後のデータdataの読み出しを検出する。そして、該最後のデータdataをＦＩＦＯバッファ１０１０にリストアした後に、カウンタ１０４０をインクリメント（＋１）する。また、パケット処理装置５００は、ＦＩＦＯバッファ１０１０からパケットの最後のデータを読み出す毎に、該カウンタ１０４０をデクリメント（−１）する。
【０１１０】
以上のような構成の実施例におけるキュー装置２０００の動作を、図１５のフローチャートを参照しながら説明する。
オーバーフロー制御部２０３０のシーケンサ２０３２は、下記の（Ａ）〜（Ｄ）の判断を行う。
【０１１１】
（Ａ）プロセッサ１００からキューすなわちＦＩＦＯバッファ１０１０へのパケットデータdataの書き込み要求があると、退避バッファ１０２０に“空き”があるか否か調べる。これは、ポインタ比較器２０３１から入力されるｆｕｌｌ３信号がアクティブになっているか否かによって判断する。非アクティブであれば、退避バッファ１０２０には“空き”がある。
【０１１２】
（Ｂ）オーバーフローフラグ１０３２にセットされているflag情報を参照して該オーバーフローフラグ１０３２がセットされているか否か判別することにより、現在、オーバーフローデータが退避バッファ１０２０に退避されているか調べる。そして、退避データがあれば次にＦＩＦＯバッファ１０１０からのｆｕｌｌ２信号の状態を調べ、現在、ＦＩＦＯバッファ１０１０に“空き”があるか調べる。
【０１１３】
（Ｃ）上記判断（Ａ）において、現在、退避バッファ１０２０に“空き”があると判断すると、次に、オーバーフローフラグ１０３２がセットされているか又はＦＩＦＯバッファ１０１０が充満状態（フル状態）にあるか調べる。上述したように、オーバーフローフラグ１０３２がセットされていることは現在、退避バッファ１０２０に退避データが存在することを意味する。
【０１１４】
（Ｄ）上記判断（Ａ）において、現在、退避バッファ１０２０に“空き”があると判断すると、オーバーフローフラグ１０３２がオフとなっており、かつＦＩＦＯバッファ１０１０に“空き”があるか否か調べる。
【０１１５】
シーケンサ２０３２は、上記（Ａ）〜（Ｄ）の判断を行い、その判断結果に応じてプロセッサ１００からキューに対する書き込み要求のあったパケットデータをＦＩＦＯバッファ１０１０または退避バッファ１０２０のいずれかに書き込む。また、退避バッファ１０２０に退避されていたパケットデータをＦＩＦＯバッファ１０１０にリストアする。
【０１１６】
すなわち、システムの動作開始時には、上記（Ｄ）の判断においてオーバーフローフラグ１０３２がリセットされており、かつＦＩＦＯバッファ１０１０に“空き”があることが認識され、プロセッサ１００からのキューに対する書き込み要求データは、ＦＩＦＯバッファ１０１０に順次書き込まれる（ステップＳ１１）。そして、ＦＩＦＯバッファ１０１０に書き込んだパケットデータに付加されているend-bit が“オン”となっている場合、すなわち、ＦＩＦＯバッファ１０１０にパケットの最後のデータを書き込んだ際にはカウンタ１０４０をインクリメント（＋１）する（ステップＳ１２）。これにより、カウンタ１０４０にはＦＩＦＯバッファ１０１０に格納されているパケット数がセットされる。その後も、マイクロプロセッサ１００のキューへの書き込みデータは、上記ステップＳ１１〜Ｓ１２の処理によりＦＩＦＯバッファ１０１０に書き込まれていく。
【０１１７】
そして、やがてＦＩＦＯバッファ１０１０が充満状態になると、ＦＩＦＯバッファ１０１０から出力されるｆｕｌｌ２信号が“アクティブ”になる。これにより、シーケンサ２０３２は、上記判断（Ｃ）において、ＦＩＦＯバッファ１０１０が充満状態（フル）になったことを検出し、これ以降のマイクロプロセッサ１００からのキューに対する書き込みデータdataは退避バッファ１０２０に書き込む。このとき、図１４に示すように書き込みデータdataに対して“end-bit ”を付加する（ステップＳ２１）。そして、該データdataの書き込み後、書き込みポインタＷＰをインクリメント（＋１）し（ステップＳ２２）。オーバーフローフラグ１０３２を“オン”にセットする（ステップＳ２３）。シーケンサ２０３２は、このように、オーバーフローフラグが“オン”になると、マイクロプロセッサ１００からキューへのパケットデータdataの書き込み要求がある毎に、上記ステップＳ２１〜Ｓ２３の処理を行い、退避バッファ１０２０に該パケットデータdataを書き込む。
【０１１８】
その後、パケット処理装置５００によりＦＩＦＯバッファ１０１０からパケットの取り出しが行われ、ＦＩＦＯバッファ１０１０に“空き”が生じると、ＦＩＦＯバッファ１０１０から出力されるｆｕｌｌ２信号は非アクティブとなる。これにより、シーケンサ２０３２は、上記判断（Ｂ）においてＦＩＦＯバッファ１０１０に“空き”が生じたことを検出する。また、オーバーフローフラグ１０３２がセットされていることにより、退避バッファ１０２０にオーバーフローデータ（退避データ）が格納されていることを知る。
【０１１９】
これにより、シーケンサ２０３２は退避バッファ１０２０の読み出しポインタＲＰの指すアドレスからパケットデータdataを読み出し、該データdataをＦＩＦＯバッファ１０１０に書き込む（ステップＳ３１）。続いて、読み出しポインタＲＰをインクリメント（＋１）する（ステップＳ３２）。そして、ＦＩＦＯバッファ１０１０に書き込んだパケットデータdataに付加されていたend-bit が“オン”にセットされていたならば、カウンタ１０４０をインクリメント（＋１）する。すなわち、ＦＩＦＯバッファ１０１０に１パケットをリストアするごとにカウンタ１０４０をインクリメント（＋１）する（ステップＳ３３）。この後、ポインタ比較器２０３１から入力されるｅｍｐｔｙ３信号の状態を調べ、退避バッファ１０２０が“空”になったか否か調べ、退避バッファ１０２０に退避されていたデータdataが皆無になったならば、オーバーフローフラグ１０３２をクリア（リセット）する（ステップＳ３４）。
【０１２０】
シーケンサ２０３２は、例えばマイクロプロセッサ１００からキューへのパケットデータdataの書き込み要求が無い間、上記ステップＳ３１〜Ｓ３４の処理を随時行う。これにより、マイクロプロセッサ１００がバス２００を使用していない間を利用して、退避バッファ１０２０からＦＩＦＯバッファ１０１０へのデータのリストアを、マイクロプロセッサ１００の動作を妨げることなく行うことができる。
【０１２１】
次に、図１６は本発明のさらに別の実施例であるキュー装置３０００を実装したプロセッサ要素の全体構成を示すブロック図である。同図において、前述した図８に示すプロセッサ要素内のブロックと同一のブロックには同一の符号を付与してあり、これらについては詳しい説明は省略する。
【０１２２】
本実施例のＦＩＦＯバッファ３０１０は、２つのＦＩＦＯメモリ１，２（以下、単にＦＩＦＯ１，２と記述する）から成っており、各ＦＩＦＯ１，２はリングバッファ構成となっている。図１７にその詳しい構成を示す。
【０１２３】
ＦＩＦＯｉ（ｉ＝１，２，）は、ＦＩＦＯバッファ３１１０と、該バッファ３１１０への次のデータの書き込みアドレスを指す書き込みポインタｗｐｉと、次のデータの読み出しアドレスを指す読み出しポインタｒｐｉから成っている。そして、これらの２つのポインタｗｐｉ，ｒｐｉを操作することにより、エンドレスなバッファとして機能する。
【０１２４】
ＦＩＦＯバッファ３１１０に書き込まれるパケットの形式を図１８に示す。同図に示すように、パケットの先頭（第１ワード目）にはパケットの全体長を示すサイズ情報が設定されている。
【０１２５】
各ＦＩＦＯ１，２にそれぞれ対応してパケット完結検出部３０６０が設けられている。該パケット完結検出部３０６０は、対応するＦＩＦＯ１，２に完結したパケットが格納されているか否かを検出するもので、１個以上の完結されたパケットがＦＩＦＯ１，２に格納されていれば外部出力のpacket complete １，２信号を“アクティブ”にする。このpacket complete １，２信号は、アービタ３０５０に入力されており、アービタ３０５０はこのpacket complete １，２信号により前記マルチプレクサ１０６０並びにマルチプレクサ１０７０を制御する。すなわち、このpacket complete １，２信号は、アービタ３０５０に対して前記カウンタＣ１，Ｃ２の代替として機能する。そして、アービタ３０５０は、ＦＩＦＯ１，２からパケットデータdataを読み出す毎に上記ポインタｒｐ１，２を更新する。また、上記書き込みポインタｗｐ１，２の操作は、オーバーフロー制御部３０３０内の不図示のシーケンサによって行われる。
【０１２６】
次に、パケット完結検出部３０６０の内部の回路構成を図１７を参照しながら説明する。
パケットデコーダ３０６１は、ＦＩＦＯ１，２内に格納されているパケットの先頭ワードのデータをデコードして、該パケットの全体サイズを示すパケット長（packet size)をコンパレータ３０６３に出力する。
【０１２７】
演算器３０６２は、ＦＩＦＯ１，２から上記２つのポインタｒｐ，ｗｐの値を入力し、両ポインタ値からＦＩＦＯ１，２に格納されているパケットデータの個数（ワード数）を示すデータ長（data length)を求め、これを上記コンパレータ３０６３に出力する。
【０１２８】
コンパレータ３０６３は、パケットデコーダ３０６１から入力されるパケット長と演算器３０６２から入力されるデータ長とを比較する。そして、該データ長がパケット長以上であれば、ＦＩＦＯ１，２内においてパケットが完結していることを示すべくアービタ３０５０に加えるpacket complete 信号１，２を“アクティブ”にする。
【０１２９】
ポインタ比較器３０６４は、前述した図１３に示すポインタ比較器２０３１と同様な動作を行うものでＦＩＦＯ１，２から上記２つのポインタｒｐ（ｒｐ１，２），ｗｐ（ｗｐ１，２）を入力し、これら両ポインタ値を比較して、ＦＩＦＯ１，２が“充満状態（full) ”にあることを示すｆｕｌｌフラグ１，２信号と、該ＦＩＦＯ１，２が“空”になっていることを示すｅｍｐｔｙフラグ１，２信号を生成し、これらをオーバーフロー制御部３０３０に出力する。
【０１３０】
本実施例におけるオーバーフロー制御部３０３０内におけるインタラプト発生部３０３９の構成を図１９に示す。
同図に示すように、インタラプト発生部３０３９は前述したインタラプト発生部１０３９からコンパレータ１１０２，１１０６を削除した構成となっており、アンドゲート１１０４，１１０８には、それぞれ前記パケット完結検出部３０６０から出力されるｅｍｐｔｙフラグ１，２信号が入力される。そして、前記インタラプト発生部１０３９と同様に、フラグＦｉ（ｉ＝１，２）がセットされているときにＦＩＦＯｉが“空”になったら、割り込み信号Interrupt ２を“アクティブ”にしてプロセッサ１００に割り込みをかける。
【０１３１】
上述した実施例においては、パケット処理装置５００は、ＦＩＦＯバッファ１０１０内でパケットが完結した時点で、該パケットを取り出す。換言すれば、ＦＩＦＯバッファ１０１０内でパケットが未完結な場合、そのパケットデータdataのＦＩＦＯバッファ１０１０からの出力を抑制できる。これにより、プロセッサ１００のソフトウェア処理により、ＦＩＦＯバッファ１０１０にいったん入力された未完結なパケットの一部のデータdataをＦＩＦＯバッファ１０１０から取り出し一時的にメモリ３００上に設け不図示の退避領域に退避させておき、その後、この退避領域に退避させていたパケットデータdataを再びＦＩＦＯバッファ１０１０に復帰させることによりこのパケットをその他のパケットと同様にＦＩＦＯバッファ１０１０内で完結させることが可能である。
【０１３２】
このような機能は、プロセッサ１００がマルチプログラム処理をサポートしている場合に有効である。この場合、複数のプロセス（ここで、プロセスとは１つのプログラムの走行単位とする）が、１つのＦＩＦＯバッファ（ＦＩＦＯ１またはＦＩＦＯ２）をキューとして共有する際、あるプロセスが該ＦＩＦＯバッファにパケットを書き込んでいる途中で、別のプロセスに実行権がスイッチされこの別のプロセスがＦＩＦＯバッファにパケットを書き込む場合があり得る。このような場合、上記機能を利用することにより、両プロセスがＦＩＦＯバッファに正しくパケットを書き込むことが可能になる。
【０１３３】
図２０及び図２１は、上記機能を実現するプロセッサ１００並びにキュー装置１０００，２０００もしくは３０００の動作を説明するフローチャートである。図２０のフローチャートは、プロセッサ１００がプロセスＡの実行中に該プロセスＡの実行を中断し、他のプロセスＢの実行に移行する場合の動作を説明するフローチャートである。
【０１３４】
この場合、プロセッサ１００はオーバーフロー制御部１０３０（２０３０もしくは３０３０）を介しＦＩＦＯバッファ１０１０の書き込みポインタの値を読み出す（ステップＳ１０１）。
【０１３５】
次に、該書き込みポインタの指すアドレスのデータdataをオーバーフロー制御部１０３０（２０３０もしくは３０３０）を介しＦＩＦＯバッファ１０１０から読み出し（ステップＳ１０２）、該データがプロセスＡが書き込み途中のデータdataであるか否か判別する（ステップＳ１０３）。そして、プロセスＡが書き込み途中のデータdataであれば（Ｓ１０３，ＹＥＳ）、このデータdataをメモリ３００上の退避領域に退避する。そして、このデータの退避に伴ってＦＩＦＯバッファ１０１０の書き込みポインタを修正する（ステップＳ１０４）。
【０１３６】
上記ステップＳ１０１〜Ｓ１０４の処理を、プロセスＡが書き込み途中の全てのデータdataをＦＩＦＯバッファ１０１０からメモリ３００の上記退避領域に退避するまで繰り返し、ＦＩＦＯバッファ１０１０内にプロセスＡが書き込み途中のパケットのデータdataが無くなると（Ｓ１０３，ＮＯ）、処理を終了する。
【０１３７】
以上の処理によって、プロセスＡがその実行中にＦＩＦＯバッファ１０１０に書き込んでいた未完結のパケットがメモリ３００の特定領域に退避される。
次に、図２１はプロセッサ１００がプロセスＢの実行を終了して再びプロセスＡの実行を再開する前に行う動作を説明するフローチャートである。
【０１３８】
プロセッサ１００は、上記メモリ３００上の上記退避領域を調べ、該退避領域にプロセスＡの退避データdataが存在するか否か調べる（ステップＳ２０１）。
そして、該退避データdataが存在すれば（Ｓ２０１，ＹＥＳ）、これをオーバーフロー制御部１０３０（２０３０または３０３０）を介してＦＩＦＯバッファ１０１０に転送する。そして、該転送したデータ長に応じてＦＩＦＯバッファ１０１０の書き込みポインタを更新する（Ｓ２０２）。
【０１３９】
以上の処理により、ＦＩＦＯバッファ１０１０にはプロセスＢが書き込んだパケットに続いて、プロセスＡが中断させられる前に書き込んでいた未完結のパケットのデータdataが格納される。そして、これにより、プロセスＡは実行再開後、残りのパケットデータdataを該格納済のパケットデータdataに続いて書き込み、ＦＩＦＯバッファ１０１０に完結したパケットを書き込むことが可能になる。
【０１４０】
前記図２０のステップＳ１０３におけるプロセスＡが書き込み途中のデータがＦＩＦＯバッファ１０１０内に存在するか否かの判別は、例えば、以下のような方法により行う。
（１）前記図１４に示すように、ＦＩＦＯバッファ１０１０に格納する各パケットデータにend bit を付加する構成を採用する場合、ＦＩＦＯバッファ１０１０に最後に書き込まれたパケットデータに付加されているend bit の値を調べる。そして、該end bit に“０”（パケットの末尾データではないことを示す情報）が設定されていた場合には、プロセスＡが書き込み途中のデータがＦＩＦＯバッファ１０１０内に在ると判断する。そして、この場合には、図２２に示すようにend bit が“１”（パケットの末尾データであることを示す情報）に設定されている前パケットの末尾データの直前に格納されているパケットデータ（data) をメモリ３００上に設けられた退避領域に退避させる。
【０１４１】
（２）バスインタフェース４００にＦＩＦＯバッファ１０１０に書き込まれるパケットのデータ数を計数するカウンタを設ける。このカウンタは、ＦＩＦＯバッファ１０１０内に対するパケットの書き込み動作が開始される毎に計数を開始し、ＦＩＦＯバッファ１０１０にパケットの最後のデータの書き込みを終了した時点で“０”にリセットされ計数を終了する。したがって、プロセスＡからプロセスＢへの切り換えが発生した場合、上記カウンタの値を調べることにより、プロセスＡがパケットの書き込み途中であったか否かを判断できる。すなわち、上記カウンタの値が“０”であればパケットの書き込みは終了している。これに対し、該カウンタの値が“０”でない場合は、プロセスＡが書き込み途中のデータが該カウンタ値に等しい個数だけ有ることが分かる。したがって、ＦＩＦＯバッファ１０１０の末尾（一番最後に書かれたデータ）から、そのカウンタ値に等しい個数のデータをメモリ３００上の退避領域に退避させる。
【０１４２】
（３）前記図８または図１６に示すアービタ１０５０または３０５０に対して、図２３に示すように、入力信号pause と出力信号stopを付加する。入力信号pause はアービタ１０５０または３０５０に対して「停止」を指示する信号であり、出力信号stopはアービタ１０５０または３０５０がＦＩＦＯバッファ１０１０からのデータ出力を停止させている状態（停止状態）を示す信号である。
【０１４３】
アービタ１０５０または３０５０は、pause 信号により「停止」が指示されると( 図２４(a) ）、ＦＩＦＯバッファ１０１０からパケットＡの出力途中のデータが最後まで出力されるまで、すなわち、パケット処理装置５００からアクティブのdone信号が出力されるまでＦＩＦＯバッファ１０１０からデータを出力させる（図２４(b) ，(c) ）。そして、パケットＡのデータが最後まで出力されると、ＦＩＦＯバッファ１０１０からのデータ出力を停止させ、上記「停止状態」を示すstop信号をアクティブにする。したがって、stop信号がアクティブになっている状態においては、ＦＩＦＯバッファ１０１０の先頭データは必ずパケットの先頭のデータとなっている。
【０１４４】
マイクロプロセッサ１００は、プロセスＡからプロセスＢへ実行プロセスを切り換える際、例えば、バスインタフェース４００を介してアービタ１０５０または３０５０にアクティブのpause 信号を加える。そして、stop信号がアクティブに変化するのをバスインタフェース４００を介して検出すると、ＦＩＦＯバッファ１０１０の先頭からデータを順次読み出して、ＦＩＦＯバッファ１０１０内の内容を解析することにより、不完全なパケットすなわちプロセスＡが書き込み途中の未完結なパケットのデータがＦＩＦＯバッファ１０１０内にあるか否かを検出できる。
【図面の簡単な説明】
【０１４５】
【図１】本発明の原理を説明する図（その１）である。
【図２】本発明の原理を説明する図（その２）である。
【図３】本発明の原理を説明する図（その３）である。
【図４】本発明の原理を説明する図（その４）である。
【図５】本発明の一実施例のキュー装置の全体構成を示すブロック図である。
【図６】ＦＩＦＯバッファを、パケットを格納するキューとして使用する場合の一実施例を示す模式図である。
【図７】上述した図６に示す構成のＦＩＦＯバッファに格納するパケットの各データに該データがパケットの最後のデータであるか否かを示す１ビットの情報（end bit)を付加するようにした実施例を示す図である。
【図８】本発明の実施例のキュー装置を適用したプロセッサ要素の全体的な回路構成を示すブロック図てある。
【図９】(a) ，(b) は、上記図８に示すインタラプト発生部１０３９の回路構成例を示す図である。
【図１０】上記図８に示すＦＩＦＯバッファ（ＦＩＦＯ１，ＦＩＦＯ２）に格納されるパケットの形式を示す図である。
【図１１】上記図８に示す退避バッファ１０２０に退避されるパケットの形式を示す図である。
【図１２】退避バッファからＦＩＦＯバッファへのデータリストア処理を完全にハードウェアで実現するキュー装置を実装したプロセッサ要素で用いられる退避バッファの構成例を示す図である。
【図１３】上記データリストア処理をハードウェアにより実現するキュー装置を実装したプロセッサ要素の全体構成を示すブロック図である。
【図１４】上記図１３に示すキュー装置内の退避バッファ１０２０に格納されるパケットデータの形式を示す図である。
【図１５】上記図１３に示すキュー装置の動作を説明するフローチャートである。
【図１６】本発明のさらに別の実施例であるキュー装置を実装したプロセッサ要素の全体構成を示すブロック図である。
【図１７】上記図１６に示すＦＩＦＯバッファの構成を説明する図である。
【図１８】上記図１７に示すＦＩＦＯバッファに書き込まれるパケットの形式を示す図である。
【図１９】上記図１６に示すオーバーフロー制御部内におけるインタラプト発生部の構成を示す図である。
【図２０】プロセッサがプロセスＡの実行中に該プロセスＡの実行を中断し、同一のＦＩＦＯバッファをキューとして共有する他のプロセスＢの実行に移行する場合の動作を説明するフローチャートである。
【図２１】プロセッサが前記プロセスＢの実行を終了して再び前記プロセスＡの実行を再開する前に行う動作を説明するフローチャートである。
【図２２】上記図２０で述べたＦＩＦＯバッファに格納する各パケットデータにend bitを付加する動作を採用する例を示す図である。
【図２３】前記図８または図１６に示すアービタに対して、入力信号pause と出力信号stopを付加する構成を説明する図である。
【図２４】(a) ，(b) は、上記図２３に示す構成のアービタの動作を説明する図である。
【符号の説明】
【０１４６】
１，１１，２１，４１      ＦＩＦＯバッファ
２，１３，２３      退避バッファ
３，１４，２４      フラグ
４，１５，２５      第１の検出手段
５，４３      データ退避手段
６，１７，２７      第２の検出手段
７，１８，２８，４４      データリストア手段
８      第３の検出手段
１２      計数手段
１６，２６      パケットデータ退避手段
１９，２３      パケット完結検出手段
４２      記憶手段
【図１】
2005216317.tif 000003
【図２】
2005216317.tif 000004
【図３】
2005216317.tif 000005
【図４】
2005216317.tif 000006
【図５】
2005216317.tif 000007
【図６】
2005216317.tif 000008
【図７】
2005216317.tif 000009
【図８】
2005216317.tif 000010
【図９】
2005216317.tif 000011
【図１０】
2005216317.tif 000012
【図１１】
2005216317.tif 000013
【図１２】
2005216317.tif 000014
【図１３】
2005216317.tif 000015
【図１４】
2005216317.tif 000016
【図１５】
2005216317.tif 000017
【図１６】
2005216317.tif 000018
【図１７】
2005216317.tif 000019
【図１８】
2005216317.tif 000020
【図１９】
2005216317.tif 000021
【図２０】
2005216317.tif 000022
【図２１】
2005216317.tif 000023
【図２２】
2005216317.tif 000024
【図２３】
2005216317.tif 000025
【図２４】
2005216317.tif 000026