(57)【要約】【課題】  ソフトウェア制御によって、より小さい負荷で、かつより短い時間間隔でパケットの送信を制御する。【解決手段】  判定部２３２は、キュー長が所定の値よりも大きいか否かを判定する。入力制御部２３１は、キュー長が所定の値よりも大きいと判定された場合、パケットがエンキューされない旨の信号を生成し、ネットワーク層に供給する。入力制御部２３１は、キュー長が所定の値よりも大きくないと判定された場合、ネットワーク層からパケットを取得し、バッファに供給する。要求信号生成部２３４は、出力要求信号を生成し、信号処理部２３５に供給する。信号処理部２３５は、出力要求信号または割り込み信号が供給されると、パケットをデキューする旨の信号を生成し、出力制御部２３６に供給する。出力制御部２３６は、送信時刻を過ぎたパケットをバッファから取得し、デバイスドライバに供給する。本発明は、遠隔テレビ会議システムに適用できる。【選択図】  図８
2006115197.tif 000002
【特許請求の範囲】
【請求項１】
通信網を介してパケットを送信する送信装置であって、アプリケーションプログラムからパケットの送信が指示された場合、または送信を要求したパケットが、送信のためのキューに配置されたパケットを格納するバッファに格納されなかった場合、前記バッファに格納されているパケットの数が第１の閾値より小さいとき、前記通信網上の経路を特定した相手へのパケットの送信を要求する要求手段を備える送信装置において、
前記要求手段からパケットの送信が要求された場合、前記バッファに格納されているパケットの数が、前記第１の閾値より小さい第２の閾値以下であるか否かを判定する、プログラムの実行により実現される判定手段と、
前記バッファに格納されているパケットの数が前記第２の閾値以下であると判定された場合、前記要求手段から送信が要求されたパケットを前記バッファに格納し、前記バッファに格納されているパケットの数が前記第２の閾値を超えていると判定された場合、前記要求手段から送信が要求されたパケットを前記バッファに格納しないように、前記バッファへのパケットの格納を制御する、プログラムの実行により実現される格納制御手段と、
前記要求手段からパケットの送信が要求された場合、前記キューに基づき、前記バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する、プログラムの実行により実現される出力制御手段と
を備えることを特徴とする送信装置。
【請求項２】
前記出力制御手段は、前記要求手段からパケットの送信が要求された場合、送信する時刻となった前記パケットを、前記バッファから取得し、取得した前記パケットの、ハードウェアによる前記パケットの送信を制御する前記制御プログラムへの出力を制御する
ことを特徴とする請求項１に記載の送信装置。
【請求項３】
前記出力制御手段は、予め定められた所定の時間間隔で割り込み処理が要求された場合、送信する時刻となった前記パケットを、前記バッファから取得し、取得した前記パケットの、ハードウェアによる前記パケットの送信を制御する前記制御プログラムへの出力を制御する
ことを特徴とする請求項１に記載の送信装置。
【請求項４】
通信網を介してパケットを送信する送信方法であって、アプリケーションプログラムからパケットの送信が指示された場合、または送信を要求したパケットが、送信のためのキューに配置されたパケットを格納するバッファに格納されなかった場合、前記バッファに格納されているパケットの数が第１の閾値より小さいとき、前記通信網上の経路を特定した相手へのパケットの送信を要求する要求ステップを含む送信方法において、
前記要求ステップにおいてパケットの送信が要求された場合、前記バッファに格納されているパケットの数が、前記第１の閾値より小さい第２の閾値以下であるか否かを判定する判定ステップと、
前記バッファに格納されているパケットの数が前記第２の閾値以下であると判定された場合、前記要求ステップにおいて送信が要求されたパケットを前記バッファに格納し、前記バッファに格納されているパケットの数が前記第２の閾値を超えていると判定された場合、前記要求ステップにおいて送信が要求されたパケットを前記バッファに格納しないように、前記バッファへのパケットの格納を制御する格納制御ステップと、
前記要求ステップにおいてパケットの送信が要求された場合、前記キューに基づき、前記バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する出力制御ステップと
を含むことを特徴とする送信方法。
【請求項５】
アプリケーションプログラムからパケットの送信が指示された場合、または送信を要求したパケットが、送信のためのキューに配置されたパケットを格納するバッファに格納されなかった場合、前記バッファに格納されているパケットの数が第１の閾値より小さいとき、通信網上の経路を特定した相手へのパケットの送信を要求する要求ステップを含む、前記通信網を介してパケットを送信する送信処理用のプログラムであって、
前記要求ステップにおいてパケットの送信が要求された場合、前記バッファに格納されているパケットの数が、前記第１の閾値より小さい第２の閾値以下であるか否かを判定する判定ステップと、
前記バッファに格納されているパケットの数が前記第２の閾値以下であると判定された場合、前記要求ステップにおいて送信が要求されたパケットを前記バッファに格納し、前記バッファに格納されているパケットの数が前記第２の閾値を超えていると判定された場合、前記要求ステップにおいて送信が要求されたパケットを前記バッファに格納しないように、前記バッファへのパケットの格納を制御する格納制御ステップと、
前記要求ステップにおいてパケットの送信が要求された場合、前記キューに基づき、前記バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する出力制御ステップと
を含むことを特徴とするコンピュータが読み取り可能なプログラムが記録されている記録媒体。
【請求項６】
通信網を介してパケットを送信する送信処理であって、アプリケーションプログラムからパケットの送信が指示された場合、または送信を要求したパケットが、送信のためのキューに配置されたパケットを格納するバッファに格納されなかった場合、前記バッファに格納されているパケットの数が第１の閾値より小さいとき、前記通信網上の経路を特定した相手へのパケットの送信を要求する要求ステップを含む送信処理を、コンピュータに行わせるプログラムにおいて、
前記要求ステップにおいてパケットの送信が要求された場合、前記バッファに格納されているパケットの数が、前記第１の閾値より小さい第２の閾値以下であるか否かを判定する判定ステップと、
前記バッファに格納されているパケットの数が前記第２の閾値以下であると判定された場合、前記要求ステップにおいて送信が要求されたパケットを前記バッファに格納し、前記バッファに格納されているパケットの数が前記第２の閾値を超えていると判定された場合、前記要求ステップにおいて送信が要求されたパケットを前記バッファに格納しないように、前記バッファへのパケットの格納を制御する格納制御ステップと、
前記要求ステップにおいてパケットの送信が要求された場合、前記キューに基づき、前記バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する出力制御ステップと
を含むことを特徴とするプログラム。
【請求項７】
処理の実行を要求し、要求した処理が実行されなかった場合、繰り返し同じ処理の実行を要求する、プログラムの実行により実現される要求手段と、
前記要求手段から処理の実行が要求された場合、前記要求手段に継続して処理の実行を要求させるように、要求された処理の実行を制御する、プログラムの実行により実現される第１の実行制御手段と、
前記要求手段から処理の実行が要求された場合、他の処理の実行を制御する、プログラムの実行により実現される第２の実行制御手段と
を備えることを特徴とする制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は送信装置および方法、記録媒体、プログラム、並びに制御装置に関し、特に、パケットを送信する送信装置および方法、記録媒体、プログラム、並びに制御装置に関する。
【背景技術】
【０００２】
インターネットの普及にともない、ビデオ会議やＩＰ（Internet Protocol）電話などのリアルタイムアプリケーションプログラムが利用されるようになってきている。これらのリアルタイムアプリケーションプログラムを利用する場合、通信装置は、画像や音声などのデータをパケットに格納し、データが格納されたパケットを、ネットワークまたはインターネットを介して受信側の端末装置あてに送信する。
【０００３】
図１は、パケットを送信する通信装置が、アプリケーションプログラムおよびオペレーティングシステムのカーネルの機能を呼び出すことにより実現される、機能の構成を示すブロック図である。
【０００４】
アプリケーション層１１において、ユーザによって送信が指示されたデータは、アプリケーション層１１から、ネットワーク層１２に供給される。ネットワーク層１２において、アプリケーション層１１から供給されたデータは、パケットに格納される。そして、データが格納されたパケットは、ネットワーク層１２において、ルーティングテーブル１３を参照することにより、そのパケットの宛先（送信先）によって定まるデバイスドライバ１４−１またはデバイスドライバ１４−２に供給される。
【０００５】
ここで、ルーティングテーブル１３には、ネットワークに接続されている端末装置（通信装置）のアドレスと、ネットワークおよびインターネットにおける、端末装置までの経路（ゲートウェイ）を示す情報が含まれている。したがって、パケットの送信先である端末装置が特定されることで、ネットワークおよびインターネットにおける、端末装置までの経路が定まり、これにより、送信するパケットを処理する出力インターフェースが定まるので、パケットは、出力インターフェースに対応するデバイスドライバ１４−１またはデバイスドライバ１４−２に供給される。
【０００６】
デバイスドライバ１４−１およびデバイスドライバ１４−２は、物理的なデバイス（物理層１６−１または物理層１６−２）を制御し、またＯＳ（Operating System）と、物理的なデバイス（物理層１６−１または物理層１６−２）との間における処理の同期を取る役割を担っている。
【０００７】
デバイスドライバ１４−１に供給されたパケットは、デバイスドライバ１４−１の入力処理部３１−１によって、バッファ１５に格納され、記憶されて、FIFO（First In First Out）キューに配置される。物理層１６−１から、物理層１６−１におけるパケットの送信が終了した旨の割り込み信号が、デバイスドライバ１４−１に供給されると、バッファ１５に格納されたパケットは、FIFOキュー上の配置の順に、デバイスドライバ１４−１の出力処理部３２−１によって取得され、物理層１６−１に供給される。
【０００８】
物理層１６−１に供給されたパケットは、物理層１６−１において、通信のための電気信号に変換され、ネットワークまたはインターネットを介して、パケットの送信先である端末装置あてに送信される。
【０００９】
同様に、デバイスドライバ１４−２に供給されたパケットは、デバイスドライバ１４−２の入力処理部３１−２によって、バッファ１５に格納され、記憶されて、他のFIFOキューに配置される。物理層１６−２から、物理層１６−２におけるパケットの送信が終了した旨の割り込み信号が、デバイスドライバ１４−２に供給されると、バッファ１５に格納されたパケットは、FIFOキュー上の配置の順に、デバイスドライバ１４−２の出力処理部３２−２によって取得され、物理層１６−２に供給される。
【００１０】
物理層１６−２に供給されたパケットは、物理層１６−２において、電気信号に変換され、ネットワークまたはインターネットを介して、パケットの送信先である端末装置あてに送信される。
【００１１】
ところで、この通信装置においては、ネットワークまたはインターネットを介して、端末装置あてに送信されるパケットの送信間隔の調整などは行われていない。そのため、リアルタイムアプリケーションプログラムが、バースト転送により、アプリケーション層１１からネットワーク層１２にパケットを供給した場合、パケットは、物理層１６−１または物理層１６−２において、バースト転送により、送信先である端末装置あてに送信される。
【００１２】
しかしながら、リアルタイムアプリケーションプログラムを利用する場合、遅延の少ないデータ（パケット）転送が要求されるため、ネットワークまたはインターネットにおいてデータがバースト転送される、いわゆるバーストトラフィックの発生を、送信側の通信装置において、パケットを送信する間隔を調整することによって、回避しなければならないという課題があった。
【００１３】
すなわち、Sally Floyd氏が述べているように、バーストトラフィックは、各端末装置における輻輳の検知、使用帯域の減少、および使用帯域の増加の周期が同期するグローバルシンクロナイゼーションや、予想外のパケットロス、端末装置間におけるデータ転送の遅延の上昇など、多くの好ましくない事態を引き起こす要因となるため、このような事態の発生を回避するためには、送信側の通信装置（端末装置）において、トラフィック量を制御する、トラフィックシェーピングの技術が必要とされる（Sally Floyd and Van Jacobson，“Random Early Detection Gateways for Congestion Avoidance”，IEEE/ACM Transactions on Networking Vol.1 No.4，Aug，1993参照）。
【００１４】
そこで、デバイスドライバにおいて、トラフィック量の制御を行うことも提案されているが、デバイスドライバは、ネットワークカード、またはそこで用いられているハードウェア（チップ）の種類の数だけ存在するため、デバイスドライバにトラフィックシェーピングを行う機能を直接追加すると、膨大な量の作業が必要となってしまうという問題があった。
【００１５】
この問題を解決する方法として、Alan Cox氏は、Linux（商標）のRed Hat（商標）ディストリビューションで公開したSimple Traffic Shaperにおいて、仮想の出力インターフェースを考え、対応する仮想のデバイスドライバ（以下、仮想デバイスドライバと称する）を設け、トラフィック量の制御を行う方法を提案している。
【００１６】
図２は、仮想デバイスドライバにおいて、トラフィック量の制御を行う通信装置の機能の構成を示すブロック図である。なお、図中、図１における場合と対応する部分については、同一の符号を付してあり、その説明は、適宜、省略する。
【００１７】
ネットワーク層５１において、アプリケーション層１１から供給されたデータは、パケットに格納され、ルーティングテーブル５２を参照することにより、パケットの宛先（送信先）によって定まるインターネット上の経路を特定し、仮想デバイスドライバ５３に供給される。
【００１８】
すなわち、ルーティングテーブル５２は、アプリケーション層１１からネットワーク層５１に供給されたデータ（パケット）が、デバイスドライバ５６−１またはデバイスドライバ５６−２を介して送信される場合、パケットの宛先によって定まる出力インターフェースが、図示せぬ仮想出力インターフェースとなるようになされており、送信されるパケットは、仮想出力インターフェースに対応する、仮想デバイスドライバ５３に供給される。
【００１９】
仮想デバイスドライバ５３に供給されたパケットは、仮想デバイスドライバ５３の入力処理部７１によって、バッファ５５に格納され、FIFOキューに配置される。バッファ５５に格納されたパケットは、所定の時間間隔で、仮想デバイスドライバ５３の出力処理部７２に取得され、デバイスドライバ５６−１またはデバイスドライバ５６−２に供給される。
【００２０】
すなわち、仮想デバイスドライバ５３の出力処理部７２は、所定の時間間隔で、カーネルタイマ５４から、パケットを取得する旨の割り込み信号が供給されるごとに、バッファ５５からパケットを取得し、取得したパケットをデバイスドライバ５６−１またはデバイスドライバ５６−２に供給する。
【００２１】
デバイスドライバ５６−１に供給されたパケットは、デバイスドライバ５６−１の入力処理部７３−１によって、バッファ５５に格納される。物理層１６−１から、物理層１６−１におけるパケットの送信が終了した旨の割り込み信号が、デバイスドライバ５６−１に供給されると、バッファ５５に格納されたパケットは、デバイスドライバ５６−１の出力処理部７４−１によって取得され、物理層１６−１に供給される。
【００２２】
同様に、デバイスドライバ５６−２に供給されたパケットは、デバイスドライバ５６−２の入力処理部７３−２によって、バッファ５５に格納される。物理層１６−２から、物理層１６−２におけるパケットの送信が終了した旨の割り込み信号が、デバイスドライバ５６−２に供給されると、バッファ５５に格納されたパケットは、デバイスドライバ５６−２の出力処理部７４−２によって取得され、物理層１６−２に供給される。
【００２３】
図３のフローチャートを参照して、仮想デバイスドライバ５３による、パケットのエンキューの処理を説明する。
【００２４】
仮想デバイスドライバ５３は、ネットワーク層５１からパケットが供給されるごとに、所定の関数を呼び出し、パケットのエンキューの処理を行う。
【００２５】
ステップＳ１１において、仮想デバイスドライバ５３は、バッファ５５に格納するパケットの最大キュー長の設定を行う。例えば、ステップＳ１１において、仮想デバイスドライバ５３は、バッファ５５に格納するパケットの最大キュー長Ｑｍに“５”を設定する。ここで、最大キュー長Ｑｍとは、バッファ５５に格納することができるパケットの最大数をいう。したがって、最大キュー長Ｑｍに、“５”が設定されている場合、バッファ５５には、パケットを５つまで格納することができる。
【００２６】
ステップＳ１２において、仮想デバイスドライバ５３は、バッファ５５に格納されているパケットのキュー長の設定を行う。この場合、バッファ５５にはパケットが格納されていないので、仮想デバイスドライバ５３は、パケットのキュー長Ｑに“０”を設定する。ここで、キュー長Ｑとは、バッファ５５に格納されているパケットの数をいう。
【００２７】
ステップＳ１３において、仮想デバイスドライバ５３は、格納パケット番号の設定を行う。ここで、格納パケット番号とは、仮想デバイスドライバ５３がバッファ５５に格納したパケットのうち、最後に格納したパケットのパケット番号をいう。仮想デバイスドライバ５３は、ネットワーク層５１からパケットが供給されると、供給されたパケットに、各パケットを識別するためのパケット番号ｉを付す。パケット番号ｉは、“１”から昇順に付される。なお、パケット番号ｉが“０”である場合、仮想デバイスドライバ５３には、まだ、パケットが供給されていないことを示している。
【００２８】
したがって、この場合、バッファ５５にはパケットが格納されていないので、仮想デバイスドライバ５３は、格納パケット番号に“０”を設定する。
【００２９】
ステップＳ１４において、仮想デバイスドライバ５３の入力処理部７１は、ネットワーク層５１からパケットを取得する。
【００３０】
ステップＳ１５において、仮想デバイスドライバ５３の入力処理部７１は、キュー長Ｑが、最大キュー長Ｑｍよりも小さいか否かを判定する。ここで、仮想デバイスドライバ５３の入力処理部７１は、式（１）を計算し、キュー長Ｑおよび最大キュー長Ｑｍが、式（１）を満たすか否かを判定することにより、キュー長Ｑが、最大キュー長Ｑｍよりも小さい否かを判定する。
【００３１】
Ｑ＜Ｑｍ                                                        ・・・（１）
【００３２】
したがって、例えば、キュー長Ｑが“１”でああり、最大キュー長Ｑｍが“５”である場合、キュー長Ｑおよび最大キュー長Ｑｍは、式（１）を満たすので、キュー長Ｑが、最大キュー長Ｑｍよりも小さいと判定される。
【００３３】
ステップＳ１５において、キュー長Ｑが、最大キュー長Ｑｍよりも小さくないと判定された場合、バッファ５５には、これ以上、パケットを格納することができないので、ステップＳ１６に進み、仮想デバイスドライバ５３の入力処理部７１は、ネットワーク層５１から取得したパケットを破棄し、処理は、ステップＳ１４に戻る。
【００３４】
一方、ステップＳ１５において、キュー長Ｑが、最大キュー長Ｑｍよりも小さいと判定された場合、バッファ５５にパケットを格納することができるので、ステップＳ１７に進み、仮想デバイスドライバ５３の入力処理部７１は、ネットワーク層５１から供給されたパケットに、パケット番号ｉを付す。
【００３５】
ステップＳ１８において、仮想デバイスドライバ５３の入力処理部７１は、送信時刻算出の処理を行う。なお、送信時刻算出の処理の詳細は、後述するが、送信時刻算出の処理において、仮想デバイスドライバ５３の入力処理部７１は、ネットワーク層５１から供給されたパケットの送信時刻を算出する。ここで、パケットの送信時刻とは、パケットが物理層１６−１または物理層１６−２において、送信先の端末装置に送信される時刻をいう。
【００３６】
ステップＳ１９において、仮想デバイスドライバ５３の入力処理部７１は、格納パケット番号をインクリメントする。
【００３７】
ステップＳ２０において、仮想デバイスドライバ５３の入力処理部７１は、ネットワーク層５１から供給されたパケットをエンキューする。ここで、エンキューとは、パケットをFIFOキューに配置する処理（キューイング処理）をいう。すなわち、ステップＳ２０において、仮想デバイスドライバ５３の入力処理部７１は、ネットワーク層５１から供給されたパケットをバッファ５５に供給する。そして、仮想デバイスドライバ５３から供給されたパケットは、バッファ５５に記憶され、FIFOキューに配置される。
【００３８】
ステップＳ２１において、仮想デバイスドライバ５３の入力処理部７１は、キュー長Ｑをインクリメントし、処理は、ステップＳ１４に戻り、上述した処理を繰り返す。
【００３９】
図４のフローチャートを参照して、スケジューリングアルゴリズムとしてLeaky Bucketアルゴリズム（J.S.Turner，“New Directions in Communications（or Which Way to the Information Age）”，IEEE Communication Magazine Vol.24 pp.8-15，Oct，1986参照）が用いられている場合における、図３のステップＳ１８の処理に対応する送信時刻算出の処理を説明する。
【００４０】
ステップＳ４１において、仮想デバイスドライバ５３の入力処理部７１は、ネットワーク層５１から供給されたパケットのパケット番号ｉが、“０”であるか否かを判定する。
【００４１】
ステップＳ４１において、ネットワーク層５１から供給されたパケットのパケット番号ｉが、“０”でないと判定された場合、ステップＳ４２に進み、仮想デバイスドライバ５３の入力処理部７１は、ネットワーク層５１から供給されたパケットの送信時刻を算出する。ここで、仮想デバイスドライバ５３の入力処理部７１は、式（２）を計算することにより、パケットの送信時刻を算出する。
【００４２】
（Ｔｉ）＝（Ｔ（ｉ−１））＋（Ｌ（ｉ−１））／ｒ                ・・・（２）
【００４３】
ここで、Ｔｉは、パケット番号が“ｉ”であるパケットの送信時刻であり、Ｔ（ｉ−１）は、パケット番号が“ｉ−１”であるパケットの送信時刻である。また、Ｌ（ｉ−１）は、パケット番号が“ｉ−１”であるパケットの大きさ（サイズ（データ量））であり、ｒは、予め定められている、通信装置が送信するパケットの送信速度（以下、シェーピングレートと称する）である。
【００４４】
ステップＳ４３において、仮想デバイスドライバ５３の入力処理部７１は、キュー長Ｑが“０”であるか否かを判定する。ステップＳ４３において、キュー長Ｑが“０”でないと判定された場合、ステップＳ４５に進む。
【００４５】
一方、ステップＳ４３において、キュー長Ｑが“０”であると判定された場合、ステップＳ４４に進み、仮想デバイスドライバ５３の入力処理部７１は、算出した送信時刻Ｔｉが、現在時刻よりも後の時刻であるか否かを判定する。
【００４６】
ステップＳ４４において、算出した送信時刻Ｔｉが、現在時刻よりも後の時刻であると判定された場合、ステップＳ４５に進み、仮想デバイスドライバ５３の入力処理部７１は、パケット番号が“ｉ”であるパケットの送信時刻に、算出した送信時刻Ｔｉを設定し、処理は終了する。
【００４７】
ステップＳ４４において、算出した送信時刻Ｔｉが、現在時刻よりも後の時刻でないと判定された場合、算出した送信時刻Ｔｉは、すでに、過ぎてしまっているので、ステップＳ４６に進む。
【００４８】
また、ステップＳ４１において、ネットワーク層５１から供給されたパケットのパケット番号ｉが、“０”であると判定された場合、ステップＳ４６に進み、仮想デバイスドライバ５３の入力処理部７１は、パケット番号が“ｉ”であるパケットの送信時刻に、現在時刻を設定し、処理は終了する。
【００４９】
次に、図５のフローチャートを参照して、仮想デバイスドライバ５３による、パケットのデキューの処理を説明する。
【００５０】
仮想デバイスドライバ５３は、カーネルタイマ５４からパケットを取得する旨の割り込み信号が供給されるごとに、所定の関数を呼び出し、パケットのデキューの処理を行う。
【００５１】
ステップＳ６１において、仮想デバイスドライバ５３は、送信パケット番号の設定を行う。ここで、送信パケット番号とは、物理層１６−１または物理層１６−２において、送信先である端末装置に送信されたパケットのうち、最後に送信されたパケットのパケット番号をいう。換言すれば、送信パケット番号とは、物理層１６−１または物理層１６−２において、送信先である端末装置に送信されたパケットのパケット番号のうち、最も大きいパケット番号をいう。この場合、まだパケットが送信されていないので、仮想デバイスドライバ５３は、送信パケット番号に“０”を設定する。なお、送信パケット番号が“０”である場合、まだ、送信されたパケットがないことを示している。
【００５２】
ステップＳ６２において、仮想デバイスドライバ５３の出力処理部７２は、カーネルタイマ５４から割り込み信号が供給されたか否かを判定する。ステップＳ６２において、割り込み信号が供給されていないと判定された場合、割り込み信号が供給されるまでステップＳ６２の処理が繰り返される。
【００５３】
ステップＳ６２において、割り込み信号が供給されたと判定された場合、ステップＳ６３に進み、仮想デバイスドライバ５３の出力処理部７２は、現在時刻が、送信パケット番号と同じパケット番号のパケットに付された送信時刻を過ぎたか否かを判定する。ステップＳ６３において、現在時刻が、送信時刻を過ぎたと判定された場合、パケットを送信するので、ステップＳ６４に進み、仮想デバイスドライバ５３の出力処理部７２は、送信時刻となったパケットをデキューする。
【００５４】
ここで、パケットのデキューとは、バッファ５５に格納されているパケットであって、送信パケット番号と同じパケット番号のパケットを取得し、デバイスドライバ５６−１またはデバイスドライバ５６−２に供給（出力）する処理をいう。すなわち、ステップＳ６４において、仮想デバイスドライバ５３の出力処理部７２は、FIFOキューの先頭（出口側）に配置されている送信時刻となったパケットを、バッファ５５から取得し、取得したパケットをデバイスドライバ５６−１またはデバイスドライバ５６−２に供給する。
【００５５】
ステップＳ６５において、仮想デバイスドライバ５３の出力処理部７２は、送信パケット番号をインクリメントする。
【００５６】
ステップＳ６６において、仮想デバイスドライバ５３の出力処理部７２は、キュー長Ｑをデクリメントし、処理はステップＳ６２に戻る。
【００５７】
一方、ステップＳ６３において、現在時刻が、送信時刻を過ぎていないと判定された場合、パケットを送信しないので、ステップＳ６２に戻り、上述した処理を繰り返す。
【００５８】
ところで、カーネルタイマ５４のタイマイベントの発生周期は、通常100Hzであるので、カーネルタイマ５４は、10msecごとに割り込み信号を仮想デバイスドライバ５３に供給する。したがって、トラフィックシェーピングの制御の粒度は、10msecとなる。
【００５９】
例えば、パケットの大きさ（パケットサイズ）が固定長で1Kbyteであるパケットを、10Mbpsのシェーピングレートで送信した場合、通信装置は、カーネルタイマ５４が、割り込み信号を仮想デバイスドライバ５３に供給するごとに、100Kbitのデータを送信することになる。すなわち、100Kbitのデータは、パケットサイズが1Kbyteであるパケットの約１２個分に相当するので、通信装置は、カーネルタイマ５４が、割り込み信号を仮想デバイスドライバ５３に供給するごとに、１２個のパケットをバースト転送することになる。
【００６０】
また、High-resolution timerでは、インテル社のペンティアム（登録商標）プロセッサ上のAPIC（Advanced Programmable Interrupt Controller）を用いて、トラフィックシェーピングを行っている（Luca Abeni，Ashvin Goel，Charles Krasic，Jim Snow and Jonathan Walpole，“A Measurement-Based Analysis of the Real-Time Performance of Linux”，IEEE RTAS 02，Sep，2002参照）。このAPICは、ＯＳに任意の時間経過後にハードウェア割り込みを発生させることにより、パケットの送信間隔を調整している。
【００６１】
さらに、また、ATM（Asynchronous Transfer Mode）方式の通信網において、ハードウェアによるトラフィックシェーピングを行う通信装置もある。
【００６２】
さらに、また、ネットワークカード上のプロセッサが、トラフィックシェーピングを行う通信装置もある（例えば、特許文献１参照）。
【００６３】
【特許文献１】特開２００１−２１１２０７号公報
【発明の開示】
【発明が解決しようとする課題】
【００６４】
しかしながら、上述した技術においては、トラフィックシェーピングを行う専用のハードウェアを用いることなく、ソフトウェア制御により、パケットの送信間隔を制御することはできなかった。
【００６５】
また、ハードウェアによるパケットの送信間隔の制御は、ＯＳに対する負荷が大きいため、高頻度での使用には適していないという課題があった。
【００６６】
したがって、パケット伝送の遅延ゆらぎ（ジッタ）を減少させ、遅延の少ないデータ転送を実現することができなかった。
【００６７】
本発明は、このような状況に鑑みてなされたものであり、ソフトウェア制御によって、より小さい負荷で、かつより短い時間間隔でパケットの送信を制御できるようにするものである。また、ソフトウェア制御によって、より短い時間間隔で処理を制御することができるようにするものである。
【課題を解決するための手段】
【００６８】
本発明の送信装置は、要求手段からパケットの送信が要求された場合、バッファに格納されているパケットの数が、第１の閾値より小さい第２の閾値以下であるか否かを判定する、プログラムの実行により実現される判定手段と、バッファに格納されているパケットの数が第２の閾値以下であると判定された場合、要求手段から送信が要求されたパケットをバッファに格納し、バッファに格納されているパケットの数が第２の閾値を超えていると判定された場合、要求手段から送信が要求されたパケットをバッファに格納しないように、バッファへのパケットの格納を制御する、プログラムの実行により実現される格納制御手段と、要求手段からパケットの送信が要求された場合、キューに基づき、バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する、プログラムの実行により実現される出力制御手段とを備えることを特徴とする。
【００６９】
出力制御手段は、要求手段からパケットの送信が要求された場合、送信する時刻となったパケットを、バッファから取得し、取得したパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御するようにすることができる。
【００７０】
出力制御手段は、予め定められた所定の時間間隔で割り込み処理が要求された場合、送信する時刻となったパケットを、バッファから取得し、取得したパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御するようにすることができる。
【００７１】
本発明の送信方法は、パケットの送信を要求する要求ステップにおいてパケットの送信が要求された場合、バッファに格納されているパケットの数が、第１の閾値より小さい第２の閾値以下であるか否かを判定する判定ステップと、バッファに格納されているパケットの数が第２の閾値以下であると判定された場合、要求ステップにおいて送信が要求されたパケットをバッファに格納し、バッファに格納されているパケットの数が第２の閾値を超えていると判定された場合、要求ステップにおいて送信が要求されたパケットをバッファに格納しないように、バッファへのパケットの格納を制御する格納制御ステップと、要求ステップにおいてパケットの送信が要求された場合、キューに基づき、バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する出力制御ステップとを含むことを特徴とする。
【００７２】
本発明の記録媒体のプログラムは、パケットの送信を要求する要求ステップにおいてパケットの送信が要求された場合、バッファに格納されているパケットの数が、第１の閾値より小さい第２の閾値以下であるか否かを判定する判定ステップと、バッファに格納されているパケットの数が第２の閾値以下であると判定された場合、要求ステップにおいて送信が要求されたパケットをバッファに格納し、バッファに格納されているパケットの数が第２の閾値を超えていると判定された場合、要求ステップにおいて送信が要求されたパケットをバッファに格納しないように、バッファへのパケットの格納を制御する格納制御ステップと、要求ステップにおいてパケットの送信が要求された場合、キューに基づき、バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する出力制御ステップとを含むことを特徴とする。
【００７３】
本発明のプログラムは、パケットの送信を要求する要求ステップにおいてパケットの送信が要求された場合、バッファに格納されているパケットの数が、第１の閾値より小さい第２の閾値以下であるか否かを判定する判定ステップと、バッファに格納されているパケットの数が第２の閾値以下であると判定された場合、要求ステップにおいて送信が要求されたパケットをバッファに格納し、バッファに格納されているパケットの数が第２の閾値を超えていると判定された場合、要求ステップにおいて送信が要求されたパケットをバッファに格納しないように、バッファへのパケットの格納を制御する格納制御ステップと、要求ステップにおいてパケットの送信が要求された場合、キューに基づき、バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する出力制御ステップとをコンピュータに実行させることを特徴とする。
【００７４】
送信装置は、独立した装置であってもよいし、通信装置の送信処理を行うブロックであってもよい。
【００７５】
本発明の制御装置は、処理の実行を要求し、要求した処理が実行されなかった場合、繰り返し同じ処理の実行を要求する、プログラムの実行により実現される要求手段と、要求手段から処理の実行が要求された場合、要求手段に継続して処理の実行を要求させるように、要求された処理の実行を制御する、プログラムの実行により実現される第１の実行制御手段と、要求手段から処理の実行が要求された場合、他の処理の実行を制御する、プログラムの実行により実現される第２の実行制御手段とを備えることを特徴とする。
【００７６】
本発明の送信装置および方法、記録媒体、並びにプログラムにおいては、要求手段からパケットの送信が要求された場合、バッファに格納されているパケットの数が、第１の閾値より小さい第２の閾値以下であるか否かが判定され、バッファに格納されているパケットの数が第２の閾値以下であると判定された場合、要求手段から送信が要求されたパケットがバッファに格納され、バッファに格納されているパケットの数が第２の閾値を超えていると判定された場合、要求手段から送信が要求されたパケットがバッファに格納されないように、バッファへのパケットの格納が制御され、要求手段からパケットの送信が要求された場合、キューに基づき、バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力が制御される。
【００７７】
本発明の制御装置においては、処理の実行が要求され、要求された処理が実行されなかった場合、繰り返し同じ処理の実行が要求され、要求手段から処理の実行が要求された場合、要求手段に継続して処理の実行を要求させるように、要求された処理の実行が制御され、要求手段から処理の実行が要求された場合、他の処理の実行が制御される。
【００７８】
ネットワークとは、少なくとも２つの装置が接続され、ある装置から、他の装置に対して、情報の伝達をできるようにした仕組みをいう。ネットワークを介して通信する装置は、独立した装置どうしであっても良いし、１つの装置を構成している内部ブロックどうしであっても良い。
【００７９】
また、通信とは、無線通信および有線通信は勿論、無線通信と有線通信とが混在した通信、即ち、ある区間では無線通信が行われ、他の区間では有線通信が行われるようなものであっても良い。さらに、ある装置から他の装置への通信が有線通信で行われ、他の装置からある装置への通信が無線通信で行われるようなものであっても良い。
【発明の効果】
【００８０】
本発明によれば、データを送信することができる。また、本発明によれば、ソフトウェア制御によって、より小さい負荷で、かつより短い時間間隔でパケットの送信を制御することができる。さらに、また、本発明によれば、ソフトウェア制御によって、より短い時間間隔で処理を制御することができる。
【発明を実施するための最良の形態】
【００８１】
以下に本発明の実施の形態を説明するが、本明細書に記載の発明と、発明の実施の形態との対応関係を例示すると、次のようになる。この記載は、本明細書に記載されている発明をサポートする実施の形態が本明細書に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
【００８２】
さらに、この記載は、本明細書に記載されている発明の全てを意味するものではない。換言すれば、この記載は、本明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現、追加される発明の存在を否定するものではない。
【００８３】
請求項１に記載の送信装置は、要求手段（例えば、図７のネットワーク層１７２において実行されるプログラム）からパケットの送信が要求された場合、バッファ（例えば、図７のバッファ１７６）に格納されているパケットの数が、第１の閾値より小さい第２の閾値以下であるか否かを判定する、プログラムの実行により実現される判定手段（例えば、図８の判定部２３２）と、バッファに格納されているパケットの数が第２の閾値以下であると判定された場合、要求手段から送信が要求されたパケットをバッファに格納し、バッファに格納されているパケットの数が第２の閾値を超えていると判定された場合、要求手段から送信が要求されたパケットをバッファに格納しないように、バッファへのパケットの格納を制御する、プログラムの実行により実現される格納制御手段（例えば、図８の入力制御部２３１）と、要求手段からパケットの送信が要求された場合、キューに基づき、バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する、プログラムの実行により実現される出力制御手段（例えば、図８の出力制御部２３６）とを備えることを特徴とする。
【００８４】
請求項２に記載の送信装置は、出力制御手段（例えば、図８の出力制御部２３６）は、要求手段（例えば、図７のネットワーク層１７２において実行されるプログラム）からパケットの送信が要求された場合、送信する時刻となったパケットを、バッファから取得し、取得したパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御するようにすることができる。
【００８５】
請求項３に記載の送信装置は、出力制御手段（例えば、図８の出力制御部２３６）は、予め定められた所定の時間間隔で割り込み処理が要求された場合、送信する時刻となったパケットを、バッファから取得し、取得したパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御するようにすることができる。
【００８６】
請求項４に記載の送信方法は、パケットの送信を要求する要求ステップ（例えば、図７のネットワーク層１７２において実行されるプログラムが、入力要求信号を仮想デバイスドライバ１７４に供給する処理）においてパケットの送信が要求された場合、バッファ（例えば、図７のバッファ１７６）に格納されているパケットの数が、第１の閾値より小さい第２の閾値以下であるか否かを判定する判定ステップ（例えば、図９のステップＳ８５の処理）と、バッファに格納されているパケットの数が第２の閾値以下であると判定された場合、要求ステップにおいて送信が要求されたパケットをバッファに格納し、バッファに格納されているパケットの数が第２の閾値を超えていると判定された場合、要求ステップにおいて送信が要求されたパケットをバッファに格納しないように、バッファへのパケットの格納を制御する格納制御ステップ（例えば、図９のステップＳ８９の処理またはステップＳ９２の処理）と、要求ステップにおいてパケットの送信が要求された場合、キューに基づき、バッファに格納されているパケットの、ハードウェアによるパケットの送信を制御する制御プログラムへの出力を制御する出力制御ステップ（例えば、図１１のステップＳ１３４の処理）とを含むことを特徴とする。
【００８７】
なお、請求項５に記載の記録媒体および請求項６に記載のプログラムも、上述した請求項４に記載の送信方法と基本的に同様の処理であるため、繰り返しになるのでその説明は省略する。
【００８８】
請求項７に記載の制御装置は、処理の実行を要求し、要求した処理が実行されなかった場合、繰り返し同じ処理の実行を要求する、プログラムの実行により実現される要求手段（例えば、図７のネットワーク層１７２において実行されるプログラム）と、要求手段から処理の実行が要求された場合、要求手段に継続して処理の実行を要求させるように、要求された処理の実行を制御する、プログラムの実行により実現される第１の実行制御手段（例えば、図８の入力処理部２１１）と、要求手段から処理の実行が要求された場合、他の処理の実行を制御する、プログラムの実行により実現される第２の実行制御手段（例えば、図８の出力処理部２１４）とを備えることを特徴とする。
【００８９】
本発明は、例えば、インターネット電話、遠隔テレビ会議システム、ライブ映像ストリーミング配信システム、またはテレビ電話などのリアルタイムにストリーミングデータを伝送する通信システムに適用できる。
【００９０】
以下、図を参照して、本発明を適用した実施の形態について説明する。
【００９１】
図６は、本発明を適用した通信装置の構成の例を示すブロック図である。
【００９２】
CPU（Central Processing Unit）１０１は、ROM（Read Only Memory）１０２、または記録部１０８に記録されているプログラムに従って各種の処理を実行する。RAM（Random Access Memory）１０３には、CPU１０１が実行するプログラムやデータなどが適宜記憶される。これらのCPU１０１、ROM１０２、およびRAM１０３は、バス１０４により相互に接続されている。
【００９３】
CPU１０１にはまた、バス１０４を介して入出力インターフェース１０５が接続されている。入出力インターフェース１０５には、キーボード、マウス、スイッチなどよりなる入力部１０６、ディスプレイ、スピーカ、ランプなどよりなる出力部１０７が接続されている。CPU１０１は、入力部１０６から入力される指令に対応して各種の処理を実行する。
【００９４】
入出力インターフェース１０５に接続されている記録部１０８は、例えばハードディスクなどで構成され、CPU１０１が実行するプログラムや各種のデータを記録する。通信部１０９は、例えば、ネットワークカードなどからなり、インターネット、その他のネットワークなどの通信網を介して、外部の装置と通信する。
【００９５】
また、通信部１０９は、通信網を介してプログラムを取得し、記録部１０８に記録させるようにしてもよい。
【００９６】
入出力インターフェース１０５に接続されているドライブ１１０は、磁気ディスク１３１、光ディスク１３２、光磁気ディスク１３３、或いは半導体メモリ１３４などが装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて記録部１０８に転送され、記録される。
【００９７】
図７は、プログラムを実行するCPU１０１の機能の構成を示すブロック図である。
【００９８】
アプリケーション層１７１において、ユーザによって送信が指示されたデータは、アプリケーション層１７１から、ネットワーク層１７２に供給される。ネットワーク層１７２において、アプリケーション層１７１から供給されたデータは、パケットに格納される。
【００９９】
データがパケットに格納されると、ネットワーク層１７２において、パケットのエンキューを要求する旨の入力要求信号が生成される。生成された入力要求信号は、ネットワーク層１７２において、ルーティングテーブル１７３を参照することによって、パケットの送信先によって定まる通信網における経路を特定し、仮想デバイスドライバ１７４に供給される。
【０１００】
すなわち、ルーティングテーブル１７３には、通信網に接続されている端末装置（通信装置）のアドレスと、通信網における、端末装置までの経路（ゲートウェイ）を示す情報が含まれている。アプリケーション層１７１からネットワーク層１７２に供給されたデータ（パケット）が、デバイスドライバ１７７−１乃至デバイスドライバ１７７−Ｎのいずれかを介して送信される場合、パケットの宛先によって定まる出力インターフェースが、図示せぬ仮想出力インターフェースとなるようになされており、入力要求信号は、仮想出力インターフェースに対応する、仮想デバイスドライバ１７４に供給される。また、ルーティングテーブル１７３は、アプリケーション層１７１において実行されるプログラムによって、更新される。
【０１０１】
仮想デバイスドライバ１７４からネットワーク層１７２に、パケットがエンキューされない旨の信号が供給されると、ネットワーク層１７２において、エンキューされなかったパケットのエンキューを要求する旨の入力要求信号が生成される。生成された入力要求信号は、仮想デバイスドライバ１７４に供給される。すなわち、ネットワーク層１７２において実行されるプログラムは、例えば、パケットのエンキュー処理などの所定の処理を要求し、要求した処理が実行されなかった場合、繰り返し同じ処理の実行を要求する。
【０１０２】
また、ネットワーク層１７２から仮想デバイスドライバ１７４にデータが格納されたパケットが供給される。
【０１０３】
仮想デバイスドライバ１７４は、ネットワーク層１７２から、入力要求信号が供給されると、バッファ１７６に記憶されているパケットのキュー長Ｑおよび最大キュー長Ｑｍを基に、パケットをエンキューすることができるか否かを判定する。
【０１０４】
ここで、最大キュー長Ｑｍとは、バッファ１７６に格納することができるパケットの最大数をいう。また、キュー長Ｑとは、バッファ１７６に格納されているパケットの数をいう。
【０１０５】
仮想デバイスドライバ１７４は、パケットをエンキューすることができると判定された場合、ネットワーク層１７２からパケットを取得し、取得したパケットをバッファ１７６に供給し、FIFOキューなどのキューに配置する。そして、仮想デバイスドライバ１７４は、パケットがエンキューされた旨の信号を生成し、生成した、パケットがエンキューされた旨の信号をネットワーク層１７２に供給する。
【０１０６】
仮想デバイスドライバ１７４は、パケットをエンキューすることができないと判定された場合、ネットワーク層１７２からパケットを取得しない。仮想デバイスドライバ１７４は、パケットがエンキューされない旨の信号を生成し、生成したパケットがエンキューされない旨の信号を、ネットワーク層１７２に供給する。
【０１０７】
仮想デバイスドライバ１７４は、カーネルタイマ１７５から、パケットを取得する旨の割り込み信号が供給された場合、またはネットワーク層１７２からパケットのエンキューを要求する旨の入力要求信号が供給された場合、バッファ１７６に記憶（格納）されているパケットのうち、送信時刻となったパケットを取得し、取得したパケットをデバイスドライバ１７７−１乃至デバイスドライバ１７７−Ｎの何れかに供給する。
【０１０８】
カーネルタイマ１７５は、所定の時間間隔（例えば、10msec）で、パケットを取得する旨の割り込み信号を生成し、生成した割り込み信号を、仮想デバイスドライバ１７４に供給する。すなわち、カーネルタイマ１７５は、タイマイベントが発生するごとに、パケットを取得する旨の割り込み信号を生成し、生成した割り込み信号を、仮想デバイスドライバ１７４に供給する。
【０１０９】
バッファ１７６は、例えば、RAM１０３の所定の記憶領域などからなり、FIFOキューなどのキューとしての記憶領域に、デバイスドライバ１７７−１乃至デバイスドライバ１７７−Ｎの何れか、または仮想デバイスドライバ１７４から供給されたパケットを格納し、記憶する。バッファ１７６は、記憶しているパケットを、デバイスドライバ１７７−１乃至デバイスドライバ１７７−Ｎの何れか、または仮想デバイスドライバ１７４に供給する。
【０１１０】
デバイスドライバ１７７−１乃至デバイスドライバ１７７−Ｎ（デバイスドライバ１７７−２乃至デバイスドライバ１７７−（Ｎ−１）は図示せず）のそれぞれは、物理的なデバイス（物理層１７８−１乃至物理層１７８−Ｎ（物理層１７８−２乃至物理層１７８−（Ｎ−１）は図示せず）のそれぞれを制御し、ＯＳと、物理的なデバイス（物理層１７８−１乃至物理層１７８−Ｎ）のそれぞれとの間における処理の同期を取る役割を担っている。
【０１１１】
デバイスドライバ１７７−１乃至デバイスドライバ１７７−Ｎのそれぞれは、入力処理部１９１−１乃至入力処理部１９１−Ｎのそれぞれ、および出力処理部１９２−１乃至出力処理部１９２−Ｎのそれぞれを備えている。
【０１１２】
デバイスドライバ１７７−１の入力処理部１９１−１乃至デバイスドライバ１７７−Ｎの入力処理部１９１−Ｎのそれぞれは、仮想デバイスドライバ１７４から供給されたパケットをバッファ１７６に供給する。
【０１１３】
デバイスドライバ１７７−１の出力処理部１９２−１乃至デバイスドライバ１７７−Ｎの出力処理部１９２−Ｎのそれぞれは、物理層１７８−１乃至物理層１７８−Ｎのそれぞれから、パケットの送信が終了した旨の割り込み信号が供給されると、バッファ１７６からパケットを取得し、取得したパケットを物理層１７８−１乃至物理層１７８−Ｎのそれぞれに供給する。
【０１１４】
より具体的には、例えば、仮想デバイスドライバ１７４、およびデバイスドライバ１７７−１乃至デバイスドライバ１７７−Ｎは、パケットが記憶されているバッファ１７６のアドレスを示すポインタをキューに配置することにより、バッファ１７６においてパケットを移動させることなく、キューに基づく順序で、パケットを入力したり、パケットを出力したりする。
【０１１５】
以下、デバイスドライバ１７７−１乃至デバイスドライバ１７７−Ｎのそれぞれを個々に区別する必要のない場合、単に、デバイスドライバ１７７と称する。また、以下、入力処理部１９１−１乃至入力処理部１９１−Ｎのそれぞれを、個々に区別する必要のない場合、単に、入力処理部１９１と称する。さらに、以下、出力処理部１９２−１乃至出力処理部１９２−Ｎのそれぞれを、個々に区別する必要のない場合、単に、出力処理部１９２と称する。
【０１１６】
物理層１７８−１乃至物理層１７８−Ｎのそれぞれは、例えば、ベースバンド通信網またはブロードバンド通信網などのイーサネット（登録商標）や光通信網に接続するためのネットワークカードなどにより構成さる。物理層１７８−１乃至物理層１７８−Ｎのそれぞれは、デバイスドライバ１７７から供給されたパケットを、電気信号または光信号に変換し、電気信号または光信号に変換したパケットを、ネットワークまたはインターネットなどの通信網を介して、送信先の端末装置あてに送信する。また、物理層１７８−１乃至物理層１７８−Ｎのそれぞれは、デバイスドライバ１７７から供給されたパケットを送信してから、パケットの送信が終了した旨の割り込み信号を生成し、生成した割り込み信号を、デバイスドライバ１７７に供給する。
【０１１７】
以下、物理層１７８−１乃至物理層１７８−Ｎのそれぞれを、個々に区別する必要のない場合、単に、物理層１７８と称する。
【０１１８】
図８は、仮想デバイスドライバ１７４の機能の構成を示すブロック図である。
【０１１９】
仮想デバイスドライバ１７４は、入力処理部２１１、キュー情報保持部２１２、出力情報保持部２１３、出力処理部２１４、および時刻保持部２１５を含むように構成される。
【０１２０】
入力処理部２１１は、ネットワーク層１７２からパケットを取得し、取得したパケットを、バッファ１７６に供給する。入力処理部２１１は、入力制御部２３１、判定部２３２、算出部２３３、および要求信号生成部２３４を備えている。
【０１２１】
入力制御部２３１は、ネットワーク層１７２から、パケットのエンキューを要求する旨の入力要求信号が供給されると、パケットがエンキュー可能であるか否かの判定を要求する旨の判定要求信号を生成し、生成した判定要求信号を、判定部２３２に供給する。
【０１２２】
入力制御部２３１は、判定部２３２から、エンキューが可能である旨の信号が供給されると、ネットワーク層１７２からパケットを取得し、取得したパケットにパケット番号ｉを付す。入力制御部２３１は、パケット番号ｉを付してから、取得したパケットの大きさ、パケット番号ｉなどを示す情報が含まれるパケット情報を生成し、生成したパケット情報を、算出部２３３に供給する。
【０１２３】
ここで、パケット番号ｉとは、パケットを識別する番号であり、パケット番号は、“１”から昇順に付される。なお、パケット番号ｉが“０”である場合、入力制御部２３１には、まだ、パケットが供給されていないことを示している。
【０１２４】
入力制御部２３１は、算出部２３３から、送信時刻を設定した旨の信号が供給されると、取得したパケットをバッファ１７６に供給する。なお、以下、入力制御部２３１が、パケットをエンキューする処理を、パケットの入力処理とも称する。入力制御部２３１は、パケットをバッファ１７６に供給してから、パケットがエンキューされた旨の信号を生成し、生成したパケットがエンキューされた旨の信号を、ネットワーク層１７２に供給する。
【０１２５】
入力制御部２３１は、判定部２３２からエンキューが不可能である旨の信号が供給されると、パケットがエンキューされない旨の信号を生成し、生成したパケットがエンキューされない旨の信号を、ネットワーク層１７２に供給する。すなわち、入力制御部２３１は、パケットがエンキューされた旨の信号またはパケットがエンキューされない旨の信号を生成し、生成したパケットがエンキューされた旨の信号またはパケットがエンキューされない旨の信号を、ネットワーク層１７２に供給することにより、パケットのバッファ１７６への格納を制御する。
【０１２６】
入力制御部２３１は、ネットワーク層１７２からパケットのエンキューが要求されると、すなわち、パケットがエンキューされた旨の信号、またはパケットがエンキューされない旨の信号を、ネットワーク層１７２に供給すると、パケットのデキューを要求するために、出力要求信号を生成する旨の信号を生成し、生成した出力要求信号を生成する旨の信号を、要求信号生成部２３４に供給する。
【０１２７】
判定部２３２は、入力制御部２３１から、判定要求信号が供給されると、キュー情報保持部２１２が保持している、最大キュー長Ｑｍおよびキュー長Ｑを基に、バッファ１７６にパケットのエンキューが可能であるか否かを判定する。
【０１２８】
ここで、最大キュー長Ｑｍとは、バッファ１７６に格納することができるパケットの最大数をいう。また、キュー長Ｑとは、バッファ１７６に格納されているパケットの数をいう。さらに、パケットのキュー長Ｑに“０”が設定されている場合、バッファ１７６には、パケットが格納されていないことを示している。
【０１２９】
判定部２３２は、パケットのエンキューが可能であると判定された場合、エンキューが可能である旨の信号を生成し、生成したエンキューが可能である旨の信号を、入力制御部２３１に供給する。また、判定部２３２は、パケットのエンキューが可能でないと判定された場合、エンキューが不可能である旨の信号を生成し、生成したエンキューが不可能である旨の信号を、入力制御部２３１に供給する。
【０１３０】
算出部２３３は、入力制御部２３１からパケット情報が供給されると、供給されたパケット情報、出力情報保持部２１３に保持されているシェーピングレート、１つ前のパケット番号のパケットの送信時刻、１つ前のパケット番号のパケットのパケットサイズ、および時刻保持部２１５から供給された現在時刻を基に、パケットの送信時刻を算出し、算出した送信時刻およびパケット情報を出力情報保持部２１３に供給する。ここで、１つ前のパケット番号のパケットとは、例えば、パケット番号が“２”であるパケットに対して、パケット番号が“１”であるパケットをいう。
【０１３１】
算出部２３３は、パケットの送信時刻を算出すると、キュー情報保持部２１２に、キュー情報保持部２１２が保持しているキュー長Ｑをインクリメントさせる。また、算出部２３３は、パケットの送信時刻を算出すると、出力情報保持部２１３に、出力情報保持部２１３が保持している格納パケット番号をインクリメントさせる。ここで、格納パケット番号とは、入力制御部２３１がバッファ１７６に格納したパケットのうち、最後に格納したパケットのパケット番号をいう。また、格納パケット番号が“０”である場合、まだ、バッファ１７６には、パケットが格納されていないことを示している。
【０１３２】
算出部２３３は、パケットの送信時刻を算出すると、送信時刻を設定した旨の信号を生成し、生成した送信時刻を設定した旨の信号を、入力制御部２３１に供給する。
【０１３３】
要求信号生成部２３４は、入力制御部２３１から、出力要求信号を生成する旨の信号が供給されると、パケットのデキューを要求する旨の出力要求信号を生成し、生成した出力要求信号を、出力処理部２１４に供給する。
【０１３４】
キュー情報保持部２１２は、バッファ１７６に記憶されているパケットのキュー長Ｑ、および予め定められている、最大キュー長Ｑｍを保持している。
【０１３５】
キュー情報保持部２１２は、入力処理部２１１による制御のもと、保持しているキュー長Ｑをインクリメントする。また、キュー情報保持部２１２は、出力処理部２１４による制御のもと、保持しているキュー長Ｑをデクリメントする。
【０１３６】
出力情報保持部２１３は、予め定められたシェーピングレート、入力処理部２１１から供給された、パケットの送信時刻、パケット情報、格納パケット番号、および送信パケット番号を保持する。ここで、送信パケット番号とは、物理層１７８において、送信先である端末装置に送信されたパケットのうち、最後に送信されたパケットのパケット番号をいう。換言すれば、送信パケット番号とは、物理層１７８において、送信先である端末装置に送信されたパケットのパケット番号のうち、最も大きいパケット番号をいう。なお、送信パケット番号が“０”である場合、まだ、送信されたパケットがないことを示している。
【０１３７】
出力情報保持部２１３は、入力処理部２１１による制御のもと、保持している格納パケット番号をインクリメントする。また、出力情報保持部２１３は、出力処理部２１４による制御のもと、保持している送信パケット番号をインクリメントする。
【０１３８】
出力処理部２１４は、所定のタイミングで、バッファ１７６からパケットを取得し、取得したパケットを、デバイスドライバ１７７に供給する。出力処理部２１４は、信号処理部２３５および出力制御部２３６を備えている。
【０１３９】
信号処理部２３５は、入力処理部２１１から出力要求信号が供給されるか、またはカーネルタイマ１７５から割り込み信号が供給されると、パケットをデキューする旨の信号を生成し、生成したパケットをデキューする旨の信号を、出力制御部２３６に供給する。
【０１４０】
出力制御部２３６は、信号処理部２３５から、パケットをデキューする旨の信号が供給されると、出力情報保持部２１３が保持している、パケットの送信時刻およびパケット情報と、時刻保持部２１５から供給された現在時刻とを基に、次に送信するパケットであって、送信時刻になったパケットがあるか否かを判定し、次に送信する送信時刻になったパケットを、バッファ１７６から取得する。出力制御部２３６は、バッファ１７６から取得したパケットを、デバイスドライバ１７７に供給する。
【０１４１】
換言すれば、出力制御部２３６は、信号処理部２３５から、パケットをデキューする旨の信号が供給されると、パケットのキューに基づき、バッファ１７６から取得したパケットを、デバイスドライバ１７７に供給することによって、バッファ１７６に格納されているパケットの、ハードウェア（デバイス（物理層１７８−１乃至物理層１７８−Ｎ））によるパケットの送信を制御する制御プログラムへの出力を制御する。
【０１４２】
なお、以下、出力制御部２３６が、パケットをデキューする処理を、パケットの出力処理とも称する。
【０１４３】
出力制御部２３６は、キュー情報保持部２１２に、キュー情報保持部２１２が保持しているキュー長Ｑをデクリメントさせる。また、出力制御部２３６は、出力情報保持部２１３に、出力情報保持部２１３が保持している送信パケット番号をインクリメントさせる。
【０１４４】
時刻保持部２１５は、カーネルタイマ１７５のもと、時計し、現在時刻を保持する。時刻保持部２１５は、保持している現在時刻を入力処理部２１１または出力処理部２１４に供給する。また、時刻保持部２１５は、例えば、RTC（Real Time Clock）などとすることも可能である。
【０１４５】
次に、図９のフローチャートを参照して、仮想デバイスドライバ１７４による、パケットのエンキューの処理を説明する。
【０１４６】
仮想デバイスドライバ１７４は、ネットワーク層１７２から入力要求信号が供給されるごとに、例えば、インプット関数などの所定の関数を呼び出し、パケットのエンキューの処理（入力処理）を行う。
【０１４７】
ステップＳ８１において、仮想デバイスドライバ１７４は、バッファ１７６に格納するパケットの最大キュー長Ｑｍの設定を行う。例えば、ステップＳ８１において、仮想デバイスドライバ１７４は、キュー情報保持部２１２が保持している最大キュー長Ｑｍに“５”を設定する。
【０１４８】
ステップＳ８２において、仮想デバイスドライバ１７４は、バッファ１７６に格納されているパケットのキュー長Ｑの設定を行う。例えば、この場合、まだバッファ１７６にはパケットが格納されていないので、仮想デバイスドライバ１７４は、キュー情報保持部２１２が保持しているキュー長Ｑに“０”を設定する。
【０１４９】
ステップＳ８３において、仮想デバイスドライバ１７４は、格納パケット番号の設定を行う。例えば、この場合、まだバッファ１７６にはパケットが格納されていないので、仮想デバイスドライバ１７４は、出力情報保持部２１３が保持している格納パケット番号に“０”を設定する。
【０１５０】
ステップＳ８４において、入力制御部２３１は、ネットワーク層１７２から入力要求信号を取得する。入力制御部２３１は、入力要求信号を取得すると、パケットがエンキュー可能であるか否かの判定を要求する旨の判定要求信号を生成し、生成した判定要求信号を、判定部２３２に供給する。
【０１５１】
入力制御部２３１から、判定要求信号が供給されると、ステップＳ８５において、判定部２３２は、キュー情報保持部２１２に保持されている、キュー長Ｑおよび最大キュー長Ｑｍを基に、キュー長Ｑが、所定の値よりも大きいか否かを判定する。
【０１５２】
例えば、ステップＳ８５において、判定部２３２は、キュー情報保持部２１２に保持されている、キュー長Ｑおよび最大キュー長Ｑｍを基に、式（３）を計算し、キュー長Ｑおよび最大キュー長Ｑｍが、式（３）を満たすか否かを判定することにより、キュー長Ｑが、所定の値よりも大きいか否かを判定する。
【０１５３】
（Ｑｍ／２）≦Ｑ＋１                                            ・・・（３）
【０１５４】
すなわち、判定部２３２は、バッファ１７６に記憶されているパケットのキュー長Ｑが、最大キュー長Ｑｍの半分の値よりも大きいか否かを判定することによって、キュー長Ｑが、所定の値よりも大きいか否かを判定する。
【０１５５】
したがって、例えば、判定部２３２は、キュー長Ｑ、および最大キュー長Ｑｍが、式（３）を満たす場合、キュー長Ｑが、所定の値よりも大きいと判定する。
【０１５６】
例えば、LinuxなどのUNIX（登録商標）オペレーティングシステムにおいては、エンキューされたパケットが最大キュー長に達すると、上位のネットワーク層のプログラムは、エンキュー処理をさせるためのパケットの供給を一時的に中断する。中断されたパケットの供給は、キューにあるパケットが送信され、キュー長が最大キュー長の半分を下回ると再開される。すなわち、キュー長が、常に最大キュー長の半分未満に保たれていると、ネットワーク層のプログラムは、可能な限りエンキュー処理を実行させようとする。したがって、例えば、キュー長Ｑが、常に最大キュー長Ｑｍの半分以下に保たれるようにすることで、入力要求信号が取得される回数を増やし、その結果、パケットの出力処理が行われる回数を増やすことができる。
【０１５７】
換言すれば、入力処理部２１１は、ネットワーク層１７２からパケットのエンキュー処理などの処理が要求された場合、例えば、常に最大キュー長の半分未満に保つようにすることで、ネットワーク層１７２において実行されるプログラムに継続して処理の実行を要求させるように、要求された処理の実行を制御し、パケットの出力処理などの、他の処理が実行される回数を増やしている。
【０１５８】
ステップＳ８５において、キュー長Ｑが、所定の値よりも大きくないと判定された場合、バッファ１７６にパケットを格納することができるので、判定部２３２は、エンキューが可能である旨の信号を生成する。そして、判定部２３２は、生成したエンキューが可能である旨の信号を、入力制御部２３１に供給し、処理はステップＳ８６に進む。
【０１５９】
判定部２３２から、エンキューが可能である旨の信号が供給されると、ステップＳ８６において、入力制御部２３１は、ネットワーク層１７２から、パケットを取得し、取得したパケットにパケット番号ｉを付す。入力制御部２３１は、パケット番号ｉを付してから、取得したパケットの大きさ、パケット番号ｉなどを示す情報が含まれるパケット情報を生成し、生成したパケット情報を、算出部２３３に供給する。
【０１６０】
なお、より詳細には、この場合、入力制御部２３１は、ネットワーク層１７２から、パケットが記憶されている記憶領域のアドレスを示すポインタを取得する。そして、仮想デバイスドライバ１７４において、パケットの授受を行う処理は、ポインタを用いて行われる。
【０１６１】
ステップＳ８７において、算出部２３３は、送信時刻算出の処理を行う。なお、送信時刻算出の処理の詳細は、後述するが、送信時刻算出の処理において、算出部２３３は、入力制御部２３１から供給された、パケット情報、出力情報保持部２１３に保持されているシェーピングレート、１つ前のパケット番号のパケットの送信時刻、１つ前のパケット番号のパケットのパケットサイズ、および時刻保持部２１５から供給された現在時刻を基に、ネットワーク層１７２から供給されたパケットの送信時刻を算出する。
【０１６２】
ステップＳ８８において、出力情報保持部２１３は、算出部２３３による制御のもと、保持している格納パケット番号をインクリメントする。例えば、ステップＳ８８において、出力情報保持部２１３は、保持している格納パケット番号が“１”であった場合、算出部２３３による制御のもと、保持している格納パケット番号が“２”となるように、格納パケット番号をインクリメントする。
【０１６３】
ステップＳ８９において、入力制御部２３１は、ネットワーク層１７２から取得したパケットをエンキューする。すなわち、ステップＳ８９において、入力制御部２３１は、ネットワーク層１７２から取得したパケットをバッファ１７６に供給し、FIFOキューなどのキューに配置する。そして、バッファ１７６は、仮想デバイスドライバ１７４から供給されたパケットを記憶する。
【０１６４】
ステップＳ９０において、キュー情報保持部２１２は、算出部２３３による制御のもと、保持しているキュー長Ｑをインクリメントする。例えば、ステップＳ９０において、キュー情報保持部２１２は、保持しているキュー長Ｑが“２”であった場合、算出部２３３による制御のもと、保持しているキュー長Ｑが“３”となるように、キュー長Ｑをインクリメントする。
【０１６５】
ステップＳ９１において、入力制御部２３１は、パケットがエンキューされた旨の信号を生成し、生成したパケットがエンキューされた旨の信号を、ネットワーク層１７２に供給する。入力制御部２３１は、出力要求信号を生成する旨の信号を生成し、生成した出力要求信号を生成する旨の信号を、要求信号生成部２３４に供給する。
【０１６６】
一方、ステップＳ８５において、キュー長Ｑが、所定の値よりも大きいと判定された場合、これ以上、バッファ１７６にパケットを格納することができないので、判定部２３２は、エンキューが不可能である旨の信号を生成する。そして、判定部２３２は、生成したエンキューが不可能である旨の信号を、入力制御部２３１に供給し、処理はステップＳ９２に進む。
【０１６７】
判定部２３２から、エンキューが不可能である旨の信号が供給されると、ステップＳ９２において、入力制御部２３１は、パケットがエンキューされない旨の信号を生成し、生成したパケットがエンキューされない旨の信号を、ネットワーク層１７２に供給する。入力制御部２３１は、出力要求信号を生成する旨の信号を生成し、生成した出力要求信号を生成する旨の信号を、要求信号生成部２３４に供給する。
【０１６８】
入力制御部２３１から、出力要求信号を生成する旨の信号が供給されると、ステップＳ９３において、要求信号生成部２３４は、パケットのデキューを要求する旨の出力要求信号を生成する。要求信号生成部２３４は、生成した出力要求信号を、出力処理部２１４に供給し、ステップＳ８４に戻り、上述した処理を繰り返す。
【０１６９】
このようにして、仮想デバイスドライバ１７４は、キュー長が所定の値よりも大きいか否かを判定することにより、パケットのエンキューが可能であるか否かを判定する。そして、パケットのエンキューが可能であると判定された場合、仮想デバイスドライバ１７４は、パケットを取得し、取得したパケットをバッファ１７６にエンキューする。また、パケットのエンキューが可能でないと判定された場合、仮想デバイスドライバ１７４は、パケットを取得しない。
【０１７０】
このように、パケットのエンキューが可能でないと判定された場合、仮想デバイスドライバ１７４は、エンキューされない旨の信号を、ネットワーク層１７２に供給するので、パケットはエンキューされず、また、破棄もされないため、ネットワーク層１７２には、キューの排他制御問題が発生したように見える。すなわち、ハードウェア割り込みなどにより、パケットの出力処理（パケットのデキュー）が行われているために、パケットが格納されているキュー（バッファ１７６におけるパケットが記憶されている領域）にアクセスができなかったと判定する。
【０１７１】
この場合、仮想デバイスドライバ１７４から、エンキューされない旨の信号が供給されるので、ネットワーク層１７２において、エンキューされなかったパケットのエンキューを要求する旨の入力要求信号が生成され、仮想デバイスドライバ１７４に供給される。換言すれば、ネットワーク層１７２において、パケットのエンキューが再試行される。したがって、仮想デバイスドライバ１７４に、繰り返し入力要求信号が供給されることになり、その結果、繰り返し入力処理部２１１から、出力処理部２１４に出力要求信号が供給される。これにより、パケットの出力処理が行われる回数（機会）が増え、より短い間隔（より小さい粒度）で、パケットの送信間隔を制御することができる。
【０１７２】
なお、パケットのエンキューの再試行を行う処理は、ＯＳの負荷を増加させることになるが、エンキューの再試行を行う処理は、他の処理よりも優先度が低いため、システム内において実行される他の処理が、エンキューの再試行を行う処理の影響を受けることはほとんど無い。したがって、エンキューの再試行を行う処理の負荷を調整するための特別な処理は、特に必要とされない。
【０１７３】
図１０のフローチャートを参照して、図９のステップＳ８７の処理に対応する、送信時刻算出の処理を説明する。
【０１７４】
ステップＳ１１１において、算出部２３３は、入力制御部２３１から供給されたパケット情報を基に、入力制御部２３１が、ネットワーク層１７２から取得したパケットのパケット番号ｉが、“０”であるか否かを判定する。
【０１７５】
ステップＳ１１１において、ネットワーク層１７２から取得したパケットのパケット番号ｉが、“０”でないと判定された場合、ステップＳ１１２に進み、算出部２３３は、ネットワーク層１７２から取得したパケットの送信時刻を算出する。例えば、ステップＳ１１２において、算出部２３３は、式（４）を計算することにより、パケットの送信時刻を算出する。
【０１７６】
（Ｔｉ）＝（Ｔ（ｉ−１））＋（Ｌ（ｉ−１））／ｒ                ・・・（４）
【０１７７】
ここで、Ｔｉは、パケット番号が“ｉ”であるパケットの送信時刻であり、Ｔ（ｉ−１）は、出力情報保持部２１３に保持されている、パケット番号が“ｉ−１”であるパケットの送信時刻である。また、Ｌ（ｉ−１）は、出力情報保持部２１３に保持されている、パケット番号が“ｉ−１”であるパケットの大きさ（サイズ（データ量））であり、ｒは、出力情報保持部２１３に保持されている、予め定められたシェーピングレートである。
【０１７８】
ステップＳ１１３において、算出部２３３は、キュー情報保持部２１２に保持されているキュー長Ｑが“０”であるか否かを判定する。ステップＳ１１３において、キュー長Ｑが“０”でないと判定された場合、ステップＳ１１５に進む。
【０１７９】
一方、ステップＳ１１３において、キュー長Ｑが“０”であると判定された場合、ステップＳ１１４に進み、算出部２３３は、算出した送信時刻Ｔｉが、時刻保持部２１５から供給された現在時刻よりも後の時刻であるか否かを判定する。
【０１８０】
例えば、ステップＳ１１４において、算出部２３３は、算出した送信時刻Ｔｉおよび時刻保持部２１５から供給された現在時刻Ｔが、式（５）を満たすか否かを判定することにより、算出した送信時刻Ｔｉが、時刻保持部２１５から供給された現在時刻よりも後の時刻であるか否かを判定する。
【０１８１】
Ｔ＜Ｔｉ                                                        ・・・（５）
【０１８２】
したがって、この場合、算出した送信時刻Ｔｉおよび時刻保持部２１５から供給された現在時刻Ｔが、式（５）を満たすと判定されたとき、算出した送信時刻Ｔｉが、時刻保持部２１５から供給された現在時刻よりも後の時刻であると判定される。
【０１８３】
ステップＳ１１４において、算出した送信時刻Ｔｉが、現在時刻よりも後の時刻であると判定された場合、ステップＳ１１５に進み、算出部２３３は、パケット番号が“ｉ”であるパケットの送信時刻に、算出した送信時刻Ｔｉを設定し、設定した送信時刻Ｔｉおよびパケット情報を、出力情報保持部２１３に供給する。出力情報保持部２１３は、算出部２３３から供給された送信時刻Ｔｉおよびパケット情報を保持する。そして、算出部２３３は、送信時刻を設定した旨の信号を生成する。算出部２３３は、生成した送信時刻を設定した旨の信号を、入力制御部２３１に供給し、処理は終了する。
【０１８４】
ステップＳ１１４において、算出した送信時刻Ｔｉが、現在時刻よりも後の時刻でないと判定された場合、算出した送信時刻Ｔｉは、すでに、過ぎてしまっているので、ステップＳ１１６に進む。
【０１８５】
また、ステップＳ１１１において、ネットワーク層１７２から供給されたパケットのパケット番号ｉが、“０”であると判定された場合、ステップＳ１１６に進み、算出部２３３は、パケット番号が“ｉ”であるパケットの送信時刻Ｔｉに、現在時刻Ｔを設定し、設定した送信時刻Ｔｉおよびパケット情報を、出力情報保持部２１３に供給する。出力情報保持部２１３は、算出部２３３から供給された送信時刻Ｔｉおよびパケット情報を保持する。そして、算出部２３３は、送信時刻を設定した旨の信号を生成する。算出部２３３は、生成した送信時刻を設定した旨の信号を、入力制御部２３１に供給し、処理は終了する。
【０１８６】
このようにして、算出部２３３は、パケットの送信時刻を算出し、算出した送信時刻または現在時刻を、パケットの送信時刻として設定する。なお、図１０のフローチャートを参照して、Leaky Bucketアルゴリズムと称されるスケジューリングアルゴリズムに基づいて、パケットの送信間隔を調整する方法を説明したが、Leaky Bucketアルゴリズムに限らず、他のスケジューリングアルゴリズムに基づいて、パケットの送信間隔を調整することも、もちろん可能である。
【０１８７】
図１１のフローチャートを参照して、仮想デバイスドライバ１７４による、パケットのデキューの処理を説明する。
【０１８８】
仮想デバイスドライバ１７４は、カーネルタイマ１７５からパケットを取得する旨の割り込み信号が供給されるか、または入力処理部２１１から出力要求信号が供給されるごとに、例えば、割り込みハンドラ関数などの所定の関数を呼び出し、パケットのデキューの処理（出力処理）を行う。
【０１８９】
ステップＳ１３１において、仮想デバイスドライバ１７４は、送信パケット番号の設定を行う。例えば、ステップＳ１３１において、仮想デバイスドライバ１７４は、まだパケットが送信されていないので、出力情報保持部２１３が保持している送信パケット番号に“０”を設定する。
【０１９０】
ステップＳ１３２において、信号処理部２３５は、割り込み信号または出力要求信号が供給されたか否かを判定する。すなわち、信号処理部２３５は、カーネルタイマ１７５から割り込み信号が供給されたか、または入力処理部２１１から出力要求信号が供給されたか否かを判定する。ステップＳ１３２において、割り込み信号または出力要求信号が供給されていないと判定された場合、パケットをデキューしないので、割り込み信号または出力要求信号が供給されたと判定されるまで、判定の処理を繰り返す。
【０１９１】
ステップＳ１３２において、割り込み信号または出力要求信号が供給されたと判定された場合、パケットをデキューするので、信号処理部２３５は、パケットをデキューする旨の信号を生成し、生成したパケットをデキューする旨の信号を、出力制御部２３６に供給して、処理はステップＳ１３３に進む。
【０１９２】
ここで、カーネルタイマ１７５のタイマイベントの発生周期は、通常100Hzであるので、信号処理部２３５には、例えば、少なくとも10msecごとに割り込み信号が供給される。また、信号処理部２３５には、入力処理部２１１が、ネットワーク層１７２から入力要求信号を取得するごとに、入力処理部２１１から、出力要求信号が供給されるので、例えば、信号処理部２３５には、ほぼ15μsecごとに、入力処理部２１１から出力要求信号が供給される。そして、このとき、出力処理部２１４の信号処理部２３５は、入力処理部２１１が、ネットワーク層１７２から入力要求信号を取得するごとに、すなわち、ネットワーク層１７２からパケットのエンキューなどの処理が要求されるごとに、ネットワーク層１７２から要求された処理とは異なる、パケットのデキューなどの処理の実行を制御する。
【０１９３】
信号処理部２３５から、パケットをデキューする旨の信号が供給されると、ステップＳ１３３において、出力制御部２３６は、現在時刻が、送信パケット番号と同じパケット番号のパケットの送信時刻を過ぎたか否かを判定する。例えば、ステップＳ１３３において、出力制御部２３６は、出力情報保持部２１３に保持されている送信パケット番号およびパケットの送信時刻、並びに時刻保持部２１５から供給された現在時刻を基に、式（６）を計算することにより、現在時刻が送信時刻を過ぎたか否かを判定する。
【０１９４】
Ｔｉ＜Ｔ                                                        ・・・（６）
【０１９５】
ここで、Ｔｉは、出力情報保持部２１３に保持されている、パケット番号が“ｉ”であるパケットの送信時刻であり、Ｔは、時刻保持部２１５から供給された現在時刻である。したがって、例えば、送信パケット番号が“ｉ”であり、送信時刻Ｔｉおよび現在時刻Ｔが、式（６）を満たす場合、出力制御部２３６は、現在時刻が、送信パケット番号と同じパケット番号のパケットの送信時刻を過ぎたと判定する。
【０１９６】
ステップＳ１３３において、現在時刻が送信時刻を過ぎたと判定された場合、パケットを送信するので、ステップＳ１３４に進み、出力制御部２３６は、送信時刻となったパケットをデキューする。すなわち、ステップＳ１３４において、出力制御部２３６は、送信時刻になったパケットを、バッファ１７６から取得し、取得したパケットをデバイスドライバ１７７に供給する。
【０１９７】
ステップＳ１３５において、出力情報保持部２１３は、出力制御部２３６による制御のもと、保持している送信パケット番号をインクリメントする。例えば、出力情報保持部２１３に保持されている送信パケット番号が、“１”であった場合、ステップＳ１３５において、出力情報保持部２１３は、出力制御部２３６による制御のもと、送信パケット番号が“２”となるように、送信パケット番号をインクリメントする。
【０１９８】
ステップＳ１３６において、キュー情報保持部２１２は、出力制御部２３６による制御のもと、保持しているキュー長Ｑをデクリメントし、処理はステップＳ１３２に戻る。例えば、キュー情報保持部２１２に保持されているキュー長Ｑが“３”であった場合、ステップＳ１３６において、キュー情報保持部２１２は、出力制御部２３６による制御のもと、キュー長Ｑが“２”となるようにキュー長Ｑをデクリメントする。
【０１９９】
一方、ステップＳ１３３において、現在時刻が送信時刻を過ぎていないと判定された場合、パケットは送信しないので、ステップＳ１３２に戻り、上述した処理を繰り返す。
【０２００】
このようにして、仮想デバイスドライバ１７４は、割り込み信号または出力要求信号が供給されるたびに、パケットの出力処理を行う。
【０２０１】
このように、出力処理部が、割り込み信号または出力要求信号が供給されるたびに、パケットの出力処理を行うことで、ソフトウェア制御によって、より小さい負荷でパケットの送信を制御することができる。
【０２０２】
また、出力処理部が、割り込み信号または出力要求信号が供給されるたびに、パケットの出力処理を行うことで、より短い時間間隔で、パケットの送信を制御することができ、その結果、通信網におけるバーストトラフィックの発生をより少なくすることができる。これにより、通信経路上のルータなどにおいて、破棄されるパケットの数を減少させることができる。
【０２０３】
さらに、また、出力処理部が、割り込み信号または出力要求信号が供給されるたびに、パケットの出力処理を行うことで、より短い時間間隔で、パケットの送信を制御することができ、その結果、ジッタが減少し、ジッタによる遅延のゆらぎを調整するために要する、受信側の端末装置におけるバッファの大きさを減少させることができる。
【０２０４】
したがって、受信側の端末装置において、バッファリングするデータサイズ（大きさ）を小さくすることができる。また、送信側の通信装置においても、パケットのキュー長を短く保つことができるため、バッファリングによる遅延を減少させることができ、これにより、低遅延のリアルタイムアプリケーションプログラムを実現することができる。
【０２０５】
さらに、また、ネットワーク層から処理が要求されるたびに、他の処理を行うようにしたので、ソフトウェア制御によって、より短い時間間隔で処理を制御することができる。
【０２０６】
以上のように、ネットワーク層から入力要求信号が供給されるたびに、パケットの出力処理を行うことで、ソフトウェア制御によって、より小さい負荷でパケットの送信を制御することができる。また、ネットワーク層から入力要求信号が供給されるか、またはカーネルタイマから割り込み信号が供給されるたびに、パケットの出力処理を行うことで、より短い時間間隔で、パケットの送信を制御することができる。
【０２０７】
さらに、また、ネットワーク層から処理が要求されるたびに、他の処理を行うようにしたので、ソフトウェア制御によって、より短い時間間隔で処理を制御することができる。
【０２０８】
本発明によれば、パケットを記憶するようにしたので、パケットを送信することができる。また、本発明によれば、ネットワーク層から入力要求信号が供給されるたびに、パケットの出力処理を行うようにしたので、ソフトウェア制御によって、より小さい負荷でパケットの送信を制御することができる。
【０２０９】
さらに、本発明によれば、ネットワーク層から入力要求信号が供給されるか、またはカーネルタイマから割り込み信号が供給されるたびに、パケットの出力処理を行うようにしたので、より短い時間間隔で、パケットの送信を制御することができる。
【０２１０】
さらに、また、本発明によれば、ネットワーク層から処理が要求されるたびに、他の処理を行うようにしたので、ソフトウェア制御によって、より短い時間間隔で処理を制御することができる。
【０２１１】
なお、本発明は、パケットの送信間隔を制御する通信装置だけでなく、所定の処理を実行する時間間隔を制御する制御装置にも適用することが可能である。この場合、制御装置は、ネットワーク層から処理の実行が要求されるか、またはカーネルタイマから割り込み信号が供給されるたびに、他の処理の実行を制御する。
【０２１２】
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
【０２１３】
この記録媒体は、図６に示すように、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク１３１（フレキシブルディスクを含む）、光ディスク１３２（CD-ROM(Compact Disc-Read Only Memory)、ＤＶＤ(Digital Versatile Disc)を含む）、光磁気ディスク１３３（ＭＤ(Mini-Disc)（商標）を含む）、若しくは半導体メモリ１３４などよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM１０２や、記録部１０８に含まれるハードディスクなどで構成される。
【０２１４】
なお、上述した一連の処理を実行させるプログラムは、必要に応じてルータ、モデムなどのインターフェースを介して、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の通信媒体を介してコンピュータにインストールされるようにしてもよい。
【０２１５】
また、本明細書において、記録媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０２１６】
なお、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【図面の簡単な説明】
【０２１７】
【図１】従来の通信装置が、アプリケーションプログラムおよびオペレーティングシステムのカーネルの機能を呼び出すことにより実現される、機能の構成を示すブロック図である。
【図２】トラフィック量の制御を行う従来の通信装置の機能の構成を示すブロック図である。
【図３】パケットのエンキューの処理を説明するフローチャートである。
【図４】送信時刻算出の処理を説明するフローチャートである。
【図５】パケットのデキューの処理を説明するフローチャートである。
【図６】本発明を適用した通信装置の構成の例を示すブロック図である。
【図７】プログラムを実行するCPUの機能の構成を示すブロック図である。
【図８】仮想デバイスドライバの機能の構成を示すブロック図である。
【図９】パケットのエンキューの処理を説明するフローチャートである。
【図１０】送信時刻算出の処理を説明するフローチャートである。
【図１１】パケットのデキューの処理を説明するフローチャートである。
【符号の説明】
【０２１８】
１０１  CPU，  １０２  ROM，  １０３  RAM，  １０８  記録部，  １３１  磁気ディスク，  １３２  光ディスク，  １３３  光磁気ディスク，  １３４  半導体メモリ，  １７４  仮想デバイスドライバ，  １７５  カーネルタイマ，  １７６  バッファ，  ２１１  入力処理部，  ２１２  キュー情報保持部，  ２１３  出力情報保持部，  ２１４  出力処理部，  ２１５  時刻保持部，  ２３１  入力制御部，  ２３２  判定部，  ２３３  算出部，  ２３６  出力制御部
【図１】
2006115197.tif 000003
【図２】
2006115197.tif 000004
【図３】
2006115197.tif 000005
【図４】
2006115197.tif 000006
【図５】
2006115197.tif 000007
【図６】
2006115197.tif 000008
【図７】
2006115197.tif 000009
【図８】
2006115197.tif 000010
【図９】
2006115197.tif 000011
【図１０】
2006115197.tif 000012
【図１１】
2006115197.tif 000013