(57)【要約】  最適な通信路を選択し、負荷分散する。通信装置（１０１＃０）は、基地局（１０２）との通信速度が低下すると、基地局を介さずに通信可能な通信装置（１０１＃１）と、通信装置（１０１＃２）とに、基地局との通信速度と各装置の処理速度を問い合わせる。問い合わせた結果、通信装置（１０１＃２）の通信速度が速い場合、通信装置（１０１＃１）は、通信装置（１０１＃０）から通信装置（１０１＃２）を経由して基地局（１０２）までの通信路を特定する。続けて、通信装置（１０１＃０）は、通信装置（１０１＃０）の負荷より通信装置（１０１＃２）の負荷が小さく、アプリから発生した通信処理（１０３）を通信装置（１０１＃２）の方が速く実行可能な場合、通信処理（１０３）を通信装置（１０１＃２）に移行する。
2012108057.tif 000002
【特許請求の範囲】
【請求項１】
通信処理を第１処理速度で実行可能な第１ＣＰＵと、
基地局との間で前記通信処理を行うときの第１通信速度を測定する測定部と、
前記第１通信速度に基づいて少なくとも一の他装置に前記基地局および前記装置の第２通信速度と前記他装置に含まれる第２ＣＰＵの第２処理速度とを収集する収集部と、
前記第２通信速度と前記第２処理速度とに基づいて前記他装置に前記通信処理を移行するか否かを判定する判定部と、
判定結果に基づいて前記通信処理を前記他装置に移行する移行部と、
を含むことを特徴とする通信装置。
【請求項２】
前記判定部は、前記他装置が複数ある場合、前記第２通信速度および前記第２処理速度のうちの最小である値が最も大きい装置に前記通信処理を移行するか否か判定すること
を特徴とする請求項１に記載の通信装置。
【請求項３】
前記判定部は、前記他装置へ移行した前記通信処理の実行結果を回収すること
を特徴とする請求項１または請求項２に記載の通信装置。
【請求項４】
前記判定部は、前記通信処理の発生元となるアプリケーションの属性に基づいて前記他装置に前記通信処理を移行するか否かを判定すること
を特徴とする請求項１乃至請求項３の何れか一に記載の通信装置。
【請求項５】
前記第２通信速度および前記第２処理速度を登録するメモリを有すること
を特徴とする請求項１乃至請求項４の何れか一に記載の通信装置。
【請求項６】
前記第１通信速度および前記第２通信速度に基づいて、自装置から前記基地局までの第１通信路と前記自装置から前記他装置を経由して前記基地局までの第２通信路とのうちいずれかを特定の通信路に特定する特定部と、
前記特定部によって前記第２通信路が前記特定の通信路に特定された場合、前記通信処理によって発生する通信を、前記他装置を経由して通信するように前記他装置を制御する制御部と、
をさらに含むことを特徴とする請求項１に記載の通信装置。
【請求項７】
前記特定部は、さらに、前記第１通信路と前記第２通信路とのうち、当該通信路に前記他装置が存在する数に基づいて、前記特定の通信路に特定すること
を特徴とする請求項６に記載の通信装置。
【請求項８】
前記判定部は、前記特定部によって前記第２通信路が前記特定の通信路に特定された場合、前記特定の通信路の通信速度および前記第１処理速度と、前記他装置および前記基地局間の通信速度および前記第２処理速度とに基づいて、前記他装置に前記通信処理を移行させるか否かを判定すること
を特徴とする請求項６に記載の通信装置。
【請求項９】
前記特定部によって前記特定の通信路が特定された場合、前記特定の通信路内に含まれる装置ごとに、当該装置から前記基地局までの通信速度と当該装置が前記通信処理を実行可能である処理速度とに基づいた評価値を算出する算出部と、
前記算出部によって算出された評価値群に基づいて、前記特定の通信路内に含まれる装置群のうち前記通信処理を実行する実行対象装置を設定する設定部と、
をさらに含み、
前記判定部は、前記設定部によって設定された前記実行対象装置が前記自装置であるか否かを判定し、
前記移行部は、前記判定部によって前記実行対象装置が前記自装置でない場合、前記実行対象装置に前記通信処理を移行すること
を特徴とする請求項８に記載の通信装置。
【請求項１０】
アプリケーションごとに、当該アプリケーションが要求する通信速度を登録するメモリを有し、
前記特定部は、前記特定の通信路の通信速度が、前記メモリを参照した前記通信処理を発生させたアプリケーションが要求する通信速度より小さい場合、前記第１通信路と前記第２通信路とのうち、前記特定の通信路以外から新たな特定の通信路を特定し、
前記算出部は、前記特定部によって前記新たな特定の通信路が特定された場合、前記新たな特定の通信路内に含まれる装置ごとに、当該装置から前記基地局までの通信速度と当該装置が前記通信処理を実行可能である処理速度とに基づいた評価値を算出し、
前記設定部は、前記算出部によって算出された評価値群に基づいて、前記新たな特定の通信路内に含まれる装置群のうち前記通信処理を実行する新たな実行対象装置を設定し、
前記判定部は、前記設定部によって設定された前記新たな実行対象装置が前記自装置であるか否かを判定し、
前記移行部は、前記判定部によって前記新たな実行対象装置が前記自装置でない場合、前記新たな実行対象装置に前記通信処理を移行すること
を特徴とする請求項９に記載の通信装置。
【請求項１１】
通信処理を第２処理速度で実行可能な第２ＣＰＵと、
前記通信処理を第１処理速度で実行可能な第１ＣＰＵを含むと共に基地局との間で第１通信速度で前記通信処理を行なう他装置からの要求に基づいて、前記基地局との間の第２通信速度と前記第２処理速度とを前記他装置へ通信する通信部と、
前記他装置から移行される第１通信処理を実行する実行部と、
を含むことを特徴とする通信装置。
【請求項１２】
前記他装置からの要求に応じて、前記通信処理の実行結果を前記装置に送信すること
を特徴とする請求項１１に記載の通信装置。
【請求項１３】
少なくとも一の対象装置に前記基地局と前記対象装置との第３通信速度と前記対象装置に含まれる第３ＣＰＵの第３処理速度とを問い合わせる収集部と、
前記第３通信速度と前記第３処理速度とに基づいて前記対象装置に前記通信処理を移行するか否かを判定する判定部と、
を含むことを特徴とする請求項１１または請求項１２に記載の通信装置。
【請求項１４】
前記第３通信速度と前記第３処理速度とを登録するメモリを含むこと
を特徴とする請求項１１乃至請求項１３の何れか一に記載の通信装置。
【請求項１５】
基地局との間で通信処理を行なうときの第１通信速度を測定し、
第１装置に前記基地局と前記第１装置との間の第２通信速度と前記第１装置に含まれるＣＰＵが前記通信処理を実行する際の処理速度とを要求し、
前記第１通信速度と第２通信速度と前記処理速度とに基づいて前記第１装置に前記通信処理を移行するか否かを判定し、
判定結果に基づいて前記通信処理を前記第１装置に移行すること
を特徴とする通信方法。
【請求項１６】
第２装置からの要求に応じて前記第２通信速度と前記処理速度を前記第２装置に送信すること
を特徴とする請求項１５に記載の通信方法。
【請求項１７】
前記第２装置から移行された前記通信処理を実行すること
を特徴とする請求項１５に記載の通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、および通信方法に関する。
【背景技術】
【０００２】
従来から、携帯電話などの端末装置は、基地局と無線通信を行い、情報を送受信している。もし、端末装置が基地局からの電波が届かない場所に移動してしまった場合、端末装置の通信が遮断してしまい、通信処理が中断されてしまっていた。このような、端末装置と基地局の通信が遮断された場合に対応する技術として、たとえば、アドホック通信を用いて、自装置とは別の他装置が基地局の通信を中継する技術が開示されている（たとえば、下記特許文献１、２を参照。）。【０００３】
また、近年の端末装置は、様々な機能を搭載し続けていった結果、端末装置の負荷が増大している。負荷を分散する技術として、たとえば、１つの端末装置に複数の無線通信ユニットを搭載し、最適な通信ユニットにて通信を行う技術が開示されている。また、基地局における負荷分散の技術として、端末装置が複数の基地局の混雑情報を受け取り、端末装置が最適な基地局を選択して通信を行う技術が開示されている（たとえば、下記特許文献３、４を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−８９０２１号公報
【特許文献２】特開２００４−２７４５０号公報
【特許文献３】特開２００５−２９５０８７号公報
【特許文献４】特開２００２−１５９０３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術において、特許文献１、２にかかる技術では、端末装置と基地局の通信が遮断されても通信を続行することができるが、低速な通信路を選択してしまう可能性があるという問題があった。また、特許文献３にかかる技術では、特定の端末装置にかかる負荷は偏ったままとなる問題があった。【０００６】
本発明は、上述した従来技術による問題点を解消するため、最適な通信路を選択し、負荷分散できる通信装置、および通信方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、通信処理を第１処理速度で実行可能な第１ＣＰＵを含み、基地局との間で通信処理を行うときの第１通信速度を測定し、第１通信速度に基づいて少なくとも一の他装置から基地局および装置の第２通信速度と他装置に含まれる第２ＣＰＵの第２処理速度とを収集し、第２通信速度と第２処理速度とに基づいて他装置に通信処理を移行するか否かを判定し、判定結果に基づいて通信処理を他装置に移行する通信装置、および通信方法が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、最適な通信路を選択でき、負荷分散できるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態１〜実施の形態３における通信システム１００の通信路選択例を示す説明図である。
【図２】図２は、実施の形態１〜実施の形態３にかかる通信装置１０１＃０のハードウェアを示すブロック図である。
【図３】図３は、実施の形態１にかかる通信システム１００の機能を示すブロック図である。
【図４】図４は、パラメタテーブル３０１の記憶内容の一例を示す説明図である。
【図５】図５は、パラメタテーブル３０１の算出例を示す説明図である。
【図６】図６は、最良装置の設定例を示す説明図である。
【図７】図７は、通信装置１０１＃０の速度低下が起こっていない状態を示す説明図である。
【図８】図８は、通信装置１０１＃０の通信速度低下時における問い合わせ動作を示す説明図である。
【図９】図９は、通信装置１０１＃０の通信速度低下時における経路選択方法を示す説明図である。
【図１０】図１０は、通信装置１０１＃０の処理速度低下時における問い合わせ動作を示す説明図である。
【図１１】図１１は、通信装置１０１間の通信速度低下時における経路選択方法を示す説明図である。
【図１２】図１２は、経由装置評価値が同値である通信装置が複数存在する場合の経路選択方法を示す説明図である。
【図１３】図１３は、入れ子情報テーブル３０２が生成される場合の通信システム１００の状態を示す説明図である。
【図１４】図１４は、入れ子情報テーブル３０２の記憶内容の一例を示す説明図である。
【図１５】図１５は、通信システム１００の処理遷移を示す説明図である。
【図１６】図１６は、パラメタ更新処理および問い合わせ応答処理を示すフローチャートである。
【図１７】図１７は、経由装置特定処理を示すフローチャートである。
【図１８】図１８は、通信処理実行処理を示すフローチャートである。
【図１９】図１９は、最良装置設定処理を示すフローチャートである。
【図２０】図２０は、通信処理ディスパッチ応答処理を示すフローチャートである。
【図２１】図２１は、通信処理実行結果応答処理を示すフローチャートである。
【図２２】図２２は、通信処理再実行処理を示すフローチャートである。
【図２３】図２３は、通信処理回収応答処理を示すフローチャートである。
【図２４】図２４は、実施の形態２にかかる通信システム１００の機能を示す説明図である。
【図２５】図２５は、実施の形態２にかかるアプリ属性テーブル２４０１の記憶内容の一例を示す説明図である。
【図２６】図２６は、実施の形態２にかかる最良装置設定処理を示すフローチャートである。
【図２７】図２７は、通信処理を複数の通信装置１０１にて分割実行する動作を示す説明図である。
【図２８】図２８は、実施の形態３にかかるアプリ属性テーブル２８０１の記憶内容の一例を示す説明図である。
【図２９】図２９は、実施の形態３にかかる通信処理実行処理を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、開示の通信装置、および通信方法の実施の形態１〜実施の形態３を詳細に説明する。
【００１１】
図１は、本実施の形態１〜実施の形態３における通信システム１００の通信路選択例を示す説明図である。通信システム１００は、通信装置１０１＃０〜通信装置１０１＃２と、基地局１０２とを含む。通信装置１０１は、ユーザにより使用可能な小型の携帯端末であり、たとえば、携帯電話等である。
【００１２】
基地局１０２は、通信装置１０１との間で無線通信を行い、他の端末との通話、通信を中継する装置である。また、基地局１０２は複数存在し、複数の基地局１０２と通信装置１０１で携帯電話網を形成している。また、基地局１０２は、ネットワークを通して、通信装置１０１とサーバとの通信を中継する。サーバは、特定のサービスを提供する装置であり、たとえば、Ｗｅｂページの閲覧を提供するＷｅｂサーバ、メール送受信サービスを提供するメールサーバ、動画再生を提供する動画配信サーバ等である。
【００１３】
図１では、通信装置１０１＃０〜通信装置１０１＃２が同一の列車内に存在している状態であり、さらに、列車の一部が基地局１０２と無線通信の行えないトンネル内を通過している状態を想定している。このとき、通信装置１０１＃０はトンネル内に位置しているため、基地局１０２と通信できない状態である。通信装置１０１＃１は、トンネルの入り口近くに位置しているため、基地局１０２と通信可能であるが、電界強度が低くノイズが多くなってしまい通信速度が遅い状態である。通信装置１０１＃２は、トンネルの外に位置しているため、基地局１０２と通信可能であり、電界強度が高く、ノイズが少なく通信速度が速い状態である。また、通信装置１０１＃０は、基地局１０２を介さずに通信するアドホック通信により、通信装置１０１＃１、通信装置１０１＃２と通信可能である。
【００１４】
このような状態で、ユーザ等の要求により実行されたアプリによって、通信装置１０１＃０がサーバに接続する状態が発生した場合を想定する。なお、通信装置１０１＃０は基地局１０２と直接通信できないが、通信装置１０１＃１または通信装置１０１＃２を経由して基地局１０２と通信することが可能である。このとき、通信装置１０１＃０は通信装置１０１＃２を経由する通信路を選択する。これにより、通信装置１０１＃０は、基地局１０２と高速に通信することができる。
【００１５】
また、通信装置１０１＃０の負荷より通信装置１０１＃２の負荷が小さく、アプリから発生した通信処理１０３を通信装置１０１＃２の方が速く実行可能な場合、通信装置１０１＃０は、通信処理１０３を通信装置１０１＃２に移行する。これにより、通信システム１００間で負荷を分散することができる。
【００１６】
なお、通信処理１０３は、サーバとの送受信を行う処理や、また、それに付随する処理であってもよい。付随する処理としては、たとえば、通信装置１０１＃０で実行するアプリがメーラアプリであれば、送受信時に行うＢａｓｅ６４のエンコード／デコード処理である。また、付随する処理が動画再生アプリである場合は、動画フォーマットに対応したエンコード／デコード処理である。このように、本実施の形態における通信システム１００は、複数の通信路から、最適な通信路を選択し、また負荷を分散できる。
【００１７】
図２は、実施の形態１〜実施の形態３にかかる通信装置１０１＃０のハードウェアを示すブロック図である。なお、図２では通信装置１０１＃０のハードウェアについて図示しているが、通信装置１０１＃１、通信装置１０１＃２のハードウェアについても通信装置１０１＃０のハードウェアと同様のハードウェアを含む。図２において、通信装置１０１＃０は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎと、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。また、通信装置１０１＃０は、フラッシュＲＯＭコントローラ２０４と、フラッシュＲＯＭ２０５と、を含む。
【００１８】
また、通信装置１０１＃０は、ユーザやその他の機器との入出力装置として、ディスプレイ２０６と、キーボード２０７と、通信モジュール２０８と、無線ＬＡＮ通信モジュール２０９を含む。また、各部はバス２１０によってそれぞれ接続されている。
【００１９】
ここで、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎは、通信装置１０１＃０の全体の制御を司る。ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎは、シングルコアのプロセッサを並列して接続した全てのＣＰＵを指している。ｎは０以上の整数である。ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎは、それぞれ専用のキャッシュメモリを有する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態１〜実施の形態３では、シングルコアのプロセッサであるＣＰＵが並列されている形態を例にあげて説明する。
【００２０】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎのワークエリアとして使用される。フラッシュＲＯＭコントローラ２０４は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎの制御にしたがってフラッシュＲＯＭ２０５に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０５は、フラッシュＲＯＭコントローラ２０４の制御で書き込まれたデータを記憶する。データの具体例としては、通信装置１０１＃０を使用するユーザが通信モジュール２０８を通して取得した画像データ、映像データや、本実施の形態である通信方法を実行するプログラムなどである。また、フラッシュＲＯＭ２０５は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２１】
ディスプレイ２０６は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０６は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。キーボード２０７は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０７は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２２】
通信モジュール２０８は、基地局１０２を経由して携帯電話網に接続する。通信装置１０１＃０は、携帯電話網を経由して、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。また、通信装置１０１＃０は、携帯電話網を経由して、通信装置１０１＃１、通信装置１０１＃２と接続してもよい。
【００２３】
無線ＬＡＮ通信モジュール２０９は、基地局１０２を経由せずに他の通信装置１０１と接続する。たとえば、無線ＬＡＮ通信モジュール２０９は、ＩＥＥＥ  ８０２．１１にしたがって、通信装置１０１＃１、通信装置１０１＃２と接続する。また、無線ＬＡＮ通信モジュール２０９は、アドホックモードによって通信装置１０１＃１、通信装置１０１＃２と直接通信を行う。
【００２４】
（実施の形態１にかかる通信システム１００の機能）
次に、通信システム１００の機能について説明する。図３は、実施の形態１にかかる通信システム１００の機能を示すブロック図である。通信システム１００は、検出部３１１と、測定部３１２と、選択部３１３と、特定部３１４と、制御部３１５と、判定部３１６と、移行指示部３１７と、算出部３１８と、設定部３１９と、を含む。さらに、通信システム１００は、移行部３２０と、実行部３２１と、通信部３２２と、収集部３２３と、実行部３２４と、通信部３２５と、を含む。
【００２５】
この制御部となる機能（検出部３１１〜収集部３２３）は、記憶装置に記憶されたプログラムをたとえばＣＰＵ２０１＃０が実行することにより、その機能を実現する。また、実行部３２４と通信部３２５は、記憶装置に記憶されたプログラムを通信装置１０１＃１内のたとえばＣＰＵ３０７＃０〜ＣＰＵ３０７＃ｍのうち、ＣＰＵ３０７＃０が実行することにより、その機能を実現する。なお、ｍは０以上の整数である。また、記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０５などである。また、図３では検出部３１１〜収集部３２３がＣＰＵ２０１＃０の機能として表示されているが、ＣＰＵ２０１＃１〜ＣＰＵ２０１＃ｎの機能であってもよい。
【００２６】
また、通信装置１０１＃０は、ＲＡＭ２０３内のパラメタテーブル３０１と入れ子情報テーブル３０２にアクセス可能である。また、通信装置１０１＃０は、ソフトウェアとして、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）３０３と、計算ライブラリ３０４と、判定ライブラリ３０５と、収集ライブラリ３０６を実行する。なお、選択部３１３は、計算ライブラリ３０４に含まれ、特定部３１４〜設定部３１９は、判定ライブラリ３０５に含まれ、収集部３２３は収集ライブラリ３０６に含まれる。また、通信装置１０１＃０は、アプリ３３１、アプリ３３２を実行する。また、アプリ３３１とアプリ３３２は、それぞれ、通信処理３４１、通信処理３４２を含む。また、通信処理３４３は、通信装置１０１＃２からディスパッチされてきた処理であると想定する。
【００２７】
パラメタテーブル３０１は、自装置の基地局１０２への通信速度と、自装置とアドホック通信可能な他装置の通信速度と、を記憶するテーブルである。また、パラメタテーブル３０１は、自装置、他装置が通信処理３４１、通信処理３４２を実行可能な処理速度を記憶してもよい。なお、パラメタテーブル３０１の詳細は、図４にて後述する。
【００２８】
入れ子情報テーブル３０２は、自装置にディスパッチされた通信処理をさらに他装置へディスパッチする際に生成する入れ子情報を記憶するテーブルである。なお、入れ子情報テーブルの詳細は、図１４にて後述する。
【００２９】
ＯＳ３０３は、通信装置１０１＃０を制御するプログラムである。具体的には、ＯＳ３０３は、アプリ３３１、アプリ３３２が使用するライブラリを提供する。また、ＯＳ３０３は、ＲＯＭ２０２、ＲＡＭ２０３などのメモリの管理を行う。また、ＯＳ３０３は、ＣＰＵ２０１＃０が実行するアプリ３３１、アプリ３３２のスケジューリング処理を行う。
【００３０】
計算ライブラリ３０４は、パラメタテーブル３０１に格納する各フィールドを計算する機能を有する。判定ライブラリ３０５は、パラメタテーブル３０１に基づいて最適な通信路、または、通信処理３４１や通信処理３４２を高速に実行可能な通信装置１０１を判定する。また、判定ライブラリ３０５は、入れ子情報テーブル３０２への登録を行う。また、判定ライブラリ３０５は、入れ子情報テーブル３０２を参照して、通信処理を回収する。収集ライブラリ３０６は、アドホック通信可能な他装置に対して、通信速度と処理速度を問い合わせる。また、収集ライブラリ３０６は、問い合わせに対応する応答も行う。
【００３１】
検出部３１１は、自装置にて通信処理が実行されることを検出する機能を有する。たとえば、検出部３１１は、通信処理３４１が実行されることを検出する。また、検出部３１１は、基地局１０２を介さずに自装置に通信可能である他装置群のうち、移行元装置から移行された通信処理を検出してもよい。たとえば、検出部３１１は、通信装置１０１＃２から移行された通信処理３４３を検出する。なお、検出されたという情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３２】
測定部３１２は、検出部３１１によって検出された通信処理が実行される場合、自装置および基地局１０２間の通信となる第１通信路の間で、通信処理を行うときの第１通信速度を測定する機能を有する。たとえば、測定部３１２は、基地局１０２に対してＰｉｎｇを発行して基地局との通信速度Ｂ0＝１［Ｍｂｐｓ］を測定する。なお、第１通信速度の値は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３３】
選択部３１３は、基地局１０２を介さずに自装置に通信可能である他装置および自装置間の通信速度と他装置および基地局１０２間の通信速度とのうち遅い通信速度を、他装置を経由する第２通信路の第２通信速度として選択する機能を有する。たとえば、他装置となる通信装置１０１＃１および自装置となる通信装置１０１＃０の通信速度ｔが１０［Ｍｂｐｓ］であり、通信装置１０１＃１および基地局１０２間の通信速度Ｔが５［Ｍｂｐｓ］であることを想定する。このとき、選択部３１３は、遅い通信速度となる５［Ｍｂｐｓ］を選択する。なお、選択された第２通信路の第２通信速度の値は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３４】
特定部３１４は、第１および第２通信路の通信速度のうち速い通信路を、特定の通信路に特定する機能を有する。たとえば、特定部３１４は、第１通信路の第１通信速度が１［Ｍｂｐｓ］であり、第２通信路の第２通信速度が５［Ｍｂｐｓ］である場合、速い通信路となる第２通信路を、特定の通信路に特定する。また、特定部３１４は、第１通信路に含まれる通信装置１０１＃０の基地局１０２との通信速度と、第２通信路に含まれる通信装置１０１＃１の基地局１０２との通信速度とを比較する。また、特定部３１４は、第２通信路の通信速度が速い場合、第２通信路に含まれる通信装置１０１＃１を経由装置として特定する。
【００３５】
また、特定部３１４は、基地局１０２との通信路に他装置となる通信装置１０１が存在する数に基づいて、特定の通信路を特定してもよい。他装置となる通信装置１０１が存在する数をホップ数と呼称する。たとえば、通信装置１０１＃１を経由して基地局１０２と通信する通信路の通信速度が５［Ｍｂｐｓ］であり、通信装置１０１＃２と通信装置１０１＃１とを経由して基地局１０２と通信する通信路の通信速度が５［Ｍｂｐｓ］であると想定する。
【００３６】
このとき、特定部３１４は、ホップ数が小さい通信装置１０１＃１を経由して基地局１０２と通信する通信路を特定の通信路として特定する。また、この場合、特定部３１４は、通信装置１０１＃１を経由装置として特定する。なお、特定された情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３７】
制御部３１５は、特定部３１４によって第２通信路が特定の通信路に特定された場合、自装置および基地局１０２間で行われる通信を、他装置を経由して通信するように他装置を制御する機能を有する。たとえば、特定部３１４によって通信装置１０１＃１を経由する通信路が特定の通信路に特定された場合を想定する。このとき、制御部３１５は、自装置および基地局間で行われる通信を、通信装置１０１＃１を経由して通信するように通信装置１０１＃１を制御する。
【００３８】
判定部３１６は、第１通信速度と第２通信速度とに基づいて他装置に通信処理を移行するか否かを判定する機能を有する。たとえば、判定部３１６は、第２通信速度が第１通信速度より大きい値となる場合に、通信装置１０１＃１に通信処理３４１を移行すると判定する。また、判定部３１６は、自装置が通信処理を実行可能な第１処理速度および第１通信速度と、他装置が通信処理を実行可能な第２処理速度および第２通信速度とに基づいて判定してもよい。なお、判定された結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３９】
移行指示部３１７は、判定部３１６によって通信処理を他装置に移行させると判定された場合、通信処理を他装置に移行するように移行部３２０に指示する機能を有する。たとえば、移行指示部３１７は、通信処理３４１を通信装置１０１＃１に移行するように移行部３２０に指示する。なお、指示を行ったという情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４０】
また、移行指示部３１７は、移行元装置から移行された通信処理を、さらに別の他装置に移行するように移行部３２０に指示してもよい。たとえば、移行指示部３１７は、通信装置１０１＃２から移行された通信処理３４３を、通信装置１０１＃１に移行するように移行部３２０に指示する。このとき、移行指示部３１７は、移行元装置となる通信装置１０１＃２の識別情報と移行先装置となる通信装置１０１＃１の識別情報と通信処理３４３の識別情報とを入れ子情報として、入れ子情報テーブル３０２に登録する。
【００４１】
算出部３１８は、特定の通信路が特定された場合、特定の通信路内に含まれる通信装置１０１ごとに、通信装置１０１から基地局１０２までの通信速度と通信装置１０１が通信処理を実行可能である処理速度とに基づいた評価値を算出する機能を有する。
【００４２】
たとえば、特定部３１４が、通信装置１０１＃１を経由する第２通信路を特定の通信路に特定した場合を想定する。また、通信装置１０１＃０から基地局１０２までの通信速度Ｔ0を１［Ｍｂｐｓ］であると想定し、通信装置１０１＃０が通信処理３４１を実行する処理速度Ｐ0を５［Ｍｂｐｓ］であると想定する。また、通信装置１０１＃０から通信装置１０１＃１を経由して基地局１０２までの通信速度Ｔ1を５［Ｍｂｐｓ］であると想定し、通信装置１０１＃１が通信処理３４１を実行する処理速度Ｐ1を４［Ｍｂｐｓ］であると想定する。
【００４３】
このとき、算出部３１８は、第２通信路内に含まれる通信装置１０１＃０と、通信装置１０１＃１に対して評価値を算出する。算出部３１８は、通信装置１０１＃０の評価値として、Ｍｉｎ（Ｔ0、Ｐ0）＝Ｍｉｎ（１、５）＝１［Ｍｂｐｓ］のように算出する。同様に、算出部３１８は、通信装置１０１＃１の評価値として、Ｍｉｎ（Ｔ1、Ｐ1）＝Ｍｉｎ（５、４）＝４［Ｍｂｐｓ］のように算出する。なお、算出結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００４４】
設定部３１９は、算出部３１８によって算出された評価値群に基づいて、特定の通信路内に含まれる通信装置１０１群のうち通信処理を実行する実行対象装置を設定する機能を有する。たとえば、算出部３１８が、第２通信路内の通信装置１０１＃０の評価値を１［Ｍｂｐｓ］であると算出し、通信装置１０１＃１の評価値を４［Ｍｂｐｓ］であると算出した状態を想定する。このとき、設定部３１９は、評価値が大きい通信装置１０１＃１を実行対象装置に設定する。なお、設定された実行対象装置の識別情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４５】
移行部３２０は、移行指示部３１７からの指示にしたがって通信処理を他装置に移行する機能を有する。たとえば、移行部３２０は、通信処理３４１を通信装置１０１＃１に移行する。具体的に、移行部３２０は、ＲＯＭ２０２、フラッシュＲＯＭ２０５等に格納されている通信処理３４１の実行コードと、通信処理３４１の実行時情報となるＣＰＵ２０１＃０のレジスタの値等を送信する。なお、移行を行ったという情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４６】
また、移行部３２０は、他装置から移行した通信処理の実行結果を回収してもよい。たとえば、移行部３２０は、通信装置１０１＃１へ移行した通信処理３４１の実行結果を回収してもよい。なお、回収結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶され、通信処理を発生させたアプリによって読み込まれる。
【００４７】
実行部３２１、実行部３２４は、通信処理を実行する機能を有する。たとえば、実行部３２１は通信処理３４２を実行し、実行部３２４は通信処理３４１を実行する。なお、通信処理を実行したという情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４８】
通信部３２２、通信部３２５は、第１通信速度で通信処理を行う他装置からの要求に基づいて、基地局１０２との間の第２通信速度と第２処理速度とを他装置へ通信する機能を有する。たとえば、通信部３２２は、通信装置１０１＃１からの要求に基づいて、基地局１０２との間の第２通信速度Ｔ0と通信装置１０１＃０の第２処理速度Ｐ0とを通信装置１０１＃１へ通信する。なお、通信結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４９】
収集部３２３は、第１通信速度に基づいて少なくとも一の他装置から基地局１０２および装置の第２通信速度と他装置に含まれる第２ＣＰＵの第２処理速度とを収集する機能を有する。たとえば、収集部３２３は、通信装置１０１＃１の通信速度Ｔ1と処理速度Ｐ1を収集する。収集結果は、パラメタテーブル３０１に格納される。
【００５０】
図４は、パラメタテーブル３０１の記憶内容の一例を示す説明図である。図４では、通信装置１０１＃０上のパラメタテーブル３０１＃０の記憶内容の一例を示している。パラメタテーブル３０１は、通信装置名、基地局−通信装置間の通信速度Ｂ、通信装置間の通信速度ｔ、基地局−通信装置間の最良通信速度Ｔ、というフィールドを含む。さらに、パラメタテーブル３０１は、ＣＰＵの通信処理における最大処理速度ｍ、ＣＰＵアイドル率ｃ、ＣＰＵの通信処理における処理速度Ｐ、経由装置Ｖ、ホップ数Ｈというフィールドを含む。以下、説明の簡略化のため、通信装置名フィールドを除く各フィールドを、Ｂ、ｔ、Ｔ、ｍ、ｃ、Ｐ、Ｖ、Ｈというように、省略して記述する。
【００５１】
なお、以下の説明で、ｔ以外の変数に接尾記号“０”〜“２”が付与された場合は、通信装置１０１＃０〜通信装置１０１＃２に対応している変数であることを示す。たとえば、Ｂ0は、通信装置１０１＃０の基地局−通信装置間の通信速度であることを示しており、通信装置名フィールドが“通信装置１０１＃０”であるレコードのＢフィールドに格納されている。また、通信装置間の通信速度ｔには、接尾記号として“０１”、“０２”、“１２”が付与されている。これらの接尾記号は、対応する通信装置１０１間の通信速度であることを示している。たとえば、ｔ01は、通信装置１０１＃０と通信装置１０１＃１間の通信速度であり、通信装置名フィールドが“通信装置１０１＃１”であるレコードのｔフィールドに格納されていることを示している。
【００５２】
通信装置名フィールドには、自装置の名称、または自装置からアドホック接続が可能な通信装置の名称が格納される。Ｂフィールドには、基地局１０２から通信装置１０１までの通信速度が格納される。たとえば、通信装置１０１＃０は、基地局１０２との通信速度を計測し１［Ｍｂｐｓ］であった場合、Ｂ0＝１となり、通信装置１０１＃０のＢフィールドに１を格納する。ｔフィールドには、通信装置１０１間の通信速度が格納される。たとえば、通信装置１０１＃０は、通信装置１０１＃１との通信速度を測定し、１０［Ｍｂｐｓ］であった場合、ｔ01＝１０となり、通信装置１０１＃１のｔフィールドに、１０を格納する。
【００５３】
Ｔフィールドには、基地局−通信装置間の複数の通信路のうち、最良な通信路の通信速度が格納される。たとえば、通信装置１０１＃０は、基地局１０２と直接通信する通信路１と、通信装置１０１＃１を経由して基地局１０２と通信する通信路２があった場合を想定する。このとき、通信装置１０１＃０は、通信路１と通信路２の通信速度、または各通信路内の処理速度等に基づいて、最良な通信路の通信速度を設定する。なお、Ｔフィールドの具体的な算出例については、図５にて後述する。
【００５４】
ｍフィールドには、ＣＰＵの通信処理における最大処理速度が格納されている。たとえば、通信装置１０１＃０が１秒間に最大で１０［Ｍビット］の情報を処理可能である場合、ｍ0＝１０となり、通信装置１０１＃０のｍフィールドに、１０が設定される。ｃフィールドには、ＣＰＵのアイドル率が格納されている。たとえば、通信装置１０１＃０が他のソフトウェア等を実行しており、ＣＰＵのアイドル率が５０［％］である場合、ｃ0＝５０となり、通信装置１０１＃０は、通信装置１０１＃０のｃフィールドに５０を格納する。
【００５５】
Ｐフィールドには、ＣＰＵの通信処理における処理速度が格納されている。たとえば、通信装置１０１＃０が現在１秒間に５［Ｍビット］の情報を処理可能である場合、Ｐ0＝５となり、通信装置１０１＃０は、通信装置１０１＃０のＰフィールドに５を格納する。なお、Ｐフィールドの具体的な算出例については、図５にて後述する。
【００５６】
Ｖフィールドには、自装置が基地局１０２と直接通信を行わず、該当の通信装置１０１を経由した通信路にて基地局１０２と通信するか否かを示す値が格納されている。たとえば、通信装置１０１＃０が通信装置１０１＃１を経由した通信路にて基地局１０２と通信を行う場合、通信装置１０１＃０は、通信装置１０１＃１のＶフィールドに、通信装置１０１＃１を経由して通信を行うことを示す１を格納する。また、パラメタテーブル３０１＃０にＶ1＝１となっている場合、通信装置１０１＃１は、基地局１０２と直接通信を行っていてもよいし、通信装置１０１＃０以外の他の装置を経由して基地局１０２と通信を行っていてもよい。通信装置１０１＃１が基地局１０２と直接通信を行うか否かは、パラメタテーブル３０１＃１に記載されている。
【００５７】
Ｈフィールドには、基地局１０２との通信路に、自装置を除いた通信装置１０１が存在する数が格納されている。たとえば、通信装置１０１＃０が通信装置１０１＃１を経由して基地局１０２と通信している場合、Ｈ0＝１となり、通信装置１０１＃０は、通信装置１０１＃０のＨフィールドに１を格納する。
【００５８】
なお、パラメタテーブル３０１＃０のうち、通信装置１０１＃０に関するレコードのうち、ｍについては、通信装置１０１＃０が自装置の仕様、または設定値より取得する。Ｂ、ｃについては、通信装置１０１＃０が計測の結果を設定する。Ｔ、Ｐ、Ｖ、Ｈについては、通信装置１０１＃０が図５に示す算出方法により得た結果を設定する。
【００５９】
また、通信装置１０１＃０の他装置に関するレコードのＴ、Ｐ、Ｈについては、通信装置１０１＃０が、基地局を介さずに自装置に通信可能である他装置に問い合わせ、通信装置１０１＃０が問い合わせ応答処理を行い取得する。ｔについては、通信装置１０１＃０が計測した結果を設定する。Ｖについては、初期値として０が設定されており、通信装置１０１＃０が自装置のＴを算出した結果を用いて設定する。
【００６０】
図５は、パラメタテーブル３０１の算出例を示す説明図である。符号５０１で示す数式は、Ｔ、Ｐを算出する数式を示している。符号５０２で示す説明図は、符号５０１で示す数式を、図４で示すパラメタテーブル３０１にて適用した状態を示している。通信装置１０１＃ｘの最良通信速度Ｔxは、下記（１）式によって算出される。
【００６１】
Ｔx＝Ｍａｘ（Ｂx、Ｍｉｎ（Ｔy、ｔxy）、Ｍｉｎ（Ｔz、ｔxz）、…）  …（１）
【００６２】
なお、接尾記号ｙ、接尾記号ｚは、通信装置１０１＃ｘと基地局１０２を介さずに通信可能な通信装置１０１＃ｙ、通信装置１０１＃ｚを示している。また、通信装置１０１＃ｘの処理速度Ｐは、下記（２）式によって算出される。
【００６３】
Ｐx＝ｍx＊ｃx／１００  …（２）
【００６４】
また、経由装置Ｖフィールドは、（１）式によるＭａｘ関数の引数群を評価値として、最も大きい評価値に対応する装置に１が設定される。以下、Ｍａｘ関数の引数を経由装置評価値と呼称する。具体的には、自装置が通信装置１０１＃ｘである場合、通信装置１０１＃ｘの経由装置評価値は、Ｂxとなる。同様に、通信装置１０１＃ｙの経由装置評価値はＭｉｎ（Ｔy、ｔxy）となり、通信装置１０１＃ｚの経由装置評価値はＭｉｎ（Ｔz、ｔxz）となる。また、自装置が基地局１０２と直接通信する場合は、経由装置が存在しない。したがって、通信装置１０１＃ｘは、（１）式によるＭａｘ関数の引数群において、自装置のＢxが最も大きい値となる場合、Ｖフィールドを変更しなくてよい。
【００６５】
符号５０２で示す説明図では、図４で設定されていた通信装置１０１＃０のＴおよびＰの算出例、通信装置１０１＃０〜通信装置１０１＃２のＶの設定例を示す。通信装置１０１＃０は、（１）式、（２）式よりＴ0、Ｐ0を以下のように算出する。
【００６６】
Ｔ0＝Ｍａｘ（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））
⇔Ｔ0＝Ｍａｘ（１、Ｍｉｎ（１０、５）、Ｍｉｎ（１０、３））
⇔Ｔ0＝Ｍａｘ（１、５、３）
⇔Ｔ0＝５［Ｍｂｐｓ］
【００６７】
Ｐ0＝ｍ0＊ｃ0／１００
⇔Ｐ0＝１０＊５０／１００＝５［Ｍｂｐｓ］
【００６８】
同様に、通信装置１０１＃０は、Ｖ1、Ｖ2を設定する。通信装置１０１＃０の経由装置評価値＝１、通信装置１０１＃１の経由装置評価値＝５、通信装置１０１＃２の経由装置評価値＝３、となるため、通信装置１０１＃０は、経由装置を通信装置１０１＃１に特定する。具体的には、通信装置１０１＃０は、通信装置１０１＃１のＶフィールドに１を格納する。
【００６９】
図６は、最良装置の設定例を示す説明図である。図６では、通信システム１００が、図４で示したパラメタテーブル３０１の状態の場合に、最良装置の設定例を示している。また、最良装置とは、アプリケーションソフトウェア（以下、アプリと称する）６０１において、アプリ６０１に含まれる通信処理６０２を実行する実行対象装置である。最良装置の設定方法は、自装置と経由装置のうち、最良装置を判断する評価値となるＭｉｎ（Ｔ、Ｐ）が最も大きい値となる装置に設定する。以下、最良装置を判断する評価値を最良装置評価値と呼称する。図６の例では、通信装置１０１＃０は、自装置となる通信装置１０１＃０の最良装置評価値を、以下のように算出する。
【００７０】
Ｍｉｎ（Ｔ0、Ｐ0）＝Ｍｉｎ（５、５）＝５
【００７１】
また、通信装置１０１＃０は、経由装置に特定された通信装置１０１＃１の最良装置評価値を、以下のように算出する。
【００７２】
Ｍｉｎ（Ｔ1、Ｐ1）＝Ｍｉｎ（５、４）＝４
【００７３】
以上より、最良装置は、通信装置１０１＃０となる。したがって、パラメタテーブル３０１＃０の状態における通信装置１０１＃０は、アプリの通信処理を自装置にて行い、通信処理によって発生する基地局１０２との通信を、通信装置１０１＃１を経由して行う。
【００７４】
以下、図７〜図１１について、図４、図５で示したパラメタテーブル３０１を用いて、通信システム１００が最良の通信路を選択する様子を説明する。図７〜図１１では、通信装置１０１＃０が、通信処理６０２を含むアプリ６０１を実行する状態を想定する。また、図７〜図１１に示す通信装置１０１は、基地局１０２との通信速度Ｂが１［Ｍｂｐｓ］より大きい場合には、他の装置を経由する通信路を検索せず、自装置と基地局１０２の通信を行う。
【００７５】
図７は、通信装置１０１＃０の速度低下が起こっていない状態を示す説明図である。図７の状態は、基地局１０２と通信装置１０１＃０〜通信装置１０１＃２の通信速度Ｂが、それぞれ、Ｂ0＝５［Ｍｂｐｓ］、Ｂ1＝３［Ｍｂｐｓ］、Ｂ2＝５［Ｍｂｐｓ］となる。また、通信装置１０１間の通信速度ｔが、それぞれ、ｔ01＝ｔ02＝ｔ12＝１０［Ｍｂｐｓ］となる。
【００７６】
また、パラメタテーブル３０１＃０の自装置に関する値として、Ｔ0＝５［Ｍｂｐｓ］、ｍ0＝１０［Ｍｂｐｓ］、ｃ0＝５０［％］、Ｐ0＝５［Ｍｂｐｓ］、Ｂ0＝５［Ｍｂｐｓ］が設定されている。また、Ｈフィールドに関しては、通信装置１０１＃０で基地局１０２と直接通信を行っているため、Ｈ0＝０となる。なお、ｔ01とｔ02に関しては、図７の状態では基地局１０２との通信速度が充分に確保されているため、パラメタテーブル３０１＃０には格納されていなくてよい。
【００７７】
同様に、パラメタテーブル３０１＃１には、Ｔ1＝３［Ｍｂｐｓ］、ｍ1＝１０［Ｍｂｐｓ］、ｃ1＝５０［％］、Ｐ1＝５［Ｍｂｐｓ］、Ｂ1＝３［Ｍｂｐｓ］、Ｈ1＝０が設定されている。また、パラメタテーブル３０１＃２には、Ｔ2＝５［Ｍｂｐｓ］、ｍ2＝１０［Ｍｂｐｓ］、ｃ2＝４０［％］、Ｐ2＝４［Ｍｂｐｓ］、Ｂ2＝５［Ｍｂｐｓ］、Ｈ2＝０が格納されている。
【００７８】
図７の状態では、Ｂ0＝５［Ｍｂｐｓ］であり、基地局１０２との通信速度が充分であるため、通信装置１０１＃０が最良装置となり、通信装置１０１にて、通信処理６０２を行う。なお、基地局１０２との通信速度が充分である場合、通信装置１０１＃０は、他の装置のＴ、Ｐ、Ｈの問い合わせを行わない。
【００７９】
図８は、通信装置１０１＃０の通信速度低下時における問い合わせ動作を示す説明図である。図８で示す通信システム１００は、図７の状態から、Ｂ0が低下し、１［Ｍｂｐｓ］になった状態を示している。通信速度が低下したため、通信装置１０１＃０は、周囲の通信装置１０１に対して、Ｔ、Ｐ、Ｈを問い合わせる。
【００８０】
具体的には、通信装置１０１＃０は、通信装置１０１＃１と通信装置１０１＃２に問い合わせを行う。問い合わせの結果、通信装置１０１＃１は、Ｔ1、Ｐ1、Ｈ1を通信装置１０１＃０に通知する。同様に、通信装置１０１＃２は、Ｔ2、Ｐ2、Ｈ2を通信装置１０１＃０に通知する。
【００８１】
通知を受けた通信装置１０１＃０は、Ｔ1、Ｐ1、Ｔ2、Ｐ2を基に、Ｔ0、Ｐ0、Ｖ0〜Ｖ2を算出し、パラメタテーブル３０１＃０に格納する。具体的な算出結果として、通信装置１０１＃０は、（１）式にしたがってＴ0を得る。
【００８２】
Ｔ0＝Ｍａｘ（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））
⇔Ｔ0＝Ｍａｘ（１、Ｍｉｎ（３、１０）、Ｍｉｎ（５、１０））
⇔Ｔ0＝Ｍａｘ（１、３、５）＝５［Ｍｂｐｓ］
【００８３】
同様に、通信装置１０１＃０は、（２）式にしたがってＰ0を得る。
【００８４】
Ｐ0＝ｍ0＊ｃ0／１００
⇔Ｐ0＝１０＊５０／１００＝５［Ｍｂｐｓ］
【００８５】
また、通信装置１０１＃０は、経由装置評価値群（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））＝（１、３、５）のうち、最も大きい評価値となる通信装置１０１＃２を経由装置に特定する。結果、通信装置１０１＃０は、パラメタテーブル３０１のＶに関して、Ｖ2＝１、Ｖ0＝Ｖ1＝０を格納する。
【００８６】
図９は、通信装置１０１＃０の通信速度低下時における経路選択方法を示す説明図である。図９で示す通信システム１００は、Ｂ0が低下し、通信装置１０１＃０が、Ｔ1、Ｐ1、Ｔ2、Ｐ2に基づいて、Ｔ0、Ｐ0、Ｖ0〜Ｖ2を算出した状態である。
【００８７】
算出後、通信装置１０１＃０は、最良装置を設定する。図９における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ2、Ｐ2））＝（Ｍｉｎ（５、５）、Ｍｉｎ（５、４））＝（５、４）となる。以上より、自装置と経由装置のうち、最も大きい最良装置評価値は通信装置１０１＃０となるため、通信装置１０１＃０は、最良装置を通信装置１０１＃０に設定する。
【００８８】
これにより、通信システム１００は、通信処理６０２を通信装置１０１＃０で行う。また、通信装置１０１＃０からみた経由装置がＶ2＝１より通信装置１０１＃２に特定されているため、選択される通信路は、通信装置１０１＃０から、通信装置１０１＃２を経由して基地局１０２までの通信路となる。これにより、通信システム１００は、通信装置１０１＃０と基地局１０２が直接通信する通信路より、高速な通信路を用いて通信処理６０２を行うことができる。
【００８９】
図１０は、通信装置１０１＃０の処理速度低下時における問い合わせ動作を示す説明図である。図１０で示す通信システム１００は、図９で示した通信システム１００の状態から、ＣＰＵアイドル率ｃが５０［％］から１０［％］まで低下した場合を示している。このとき、通信装置１０１＃０は、再度、最良装置を設定する。また、通信速度に関しては図９の状態から変化していないため、Ｔ0＝５［Ｍｂｐｓ］となり、経由装置は通信装置１０１＃２に特定されたままである。
【００９０】
初めに、ｃ0が変化したため、通信装置１０１は、（２）式より、新たなＰ0を得る。
【００９１】
Ｐ0＝ｍ0＊ｃ0／１００
⇔Ｐ0＝１０＊１０／１００＝１［Ｍｂｐｓ］
【００９２】
したがって、図１０における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ2、Ｐ2））＝（Ｍｉｎ（５、１）、Ｍｉｎ（５、４））となる。以上より、自装置と経由装置のうち最も大きい最良装置評価値は通信装置１０１＃２となるため、最良装置は通信装置１０１＃２に設定される。最良装置にて通信処理６０２を行うため、通信装置１０１＃０は、通信装置１０１＃２に通信処理６０２をディスパッチする。
【００９３】
これにより、通信システム１００は、ＣＰＵの処理能力に空きが少ない状態である通信装置１０１＃０で通信処理６０２を行わず、ＣＰＵの処理能力に空きのある通信装置１０１＃２で通信処理６０２を行うことで、負荷を分散することができる。また、ＣＰＵの処理能力に空きがなくなった場合、実行中の処理が低速化してしまう可能性がある。図１０で示す通信システム１００は、処理能力に空きのある通信装置１０１に通信処理６０２をディスパッチすることで、通信処理６０２の処理速度の低下を防ぐことができる。
【００９４】
図１１は、通信装置１０１間の通信速度低下時における経路選択方法を示す説明図である。図１１で示す通信システム１００は、図１０で示した通信システム１００の状態から、通信装置１０１＃２が通信装置１０１＃０および通信装置１０１＃１から離れた結果、ｔ02およびｔ12が１０［Ｍｂｐｓ］から１［Ｍｂｐｓ］まで低下した状態を示している。
【００９５】
ｔ02とｔ12が変化したため、通信装置１０１＃０は、（１）式により、Ｔ0を再計算する。
【００９６】
Ｔ0＝Ｍａｘ（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））
⇔Ｔ0＝Ｍａｘ（１、Ｍｉｎ（３、１０）、Ｍｉｎ（５、１））
⇔Ｔ0＝Ｍａｘ（１、３、１）＝３［Ｍｂｐｓ］
【００９７】
なお、Ｐ0の値は、ｃ0が変化していないので、１［Ｍｂｐｓ］のままである。続けて、通信装置１０１＃０は、（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））＝（１、３、１）のうち、最も大きい値である３に対応する通信装置１０１＃１を経由装置に特定する。結果、通信装置１０１＃０は、パラメタテーブル３０１のＶに関して、Ｖ1＝１、Ｖ0＝Ｖ2＝０を格納する。
【００９８】
続けて、通信装置１０１＃０は、自装置と経由装置に対して最良装置評価値を算出し、最良装置を設定する。図１１における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ1、Ｐ1））＝（Ｍｉｎ（３、１）、Ｍｉｎ（３、５））となる。
【００９９】
以上より、自装置と経由装置のうち最も大きい最良装置評価値は通信装置１０１＃１となるため、最良装置は通信装置１０１＃１に設定される。最良装置が変更されたため、通信装置１０１＃２にディスパッチされていた通信処理６０２を回収し、通信装置１０１＃１に通信処理６０２をディスパッチする。このように、通信システム１００は、通信路が変更した場合に、最速な通信路を再度検索し、最速な通信路内の最良装置で通信処理６０２を実行するため、通信処理６０２を効率よく実行することができる。
【０１００】
図１２は、経由装置評価値が同値である通信装置が複数存在する場合の経路選択方法を示す説明図である。図１２で示す通信システム１００は、通信装置１０１＃２が既に通信装置１０１＃１を経由してアプリ１２０１を実行している。この状態で、通信装置１０１＃０の通信速度Ｂが低下した状態を想定している。
【０１０１】
また、基地局１０２と通信装置１０１＃０〜通信装置１０１＃２の通信速度Ｂが、それぞれ、Ｂ0＝１［Ｍｂｐｓ］、Ｂ1＝５［Ｍｂｐｓ］、Ｂ2＝１［Ｍｂｐｓ］となる。また、通信装置１０１間の通信速度ｔが、それぞれ、ｔ01＝ｔ02＝ｔ12＝１０［Ｍｂｐｓ］となる。パラメタテーブル３０１＃０の、自装置に関する値として、ｍ0＝１０［Ｍｂｐｓ］、ｃ0＝４０［％］、Ｂ0＝１［Ｍｂｐｓ］が設定されている。また、Ｐ0については、（２）式より、４［Ｍｂｐｓ］が設定されている。
【０１０２】
通信速度Ｂが低下しているため、通信装置１０１＃０は、通信装置１０１＃１と通信装置１０１＃２に問い合わせ、問い合わせ応答処理を行い、経由装置評価値を算出する。問い合わせの結果、通信装置１０１＃０が受け取る値は、通信装置１０１＃１からＴ1＝５［Ｍｂｐｓ］、Ｐ1＝５［Ｍｂｐｓ］、Ｈ1＝０であり、通信装置１０１＃２からＴ2＝５［Ｍｂｐｓ］、Ｐ2＝５［Ｍｂｐｓ］、Ｈ2＝１である。これより、通信装置１０１＃０は、（１）式より、Ｔ0を以下のように算出する。
【０１０３】
Ｔ0＝Ｍａｘ（１、Ｍｉｎ（５、１０）、Ｍｉｎ（５、１０））＝５
【０１０４】
また、通信装置１０１＃０の経由装置評価値は、Ｂ0＝１となる。同様に、通信装置１０１＃１の経由装置評価値は、Ｍｉｎ（Ｔ1、ｔ01）＝Ｍｉｎ（５、１０）＝５となり、通信装置１０１＃２の経由装置評価値は、Ｍｉｎ（Ｔ2、ｔ02）＝Ｍｉｎ（５、１０）＝５となる。
【０１０５】
通信装置１０１＃１と通信装置１０１＃２の経由装置評価値が同値となるため、通信装置１０１＃０は、ホップ数Ｈが小さい方を経由装置に特定する。図１２の場合、Ｈ1＝０、Ｈ2＝１となるため、通信装置１０１＃０は、経由装置を通信装置１０１＃１に設定する。なお、通信装置１０１＃１を経由装置に特定したため、通信装置１０１＃０は、Ｈ0をＨ1＋１＝１に設定する。
【０１０６】
経由装置の特定後、通信装置１０１＃０は、最良装置を設定する。図１２における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ1、Ｐ1））＝（Ｍｉｎ（５、４）、Ｍｉｎ（５、５））＝（４、５）となる。以上より、自装置と経由装置のうち最も大きい最良装置評価値は通信装置１０１＃１となるため、通信装置１０１＃０は、最良装置を通信装置１０１＃１に設定する。このように、通信システム１００は、ホップ数を参照することで、通信路が最も短い経路を選択することができる。
【０１０７】
図１３は、入れ子情報テーブル３０２が生成される場合の通信システム１００の状態を示す説明図である。図１３で示す通信システム１００は、通信装置１０１＃１が既に通信装置１０１＃２を経由して通信を行っている。この状態で、通信装置１０１＃０の通信速度Ｂが低下した状態を想定している。具体的な通信速度として、基地局１０２と通信装置１０１＃０〜通信装置１０１＃２の通信速度Ｂが、それぞれ、Ｂ0＝Ｂ1＝１［Ｍｂｐｓ］、Ｂ2＝５［Ｍｂｐｓ］となる。また、通信装置１０１間の通信速度ｔが、それぞれ、ｔ01＝ｔ12＝１０［Ｍｂｐｓ］となり、ｔ02＝１［Ｍｂｐｓ］となる。
【０１０８】
パラメタテーブル３０１＃０の、自装置に関する値として、Ｔ0＝５［Ｍｂｐｓ］、ｍ0＝１０［Ｍｂｐｓ］、ｃ0＝３０［％］、Ｐ0＝３［Ｍｂｐｓ］、Ｂ0＝１［Ｍｂｐｓ］が設定されている。また、通信装置１０１＃０は、通信装置１０１＃１と通信装置１０１＃２に問い合わせ、Ｔ0＝５［Ｍｂｐｓ］を算出する。
【０１０９】
また、通信装置１０１＃０は、経由装置評価値群（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））＝（１、５、１）のうち、最も大きい評価値となる通信装置１０１＃１を経由装置に特定する。なお、通信装置１０１＃１を経由装置に特定したため、通信装置１０１＃０は、Ｈ0をＨ1＋１＝２に設定する。
【０１１０】
同様に、図１３における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ1、Ｐ1））＝（Ｍｉｎ（５、３）、Ｍｉｎ（５、４））＝（３、４）となる。以上より、自装置と経由装置のうち、最も大きい最良装置評価値は通信装置１０１＃１となるため、通信装置１０１＃０は、最良装置を通信装置１０１＃１に設定する。これにより、通信装置１０１＃０は通信処理６０２を通信装置１０１＃１にディスパッチする。
【０１１１】
通信処理６０２のディスパッチを受けた通信装置１０１＃１は、最良装置の設定を行う。図１３における、通信装置１０１＃１での最良装置評価値群は、（Ｍｉｎ（Ｔ1、Ｐ1）、Ｍｉｎ（Ｔ2、Ｐ2））＝（Ｍｉｎ（５、４）、Ｍｉｎ（５、５））＝（４、５）となる。以上より、最も大きい最良装置評価値は通信装置１０１＃２となるため、通信装置１０１＃０は、最良装置を通信装置１０１＃２設定する。これにより、通信装置１０１＃１は通信処理６０２を通信装置１０１＃２にディスパッチする。
【０１１２】
これにより、通信装置１０１＃１は、ディスパッチされた通信処理６０２をさらに他の装置にディスパッチすることになったため、入れ子情報テーブル３０２＃１に入れ子情報を格納する。入れ子情報テーブル３０２＃１の具体例は、図１４にて後述する。
【０１１３】
図１４は、入れ子情報テーブル３０２の記憶内容の一例を示す説明図である。図１４では、図１３における通信システム１００にて生成されたパラメタテーブル３０１の構造と記憶内容の一例を示している。
【０１１４】
入れ子情報テーブル３０２は、処理識別子、ディスパッチ元識別子、ディスパッチ先識別子という３つのフィールドを含む。処理識別子フィールドには、ディスパッチされる通信処理６０２を一意に特定できる識別情報が格納される。通信処理６０２を一意に特定できる識別情報としては、通信処理６０２の関数名や関数の先頭アドレス、通信処理６０２に採番された番号等である。ディスパッチ元識別子フィールドには、ディスパッチ元の通信装置１０１が一意に特定できる識別情報が格納される。
【０１１５】
ディスパッチ先識別子フィールドには、ディスパッチ先の通信装置１０１が一意に特定できる識別情報が格納される。なお、通信装置１０１が一意に特定できる識別情報としては、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスや、ＳＩＭ（Ｓｕｂｓｃｒｉｂｅｒ  Ｉｄｅｎｔｉｔｙ  Ｍｏｄｕｌｅ）  ＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）等がある。
【０１１６】
たとえば、図１４で示す通信システム１００は、アプリ６０１の識別情報が“１１１１”であることを想定する。さらに、通信装置１０１の識別子としてＭＡＣアドレスを採用し、通信装置１０１＃０のＭＡＣアドレスが“００−００−００−００−００−００”である。同様に、通信装置１０１＃１のＭＡＣアドレスが“００−００−００−００−００−０１”であり、通信装置１０１＃２のＭＡＣアドレスが“００−００−００−００−００−０２”であることを想定する。
【０１１７】
このとき、入れ子情報テーブル３０２＃１のレコードには、処理識別子フィールドに“１１１１”が格納される。また、入れ子情報テーブル３０２＃１のレコードに、ディスパッチ元識別子フィールドに“００−００−００−００−００−００”、ディスパッチ先識別子フィールドに“００−００−００−００−００−０２”が格納される。
【０１１８】
図１５は、通信システム１００の処理遷移を示す説明図である。図１５では、図１６〜図２３で示す処理群の遷移図を示している。また、図１５〜図２３で示す通信システム１００では、図６で示した設定と等しく、通信装置１０１＃０が通信処理６０２を含むアプリ６０１を実行する状態を想定する。
【０１１９】
通信装置１０１＃０は、周期的にパラメタ更新処理を実行する。パラメタ更新処理内にて、通信装置１０１＃０は、パラメタの問い合わせを通信装置１０１＃１と通信装置１０１＃２に行う。通信装置１０１＃１と通信装置１０１＃２は、パラメタの問い合わせに対応する問い合わせ応答処理を実行する。
【０１２０】
また、通信装置１０１＃０は、アプリ６０１からの通信要求により通信処理実行処理を実行する。通信処理実行処理内にて、通信装置１０１＃０は、通信処理のディスパッチ受付要求を通信装置１０１＃１と通信装置１０１＃２のうち、最良装置となった装置に行う。たとえば、通信装置１０１＃１が通信装置１０１＃０における最良装置となった場合、要求を受け付けた通信装置１０１＃１は、ディスパッチ応答処理を行う。通信装置１０１＃１にてディスパッチ応答処理が終了した場合、通信装置１０１＃１は、ディスパッチ元となる通信装置１０１＃０に実行結果を通知する。実行結果の受付により通信装置１０１＃０は、通信処理実行結果応答処理を実行する。
【０１２１】
また、ディスパッチ応答処理にて、通信装置１０１＃１における最良装置が通信装置１０１＃２となった場合、通信装置１０１＃１は、通信処理のディスパッチ受付要求を通信装置１０１＃２に行う。要求を受け付けた通信装置１０１＃２は、ディスパッチ応答処理を行う。通信装置１０１＃２にてディスパッチ応答処理が終了した場合、通信装置１０１＃２は、ディスパッチ元となる通信装置１０１＃１に実行結果を通知する。実行結果の受付により通信装置１０１＃１は、ディスパッチ元となる通信装置１０１＃０に実行結果を通知する。
【０１２２】
また、パラメタ更新処理時にアプリ６０１から通信要求がある場合、通信装置１０１＃０は、通信処理再実行処理を実行する。通信装置１０１＃０は、通信処理６０２のディスパッチ受付要求を通信装置１０１＃１と通信装置１０１＃２のうち、最良装置となった装置に行う。また、最良装置が前回から変更された場合、変更前の最良装置に対して、通信処理６０２の回収要求を通知する。たとえば、変更前の最良装置が通信装置１０１＃１である場合、通信処理６０２の回収要求を受け付けた通信装置１０１＃１は、通信処理回収応答処理を実行する。
【０１２３】
また、通信処理回収応答処理にて、通信装置１０１＃１における最良装置が通信装置１０１＃２である場合、通信装置１０１＃１は、通信装置１０１＃２に通信処理６０２の回収要求を通知する。回収要求を受け付けた通信装置１０１＃２は、通信処理回収応答処理を実行する。
【０１２４】
図１６は、パラメタ更新処理および問い合わせ応答処理を示すフローチャートである。ステップＳ１６０１〜ステップＳ１６０４、ステップＳ１６０６〜ステップＳ１６１２がパラメタ更新処理となり、ステップＳ１６０５が問い合わせ応答処理となる。
【０１２５】
通信装置１０１＃０は、パラメタテーブル３０１＃０をクリアする（ステップＳ１６０１）。クリア後、通信装置１０１＃０は、通信速度Ｂを測定し、パラメタテーブル３０１＃０に登録する。登録後、通信装置１０１＃０は、通信速度Ｂが閾値以下か否かを判断する（ステップＳ１６０３）。通信速度Ｂが閾値以下である場合（ステップＳ１６０３：Ｙｅｓ）、通信装置１０１＃０は、周囲の通信装置に最良通信速度Ｔと処理速度Ｐとホップ数Ｈを問い合わせる（ステップＳ１６０４）。問い合わせを受けた通信装置１０１＃１と通信装置１０１＃２は、自装置の最良通信速度Ｔと処理速度Ｐとホップ数Ｈを、問い合わせ元装置に送信する（ステップＳ１６０５）。送信後、通信装置１０１＃１と通信装置１０１＃２は、問い合わせ応答処理を終了する。
【０１２６】
通信装置１０１＃０は、受け付けた最良通信速度Ｔと処理速度Ｐとホップ数Ｈをパラメタテーブル３０１＃０に登録する（ステップＳ１６０６）。登録後、通信装置１０１＃０は、応答があった通信装置１０１との通信速度ｔを測定し、パラメタテーブル３０１＃０に登録する（ステップＳ１６０７）。
【０１２７】
登録後、または通信速度Ｂが閾値より大きい場合（ステップＳ１６０３：Ｎｏ）、通信装置１０１＃０は、自装置の最良通信速度Ｔと処理速度Ｐを算出する（ステップＳ１６０８）。算出後、通信装置１０１＃０は、経由装置特定処理を実行する（ステップＳ１６０９）。経由装置特定処理の詳細については、図１７にて後述する。実行後、通信装置１０１＃０は、算出された最良通信速度Ｔと処理速度Ｐをパラメタテーブル３０１＃０に登録する（ステップＳ１６１０）。登録後、通信装置１０１＃０は、アプリ６０１からの通信要求があったか否かを判断する（ステップＳ１６１１）。
【０１２８】
通信要求があった場合（ステップＳ１６１１：Ｙｅｓ）、通信装置１０１＃０は、通信処理再実行処理を実行する（ステップＳ１６１２）。通信処理再実行処理を実行後、または通信要求がない場合（ステップＳ１６１１：Ｎｏ）、通信装置１０１＃０は、パラメタ更新処理を終了する。
【０１２９】
図１７は、経由装置特定処理を示すフローチャートである。経由装置特定処理は、通信装置１０１＃０〜通信装置１０１＃２にて実行されるが、図１７の説明では、説明の簡略化のため、通信装置１０１＃０を実行主体として説明を行う。
【０１３０】
通信装置１０１＃０は、自装置のパラメタテーブル３０１から、経由装置評価値となる自装置のＢと他装置のＭｉｎ（Ｔ、ｔ）のうち、最も値が大きいレコードを選択する（ステップＳ１７０１）。なお、最も値が大きいレコードが複数存在する場合、通信装置１０１＃０は、最も値が大きいレコード全てを選択する。
【０１３１】
選択後、通信装置１０１＃０は、選択されたレコードが１つか否かを判断する（ステップＳ１７０２）。選択されたレコードが２つ以上である場合（ステップＳ１７０２：Ｎｏ）、通信装置１０１＃０は、選択されたレコードのうち、自装置のレコードが含まれるか否かを判断する（ステップＳ１７０３）。自装置のレコードが含まれる場合（ステップＳ１７０３：Ｙｅｓ）、通信装置１０１＃０は、自装置のレコードを選択する（ステップＳ１７０４）。自装置のレコードが含まれていない場合（ステップＳ１７０３：Ｎｏ）、通信装置１０１＃０は、選択されたレコードのうち、最小のホップ数Ｈとなるレコードを選択する（ステップＳ１７０５）。
【０１３２】
ステップＳ１７０４、ステップＳ１７０５の終了後、または選択されたレコードが１つである場合（ステップＳ１７０２：Ｙｅｓ）、通信装置１０１＃０は、選択されたレコードが自装置のレコードか否かを判断する（ステップＳ１７０６）。選択されたレコードが自装置のレコードである場合（ステップＳ１７０６：Ｙｅｓ）、通信装置１０１＃０は、パラメタテーブル３０１の自装置のホップ数Ｈを０に設定し（ステップＳ１７０７）、経由装置特定処理を終了する。
【０１３３】
選択されたレコードが自装置のレコードでない場合（ステップＳ１７０６：Ｎｏ）、通信装置１０１＃０は、選択されたレコードに対応する装置を経由装置に特定し（ステップＳ１７０８）、経由装置のＶフィールドを１に設定する（ステップＳ１７０９）。設定後、通信装置１０１＃０は、自装置のホップ数Ｈを経由装置のホップ数Ｈ＋１に設定し（ステップＳ１７１０）、経由装置特定処理を終了する。
【０１３４】
図１８は、通信処理実行処理を示すフローチャートである。通信装置１０１＃０は、アプリ６０１から、通信要求を受け付ける（ステップＳ１８０１）。受け付け後、通信装置１０１＃０は、最良装置設定処理を実行する（ステップＳ１８０２）。最良装置設定処理の詳細は、図１９にて後述する。最良装置設定処理の実行後、通信装置１０１＃０は、自装置が最良装置に設定されたか否かを判断する（ステップＳ１８０３）。自装置が最良装置に設定された場合（ステップＳ１８０３：Ｙｅｓ）、通信装置１０１＃０は、自装置にて通信処理６０２を実行し（ステップＳ１８０４）、通信処理実行処理を終了する。
【０１３５】
自装置が最良装置に設定されていない場合（ステップＳ１８０３：Ｎｏ）、通信装置１０１＃０は、最良装置に設定された通信装置１０１＃ｘに、通信処理６０２と通信処理６０２のディスパッチ応答要求を通知する（ステップＳ１８０５）。なお、通信装置１０１＃ｘとなる通信装置１０１は、通信装置１０１＃１または通信装置１０１＃２のいずれか一方となる。通知後、通信装置１０１＃０は、通信処理実行処理を終了する。通知を受け付けた通信装置１０１＃ｘは、通信処理ディスパッチ応答処理を実行する（ステップＳ１８０６）。
【０１３６】
図１９は、最良装置設定処理を示すフローチャートである。最良装置設定処理は、通信装置１０１＃０〜通信装置１０１＃２にて実行されるが、図１９の説明では、説明の簡略化のため、通信装置１０１＃０を実行主体として説明を行う。また、最良装置設定処理では、自装置のパラメタテーブル３０１に対して処理を行う。
【０１３７】
通信装置１０１＃０は、自装置と経由装置のレコードのうち、最良装置評価値となるＭｉｎ（Ｔ、Ｐ）が最も大きいレコードを選択する（ステップＳ１９０１）。選択後、通信装置１０１＃０は、選択されたレコードが１つか否かを判断する（ステップＳ１９０２）。選択されたレコードが１つである場合（ステップＳ１９０２：Ｙｅｓ）、通信装置１０１＃０は、選択されたレコードの通信装置を最良装置に設定し（ステップＳ１９０３）、最良装置設定処理を終了する。
【０１３８】
選択されたレコードが２つ以上の場合（ステップＳ１９０２：Ｎｏ）、通信装置１０１＃０は、選択されたレコードのうち、自装置のレコードが含まれるか否かを判断する（ステップＳ１９０４）。自装置のレコードが含まれる場合（ステップＳ１９０４：Ｙｅｓ）、通信装置１０１＃０は、自装置を最良装置に設定し（ステップＳ１９０５）、最良装置設定処理を終了する。自装置のレコードが含まれていない場合（ステップＳ１９０４：Ｎｏ）、通信装置１０１＃０は、選択されたレコードのうち、最小のホップ数Ｈとなる装置を最良装置に設定し（ステップＳ１９０６）、最良装置設定処理を終了する。
【０１３９】
図２０は、通信処理ディスパッチ応答処理を示すフローチャートである。通信処理ディスパッチ応答処理は、通信装置１０１＃１、通信装置１０１＃２にて実行されるが、図２０の説明では、説明の簡略化のため、通信装置１０１＃１を実行主体として説明を行う。
【０１４０】
通信装置１０１＃１は、他装置から、通信処理６０２と通信処理６０２のディスパッチ応答要求を受け付ける（ステップＳ２００１）。受け付け後、通信装置１０１＃１は、自装置が最良装置に設定されているか否かを判断する（ステップＳ２００２）。なお、最良装置の設定がされていない場合、通信装置１０１＃１は、最良装置設定処理を実行する。
【０１４１】
自装置が最良装置に設定されている場合（ステップＳ２００２：Ｙｅｓ）、通信装置１０１＃１は、自装置のＣＰＵ群のうち他のＣＰＵからアイソレートしたＣＰＵにて通信処理６０２を実行する（ステップＳ２００３）。ここで、アイソレートとは、メモリ空間等を分断して動作させる処理である。これにより、通信装置１０１＃１のユーザによって操作されるアプリ群は、ディスパッチされた通信処理６０２にアクセスできず、セキュリティを保つことが可能である。
【０１４２】
通信処理６０２を実行後、通信装置１０１＃１は、実行要求を通知した他装置とアドホック通信可能か否かを判断する（ステップＳ２００４）。アドホック通信可能である場合（ステップＳ２００４：Ｙｅｓ）、通信装置１０１＃１は、実行要求を通知した通信装置１０１＃ｙに、受け付けた通信処理６０２の処理識別子と実行結果を通知する（ステップＳ２００５）。なお、通信装置１０１＃ｙとなる通信装置１０１は、実行主体が通信装置１０１＃１の場合、アプリ６０１を実行する通信装置１０１＃０か、または通信装置１０１＃０の最良装置となった通信装置１０１＃２のいずれかである。
【０１４３】
また、アドホック通信可能でない場合（ステップＳ２００４：Ｎｏ）、通信装置１０１＃１は、基地局１０２を経由して、実行要求を通知した通信装置１０１＃ｙに、受け付けた通信処理６０２の処理識別子と実行結果を通知する（ステップＳ２００６）。処理識別子と実行結果の通知を、通信装置１０１＃１は、アイソレートしていたＣＰＵを解除し（ステップＳ２００７）、通信処理ディスパッチ応答処理を終了する。また、通知を受けた通信装置１０１＃ｙは、通信処理実行結果応答処理を実行する（ステップＳ２００８）。
【０１４４】
自装置が最良装置に設定されていない場合（ステップＳ２００２：Ｎｏ）、通信装置１０１＃１は、処理識別子＝受け付けた処理識別子、ディスパッチ元＝実行要求を通知した他装置、ディスパッチ先＝最良装置として、入れ子情報を生成する（ステップＳ２００９）。生成後、通信装置１０１＃１は、生成された入れ子情報を入れ子情報テーブル３０２に登録する（ステップＳ２０１０）。登録後、通信装置１０１＃１は、最良装置となる通信装置１０１＃ｘに、受け付けた通信処理６０２と通信処理６０２のディスパッチ応答要求を通知し（ステップＳ２０１１）、通信処理ディスパッチ応答処理を終了する。また、通知を受けた通信装置１０１＃ｘは、通信処理ディスパッチ応答処理を実行する（ステップＳ２０１２）。
【０１４５】
図２１は、通信処理実行結果応答処理を示すフローチャートである。図２１では、通信処理実行結果応答処理を実行する実行主体を図２０で示した通信装置１０１＃ｙであると想定して説明を行う。
【０１４６】
通信装置１０１＃ｙは、他装置から、通信処理６０２の処理識別子と実行結果を受け付ける（ステップＳ２１０１）。受け付け後、通信装置１０１＃ｙは、入れ子情報テーブル３０２のうち、処理識別子フィールドの値が受け付けた処理識別子と一致する入れ子情報が存在するか否かを判断する（ステップＳ２１０２）。存在する場合（ステップＳ２１０２：Ｙｅｓ）、通信装置１０１＃ｙは、一致した入れ子情報のディスパッチ元と、アドホック通信可能か否かを判断する（ステップＳ２１０３）。アドホック通信可能である場合（ステップＳ２１０３：Ｙｅｓ）、通信装置１０１＃ｙは、ディスパッチ元フィールドに登録されている通信装置１０１＃ｚに、受け付けた処理識別子と実行結果を通知する（ステップＳ２１０４）。通知後、通信装置１０１＃ｙは、通信処理実行結果応答処理を終了する。
【０１４７】
アドホック通信可能でない場合（ステップＳ２１０３：Ｎｏ）、通信装置１０１＃ｙは、基地局１０２を経由して、ディスパッチ元フィールドに登録されている通信装置１０１＃ｚに、受け付けた処理識別子と実行結果を通知する（ステップＳ２１０５）。通知後、通信装置１０１＃ｙは、通信処理実行結果応答処理を終了する。また、通知を受けた通信装置１０１＃ｚは、通信処理実行結果応答処理を実行する（ステップＳ２１０６）。
【０１４８】
存在しない場合（ステップＳ２１０２：Ｎｏ）、実行結果は自装置のアプリに対応する実行結果であるため、通信装置１０１＃ｙは、実行結果を受け付け（ステップＳ２１０７）、通信処理実行結果応答処理を終了する。
【０１４９】
図２２は、通信処理再実行処理を示すフローチャートである。通信装置１０１＃０は、最良装置設定処理を実行する（ステップＳ２２０１）。設定後、通信装置１０１＃０は、最良装置が変更されたか否かを判断する（ステップＳ２２０２）。最良装置が変更されていない場合（ステップＳ２２０２：Ｎｏ）、通信装置１０１＃０は、通信処理再実行処理を終了する。
【０１５０】
最良装置が変更されている場合（ステップＳ２２０２：Ｙｅｓ）、通信装置１０１＃０は、自装置にて通信処理６０２を実行しているか否かを判断する（ステップＳ２２０３）。自装置にて通信処理６０２を実行していない場合（ステップＳ２２０３：Ｎｏ）、通信装置１０１＃０は、ディスパッチ先の通信装置１０１＃ｙに、ディスパッチした通信処理６０２の処理識別子と通信処理６０２の回収要求を通知する（ステップＳ２２０４）。通知を受けた通信装置１０１＃ｙは、通信処理回収応答処理を実行する（ステップＳ２２０５）。
【０１５１】
通知を行ってから一定時間経過後、通信装置１０１＃０は、通信処理６０２の回収に成功したか否かを判断する（ステップＳ２２０６）。自装置にて通信処理６０２を実行している場合（ステップＳ２２０３：Ｙｅｓ）、または回収に成功した場合（ステップＳ２２０６：Ｙｅｓ）、通信装置１０１＃０は、自装置が最良装置に設定されたか否かを判断する（ステップＳ２２０７）。自装置が最良装置に設定されていない場合（ステップＳ２２０７：Ｎｏ）、通信装置１０１＃０は、最良装置となる通信装置１０１＃ｘに通信処理６０２の処理識別子と通信処理６０２のディスパッチ応答要求を通知する（ステップＳ２２０８）。通知後、通信装置１０１＃０は、通信処理再実行処理を終了する。通知を受けた通信装置１０１＃ｘは、通信処理ディスパッチ応答処理を実行する（ステップＳ２２０９）。
【０１５２】
自装置が最良装置に設定されている場合（ステップＳ２２０７：Ｙｅｓ）、通信装置１０１＃０は、自装置にて通信処理６０２を実行し（ステップＳ２２１０）、通信処理再実行処理を終了する。回収に失敗した場合（ステップＳ２２０６：Ｎｏ）、通信装置１０１＃０は、基地局１０２を経由して、ディスパッチ先の通信装置１０１＃ｙに、ディスパッチした通信処理６０２の処理識別子と通信処理６０２の回収要求を通知する（ステップＳ２２１１）。なお、回収に失敗する場合としては、たとえば、回収失敗を受け付けた場合、一定時間経過しても応答を受け付けなかった場合等である。通知を行ってから一定時間経過後、通信装置１０１＃０は、自装置が最良装置に設定されたか否かを判断する（ステップＳ２２０７）。
【０１５３】
図２３は、通信処理回収応答処理を示すフローチャートである。図２３では、通信処理回収応答処理を実行する実行主体を図２２で示した通信装置１０１＃ｙであると想定して説明を行う。
【０１５４】
通信装置１０１＃ｙは、他装置から、処理識別子と通信処理６０２の回収要求を受け付ける（ステップＳ２３０１）。受け付け後、通信装置１０１＃ｙは、入れ子情報テーブル３０２に、処理識別子フィールドの値が受け付けた処理識別子と一致する入れ子情報が存在するか否かを判断する（ステップＳ２３０２）。存在する場合（ステップＳ２３０２：Ｙｅｓ）、通信装置１０１＃ｙは、ディスパッチ先フィールドに登録されている通信装置１０１＃ｚに、ディスパッチした通信処理６０２の処理識別子と通信処理６０２の回収要求を通知する（ステップＳ２３０３）。通知を受けた通信装置１０１＃ｚは、通信処理回収応答処理を実行する（ステップＳ２３０４）。
【０１５５】
通知を行ってから一定時間経過後、通信装置１０１＃ｙは、通信処理６０２の回収に成功したか否かを判断する（ステップＳ２３０５）。回収に成功した場合（ステップＳ２３０５：Ｙｅｓ）、通信装置１０１＃ｙは、通信処理６０２を、回収要求を行った通信装置１０１＃ｘに通知し（ステップＳ２３０６）、通信処理回収応答処理を終了する。また、入れ子情報が存在しない場合（ステップＳ２３０２：Ｎｏ）、通信装置１０１＃ｙにて通信処理６０２を実行していることになるため、通信装置１０１＃ｙは、ステップＳ２３０６の処理に移行する。回収に失敗した場合（ステップＳ２３０５：Ｎｏ）、通信装置１０１＃ｙは、基地局１０２を経由して、ディスパッチ先の通信装置１０１＃ｚに、ディスパッチした通信処理６０２の処理識別子と通信処理６０２の回収要求を通知する（ステップＳ２３０７）。通知を行ってから一定時間経過後、通信装置１０１＃ｙは、通信処理６０２を、回収要求を行った通信装置１０１＃ｘに通知し（ステップＳ２３０６）、通信処理回収応答処理を終了する。
【０１５６】
以上説明したように、通信装置、および通信方法によれば、自装置および基地局の通信速度と、自他装置間の通信速度と他装置および基地局間の通信速度に基づく他装置経由の通信速度と、に基づいて通信処理を自装置または他装置で実行するか判定する。これにより、通信装置は、基地局との通信路のうち最適な通信路を選択して、通信処理を高速に処理できる。
【０１５７】
また、通信装置は、他装置の処理速度を周期的に収集してもよい。通信装置は移動していることが多く、自装置および基地局の通信速度が刻々と変化する。通信装置は、このように刻々と変化する通信速度を周期的に収集することで、常に最適な通信路と通信処理を実行する装置を選択することができる。
【０１５８】
また、通信装置は、自装置と基地局の通信速度および自装置の処理速度と、他装置経由の通信速度および他装置の処理速度と、に基づいて通信処理を自装置または他装置で実行するか判定してもよい。これにより、通信装置は、自装置で行っていた通信処理を負荷の低い他装置に移行させることで、負荷を分散することができる。
【０１５９】
また、通信装置は、通信処理の実行結果を回収してもよい。これにより、通信処理を発生させたアプリは、通信処理が自装置で行われたか他装置で行われたかを意識せずに処理を続行することができる。
【０１６０】
また、通信装置は、自装置から基地局までの第１通信路と自装置から他装置を経由して基地局までの第２通信路とのうち、速度の速い通信路を特定の通信路に特定し、特定の通信路を経由して通信するように、他装置を制御してもよい。これにより、通信装置は、より高速な通信路を選択して基地局と通信することができる。
【０１６１】
また、通信装置は、通信路に他装置が存在する数に基づいて、特定の通信路を特定してもよい。これにより、通信装置は、より短い通信路を選択でき、通信路を最小に留めることができる。
【０１６２】
（実施の形態２の概要）
実施の形態１にかかる通信システム１００では、通信速度と処理速度のうち小さい値を最良装置評価値として設定していた。しかしながら、アプリによっては、ＣＰＵの処理速度を多大に要求し、通信速度は低速でもよいというアプリも存在する。したがって、実施の形態２にかかる通信システム１００は、アプリがＣＰＵの処理速度を要求するか、または、通信速度を要求するか否かによって、最良装置評価値を設定する。また、実施の形態２にかかる通信装置１０１＃０〜通信装置１０１＃２のハードウェアは、実施の形態１にかかるハードウェアと等しいため、説明を省略する。
【０１６３】
図２４は、実施の形態２にかかる通信システム１００の機能を示す説明図である。実施の形態２にかかる検出部３１１〜実行部３２４のうち、判定部３１６と算出部３１８以外の機能については、実施の形態１の機能と等しいため、説明を省略する。同様に、実施の形態２にかかるパラメタテーブル３０１と入れ子情報テーブル３０２は、実施の形態１にかかるパラメタテーブル３０１と入れ子情報テーブル３０２と等しい情報を記憶するため、説明を省略する。
【０１６４】
実施の形態２にかかる通信システム１００は、アプリ属性テーブル２４０１にアクセス可能である。アプリ属性テーブル２４０１は、基地局１０２への通信速度の要求度と前記通信処理を実行可能な処理速度の要求度とをアプリごとに記憶するテーブルである。なお、アプリ属性テーブル２４０１の詳細は、図２５にて後述する。
【０１６５】
判定部３１６は、通信処理の発生元となるアプリの属性に基づいて他装置に通信処理を移行するか否かを判定してもよい。たとえば、通信処理３４１を発生させたアプリ３３１は、処理速度を要求するアプリであることがアプリ属性テーブル２４０１に記憶されている場合を想定する。このとき、判定部３１６は、通信装置１０１＃１と通信装置１０１＃２のうち、処理速度が最も速い装置に通信処理３４１を移行すると判定する。なお、判定結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【０１６６】
算出部３１８は、通信処理の発生元となるアプリの属性に基づいて評価値を算出してもよい。たとえば、算出部３１８は、通信処理３４１を発生させたアプリ３３１は、処理速度を要求するアプリである場合、評価値を処理速度の値として算出する。なお、算出結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【０１６７】
図２５は、実施の形態２にかかるアプリ属性テーブル２４０１の記憶内容の一例を示す説明図である。アプリ属性テーブル２４０１は、アプリ名称、ＣＰＵ処理速度要求、通信速度要求という３つのフィールドを含む。アプリ名称フィールドには、アプリの名称など、対象アプリが一意に特定できる情報が格納される。
【０１６８】
ＣＰＵ処理速度要求フィールドには、対象アプリがＣＰＵ処理速度に対する要求が大きいか否かが格納される。具体的に、ＣＰＵ処理速度要求フィールドには、要求が大きいことを示す識別子“大”と、要求が小さいことを示す識別子“小”のいずれかが格納される。通信速度要求フィールドには、対象アプリが通信速度に対する要求が大きいか否かが格納される。具体的に、通信速度要求フィールドには、要求が大きいことを示す識別子“大”と、要求が小さいことを示す識別子“小”のいずれかが格納される。以下の説明では、ＣＰＵ処理速度要求と通信速度要求とをあわせてアプリ属性と称する。
【０１６９】
たとえば、メーラアプリは、複雑な処理を要求しないうえ、通信量も小さいため、アプリ属性は、ＣＰＵ処理速度要求、通信速度要求共に“小”に設定される。ダウンローダアプリは、複雑な処理は要求しないが、通信量は大きいことが好ましい。したがって、ダウンローダアプリのアプリ属性は、ＣＰＵ処理速度要求が“小”に設定され、通信速度要求が“大”に設定される。
【０１７０】
ネットワークゲームアプリは、通信量は小さくてよいが、通信処理で得た結果を用いて複雑な処理を実行する。したがって、ネットワークゲームアプリのアプリ属性は、ＣＰＵ処理速度要求が“大”に設定され、通信速度要求フィールドが“小”に設定される。ストリーミング動画再生アプリは、通信量は大きいことが好ましく、また、通信処理で得た結果に対してデコード処理といった複雑な処理を実行する。したがって、ストリーミング動画再生アプリのアプリ属性は、ＣＰＵ処理速度要求、通信速度要求共に“大”に設定される。
【０１７１】
なお、ストリーミング動画再生アプリに関して、高圧縮の動画を受信する場合、通信速度を低くすることができる代わりに、伸長処理の処理量が多くなる。このような場合、ストリーミング動画再生アプリのアプリ属性は、ＣＰＵ処理速度要求が“大”に設定され、通信速度要求が“小”に設定されてもよい。
【０１７２】
実施の形態２にかかる通信システム１００は、アプリ属性テーブル２４０１を参照して通信処理を実行する。なお、実施の形態２にかかる通信システム１００は、図１６〜図２３で示した処理群のうち、最良装置設定処理以外は全て実施の形態１にかかる通信システム１００と等しい処理を行う。実施の形態２にかかる最良装置設定処理については、図２６で説明を行う。
【０１７３】
図２６は、実施の形態２にかかる最良装置設定処理を示すフローチャートである。実施の形態２にかかる最良装置設定処理のうち、ステップＳ２６０６〜ステップＳ２６１０は、図１９に示したステップＳ１９０２〜ステップＳ１９０６と等しい処理を行うため、説明を省略する。また、実施の形態２にかかる最良装置設定処理は、通信装置１０１＃０〜通信装置１０１＃２にて実行されるが、図２６の説明では、説明の簡略化のため、通信装置１０１＃０を実行主体として説明を行う。また、実施の形態２にかかる最良装置設定処理では、自装置のパラメタテーブル３０１に対して処理を行う。
【０１７４】
通信装置１０１＃０は、アプリ属性テーブル２４０１を参照して、対象アプリのアプリ属性を確認する（ステップＳ２６０１）。ＣＰＵ処理速度要求と通信速度要求が共に小である場合（ステップＳ２６０１：ＣＰＵ処理速度要求：小＆通信速度要求：小）、通信装置１０１＃０は、自装置のレコードを選択し（ステップＳ２６０２）、ステップＳ２６０６の処理に移行する。
【０１７５】
ＣＰＵ処理速度要求が小、かつ通信速度要求が大である場合（ステップＳ２６０１：ＣＰＵ処理速度要求：小＆通信速度要求：大）、通信装置１０１＃０は、自装置と経由装置のうち、最良装置評価値となるＴ＝Ｍａｘ（Ｔ0、Ｔ1、Ｔ2）となるレコードを選択する（ステップＳ２６０３）。選択後、通信装置１０１＃０は、ステップＳ２６０６の処理に移行する。
【０１７６】
ＣＰＵ処理速度要求が大、かつ通信速度要求が小である場合（ステップＳ２６０１：ＣＰＵ処理速度要求：大＆通信速度要求：小）、通信装置１０１＃０は、自装置と経由装置のうち、最良装置評価値となるＰ＝Ｍａｘ（Ｐ0、Ｐ1、Ｐ2）となるレコードを選択する（ステップＳ２６０４）。選択後、通信装置１０１＃０は、ステップＳ２６０６の処理に移行する。
【０１７７】
ＣＰＵ処理速度要求と通信速度要求が共に大である場合（ステップＳ２６０１：ＣＰＵ処理速度要求：大＆通信速度要求：大）、通信装置１０１＃０は、自装置と経由装置のうち、Ｍｉｎ（Ｔ、Ｐ）＝Ｍａｘ（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ1、Ｐ1）、Ｍｉｎ（Ｔ2、Ｐ2））となるレコードを選択する（ステップＳ２６０５）。選択後、通信装置１０１＃０は、ステップＳ２６０６の処理に移行する。
【０１７８】
以上説明したように、実施の形態２にかかる通信装置、および通信方法によれば、アプリの属性に基づいて、通信処理を移行するか否かを判定する。これにより、通信装置は、アプリが要求する属性に最も適している装置に、通信処理を振り分けることができる。
【０１７９】
たとえば、アプリ１が処理速度を要求し、アプリ２が通信速度を要求する場合を想定し、さらに、通信装置１が処理速度：中、通信速度：中、通信装置２が処理速度：小、通信速度：大、通信装置３が処理速度：大、通信速度：小となる場合を想定する。このとき、実施の形態１にかかる通信システム１００では、アプリ１の通信処理、アプリ２の通信処理共に、通信装置１に移行することになる。このように、実施の形態１にかかる通信システム１００では、アプリ１の通信処理を実行するに適している通信装置３、アプリ２に通信処理を実行するに適している通信装置２が存在するにもかかわらず、通信装置１を選択することになる。
【０１８０】
しかし、実施の形態２にかかる通信システムでは、アプリ１の通信処理を通信装置３に移行し、アプリ２の通信処理を通信装置２に移行する。このように、実施の形態２にかかる通信システムは、それぞれのアプリが要求する属性に適している装置に通信処理を振り分けることができる。
【０１８１】
（実施の形態３の概要）
実施の形態１、実施の形態２にかかる通信システム１００では、アプリが要求する通信速度が通信路内の通信装置１０１＃０の最良通信速度Ｔより大きい場合、アプリの要求を完全に満たすことができなかった。実施の形態３にかかる通信システム１００では、複数の通信装置１０１に分散して通信処理を実行することにより、アプリの要求が満たされることを可能にする。
【０１８２】
また、実施の形態３にかかる通信装置１０１＃０〜通信装置１０１＃２のハードウェアは、実施の形態１にかかるハードウェアと等しいため、説明を省略する。さらに、実施の形態３にかかる通信システム１００の機能については、実施の形態２にかかる通信システム１００の機能とほぼ等しいため、図を省略する。以下、実施の形態３の機能について説明を行う。
【０１８３】
また、実施の形態３にかかるアプリ属性テーブルは、実施の形態２にかかるアプリ属性テーブル２４０１に、アプリが要求する通信速度を記憶するフィールドが追加される。実施の形態３にかかるアプリ属性テーブルの説明については、図２８にて、実施の形態３にかかるアプリ属性テーブル２８０１として説明を行う。
【０１８４】
特定部３１４は、特定の通信路の通信速度が、アプリ属性テーブル２８０１を参照した通信処理を発生させたアプリが要求する通信速度より小さい場合、特定の通信路以外から新たな特定の通信路を特定してもよい。たとえば、特定部３１４が、過去に、通信装置１０１＃０から通信装置１０１＃２を経由して基地局１０２へ通信する通信路を特定の通信路として特定したことを想定し、特定の通信路の通信速度が７０［Ｍｂｐｓ］であると想定する。
【０１８５】
このとき、アプリが要求する通信速度が１００［Ｍｂｐｓ］である場合、特定部３１４は、通信装置１０１＃０から通信装置１０１＃２を経由して基地局１０２へ通信する通信路以外の通信路を新たな特定の通信路に特定する。たとえば、特定部３１４は、通信装置１０１＃０から通信装置１０１＃１を経由して基地局１０２へ通信する通信路を新たな特定の通信路に特定する。
【０１８６】
以降、算出部３１８が、新たな特定の通信路内に含まれる装置ごとに、評価値を算出し、設定部３１９が、算出された評価値群に基づいて、新たな特定の通信路内に含まれる装置のうち、通信処理を実行する新たな実行対象装置を設定する。設定後、判定部３１６は、設定された新たな実行対象装置が自装置であるか否かを判定し、移行部３２０は、新たな実行対象装置が自装置でない場合、新たな実行対象装置に通信処理を移行する。
【０１８７】
図２７は、通信処理を複数の通信装置１０１にて分割実行する動作を示す説明図である。図２７では、通信装置１０１＃０で実行されるアプリ２７０１がストリーミング動画再生アプリであることを想定している。
【０１８８】
また、アプリ２７０１がストリーミング再生する動画は、画面サイズが３２０×４８０［ピクセル］であり、色情報が２４ビットカラーであり、３０［フレーム／秒］である動画である。したがって、アプリ２７０１が要求する通信速度は、４８０＊３２０＊２４＊３０≒１０６［Ｍｂｐｓ］となる。さらに、アプリ２７０１が再生するストリーミング動画は、高圧縮であることを想定しており、１秒間分のデータを、約５００［Ｋバイト］まで圧縮することが可能であることを想定する。このように、アプリ２７０１は、通信速度は小さくてよいが、ＣＰＵ処理速度は大きい値を要求するため、通信システム１００は、最良装置評価値を処理速度Ｐに設定する。
【０１８９】
また、図２７の状態は、通信装置１０１と基地局１０２の直接の通信路が遮断されており、Ｂ0＝０［Ｍｂｐｓ］であると想定する。さらに、他の通信速度Ｂは、それぞれ、Ｂ1＝Ｂ2＝７［Ｍｂｐｓ］であると想定する。また、通信装置１０１間の通信速度ｔが、それぞれ、ｔ01＝ｔ02＝ｔ12＝５４［Ｍｂｐｓ］であると想定する。
【０１９０】
また、パラメタテーブル３０１＃０の自装置に関する値として、ｍ0＝１０［Ｍｂｐｓ］、ｃ0＝１０［％］が格納されている。さらに、通信装置１０１＃０は、パラメタ更新処理を実行することで、通信装置１０１＃１、通信装置１０１＃２からＴ1＝Ｔ2＝７［Ｍｂｐｓ］、Ｐ1＝６０［Ｍｂｐｓ］、Ｐ2＝７０［Ｍｂｐｓ］、Ｈ1＝Ｈ2＝０を受け付ける。受け付け後、通信装置１０１＃０は、（１）式、（２）式によって、Ｔ0＝７［Ｍｂｐｓ］、Ｐ0＝１［Ｍｂｐｓ］を算出し、パラメタテーブル３０１＃０に登録する。
【０１９１】
また、通信装置１０１＃０は、経由装置評価値群（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））＝（０、７、７）から、最も大きい評価値となる通信装置１０１＃１、通信装置１０１＃２のうち、通信装置１０１＃２を経由装置に特定する。さらに、通信装置１０１＃０は、最良装置評価値群（Ｐ0、Ｐ2）＝（１、７０）から、通信装置１０１＃２を最良装置に設定する。設定後、通信装置１０１＃０は、通信装置１０１＃２に通信処理２７０２＃１をディスパッチする。
【０１９２】
しかしながら、通信装置１０１＃２は、最良装置評価値となるＰ2＝７０［Ｍｂｐｓ］であるため、アプリ２７０１が要求する通信速度１０６［Ｍｂｐｓ］を満たすことができない。また、図２７の場合、ｔ02＝５４［Ｍｂｐｓ］であるために、通信装置１０１＃２は、伸長した映像データを５４［Ｍｂｐｓ］までしか転送できない。したがって、通信装置１０１＃０は、既に設定されている最良装置とは別の最良装置を設定し、別の最良装置に通信処理をディスパッチしてもよい。
【０１９３】
具体的には、通信装置１０１＃０は、経由装置評価値群（０、７、７）のうち、最良装置となっている通信装置１０１＃２を除いたうち、最も大きい評価値となる通信装置１０１＃１を２番目の経由装置に特定する。なお、このとき、通信装置１０１＃０は、パラメタテーブル３０１＃０の通信装置１０１＃１のＶフィールドに、２番目の経由装置を示す“２”を設定してもよい。続けて、通信装置１０１＃０は、自装置と２番目の経由装置の最良装置評価値群（Ｐ0、Ｐ1）＝（１、６０）から、通信装置１０１＃１を２番目の最良装置に設定する。設定後、通信装置１０１＃０は、通信装置１０１＃１に通信処理２７０２＃２をディスパッチする。
【０１９４】
このように、図２７に示す通信システム１００は、１つの通信装置１０１でアプリの要求を満たすことができない場合、複数の通信装置１０１に分散して通信処理を実行することにより、アプリの要求を満たすことができる。具体的な通信量として、通信装置１０１＃１と通信装置１０１＃２は、圧縮されたデータを約２５０［Ｋｂｐｓ］で受信し、圧縮されたデータを伸長する。伸長後、通信装置１０１＃１と通信装置１０１＃２は、伸長されたデータを、約５３［Ｍｂｐｓ］で通信装置１０１＃０に送信する。
【０１９５】
図２８は、実施の形態３にかかるアプリ属性テーブル２８０１の記憶内容の一例を示す説明図である。アプリ属性テーブル２８０１は、アプリ属性テーブル２４０１に含まれるフィールドに加え、さらに、アプリ要求通信速度フィールドを含む。なお、アプリ名称フィールド、ＣＰＵ処理速度要求フィールド、通信速度要求フィールドに関しては、アプリ属性テーブル２４０１と同等であるため、説明を省略する。
【０１９６】
アプリ要求通信速度は、対象アプリが要求する通信速度である。たとえば、メーラアプリは、ＣＰＵ処理速度要求も通信速度要求も小さいため、アプリ要求通信速度は小さくなり、アプリ要求通信速度フィールドには、１［Ｍｂｐｓ］が格納されている。同様に、ダウンローダアプリは、通信速度要求が大きいため、アプリ要求通信速度が大きくなり、アプリ要求通信速度フィールドには、１００［Ｍｂｐｓ］が格納されている。
【０１９７】
また、ネットワークゲームアプリは、ＣＰＵ処理速度要求が大きくなり、アプリ要求通信速度フィールドには、５０［Ｍｂｐｓ］が格納されている。また、ストリーミング動画再生アプリは、ＣＰＵ処理速度要求も通信速度要求も大きいため、アプリ要求通信速度は大きくなり、アプリ要求通信速度フィールドには、１０６［Ｍｂｐｓ］が格納されている。
【０１９８】
実施の形態３にかかる通信システム１００は、アプリ属性テーブル２８０１を参照して通信処理を実行する。なお、実施の形態２にかかる通信システム１００は、図１６〜図２３で示した処理群のうち、通信処理実行処理以外は全て実施の形態１にかかる通信システム１００と等しい処理を行う。したがって、図２９にて実施の形態３にかかる通信処理実行処理の説明を行う。
【０１９９】
図２９は、実施の形態３にかかる通信処理実行処理を示すフローチャートである。通信装置１０１＃０は、アプリ２７０１から、通信要求を受け付ける（ステップＳ２９０１）。受け付け後、通信装置１０１＃０は、変数ｉを１に設定する（ステップＳ２９０２）。設定後、通信装置１０１＃０は、最良装置設定処理を実行し、ｉ番目の最良装置に設定する（ステップＳ２９０３）。なお、ステップＳ２９０３における最良装置設定処理は、実施の形態１における最良装置設定処理でもよいし、実施の形態２における最良装置設定処理であってもよい。
【０２００】
設定後、通信装置１０１＃０は、自装置がｉ番目の最良装置に設定されたか否かを判断する（ステップＳ２９０４）。自装置がｉ番目の最良装置に設定された場合（ステップＳ２９０４：Ｙｅｓ）、通信装置１０１＃０は、自装置にて通信処理２７０２＃ｉを実行する（ステップＳ２９０５）。自装置がｉ番目の最良装置に設定されていない場合（ステップＳ２９０４：Ｎｏ）、通信装置１０１＃０は、最良装置に設定された通信装置１０１＃ｘに、通信処理２７０２＃ｉと通信処理２７０２＃ｉのディスパッチ応答要求を通知する（ステップＳ２９０６）。通知を受けた通信装置１０１＃ｘは、通信処理ディスパッチ応答処理を実行する（ステップＳ２９０７）。
【０２０１】
ステップＳ２９０５、またはステップＳ２９０６の処理終了後、通信装置１０１＃０は、要求を行ったアプリのＣＰＵ処理速度要求が小、かつ通信速度要求が小か否かを判断する（ステップＳ２９０８）。ＣＰＵ処理速度要求か通信速度要求のいずれかが小でない場合（ステップＳ２９０８：Ｎｏ）、通信装置１０１＃０は、１番目からｉ番目の最良装置の最良装置評価値の合計がアプリ２７０１のアプリ要求通信速度以上か否かを判断する（ステップＳ２９０９）。
【０２０２】
最良装置評価値の合計がアプリ要求通信速度より小さい場合（ステップＳ２９０９：Ｎｏ）、通信装置１０１＃０は、ディスパッチ可能な通信装置１０１が存在するか否かを判断する（ステップＳ２９１０）。存在する場合（ステップＳ２９１０：Ｙｅｓ）、通信装置１０１＃０は、ｉ番目の最良装置を経由装置評価値群から除いて、経由装置特定処理を実行する（ステップＳ２９１１）。具体的に、通信装置１０１＃０は、ステップＳ１７０１を、“経由装置評価値となる自装置のＢとｉ番目の最良装置を除いた他装置のＭｉｎ（Ｔ、ｔ）のうち、最も値が大きいレコードを選択する”に置き換えて実行する。実行後、通信装置１０１＃０は、変数ｉをインクリメントし（ステップＳ２９１２）、ステップＳ２９０３の処理に移行する。
【０２０３】
ＣＰＵ処理速度要求が小、かつ通信速度要求が小である場合（ステップＳ２９０８：Ｙｅｓ）、最良装置評価値の合計がアプリ要求通信速度以上の場合（ステップＳ２９０９：Ｙｅｓ）、通信装置１０１＃０は、通信処理実行処理を終了する。また、ディスパッチ可能な通信装置１０１が存在しない場合（ステップＳ２９１０：Ｎｏ）、通信装置１０１＃０は、通信処理実行処理を終了する。
【０２０４】
なお、ステップＳ２９０９の処理にて、１番目からｉ番目の最良装置の最良装置評価値の合計がアプリ２７０１のアプリ要求通信速度であっても、たとえば、通信装置１０１間の通信速度がボトルネックとなり、アプリの要求を満たさない場合が存在する。このような場合、通信装置１０１＃０は、実際に受信しているデータ量の受信速度がアプリ２７０１のアプリ要求通信速度以下であれば、ステップＳ２９０９：Ｎｏの処理を実行してもよい。
【０２０５】
以上説明したように、通信装置、および通信方法によれば、特定の通信路の通信速度が、通信処理を発生させたアプリが要求する通信速度より小さい場合、特定の通信路以外の新たな特定の通信路に特定し、新たな特定の通信路内の装置に通信処理を移行する。これにより、通信装置は、１つの通信装置ではアプリの要求が満たせない場合に、複数の装置に通信処理を実行させることで、アプリの要求を満たすことができる。
【０２０６】
なお、本実施の形態で説明した通信方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本通信方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本通信方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０２０７】
１０１  通信装置
１０２  基地局
２０１  ＣＰＵ
２０３  ＲＡＭ
２０８  通信モジュール
２０９  無線ＬＡＮ通信モジュール
３０１  パラメタテーブル
３０２  入れ子情報テーブル
３０３  ＯＳ
３０４  計算ライブラリ
３０５  判定ライブラリ
３０６  収集ライブラリ
３０７  ＣＰＵ
３１１  検出部
３１２  測定部
３１３  選択部
３１４  特定部
３１５  制御部
３１６  判定部
３１７  移行指示部
３１８  算出部
３１９  設定部
３２０  移行部
３２１、３２４  実行部
３２２、３２５  通信部
３２３  収集部
２４０１、２８０１  アプリ属性テーブル
【図１】
2012108057.tif 000003
【図２】
2012108057.tif 000004
【図３】
2012108057.tif 000005
【図４】
2012108057.tif 000006
【図５】
2012108057.tif 000007
【図６】
2012108057.tif 000008
【図７】
2012108057.tif 000009
【図８】
2012108057.tif 000010
【図９】
2012108057.tif 000011
【図１０】
2012108057.tif 000012
【図１１】
2012108057.tif 000013
【図１２】
2012108057.tif 000014
【図１３】
2012108057.tif 000015
【図１４】
2012108057.tif 000016
【図１５】
2012108057.tif 000017
【図１６】
2012108057.tif 000018
【図１７】
2012108057.tif 000019
【図１８】
2012108057.tif 000020
【図１９】
2012108057.tif 000021
【図２０】
2012108057.tif 000022
【図２１】
2012108057.tif 000023
【図２２】
2012108057.tif 000024
【図２３】
2012108057.tif 000025
【図２４】
2012108057.tif 000026
【図２５】
2012108057.tif 000027
【図２６】
2012108057.tif 000028
【図２７】
2012108057.tif 000029
【図２８】
2012108057.tif 000030
【図２９】
2012108057.tif 000031
【手続補正書】
【提出日】平成25年8月19日(2013.8.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
通信処理を第１処理速度で実行可能な第１ＣＰＵと、
基地局との間で前記通信処理を行うときの第１通信速度を測定する測定部と、
前記第１通信速度に基づいて少なくとも一の他装置に前記基地局および前記他装置の第２通信速度と前記他装置に含まれる第２ＣＰＵの第２処理速度とを収集する収集部と、
前記第２通信速度と前記第２処理速度とに基づいて前記他装置に前記通信処理を移行するか否かを判定する判定部と、
判定結果に基づいて前記通信処理を前記他装置に移行する移行部と、
を含むことを特徴とする通信装置。
【請求項２】
前記判定部は、前記他装置が複数ある場合、前記第２通信速度および前記第２処理速度のうちの最小である値が最も大きい装置に前記通信処理を移行するか否かを判定すること
を特徴とする請求項１に記載の通信装置。
【請求項３】
前記判定部は、前記他装置へ移行した前記通信処理の実行結果を回収すること
を特徴とする請求項１または請求項２に記載の通信装置。
【請求項４】
前記判定部は、前記通信処理の発生元となるアプリケーションの属性に基づいて前記他装置に前記通信処理を移行するか否かを判定すること
を特徴とする請求項１乃至請求項３の何れか一に記載の通信装置。
【請求項５】
前記第２通信速度および前記第２処理速度を登録するメモリを有すること
を特徴とする請求項１乃至請求項４の何れか一に記載の通信装置。
【請求項６】
通信処理を第２処理速度で実行可能な第２ＣＰＵと、
前記通信処理を第１処理速度で実行可能な第１ＣＰＵを含むと共に基地局との間で第１通信速度で前記通信処理を行う他装置からの要求に基づいて、前記基地局との間の第２通信速度と前記第２処理速度とを前記他装置へ通信する通信部と、
前記他装置から移行される第１通信処理を実行する実行部と、
を含むことを特徴とする通信装置。
【請求項７】
前記他装置からの要求に応じて、前記通信処理の実行結果を前記他装置に送信すること
を特徴とする請求項６に記載の通信装置。
【請求項８】
少なくとも一の対象装置に前記基地局と前記対象装置との第３通信速度と前記対象装置に含まれる第３ＣＰＵの第３処理速度とを問い合わせる収集部と、
前記第３通信速度と前記第３処理速度とに基づいて前記対象装置に前記通信処理を移行するか否かを判定する判定部と、
を含むことを特徴とする請求項６または請求項７に記載の通信装置。
【請求項９】
前記第３通信速度と前記第３処理速度とを登録するメモリを含むこと
を特徴とする請求項８に記載の通信装置。
【請求項１０】
基地局との間で通信処理を行うときの第１通信速度を測定し、
第１装置に前記基地局と前記第１装置との間の第２通信速度と前記第１装置に含まれるＣＰＵが前記通信処理を実行する際の処理速度とを要求し、
前記第１通信速度と第２通信速度と前記処理速度とに基づいて前記第１装置に前記通信処理を移行するか否かを判定し、
判定結果に基づいて前記通信処理を前記第１装置に移行すること
を特徴とする通信方法。
【請求項１１】
第２装置からの要求に応じて前記第２通信速度と前記処理速度を前記第２装置に送信すること
を特徴とする請求項１０に記載の通信方法。
【請求項１２】
前記第２装置から移行された前記通信処理を実行すること
を特徴とする請求項１１に記載の通信方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、および通信方法に関する。
【背景技術】
【０００２】
従来から、携帯電話などの端末装置は、基地局と無線通信を行い、情報を送受信している。もし、端末装置が基地局からの電波が届かない場所に移動してしまった場合、端末装置の通信が遮断してしまい、通信処理が中断されてしまっていた。このような、端末装置と基地局の通信が遮断された場合に対応する技術として、たとえば、アドホック通信を用いて、自装置とは別の他装置が基地局の通信を中継する技術が開示されている（たとえば、下記特許文献１、２を参照。）。
【０００３】
また、近年の端末装置は、様々な機能を搭載し続けていった結果、端末装置の負荷が増大している。負荷を分散する技術として、たとえば、１つの端末装置に複数の無線通信ユニットを搭載し、最適な通信ユニットにて通信を行う技術が開示されている。また、基地局における負荷分散の技術として、端末装置が複数の基地局の混雑情報を受け取り、端末装置が最適な基地局を選択して通信を行う技術が開示されている（たとえば、下記特許文献３、４を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−８９０２１号公報
【特許文献２】特開２００４−２７４５０号公報
【特許文献３】特開２００５−２９５０８７号公報
【特許文献４】特開２００２−１５９０３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術において、特許文献１、２にかかる技術では、端末装置と基地局の通信が遮断されても通信を続行することができるが、低速な通信路を選択してしまう可能性があるという問題があった。また、特許文献３にかかる技術では、特定の端末装置にかかる負荷は偏ったままとなる問題があった。
【０００６】
本発明は、上述した従来技術による問題点を解消するため、最適な通信路を選択し、負荷分散できる通信装置、および通信方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、通信処理を第１処理速度で実行可能な第１ＣＰＵを含み、基地局との間で通信処理を行うときの第１通信速度を測定し、第１通信速度に基づいて少なくとも一の他装置から基地局および他装置の第２通信速度と他装置に含まれる第２ＣＰＵの第２処理速度とを収集し、第２通信速度と第２処理速度とに基づいて他装置に通信処理を移行するか否かを判定し、判定結果に基づいて通信処理を他装置に移行する通信装置、および通信方法が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、最適な通信路を選択でき、負荷分散できるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態１〜実施の形態３における通信システム１００の通信路選択例を示す説明図である。
【図２】図２は、実施の形態１〜実施の形態３にかかる通信装置１０１＃０のハードウェアを示すブロック図である。
【図３】図３は、実施の形態１にかかる通信システム１００の機能を示すブロック図である。
【図４】図４は、パラメタテーブル３０１の記憶内容の一例を示す説明図である。
【図５】図５は、パラメタテーブル３０１の算出例を示す説明図である。
【図６】図６は、最良装置の設定例を示す説明図である。
【図７】図７は、通信装置１０１＃０の速度低下が起こっていない状態を示す説明図である。
【図８】図８は、通信装置１０１＃０の通信速度低下時における問い合わせ動作を示す説明図である。
【図９】図９は、通信装置１０１＃０の通信速度低下時における経路選択方法を示す説明図である。
【図１０】図１０は、通信装置１０１＃０の処理速度低下時における問い合わせ動作を示す説明図である。
【図１１】図１１は、通信装置１０１間の通信速度低下時における経路選択方法を示す説明図である。
【図１２】図１２は、経由装置評価値が同値である通信装置が複数存在する場合の経路選択方法を示す説明図である。
【図１３】図１３は、入れ子情報テーブル３０２が生成される場合の通信システム１００の状態を示す説明図である。
【図１４】図１４は、入れ子情報テーブル３０２の記憶内容の一例を示す説明図である。
【図１５】図１５は、通信システム１００の処理遷移を示す説明図である。
【図１６】図１６は、パラメタ更新処理および問い合わせ応答処理を示すフローチャートである。
【図１７】図１７は、経由装置特定処理を示すフローチャートである。
【図１８】図１８は、通信処理実行処理を示すフローチャートである。
【図１９】図１９は、最良装置設定処理を示すフローチャートである。
【図２０】図２０は、通信処理ディスパッチ応答処理を示すフローチャートである。
【図２１】図２１は、通信処理実行結果応答処理を示すフローチャートである。
【図２２】図２２は、通信処理再実行処理を示すフローチャートである。
【図２３】図２３は、通信処理回収応答処理を示すフローチャートである。
【図２４】図２４は、実施の形態２にかかる通信システム１００の機能を示す説明図である。
【図２５】図２５は、実施の形態２にかかるアプリ属性テーブル２４０１の記憶内容の一例を示す説明図である。
【図２６】図２６は、実施の形態２にかかる最良装置設定処理を示すフローチャートである。
【図２７】図２７は、通信処理を複数の通信装置１０１にて分割実行する動作を示す説明図である。
【図２８】図２８は、実施の形態３にかかるアプリ属性テーブル２８０１の記憶内容の一例を示す説明図である。
【図２９】図２９は、実施の形態３にかかる通信処理実行処理を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、開示の通信装置、および通信方法の実施の形態１〜実施の形態３を詳細に説明する。
【００１１】
図１は、本実施の形態１〜実施の形態３における通信システム１００の通信路選択例を示す説明図である。通信システム１００は、通信装置１０１＃０〜通信装置１０１＃２と、基地局１０２とを含む。通信装置１０１は、ユーザにより使用可能な小型の携帯端末であり、たとえば、携帯電話等である。
【００１２】
基地局１０２は、通信装置１０１との間で無線通信を行い、他の端末との通話、通信を中継する装置である。また、基地局１０２は複数存在し、複数の基地局１０２と通信装置１０１で携帯電話網を形成している。また、基地局１０２は、ネットワークを通して、通信装置１０１とサーバとの通信を中継する。サーバは、特定のサービスを提供する装置であり、たとえば、Ｗｅｂページの閲覧を提供するＷｅｂサーバ、メール送受信サービスを提供するメールサーバ、動画再生を提供する動画配信サーバ等である。
【００１３】
図１では、通信装置１０１＃０〜通信装置１０１＃２が同一の列車内に存在している状態であり、さらに、列車の一部が基地局１０２と無線通信の行えないトンネル内を通過している状態を想定している。このとき、通信装置１０１＃０はトンネル内に位置しているため、基地局１０２と通信できない状態である。通信装置１０１＃１は、トンネルの入り口近くに位置しているため、基地局１０２と通信可能であるが、電界強度が低くノイズが多くなってしまい通信速度が遅い状態である。通信装置１０１＃２は、トンネルの外に位置しているため、基地局１０２と通信可能であり、電界強度が高く、ノイズが少なく通信速度が速い状態である。また、通信装置１０１＃０は、基地局１０２を介さずに通信するアドホック通信により、通信装置１０１＃１、通信装置１０１＃２と通信可能である。
【００１４】
このような状態で、ユーザ等の要求により実行されたアプリによって、通信装置１０１＃０がサーバに接続する状態が発生した場合を想定する。なお、通信装置１０１＃０は基地局１０２と直接通信できないが、通信装置１０１＃１または通信装置１０１＃２を経由して基地局１０２と通信することが可能である。このとき、通信装置１０１＃０は通信装置１０１＃２を経由する通信路を選択する。これにより、通信装置１０１＃０は、基地局１０２と高速に通信することができる。
【００１５】
また、通信装置１０１＃０の負荷より通信装置１０１＃２の負荷が小さく、アプリから発生した通信処理１０３を通信装置１０１＃２の方が速く実行可能な場合、通信装置１０１＃０は、通信処理１０３を通信装置１０１＃２に移行する。これにより、通信システム１００間で負荷を分散することができる。
【００１６】
なお、通信処理１０３は、サーバとの送受信を行う処理や、また、それに付随する処理であってもよい。付随する処理としては、たとえば、通信装置１０１＃０で実行するアプリがメーラアプリであれば、送受信時に行うＢａｓｅ６４のエンコード／デコード処理である。また、付随する処理が動画再生アプリである場合は、動画フォーマットに対応したエンコード／デコード処理である。このように、本実施の形態における通信システム１００は、複数の通信路から、最適な通信路を選択し、また負荷を分散できる。
【００１７】
図２は、実施の形態１〜実施の形態３にかかる通信装置１０１＃０のハードウェアを示すブロック図である。なお、図２では通信装置１０１＃０のハードウェアについて図示しているが、通信装置１０１＃１、通信装置１０１＃２のハードウェアについても通信装置１０１＃０のハードウェアと同様のハードウェアを含む。図２において、通信装置１０１＃０は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎと、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。また、通信装置１０１＃０は、フラッシュＲＯＭコントローラ２０４と、フラッシュＲＯＭ２０５と、を含む。
【００１８】
また、通信装置１０１＃０は、ユーザやその他の機器との入出力装置として、ディスプレイ２０６と、キーボード２０７と、通信モジュール２０８と、無線ＬＡＮ通信モジュール２０９を含む。また、各部はバス２１０によってそれぞれ接続されている。
【００１９】
ここで、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎは、通信装置１０１＃０の全体の制御を司る。ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎは、シングルコアのプロセッサを並列して接続した全てのＣＰＵを指している。ｎは０以上の整数である。ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎは、それぞれ専用のキャッシュメモリを有する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態１〜実施の形態３では、シングルコアのプロセッサであるＣＰＵが並列されている形態を例にあげて説明する。
【００２０】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎのワークエリアとして使用される。フラッシュＲＯＭコントローラ２０４は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃ｎの制御にしたがってフラッシュＲＯＭ２０５に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０５は、フラッシュＲＯＭコントローラ２０４の制御で書き込まれたデータを記憶する。データの具体例としては、通信装置１０１＃０を使用するユーザが通信モジュール２０８を通して取得した画像データ、映像データや、本実施の形態である通信方法を実行するプログラムなどである。また、フラッシュＲＯＭ２０５は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２１】
ディスプレイ２０６は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０６は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。キーボード２０７は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０７は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２２】
通信モジュール２０８は、基地局１０２を経由して携帯電話網に接続する。通信装置１０１＃０は、携帯電話網を経由して、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。また、通信装置１０１＃０は、携帯電話網を経由して、通信装置１０１＃１、通信装置１０１＃２と接続してもよい。
【００２３】
無線ＬＡＮ通信モジュール２０９は、基地局１０２を経由せずに他の通信装置１０１と接続する。たとえば、無線ＬＡＮ通信モジュール２０９は、ＩＥＥＥ  ８０２．１１にしたがって、通信装置１０１＃１、通信装置１０１＃２と接続する。また、無線ＬＡＮ通信モジュール２０９は、アドホックモードによって通信装置１０１＃１、通信装置１０１＃２と直接通信を行う。
【００２４】
（実施の形態１にかかる通信システム１００の機能）
次に、通信システム１００の機能について説明する。図３は、実施の形態１にかかる通信システム１００の機能を示すブロック図である。通信システム１００は、検出部３１１と、測定部３１２と、選択部３１３と、特定部３１４と、制御部３１５と、判定部３１６と、移行指示部３１７と、算出部３１８と、設定部３１９と、を含む。さらに、通信システム１００は、移行部３２０と、実行部３２１と、通信部３２２と、収集部３２３と、実行部３２４と、通信部３２５と、を含む。
【００２５】
この制御部となる機能（検出部３１１〜収集部３２３）は、記憶装置に記憶されたプログラムをたとえばＣＰＵ２０１＃０が実行することにより、その機能を実現する。また、実行部３２４と通信部３２５は、記憶装置に記憶されたプログラムを通信装置１０１＃１内のたとえばＣＰＵ３０７＃０〜ＣＰＵ３０７＃ｍのうち、ＣＰＵ３０７＃０が実行することにより、その機能を実現する。なお、ｍは０以上の整数である。また、記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０５などである。また、図３では検出部３１１〜収集部３２３がＣＰＵ２０１＃０の機能として表示されているが、ＣＰＵ２０１＃１〜ＣＰＵ２０１＃ｎの機能であってもよい。
【００２６】
また、通信装置１０１＃０は、ＲＡＭ２０３内のパラメタテーブル３０１と入れ子情報テーブル３０２にアクセス可能である。また、通信装置１０１＃０は、ソフトウェアとして、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）３０３と、計算ライブラリ３０４と、判定ライブラリ３０５と、収集ライブラリ３０６を実行する。なお、選択部３１３は、計算ライブラリ３０４に含まれ、特定部３１４〜設定部３１９は、判定ライブラリ３０５に含まれ、収集部３２３は収集ライブラリ３０６に含まれる。また、通信装置１０１＃０は、アプリ３３１、アプリ３３２を実行する。また、アプリ３３１とアプリ３３２は、それぞれ、通信処理３４１、通信処理３４２を含む。また、通信処理３４３は、通信装置１０１＃２からディスパッチされてきた処理であると想定する。
【００２７】
パラメタテーブル３０１は、自装置の基地局１０２への通信速度と、自装置とアドホック通信可能な他装置の通信速度と、を記憶するテーブルである。また、パラメタテーブル３０１は、自装置、他装置が通信処理３４１、通信処理３４２を実行可能な処理速度を記憶してもよい。なお、パラメタテーブル３０１の詳細は、図４にて後述する。
【００２８】
入れ子情報テーブル３０２は、自装置にディスパッチされた通信処理をさらに他装置へディスパッチする際に生成する入れ子情報を記憶するテーブルである。なお、入れ子情報テーブルの詳細は、図１４にて後述する。
【００２９】
ＯＳ３０３は、通信装置１０１＃０を制御するプログラムである。具体的には、ＯＳ３０３は、アプリ３３１、アプリ３３２が使用するライブラリを提供する。また、ＯＳ３０３は、ＲＯＭ２０２、ＲＡＭ２０３などのメモリの管理を行う。また、ＯＳ３０３は、ＣＰＵ２０１＃０が実行するアプリ３３１、アプリ３３２のスケジューリング処理を行う。
【００３０】
計算ライブラリ３０４は、パラメタテーブル３０１に格納する各フィールドを計算する機能を有する。判定ライブラリ３０５は、パラメタテーブル３０１に基づいて最適な通信路、または、通信処理３４１や通信処理３４２を高速に実行可能な通信装置１０１を判定する。また、判定ライブラリ３０５は、入れ子情報テーブル３０２への登録を行う。また、判定ライブラリ３０５は、入れ子情報テーブル３０２を参照して、通信処理を回収する。収集ライブラリ３０６は、アドホック通信可能な他装置に対して、通信速度と処理速度を問い合わせる。また、収集ライブラリ３０６は、問い合わせに対応する応答も行う。
【００３１】
検出部３１１は、自装置にて通信処理が実行されることを検出する機能を有する。たとえば、検出部３１１は、通信処理３４１が実行されることを検出する。また、検出部３１１は、基地局１０２を介さずに自装置に通信可能である他装置群のうち、移行元装置から移行された通信処理を検出してもよい。たとえば、検出部３１１は、通信装置１０１＃２から移行された通信処理３４３を検出する。なお、検出されたという情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３２】
測定部３１２は、検出部３１１によって検出された通信処理が実行される場合、自装置および基地局１０２間の通信となる第１通信路の間で、通信処理を行うときの第１通信速度を測定する機能を有する。たとえば、測定部３１２は、基地局１０２に対してＰｉｎｇを発行して基地局との通信速度Ｂ0＝１［Ｍｂｐｓ］を測定する。なお、第１通信速度の値は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３３】
選択部３１３は、基地局１０２を介さずに自装置に通信可能である他装置および自装置間の通信速度と他装置および基地局１０２間の通信速度とのうち遅い通信速度を、他装置を経由する第２通信路の第２通信速度として選択する機能を有する。たとえば、他装置となる通信装置１０１＃１および自装置となる通信装置１０１＃０の通信速度ｔが１０［Ｍｂｐｓ］であり、通信装置１０１＃１および基地局１０２間の通信速度Ｔが５［Ｍｂｐｓ］であることを想定する。このとき、選択部３１３は、遅い通信速度となる５［Ｍｂｐｓ］を選択する。なお、選択された第２通信路の第２通信速度の値は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３４】
特定部３１４は、第１および第２通信路の通信速度のうち速い通信路を、特定の通信路に特定する機能を有する。たとえば、特定部３１４は、第１通信路の第１通信速度が１［Ｍｂｐｓ］であり、第２通信路の第２通信速度が５［Ｍｂｐｓ］である場合、速い通信路となる第２通信路を、特定の通信路に特定する。また、特定部３１４は、第１通信路に含まれる通信装置１０１＃０の基地局１０２との通信速度と、第２通信路に含まれる通信装置１０１＃１の基地局１０２との通信速度とを比較する。また、特定部３１４は、第２通信路の通信速度が速い場合、第２通信路に含まれる通信装置１０１＃１を経由装置として特定する。
【００３５】
また、特定部３１４は、基地局１０２との通信路に他装置となる通信装置１０１が存在する数に基づいて、特定の通信路を特定してもよい。他装置となる通信装置１０１が存在する数をホップ数と呼称する。たとえば、通信装置１０１＃１を経由して基地局１０２と通信する通信路の通信速度が５［Ｍｂｐｓ］であり、通信装置１０１＃２と通信装置１０１＃１とを経由して基地局１０２と通信する通信路の通信速度が５［Ｍｂｐｓ］であると想定する。
【００３６】
このとき、特定部３１４は、ホップ数が小さい通信装置１０１＃１を経由して基地局１０２と通信する通信路を特定の通信路として特定する。また、この場合、特定部３１４は、通信装置１０１＃１を経由装置として特定する。なお、特定された情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３７】
制御部３１５は、特定部３１４によって第２通信路が特定の通信路に特定された場合、自装置および基地局１０２間で行われる通信を、他装置を経由して通信するように他装置を制御する機能を有する。たとえば、特定部３１４によって通信装置１０１＃１を経由する通信路が特定の通信路に特定された場合を想定する。このとき、制御部３１５は、自装置および基地局間で行われる通信を、通信装置１０１＃１を経由して通信するように通信装置１０１＃１を制御する。
【００３８】
判定部３１６は、第１通信速度と第２通信速度とに基づいて他装置に通信処理を移行するか否かを判定する機能を有する。たとえば、判定部３１６は、第２通信速度が第１通信速度より大きい値となる場合に、通信装置１０１＃１に通信処理３４１を移行すると判定する。また、判定部３１６は、自装置が通信処理を実行可能な第１処理速度および第１通信速度と、他装置が通信処理を実行可能な第２処理速度および第２通信速度とに基づいて判定してもよい。なお、判定された結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００３９】
移行指示部３１７は、判定部３１６によって通信処理を他装置に移行させると判定された場合、通信処理を他装置に移行するように移行部３２０に指示する機能を有する。たとえば、移行指示部３１７は、通信処理３４１を通信装置１０１＃１に移行するように移行部３２０に指示する。なお、指示を行ったという情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４０】
また、移行指示部３１７は、移行元装置から移行された通信処理を、さらに別の他装置に移行するように移行部３２０に指示してもよい。たとえば、移行指示部３１７は、通信装置１０１＃２から移行された通信処理３４３を、通信装置１０１＃１に移行するように移行部３２０に指示する。このとき、移行指示部３１７は、移行元装置となる通信装置１０１＃２の識別情報と移行先装置となる通信装置１０１＃１の識別情報と通信処理３４３の識別情報とを入れ子情報として、入れ子情報テーブル３０２に登録する。
【００４１】
算出部３１８は、特定の通信路が特定された場合、特定の通信路内に含まれる通信装置１０１ごとに、通信装置１０１から基地局１０２までの通信速度と通信装置１０１が通信処理を実行可能である処理速度とに基づいた評価値を算出する機能を有する。
【００４２】
たとえば、特定部３１４が、通信装置１０１＃１を経由する第２通信路を特定の通信路に特定した場合を想定する。また、通信装置１０１＃０から基地局１０２までの通信速度Ｔ0を１［Ｍｂｐｓ］であると想定し、通信装置１０１＃０が通信処理３４１を実行する処理速度Ｐ0を５［Ｍｂｐｓ］であると想定する。また、通信装置１０１＃０から通信装置１０１＃１を経由して基地局１０２までの通信速度Ｔ1を５［Ｍｂｐｓ］であると想定し、通信装置１０１＃１が通信処理３４１を実行する処理速度Ｐ1を４［Ｍｂｐｓ］であると想定する。
【００４３】
このとき、算出部３１８は、第２通信路内に含まれる通信装置１０１＃０と、通信装置１０１＃１に対して評価値を算出する。算出部３１８は、通信装置１０１＃０の評価値として、Ｍｉｎ（Ｔ0、Ｐ0）＝Ｍｉｎ（１、５）＝１［Ｍｂｐｓ］のように算出する。同様に、算出部３１８は、通信装置１０１＃１の評価値として、Ｍｉｎ（Ｔ1、Ｐ1）＝Ｍｉｎ（５、４）＝４［Ｍｂｐｓ］のように算出する。なお、算出結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【００４４】
設定部３１９は、算出部３１８によって算出された評価値群に基づいて、特定の通信路内に含まれる通信装置１０１群のうち通信処理を実行する実行対象装置を設定する機能を有する。たとえば、算出部３１８が、第２通信路内の通信装置１０１＃０の評価値を１［Ｍｂｐｓ］であると算出し、通信装置１０１＃１の評価値を４［Ｍｂｐｓ］であると算出した状態を想定する。このとき、設定部３１９は、評価値が大きい通信装置１０１＃１を実行対象装置に設定する。なお、設定された実行対象装置の識別情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４５】
移行部３２０は、移行指示部３１７からの指示にしたがって通信処理を他装置に移行する機能を有する。たとえば、移行部３２０は、通信処理３４１を通信装置１０１＃１に移行する。具体的に、移行部３２０は、ＲＯＭ２０２、フラッシュＲＯＭ２０５等に格納されている通信処理３４１の実行コードと、通信処理３４１の実行時情報となるＣＰＵ２０１＃０のレジスタの値等を送信する。なお、移行を行ったという情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４６】
また、移行部３２０は、他装置から移行した通信処理の実行結果を回収してもよい。たとえば、移行部３２０は、通信装置１０１＃１へ移行した通信処理３４１の実行結果を回収してもよい。なお、回収結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶され、通信処理を発生させたアプリによって読み込まれる。
【００４７】
実行部３２１、実行部３２４は、通信処理を実行する機能を有する。たとえば、実行部３２１は通信処理３４２を実行し、実行部３２４は通信処理３４１を実行する。なお、通信処理を実行したという情報は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４８】
通信部３２２、通信部３２５は、第１通信速度で通信処理を行う他装置からの要求に基づいて、基地局１０２との間の第２通信速度と第２処理速度とを他装置へ通信する機能を有する。たとえば、通信部３２２は、通信装置１０１＃１からの要求に基づいて、基地局１０２との間の第２通信速度Ｔ0と通信装置１０１＃０の第２処理速度Ｐ0とを通信装置１０１＃１へ通信する。なお、通信結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶されてもよい。
【００４９】
収集部３２３は、第１通信速度に基づいて少なくとも一の他装置から基地局１０２および装置の第２通信速度と他装置に含まれる第２ＣＰＵの第２処理速度とを収集する機能を有する。たとえば、収集部３２３は、通信装置１０１＃１の通信速度Ｔ1と処理速度Ｐ1を収集する。収集結果は、パラメタテーブル３０１に格納される。
【００５０】
図４は、パラメタテーブル３０１の記憶内容の一例を示す説明図である。図４では、通信装置１０１＃０上のパラメタテーブル３０１＃０の記憶内容の一例を示している。パラメタテーブル３０１は、通信装置名、基地局−通信装置間の通信速度Ｂ、通信装置間の通信速度ｔ、基地局−通信装置間の最良通信速度Ｔ、というフィールドを含む。さらに、パラメタテーブル３０１は、ＣＰＵの通信処理における最大処理速度ｍ、ＣＰＵアイドル率ｃ、ＣＰＵの通信処理における処理速度Ｐ、経由装置Ｖ、ホップ数Ｈというフィールドを含む。以下、説明の簡略化のため、通信装置名フィールドを除く各フィールドを、Ｂ、ｔ、Ｔ、ｍ、ｃ、Ｐ、Ｖ、Ｈというように、省略して記述する。
【００５１】
なお、以下の説明で、ｔ以外の変数に接尾記号“０”〜“２”が付与された場合は、通信装置１０１＃０〜通信装置１０１＃２に対応している変数であることを示す。たとえば、Ｂ0は、通信装置１０１＃０の基地局−通信装置間の通信速度であることを示しており、通信装置名フィールドが“通信装置１０１＃０”であるレコードのＢフィールドに格納されている。また、通信装置間の通信速度ｔには、接尾記号として“０１”、“０２”、“１２”が付与されている。これらの接尾記号は、対応する通信装置１０１間の通信速度であることを示している。たとえば、ｔ01は、通信装置１０１＃０と通信装置１０１＃１間の通信速度であり、通信装置名フィールドが“通信装置１０１＃１”であるレコードのｔフィールドに格納されていることを示している。
【００５２】
通信装置名フィールドには、自装置の名称、または自装置からアドホック接続が可能な通信装置の名称が格納される。Ｂフィールドには、基地局１０２から通信装置１０１までの通信速度が格納される。たとえば、通信装置１０１＃０は、基地局１０２との通信速度を計測し１［Ｍｂｐｓ］であった場合、Ｂ0＝１となり、通信装置１０１＃０のＢフィールドに１を格納する。ｔフィールドには、通信装置１０１間の通信速度が格納される。たとえば、通信装置１０１＃０は、通信装置１０１＃１との通信速度を測定し、１０［Ｍｂｐｓ］であった場合、ｔ01＝１０となり、通信装置１０１＃１のｔフィールドに、１０を格納する。
【００５３】
Ｔフィールドには、基地局−通信装置間の複数の通信路のうち、最良な通信路の通信速度が格納される。たとえば、通信装置１０１＃０は、基地局１０２と直接通信する通信路１と、通信装置１０１＃１を経由して基地局１０２と通信する通信路２があった場合を想定する。このとき、通信装置１０１＃０は、通信路１と通信路２の通信速度、または各通信路内の処理速度等に基づいて、最良な通信路の通信速度を設定する。なお、Ｔフィールドの具体的な算出例については、図５にて後述する。
【００５４】
ｍフィールドには、ＣＰＵの通信処理における最大処理速度が格納されている。たとえば、通信装置１０１＃０が１秒間に最大で１０［Ｍビット］の情報を処理可能である場合、ｍ0＝１０となり、通信装置１０１＃０のｍフィールドに、１０が設定される。ｃフィールドには、ＣＰＵのアイドル率が格納されている。たとえば、通信装置１０１＃０が他のソフトウェア等を実行しており、ＣＰＵのアイドル率が５０［％］である場合、ｃ0＝５０となり、通信装置１０１＃０は、通信装置１０１＃０のｃフィールドに５０を格納する。
【００５５】
Ｐフィールドには、ＣＰＵの通信処理における処理速度が格納されている。たとえば、通信装置１０１＃０が現在１秒間に５［Ｍビット］の情報を処理可能である場合、Ｐ0＝５となり、通信装置１０１＃０は、通信装置１０１＃０のＰフィールドに５を格納する。なお、Ｐフィールドの具体的な算出例については、図５にて後述する。
【００５６】
Ｖフィールドには、自装置が基地局１０２と直接通信を行わず、該当の通信装置１０１を経由した通信路にて基地局１０２と通信するか否かを示す値が格納されている。たとえば、通信装置１０１＃０が通信装置１０１＃１を経由した通信路にて基地局１０２と通信を行う場合、通信装置１０１＃０は、通信装置１０１＃１のＶフィールドに、通信装置１０１＃１を経由して通信を行うことを示す１を格納する。また、パラメタテーブル３０１＃０にＶ1＝１となっている場合、通信装置１０１＃１は、基地局１０２と直接通信を行っていてもよいし、通信装置１０１＃０以外の他の装置を経由して基地局１０２と通信を行っていてもよい。通信装置１０１＃１が基地局１０２と直接通信を行うか否かは、パラメタテーブル３０１＃１に記載されている。
【００５７】
Ｈフィールドには、基地局１０２との通信路に、自装置を除いた通信装置１０１が存在する数が格納されている。たとえば、通信装置１０１＃０が通信装置１０１＃１を経由して基地局１０２と通信している場合、Ｈ0＝１となり、通信装置１０１＃０は、通信装置１０１＃０のＨフィールドに１を格納する。
【００５８】
なお、パラメタテーブル３０１＃０のうち、通信装置１０１＃０に関するレコードのうち、ｍについては、通信装置１０１＃０が自装置の仕様、または設定値より取得する。Ｂ、ｃについては、通信装置１０１＃０が計測の結果を設定する。Ｔ、Ｐ、Ｖ、Ｈについては、通信装置１０１＃０が図５に示す算出方法により得た結果を設定する。
【００５９】
また、通信装置１０１＃０の他装置に関するレコードのＴ、Ｐ、Ｈについては、通信装置１０１＃０が、基地局を介さずに自装置に通信可能である他装置に問い合わせ、通信装置１０１＃０が問い合わせ応答処理を行い取得する。ｔについては、通信装置１０１＃０が計測した結果を設定する。Ｖについては、初期値として０が設定されており、通信装置１０１＃０が自装置のＴを算出した結果を用いて設定する。
【００６０】
図５は、パラメタテーブル３０１の算出例を示す説明図である。符号５０１で示す数式は、Ｔ、Ｐを算出する数式を示している。符号５０２で示す説明図は、符号５０１で示す数式を、図４で示すパラメタテーブル３０１にて適用した状態を示している。通信装置１０１＃ｘの最良通信速度Ｔxは、下記（１）式によって算出される。
【００６１】
Ｔx＝Ｍａｘ（Ｂx、Ｍｉｎ（Ｔy、ｔxy）、Ｍｉｎ（Ｔz、ｔxz）、…）  …（１）
【００６２】
なお、接尾記号ｙ、接尾記号ｚは、通信装置１０１＃ｘと基地局１０２を介さずに通信可能な通信装置１０１＃ｙ、通信装置１０１＃ｚを示している。また、通信装置１０１＃ｘの処理速度Ｐは、下記（２）式によって算出される。
【００６３】
Ｐx＝ｍx＊ｃx／１００  …（２）
【００６４】
また、経由装置Ｖフィールドは、（１）式によるＭａｘ関数の引数群を評価値として、最も大きい評価値に対応する装置に１が設定される。以下、Ｍａｘ関数の引数を経由装置評価値と呼称する。具体的には、自装置が通信装置１０１＃ｘである場合、通信装置１０１＃ｘの経由装置評価値は、Ｂxとなる。同様に、通信装置１０１＃ｙの経由装置評価値はＭｉｎ（Ｔy、ｔxy）となり、通信装置１０１＃ｚの経由装置評価値はＭｉｎ（Ｔz、ｔxz）となる。また、自装置が基地局１０２と直接通信する場合は、経由装置が存在しない。したがって、通信装置１０１＃ｘは、（１）式によるＭａｘ関数の引数群において、自装置のＢxが最も大きい値となる場合、Ｖフィールドを変更しなくてよい。
【００６５】
符号５０２で示す説明図では、図４で設定されていた通信装置１０１＃０のＴおよびＰの算出例、通信装置１０１＃０〜通信装置１０１＃２のＶの設定例を示す。通信装置１０１＃０は、（１）式、（２）式よりＴ0、Ｐ0を以下のように算出する。
【００６６】
Ｔ0＝Ｍａｘ（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））
⇔Ｔ0＝Ｍａｘ（１、Ｍｉｎ（１０、５）、Ｍｉｎ（１０、３））
⇔Ｔ0＝Ｍａｘ（１、５、３）
⇔Ｔ0＝５［Ｍｂｐｓ］
【００６７】
Ｐ0＝ｍ0＊ｃ0／１００
⇔Ｐ0＝１０＊５０／１００＝５［Ｍｂｐｓ］
【００６８】
同様に、通信装置１０１＃０は、Ｖ1、Ｖ2を設定する。通信装置１０１＃０の経由装置評価値＝１、通信装置１０１＃１の経由装置評価値＝５、通信装置１０１＃２の経由装置評価値＝３、となるため、通信装置１０１＃０は、経由装置を通信装置１０１＃１に特定する。具体的には、通信装置１０１＃０は、通信装置１０１＃１のＶフィールドに１を格納する。
【００６９】
図６は、最良装置の設定例を示す説明図である。図６では、通信システム１００が、図４で示したパラメタテーブル３０１の状態の場合に、最良装置の設定例を示している。また、最良装置とは、アプリケーションソフトウェア（以下、アプリと称する）６０１において、アプリ６０１に含まれる通信処理６０２を実行する実行対象装置である。最良装置の設定方法は、自装置と経由装置のうち、最良装置を判断する評価値となるＭｉｎ（Ｔ、Ｐ）が最も大きい値となる装置に設定する。以下、最良装置を判断する評価値を最良装置評価値と呼称する。図６の例では、通信装置１０１＃０は、自装置となる通信装置１０１＃０の最良装置評価値を、以下のように算出する。
【００７０】
Ｍｉｎ（Ｔ0、Ｐ0）＝Ｍｉｎ（５、５）＝５
【００７１】
また、通信装置１０１＃０は、経由装置に特定された通信装置１０１＃１の最良装置評価値を、以下のように算出する。
【００７２】
Ｍｉｎ（Ｔ1、Ｐ1）＝Ｍｉｎ（５、４）＝４
【００７３】
以上より、最良装置は、通信装置１０１＃０となる。したがって、パラメタテーブル３０１＃０の状態における通信装置１０１＃０は、アプリの通信処理を自装置にて行い、通信処理によって発生する基地局１０２との通信を、通信装置１０１＃１を経由して行う。
【００７４】
以下、図７〜図１１について、図４、図５で示したパラメタテーブル３０１を用いて、通信システム１００が最良の通信路を選択する様子を説明する。図７〜図１１では、通信装置１０１＃０が、通信処理６０２を含むアプリ６０１を実行する状態を想定する。また、図７〜図１１に示す通信装置１０１は、基地局１０２との通信速度Ｂが１［Ｍｂｐｓ］より大きい場合には、他の装置を経由する通信路を検索せず、自装置と基地局１０２の通信を行う。
【００７５】
図７は、通信装置１０１＃０の速度低下が起こっていない状態を示す説明図である。図７の状態は、基地局１０２と通信装置１０１＃０〜通信装置１０１＃２の通信速度Ｂが、それぞれ、Ｂ0＝５［Ｍｂｐｓ］、Ｂ1＝３［Ｍｂｐｓ］、Ｂ2＝５［Ｍｂｐｓ］となる。また、通信装置１０１間の通信速度ｔが、それぞれ、ｔ01＝ｔ02＝ｔ12＝１０［Ｍｂｐｓ］となる。
【００７６】
また、パラメタテーブル３０１＃０の自装置に関する値として、Ｔ0＝５［Ｍｂｐｓ］、ｍ0＝１０［Ｍｂｐｓ］、ｃ0＝５０［％］、Ｐ0＝５［Ｍｂｐｓ］、Ｂ0＝５［Ｍｂｐｓ］が設定されている。また、Ｈフィールドに関しては、通信装置１０１＃０で基地局１０２と直接通信を行っているため、Ｈ0＝０となる。なお、ｔ01とｔ02に関しては、図７の状態では基地局１０２との通信速度が充分に確保されているため、パラメタテーブル３０１＃０には格納されていなくてよい。
【００７７】
同様に、パラメタテーブル３０１＃１には、Ｔ1＝３［Ｍｂｐｓ］、ｍ1＝１０［Ｍｂｐｓ］、ｃ1＝５０［％］、Ｐ1＝５［Ｍｂｐｓ］、Ｂ1＝３［Ｍｂｐｓ］、Ｈ1＝０が設定されている。また、パラメタテーブル３０１＃２には、Ｔ2＝５［Ｍｂｐｓ］、ｍ2＝１０［Ｍｂｐｓ］、ｃ2＝４０［％］、Ｐ2＝４［Ｍｂｐｓ］、Ｂ2＝５［Ｍｂｐｓ］、Ｈ2＝０が格納されている。
【００７８】
図７の状態では、Ｂ0＝５［Ｍｂｐｓ］であり、基地局１０２との通信速度が充分であるため、通信装置１０１＃０が最良装置となり、通信装置１０１にて、通信処理６０２を行う。なお、基地局１０２との通信速度が充分である場合、通信装置１０１＃０は、他の装置のＴ、Ｐ、Ｈの問い合わせを行わない。
【００７９】
図８は、通信装置１０１＃０の通信速度低下時における問い合わせ動作を示す説明図である。図８で示す通信システム１００は、図７の状態から、Ｂ0が低下し、１［Ｍｂｐｓ］になった状態を示している。通信速度が低下したため、通信装置１０１＃０は、周囲の通信装置１０１に対して、Ｔ、Ｐ、Ｈを問い合わせる。
【００８０】
具体的には、通信装置１０１＃０は、通信装置１０１＃１と通信装置１０１＃２に問い合わせを行う。問い合わせの結果、通信装置１０１＃１は、Ｔ1、Ｐ1、Ｈ1を通信装置１０１＃０に通知する。同様に、通信装置１０１＃２は、Ｔ2、Ｐ2、Ｈ2を通信装置１０１＃０に通知する。
【００８１】
通知を受けた通信装置１０１＃０は、Ｔ1、Ｐ1、Ｔ2、Ｐ2を基に、Ｔ0、Ｐ0、Ｖ0〜Ｖ2を算出し、パラメタテーブル３０１＃０に格納する。具体的な算出結果として、通信装置１０１＃０は、（１）式にしたがってＴ0を得る。
【００８２】
Ｔ0＝Ｍａｘ（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））
⇔Ｔ0＝Ｍａｘ（１、Ｍｉｎ（３、１０）、Ｍｉｎ（５、１０））
⇔Ｔ0＝Ｍａｘ（１、３、５）＝５［Ｍｂｐｓ］
【００８３】
同様に、通信装置１０１＃０は、（２）式にしたがってＰ0を得る。
【００８４】
Ｐ0＝ｍ0＊ｃ0／１００
⇔Ｐ0＝１０＊５０／１００＝５［Ｍｂｐｓ］
【００８５】
また、通信装置１０１＃０は、経由装置評価値群（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））＝（１、３、５）のうち、最も大きい評価値となる通信装置１０１＃２を経由装置に特定する。結果、通信装置１０１＃０は、パラメタテーブル３０１のＶに関して、Ｖ2＝１、Ｖ0＝Ｖ1＝０を格納する。
【００８６】
図９は、通信装置１０１＃０の通信速度低下時における経路選択方法を示す説明図である。図９で示す通信システム１００は、Ｂ0が低下し、通信装置１０１＃０が、Ｔ1、Ｐ1、Ｔ2、Ｐ2に基づいて、Ｔ0、Ｐ0、Ｖ0〜Ｖ2を算出した状態である。
【００８７】
算出後、通信装置１０１＃０は、最良装置を設定する。図９における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ2、Ｐ2））＝（Ｍｉｎ（５、５）、Ｍｉｎ（５、４））＝（５、４）となる。以上より、自装置と経由装置のうち、最も大きい最良装置評価値は通信装置１０１＃０となるため、通信装置１０１＃０は、最良装置を通信装置１０１＃０に設定する。
【００８８】
これにより、通信システム１００は、通信処理６０２を通信装置１０１＃０で行う。また、通信装置１０１＃０からみた経由装置がＶ2＝１より通信装置１０１＃２に特定されているため、選択される通信路は、通信装置１０１＃０から、通信装置１０１＃２を経由して基地局１０２までの通信路となる。これにより、通信システム１００は、通信装置１０１＃０と基地局１０２が直接通信する通信路より、高速な通信路を用いて通信処理６０２を行うことができる。
【００８９】
図１０は、通信装置１０１＃０の処理速度低下時における問い合わせ動作を示す説明図である。図１０で示す通信システム１００は、図９で示した通信システム１００の状態から、ＣＰＵアイドル率ｃが５０［％］から１０［％］まで低下した場合を示している。このとき、通信装置１０１＃０は、再度、最良装置を設定する。また、通信速度に関しては図９の状態から変化していないため、Ｔ0＝５［Ｍｂｐｓ］となり、経由装置は通信装置１０１＃２に特定されたままである。
【００９０】
初めに、ｃ0が変化したため、通信装置１０１は、（２）式より、新たなＰ0を得る。
【００９１】
Ｐ0＝ｍ0＊ｃ0／１００
⇔Ｐ0＝１０＊１０／１００＝１［Ｍｂｐｓ］
【００９２】
したがって、図１０における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ2、Ｐ2））＝（Ｍｉｎ（５、１）、Ｍｉｎ（５、４））となる。以上より、自装置と経由装置のうち最も大きい最良装置評価値は通信装置１０１＃２となるため、最良装置は通信装置１０１＃２に設定される。最良装置にて通信処理６０２を行うため、通信装置１０１＃０は、通信装置１０１＃２に通信処理６０２をディスパッチする。
【００９３】
これにより、通信システム１００は、ＣＰＵの処理能力に空きが少ない状態である通信装置１０１＃０で通信処理６０２を行わず、ＣＰＵの処理能力に空きのある通信装置１０１＃２で通信処理６０２を行うことで、負荷を分散することができる。また、ＣＰＵの処理能力に空きがなくなった場合、実行中の処理が低速化してしまう可能性がある。図１０で示す通信システム１００は、処理能力に空きのある通信装置１０１に通信処理６０２をディスパッチすることで、通信処理６０２の処理速度の低下を防ぐことができる。
【００９４】
図１１は、通信装置１０１間の通信速度低下時における経路選択方法を示す説明図である。図１１で示す通信システム１００は、図１０で示した通信システム１００の状態から、通信装置１０１＃２が通信装置１０１＃０および通信装置１０１＃１から離れた結果、ｔ02およびｔ12が１０［Ｍｂｐｓ］から１［Ｍｂｐｓ］まで低下した状態を示している。
【００９５】
ｔ02とｔ12が変化したため、通信装置１０１＃０は、（１）式により、Ｔ0を再計算する。
【００９６】
Ｔ0＝Ｍａｘ（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））
⇔Ｔ0＝Ｍａｘ（１、Ｍｉｎ（３、１０）、Ｍｉｎ（５、１））
⇔Ｔ0＝Ｍａｘ（１、３、１）＝３［Ｍｂｐｓ］
【００９７】
なお、Ｐ0の値は、ｃ0が変化していないので、１［Ｍｂｐｓ］のままである。続けて、通信装置１０１＃０は、（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））＝（１、３、１）のうち、最も大きい値である３に対応する通信装置１０１＃１を経由装置に特定する。結果、通信装置１０１＃０は、パラメタテーブル３０１のＶに関して、Ｖ1＝１、Ｖ0＝Ｖ2＝０を格納する。
【００９８】
続けて、通信装置１０１＃０は、自装置と経由装置に対して最良装置評価値を算出し、最良装置を設定する。図１１における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ1、Ｐ1））＝（Ｍｉｎ（３、１）、Ｍｉｎ（３、５））となる。
【００９９】
以上より、自装置と経由装置のうち最も大きい最良装置評価値は通信装置１０１＃１となるため、最良装置は通信装置１０１＃１に設定される。最良装置が変更されたため、通信装置１０１＃２にディスパッチされていた通信処理６０２を回収し、通信装置１０１＃１に通信処理６０２をディスパッチする。このように、通信システム１００は、通信路が変更した場合に、最速な通信路を再度検索し、最速な通信路内の最良装置で通信処理６０２を実行するため、通信処理６０２を効率よく実行することができる。
【０１００】
図１２は、経由装置評価値が同値である通信装置が複数存在する場合の経路選択方法を示す説明図である。図１２で示す通信システム１００は、通信装置１０１＃２が既に通信装置１０１＃１を経由してアプリ１２０１を実行している。この状態で、通信装置１０１＃０の通信速度Ｂが低下した状態を想定している。
【０１０１】
また、基地局１０２と通信装置１０１＃０〜通信装置１０１＃２の通信速度Ｂが、それぞれ、Ｂ0＝１［Ｍｂｐｓ］、Ｂ1＝５［Ｍｂｐｓ］、Ｂ2＝１［Ｍｂｐｓ］となる。また、通信装置１０１間の通信速度ｔが、それぞれ、ｔ01＝ｔ02＝ｔ12＝１０［Ｍｂｐｓ］となる。パラメタテーブル３０１＃０の、自装置に関する値として、ｍ0＝１０［Ｍｂｐｓ］、ｃ0＝４０［％］、Ｂ0＝１［Ｍｂｐｓ］が設定されている。また、Ｐ0については、（２）式より、４［Ｍｂｐｓ］が設定されている。
【０１０２】
通信速度Ｂが低下しているため、通信装置１０１＃０は、通信装置１０１＃１と通信装置１０１＃２に問い合わせ、問い合わせ応答処理を行い、経由装置評価値を算出する。問い合わせの結果、通信装置１０１＃０が受け取る値は、通信装置１０１＃１からＴ1＝５［Ｍｂｐｓ］、Ｐ1＝５［Ｍｂｐｓ］、Ｈ1＝０であり、通信装置１０１＃２からＴ2＝５［Ｍｂｐｓ］、Ｐ2＝５［Ｍｂｐｓ］、Ｈ2＝１である。これより、通信装置１０１＃０は、（１）式より、Ｔ0を以下のように算出する。
【０１０３】
Ｔ0＝Ｍａｘ（１、Ｍｉｎ（５、１０）、Ｍｉｎ（５、１０））＝５
【０１０４】
また、通信装置１０１＃０の経由装置評価値は、Ｂ0＝１となる。同様に、通信装置１０１＃１の経由装置評価値は、Ｍｉｎ（Ｔ1、ｔ01）＝Ｍｉｎ（５、１０）＝５となり、通信装置１０１＃２の経由装置評価値は、Ｍｉｎ（Ｔ2、ｔ02）＝Ｍｉｎ（５、１０）＝５となる。
【０１０５】
通信装置１０１＃１と通信装置１０１＃２の経由装置評価値が同値となるため、通信装置１０１＃０は、ホップ数Ｈが小さい方を経由装置に特定する。図１２の場合、Ｈ1＝０、Ｈ2＝１となるため、通信装置１０１＃０は、経由装置を通信装置１０１＃１に設定する。なお、通信装置１０１＃１を経由装置に特定したため、通信装置１０１＃０は、Ｈ0をＨ1＋１＝１に設定する。
【０１０６】
経由装置の特定後、通信装置１０１＃０は、最良装置を設定する。図１２における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ1、Ｐ1））＝（Ｍｉｎ（５、４）、Ｍｉｎ（５、５））＝（４、５）となる。以上より、自装置と経由装置のうち最も大きい最良装置評価値は通信装置１０１＃１となるため、通信装置１０１＃０は、最良装置を通信装置１０１＃１に設定する。このように、通信システム１００は、ホップ数を参照することで、通信路が最も短い経路を選択することができる。
【０１０７】
図１３は、入れ子情報テーブル３０２が生成される場合の通信システム１００の状態を示す説明図である。図１３で示す通信システム１００は、通信装置１０１＃１が既に通信装置１０１＃２を経由して通信を行っている。この状態で、通信装置１０１＃０の通信速度Ｂが低下した状態を想定している。具体的な通信速度として、基地局１０２と通信装置１０１＃０〜通信装置１０１＃２の通信速度Ｂが、それぞれ、Ｂ0＝Ｂ1＝１［Ｍｂｐｓ］、Ｂ2＝５［Ｍｂｐｓ］となる。また、通信装置１０１間の通信速度ｔが、それぞれ、ｔ01＝ｔ12＝１０［Ｍｂｐｓ］となり、ｔ02＝１［Ｍｂｐｓ］となる。
【０１０８】
パラメタテーブル３０１＃０の、自装置に関する値として、Ｔ0＝５［Ｍｂｐｓ］、ｍ0＝１０［Ｍｂｐｓ］、ｃ0＝３０［％］、Ｐ0＝３［Ｍｂｐｓ］、Ｂ0＝１［Ｍｂｐｓ］が設定されている。また、通信装置１０１＃０は、通信装置１０１＃１と通信装置１０１＃２に問い合わせ、Ｔ0＝５［Ｍｂｐｓ］を算出する。
【０１０９】
また、通信装置１０１＃０は、経由装置評価値群（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））＝（１、５、１）のうち、最も大きい評価値となる通信装置１０１＃１を経由装置に特定する。なお、通信装置１０１＃１を経由装置に特定したため、通信装置１０１＃０は、Ｈ0をＨ1＋１＝２に設定する。
【０１１０】
同様に、図１３における最良装置評価値群は、（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ1、Ｐ1））＝（Ｍｉｎ（５、３）、Ｍｉｎ（５、４））＝（３、４）となる。以上より、自装置と経由装置のうち、最も大きい最良装置評価値は通信装置１０１＃１となるため、通信装置１０１＃０は、最良装置を通信装置１０１＃１に設定する。これにより、通信装置１０１＃０は通信処理６０２を通信装置１０１＃１にディスパッチする。
【０１１１】
通信処理６０２のディスパッチを受けた通信装置１０１＃１は、最良装置の設定を行う。図１３における、通信装置１０１＃１での最良装置評価値群は、（Ｍｉｎ（Ｔ1、Ｐ1）、Ｍｉｎ（Ｔ2、Ｐ2））＝（Ｍｉｎ（５、４）、Ｍｉｎ（５、５））＝（４、５）となる。以上より、最も大きい最良装置評価値は通信装置１０１＃２となるため、通信装置１０１＃０は、最良装置を通信装置１０１＃２設定する。これにより、通信装置１０１＃１は通信処理６０２を通信装置１０１＃２にディスパッチする。
【０１１２】
これにより、通信装置１０１＃１は、ディスパッチされた通信処理６０２をさらに他の装置にディスパッチすることになったため、入れ子情報テーブル３０２＃１に入れ子情報を格納する。入れ子情報テーブル３０２＃１の具体例は、図１４にて後述する。
【０１１３】
図１４は、入れ子情報テーブル３０２の記憶内容の一例を示す説明図である。図１４では、図１３における通信システム１００にて生成されたパラメタテーブル３０１の構造と記憶内容の一例を示している。
【０１１４】
入れ子情報テーブル３０２は、処理識別子、ディスパッチ元識別子、ディスパッチ先識別子という３つのフィールドを含む。処理識別子フィールドには、ディスパッチされる通信処理６０２を一意に特定できる識別情報が格納される。通信処理６０２を一意に特定できる識別情報としては、通信処理６０２の関数名や関数の先頭アドレス、通信処理６０２に採番された番号等である。ディスパッチ元識別子フィールドには、ディスパッチ元の通信装置１０１が一意に特定できる識別情報が格納される。
【０１１５】
ディスパッチ先識別子フィールドには、ディスパッチ先の通信装置１０１が一意に特定できる識別情報が格納される。なお、通信装置１０１が一意に特定できる識別情報としては、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスや、ＳＩＭ（Ｓｕｂｓｃｒｉｂｅｒ  Ｉｄｅｎｔｉｔｙ  Ｍｏｄｕｌｅ）  ＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）等がある。
【０１１６】
たとえば、図１４で示す通信システム１００は、アプリ６０１の識別情報が“１１１１”であることを想定する。さらに、通信装置１０１の識別子としてＭＡＣアドレスを採用し、通信装置１０１＃０のＭＡＣアドレスが“００−００−００−００−００−００”である。同様に、通信装置１０１＃１のＭＡＣアドレスが“００−００−００−００−００−０１”であり、通信装置１０１＃２のＭＡＣアドレスが“００−００−００−００−００−０２”であることを想定する。
【０１１７】
このとき、入れ子情報テーブル３０２＃１のレコードには、処理識別子フィールドに“１１１１”が格納される。また、入れ子情報テーブル３０２＃１のレコードに、ディスパッチ元識別子フィールドに“００−００−００−００−００−００”、ディスパッチ先識別子フィールドに“００−００−００−００−００−０２”が格納される。
【０１１８】
図１５は、通信システム１００の処理遷移を示す説明図である。図１５では、図１６〜図２３で示す処理群の遷移図を示している。また、図１５〜図２３で示す通信システム１００では、図６で示した設定と等しく、通信装置１０１＃０が通信処理６０２を含むアプリ６０１を実行する状態を想定する。
【０１１９】
通信装置１０１＃０は、周期的にパラメタ更新処理を実行する。パラメタ更新処理内にて、通信装置１０１＃０は、パラメタの問い合わせを通信装置１０１＃１と通信装置１０１＃２に行う。通信装置１０１＃１と通信装置１０１＃２は、パラメタの問い合わせに対応する問い合わせ応答処理を実行する。
【０１２０】
また、通信装置１０１＃０は、アプリ６０１からの通信要求により通信処理実行処理を実行する。通信処理実行処理内にて、通信装置１０１＃０は、通信処理のディスパッチ受付要求を通信装置１０１＃１と通信装置１０１＃２のうち、最良装置となった装置に行う。たとえば、通信装置１０１＃１が通信装置１０１＃０における最良装置となった場合、要求を受け付けた通信装置１０１＃１は、ディスパッチ応答処理を行う。通信装置１０１＃１にてディスパッチ応答処理が終了した場合、通信装置１０１＃１は、ディスパッチ元となる通信装置１０１＃０に実行結果を通知する。実行結果の受付により通信装置１０１＃０は、通信処理実行結果応答処理を実行する。
【０１２１】
また、ディスパッチ応答処理にて、通信装置１０１＃１における最良装置が通信装置１０１＃２となった場合、通信装置１０１＃１は、通信処理のディスパッチ受付要求を通信装置１０１＃２に行う。要求を受け付けた通信装置１０１＃２は、ディスパッチ応答処理を行う。通信装置１０１＃２にてディスパッチ応答処理が終了した場合、通信装置１０１＃２は、ディスパッチ元となる通信装置１０１＃１に実行結果を通知する。実行結果の受付により通信装置１０１＃１は、ディスパッチ元となる通信装置１０１＃０に実行結果を通知する。
【０１２２】
また、パラメタ更新処理時にアプリ６０１から通信要求がある場合、通信装置１０１＃０は、通信処理再実行処理を実行する。通信装置１０１＃０は、通信処理６０２のディスパッチ受付要求を通信装置１０１＃１と通信装置１０１＃２のうち、最良装置となった装置に行う。また、最良装置が前回から変更された場合、変更前の最良装置に対して、通信処理６０２の回収要求を通知する。たとえば、変更前の最良装置が通信装置１０１＃１である場合、通信処理６０２の回収要求を受け付けた通信装置１０１＃１は、通信処理回収応答処理を実行する。
【０１２３】
また、通信処理回収応答処理にて、通信装置１０１＃１における最良装置が通信装置１０１＃２である場合、通信装置１０１＃１は、通信装置１０１＃２に通信処理６０２の回収要求を通知する。回収要求を受け付けた通信装置１０１＃２は、通信処理回収応答処理を実行する。
【０１２４】
図１６は、パラメタ更新処理および問い合わせ応答処理を示すフローチャートである。ステップＳ１６０１〜ステップＳ１６０４、ステップＳ１６０６〜ステップＳ１６１２がパラメタ更新処理となり、ステップＳ１６０５が問い合わせ応答処理となる。
【０１２５】
通信装置１０１＃０は、パラメタテーブル３０１＃０をクリアする（ステップＳ１６０１）。クリア後、通信装置１０１＃０は、通信速度Ｂを測定し、パラメタテーブル３０１＃０に登録する。登録後、通信装置１０１＃０は、通信速度Ｂが閾値以下か否かを判断する（ステップＳ１６０３）。通信速度Ｂが閾値以下である場合（ステップＳ１６０３：Ｙｅｓ）、通信装置１０１＃０は、周囲の通信装置に最良通信速度Ｔと処理速度Ｐとホップ数Ｈを問い合わせる（ステップＳ１６０４）。問い合わせを受けた通信装置１０１＃１と通信装置１０１＃２は、自装置の最良通信速度Ｔと処理速度Ｐとホップ数Ｈを、問い合わせ元装置に送信する（ステップＳ１６０５）。送信後、通信装置１０１＃１と通信装置１０１＃２は、問い合わせ応答処理を終了する。
【０１２６】
通信装置１０１＃０は、受け付けた最良通信速度Ｔと処理速度Ｐとホップ数Ｈをパラメタテーブル３０１＃０に登録する（ステップＳ１６０６）。登録後、通信装置１０１＃０は、応答があった通信装置１０１との通信速度ｔを測定し、パラメタテーブル３０１＃０に登録する（ステップＳ１６０７）。
【０１２７】
登録後、または通信速度Ｂが閾値より大きい場合（ステップＳ１６０３：Ｎｏ）、通信装置１０１＃０は、自装置の最良通信速度Ｔと処理速度Ｐを算出する（ステップＳ１６０８）。算出後、通信装置１０１＃０は、経由装置特定処理を実行する（ステップＳ１６０９）。経由装置特定処理の詳細については、図１７にて後述する。実行後、通信装置１０１＃０は、算出された最良通信速度Ｔと処理速度Ｐをパラメタテーブル３０１＃０に登録する（ステップＳ１６１０）。登録後、通信装置１０１＃０は、アプリ６０１からの通信要求があったか否かを判断する（ステップＳ１６１１）。
【０１２８】
通信要求があった場合（ステップＳ１６１１：Ｙｅｓ）、通信装置１０１＃０は、通信処理再実行処理を実行する（ステップＳ１６１２）。通信処理再実行処理を実行後、または通信要求がない場合（ステップＳ１６１１：Ｎｏ）、通信装置１０１＃０は、パラメタ更新処理を終了する。
【０１２９】
図１７は、経由装置特定処理を示すフローチャートである。経由装置特定処理は、通信装置１０１＃０〜通信装置１０１＃２にて実行されるが、図１７の説明では、説明の簡略化のため、通信装置１０１＃０を実行主体として説明を行う。
【０１３０】
通信装置１０１＃０は、自装置のパラメタテーブル３０１から、経由装置評価値となる自装置のＢと他装置のＭｉｎ（Ｔ、ｔ）のうち、最も値が大きいレコードを選択する（ステップＳ１７０１）。なお、最も値が大きいレコードが複数存在する場合、通信装置１０１＃０は、最も値が大きいレコード全てを選択する。
【０１３１】
選択後、通信装置１０１＃０は、選択されたレコードが１つか否かを判断する（ステップＳ１７０２）。選択されたレコードが２つ以上である場合（ステップＳ１７０２：Ｎｏ）、通信装置１０１＃０は、選択されたレコードのうち、自装置のレコードが含まれるか否かを判断する（ステップＳ１７０３）。自装置のレコードが含まれる場合（ステップＳ１７０３：Ｙｅｓ）、通信装置１０１＃０は、自装置のレコードを選択する（ステップＳ１７０４）。自装置のレコードが含まれていない場合（ステップＳ１７０３：Ｎｏ）、通信装置１０１＃０は、選択されたレコードのうち、最小のホップ数Ｈとなるレコードを選択する（ステップＳ１７０５）。
【０１３２】
ステップＳ１７０４、ステップＳ１７０５の終了後、または選択されたレコードが１つである場合（ステップＳ１７０２：Ｙｅｓ）、通信装置１０１＃０は、選択されたレコードが自装置のレコードか否かを判断する（ステップＳ１７０６）。選択されたレコードが自装置のレコードである場合（ステップＳ１７０６：Ｙｅｓ）、通信装置１０１＃０は、パラメタテーブル３０１の自装置のホップ数Ｈを０に設定し（ステップＳ１７０７）、経由装置特定処理を終了する。
【０１３３】
選択されたレコードが自装置のレコードでない場合（ステップＳ１７０６：Ｎｏ）、通信装置１０１＃０は、選択されたレコードに対応する装置を経由装置に特定し（ステップＳ１７０８）、経由装置のＶフィールドを１に設定する（ステップＳ１７０９）。設定後、通信装置１０１＃０は、自装置のホップ数Ｈを経由装置のホップ数Ｈ＋１に設定し（ステップＳ１７１０）、経由装置特定処理を終了する。
【０１３４】
図１８は、通信処理実行処理を示すフローチャートである。通信装置１０１＃０は、アプリ６０１から、通信要求を受け付ける（ステップＳ１８０１）。受け付け後、通信装置１０１＃０は、最良装置設定処理を実行する（ステップＳ１８０２）。最良装置設定処理の詳細は、図１９にて後述する。最良装置設定処理の実行後、通信装置１０１＃０は、自装置が最良装置に設定されたか否かを判断する（ステップＳ１８０３）。自装置が最良装置に設定された場合（ステップＳ１８０３：Ｙｅｓ）、通信装置１０１＃０は、自装置にて通信処理６０２を実行し（ステップＳ１８０４）、通信処理実行処理を終了する。
【０１３５】
自装置が最良装置に設定されていない場合（ステップＳ１８０３：Ｎｏ）、通信装置１０１＃０は、最良装置に設定された通信装置１０１＃ｘに、通信処理６０２と通信処理６０２のディスパッチ応答要求を通知する（ステップＳ１８０５）。なお、通信装置１０１＃ｘとなる通信装置１０１は、通信装置１０１＃１または通信装置１０１＃２のいずれか一方となる。通知後、通信装置１０１＃０は、通信処理実行処理を終了する。通知を受け付けた通信装置１０１＃ｘは、通信処理ディスパッチ応答処理を実行する（ステップＳ１８０６）。
【０１３６】
図１９は、最良装置設定処理を示すフローチャートである。最良装置設定処理は、通信装置１０１＃０〜通信装置１０１＃２にて実行されるが、図１９の説明では、説明の簡略化のため、通信装置１０１＃０を実行主体として説明を行う。また、最良装置設定処理では、自装置のパラメタテーブル３０１に対して処理を行う。
【０１３７】
通信装置１０１＃０は、自装置と経由装置のレコードのうち、最良装置評価値となるＭｉｎ（Ｔ、Ｐ）が最も大きいレコードを選択する（ステップＳ１９０１）。選択後、通信装置１０１＃０は、選択されたレコードが１つか否かを判断する（ステップＳ１９０２）。選択されたレコードが１つである場合（ステップＳ１９０２：Ｙｅｓ）、通信装置１０１＃０は、選択されたレコードの通信装置を最良装置に設定し（ステップＳ１９０３）、最良装置設定処理を終了する。
【０１３８】
選択されたレコードが２つ以上の場合（ステップＳ１９０２：Ｎｏ）、通信装置１０１＃０は、選択されたレコードのうち、自装置のレコードが含まれるか否かを判断する（ステップＳ１９０４）。自装置のレコードが含まれる場合（ステップＳ１９０４：Ｙｅｓ）、通信装置１０１＃０は、自装置を最良装置に設定し（ステップＳ１９０５）、最良装置設定処理を終了する。自装置のレコードが含まれていない場合（ステップＳ１９０４：Ｎｏ）、通信装置１０１＃０は、選択されたレコードのうち、最小のホップ数Ｈとなる装置を最良装置に設定し（ステップＳ１９０６）、最良装置設定処理を終了する。
【０１３９】
図２０は、通信処理ディスパッチ応答処理を示すフローチャートである。通信処理ディスパッチ応答処理は、通信装置１０１＃１、通信装置１０１＃２にて実行されるが、図２０の説明では、説明の簡略化のため、通信装置１０１＃１を実行主体として説明を行う。
【０１４０】
通信装置１０１＃１は、他装置から、通信処理６０２と通信処理６０２のディスパッチ応答要求を受け付ける（ステップＳ２００１）。受け付け後、通信装置１０１＃１は、自装置が最良装置に設定されているか否かを判断する（ステップＳ２００２）。なお、最良装置の設定がされていない場合、通信装置１０１＃１は、最良装置設定処理を実行する。
【０１４１】
自装置が最良装置に設定されている場合（ステップＳ２００２：Ｙｅｓ）、通信装置１０１＃１は、自装置のＣＰＵ群のうち他のＣＰＵからアイソレートしたＣＰＵにて通信処理６０２を実行する（ステップＳ２００３）。ここで、アイソレートとは、メモリ空間等を分断して動作させる処理である。これにより、通信装置１０１＃１のユーザによって操作されるアプリ群は、ディスパッチされた通信処理６０２にアクセスできず、セキュリティを保つことが可能である。
【０１４２】
通信処理６０２を実行後、通信装置１０１＃１は、実行要求を通知した他装置とアドホック通信可能か否かを判断する（ステップＳ２００４）。アドホック通信可能である場合（ステップＳ２００４：Ｙｅｓ）、通信装置１０１＃１は、実行要求を通知した通信装置１０１＃ｙに、受け付けた通信処理６０２の処理識別子と実行結果を通知する（ステップＳ２００５）。なお、通信装置１０１＃ｙとなる通信装置１０１は、実行主体が通信装置１０１＃１の場合、アプリ６０１を実行する通信装置１０１＃０か、または通信装置１０１＃０の最良装置となった通信装置１０１＃２のいずれかである。
【０１４３】
また、アドホック通信可能でない場合（ステップＳ２００４：Ｎｏ）、通信装置１０１＃１は、基地局１０２を経由して、実行要求を通知した通信装置１０１＃ｙに、受け付けた通信処理６０２の処理識別子と実行結果を通知する（ステップＳ２００６）。処理識別子と実行結果の通知を、通信装置１０１＃１は、アイソレートしていたＣＰＵを解除し（ステップＳ２００７）、通信処理ディスパッチ応答処理を終了する。また、通知を受けた通信装置１０１＃ｙは、通信処理実行結果応答処理を実行する（ステップＳ２００８）。
【０１４４】
自装置が最良装置に設定されていない場合（ステップＳ２００２：Ｎｏ）、通信装置１０１＃１は、処理識別子＝受け付けた処理識別子、ディスパッチ元＝実行要求を通知した他装置、ディスパッチ先＝最良装置として、入れ子情報を生成する（ステップＳ２００９）。生成後、通信装置１０１＃１は、生成された入れ子情報を入れ子情報テーブル３０２に登録する（ステップＳ２０１０）。登録後、通信装置１０１＃１は、最良装置となる通信装置１０１＃ｘに、受け付けた通信処理６０２と通信処理６０２のディスパッチ応答要求を通知し（ステップＳ２０１１）、通信処理ディスパッチ応答処理を終了する。また、通知を受けた通信装置１０１＃ｘは、通信処理ディスパッチ応答処理を実行する（ステップＳ２０１２）。
【０１４５】
図２１は、通信処理実行結果応答処理を示すフローチャートである。図２１では、通信処理実行結果応答処理を実行する実行主体を図２０で示した通信装置１０１＃ｙであると想定して説明を行う。
【０１４６】
通信装置１０１＃ｙは、他装置から、通信処理６０２の処理識別子と実行結果を受け付ける（ステップＳ２１０１）。受け付け後、通信装置１０１＃ｙは、入れ子情報テーブル３０２のうち、処理識別子フィールドの値が受け付けた処理識別子と一致する入れ子情報が存在するか否かを判断する（ステップＳ２１０２）。存在する場合（ステップＳ２１０２：Ｙｅｓ）、通信装置１０１＃ｙは、一致した入れ子情報のディスパッチ元と、アドホック通信可能か否かを判断する（ステップＳ２１０３）。アドホック通信可能である場合（ステップＳ２１０３：Ｙｅｓ）、通信装置１０１＃ｙは、ディスパッチ元フィールドに登録されている通信装置１０１＃ｚに、受け付けた処理識別子と実行結果を通知する（ステップＳ２１０４）。通知後、通信装置１０１＃ｙは、通信処理実行結果応答処理を終了する。
【０１４７】
アドホック通信可能でない場合（ステップＳ２１０３：Ｎｏ）、通信装置１０１＃ｙは、基地局１０２を経由して、ディスパッチ元フィールドに登録されている通信装置１０１＃ｚに、受け付けた処理識別子と実行結果を通知する（ステップＳ２１０５）。通知後、通信装置１０１＃ｙは、通信処理実行結果応答処理を終了する。また、通知を受けた通信装置１０１＃ｚは、通信処理実行結果応答処理を実行する（ステップＳ２１０６）。
【０１４８】
存在しない場合（ステップＳ２１０２：Ｎｏ）、実行結果は自装置のアプリに対応する実行結果であるため、通信装置１０１＃ｙは、実行結果を受け付け（ステップＳ２１０７）、通信処理実行結果応答処理を終了する。
【０１４９】
図２２は、通信処理再実行処理を示すフローチャートである。通信装置１０１＃０は、最良装置設定処理を実行する（ステップＳ２２０１）。設定後、通信装置１０１＃０は、最良装置が変更されたか否かを判断する（ステップＳ２２０２）。最良装置が変更されていない場合（ステップＳ２２０２：Ｎｏ）、通信装置１０１＃０は、通信処理再実行処理を終了する。
【０１５０】
最良装置が変更されている場合（ステップＳ２２０２：Ｙｅｓ）、通信装置１０１＃０は、自装置にて通信処理６０２を実行しているか否かを判断する（ステップＳ２２０３）。自装置にて通信処理６０２を実行していない場合（ステップＳ２２０３：Ｎｏ）、通信装置１０１＃０は、ディスパッチ先の通信装置１０１＃ｙに、ディスパッチした通信処理６０２の処理識別子と通信処理６０２の回収要求を通知する（ステップＳ２２０４）。通知を受けた通信装置１０１＃ｙは、通信処理回収応答処理を実行する（ステップＳ２２０５）。
【０１５１】
通知を行ってから一定時間経過後、通信装置１０１＃０は、通信処理６０２の回収に成功したか否かを判断する（ステップＳ２２０６）。自装置にて通信処理６０２を実行している場合（ステップＳ２２０３：Ｙｅｓ）、または回収に成功した場合（ステップＳ２２０６：Ｙｅｓ）、通信装置１０１＃０は、自装置が最良装置に設定されたか否かを判断する（ステップＳ２２０７）。自装置が最良装置に設定されていない場合（ステップＳ２２０７：Ｎｏ）、通信装置１０１＃０は、最良装置となる通信装置１０１＃ｘに通信処理６０２の処理識別子と通信処理６０２のディスパッチ応答要求を通知する（ステップＳ２２０８）。通知後、通信装置１０１＃０は、通信処理再実行処理を終了する。通知を受けた通信装置１０１＃ｘは、通信処理ディスパッチ応答処理を実行する（ステップＳ２２０９）。
【０１５２】
自装置が最良装置に設定されている場合（ステップＳ２２０７：Ｙｅｓ）、通信装置１０１＃０は、自装置にて通信処理６０２を実行し（ステップＳ２２１０）、通信処理再実行処理を終了する。回収に失敗した場合（ステップＳ２２０６：Ｎｏ）、通信装置１０１＃０は、基地局１０２を経由して、ディスパッチ先の通信装置１０１＃ｙに、ディスパッチした通信処理６０２の処理識別子と通信処理６０２の回収要求を通知する（ステップＳ２２１１）。なお、回収に失敗する場合としては、たとえば、回収失敗を受け付けた場合、一定時間経過しても応答を受け付けなかった場合等である。通知を行ってから一定時間経過後、通信装置１０１＃０は、自装置が最良装置に設定されたか否かを判断する（ステップＳ２２０７）。
【０１５３】
図２３は、通信処理回収応答処理を示すフローチャートである。図２３では、通信処理回収応答処理を実行する実行主体を図２２で示した通信装置１０１＃ｙであると想定して説明を行う。
【０１５４】
通信装置１０１＃ｙは、他装置から、処理識別子と通信処理６０２の回収要求を受け付ける（ステップＳ２３０１）。受け付け後、通信装置１０１＃ｙは、入れ子情報テーブル３０２に、処理識別子フィールドの値が受け付けた処理識別子と一致する入れ子情報が存在するか否かを判断する（ステップＳ２３０２）。存在する場合（ステップＳ２３０２：Ｙｅｓ）、通信装置１０１＃ｙは、ディスパッチ先フィールドに登録されている通信装置１０１＃ｚに、ディスパッチした通信処理６０２の処理識別子と通信処理６０２の回収要求を通知する（ステップＳ２３０３）。通知を受けた通信装置１０１＃ｚは、通信処理回収応答処理を実行する（ステップＳ２３０４）。
【０１５５】
通知を行ってから一定時間経過後、通信装置１０１＃ｙは、通信処理６０２の回収に成功したか否かを判断する（ステップＳ２３０５）。回収に成功した場合（ステップＳ２３０５：Ｙｅｓ）、通信装置１０１＃ｙは、通信処理６０２を、回収要求を行った通信装置１０１＃ｘに通知し（ステップＳ２３０６）、通信処理回収応答処理を終了する。また、入れ子情報が存在しない場合（ステップＳ２３０２：Ｎｏ）、通信装置１０１＃ｙにて通信処理６０２を実行していることになるため、通信装置１０１＃ｙは、ステップＳ２３０６の処理に移行する。回収に失敗した場合（ステップＳ２３０５：Ｎｏ）、通信装置１０１＃ｙは、基地局１０２を経由して、ディスパッチ先の通信装置１０１＃ｚに、ディスパッチした通信処理６０２の処理識別子と通信処理６０２の回収要求を通知する（ステップＳ２３０７）。通知を行ってから一定時間経過後、通信装置１０１＃ｙは、通信処理６０２を、回収要求を行った通信装置１０１＃ｘに通知し（ステップＳ２３０６）、通信処理回収応答処理を終了する。
【０１５６】
以上説明したように、通信装置、および通信方法によれば、自装置および基地局の通信速度と、自他装置間の通信速度と他装置および基地局間の通信速度に基づく他装置経由の通信速度と、に基づいて通信処理を自装置または他装置で実行するか判定する。これにより、通信装置は、基地局との通信路のうち最適な通信路を選択して、通信処理を高速に処理できる。
【０１５７】
また、通信装置は、他装置の処理速度を周期的に収集してもよい。通信装置は移動していることが多く、自装置および基地局の通信速度が刻々と変化する。通信装置は、このように刻々と変化する通信速度を周期的に収集することで、常に最適な通信路と通信処理を実行する装置を選択することができる。
【０１５８】
また、通信装置は、自装置と基地局の通信速度および自装置の処理速度と、他装置経由の通信速度および他装置の処理速度と、に基づいて通信処理を自装置または他装置で実行するか判定してもよい。これにより、通信装置は、自装置で行っていた通信処理を負荷の低い他装置に移行させることで、負荷を分散することができる。
【０１５９】
また、通信装置は、通信処理の実行結果を回収してもよい。これにより、通信処理を発生させたアプリは、通信処理が自装置で行われたか他装置で行われたかを意識せずに処理を続行することができる。
【０１６０】
また、通信装置は、自装置から基地局までの第１通信路と自装置から他装置を経由して基地局までの第２通信路とのうち、速度の速い通信路を特定の通信路に特定し、特定の通信路を経由して通信するように、他装置を制御してもよい。これにより、通信装置は、より高速な通信路を選択して基地局と通信することができる。
【０１６１】
また、通信装置は、通信路に他装置が存在する数に基づいて、特定の通信路を特定してもよい。これにより、通信装置は、より短い通信路を選択でき、通信路を最小に留めることができる。
【０１６２】
（実施の形態２の概要）
実施の形態１にかかる通信システム１００では、通信速度と処理速度のうち小さい値を最良装置評価値として設定していた。しかしながら、アプリによっては、ＣＰＵの処理速度を多大に要求し、通信速度は低速でもよいというアプリも存在する。したがって、実施の形態２にかかる通信システム１００は、アプリがＣＰＵの処理速度を要求するか、または、通信速度を要求するか否かによって、最良装置評価値を設定する。また、実施の形態２にかかる通信装置１０１＃０〜通信装置１０１＃２のハードウェアは、実施の形態１にかかるハードウェアと等しいため、説明を省略する。
【０１６３】
図２４は、実施の形態２にかかる通信システム１００の機能を示す説明図である。実施の形態２にかかる検出部３１１〜実行部３２４のうち、判定部３１６と算出部３１８以外の機能については、実施の形態１の機能と等しいため、説明を省略する。同様に、実施の形態２にかかるパラメタテーブル３０１と入れ子情報テーブル３０２は、実施の形態１にかかるパラメタテーブル３０１と入れ子情報テーブル３０２と等しい情報を記憶するため、説明を省略する。
【０１６４】
実施の形態２にかかる通信システム１００は、アプリ属性テーブル２４０１にアクセス可能である。アプリ属性テーブル２４０１は、基地局１０２への通信速度の要求度と前記通信処理を実行可能な処理速度の要求度とをアプリごとに記憶するテーブルである。なお、アプリ属性テーブル２４０１の詳細は、図２５にて後述する。
【０１６５】
判定部３１６は、通信処理の発生元となるアプリの属性に基づいて他装置に通信処理を移行するか否かを判定してもよい。たとえば、通信処理３４１を発生させたアプリ３３１は、処理速度を要求するアプリであることがアプリ属性テーブル２４０１に記憶されている場合を想定する。このとき、判定部３１６は、通信装置１０１＃１と通信装置１０１＃２のうち、処理速度が最も速い装置に通信処理３４１を移行すると判定する。なお、判定結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【０１６６】
算出部３１８は、通信処理の発生元となるアプリの属性に基づいて評価値を算出してもよい。たとえば、算出部３１８は、通信処理３４１を発生させたアプリ３３１は、処理速度を要求するアプリである場合、評価値を処理速度の値として算出する。なお、算出結果は、ＣＰＵ２０１＃０のレジスタ、キャッシュメモリ、ＲＡＭ２０３などの記憶領域に記憶される。
【０１６７】
図２５は、実施の形態２にかかるアプリ属性テーブル２４０１の記憶内容の一例を示す説明図である。アプリ属性テーブル２４０１は、アプリ名称、ＣＰＵ処理速度要求、通信速度要求という３つのフィールドを含む。アプリ名称フィールドには、アプリの名称など、対象アプリが一意に特定できる情報が格納される。
【０１６８】
ＣＰＵ処理速度要求フィールドには、対象アプリがＣＰＵ処理速度に対する要求が大きいか否かが格納される。具体的に、ＣＰＵ処理速度要求フィールドには、要求が大きいことを示す識別子“大”と、要求が小さいことを示す識別子“小”のいずれかが格納される。通信速度要求フィールドには、対象アプリが通信速度に対する要求が大きいか否かが格納される。具体的に、通信速度要求フィールドには、要求が大きいことを示す識別子“大”と、要求が小さいことを示す識別子“小”のいずれかが格納される。以下の説明では、ＣＰＵ処理速度要求と通信速度要求とをあわせてアプリ属性と称する。
【０１６９】
たとえば、メーラアプリは、複雑な処理を要求しないうえ、通信量も小さいため、アプリ属性は、ＣＰＵ処理速度要求、通信速度要求共に“小”に設定される。ダウンローダアプリは、複雑な処理は要求しないが、通信量は大きいことが好ましい。したがって、ダウンローダアプリのアプリ属性は、ＣＰＵ処理速度要求が“小”に設定され、通信速度要求が“大”に設定される。
【０１７０】
ネットワークゲームアプリは、通信量は小さくてよいが、通信処理で得た結果を用いて複雑な処理を実行する。したがって、ネットワークゲームアプリのアプリ属性は、ＣＰＵ処理速度要求が“大”に設定され、通信速度要求フィールドが“小”に設定される。ストリーミング動画再生アプリは、通信量は大きいことが好ましく、また、通信処理で得た結果に対してデコード処理といった複雑な処理を実行する。したがって、ストリーミング動画再生アプリのアプリ属性は、ＣＰＵ処理速度要求、通信速度要求共に“大”に設定される。
【０１７１】
なお、ストリーミング動画再生アプリに関して、高圧縮の動画を受信する場合、通信速度を低くすることができる代わりに、伸長処理の処理量が多くなる。このような場合、ストリーミング動画再生アプリのアプリ属性は、ＣＰＵ処理速度要求が“大”に設定され、通信速度要求が“小”に設定されてもよい。
【０１７２】
実施の形態２にかかる通信システム１００は、アプリ属性テーブル２４０１を参照して通信処理を実行する。なお、実施の形態２にかかる通信システム１００は、図１６〜図２３で示した処理群のうち、最良装置設定処理以外は全て実施の形態１にかかる通信システム１００と等しい処理を行う。実施の形態２にかかる最良装置設定処理については、図２６で説明を行う。
【０１７３】
図２６は、実施の形態２にかかる最良装置設定処理を示すフローチャートである。実施の形態２にかかる最良装置設定処理のうち、ステップＳ２６０６〜ステップＳ２６１０は、図１９に示したステップＳ１９０２〜ステップＳ１９０６と等しい処理を行うため、説明を省略する。また、実施の形態２にかかる最良装置設定処理は、通信装置１０１＃０〜通信装置１０１＃２にて実行されるが、図２６の説明では、説明の簡略化のため、通信装置１０１＃０を実行主体として説明を行う。また、実施の形態２にかかる最良装置設定処理では、自装置のパラメタテーブル３０１に対して処理を行う。
【０１７４】
通信装置１０１＃０は、アプリ属性テーブル２４０１を参照して、対象アプリのアプリ属性を確認する（ステップＳ２６０１）。ＣＰＵ処理速度要求と通信速度要求が共に小である場合（ステップＳ２６０１：ＣＰＵ処理速度要求：小＆通信速度要求：小）、通信装置１０１＃０は、自装置のレコードを選択し（ステップＳ２６０２）、ステップＳ２６０６の処理に移行する。
【０１７５】
ＣＰＵ処理速度要求が小、かつ通信速度要求が大である場合（ステップＳ２６０１：ＣＰＵ処理速度要求：小＆通信速度要求：大）、通信装置１０１＃０は、自装置と経由装置のうち、最良装置評価値となるＴ＝Ｍａｘ（Ｔ0、Ｔ1、Ｔ2）となるレコードを選択する（ステップＳ２６０３）。選択後、通信装置１０１＃０は、ステップＳ２６０６の処理に移行する。
【０１７６】
ＣＰＵ処理速度要求が大、かつ通信速度要求が小である場合（ステップＳ２６０１：ＣＰＵ処理速度要求：大＆通信速度要求：小）、通信装置１０１＃０は、自装置と経由装置のうち、最良装置評価値となるＰ＝Ｍａｘ（Ｐ0、Ｐ1、Ｐ2）となるレコードを選択する（ステップＳ２６０４）。選択後、通信装置１０１＃０は、ステップＳ２６０６の処理に移行する。
【０１７７】
ＣＰＵ処理速度要求と通信速度要求が共に大である場合（ステップＳ２６０１：ＣＰＵ処理速度要求：大＆通信速度要求：大）、通信装置１０１＃０は、自装置と経由装置のうち、Ｍｉｎ（Ｔ、Ｐ）＝Ｍａｘ（Ｍｉｎ（Ｔ0、Ｐ0）、Ｍｉｎ（Ｔ1、Ｐ1）、Ｍｉｎ（Ｔ2、Ｐ2））となるレコードを選択する（ステップＳ２６０５）。選択後、通信装置１０１＃０は、ステップＳ２６０６の処理に移行する。
【０１７８】
以上説明したように、実施の形態２にかかる通信装置、および通信方法によれば、アプリの属性に基づいて、通信処理を移行するか否かを判定する。これにより、通信装置は、アプリが要求する属性に最も適している装置に、通信処理を振り分けることができる。
【０１７９】
たとえば、アプリ１が処理速度を要求し、アプリ２が通信速度を要求する場合を想定し、さらに、通信装置１が処理速度：中、通信速度：中、通信装置２が処理速度：小、通信速度：大、通信装置３が処理速度：大、通信速度：小となる場合を想定する。このとき、実施の形態１にかかる通信システム１００では、アプリ１の通信処理、アプリ２の通信処理共に、通信装置１に移行することになる。このように、実施の形態１にかかる通信システム１００では、アプリ１の通信処理を実行するに適している通信装置３、アプリ２に通信処理を実行するに適している通信装置２が存在するにもかかわらず、通信装置１を選択することになる。
【０１８０】
しかし、実施の形態２にかかる通信システムでは、アプリ１の通信処理を通信装置３に移行し、アプリ２の通信処理を通信装置２に移行する。このように、実施の形態２にかかる通信システムは、それぞれのアプリが要求する属性に適している装置に通信処理を振り分けることができる。
【０１８１】
（実施の形態３の概要）
実施の形態１、実施の形態２にかかる通信システム１００では、アプリが要求する通信速度が通信路内の通信装置１０１＃０の最良通信速度Ｔより大きい場合、アプリの要求を完全に満たすことができなかった。実施の形態３にかかる通信システム１００では、複数の通信装置１０１に分散して通信処理を実行することにより、アプリの要求が満たされることを可能にする。
【０１８２】
また、実施の形態３にかかる通信装置１０１＃０〜通信装置１０１＃２のハードウェアは、実施の形態１にかかるハードウェアと等しいため、説明を省略する。さらに、実施の形態３にかかる通信システム１００の機能については、実施の形態２にかかる通信システム１００の機能とほぼ等しいため、図を省略する。以下、実施の形態３の機能について説明を行う。
【０１８３】
また、実施の形態３にかかるアプリ属性テーブルは、実施の形態２にかかるアプリ属性テーブル２４０１に、アプリが要求する通信速度を記憶するフィールドが追加される。実施の形態３にかかるアプリ属性テーブルの説明については、図２８にて、実施の形態３にかかるアプリ属性テーブル２８０１として説明を行う。
【０１８４】
特定部３１４は、特定の通信路の通信速度が、アプリ属性テーブル２８０１を参照した通信処理を発生させたアプリが要求する通信速度より小さい場合、特定の通信路以外から新たな特定の通信路を特定してもよい。たとえば、特定部３１４が、過去に、通信装置１０１＃０から通信装置１０１＃２を経由して基地局１０２へ通信する通信路を特定の通信路として特定したことを想定し、特定の通信路の通信速度が７０［Ｍｂｐｓ］であると想定する。
【０１８５】
このとき、アプリが要求する通信速度が１００［Ｍｂｐｓ］である場合、特定部３１４は、通信装置１０１＃０から通信装置１０１＃２を経由して基地局１０２へ通信する通信路以外の通信路を新たな特定の通信路に特定する。たとえば、特定部３１４は、通信装置１０１＃０から通信装置１０１＃１を経由して基地局１０２へ通信する通信路を新たな特定の通信路に特定する。
【０１８６】
以降、算出部３１８が、新たな特定の通信路内に含まれる装置ごとに、評価値を算出し、設定部３１９が、算出された評価値群に基づいて、新たな特定の通信路内に含まれる装置のうち、通信処理を実行する新たな実行対象装置を設定する。設定後、判定部３１６は、設定された新たな実行対象装置が自装置であるか否かを判定し、移行部３２０は、新たな実行対象装置が自装置でない場合、新たな実行対象装置に通信処理を移行する。
【０１８７】
図２７は、通信処理を複数の通信装置１０１にて分割実行する動作を示す説明図である。図２７では、通信装置１０１＃０で実行されるアプリ２７０１がストリーミング動画再生アプリであることを想定している。
【０１８８】
また、アプリ２７０１がストリーミング再生する動画は、画面サイズが３２０×４８０［ピクセル］であり、色情報が２４ビットカラーであり、３０［フレーム／秒］である動画である。したがって、アプリ２７０１が要求する通信速度は、４８０＊３２０＊２４＊３０≒１０６［Ｍｂｐｓ］となる。さらに、アプリ２７０１が再生するストリーミング動画は、高圧縮であることを想定しており、１秒間分のデータを、約５００［Ｋバイト］まで圧縮することが可能であることを想定する。このように、アプリ２７０１は、通信速度は小さくてよいが、ＣＰＵ処理速度は大きい値を要求するため、通信システム１００は、最良装置評価値を処理速度Ｐに設定する。
【０１８９】
また、図２７の状態は、通信装置１０１と基地局１０２の直接の通信路が遮断されており、Ｂ0＝０［Ｍｂｐｓ］であると想定する。さらに、他の通信速度Ｂは、それぞれ、Ｂ1＝Ｂ2＝７［Ｍｂｐｓ］であると想定する。また、通信装置１０１間の通信速度ｔが、それぞれ、ｔ01＝ｔ02＝ｔ12＝５４［Ｍｂｐｓ］であると想定する。
【０１９０】
また、パラメタテーブル３０１＃０の自装置に関する値として、ｍ0＝１０［Ｍｂｐｓ］、ｃ0＝１０［％］が格納されている。さらに、通信装置１０１＃０は、パラメタ更新処理を実行することで、通信装置１０１＃１、通信装置１０１＃２からＴ1＝Ｔ2＝７［Ｍｂｐｓ］、Ｐ1＝６０［Ｍｂｐｓ］、Ｐ2＝７０［Ｍｂｐｓ］、Ｈ1＝Ｈ2＝０を受け付ける。受け付け後、通信装置１０１＃０は、（１）式、（２）式によって、Ｔ0＝７［Ｍｂｐｓ］、Ｐ0＝１［Ｍｂｐｓ］を算出し、パラメタテーブル３０１＃０に登録する。
【０１９１】
また、通信装置１０１＃０は、経由装置評価値群（Ｂ0、Ｍｉｎ（Ｔ1、ｔ01）、Ｍｉｎ（Ｔ2、ｔ02））＝（０、７、７）から、最も大きい評価値となる通信装置１０１＃１、通信装置１０１＃２のうち、通信装置１０１＃２を経由装置に特定する。さらに、通信装置１０１＃０は、最良装置評価値群（Ｐ0、Ｐ2）＝（１、７０）から、通信装置１０１＃２を最良装置に設定する。設定後、通信装置１０１＃０は、通信装置１０１＃２に通信処理２７０２＃１をディスパッチする。
【０１９２】
しかしながら、通信装置１０１＃２は、最良装置評価値となるＰ2＝７０［Ｍｂｐｓ］であるため、アプリ２７０１が要求する通信速度１０６［Ｍｂｐｓ］を満たすことができない。また、図２７の場合、ｔ02＝５４［Ｍｂｐｓ］であるために、通信装置１０１＃２は、伸長した映像データを５４［Ｍｂｐｓ］までしか転送できない。したがって、通信装置１０１＃０は、既に設定されている最良装置とは別の最良装置を設定し、別の最良装置に通信処理をディスパッチしてもよい。
【０１９３】
具体的には、通信装置１０１＃０は、経由装置評価値群（０、７、７）のうち、最良装置となっている通信装置１０１＃２を除いたうち、最も大きい評価値となる通信装置１０１＃１を２番目の経由装置に特定する。なお、このとき、通信装置１０１＃０は、パラメタテーブル３０１＃０の通信装置１０１＃１のＶフィールドに、２番目の経由装置を示す“２”を設定してもよい。続けて、通信装置１０１＃０は、自装置と２番目の経由装置の最良装置評価値群（Ｐ0、Ｐ1）＝（１、６０）から、通信装置１０１＃１を２番目の最良装置に設定する。設定後、通信装置１０１＃０は、通信装置１０１＃１に通信処理２７０２＃２をディスパッチする。
【０１９４】
このように、図２７に示す通信システム１００は、１つの通信装置１０１でアプリの要求を満たすことができない場合、複数の通信装置１０１に分散して通信処理を実行することにより、アプリの要求を満たすことができる。具体的な通信量として、通信装置１０１＃１と通信装置１０１＃２は、圧縮されたデータを約２５０［Ｋｂｐｓ］で受信し、圧縮されたデータを伸長する。伸長後、通信装置１０１＃１と通信装置１０１＃２は、伸長されたデータを、約５３［Ｍｂｐｓ］で通信装置１０１＃０に送信する。
【０１９５】
図２８は、実施の形態３にかかるアプリ属性テーブル２８０１の記憶内容の一例を示す説明図である。アプリ属性テーブル２８０１は、アプリ属性テーブル２４０１に含まれるフィールドに加え、さらに、アプリ要求通信速度フィールドを含む。なお、アプリ名称フィールド、ＣＰＵ処理速度要求フィールド、通信速度要求フィールドに関しては、アプリ属性テーブル２４０１と同等であるため、説明を省略する。
【０１９６】
アプリ要求通信速度は、対象アプリが要求する通信速度である。たとえば、メーラアプリは、ＣＰＵ処理速度要求も通信速度要求も小さいため、アプリ要求通信速度は小さくなり、アプリ要求通信速度フィールドには、１［Ｍｂｐｓ］が格納されている。同様に、ダウンローダアプリは、通信速度要求が大きいため、アプリ要求通信速度が大きくなり、アプリ要求通信速度フィールドには、１００［Ｍｂｐｓ］が格納されている。
【０１９７】
また、ネットワークゲームアプリは、ＣＰＵ処理速度要求が大きくなり、アプリ要求通信速度フィールドには、５０［Ｍｂｐｓ］が格納されている。また、ストリーミング動画再生アプリは、ＣＰＵ処理速度要求も通信速度要求も大きいため、アプリ要求通信速度は大きくなり、アプリ要求通信速度フィールドには、１０６［Ｍｂｐｓ］が格納されている。
【０１９８】
実施の形態３にかかる通信システム１００は、アプリ属性テーブル２８０１を参照して通信処理を実行する。なお、実施の形態２にかかる通信システム１００は、図１６〜図２３で示した処理群のうち、通信処理実行処理以外は全て実施の形態１にかかる通信システム１００と等しい処理を行う。したがって、図２９にて実施の形態３にかかる通信処理実行処理の説明を行う。
【０１９９】
図２９は、実施の形態３にかかる通信処理実行処理を示すフローチャートである。通信装置１０１＃０は、アプリ２７０１から、通信要求を受け付ける（ステップＳ２９０１）。受け付け後、通信装置１０１＃０は、変数ｉを１に設定する（ステップＳ２９０２）。設定後、通信装置１０１＃０は、最良装置設定処理を実行し、ｉ番目の最良装置に設定する（ステップＳ２９０３）。なお、ステップＳ２９０３における最良装置設定処理は、実施の形態１における最良装置設定処理でもよいし、実施の形態２における最良装置設定処理であってもよい。
【０２００】
設定後、通信装置１０１＃０は、自装置がｉ番目の最良装置に設定されたか否かを判断する（ステップＳ２９０４）。自装置がｉ番目の最良装置に設定された場合（ステップＳ２９０４：Ｙｅｓ）、通信装置１０１＃０は、自装置にて通信処理２７０２＃ｉを実行する（ステップＳ２９０５）。自装置がｉ番目の最良装置に設定されていない場合（ステップＳ２９０４：Ｎｏ）、通信装置１０１＃０は、最良装置に設定された通信装置１０１＃ｘに、通信処理２７０２＃ｉと通信処理２７０２＃ｉのディスパッチ応答要求を通知する（ステップＳ２９０６）。通知を受けた通信装置１０１＃ｘは、通信処理ディスパッチ応答処理を実行する（ステップＳ２９０７）。
【０２０１】
ステップＳ２９０５、またはステップＳ２９０６の処理終了後、通信装置１０１＃０は、要求を行ったアプリのＣＰＵ処理速度要求が小、かつ通信速度要求が小か否かを判断する（ステップＳ２９０８）。ＣＰＵ処理速度要求か通信速度要求のいずれかが小でない場合（ステップＳ２９０８：Ｎｏ）、通信装置１０１＃０は、１番目からｉ番目の最良装置の最良装置評価値の合計がアプリ２７０１のアプリ要求通信速度以上か否かを判断する（ステップＳ２９０９）。
【０２０２】
最良装置評価値の合計がアプリ要求通信速度より小さい場合（ステップＳ２９０９：Ｎｏ）、通信装置１０１＃０は、ディスパッチ可能な通信装置１０１が存在するか否かを判断する（ステップＳ２９１０）。存在する場合（ステップＳ２９１０：Ｙｅｓ）、通信装置１０１＃０は、ｉ番目の最良装置を経由装置評価値群から除いて、経由装置特定処理を実行する（ステップＳ２９１１）。具体的に、通信装置１０１＃０は、ステップＳ１７０１を、“経由装置評価値となる自装置のＢとｉ番目の最良装置を除いた他装置のＭｉｎ（Ｔ、ｔ）のうち、最も値が大きいレコードを選択する”に置き換えて実行する。実行後、通信装置１０１＃０は、変数ｉをインクリメントし（ステップＳ２９１２）、ステップＳ２９０３の処理に移行する。
【０２０３】
ＣＰＵ処理速度要求が小、かつ通信速度要求が小である場合（ステップＳ２９０８：Ｙｅｓ）、最良装置評価値の合計がアプリ要求通信速度以上の場合（ステップＳ２９０９：Ｙｅｓ）、通信装置１０１＃０は、通信処理実行処理を終了する。また、ディスパッチ可能な通信装置１０１が存在しない場合（ステップＳ２９１０：Ｎｏ）、通信装置１０１＃０は、通信処理実行処理を終了する。
【０２０４】
なお、ステップＳ２９０９の処理にて、１番目からｉ番目の最良装置の最良装置評価値の合計がアプリ２７０１のアプリ要求通信速度であっても、たとえば、通信装置１０１間の通信速度がボトルネックとなり、アプリの要求を満たさない場合が存在する。このような場合、通信装置１０１＃０は、実際に受信しているデータ量の受信速度がアプリ２７０１のアプリ要求通信速度以下であれば、ステップＳ２９０９：Ｎｏの処理を実行してもよい。
【０２０５】
以上説明したように、通信装置、および通信方法によれば、特定の通信路の通信速度が、通信処理を発生させたアプリが要求する通信速度より小さい場合、特定の通信路以外の新たな特定の通信路に特定し、新たな特定の通信路内の装置に通信処理を移行する。これにより、通信装置は、１つの通信装置ではアプリの要求が満たせない場合に、複数の装置に通信処理を実行させることで、アプリの要求を満たすことができる。
【０２０６】
なお、本実施の形態で説明した通信方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本通信方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本通信方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【０２０７】
上述した実施の形態１〜３に関し、さらに以下の付記を開示する。
【０２０８】
（付記１）通信処理を第１処理速度で実行可能な第１ＣＰＵと、
基地局との間で前記通信処理を行うときの第１通信速度を測定する測定部と、
前記第１通信速度に基づいて少なくとも一の他装置に前記基地局および前記他装置の第２通信速度と前記他装置に含まれる第２ＣＰＵの第２処理速度とを収集する収集部と、
前記第２通信速度と前記第２処理速度とに基づいて前記他装置に前記通信処理を移行するか否かを判定する判定部と、
判定結果に基づいて前記通信処理を前記他装置に移行する移行部と、
を含むことを特徴とする通信装置。
【０２０９】
（付記２）前記判定部は、前記他装置が複数ある場合、前記第２通信速度および前記第２処理速度のうちの最小である値が最も大きい装置に前記通信処理を移行するか否かを判定すること
を特徴とする付記１に記載の通信装置。
【０２１０】
（付記３）前記判定部は、前記他装置へ移行した前記通信処理の実行結果を回収すること
を特徴とする付記１または付記２に記載の通信装置。
【０２１１】
（付記４）前記判定部は、前記通信処理の発生元となるアプリケーションの属性に基づいて前記他装置に前記通信処理を移行するか否かを判定すること
を特徴とする付記１乃至付記３の何れか一に記載の通信装置。
【０２１２】
（付記５）前記第２通信速度および前記第２処理速度を登録するメモリを有すること
を特徴とする付記１乃至付記４の何れか一に記載の通信装置。
【０２１３】
（付記６）前記第１通信速度および前記第２通信速度に基づいて、自装置から前記基地局までの第１通信路と前記自装置から前記他装置を経由して前記基地局までの第２通信路とのうちいずれかを特定の通信路に特定する特定部と、
前記特定部によって前記第２通信路が前記特定の通信路に特定された場合、前記通信処理によって発生する通信を、前記他装置を経由して通信するように前記他装置を制御する制御部と、
をさらに含むことを特徴とする付記１に記載の通信装置。
【０２１４】
（付記７）前記特定部は、さらに、前記第１通信路と前記第２通信路とのうち、当該通信路に前記他装置が存在する数に基づいて、前記特定の通信路に特定すること
を特徴とする付記６に記載の通信装置。
【０２１５】
（付記８）前記判定部は、前記特定部によって前記第２通信路が前記特定の通信路に特定された場合、前記特定の通信路の通信速度および前記第１処理速度と、前記他装置および前記基地局間の通信速度および前記第２処理速度とに基づいて、前記他装置に前記通信処理を移行させるか否かを判定すること
を特徴とする付記６に記載の通信装置。
【０２１６】
（付記９）前記特定部によって前記特定の通信路が特定された場合、前記特定の通信路内に含まれる装置ごとに、当該装置から前記基地局までの通信速度と当該装置が前記通信処理を実行可能である処理速度とに基づいた評価値を算出する算出部と、
前記算出部によって算出された評価値群に基づいて、前記特定の通信路内に含まれる装置群のうち前記通信処理を実行する実行対象装置を設定する設定部と、
をさらに含み、
前記判定部は、前記設定部によって設定された前記実行対象装置が前記自装置であるか否かを判定し、
前記移行部は、前記判定部によって前記実行対象装置が前記自装置でない場合、前記実行対象装置に前記通信処理を移行すること
を特徴とする付記８に記載の通信装置。
【０２１７】
（付記１０）アプリケーションごとに、当該アプリケーションが要求する通信速度を登録するメモリを有し、
前記特定部は、前記特定の通信路の通信速度が、前記メモリを参照した前記通信処理を発生させたアプリケーションが要求する通信速度より小さい場合、前記第１通信路と前記第２通信路とのうち、前記特定の通信路以外から新たな特定の通信路を特定し、
前記算出部は、前記特定部によって前記新たな特定の通信路が特定された場合、前記新たな特定の通信路内に含まれる装置ごとに、当該装置から前記基地局までの通信速度と当該装置が前記通信処理を実行可能である処理速度とに基づいた評価値を算出し、
前記設定部は、前記算出部によって算出された評価値群に基づいて、前記新たな特定の通信路内に含まれる装置群のうち前記通信処理を実行する新たな実行対象装置を設定し、
前記判定部は、前記設定部によって設定された前記新たな実行対象装置が前記自装置であるか否かを判定し、
前記移行部は、前記判定部によって前記新たな実行対象装置が前記自装置でない場合、前記新たな実行対象装置に前記通信処理を移行すること
を特徴とする付記９に記載の通信装置。
【０２１８】
（付記１１）通信処理を第２処理速度で実行可能な第２ＣＰＵと、
前記通信処理を第１処理速度で実行可能な第１ＣＰＵを含むと共に基地局との間で第１通信速度で前記通信処理を行う他装置からの要求に基づいて、前記基地局との間の第２通信速度と前記第２処理速度とを前記他装置へ通信する通信部と、
前記他装置から移行される第１通信処理を実行する実行部と、
を含むことを特徴とする通信装置。
【０２１９】
（付記１２）前記他装置からの要求に応じて、前記通信処理の実行結果を前記他装置に送信すること
を特徴とする付記１１に記載の通信装置。
【０２２０】
（付記１３）少なくとも一の対象装置に前記基地局と前記対象装置との第３通信速度と前記対象装置に含まれる第３ＣＰＵの第３処理速度とを問い合わせる収集部と、
前記第３通信速度と前記第３処理速度とに基づいて前記対象装置に前記通信処理を移行するか否かを判定する判定部と、
を含むことを特徴とする付記１１または付記１２に記載の通信装置。
【０２２１】
（付記１４）前記第３通信速度と前記第３処理速度とを登録するメモリを含むこと
を特徴とする付記１３に記載の通信装置。
【０２２２】
（付記１５）基地局との間で通信処理を行うときの第１通信速度を測定し、
第１装置に前記基地局と前記第１装置との間の第２通信速度と前記第１装置に含まれるＣＰＵが前記通信処理を実行する際の処理速度とを要求し、
前記第１通信速度と第２通信速度と前記処理速度とに基づいて前記第１装置に前記通信処理を移行するか否かを判定し、
判定結果に基づいて前記通信処理を前記第１装置に移行すること
を特徴とする通信方法。
【０２２３】
（付記１６）第２装置からの要求に応じて前記第２通信速度と前記処理速度を前記第２装置に送信すること
を特徴とする付記１５に記載の通信方法。
【０２２４】
（付記１７）前記第２装置から移行された前記通信処理を実行すること
を特徴とする付記１６に記載の通信方法。
【符号の説明】
【０２２５】
１０１  通信装置
１０２  基地局
２０１  ＣＰＵ
２０３  ＲＡＭ
２０８  通信モジュール
２０９  無線ＬＡＮ通信モジュール
３０１  パラメタテーブル
３０２  入れ子情報テーブル
３０３  ＯＳ
３０４  計算ライブラリ
３０５  判定ライブラリ
３０６  収集ライブラリ
３０７  ＣＰＵ
３１１  検出部
３１２  測定部
３１３  選択部
３１４  特定部
３１５  制御部
３１６  判定部
３１７  移行指示部
３１８  算出部
３１９  設定部
３２０  移行部
３２１、３２４  実行部
３２２、３２５  通信部
３２３  収集部
２４０１、２８０１  アプリ属性テーブル
【国際調査報告】
2012108057.tif 000032
2012108057.tif 000033
2012108057.tif 000034
2012108057.tif 000035