(57)【要約】【課題】システムの変更・拡張に容易に対応でき、デッドロックが生じる恐れもなく且つシステムを最適化できるネットワーク機器システムを提供する。【解決手段】このネットワーク機器システムは、関数処理系のシステムで、各ネットワーク機器が割り当てられた関数を実行することによってシステム全体として所定の動作を行う。各機器は、関数記憶部１０と、変数記憶交換器１１と、実行関数選択部１２と、関数実行部１３とを備える。変数記憶交換器は、電気通信回線を介して各ネットワーク機器と接続されており、関数記憶部に記憶された関数の実行に必要な変数を記憶し、各機器間で共有する。実行関数選択部は、変数記憶交換器が記憶している変数を参照し、関数実行部に記憶された関数のうち実行可能な関数を選択する。関数実行部は、実行関数選択部により選択された関数を実行すると共に、実行結果によって、変数記憶交換器に記憶された変数を更新する。【選択図】図２
2007200313.tif 000002
【特許請求の範囲】
【請求項１】
電気通信回線に接続された複数のネットワーク機器が互いに連係して所定の動作を行うネットワーク機器システムであって、
このネットワーク機器システムは関数の組み合わせによってシステム全体が構築され、各ネットワーク機器が各自に割り当てられた関数を実行することによってシステム全体として所定の動作を行うように構成されており、
各ネットワーク機器は以下の構成を備える：
関数記憶部；この関数記憶部は、自ネットワーク機器において実行が必要な関数を記憶する；
変数記憶交換器；この変数記憶交換器は電気通信回線を介して各ネットワーク機器と接続され、各ネットワーク機器の前記関数記憶部に記憶された関数の実行に必要な変数を記憶し、各ネットワーク機器間で共有する；
実行関数選択部；この実行関数選択部は、前記変数記憶交換器が記憶している変数を参照し、自ネットワーク機器の関数実行部に記憶された関数のうち実行可能な関数を選択する；
関数実行部；この関数実行部は、前記実行関数選択部により選択された関数を前記変数記憶交換器に記憶された変数を用いて実行すると共に、関数の実行によって得られた変数によって、前記変数記憶交換器に記憶された変数を更新する。
【請求項２】
請求項１に記載の分散型関数処理系を用いたネットワーク機器システムにおいて、
前記関数記憶部は、少なくとも自ネットワーク機器に固有の関数を記憶する。
【請求項３】
請求項１に記載の分散型関数処理系を用いたネットワーク機器システムにおいて、
各ネットワーク機器はさらに、機能分散ネゴシエーション部を備え、この機能分散ネゴシエーション部は、電気通信回線を介して他のネットワーク機器と接続され、前記関数記憶部に記憶された関数のうち、自ネットワーク機器に固有の関数を除いた関数を、他のネットワーク機器に委譲する機能を有し、
前記関数記憶部は、前記機能分散ネゴシエーション部によって他のネットワーク機器から委譲された関数を記憶する。
【請求項４】
請求項３に記載の分散型関数処理系を用いたネットワーク機器システムにおいて、
前記機能分散ネゴシエーション部は、各ネットワーク機器に対して処理負荷を問い合わせ、各ネットワーク機器からその回答を受け取り、その回答に基づいて、関数を委譲する他のネットワーク機器を決定する。
【請求項５】
請求項３に記載の分散型関数処理系を用いたネットワーク機器システムにおいて、
前記複数のネットワーク機器の少なくとも一つは、このネットワーク機器システムで使用される関数の実装を記憶した関数リポジトリを備え、
各ネットワーク機器はさらに、
前記関数実行部が所定の関数を実行するのに必要な関数の実装を記憶する関数実装記憶部と、
前記機能分散ネゴシエーション部によって他のネットワーク機器から委譲された関数のうち、前記関数実装記憶部に記憶されていない関数の実装を、前記関数リポジトリから取得する関数実装追加部とを備える。
【請求項６】
請求項１に記載の分散型関数処理系を用いたネットワーク機器システムにおいて、
各ネットワーク機器はさらに、前記変数記憶交換器に記憶された変数を、各ネットワーク機器間で共有すべき共有変数と共有しない非共有変数とに区分する変数公開制御部を備え、
前記変数記憶交換器は、共用変数のみを電気通信回線を介して各ネットワーク機器間で共有する。
【請求項７】
請求項１に記載の分散型関数処理系を用いたネットワーク機器システムにおいて、
前記複数のネットワーク機器は、少なくとも、センターサーバと、各家庭に設置されるホームサーバと、各家庭に設置される設備機器とを含む。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク機器システムに関し、より詳細には分散型関数処理系のネットワーク機器システムに関する。
【背景技術】
【０００２】
従来、インターネット等の電気通信回線を介して複数のネットワーク機器が接続され、各ネットワーク機器が連係して所定の動作を行うネットワーク機器システムが提供されている。例えば、センターサーバと、各家庭に設置されたホームサーバや各種設備機器（例えば情報表示装置や空調制御装置など）がインターネット回線を介して接続され、インターネットを介して家庭内の設備機器の制御や電力監視などを行うシステムが提供されている。
【０００３】
このようなシステムを設計するために、従来オブジェクト指向型言語が広く用いられている。オブジェクト指向型言語は、カプセル化、継承、ポリモーフィズムなどの特徴を有し、特に大規模なソフトウェア開発において有効である。
【０００４】
オブジェクト指向型言語によって構成されたネットワーク機器システムに新しいネットワーク機器を追加する場合、そのネットワーク機器がシステム全体に及ぼす影響を検証する必要あり、その作業は、システムが複雑になるにつれて多くの時間と労力を要する。これは、オブジェクト指向型言語では各オブジェクトが相互作用しながら動作しており、あるオブジェクトを追加すると、そのオブジェクトによって他のオブジェクトの状態が影響を受けるからである。システムの検証が不完全な場合、いわゆるデッドロックが発生する恐れもある。従って、システムが複雑になるにつれ、オブジェクト指向型言語によって構成されたネットワーク機器システムに新しいネットワーク機器を追加するのは容易ではなかった。さらに、オブジェクトは内部状態情報を多く抱えているため、システムの検証の際にある問題が生じると、その問題を再現させるためには内部状態情報を特定し再現する必要があるため、デバッグも容易ではなかった。
【０００５】
ところで、特許文献１は、複数のエージェントが通信により所定のシステム特性に従って協調動作しタスクを処理する自律分散型システムを開示している。この分散型システムでは、システム全体の問題を独立に求解可能な子問題に分解し、各エージェントがネゴシエーションによって各子問題の分担を決めている。各子問題は、他の子問題と依存関係がなく且つ各子問題の結果が他の子問題で必要とされないように設定される。この自立分散型システムでは、各エージェントが自律して問題を解決するため、システム設定の変更など、システムの保守が容易となると記載されている。
【０００６】
そこでシステム変更に容易に対応するために、このような自律分散型システムを、上述のネットワーク機器システムに適用することが考えられる。しかしながら、上述のようなネットワーク機器システムは、システム全体の問題を子問題に分解するのが困難であり、また分解された子問題間に依存関係があるため、上記文献の自律分散型システムを適用することは困難であった。
【特許文献１】特開平８−１３７６９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は上記の問題点を解決するために為されたものであって、システムの変更・拡張に容易に対応でき、デッドロックが生じる恐れもなく、且つシステムを最適化できるネットワーク機器システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の発明者は、上記問題を解決するために、いわゆる関数型言語に着目した。関数型言語は、数学的な言語仕様をもつプログラミング言語（例えば、Haskell）のことで、状態という概念をもたず、引数によってのみ結果が決まり、副作用がなく、参照透過性を有する。
【０００９】
本発明のネットワーク機器システムは、電気通信回線に接続された複数のネットワーク機器が互いに連係して所定の動作を行うネットワーク機器システムであって、関数型言語の関数の組み合わせによってシステム全体が構築されている。そして、システム全体の関数を適切に各ネットワーク機器に分散させ、各ネットワーク機器が各自に割り当てられた関数を実行することによってシステム全体として所定の動作を行うように構成されている。
【００１０】
各ネットワーク機器は、関数記憶部と、変数記憶交換器と、実行関数選択部と、関数実行部とを備える。関数記憶部は、自ネットワーク機器において実行が必要な関数を記憶する。変数記憶交換器は電気通信回線を介して各ネットワーク機器と接続され、各ネットワーク機器の関数記憶部に記憶された関数の実行に必要な変数を記憶し、各ネットワーク機器間で共有する。実行関数選択部は、前記変数記憶交換器が記憶している変数を参照し、自ネットワーク機器の関数実行部に記憶された関数のうち実行可能な関数を選択する。関数実行部は、前記実行関数選択部により選択された関数を前記変数記憶交換器に記憶された変数を用いて実行すると共に、関数の実行によって得られた変数によって、前記変数記憶交換器に記憶された変数を更新する。
【００１１】
関数型言語では、ある関数の実行に必要な変数を監視し、その関数の実行に必要な変数が全て拘束された時点で、その関数を実行することができる。従来研究されている関数処理系では、各関数は主にコンピュータの内部で処理されるため、関数の実行に必要な変数を監視することは容易であった。しかしながら、本発明のように遠隔地に各ネットワーク機器が設置されたネットワーク機器システムに関数処理系を適用する場合、如何に変数を監視するかが問題となる。そこで、本発明の発明者は、各ネットワーク機器に上述の関数記憶部と、変数記憶交換器と、実行関数選択部と、関数実行部とを設けることによってこの問題を解決した。
【００１２】
すなわち、本発明のネットワーク機器システムにおいては、システム全体の関数の実行に必要な変数が、電気通信回線を介して互いに接続された各ネットワーク機器の変数記憶交換器によって記憶・共有される。実行関数選択部は、変数記憶交換器が共有している変数を参照し、自ネットワーク機器の関数実行部に記憶された関数のうち実行可能な関数があれば、その関数を選択する。関数実行部は前記実行関数選択部により選択された関数を実行すると共に、実行結果によって前記変数記憶交換器に記憶された変数を更新（拘束）する。更新された変数は別の関数で使用され、再びその実行結果によって、変数記憶交換器に記憶された変数が更新される。
【００１３】
上述の構成によって、分散したネットワーク機器に関数処理系が実装された分散型関数処理系のネットワーク機器システムを実現することができた。このネットワーク機器システムは、関数処理系によって構成されているため、新しい関数を追加しても、その副作用がなく、システムの変更に容易に対応できる。また、関数処理系は、実行順序に依存しないため、デッドロックが生じる恐れもない。また、各ネットワーク機器に関数を適切に分散させることによって、システムの最適化を図ることができる。関数の分散のさせ方に拘わらず、システム全体の挙動は、変化しないことが数学的に保証できる。
【００１４】
好ましくは、前記関数記憶部は、少なくとも自ネットワーク機器に固有の関数を記憶する。自ネットワーク機器に固有の関数とは、そのネットワーク機器にしか実行できない関数のことであり、例えば、センサの値を読むなど、入出力に関する関数であることが多い。ネットワーク機器システムでは、各ネットワーク機器が“センサの値を読む”などその機器固有の関数を備えていることが多く、すべての関数をシステム全体に分散させることはできない。従って、少なくとも自ネットワーク機器に固有の関数は自ネットワーク機器の関数記憶部で記憶し、自ネットワーク機器に固有でない関数は各ネットワーク機器に分散して割り当てることによって、入出力に応じて時系列で処理が進むような関数処理系のネットワーク機器システムを実現することができる。
【００１５】
好ましくは、このネットワーク機器システムは、さらに機能分散ネゴシエーション部を備える。機能分散ネゴシエーション部は、電気通信回線を介して他のネットワーク機器と接続され、前記関数記憶部に記憶された関数のうち、自ネットワーク機器に固有の関数を除いた関数を他のネットワーク機器に委譲する機能を有する。前記関数記憶部は、前記機能分散ネゴシエーション部によって他のネットワーク機器から委譲された関数を記憶する。この場合、関数の計算主体を動的に変更し、システムの最適化・能力向上を分散的に図ることができる。
【００１６】
好ましくは、前記機能分散ネゴシエーション部は、各ネットワーク機器に対して処理負荷を問い合わせ、各ネットワーク機器からその回答を受け取り、その回答に基づいて、関数を委譲する他のネットワーク機器を決定する。この場合、その関数を委譲するのに好ましいネットワーク機器を選択することができる。なお、前記処理負荷は、各ネットワーク機器の負荷状況や、ある関数の実行に必要な処理時間などを含む。
【００１７】
好ましくは、前記複数のネットワーク機器の少なくとも一つは、このネットワーク機器システムで使用される関数の実装を記憶した関数リポジトリを備え、各ネットワーク機器はさらに、前記関数実行部が所定の関数を実行するのに必要な関数の実装を記憶する関数実装記憶部と、前記機能分散ネゴシエーション部によって他のネットワーク機器から委譲された関数のうち、前記関数実装記憶部に記憶されていない関数の実装を、前記関数リポジトリから取得する関数実装追加部とを備える。この場合、システムの変更・拡張が容易となる。
【００１８】
好ましくは、各ネットワーク機器はさらに、前記変数記憶交換器に記憶された変数を、各ネットワーク機器間で共有すべき共有変数と共有しない非共有変数とに区分する変数公開制御部を備え、前記変数記憶交換器は、共用変数のみを電気通信回線を介して各ネットワーク機器間で共有する。この場合、変数記憶交換器で不要な変数を共有するのを抑制することができ、変数を共有するためのネットワーク負荷を下げることができる。
【００１９】
好ましくは、前記複数のネットワーク機器は、少なくとも、センターサーバと、各家庭に設置されるホームサーバと、各家庭に設置される設備機器とを含む。この場合、センターサーバと家庭内のホームサーバや設備機器が互いに接続されたホームシステムを構築することが出来き、処理能力の高いセンターサーバやホームサーバに関数を分散させることで、システムの処理能力を向上させることができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明を添付の図面を参照しながら詳細に説明する。
【００２１】
図１は、本発明の実施形態に係る分散型関数処理系のネットワーク機器システムの構成を示す図である。このネットワーク機器システムでは、ネットワーク機器として、センターサーバ１、各家庭Ｈに設置されたホームサーバ３、および各家庭Ｈに設置された情報表示装置４、空調制御装置５などの各種設備機器が、インターネット回線２やＬＡＮを介して互いに接続されている。なお、本実施形態においては理解を容易とするために上述のネットワーク機器のみを例に挙げたが、もちろんネットワーク機器はこれらに限定されるものではない。
【００２２】
センターサーバ１は、ネットワーク機能を有する汎用のコンピュータ装置で構成されており、このネットワーク機器システムで使用される関数の実装を記憶した関数実装リポジトリ６を備える。
【００２３】
ホームサーバ３は、センターサーバ１と連係をとりながら家庭内の各設備機器にＬＡＮを通じて様々な機能を提供する。ホームサーバ３は、ゲートウェイ機能や、Ｗｅｂサーバ機能などを備えていても良い。
【００２４】
情報表示装置４は、ディスプレイを備え、ディスプレイ上に各種情報を表示することができる。
【００２５】
空調制御装置５は、室内の温度を検知する温度センサ（図示せず）を備え、インターネットを介して宅内外から室内の空調を制御することができる。空調制御装置５を宅内で操作する際は、情報表示装置４のディスプレイ上に空調制御装置５の操作画面が表示され、使用者は情報表示装置４のディスプレイを見ながら操作できる。
【００２６】
このネットワーク機器システムは、関数の組み合わせによってシステム全体が構築された関数処理系のシステムである。すなわち、システム全体の機能が関数型言語の関数の組み合わせによって記述されている。関数処理系のシステムでは、各ネットワーク機器固有の関数を除いて、関数の実行はどのネットワーク機器が行ってもよい。すなわち、ネットワーク機器システム内において、関数はその実行場所（計算主体）を問わない。従ってこのネットワーク機器システムは、システム全体で必要とされる関数群を適切に各ネットワーク機器に分散させ、各ネットワーク機器が各自に割り当てられた関数を実行することによってシステム全体として所定の動作を行うように構成されている。
【００２７】
関数を分散させる方法は、例えば、センターサーバ１或いはホームサーバ３に、ネットワーク機器の組み合わせに応じて各ネットワーク機器に割り当てる関数を記したリストを予め保存しておき、センターサーバ１或いはホームサーバ３は、そのリストを参照しながらネットワーク機器の組み合わせに応じて、各関数を各ネットワーク機器に静的に分散させても良い。或いは、上記リストにないネットワーク機器の組み合わせが行われた場合や、センターサーバ１、ホームサーバ３に予め上記リストを持っていない場合などは、センターサーバ１或いはホームサーバ３が各ネットワーク機器から各ネットワーク機器の処理能力（スペック）を吸い上げ、各ネットワーク機器の処理能力を基に最適な分散方法をシミュレーションし、シミュレーション結果に基づいて動的に分散させても良い。或いは、詳しくは後述するように、各ネットワーク機器がネゴシエーションによって、互いに動的に分散させても良い。
【００２８】
図２に示すように、ホームサーバ３、および情報表示装置４、空調制御装置５は、それぞれ、関数記憶部１０と、変数記憶交換器１１と、実行関数選択部１２と、関数実行部１３と、機能分散ネゴシエーション部１４と、関数実装記憶部１５と、実装関数追加部１６と、変数公開制御部１７とを備える。
【００２９】
関数記憶部１０は、自ネットワーク機器において実行が必要な関数を記憶する。ここで、自ネットワーク機器において実行が必要な関数とは、大きく次の３種類の関数がある。
【００３０】
第1は、他のネットワーク機器では実行できないそのネットワーク機器固有の関数である。例えば、“空調制御装置５の温度センサを読む”という関数があるとすると、その関数は温度センサを備えた空調制御装置５でしか実行できない。このように、関数記憶部１０は、少なくともそのネットワーク機器固有の関数を記憶する。
【００３１】
第２は、センターサーバ１或いはホームサーバ３、あるいは他のネットワーク機器とのネゴシエーションの結果、他のネットワーク機器から委譲された関数である。
【００３２】
第３は、ネットワーク機器の出荷時から関数記憶部１０に記憶され、他のネットワーク機器に委譲されていない関数である。
【００３３】
変数記憶交換器１１は、ＬＡＮやインターネット回線などの電気通信回線を介して各ネットワーク機器と接続されており、各ネットワーク機器の関数記憶部１０に記憶された関数の実行に必要な変数を記憶し、各ネットワーク機器間で共有する。共有の仕方としては、例えば、共用変数が更新された変数交換器１１が各ネットワーク機器の変数交換器１１に対してマルチキャストで共用変数の更新リストを伝達し、共用変数の更新リストを受けた各変数交換器１１がその更新リストに記載されている共用変数を記憶するようにすればよい。
【００３４】
実行関数選択部１２は、変数記憶交換器１１が共有している変数を定期的に参照し、自ネットワーク機器の関数実行部１０に記憶された関数のうち実行可能な関数を選択する。
【００３５】
関数実行部１３は、実行関数選択部１２により選択された関数を変数記憶交換器１１に記憶された変数を用いて実行する。また、関数実行部１３は、関数の実行によって得られた変数によって、前記変数記憶交換器に記憶された変数を更新する。
【００３６】
関数実装記憶部１５は、関数実行部１３が関数記憶部１０に記憶された関数を実行するのに必要な実装を記憶している。
【００３７】
以下、変数記憶交換器１１、実行関数選択部１２、関数実行部１３、関数実装記憶部１５について、図３のフローチャートを参照しながら、具体的に説明する。
【００３８】
あるネットワーク機器の関数記憶部１０に、次の２つの関数が記憶されているとする（換言すれば、あるネットワーク機器に次の２つの関数が割り当てられているとする。）。
【００３９】
ｃ＝ｆ（ａ，ｂ）；  （関数１）
ｅ＝ｇ（ｄ）；  （関数２）
ただし、ａ，ｂ，ｃ，ｄ，ｅは変数で、ｆ（ａ，ｂ）は、変数ａ，ｂを引数とする関数を意味し、ｇ（ｄ）は変数ｄを引数とする関数を意味する。
【００４０】
実行関数選択部１２は、変数記憶交換器１１が共有している変数を定期的に参照し、自ネットワーク機器の関数実行部１０に記憶された関数（すなわち、ｆ（ａ，ｂ），ｇ（ｄ））の実行に必要な変数（すなわち、ａ，ｂ，ｄ）が拘束されているか否かを調べる（ステップＳ１）。具体的には、実行関数選択部１２は、自ネットワーク機器の関数実行部１０に記憶された関数の実行に必要な変数ａ，ｂ，ｄと、変数記憶交換器１１に記憶された変数とのパターンマッチングを行っている。
【００４１】
あるタイミングで、変数記憶交換器１１において、変数ａ，ｂが共に拘束されたとする。実行関数選択部１２は、パターンマッチングの結果、自ネットワーク機器の関数実行部１０に記憶された関数ｆ（ａ，ｂ）の実行に必要な変数ａ，ｂが、変数記憶交換器１１で拘束されたことを検知すると、実行可能となった関数ｆ（ａ，ｂ）を選択する（ステップＳ２）。
【００４２】
関数実行部１３は、実行関数選択部１２で関数ｆ（ａ，ｂ）が選択されると、関数実装記憶部１５からその関数ｆ（ａ，ｂ）の実行に必要な実装を取得し、変数記憶交換器１１に記憶された変数ａ，ｂを用いて、関数ｆ（ａ，ｂ）を実行する（ステップＳ３）。そして、関数実行部１３は、関数の実行によって得られた変数ｃ（ｃ＝ｆ（ａ，ｂ））で、変数記憶交換器１１に記憶された変数を更新する（ステップＳ４）。これによって、変数ｃが変数記憶交換器１１に新たに記憶され、各ネットワーク機器間で共有される。
【００４３】
この変数ｃはこのネットワーク機器では使用されないが、別のネットワーク機器によって使用され、その結果によって新たな変数が拘束（更新）され、連鎖的に次々と関数が実行される。
【００４４】
その間、このネットワーク機器は、ステップＳ１に戻って、再び、変数記憶交換器１１が共有している変数を定期的に参照し、自ネットワーク機器の関数実行部１０に記憶された関数（すなわち、ｇ（ｄ））の実行に必要な変数（すなわち、ｄ）が拘束されているか否かを調べる。あるタイミングで変数ｄが拘束されると、実行可能となった関数ｇ（ｄ）を選択する（ステップＳ２）。そして、関数実行部１３は、関数ｇ（ｄ）の実行に必要な実装を関数実装記憶部１５から取得し、関数ｇ（ｄ）を実行する（ステップＳ３）。そして、関数実行１３は、得られた変数ｅ（ｅ＝ｇ（ｄ））で、変数記憶交換器１１に記憶された変数を更新する（ステップＳ４）。
【００４５】
以上のように、関数型処理系のこのネットワーク機器システムでは、システム全体の関数のうち、関数の実行に必要な変数が拘束された関数から順に次々と実行され、結果的に、システム全体の関数が実行される。
【００４６】
なお、実行関数選択部１２が定期的に変数記憶交換器１１を参照しにいく代わりに、変数が更新されると、その更新をトリガーとして、変数記憶交換器１１が自設備機器内の実行関数選択部１２にイベントを挙げるようにしてもよい。或いは、実行関数選択部１２は、変数記憶交換器１１に共有されている全ての変数を参照するのではなく、予め設定された必要な変数のみを部分的に参照するようにしてもよい。この場合、実行関数選択部１２が変数記憶交換器１１に記憶された変数全てを参照する場合と比較して、実行関数選択部１２の負荷を減らすことができ、また、実行関数選択部１２の参照速度を速めることができる。
【００４７】
次に、機能分散ネゴシエーション部１４について説明する。機能分散ネゴシエーション部１４は、ＬＡＮなどを介して他のネットワーク機器の機能分散ネゴシエーション部１４と接続され、関数記憶部１０に記憶された関数を他のネットワーク機器に委譲する機能を有する。
【００４８】
上述のように、このネットワーク機器システムは、関数型処理系のため、ネットワーク機器固有の関数を除いては、関数の実行はどのネットワーク機器が行ってもよく、関数を各ネットワーク機器に適切に分散させることによって、システムの最適化・機能向上を図ることが出来る。
【００４９】
機能分散ネゴシエーション部１４は、センターサーバ１やホームサーバ３が関数の分散を集中的に行うのではなく、各ネットワーク機器が自ネットワーク機器に割り当てられた関数を他のネットワーク機器に動的且つ分散的に委譲するために設けられている。
【００５０】
機能分散ネゴシエーション部１４が起動されるタイミングは特に限定されるものではないが、例えば、各設備機器が自設備機器のCPUの稼働率をモニタする検出手段を備え自設備機器の処理能力が限界に近づいたときや、システムに新しいネットワーク機器が取り付けられたとき、或いは、ネットワーク機器のソフトウェアが更新されたときなどに、機能分散ネゴシエーション部１４は起動される。
【００５１】
機能分散ネゴシエーション部１４が起動されると、機能分散ネゴシエーション部１４は、自ネットワーク機器の関数記憶部１０に記憶された関数のうち、自ネットワーク機器固有の関数を除いた関数の計算主体について、他のネットワーク機器の機能分散ネゴシエーション部１４と交渉を行う。具体的には、機能分散ネゴシエーション部１４は、ある関数の実行に必要な処理負荷（処理時間、処理能力などを含む）を各ネットワーク機器にマルチキャストで問い合わせ、各ネットワーク機器より回答を受け取る。そして、その回答に基づいて、最終的にその関数を委譲するのに最も好ましいネットワーク機器を決定する。好ましくは、処理負荷だけでなく、通信のオーバーヘッド等の条件も考慮して、委譲するネットワーク機器を決定する。もし回答の結果、自ネットワーク機器が実行するのが最も好ましいと判断した場合は、委譲せずに自ネットワーク機器で実行する。
【００５２】
関数を委譲されたネットワーク機器は、関数記憶部１０に委譲された関数を記憶する。そしてそれ以降、その関数はそのネットワーク機器によって実行される。
【００５３】
このように、関数の計算主体を負荷状況や、処理時間や処理能力に応じて動的に変更することでシステムの最適化・機能向上を動的かつ分散的に図ることができる。
【００５４】
以下、機能分散ネゴシエーション部１４について具体例を挙げて説明する。
【００５５】
図４Ａに示すように、ある家庭に、空調制御装置５と情報表示装置４とが設置されているとする。空調制御装置５と情報表示装置４とはＬＡＮを介して接続されており、空調制御装置５を使用する際は、情報表示装置４のディスプレイ上に空調制御装置５の操作画面が表示され、使用者は情報表示装置４のディスプレイを見ながら操作できる。
【００５６】
空調制御装置５には、関数Ａ〜Ｃが割り当てられ記憶されているとする。関数Ａは、空調制御装置５固有の関数（ここでは、空調制御装置５の温度センサの値を読むという関数とする）で、関数Ｂ、Ｃは、空調制御装置５固有の関数ではなく、他のネットワーク機器に委譲可能な関数である。関数Ｃは、情報表示装置４に表示させる空調制御装置５の操作画面を作成するための関数（以下、作画関数Ｃと称す。）とする。
【００５７】
図４Ａの場合、まず空調制御装置５の関数Ａ（温度センサの値を読む関数）が空調制御装置５によって実行される。次に、関数Ａの実行によって拘束された変数を基に、関数Ｂ、Ｃ、或いは、情報表示装置４の別の関数が実行される。その後、ある関数の実行によって拘束された変数に基づいて、別の関数が実行され、結果的に情報表示装置４、空調制御装置５の全ての関数が時系列で次々と実行される。
【００５８】
また、例えば、ホームセキュリティーシステムにおいては、人体検知センサ、照明器具、カメラ装置、情報表示装置、ホームサーバ等がネットワーク機器として動作する。まず、人体検知センサが人体検知の関数を実行した結果の変数を自機器の変数記憶交換器１１において拘束し、各ネットワーク機器と共有する。次に、照明器具及びカメラ装置にある、その拘束されたその変数を入力とする関数が、入力変数が拘束されたことによって実行され、それぞれ、たとえば照明を点灯させたり、カメラ撮像を開始したりする。さらに、カメラが、その関数処理の結果、ある変数（たとえば撮影時間などの意味をもった変数）を拘束し、この変数を各ネットワーク機器間で共有すると、ホームサーバがその変数を入力として、Ｗｅｂブラウザ付ＴＶなどの情報表示装置に表示させる関数を実行する。このように、ホームセキュリティーシステムを実現することも可能となる。
【００５９】
ところで、図４Ａの場合、作画関数Ｃは空調制御装置５に割り当てられているため、空調制御装置５の操作画面は空調制御装置５自身によって作画される。しかしながら、空調制御装置５は、処理能力が低いため、情報表示装置４には単純な操作画面しか表示することができない。
【００６０】
ここで、図４Ａのネットワーク機器システムに、図４Ｂに示すように、処理能力の高いホームサーバ３を新たに追加したとする。ホームサーバ３をシステムに設置すると、システムに新しいネットワーク機器が取り付けられたことに起因するトリガーによって、空調制御装置５とホームサーバ３、情報表示装置４の各機能分散ネゴシエーション部１４が、関数の計算主体について交渉を始める。
【００６１】
空調制御装置５は、関数記憶部１０に記憶されている関数Ｂ，Ｃの実行に必要な処理時間や処理能力をホームサーバ３、表示制御装置４にマルチキャストで問い合わせる。ここで、関数Ａは空調制御装置５固有の関数のため、交渉対象とならない。
【００６２】
その結果、関数Ｃ（作画関数Ｃ）に関しては、ホームサーバ３が、空調制御装置５、情報表示装置４よりも処理時間、処理能力が優れていることがわかると、空調制御装置５は関数Ｃをホームサーバ３に委譲する。
【００６３】
関数Ｃを委譲されたホームサーバ３は、ホームサーバ３の関数記憶部１０に関数Ｃを記憶し、それ以降、ホームサーバ３が関数Ｃを実行する。ホームサーバ３は作画の処理時間が短く、かつ処理能力も高いため、図４Ｂでは、情報表示装置４のディスプレイに、色彩豊かな操作画面を高速に表示することができる。
【００６４】
委譲されなかった関数Ａ，Ｂは、これまでどおり、空調制御装置５が実行する。
【００６５】
以上のように、機能分散ネゴシエーション部１４によって関数の計算主体を動的に変更することができ、それによってシステムの最適化・機能向上を図ることができる。しかも、関数型処理系の関数は副作用がないため、関数を委譲しても、委譲先のネットワーク機器本来の動作に影響を及ぼすことがない。つまり、図４Ｂの例では、ホームサーバ３に、空調制御装置５の作画関数Ｃが委譲されたとしても、ホームサーバ３の本来の動作は保証できる。もちろん、空調制御装置５の動作も保証できる。
【００６６】
図４Ａ，図４Ｂでは、機能分散ネゴシエーション部１４によって処理時間、および作画能力が向上されたが、もちろん、機能分散ネゴシエーション部１４によって他の能力、例えば、作動状況の履歴を参照する履歴参照能力や、消費電力を下げる能力などを高めることもできる。
【００６７】
また、図４Ａ，図４Ｂでは、機能分散ネゴシエーション部１４が交渉を行う範囲は、家庭内に設置されたネットワーク機器３，４，５のみであったが、例えば、図１のように家庭内の設備機器がインターネット２を介してセンターサーバ１と接続されているような場合は、各機能分散ネゴシエーション部１４はセンターサーバ１を含めた範囲で交渉を行うようにしてもよい。センターサーバ１に関数を委譲した場合、さらに処理能力を向上できる可能性がある。
【００６８】
ところで、機能分散ネゴシエーション部１４によって新しい関数が委譲されると、自ネットワーク機器の関数実装記憶部１５にその関数の実装が記憶されていない場合がある。関数実装記憶部１５がシステムで使用される全ての関数の実装を記憶するようにしてもよいが、記憶容量が無駄であり現実的ではない。また新たに追加された関数にも対応できない。そこで、図２に示すように、各ネットワーク機器は、実装関数追加部１６を備えるのが好ましい。実装関数追加部１６はインターネット２を介して、センターサーバ１の関数実装リポジトリ６と接続されている。機能分散ネゴシエーション部１４によって、関数実装記憶部１５に実装がない関数が委譲されると、実装関数追加部１６はインターネット回線を介して、関数実装リポジトリ６からその関数の実装を取得する。これにより、関数実装記憶部１５に実装が記憶されていない関数が委譲されても、関数実行部１３はその関数を実行できるようになる。また、新しいネットワーク機器をシステムに追加しても、センターサーバ１の関数実装リポジトリ６にその実装を記憶させるだけで、どのネットワーク機器もその関数を実行できるようになる。なお、関数実装追加部１６は、関数リポジトリ６のみではなく、関数を委譲したネットワーク機器から、関数の実装を取得しても良い。
【００６９】
より好ましいシステム構成としては、各ネットワーク機器は、図２に示すように、変数公開制御部１７を備える。変数公開制御部１７は、変数記憶交換器１１に記憶された変数を、各ネットワーク機器間で共有すべき共有変数と共有しない非共有変数とに区分し、変数記憶交換器１１は、共用変数のみを電気通信回線を介して各ネットワーク機器間で共有する。
【００７０】
より詳細に述べると、変数記憶交換器１１が共有する変数の数は、システムが大きくなるにつれて多くなる。しかしながら、全ての変数を共有する必要はなく、例えば、ある関数Ｘの実行によって拘束された変数αを別の関数Ｙが使用する場合、もし双方の関数Ｘ，Ｙが同じネットワーク機器で実行されるならば、その変数αを公開（共有）する必要はない。従って、その場合、変数公開制御部１７は、変数αを非共用変数とし、変数記憶交換器１１は、変数αをネットワーク機器間で共用しない。しかし、もし双方の関数Ｘ，Ｙが別のネットワーク機器で実行されるならば、その変数αは公開（共有）しなければならず、その場合、変数公開制御部１７は、変数αを共用変数とし、変数記憶交換器１１は、変数αを電気通信回線を介して各ネットワーク機器間で共有する。なお、どの変数を共用変数とすべきかは、機能分散ネゴシエーション部１４の交渉結果によってわかる。変数公開制御部１７を設けることで、不要な変数を共有するのを抑制することができ、それにより変数を共有するためのネットワーク負荷を下げることができる。
【００７１】
以上のように各ネットワーク機器を構成することで、分散型関数処理系のネットワーク機器システムを実現することができる。このネットワーク機器システムは、関数処理系の関数の組み合わせによって構成されているため、新たなネットワーク機器を追加しても、新しいネットワーク機器の機能（関数）が既存のネットワーク機器システムに副作用を与えることがなく、システムの変更に容易に対応できる。また、システム全体の関数を各ネットワーク機器間（図１では、センターサーバ１、ホームサーバ３、情報表示装置４、空調制御装置５間）で適切に分散させることで、システム全体の最適化・能力向上を図ることができる。例えば、図１のシステムに防犯装置（図示せず）を追加したとしても、防犯装置に設けられた関数が既存のネットワーク機器の関数に副作用を与えることがないため、容易に防犯装置をシステムに追加することができ、防犯装置の検出機能以外の機能を担う関数を各ネットワーク機器の処理負荷に応じて委譲させることも可能である。関数を分散させる方法は、センサーサーバ１或いはホームサーバ３が集中的に行っても良いし、各ネットワーク機器が、機能分散ネゴシエーション部１４によって分散的に行っても良い。関数の分散のさせ方に拘わらず、システム全体の挙動は、変化しないことが数学的に保証できる。また、関数処理系は、実行順序に依存しないため、デッドロックが生じる恐れもない。
【００７２】
上記のように、本発明の技術的思想に反することなしに、広範に異なる実施形態を構成することができることは明白なので、この発明は、請求の範囲において限定した以外は、その特定の実施形態に制約されるものではない。
【図面の簡単な説明】
【００７３】
【図１】本発明の実施形態に係るネットワーク機器システムの構成を示す図である。
【図２】図１のネットワーク機器システムに使用される各ネットワーク機器の構成を示すブロック図である。
【図３】図１のネットワーク機器システムにおいて関数が実行される手順を説明するためのフローチャートである。
【図４Ａ】図１のネットワーク機器システムにおいて関数の委譲を説明するための図である。
【図４Ｂ】図１のネットワーク機器システムにおいて関数の委譲を説明するための図である。
【符号の説明】
【００７４】
１  センターサーバ
２  インターネット
３  ホームサーバ
４  情報表示装置
５  空調制御装置
６  関数リポジトリ
１０  関数記憶部
１１  変数記憶交換器
１２  実行関数選択部
１３  関数実行部
１４  機能分散ネゴシエーション部
１５  関数実装記憶部
１６  実装関数追加部
１７  変数公開制御部
【図１】
2007200313.tif 000003
【図２】
2007200313.tif 000004
【図３】
2007200313.tif 000005
【図４Ａ】
2007200313.tif 000006
【図４Ｂ】
2007200313.tif 000007