(57)【要約】【課題】到来したメッセージの損失回避と送信機会の確保とを両立することが可能な、新規かつ改良された車載用ゲートウェイ装置、方法及びプログラムを提供する。【解決手段】Ｎ個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置（１００）であって、Ｎ個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージを記憶するＮ個の第１の記憶部（１２０）と、前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を記憶する１つ以上の第２の記憶部（１３０）と、前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から１つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てる制御部（１５０）と、を備える車載用ゲートウェイ装置（１００）。【選択図】図１
2019213043.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置（１００）であって、
Ｎ個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージを記憶するＮ個の第１の記憶部（１２０）と、
前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を記憶する１つ以上の第２の記憶部（１３０）と、
前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から１つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てる制御部（１５０）と、
を備える車載用ゲートウェイ装置（１００）。
【請求項２】
前記制御部（１５０）は、前記第１の記憶部（１２０）及び前記第２の記憶部（１３０）から１つの記憶部（１２０又は１３０）を選択し、選択された記憶部（１２０又は１３０）に対応するメッセージを前記処理対象として選択する、請求項１に記載の車載用ゲートウェイ装置（１００）。
【請求項３】
前記制御部（１５０）は、空でない前記第１の記憶部（１２０）及び前記第２の記憶部（１３０）からラウンドロビン方式で１つの前記記憶部（１２０又は１３０）を選択する、請求項２に記載の車載用ゲートウェイ装置（１００）。
【請求項４】
前記制御部は、前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの各々の処理の終了予定時刻を計算し、前記終了予定時刻が最も早いメッセージを前記処理対象として選択する、請求項２に記載の車載用ゲートウェイ装置（１００）。
【請求項５】
前記制御部は、計算対象のメッセージと同一の前記記憶部（１２０又は１３０）に記憶されるメッセージであって前記計算対象のメッセージの前に処理されるメッセージの前記終了予定時刻又は前記計算対象のメッセージが前記記憶部（１２０又は１３０）に記憶された時刻のうち遅い方に、前記計算対象のメッセージの処理時間を加算することで、前記計算対象のメッセージの前記終了予定時刻を計算する、請求項４に記載の車載用ゲートウェイ装置（１００）。
【請求項６】
前記制御部は、計算対象のメッセージと同一の記憶部（１２０又は１３０）に記憶されるメッセージであって前記計算対象のメッセージより先に処理されるメッセージの前記終了予定時刻又は仮想時刻のうち遅い方に、前記計算対象のメッセージの処理時間を加算することで、前記計算対象のメッセージの前記終了予定時刻を計算し、
前記仮想時刻は、現在の実時刻と前記仮想時刻の前回更新時の実時刻との差を、前記第１の記憶部（１２０）及び前記第２の記憶部（１３０）のうち空でない記憶部（１２０又は１３０）の数で割った値を、前回更新時の前記仮想時刻に加算することで更新される、請求項４に記載の車載用ゲートウェイ装置（１００）。
【請求項７】
前記処理時間は、前記計算対象のメッセージのサイズに依存する、請求項５又は６に記載の車載用ゲートウェイ装置（１００）。
【請求項８】
前記処理時間は、前記計算対象のメッセージに適用される処理の種類に依存する、請求項５〜７のいずれか一項に記載の車載用ゲートウェイ装置（１００）。
【請求項９】
前記車載用ゲートウェイ装置（１００）は、前記送信処理待ちのメッセージを記憶する第３の記憶部（１４０）をさらに備え、
前記第２の記憶部（１３０）は、前記第３の記憶部（１４０）に記憶された前記送信処理待ちのメッセージへのポインタを記憶する、請求項１〜８のいずれか一項に記載の車載用ゲートウェイ装置（１００）。
【請求項１０】
前記第３の記憶部（１４０）は、ＭＰＦＯリスト（１４１）又はＦＩＦＯリスト（１４２）の少なくともいずれかを含む、請求項９に記載の車載用ゲートウェイ装置（１００）。
【請求項１１】
Ｎ個の前記ネットワークの各々から受信したメッセージを記憶するＮ個の第４の記憶部（１１１）をさらに備え、
前記制御部は、前記第４の記憶部（１１１）に記憶されたメッセージを前記第１の記憶部（１２０）に移動させる処理に、前記ルーティング処理及び前記送信処理に優先して前記計算リソースを割り当てる、請求項１〜１０のいずれか一項に記載の車載用ゲートウェイ装置（１００）。
【請求項１２】
Ｎ個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置（１００）により実行される方法であって、
Ｎ個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージをＮ個の第１の記憶部（１２０）に記憶するステップ（Ｓ１０４又はＳ３０６）と、
前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を１つ以上の第２の記憶部（１３０）に記憶するステップ（Ｓ２１２、Ｓ２１４、Ｓ４１２、又はＳ４１４）と、
前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から１つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップ（Ｓ２０８、Ｓ２１８、Ｓ２２２、Ｓ４０８、Ｓ４３４又はＳ４３６、及びＳ２１２、Ｓ２１４、Ｓ２２４、Ｓ４１２、Ｓ４１４、又はＳ４３８）と、
を含む方法。
【請求項１３】
Ｎ個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置（１００）を制御するコンピュータに、
Ｎ個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージをＮ個の第１の記憶部（１２０）に記憶するステップ（Ｓ１０４又はＳ３０６）と、
前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を１つ以上の第２の記憶部（１３０）に記憶するステップ（Ｓ２１２、Ｓ２１４、Ｓ４１２、又はＳ４１４）と、
前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から１つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップ（Ｓ２０８、Ｓ２１８、Ｓ２２２、Ｓ４０８、Ｓ４３４又はＳ４３６、及びＳ２１２、Ｓ２１４、Ｓ２２４、Ｓ４１２、Ｓ４１４、又はＳ４３８）と、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車載用ゲートウェイ装置、方法及びプログラムに関する。
【背景技術】
【０００２】
近年、自動車には、電子制御ユニット（ＥＣＵ：Electronic  Control  Unit）と呼ばれる装置が多数搭載されている。これらのＥＣＵは、ネットワークにより互いに接続され、メッセージを送受信する。異なるネットワークに属するＥＣＵ間でメッセージを送受信するためには、ネットワーク同士を接続しメッセージを中継する中継装置（車載用ゲートウェイ装置、又は単にゲートウェイとも称される）が用いられる。近年の自動車の高機能化及び高性能化に伴い、ＥＣＵの数、ＥＣＵ間で送受信されるメッセージ、及びゲートウェイにより中継されるメッセージの数は急増している。
【０００３】
ゲートウェイに関する技術は盛んに提案されている。例えば、特許文献１では、送信バッファと受信バッファとを備えるゲートウェイが、送信バッファにバッファされた未送信データを優先度順に送信する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１７−２１２７２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ゲートウェイは、メッセージを受信すると、そのメッセージの送信先を決定するルーティング処理を行うと共に、どのメッセージをどの順序で送信するかを決定する。ゲートウェイは、これらの処理に計算リソースを割り当てて、メッセージの送信が完了するまでの間、当該メッセージを一時的に記憶する。既存のメッセージの処理が終了するよりも前に新たなメッセージが到来すると、バッファーオーバーランが発生し、新たに到来したメッセージが失われ得る。
【０００６】
民生用アプリケーションでは、メッセージの損失が許容される場合がある。例えば、インターネットのＴＣＰ／ＩＰプロトコルでは、メッセージの再送信が行われることから、メッセージの損失は許容されている。一方で、車載システムのようなリアルタイムシステムでは、メッセージの損失は許容されない。再送信に伴う過度の遅延が許容されないためである。
【０００７】
メッセージの損失を回避するための単純な解決策としては、ゲートウェイに十分に強力な計算機（例えば、ＣＰＵ）を搭載することが考えられる。しかし、メッセージの数及びサイズが今後さらに増加し得ることを考慮すれば、単に強力な計算機を搭載する解決策は望ましいものとは言えない。
【０００８】
その上、十分に強力な計算機が採用されて、メッセージの損失が回避されたとしても、メッセージの送信に遅延が生じるおそれが残る。なぜならば、ネットワークの負荷が高い状態においては、ゲートウェイは、メッセージの受信を送信よりも優先して、受信したメッセージを送信せずに蓄積し得るためである。メッセージの遅延は、車載システムのようなリアルタイム性が求められるシステムにおいては許容され難い。上記特許文献１では、未送信データが優先度順に送信されることが開示されている一方で、メッセージの損失を回避するための工夫は何ら開示されていなかった。
【０００９】
そこで、本発明は、上記問題に鑑みてなされたものであり、本発明の目的とするところは、到来したメッセージの損失回避と送信機会の確保とを両立することが可能な、新規かつ改良された車載用ゲートウェイ装置、方法及びプログラムを提供することにある。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明のある観点によれば、Ｎ個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置（１００）であって、Ｎ個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージを記憶するＮ個の第１の記憶部（１２０）と、前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を記憶する１つ以上の第２の記憶部（１３０）と、前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から１つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てる制御部（１５０）と、を備える車載用ゲートウェイ装置（１００）が提供される。
【００１１】
また、上記課題を解決するために、本発明の別の観点によれば、Ｎ個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置（１００）により実行される方法であって、Ｎ個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージをＮ個の第１の記憶部（１２０）に記憶するステップ（Ｓ１０４又はＳ３０６）と、前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を１つ以上の第２の記憶部（１３０）に記憶するステップ（Ｓ２１２、Ｓ２１４、Ｓ４１２、又はＳ４１４）と、前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から１つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップ（Ｓ２０８、Ｓ２１８、Ｓ２２２、Ｓ４０８、Ｓ４３４又はＳ４３６、及びＳ２１２、Ｓ２１４、Ｓ２２４、Ｓ４１２、Ｓ４１４、又はＳ４３８）と、を含む方法が提供される。
【００１２】
また、上記課題を解決するために、本発明の別の観点によれば、Ｎ個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置（１００）を制御するコンピュータに、Ｎ個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージをＮ個の第１の記憶部（１２０）に記憶するステップ（Ｓ１０４又はＳ３０６）と、前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を１つ以上の第２の記憶部（１３０）に記憶するステップ（Ｓ２１２、Ｓ２１４、Ｓ４１２、又はＳ４１４）と、前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から１つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップ（Ｓ２０８、Ｓ２１８、Ｓ２２２、Ｓ４０８、Ｓ４３４又はＳ４３６、及びＳ２１２、Ｓ２１４、Ｓ２２４、Ｓ４１２、Ｓ４１４、又はＳ４３８）と、を実行させるためのプログラムが提供される。
【発明の効果】
【００１３】
以上説明したように本発明によれば、到来したメッセージの損失回避と送信機会の確保とを両立することが可能な、新規かつ改良された車載用ゲートウェイ装置、方法及びプログラムが提供される。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態に係るゲートウェイの構成の一例を示す図である。
【図２】第１の実施形態に係るゲートウェイによるメッセージの受信処理の一例を説明するための図である。
【図３】同実施形態に係るゲートウェイによるメッセージのルーティング処理の一例を説明するための図である。
【図４】同実施形態に係るゲートウェイによるメッセージの送信処理の一例を説明するための図である。
【図５】同実施形態に係るゲートウェイにおいて実行される受信処理の流れの一例を示すフローチャートである。
【図６】同実施形態に係るゲートウェイにおいて実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである
【図７】第２の実施形態に係るゲートウェイによるメッセージの受信処理の一例を説明するための図である。
【図８】同実施形態に係るゲートウェイによるメッセージのルーティング処理の一例を説明するための図である。
【図９】同実施形態に係るゲートウェイによるメッセージの送信処理の一例を説明するための図である。
【図１０】同実施形態に係るゲートウェイにおいて実行される受信処理の流れの一例を示すフローチャートである。
【図１１Ａ】同実施形態に係るゲートウェイにおいて実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである。
【図１１Ｂ】同実施形態に係るゲートウェイにおいて実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである。
【図１２】比較例に係るゲートウェイの構成の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下に添付図面を参照しながら、本発明の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【００１６】
＜＜１．構成例＞＞
図１は、本発明の一実施形態に係るゲートウェイ１００の構成の一例を示す図である。ゲートウェイ１００は、複数のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置である。図１に示すように、ゲートウェイ１００は、ネットワークインタフェース１１０、Ｎ個の第１の記憶部１２０（キュー＃１〜＃Ｎ）、１つ以上の第２の記憶部１３０（キュー＃Ｎ＋１〜＃Ｍ）、第３の記憶部１４０及び制御部１５０を含む。
【００１７】
（１）ネットワークインタフェース１１０
ネットワークインタフェース１１０は、ゲートウェイ１００と他の装置との通信を仲介するインタフェースである。ネットワークインタフェース１１０は、ＣＡＮ（Controller  Area  Network）又はＣＡＮ−ＦＤ（CAN  with  Flexible  Data  rate）等の任意の車載ネットワークに接続される。ネットワークインタフェース１１０は、複数のチャネルを有し、各々のチャネルは互いに異なるネットワークに接続される。図１に示した例では、ネットワークインタフェース１１０は、チャネル＃１〜＃ＮのＮ個のチャネルを有する。なお、図１において「＃」の後に付された数字は、インデックスである。即ち、ゲートウェイ１００は、Ｎ個のネットワークに接続される。なお、Ｎは２以上の整数である。
【００１８】
ネットワークインタフェース１１０は、Ｎ個のネットワークの各々から受信したメッセージを記憶するＮ個の受信バッファ１１１（１１１＃１〜１１１＃Ｎ）（第４の記憶部に相当）を有する。受信バッファ１１１は、チャネル（例えば、ＣＡＮチャネル）に１対１に対応付けられ、対応付けられたチャネルに到来したメッセージ（例えば、ＣＡＮメッセージ）を記憶する。例えば、受信バッファ１１１＃１は、チャネル＃１に到来したメッセージを記憶する。
【００１９】
ネットワークインタフェース１１０は、Ｎ個のネットワークの各々に送信されるメッセージを記憶するＮ個の送信バッファ１１２＃１〜１１２＃Ｎ（第５の記憶部に相当）を有する。送信バッファ１１２＃１〜１１２＃Ｎを、送信バッファ１１２とも総称する。送信バッファ１１２は、チャネルに１対１に対応付けられ、対応付けられたチャネルから送信されるメッセージを記憶する。例えば、送信バッファ１１２＃１は、チャネル＃１から送信されるメッセージを記憶する。
【００２０】
（２）第１の記憶部１２０
Ｎ個の第１の記憶部１２０は、Ｎ個のネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージを記憶する。ルーティング処理とは、受信したメッセージをルーティングテーブルに照合して送信先のネットワーク（即ち、チャネル）を決定する処理である。ルーティング処理は、メッセージのヘッダ及びペイロードに基づくセキュリティ関連のフィルタリング等の様々な処理をさらに含み得る。第１の記憶部１２０は、例えばキューとして実装され得る。第１の記憶部１２０を、以下ではルーティング処理待ちキュー１２０とも称する。図１では、キュー＃１〜＃Ｎが、ルーティング処理待ちキュー１２０に相当する。
【００２１】
（３）第２の記憶部１３０
１つ以上の第２の記憶部１３０は、ルーティング処理後であって送信処理待ちのメッセージを示す情報を記憶する。送信処理とは、ルーティング処理後のメッセージを、決定された送信先のネットワークにメッセージを送信する処理を含む。第２の記憶部１３０は、例えばキューとして実装され得る。第２の記憶部１３０を、以下では送信処理待ちキュー１３０とも称する。図１では、キュー＃Ｎ＋１〜＃Ｍが、ルーティング処理待ちキュー１２０に相当する。なお、Ｍ≧Ｎ＋１である。
【００２２】
ここで、「送信処理待ちのメッセージを示す情報」とは、送信処理待ちのメッセージへのポインタ又は送信処理待ちのメッセージを記憶する記憶部（後述する第３の記憶部１４０）を示す情報であり、例えばポインタである。送信処理待ちキュー１３０は、送信処理待ちのメッセージそのものを記憶してもよい。
【００２３】
（４）第３の記憶部１４０
第３の記憶部１４０は、ルーティング処理後であって送信処理待ちのメッセージを記憶する。第３の記憶部１４０は、メッセージを記憶するための任意のデータ構造により実現される。第３の記憶部１４０は、ＭＰＦＯ（Most  Priority  First  Out）リスト１４１又はＦＩＦＯ（First  In  First  Out）リスト１４２の少なくともいずれかを含む。図１に示した例では、第３の記憶部１４０は、ＭＰＦＯリスト１４１及びＦＩＦＯリスト１４２の双方を含む。ＭＰＦＯリストとは、記憶されたメッセージのうち優先度が最も高いメッセージから順に取り出されるデータ構造である。ＦＩＦＯリストとは、先に記憶されたメッセージから順に取り出されるデータ構造である。例えば、ＣＡＮの制御メッセージは、ＭＰＦＯリスト１４１に記憶されて優先度順に送信される。一方で、ＣＡＮの診断メッセージは、ＦＩＦＯリスト１４２に記憶されて先着順に送信される。
【００２４】
（５）制御部１５０
制御部１５０は、演算処理装置及び制御装置として機能し、各種プログラムに従ってゲートウェイ１００の動作全般を制御する。制御部１５０は、ＣＰＵ、マイクロプロセッサ、電気回路、ＤＳＰ及び／又はＡＳＩＣにより実現される。
【００２５】
制御部１５０は、ゲートウェイ１００に到来したメッセージを受信し、転送するための各種処理を行う。詳しくは、制御部１５０は、受信処理、優先順位付け処理、ルーティング処理、及び送信処理を行う。制御部１５０は、計算リソース（例えば、ＣＰＵの処理時間）をこれらの処理に割り当てる。即ち、制御部１５０は、これらの処理の中から計算リソースを割り当てる処理を選択し、選択した処理を実行する。ルーティング処理及び送信処理に関しては、制御部１５０は、ルーティング処理待ちのメッセージ及び送信処理待ちのメッセージの中から１つのメッセージを処理対象として選択し、処理対象のメッセージのルーティング処理又は前記送信処理に計算リソースを割り当てる。処理対象のメッセージの選択は、優先順位付け処理の結果に従って行われる。
【００２６】
以上、以下に説明する第１の実施形態及び第２の実施形態に共通するゲートウェイ１００の構成の一例を説明した。
【００２７】
＜＜２．第１の実施形態＞＞
本実施形態では、優先順位付け処理にラウンドロビン方式が採用される。詳しくは、ゲートウェイ１００は、ルーティング処理待ちキュー１２０及び送信処理待ちキュー１３０からラウンドロビン戦略により選択したキューに対応するメッセージを、処理対象として選択する。キューがラウンドロビン方式で順番に選択されて、計算リソースが割り当てられるので、ルーティング処理及び送信処理に公平に計算リソースが割り当てられることとなる。これにより、到来したメッセージの損失回避と送信機会の確保とを両立することが可能となる。
【００２８】
＜２．１．各種処理＞
以下、本実施形態に係るゲートウェイ１００により実行される各種処理について詳細に説明する。本実施形態に係るゲートウェイ１００の構成は、図１を参照して上記説明した通りである。以下では、Ｎ＝６とし、Ｍ＝８として説明する。この場合、ルーティング処理及び送信処理に使用可能な計算リソースの２５％（（Ｍ−Ｎ）／Ｍ）が送信処理のために割り当てられ、残りの７５％（Ｎ／Ｍ））がルーティング処理に割り当てられる。
【００２９】
（１）受信処理
受信処理とは、受信バッファ１１１に記憶されたメッセージをルーティング処理待ちキュー１２０に移動させる処理である。なお、メッセージの移動とは、移動先へのメッセージのコピー及び移動元からのメッセージの削除を含む概念である。制御部１５０は、受信処理に、優先順位付け処理、ルーティング処理及び送信処理に優先して計算リソースを割り当てる。これにより、到来したメッセージの損失を極力回避することが可能となる。
【００３０】
ネットワークからメッセージが到来してネットワークインタフェース１１０の受信バッファ１１１に記憶されると、割り込みがトリガされる。割り込みは、受信したメッセージを、メッセージが到来したチャネルに対応するルーティング処理待ちキュー１２０の最後尾に移動させる。以下、図２を参照して、受信処理の一例を説明する。
【００３１】
図２は、本実施形態に係るゲートウェイ１００によるメッセージの受信処理の一例を説明するための図である。図２では、ゲートウェイ１００内のデータ構造及びデータの流れについて図示されている。なお、キュー＃１〜＃６はルーティング処理待ちキュー１２０であり、キュー＃７及び＃８は送信処理待ちキュー１３０である。キュー＃１にはメッセージ１０−１が記憶され、キュー＃２にはメッセージ１０−２が記憶され、キュー＃６にはメッセージ１０−３が記憶されている。また、ＭＰＦＯリスト１４１にはメッセージ１０−４が記憶され、ＦＩＦＯリスト１４２にはメッセージ１０−５が記憶されている。
【００３２】
図２に示した例では、チャネル＃１に到来したメッセージ１０−６がチャネル＃１の受信バッファ１１１＃１に記憶される。その後、メッセージ１０−６は、キュー＃１の最後に移動されて、チャネル＃１の受信バッファ１１１＃１から削除される。
【００３３】
なお、各キュー及びリストにおいて、下方に記載されたメッセージほど出力順が早く、再下端のメッセージは先頭のメッセージである。例えば、キュー＃１の先頭はメッセージ１０−１であり、２番目がメッセージ１０―６である。
【００３４】
（２）優先順位付け処理
優先順位付け処理とは、処理対象のキューを選択することである。詳しくは、制御部１５０は、ルーティング処理待ちキュー１２０及び送信処理待ちキュー１３０からひとつのキューを処理対象のキューとして選択する。優先順位付け処理において選択されたキューに対応する処理が、その後行われる。即ち、選択されたキューがルーティング処理待ちキュー１２０であれば、ルーティング処理が行われ、選択されたキューが送信処理待ちキュー１３０であれば、送信処理が行われる。
【００３５】
本実施形態では、優先順位付け処理は、ラウンドロビン方式に従って行われる。詳しくは、制御部１５０は、空でないルーティング処理待ちキュー１２０及び送信処理待ちキュー１３０からラウンドロビン方式で１つのキューを処理対象のキューとして選択する。即ち、空でないキューが順番に処理対象のキューとして選択される。ここで、空でないキューとは、メッセージを１つ以上記憶しているルーティング処理待ちキュー１２０、及びＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２にメッセージが記憶されている場合の送信処理待ちキュー１３０である。ＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２が空でない場合、送信処理待ちキュー１３０は、ＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２に記憶されたメッセージへのポインタを記憶していてもよい。そして、ポインタの有無により、送信処理待ちキュー１３０が空であるか否かが判定されてもよい。以下では、空でないキューを、アクティブなキューとも称する。図２に示した例において、キュー＃５が前回選択された場合、次回はキュー＃６が選択される。
【００３６】
ラウンドロビン方式でアクティブなキューが順番に処理対象のキューとして選択されることにより、ルーティング処理又は送信処理の一方に過度の計算リソースが割り当てられることが防止される。従って、ルーティング処理及び送信処理に公平に計算リソースを分配することが可能となる。Ｎ及びＭは任意に設定可能である。Ｎ及びＭのバランスにより、ルーティング処理と送信処理とに分配される計算リソースのバランスが決定される。
【００３７】
なお、このような優先順位付け処理に関する技術として、参考文献［２］に、ラウンドロビン方式で選択したキューからパケットを取り出して送信するパケットスイッチが開示されている。ただし、本文献での分配対象は、チャネルの帯域幅であり、本発明のように計算リソースではない。
【００３８】
（３）ルーティング処理
制御部１５０は、優先順位付け処理により選択された処理対象のキューに対応するメッセージを処理対象のメッセージとして選択する。詳しくは、制御部１５０は、優先順位付け処理により選択された処理対象のキューがルーティング処理待ちキュー１２０である場合、選択されたルーティング処理待ちキュー１２０の先頭の（即ち、最も先に記憶された）メッセージを、処理対象のメッセージとして選択する。そして、制御部１５０は、処理対象のメッセージのルーティング処理に計算リソースを割り当てる。
【００３９】
ルーティング処理は、メッセージをルーティングテーブルに照合して、送信先のチャネルを決定することを含む。また、ルーティング処理は、ファイアウォールによるメッセージのセキュリティチェック等の様々なチェックを含む。また、ルーティング処理は、ルーティング処理待ちキュー１２０からＭＰＦＯリスト１４１又はＦＩＦＯ１４２リストへのメッセージの移動を含む。制御部１５０は、メッセージの内容に応じて、移動先のデータ構造を決定する。例えば、制御部１５０は、ＣＡＮの制御メッセージをＭＰＦＯリスト１４１に移動させ、ＣＡＮの診断メッセージをＦＩＦＯリスト１４２に移動させる。また、制御部１５０は、ＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２に記憶されたメッセージへのポインタを、送信処理待ちキュー１３０に記憶させ得る。
【００４０】
以下、図３を参照して、ルーティング処理の一例を説明する。図３は、本実施形態に係るゲートウェイ１００によるメッセージのルーティング処理の一例を説明するための図である。図３では、ゲートウェイ１００内のデータ構造及び図２の続きのデータの流れについて図示されている。図３に示した例では、優先順位付け処理によりキュー＃６が選択されたものとする。この場合、キュー＃６の先頭のメッセージ１０−３のルーティング処理が実行される。これにより、メッセージ１０−３は、関連するＭＰＦＯリスト１４１に記憶され、キュー＃６から削除される。メッセージ１０−３の優先度はＭＰＦＯリスト１４１の既存のメッセージ１０−４よりも低いものとする。なお、ＭＰＦＯリスト又はＦＩＦＯリストへのＣＡＮメッセージの記憶については、参考文献［１］に詳しく開示されている。
【００４１】
（４）送信処理
制御部１５０は、優先順位付け処理により選択された処理対象のキューに対応するメッセージを処理対象のメッセージとして選択する。詳しくは、制御部１５０は、優先順位付け処理により選択された処理対象のキューが送信処理待ちキュー１３０である場合、選択された送信処理待ちキュー１３０に対応するメッセージを、処理対象のメッセージとして選択する。そして、制御部１５０は、処理対象のメッセージの送信処理に計算リソースを割り当てる。
【００４２】
ここで、送信処理待ちキュー１３０に対応するメッセージとは、第３の記憶部１４０に記憶されたメッセージである。詳しくは、制御部１５０は、ＭＰＦＯリスト１４１が空ではない場合、ＭＰＦＯリスト１４１で最も優先度が高いメッセージを処理対象のメッセージとして選択する。一方で、ＭＰＦＯリスト１４１が空である場合、制御部１５０は、ＦＩＦＯリスト１４２の先頭のメッセージを処理対象のメッセージとして選択する。なお、ＭＰＦＯリスト１４１もＦＩＦＯリスト１４２も空であれば、その後の送信処理は実行されない。
【００４３】
選択された処理対象のメッセージは、ルーティング処理により決定された送信先のチャネルに対応する送信バッファ１１２に記憶され、ＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２から削除される。そして、送信バッファ１１２に記憶されたメッセージは送信される。
【００４４】
以下、図４を参照して、送信処理の一例を説明する。図４は、本実施形態に係るゲートウェイ１００によるメッセージの送信処理の一例を説明するための図である。図４では、ゲートウェイ１００内のデータ構造及び図３の続きのデータの流れについて図示されている。図４に示した例では、優先順位付け処理によりキュー＃７が選択されたものとする。その場合、ＭＰＦＯリスト１４１が空ではないため、ＭＰＦＯリスト１４１に記憶された中で最も優先度が高いメッセージ１０−４が、送信先であるチャネル＃５の送信バッファ１１２＃５に記憶され、チャネル＃５から送信される。また、ＭＰＦＯリスト１４１から送信済みのメッセージ１０−４が削除される。
【００４５】
（５）補足
優先順位付け処理、ルーティング処理及び送信処理は、割り込みとして又はタスクとして実行され得るが、低遅延の実現のためには、割り込みとして実行されることが望ましい。タスクよりも割り込みの方が優先して実行されるためである。ただし、受信処理の割り込みの方が、優先順位付け処理、ルーティング処理及び送信処理のための割り込み及びタスクよりも、優先して実行される。
【００４６】
優先順位付け処理、ルーティング処理又は送信処理のトリガは、タスク又は割り込みのフラグを用いて設定され得る。当該フラグは、例えば、ルーティング処理待ちキュー１２０、送信処理待ちキュー１３０、ＭＰＦＯリスト１４１及びＦＩＦＯリスト１４２に空でないキュー又はリストがあるか否かを示す。この場合、受信処理の割り込みは、フラグを確認し、空でないことを示すフラグが立っていれば、優先順位付け処理、ルーティング処理又は送信処理の割り込み又はタスクを起動する。さらに、優先順位付け処理、ルーティング処理又は送信処理の割り込み又はタスクは、優先順位付け処理、ルーティング処理又は送信処理を実行後、ルーティング処理待ちキュー１２０、送信処理待ちキュー１３０、ＭＰＦＯリスト１４１及びＦＩＦＯリスト１４２が空であるか否かを確認し、空でない場合は自身を再度呼び出す。
【００４７】
＜２．２．処理の流れ＞
（１）受信処理の流れ
図５は、本実施形態に係るゲートウェイ１００において実行される受信処理の流れの一例を示すフローチャートである。図５に示すように、まず、チャネル＃Ｘにメッセージが到来すると、制御部１５０は、到来したメッセージを到来したチャネル＃Ｘに対応する受信バッファ１１１＃Ｘにバッファする（ステップＳ１０２）。次いで、制御部１５０は、受信バッファ１１１＃Ｘにバッファされたメッセージを、チャネル＃Ｘに対応するルーティング処理待ちキュー１２０（キュー＃Ｘ）に移動させる（ステップＳ１０４）。そして、制御部１５０は、優先順位付け処理、ルーティング処理又は送信処理をトリガする（ステップＳ１０６）。
【００４８】
（２）優先順位付け処理、ルーティング処理及び送信処理の流れ
図６は、本実施形態に係るゲートウェイ１００において実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである。図６に示すように、まず、優先順位付け処理、ルーティング処理及び送信処理が受信処理によりトリガされると（ステップＳ２０２）、制御部１５０は、ルーティング処理待ちキュー１２０及び送信処理待ちキュー１３０のうち、前回選択したキューの次の空でないキューを選択する（ステップＳ２０４）。選択されるキューのインデックスをＸとする。次いで、制御部１５０は、選択されたキュー＃Ｘはルーティング処理待ちキュー１２０又は送信処理待ちキュー１３０のいずれであるかを判定する（ステップＳ２０６）。選択されたキュー＃Ｘがルーティング処理待ちキュー１２０である場合、処理はステップＳ２０８に進む。一方で、選択されたキュー＃Ｘが送信処理待ちキュー１３０である場合、処理はステップＳ２２６に進む。なお、これらの処理は、優先順位付け処理に相当する。
【００４９】
ステップＳ２０８においては、制御部１５０は、キュー＃Ｘから先頭のメッセージを選択する。次いで、制御部１５０は、選択したメッセージがＭＰＦＯメッセージ又はＦＩＦＯメッセージのいずれであるかを判定する（ステップＳ２１０）。選択したメッセージがＦＩＦＯメッセージである場合、制御部１５０は、ルーティングを行い、メッセージをＦＩＦＯリスト１４２に移動させる（ステップＳ２１２）。一方で、選択したメッセージがＭＰＦＯメッセージである場合、制御部１５０は、ルーティングを行い、メッセージをＭＰＦＯリスト１４１に移動させる（ステップＳ２１４）。ここで、ＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２に記憶されたメッセージへのポインタが、送信処理待ちキュー１３０に記憶され得る。ステップＳ２１２又はＳ２１４の後、処理はステップＳ２１６に進む。なお、これらの処理は、ルーティング処理に相当する。
【００５０】
ステップＳ２１６においては、制御部１５０は、ＭＰＦＯリスト１４１が空であるか否かを判定する。ＭＰＦＯリスト１４１が空でないと判定された場合、制御部１５０は、ＭＰＦＯリスト１４１から最も優先度の高いメッセージを選択する（ステップＳ２１８）。その後、処理はステップＳ２２４に進む。一方で、ＭＰＦＯリストが空であると判定された場合、制御部１５０は、ＦＩＦＯリスト１４２が空であるか否かを判定する（ステップＳ２２０）。ＦＩＦＯリスト１４２が空であると判定された場合、処理は再度ステップＳ２０４に戻る。一方で、ＦＩＦＯリスト１４２が空でないと判定された場合、制御部１５０は、ＦＩＦＯリスト１４２から先頭のメッセージを選択する（ステップＳ２２２）。その後、処理はステップＳ２２４に進む。ステップＳ２２４においては、制御部１５０は、ルーティング処理により決定された送信先のチャネルへメッセージを送信し、ＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２から送信済みのメッセージを削除する。これに伴い、削除された送信済みのメッセージへのポインタが、送信処理待ちキュー１３０から削除される。その後、処理はステップＳ２２６に進む。なお、これらの処理は、送信処理に相当する。
【００５１】
ステップＳ２２６においては、制御部１５０は、キュー、ＭＰＦＯリスト１４１及びＦＩＦＯリスト１４２が空であるか否かを判定する。少なくともひとつが空でないと判定された場合、処理はステップＳ２０４に戻る。一方で、全てが空であると判定された場合、処理は終了する。
【００５２】
＜＜３．第２の実施形態＞＞
＜３．１．概要＞
第１の実施形態では、空でないキューがラウンドロビン方式で順番に選択されて、計算リソースが割り当てられていた。このような割り当て方式は、２つの理由で完全に公平であるとは言い難い。
【００５３】
第１の理由は、長いメッセージの処理時間は短いメッセージの処理時間と比較して長いにも関わらず、ラウンドロビン方式ではメッセージの長短によらずに処理対象が選択されることである。このことは、長いメッセージは短いメッセージと比較して多い計算リソースを獲得できることを意味し、換言すると、長いメッセージは短いメッセージと比較して優先されることを意味する。
【００５４】
第２の理由は、ルーティング処理の処理時間は送信処理の処理時間と比較して長いにも関わらず、ラウンドロビン方式ではこの処理時間の差によらずに処理対象が選択されることである。このことは、ルーティング処理は送信処理と比較して多い計算リソースを獲得できることを意味し、換言すると、ルーティング処理は送信処理と比較して優先されることを意味する。
【００５５】
そこで、第２の実施形態では、メッセージのサイズ及び適用される処理の種類に応じた処理時間が発生する場合であっても、計算リソースの割り当ての公平性を確立することが可能な仕組みを提供する。具体的には、制御部１５０は、メッセージの処理時間に応じて計算リソースの割り当てを行う。
【００５６】
ここで、計算リソース（例えば、ＣＰＵの処理時間）の共有の粒度は、１クロックの時間であることが理想的であると考えられる。換言すると、クロックサイクルごとに処理対象のキューを切り替えながら、アクティブなキューの先頭のメッセージを処理すること、即ち並列的に処理することが理想的であると言える。しかしながら、このような理想的な仕組みは現実的ではない。なぜならば、少なくともルーティング処理は、１クロックサイクルで完了するものではない上に、分割が困難なためである（即ち、不可分操作（atomic  operation）である）。メッセージの送信処理もまた、不可分操作（atomic  operation）である。ルーティング処理を中断して数クロック後に復帰したり、メッセージの送信を中断して数クロック後に復帰したりすることは、現実的ではない。
【００５７】
そこで、本実施形態に係る制御部１５０は、優先順位付け処理において、メッセージの処理が終了する予定の時刻（以下、終了予定時刻とも称する）に基づいて、処理対象のキューを選択する。具体的には、制御部１５０は、ルーティング処理待ちのメッセージ及び送信処理待ちのメッセージの各々の処理の終了予定時刻を計算し、終了予定時刻が最も早いメッセージを処理対象のメッセージとして選択する。制御部１５０は、キュー＃Ｘに新たなメッセージｉ（又はメッセージｉへのポインタ）が記憶されると、メッセージｉよりも前にキュー＃Ｘに記憶されたメッセージの終了予定時刻を加味して、メッセージｉの終了予定時刻を計算する。詳しくは、制御部１５０は、終了予定時刻の計算対象のメッセージと同一のキューに記憶されるメッセージであって計算対象のメッセージの前に処理されるメッセージの終了予定時刻又は計算対象のメッセージがキューに記憶された時刻のうち遅い方に、計算対象のメッセージの処理時間を加算することで、計算対象のメッセージの終了予定時刻を計算する。数式で表すと、制御部１５０は、終了予定時刻ＦＸ［ｉ］を次式に従って計算する。
ＦＸ［ｉ］＝Ｍａｘ（ＦＸ［ｉ−１］，ＡＸ［ｉ］）＋ＰＸ［ｉ］    …（１）
【００５８】
ここで、Ｘはキューのインデックスであり、ｉは、キュー＃Ｘにおけるメッセージのインデックスである。ＦＸ［ｉ−１］は、キュー＃Ｘに記憶された、メッセージｉのひとつ前のメッセージの終了予定時刻である。ＡＸ［ｉ］は、メッセージｉがキュー＃Ｘに記憶された時刻である。ＰＸ［ｉ］は、メッセージの処理時間である。ただし、処理時間は、計算対象のメッセージのサイズ及び適用される処理の種類に依存する。即ち、ＰＸ［ｉ］は、メッセージのサイズが大きいほど大きい値であり、サイズが小さいほど小さい値である。また、ＰＸ［ｉ］は、メッセージに適用される処理がルーティング処理であるか送信処理であるか（即ち、キュー＃Ｘがルーティング処理待ちキュー１２０であるか送信処理待ちキュー１３０であるか）に応じて決定される。なお、ＰＸ［ｉ］は、図示しない記憶部に予め記憶されたルックアップテーブルを参照することで、求められ得る。かかるルックアップテーブルは、メッセージのサイズ及び適用される処理の種類と処理時間との対応付けを複数含むテーブルである。
【００５９】
なお、メッセージｉが記憶される前はキュー＃Ｘが空であった場合（即ち、ｉ＝１である場合）、制御部１５０は、終了予定時刻ＦＸ［１］を次式に従って計算する。
【００６０】
ＦＸ［１］＝ＡＸ［１］＋ＰＸ［１］    …（２）
【００６１】
制御部１５０は、上記数式（１）又は（２）に従い、アクティブなキューの各々に記憶されたメッセージについてＦＸ［ｉ］を計算する。そして、制御部１５０は、各キューの先頭のメッセージのうち、終了予定時刻ＦＸ［ｉ］が最も早いメッセージを処理対象のメッセージとして選択する。
【００６２】
終了予定時刻に基づいて処理対象のメッセージが選択されることにより、以下に説明するように、ゲートウェイ１００は、上述した理想的な仕組みと同様にメッセージを処理することができる。
【００６３】
詳しくは、ＰＸ［ｉ］が、メッセージのサイズに依存するので、長いメッセージ及び短いメッセージに、公平に計算リソースを割り当てることができる。また、ＰＸ［ｉ］が、メッセージに適用される処理の種類に依存するので、ルーティング処理及び送信処理に、公平に計算リソースを割り当てることができる。このように、第２の実施形態では、上述した２つの理由による割り当て方式の不公平性を、解消することができる。
【００６４】
また、ＦＸ［ｉ］の計算にＦＸ［ｉ−１］又はＡＸ［ｉ］が加味されるので、メッセージｉの処理が開始される予定の時刻に基づいて終了予定時刻が計算される。これにより、キュー毎に異なり得るメッセージの処理ペースを反映した、メッセージの終了予定時刻を計算することが可能となる。
【００６５】
以上説明したように、本実施系形態では、終了予定時刻は、処理が開始される予定の時刻にメッセージの処理時間を加算することで計算される。従って、本実施形態では、メッセージの処理が終了する順番は、上述した理想的な仕組みにおいてメッセージの処理が終了する順番と同様となる。つまり、終了予定時刻に基づいて処理対象のメッセージを選択することは、上述した理想的な仕組みにおける、あるキューから他のキューへクロックサイクルごとに処理対象を移しながらメッセージを処理することをモデル化している、と言える。実際、終了予定時刻に基づいて処理対象のメッセージを選択する場合、上述した理想的な仕組みと本質的に同一の振る舞いが実現されることが、先行文献［３］において数学的に証明されている。
【００６６】
ただし、上述した理想的な仕組みのように、アクティブなキューの先頭のメッセージが並列的に処理される場合、アクティブなキューの数によってメッセージの処理速度は変化する。この概念を優先順位付け処理に反映するために、本実施形態では、仮想時刻（virtual  Time）が導入される。仮想時刻は、適宜更新される。仮想時刻は、現在の実時刻と前回更新時の実時刻との差を、ルーティング処理待ちキュー１２０及び送信処理待ちキュー１３０のうち空でないキューの数で割った値を、前回更新時の仮想時刻に加算することで更新される。数式で表すと、制御部１５０は、仮想時刻Ｔｖｉｒを次式に従って計算する。
Ｔｖｉｒ＝Ｔｖｉｒｏｌｄ＋（Ｔｎｏｗ−Ｔｏｌｄ）／Ｑ    …（３）
【００６７】
ここで、Ｔｖｉｒｏｌｄは、前回更新時の仮想時刻である。Ｔｎｏｗは、現在の実時刻である。Ｔｏｌｄは、仮想時刻の前回更新時の実時刻である。Ｑは、アクティブなキューの数である。上記数式（３）を参照すると、アクティブなキューの数に応じて仮想時刻の更新幅が増減し得る。例えば、アクティブなキューが１つである場合、仮想時刻は実時刻と同一である。一方で、アクティブなキューが２つである場合、仮想時刻は実時刻と比較して２倍遅く（即ち、１／２の早さで）進む。このことは、上述した理想的な仕組みにおいて、アクティブなキューの増減により、並列的に処理されるメッセージの処理速度が増減することに対応する。
【００６８】
仮想時刻は、ルーティング処理待ちキュー１２０又は送信処理待ちキュー１３０に新たなメッセージ（又は新たなポインタ）が追加される度に、更新される。他に、仮想時刻は、ルーティング処理待ちキュー１２０及び送信処理待ちキュー１３０のうち空でない、即ちアクティブなキューの数が増減する度に更新されてもよい。
【００６９】
仮想時刻は、終了予定時刻の計算において、計算対象のメッセージがキューに記憶された時刻ＡＸ［ｉ］に代えて用いられる。即ち、制御部１５０は、計算対象のメッセージと同一のキューに記憶されるメッセージであって計算対象のメッセージより先に処理されるメッセージの終了予定時刻又は仮想時刻のうち遅い方に、計算対象のメッセージの処理時間を加算することで、計算対象のメッセージの終了予定時刻を計算する。数式で表すと、制御部１５０は、終了予定時刻ＦＸ［ｉ］を次式に従って計算する。
ＦＸ［ｉ］＝Ｍａｘ（ＦＸ［ｉ−１］，Ｔｖｉｒ）＋ＰＸ［ｉ］    …（４）
【００７０】
なお、メッセージｉが記憶される前はキュー＃Ｘが空であった場合（即ち、ｉ＝１である場合）、制御部１５０は、終了予定時刻ＦＸ［１］を次式に従って計算する。
【００７１】
ＦＸ［１］＝Ｔｖｉｒ＋ＰＸ［１］    …（５）
【００７２】
仮想時刻の導入により、アクティブなキューの増減に起因するメッセージの処理速度の増減を、終了予定時刻に反映することができる。これにより、ゲートウェイ１００は、上述した理想的な仕組みにより近い、計算リソースの割り当てを実現することができる。
【００７３】
＜３．２．各種処理＞
以下、本実施形態に係るゲートウェイ１００により実行される各種処理について詳細に説明する。本実施形態に係るゲートウェイ１００の構成は、図１を参照して上記説明した通りである。以下では、Ｎ＝６とし、Ｍ＝７として説明する。この場合、ルーティング処理及び送信処理に使用可能な計算リソースの約１４％（（Ｍ−Ｎ）／Ｍ）が送信処理のために割り当てられ、残りの約８６％（Ｎ／Ｍ））がルーティング処理に割り当てられる。
【００７４】
（１）受信処理
ネットワークからメッセージが到来してネットワークインタフェース１１０の受信バッファ１１１に記憶されると、割り込みがトリガされる。割り込みは、受信したメッセージを、メッセージが到来したチャネルに対応するルーティング処理待ちキュー１２０の最後尾に移動させる。その際、まず、制御部１５０は、上記数式（３）に基づいて仮想時刻Ｔｖｉｒを計算する。
【００７５】
次いで、制御部１５０は、上記数式（４）又は（５）に基づいて終了予定時刻ＦＸ［ｉ］を計算して、メッセージに対応付けてルーティング処理待ちキュー１２０に記憶する。メッセージの移動先のルーティング処理待ちキュー１２０が移動前には空であった場合、Ｑをインクリメントする。また、制御部１５０は、次式のように、Ｔｖｉｒ及びＴｎｏｗをＴｖｉｒｏｌｄ及びＴｏｌｄに上書きする。
Ｔｖｉｒｏｌｄ＝Ｔｖｉｒ，  Ｔｏｌｄ＝Ｔｎｏｗ    …（６）
【００７６】
以下、図７を参照して、受信処理の一例を説明する。
【００７７】
図７は、本実施形態に係るゲートウェイ１００によるメッセージの受信処理の一例を説明するための図である。図７では、ゲートウェイ１００内のデータ構造及びデータの流れについて図示されている。なお、キュー＃１〜＃６はルーティング処理待ちキュー１２０であり、キュー＃７は送信処理待ちキュー１３０である。キュー＃１、キュー＃２、及びキュー＃４には、メッセージ１０−１、１０−２、及び１０−３、並びに各々のメッセージの終了予定時刻Ｆ１［１］、Ｆ２［１］、Ｆ４［１］が記憶されている。また、ＭＰＦＯリスト１４１にはメッセージ１０−４が記憶され、ＦＩＦＯリスト１４２にはメッセージ１０−５が記憶されている。また、キュー＃７には、メッセージ１０−４へのポインタ１１−１及びメッセージ１０−４の終了予定時刻Ｆ７［１］、並びにメッセージ１０−５へのポインタ１１−２及びメッセージ１０−５の終了予定時刻Ｆ７［２］が記憶されている。
【００７８】
図７に示した例では、チャネル＃１に到来したメッセージ１０−６が、チャネル＃１の受信バッファ１１１＃１に記憶され、その後キュー＃１の最後に配置されて、チャネル＃１の受信バッファから削除される。キュー＃１の先頭にはメッセージ１０−１が既に記憶されており空でないので、メッセージ１０−６はキュー＃１の２番目に記憶され、Ｑはインクリメントされない。
【００７９】
なお、各キュー及びリストにおいて、下方に記載されたメッセージほど出力順が早く、再下端のメッセージは先頭のメッセージである。例えば、キュー＃１の先頭はメッセージ１０−１であり、２番目がメッセージ１０―６である。
【００８０】
（２）優先付け処理
優先順位付け処理とは、処理対象のキューを選択することである。詳しくは、制御部１５０は、ルーティング処理待ちキュー１２０及び送信処理待ちキュー１３０からひとつのキューを処理対象のキューとして選択する。本実施形態では、各キューの先頭のメッセージのうち終了時刻ＦＸ［ｉ］が最も早いメッセージを記憶したキューを、処理対象のキューとして選択する。
【００８１】
（３）ルーティング処理及び送信処理
優先順位付け処理の後、選択されたキューに対応する処理が実行される。ここで実行されるルーティング処理及び送信処理は、第１の実施形態におけるこれらの処理と同様である。以下、相違点について説明する。
【００８２】
−第１の相違点
ルーティング処理後、メッセージは、送信処理待ちキュー１３０に記憶される。その際、制御部１５０は、上記数式（３）に基づいて仮想時刻Ｔｖｉｒを計算し、上記数式（６）に基づいてＴｖｉｒ及びＴｎｏｗをＴｖｉｒｏｌｄ及びＴｏｌｄに上書きする。また、制御部１５０は、上記数式（４）又は（５）に基づいて終了予定時刻ＦＸ［ｉ］を計算して、メッセージに対応付けて送信処理待ちキュー１３０に記憶する。
【００８３】
ただし、ルーティング処理済みのメッセージがＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２に記憶される場合、送信処理待ちキュー１３０にメッセージがコピーされなくてもよい。以下では、送信処理待ちキュー１３０に、ＦＸ［ｉ］及びＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２に記憶されたメッセージへのポインタが記憶されるものとする。
【００８４】
ここで、ＭＰＦＯリスト１４１において、メッセージの送信順序は、各々のメッセージの優先度に基づいて決定される。そのため、ＭＰＦＯリスト１４１に新たなメッセージが記憶された場合、送信順序が変更され得る。上記数式（４）によれば、ＦＸ［ｉ］はＦＸ［ｉ−１］に依存するので、送信順序が変更されるのであればＦＸ［ｉ］の更新が要される。
【００８５】
そのため、制御部１５０は、キューに記憶されたメッセージのうち新たに挿入されたメッセージよりも低い優先度を有する全てのメッセージについて、終了予定時刻ＦＸ［ｉ］を再計算する。制御部１５０は、再計算の際に、ＰＸ［ｉ］として最も長いメッセージの送信のための処理時間を使用してもよい。この場合、送信処理待ちキュー１３０に記憶された各々のメッセージを区別する必要がなくなるので、計算量を削減することができる。
【００８６】
また、制御部１５０は、必要に応じて、アクティブなキューの数Ｑを更新する。
【００８７】
−第２の相違点
送信処理待ちキュー１３０は、送信されるメッセージへのポインタを記憶し得る。その場合、送信処理待ちキュー１３０が優先順位付け処理において選択されることは、ＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２の少なくともいずれかが空ではないことを意味する。他方、メッセージが送信されると、送信処理待ちキュー１３０からメッセージが削除されて、送信処理待ちキュー１３０が空になり得る。送信処理待ちキュー１３０が空となった場合、アクティブなキューの数Ｑは減少する。その場合、制御部１５０は、上記数式（３）に基づいて仮想時刻Ｔｖｉｒを計算し、上記数式（６）に基づいてＴｖｉｒ及びＴｎｏｗをＴｖｉｒｏｌｄ及びＴｏｌｄに上書きする。
【００８８】
以上、第１の実施形態と第２の実施形態との相違点について説明した。以下、図８及び図９を参照しながら、ルーティング処理及び送信処理の一例を説明する。
【００８９】
図８は、本実施形態に係るゲートウェイ１００によるメッセージのルーティング処理の一例を説明するための図である。図８では、ゲートウェイ１００内のデータ構造及び図７の続きのデータの流れについて図示されている。図８に示した例において、優先順位付け処理によりキュー＃４が選択された場合、キュー＃４の先頭のメッセージ１０−３が関連するＭＰＦＯリスト１４１に記憶され、キュー＃４から当該メッセージが削除される。メッセージ１０−３の優先度はＭＰＦＯリスト１４１の既存のメッセージ１０−４よりも低いものとする。一方で、メッセージ１０−３は、ＭＰＦＯリスト１４１に記憶されるので、ＦＩＦＯリスト１４２に記憶されたメッセージ１０−５よりも先に送信される。そこで、キュー＃７の、先頭のメッセージ１０−４へのポインタ１１−１と最後尾のメッセージ１０−５へのポインタ１１−２との間に、メッセージ１０−３へのポインタ１１−３が挿入される。そして、メッセージ１０−３の終了予定時間Ｆ７［２］が計算され、メッセージ１０−５の終了予定時間Ｆ７［３］が再計算される。また、キュー＃４が空になったので、Ｑの数が更新される。
【００９０】
図９は、本実施形態に係るゲートウェイ１００によるメッセージの送信処理の一例を説明するための図である。図９では、ゲートウェイ１００内のデータ構造及び図８の続きのデータの流れについて図示されている。図９に示した例においては、キュー＃７が選択されている。キュー＃７の先頭には、メッセージ１０−４へのポインタ１１−１が記憶されている。従って、メッセージ１０−４が送信先であるチャネル＃６の送信バッファ１１２＃６に記憶され、チャネル＃６から送信される。また、ＭＰＦＯリスト１４１から送信済みのメッセージ１０−４が削除され、キュー＃７からポインタ１１−１が削除される。
【００９１】
（４）補足
優先順位付け処理、ルーティング処理及び送信処理は、割り込みとして又はタスクとして実行され得るが、低遅延の実現のためには、割り込みとして実行されることが望ましい。タスクよりも割り込みの方が優先して実行されるためである。ただし、受信処理の割り込みの方が、優先順位付け処理、ルーティング処理及び送信処理のための割り込み及びタスクよりも、優先して実行される。
【００９２】
優先順位付け処理、ルーティング処理又は送信処理のトリガは、タスク又は割り込みのフラグを用いて設定され得る。当該フラグは、例えば、ルーティング処理待ちキュー１２０、送信処理待ちキュー１３０、ＭＰＦＯリスト１４１及びＦＩＦＯリスト１４２に空でないキュー又はリストがあるか否かを示す。この場合、受信処理の割り込みは、フラグを確認し、空でないことを示すフラグが立っていれば、優先順位付け処理、ルーティング処理又は送信処理の割り込み又はタスクを起動する。さらに、優先順位付け処理、ルーティング処理又は送信処理の割り込み又はタスクは、優先順位付け処理、ルーティング処理又は送信処理を実行後、ルーティング処理待ちキュー１２０、送信処理待ちキュー１３０、ＭＰＦＯリスト１４１及びＦＩＦＯリスト１４２が空であるか否かを確認し、空でない場合は自身を再度呼び出す。
【００９３】
ゲートウェイ１００は、複数の送信処理待ちキュー１３０を有していてもよい。その場合、複数の送信処理待ちキュー１３０の使い分け方法は任意である。例えば、複数の送信処理待ちキュー１３０は、それぞれ異なるチャネルを送信先とするメッセージを記憶してもよい。また、複数の送信処理待ちキュー１３０は、ルーティング処理が終了した順に交互にメッセージを記憶してもよい。
【００９４】
＜３．３．処理の流れ＞
（１）受信処理の流れ
図１０は、本実施形態に係るゲートウェイ１００において実行される受信処理の流れの一例を示すフローチャートである。図１０に示すように、まず、チャネル＃Ｘにメッセージが到来すると、制御部１５０は、到来したメッセージを到来したチャネル＃Ｘに対応する受信バッファ１１１＃Ｘにバッファする（ステップＳ３０２）。次に、制御部１５０は、Ｔｖｉｒ＝Ｔｖｉｒｏｌｄ＋（Ｔｎｏｗ−Ｔｏｌｄ）／Ｑにより仮想時刻Ｔｖｉｒを計算する（ステップＳ３０４）。次いで、制御部１５０は、受信バッファ１１１＃Ｘにバッファされたメッセージを、チャネル＃Ｘに対応するルーティング処理待ちキュー１２０（キュー＃Ｘ）に移動させる（ステップＳ３０６）。
【００９５】
次に、制御部１５０は、メッセージの移動前にキュー＃Ｘが空であったか否かを判定する（ステップＳ３０８）。空であったと判定された場合（ステップＳ３０８／ＹＥＳ）、制御部１５０は、ＡＸ［１］＝Ｔｖｉｒとし（ステップＳ３１０）、ＦＸ［１］＝ＡＸ［１］＋ＰＸ［１］を計算し（ステップＳ３１２）、Ｑをインクリメントする（ステップＳ３１４）。その後、処理はステップＳ３２０に進む。一方で空でなかったと判定された場合（ステップＳ３０８／ＮＯ）、制御部１５０は、ＡＸ［ｉ］＝Ｔｖｉｒとし（ステップＳ３１６）、ＦＸ［ｉ］＝ｍａｘ（ＦＸ［ｉ−１］，ＡＸ［ｉ］）＋ＰＸ［ｉ］を計算する（ステップＳ３１８）。その後、処理はステップＳ３２０に進む。
【００９６】
ステップＳ３２０において、制御部１５０は、Ｔｖｉｒｏｌｄ＝Ｔｖｉｒ，  Ｔｏｌｄ＝Ｔｎｏｗとする（ステップＳ３２０）。そして、制御部１５０は、優先順位付け処理、ルーティング処理又は送信処理をトリガする（ステップＳ３２２）。
【００９７】
（２）優先順位付け処理、ルーティング処理及び送信処理の流れ
図１１Ａ及び図１１Ｂは、本実施形態に係るゲートウェイ１００において実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである。図１１Ａに示すように、まず、優先順位付け処理、ルーティング処理及び送信処理が受信処理によりトリガされると（ステップＳ４０２）、制御部１５０は、ルーティング処理待ちキュー１２０及び送信処理待ちキュー１３０の先頭のメッセージの終了予定時刻ＦＸ［ｉ］が最も早いキューを選択する（ステップＳ４０４）。選択されるキューのインデックスをＸとする。次いで、制御部１５０は、選択されたキュー＃Ｘはルーティング処理待ちキュー１２０又は送信処理待ちキュー１３０のいずれであるかを判定する（ステップＳ４０６）。選択されたキュー＃Ｘがルーティング処理待ちキュー１２０である場合、処理はステップＳ４０８に進む。一方で、選択されたキュー＃Ｘが送信処理待ちキュー１３０である場合、処理はステップＳ４３２に進む。なお、これらの処理は、優先順位付け処理に相当する。
【００９８】
ステップＳ４０８においては、制御部１５０は、キュー＃Ｘから先頭のメッセージを選択する。次いで、制御部１５０は、選択したメッセージがＭＰＦＯメッセージ又はＦＩＦＯメッセージのいずれであるかを判定する（ステップＳ４１０）。選択したメッセージがＦＩＦＯメッセージである場合、制御部１５０は、ルーティングを行い、メッセージをＦＩＦＯリスト１４２に移動させる（ステップＳ４１２）。一方で、選択したメッセージがＭＰＦＯメッセージである場合、制御部１５０は、ルーティングを行い、メッセージをＭＰＦＯリスト１４１に移動させる（ステップＳ４１４）。ここで、ＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２に移動後のメッセージへのポインタが、送信処理待ちキュー１３０に記憶される。送信処理待ちキュー１３０のインデックスを、Ｍとする。ステップＳ４１２又はＳ４１４の後、処理はステップＳ４１６に進む。ステップＳ４１６では、制御部１５０は、Ｔｖｉｒ＝Ｔｖｉｒｏｌｄ＋（Ｔｎｏｗ−Ｔｏｌｄ）／Ｑにより仮想時刻Ｔｖｉｒを計算する。次に、制御部１５０は、メッセージの移動前にキュー＃Ｍが空であったか否かを判定する（ステップＳ３０８）。空であったと判定された場合（ステップＳ４１８／ＹＥＳ）、制御部１５０は、ＡＭ［１］＝Ｔｖｉｒとし（ステップＳ４２０）、ＦＭ［１］＝ＡＭ［１］＋ＰＭ［１］を計算し（ステップＳ４２２）、Ｑをインクリメントする（ステップＳ４２４）。その後、処理はステップＳ４３０に進む。一方で空でなかったと判定された場合（ステップＳ４１８／ＮＯ）、制御部１５０は、ＡＭ［ｉ］＝Ｔｖｉｒとし（ステップＳ４２６）、ＦＭ［ｉ］＝ｍａｘ（ＦＭ［ｉ−１］，ＡＭ［ｉ］）＋ＰＭ［ｉ］を計算する（ステップＳ４２８）。その後、処理はステップＳ４３０に進む。ステップＳ４３０において、制御部１５０は、Ｔｖｉｒｏｌｄ＝Ｔｖｉｒ，  Ｔｏｌｄ＝Ｔｎｏｗとする。その後、処理はステップＳ４４０に進む。なお、これらの処理は、ルーティング処理に相当する。
【００９９】
図１１Ｂに示すように、ステップＳ４３２においては、制御部１５０は、ＭＰＦＯリスト１４１が空であるか否かを判定する。ＭＰＦＯリスト１４１が空でないと判定された場合、制御部１５０は、ＭＰＦＯリスト１４１から最も優先度の高いメッセージを選択する（ステップＳ４３４）。その後、処理はステップＳ４３８に進む。一方で、ＭＰＦＯリストが空であると判定された場合、制御部１５０は、ＦＩＦＯリスト１４２から先頭のメッセージを選択する（ステップＳ４３６）。その後、処理はステップＳ４３８に進む。ステップＳ４３８においては、制御部１５０は、ルーティング処理により決定された送信先のチャネルへメッセージを送信し、ＭＰＦＯリスト１４１又はＦＩＦＯリスト１４２から送信済みのメッセージを削除し、送信処理待ちキュー１３０からポインタを削除する。これに伴い、削除された送信済みのメッセージへのポインタが、送信処理待ちキュー１３０から削除される。その後、処理はステップＳ４４０に進む。ステップＳ４４０においては、制御部１５０は、キュー＃Ｘが空であるか否かを判定する。キュー＃Ｘが空でないと判定された場合、処理はステップＳ４４６に進む。一方で、キュー＃Ｘが空であると判定された場合、制御部１５０は、Ｔｖｉｒ＝Ｔｖｉｒｏｌｄ＋（Ｔｎｏｗ−Ｔｏｌｄ）／Ｑにより仮想時刻Ｔｖｉｒを計算する（ステップＳ４４２）。次いで、制御部１５０は、Ｔｖｉｒｏｌｄ＝Ｔｖｉｒ，  Ｔｏｌｄ＝Ｔｎｏｗ，Ｑ＝Ｑ−１とする（ステップＳ４４４）。その後、処理はステップＳ４４６に進む。なお、これらの処理は、送信処理に相当する。
【０１００】
ステップＳ４４６においては、制御部１５０は、全てのキューが空であるか否かを判定する。少なくともひとつが空でないと判定された場合、処理はステップＳ４０４に戻る。一方で、全てが空であると判定された場合、処理は終了する。
【０１０１】
＜＜４．比較例について＞＞
以下、上述したゲートウェイ１００と、典型的なゲートウェイとを比較する。
【０１０２】
（１）比較例の説明
図１２は、比較例に係るゲートウェイ２００の構成の一例を示す図である。図１２に示すように、比較例に係るゲートウェイ２００は、６チャネルのネットワークインタフェース２１０、及びＭＰＦＯリスト２４１及びＦＩＦＯリスト２４２を含む。ゲートウェイ２００は、ゲートウェイ１００と異なり、受信バッファ、送信バッファ、及びキューを含まない。メッセージが到来すると、ゲートウェイ２００は、メッセージのルーティング処理を行い、メッセージに対応するデータ構造にメッセージを記憶する。次いで、ゲートウェイ２００は、記憶したメッセージの送信処理を行う。図１２に示した例では、チャネル＃１にメッセージ１０が到来すると、ゲートウェイ２００は、メッセージ１０のルーティング処理を行い、ＭＰＦＯリスト２４１にメッセージを記憶する。そして、ゲートウェイ２００は、ＭＰＦＯリスト２４１に記憶されたメッセージをチャネル＃６から送信する。
【０１０３】
ゲートウェイ２００においてメッセージの損失を回避するための単純な解決策は、十分に強力な計算機（以下、ＣＰＵ）を搭載することである。例えば、５００ｋｂｐｓのシリアルバスのＣＡＮにおいては、最短のメッセージである１バイトのメッセージは約１００［μｓ］（マイクロ秒）で受信される。即ち、ゲートウェイ２００が１バイトのメッセージの最初のビットから最後のビットまでを受信するのに１００［μｓ］かかる。受信したメッセージの全てを１００［μｓ］以内で処理可能なＣＰＵがゲートウェイ２００に搭載される場合、メッセージの損失は回避可能である。
【０１０４】
一方で、最長のメッセージである８バイトのメッセージは、約２００［μｓ］で受信される。バッファーオーバーランを回避するためには、８バイトのメッセージも、１００［μｓ］以内に処理可能であることが望ましい。８バイトのメッセージの処理中にも、１バイトのメッセージが到来し得るためである。従って、ワーストケースは、チャネルごとに１メッセージが到来し、各メッセージがＣＡＮにおける最大長（８バイト）を有し、到来したメッセージの最初の１ビットが受信されたときからメッセージの処理が開始されるケースである。ワーストケースにおいてメッセージの損失を回避するための条件は、例えばゲートウェイ２００が８チャネルを有する場合、ＣＰＵが１００／８＝１２．５［μｓ］以内に８バイトのメッセージを処理することである。
【０１０５】
しかし、典型的なチャネル数（６〜８ＣＡＮチャネル）及び典型的な車載用ＣＰＵ（クロック速度が１００ＭＨｚ程度）では、上記条件を満たすことは困難である。上記条件を満たすためには、クロック速度２００ＭＨｚ程度であり及び／又はマルチコアを有する強力なＣＰＵが採用されることが望ましい。しかし、このような強力なＣＰＵの採用は、コストに悪影響を及ぼす。ＣＡＮ−ＦＤでは、データレートが高くメッセージが長いため、この悪影響は強まる。
【０１０６】
その上、十分に強力なＣＰＵが採用されて、メッセージの損失が回避されたとしても、メッセージの送信に遅延が生じるおそれが残る。なぜならば、バスの負荷が高い状態においては、ゲートウェイ２００は、メッセージの受信を送信よりも優先して、受信したメッセージを送信せずに蓄積し得るためである。例えば、無線でのリプログラミングセッション（over-the-air  reprogramming  session）においては、ゲートウェイ２００は、優先度の低いリプログラミングメッセージを大量に受信すると同時に優先度の高い制御メッセージも受信し得る。メッセージの損失を回避するためにメッセージの受信が優先される場合、優先度の高い制御メッセージを即時送信することが困難となる。このような事態は、リアルタイムシステムでは到底許容されない。
【０１０７】
メッセージの受信よりも送信を優先することも考えられる。しかし、その場合にはメッセージの損失を回避することが困難になり得る。例えば、上記の無線でのリプログラミングセッションの例においては、ゲートウェイ２００は、送信待ちの優先度の低いリプログラミングメッセージを大量にバッファする一方で、高い優先度の制御メッセージの受信に失敗し得る。
【０１０８】
車載システムのようなリアルタイムシステムの要求を満たすためには、ゲートウェイ２００におけるメッセージの受信と送信との間で絶妙なバランスをとることが求められる。そしてこの絶妙なバランスを、メッセージの受信又は送信のいずれを優先するか、といった単純な戦略で実現することは困難である。
【０１０９】
（２）比較例との比較
本発明の一実施形態（第１又は第２の実施形態）に係るゲートウェイ１００は、チャネル数Ｎよりも多いＭ個のキューを有し、Ｍ個のキューの各々に記憶されたメッセージから所定の優先順位付けアルゴリズムに従って選択したメッセージに、計算リソースを割り当てる。これにより、メッセージの損失を回避するための条件が緩和される。メッセージの損失を回避するための条件は、ｘ［μｓ］で受信したメッセージをｘ／Ｍ［μｓ］以内に処理すること、である。
【０１１０】
例えば、ゲートウェイ１００が８チャネル及び９つのキューを有し、１バイトのメッセージを１００［μｓ］以内に受信した場合、１００／９＝１１．１［μｓ］以内に当該メッセージを処理することが求められる。この処理時間は、ゲートウェイ２００と同レベルである。一方で、ゲートウェイ１００が８チャネル及び９つのキューを有し、８バイトのメッセージを２００［μｓ］以内に受信した場合、２００／９＝２２［μｓ］以内に当該メッセージを処理することが求められる。この処理時間は、ゲートウェイ２００の約２倍である。即ち、ゲートウェイ１００は、ゲートウェイ２００に搭載されるＣＰＵの約半分の処理能力ＣＰＵでも、メッセージの損失を回避することが可能である。
【０１１１】
さらに、本実施形態では、計算リソースの（Ｍ−Ｎ）／Ｍが、メッセージの送信のために割り当てられる。例えば、９つのキューを有する８チャネルのゲートウェイでは、計算リソース（例えば、ＣＰＵの処理時間）の１１％はメッセージの送信に費やされる。もちろん、キューの数は、チャネル数、及びＣＰＵの計算リソースのうちメッセージに送信に割り当てる割合の要求に応じて、任意に調整可能である。
【０１１２】
このように、ゲートウェイ１００は、処理能力の低い（即ち、コストが安い）ＣＰＵでもメッセージの損失を回避することができる。また、ゲートウェイ１００は、受信メッセージの負荷が高い状況でも、送信機会を確保することができる。
【０１１３】
＜＜５．補足＞＞
以上、添付図面を参照しながら本発明の好適な実施形態について詳細に説明したが、本発明はかかる例に限定されない。本発明の属する技術の分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本発明の技術的範囲に属するものと了解される。
【０１１４】
なお、本明細書において説明したゲートウェイ１００は、単独の装置として実現されてもよく、一部または全部が別々の装置として実現されても良い。例えば、図１に示したゲートウェイ１００の機能構成例のうち、制御部１５０は、ゲートウェイ１００を制御するコンピュータ等の制御装置に備えられていても良い。その場合、ネットワークインタフェース１１０、ルーティング処理待ちキュー１２０、送信処理待ちキュー１３０、及び第３の記憶部１４０の状態や記憶されたメッセージを示す情報が制御装置に送信される。そして、制御装置内の制御部１５０は、受信した情報に対する各種処理を行う。
【０１１５】
また、本明細書において説明したゲートウェイ１００による一連の処理は、ソフトウェア、ハードウェア、及びソフトウェアとハードウェアとの組合せのいずれを用いて実現されてもよい。ソフトウェアを構成するプログラムは、例えば、ゲートウェイ１００の内部又は外部に設けられる記憶媒体（非一時的な媒体：non-transitory  media）に予め格納される。そして、当該プログラムは、例えば、コンピュータによる実行時にＲＡＭに読み込まれ、ＣＰＵなどのプロセッサにより実行される。
【０１１６】
また、本明細書においてフローチャート及びシーケンス図を用いて説明した処理は、必ずしも図示された順序で実行されなくてもよい。いくつかの処理ステップは、並列的に実行されてもよい。また、追加的な処理ステップが採用されてもよく、一部の処理ステップが省略されてもよい。
【０１１７】
なお、上記で引用した参考文献は、以下の通りである。
［１］Sergio  Campoy-Martinez,  Vincent  Bidault:  “Method  and  device  for  transmitting  frames  between  two  CAN  buses”,  WO2014127866  (A1),  Renault  S.A.S.,  priority  date  2013/02/21
［２］John  Nagle:  "On  packet  switches  with  infinite  storage,"  RFC  970,  IETF,  December  1985.
［３］Albert  Greenberg,  Neal  Madras:  “How  fair  is  fair  queuing?”,  Journal  of  the  ACM,  Volume  39  Issue  3,  July  1992,  pp.  568-598.
【符号の説明】
【０１１８】
１００    ゲートウェイ
１１０    ネットワークインタフェース
１１１    第４の記憶部、受信バッファ
１１２    第５の記憶部、送信バッファ
１２０    第１の記憶部、ルーティング処理待ちキュー
１３０    第２の記憶部、送信処理待ちキュー
１４０    第３の記憶部
１４１    ＭＰＦＯリスト
１４２    ＦＩＦＯリスト
１５０    制御部
２００    比較例係るゲートウェイ
【図１】
2019213043.tif 000003
【図２】
2019213043.tif 000004
【図３】
2019213043.tif 000005
【図４】
2019213043.tif 000006
【図５】
2019213043.tif 000007
【図６】
2019213043.tif 000008
【図７】
2019213043.tif 000009
【図８】
2019213043.tif 000010
【図９】
2019213043.tif 000011
【図１０】
2019213043.tif 000012
【図１１Ａ】
2019213043.tif 000013
【図１１Ｂ】
2019213043.tif 000014
【図１２】
2019213043.tif 000015