以下、本発明の実施の形態について図面を参照して説明する。
本発明は、システム全体における分散型共有メモリ1を利用して、複数のネットワーク機器に必要な情報を重複して記憶する動作を動的に変化させることによって、ネットワーク機器に必要な情報のデータロスを回避する分散記憶システムに適用される。
[分散記憶システムの基本的な構成例]
分散記憶システムは、例えば図1に示すように、汎用バスであるネットワークNWに複数のデバイスコントローラ(ネットワーク機器)D1〜D4(以下、総称する場合には、単に「デバイスコントローラDi」と呼ぶ。)が接続された分散記憶システムに適用される。汎用バスであるネットワークNWは、例えば、IP(Internet Protocol)を使用したインターネット等が挙げられる。複数のデバイスコントローラD1〜D4は、それぞれ、P2P(Peer-to-peer)通信が可能となっており、相互で情報の授受が可能となっている。
各デバイスコントローラDiは、複数の末端デバイスがフィールドバスに接続されてなるサブネットワークが接続されている。デバイスコントローラD1〜D4は、フィールドバスに接続された複数の末端デバイスの制御、監視等をするための情報を格納した構成記述ファイルCFGi(C1〜C4)が記憶されている。また、デバイスコントローラD1〜D4は、他のデバイスコントローラDiの構成記述ファイルCFGiを、それぞれ自己の分散型共有メモリ1−D1,1−D2,1−D3,1−D4に記憶している。この分散型共有メモリ1は、自己の構成記述ファイルCFGiを記憶する記憶手段とは別に設けられて、他のデバイスコントローラDiの構成記述ファイルCFGiのバックアップ用記憶手段として機能する。
図1に示す例では、デバイスコントローラD1の分散型共有メモリ1−D1は、他のデバイスコントローラDiの構成記述ファイルCFGiが3個分格納可能なメモリ容量(3スロット)となっており、デバイスコントローラD2の分散型共有メモリ1−D2は、他のデバイスコントローラDiの構成記述ファイルCFGiが2個分格納可能なメモリ容量(2スロット)となっており、デバイスコントローラD3の分散型共有メモリ1−D3は、他のデバイスコントローラDiの構成記述ファイルCFGiが3個分格納可能なメモリ容量(3スロット)となっており、デバイスコントローラD4の分散型共有メモリ1−D4は、他のデバイスコントローラDiの構成記述ファイルCFGiが格納できないメモリ容量(分散型共有メモリ1がない)状態となっている。分散型共有メモリ1−D1には、構成記述ファイルCFG2,CFG3,CFG4が記憶され、分散型共有メモリ1−D2には、構成記述ファイルCFG1,CFG3が記憶され、分散型共有メモリ1−D3には、構成記述ファイルCFG1,CFG2,CFG4が記憶され、分散型共有メモリ1−D4には、構成記述ファイルCFGiが記憶されていない状態となっている。
したがって、この分散記憶システムは、それぞれのデバイスコントローラDiで異なる容量の分散型共有メモリ1を有していて、それぞれのデバイスコントローラDiは、他のデバイスコントローラDiや他のネットワーク機器からの要求に従って、自己の分散型共有メモリ1に記憶させる構成記述ファイルCFGiを動的に変化させる。
[分散記憶システムの基本的な動作]
この分散記憶システムは、図2に示すように、他のデバイスコントローラDiの構成記述ファイルCFGiが更新されたことに応じて自己に記憶させている分散型共有メモリ1を更新すると共に、図3に示すように、他のデバイスコントローラDiに自己の分散型共有メモリ1に記憶している構成記述ファイルCFGiを提供する機能を有する。
分散記憶システムにおいて、例えば作業者によって構成記述ファイルCFG4が更新された構成記述ファイルCFG4+とされると、デバイスコントローラD4は、他のデバイスコントローラDiに記憶されている構成記述ファイルCFG4を構成記述ファイルCFG4+に更新するファイル更新リクエストをネットワークNWにブロードキャストする。そして、構成記述ファイルCFG4を記憶しているデバイスコントローラD1、デバイスコントローラD3は、ファイル更新リクエストを受信すると、自己の分散型共有メモリ1−D1,1−D3に記憶された構成記述ファイルCFG4を、当該ファイル更新リクエストに添付された構成記述ファイルCFG4+に更新する。また、デバイスコントローラD3は、構成記述ファイルCFG4を記憶していないので、ファイル更新リクエストを破棄する。
また、作業者によって、図3(a)に示すようにデバイスコントローラD4が新たなデバイスコントローラDiにハードウェア交換されて、図3(b)に示すようにデバイスコントローラD4となるためのデバイスコントローラIDが付加されると、デバイスコントローラD4は、自己の構成記述ファイルCFGiを要求するために、デバイスコントローラIDを含むファイル転送リクエストをネットワークNWにブロードキャストする。
そして、図3(c)に示すように、構成記述ファイルCFG4を記憶しているデバイスコントローラD1は、ファイル転送リクエストを受信すると、自己の分散型共有メモリ1−D1に記憶された構成記述ファイルCFG4をデバイスコントローラD4に返信する。これによって、デバイスコントローラD4は、フィールドバスの末端デバイスと通信するための構成記述ファイルCFG4を取得できる。ここで、デバイスコントローラDi3は、現在記憶制御部12を含む処理負荷が高いために、デバイスコントローラD4からのファイル転送リクエストをキャンセルしている。また、デバイスコントローラD3は、構成記述ファイルCFG4を記憶していないので、ファイル転送リクエストを破棄する。
このように分散記憶システムは、ネットワークNWに接続された他のデバイスコントローラDiの構成記述ファイルCFGiが更新された場合や、他のデバイスコントローラDiが交換されて構成記述ファイルCFGiを保持していない場合に、当該他のデバイスコントローラDiに自己が持っている構成記述ファイルCFGiが提供できるようになっている。したがって、この分散記憶システムは、以下に説明するように、それぞれのネットワーク機器のメモリ容量が異なる場合でも、互いに他のネットワーク機器の構成記述ファイルCFGiの記憶状態を動的に変化させて、各ネットワーク機器の構成記述ファイルCFGiのデータロスに対する耐性を保持することを特徴とするものである。
[分散記憶システムの構成要素]
このような分散記憶システムは、上述のように、フィールドバスに接続されて当該フィールドバスに接続された末端デバイスを制御するデバイスコントローラDi間で分散型共有メモリ1を使用する場合のみならず、ネットワークNWに接続されたその他のネットワーク機器間でも分散型共有メモリ1を利用することができる。
図4に示すように、分散型共有メモリ1を構成するネットワーク機器の構成記述ファイルCFGiがC1〜C9の9個ある場合、それぞれのネットワーク機器の構成記述ファイルCFGiの複製数が異なるものとなる。この分散記憶システムは、複製数の最大値が3であり、自己の構成記述ファイルCFGiが他のネットワーク機器に3個バックアップされているネットワーク機器と、複製数が最小値の0であり、自己の構成記述ファイルCFGiが他のネットワーク機器にバックアップされていないネットワーク機器とが混在している。この分散記憶システムにおいて、構成記述ファイルCFGiの平均値は、1.55となる。
これに対し、分散記憶システムは、ネットワークNWに接続されたネットワーク機器間で動的に分散型共有メモリ1の使用状況を変化させて、全てのネットワーク機器の構成記述ファイルCFGiが他のネットワーク機器にバックアップされている状況を保持する。
この分散記憶システムにおけるネットワーク機器のタイプとしては、図5に示すように、他の分散型共有メモリ1を利用して自己のファイルを記憶させるリクエスタRiと、自己の分散型共有メモリ1を他のネットワーク機器に提供するプロバイダPiとが存在する。そして、これらリクエスタRiとプロバイダPiとで分散型共有メモリ1を利用して構成記述ファイルCFGiのデータロスを回避する。図5に示す例では、分散型共有メモリ1を有しないネットワーク機器であるリクエスタRa,Rb,Rcと、分散型共有メモリ1を他のネットワーク機器に提供するプロバイダP1,P2,P3,P4,P5とが存在する場合を示している。上述のデバイスコントローラDiは、分散型共有メモリ1を有するのでプロバイダPiに相当し、且つ、自己の構成記述ファイルCFGiを他のデバイスコントローラDiに記憶させる意味でリクエスタRiにも相当することになる。
この分散記憶システムは、図6に示すように、各プロバイダPiの共有メモリ提供機能によって定期的又はランダムにメモリ状態レポートを出力し、当該メモリ状態レポートをリクエスタRiによって受信する。そして、リクエスタRiは、プロバイダPiの分散型共有メモリ1のスロットに空きがあり、自己の構成記述ファイルCFGiをプロバイダPiにバックアップさせたい場合には、空きスロット取得リクエストをプロバイダPiに送信し、プロバイダPiからのレスポンスを得ることができる。
[プロバイダPiの構成例]
つぎに、本発明を適用した分散記憶システムにおけるプロバイダPiの一構成例について説明する。なお、このプロバイダPiは、上述のデバイスコントローラDiのようにフィールドバスが接続されて、当該フィールドバスに接続された末端デバイスを制御・監視するためのものである。
プロバイダPiは、図7及び図8に示すように構成される。図7に示すように、プロバイダPiには、機器埋め込み型ネットワーク技術(EMIT(Embedded Micro Internetworking Technology)、以下、EMIT技術と称する。)を利用して末端デバイスとプロバイダPiとが通信を行うフィールドバスAと、末端デバイスとプロバイダPiとがパルス幅を変調するベースバンド伝送を行うことによって信号の送受信を実現する所定の多重伝送方式(エヌマスト方式)で通信を行うフィールドバスBと、LON(Local Operating Network)と称される分散制御ネットワーク方式で通信を行うフィールドバスCとが接続されている。なお、プロバイダPiには、上記のEMIT技術、エヌマスト方式、LONを利用する場合のみならず、あらゆる方式でフィールドバスが接続されていても良い。
なお、フィールドバスAには、末端デバイスA0〜A2、S3〜S7・・・といったように複数の末端デバイスが接続され、末端デバイスS3として人感センサを含んでいる。また、フィールドバスBには、末端デバイスS0,S1、A1,A3,A4・・・といったように複数の末端デバイスが接続され、末端デバイスA1として照明を含んでいる。更に、フィールドバスCには、末端デバイスA0〜A2、S3〜S5・・・といったように複数の末端デバイスが接続され、末端デバイスS2として温度センサを含んでいる。
プロバイダPiは、他のプロバイダPiやリクエスタRiとP2P通信をするネットワークNWと接続したP2P通信処理部11と、記憶制御部12と、上述の分散型共有メモリ1−D1,1−D2,1−D3,1−D4に相当する分散型共有メモリ13と、構成記述情報ドライバ14と、変数テーブル15と、アプリケーション処理部16と、フィールドバス監視・制御部17と、自己に接続された複数のフィールドバスA,B,Cに対応したフィールドバスインターフェース18A,18B,18Cとを備える。
フィールドバスインターフェース18A,18B,18Cは、それぞれのフィールドバスA,B,Cに対応した方式で通信を行うように設定されている。例えば、EMIT技術を採用したフィールドバスインターフェース18A及び当該フィールドバスインターフェース18Aに接続された末端デバイスは、図9に示すように構成される。
フィールドバスA,B,C上の末端デバイスには、EMITミドルウェア間で各種末端デバイスのコントロールデータや末端デバイスの状態信号等を送受するMOS(Micro Object Server)機能部21が実装され、フィールドバスインターフェース18Aには、EMITミドルウェア間におけるルーティング処理、末端デバイスの認識処理等を行うOAS(Object Access Server)機能部31が実装され、末端デバイスを管理するユーザの端末(図示せず)には、制御対象の末端デバイスへの制御・監視リクエストを出力すると共に末端デバイスの状態表示等を行うOAL(Object Access Library)機能部(図示せず)が実装されている。なお、図9では、フィールドバスインターフェース18A,18B,18CにOAS機能部31のみが実装されている場合について説明するが、OAL機能部が実装されていても良い。
末端デバイスは、MOS機能部21に、アプリケーション処理部22、インターフェースモジュール23が接続されている。
アプリケーション処理部22は、例えばセンサとして機能する場合に、検出値(I/F値)を取得するアプリケーションコードが記憶されており、検出値を保持してMOS機能部21に受け渡す。
インターフェースモジュール23は、OSI(Open Systems Interconnection)参照モデルにおけるデータリンク層等の処理を行う。例えばデータリンク層においてイーサネット(登録商標)に従った処理を行う。このインターフェースモジュール23の通信プロトコルバージョン、通信速度といった能力は、能力テーブル24に格納されて、OAS機能部31によって取得可能となっている。
MOS機能部21は、アプリケーション処理部22によるアプリケーション層とインターフェースモジュール23によるトランスポート層との間のEMITミドルウェアとして機能する。このMOS機能部21には、フィールドバスインターフェース18AのOAS機能部31によって、末端デバイスがEMITにおけるオブジェクトであることを識別するために、オブジェクトID21dが与えられている。
MOS機能部21は、機能(function)21a、イベント(event)21b、変数(variable)21cで定義された動作を行う。このMOS機能部21の動作は、サービステーブル21eとして定義されており、フィールドバスインターフェース18AのOAS機能部31によって、インターフェースIDとして取得可能となっている。
末端デバイスがセンサである場合、機能21aは、検出値の出力機能となり、イベント21bは、例えば検出値が所定値となったら検出値を出力するイベントとなり、変数21cは、検出値そのものとなる。このような末端デバイスは、検出値が所定値となるとイベント21bでイベントを発生させ、機能21aによって変数21cの検出値を出力する。
フィールドバスインターフェース18AのOAS機能部31は、通信モジュール32が接続されている。
OAS機能部31は、後述のフィールドバス監視・制御部17と接続され、当該フィールドバス監視・制御部17の制御に従ってフィールドバスAの末端デバイスと通信を行う。フィールドバス監視・制御部17は、ユーザ及び管理者がある末端デバイスを制御・監視する通信をしたい場合には、その旨の制御・監視リクエストが供給され、当該制御・監視リクエストに対するレスポンスを返信する。
通信モジュール32は、末端デバイスのインターフェースモジュール23との間で通信を行うと共に、他のOAS機能部31が実装された装置の通信モジュール32と通信を行う。この通信モジュール32は、OSI参照モデルにおけるデータリンク層等の処理を行う。個々の末端デバイスが様々なインターフェースモジュール23で構成されている場合、通信モジュール32は、デバイスアクセスコントローラ31cの制御に従って、末端デバイスや他のOAS機能部31を備えた装置ごとの通信プロトコルバージョン、通信速度といった末端デバイスの能力に応じた通信処理を行う。
OAS機能部31は、フィールドバス監視・制御部17の処理と通信モジュール32による処理との間のEMITミドルウェアとして機能する。このOAS機能部31は、デバイスアクセスサーバ31a、所定のメモリに格納されたサービス情報31b、デバイスアクセスコントローラ31cを備えて構成されている。
デバイスアクセスサーバ31aは、クライアント(OAL)との間で通信を行うために、クライアントからのリクエストを通信モジュール32及びフィールドバス監視・制御部17、P2P通信処理部11を介して受信する。そしてデバイスアクセスサーバ31aは、当該制御・監視リクエストをデバイスアクセスコントローラ31c及び通信モジュール32を介して末端デバイスに送信する動作を制御する。これによって、デバイスアクセスコントローラ31cは、クライアントからの要求を末端デバイスに伝達して、末端デバイスを制御する。
デバイスアクセスコントローラ31cは、末端デバイスのインターフェース定義及びサービス情報を取得するために、通信モジュール32を介して末端デバイスのサービステーブル21e及び能力テーブル24を検索する。これによって、デバイスアクセスコントローラ31cは、各末端デバイスがどのようなサービス(機能21a、イベント21b、変数21c)を有するかを判断して、各末端デバイスのオブジェクトID21dとサービスリストとの対応関係を示すサービス情報31bを作成する。また、デバイスアクセスコントローラ31cは、各末端デバイスがどのような能力(通信プロトコルバーション、通信速度)を有するかを認識する。
デバイスアクセスコントローラ31cは、MOS機能部21でイベントのイベントパケットを通信モジュール32で受信すると、デバイスアクセスコントローラ31cによって当該イベントパケットを解析して、デバイスアクセスサーバ31aに通知する。また、クライアントからの制御・監視リクエストを末端デバイスに送信する場合には、当該制御・監視リクエストに応答できるMOS機能部21を、サービス情報31bを参照して認識する。そして、当該制御・監視リクエストに送信先のオブジェクトID21dを付加し、末端デバイスの能力に合わせて通信モジュール32から末端デバイスにパケットを送信させる。
また、OAS機能部31には、他のEMITミドルウェア対応機器が当該OAS機能部31を識別するために、オブジェクトID31dが与えられている。このオブジェクトID31dは、末端デバイスのMOS機能部21や、他のOALが実装されたクライアント(パーソナルコンピュータ)等のEMITミドルウェア対応機器と通信するに際して、送信するパケットに格納される。
このようなOAS機能部31を備えたフィールドバスインターフェース18A,18B,18Cは、図8に示すように、フィールドバスドライバ18aと、フィールドバスインターフェース部18bとを備えて構成されている。
フィールドバスドライバ18aは、フィールドバス監視・制御部17からのコントロールデータを受信すると、構成記述情報ドライバ14からの構成記述情報を参照して、どの末端デバイスをどのように動作させるかを判定して、末端デバイスに向けてコマンドを送出する。また、フィールドバスインターフェース部18bは、フィールドバスドライバ18aからコマンドを受け付けると、当該コマンドをフィールドバスA,B,Cに応じた信号に変換して、フィールドバスA,B,Cに送出する。
また、フィールドバスインターフェース部18bは、フィールドバス監視・制御部17に末端デバイスの状態変化、イベント発生を通知するモニタデータをフィールドバスA,B,Cから受信した場合には、当該モニタデータをフィールドバスドライバ18aに渡して、フィールドバス監視・制御部17に送る。
フィールドバス監視・制御部17は、変数テーブル15を参照して、フィールドバスA,B,Cの制御を行う。この変数テーブル15は、図10に示すように、フィールドバスA,B,Cごとに、末端デバイス名、末端デバイス状態、変数タイプ、フィールドバスID、フィールドバス内アドレスが対応付けられて構成されている。そして、フィールドバス監視・制御部17は、フィールドバスA,B,Cの末端デバイスを監視して、変数テーブル15の内容を更新し、変数テーブル15を参照してフィールドバスA,B,Cの末端デバイスにコントロールデータを送出する。
このフィールドバス監視・制御部17は、図8に示すように、フィールドバス監視部17Aとフィールドバス制御部17Bとに機能が分割して構成される。フィールドバス監視部17Aは、フィールドバスドライバ18aからモニタデータを受信すると、変数テーブル15の内容を更新する。このとき、フィールドバス監視部17Aは、モニタデータに含まれる末端デバイスのオブジェクトIDによって末端デバイス名を認識して、当該末端デバイスの状態を書き換える。フィールドバス制御部17Bは、アプリケーション処理部16からコントロールデータを受信した場合、変数テーブル15及び構成記述ファイルCFGiを参照してコントロールデータの送出先のフィールドバス及び末端デバイス等を判定して、フィールドバスドライバ18aに転送する。
アプリケーション処理部16は、末端デバイスが実現するアプリケーション処理を制御する。このアプリケーション処理部16は、変数テーブルを参照して、フィールドバス監視・制御部17に制御・監視リクエストを与える。これによって、ネットワークNWを介してユーザから送信された監視リクエスト、制御リクエストに従って、末端デバイスを動作させる。
また、このアプリケーション処理部16は、図8に示すように、末端デバイスにコントロールデータを送出するアプリケーション処理部16Aと、後述の図12の連携テーブル16Bと、自己の構成記述情報に従って連携テーブル16Bを更新するアプリケーション更新部16Cとして構成されていても良い。
構成記述情報ドライバ14には、自己に接続されたフィールドバスA,B,Cを制御するための構成記述ファイルCFGiが格納されている。構成記述情報ドライバ14は、図8に示すように、記憶制御部12と接続され、自己の構成記述ファイルCFGiを記憶する構成記述ファイル記憶部14aを備える。構成記述情報ドライバ14は、他のデバイスコントローラから複数の構成記述ファイルCFGiが送信された場合、構成記述ファイル記憶部14aの構成記述ファイルCFGiを、情報選択部12Eで選択された構成記述ファイルCFGiに書き換える。また、構成記述情報ドライバ14は、例えば、フィールドバスA,B,Cに新たな末端デバイスが接続された場合、フィールドバス監視部17Aによって新たな末端デバイスについての情報が変数テーブル15に追加されたことがプロバイダID記憶部19から通知されると、当該フィールドバスA,B,Cの変更を構成記述ファイルCFGiに反映させる。これによって、構成記述ファイルCFGiを常に最新のものに保持できる。
この構成記述ファイルCFGiに含まれる情報(構成記述情報)には、図10に示ような自己に接続されているフィールドバスを定義するフィールドバステーブル、図11の変数テーブル15、図12に示すような末端デバイス間で行う連携動作を定義する連携テーブル、図13に示すようなその他のパラメータを格納したソフトウェアパラメータが含まれる。
図10に示すフィールドバステーブルは、フィールドバスA,B,CそれぞれのフィールドバスID(fb0,fb1,fb2,・・・)と、フィールドバスA,B,Cで採用している方式(EMIT、エヌマスト、ロン)を定義するフィールドバス情報とが対応付けられている。このフィールドバステーブルは、フィールドバス監視・制御部17に読み込まれて、自己に接続されたフィールドバスA,B,Cを特定するために参照される。
図11に示す変数テーブル15は、上述したように構成され、フィールドバス監視・制御部17及びアプリケーション処理部16によって、自己に接続された末端デバイスの状態等を特定するために参照される。この変数テーブル15は、図8に示す変数テーブル更新部15Aによって、構成記述情報を参照して更新される。
図12に示す連携テーブルは、連携動作を開始するトリガとなる末端デバイスのイベントを定義した連携発生イベント情報と、当該連携発生イベントが発生した場合に応答する末端デバイスを定義した連携応答デバイス情報と、当該連携応答デバイスが動作した結果を定義する連携結果情報とが対応付けられている。この連携テーブルは、イベント発生をフィールドバスインターフェース18A,18B,18Cを介してフィールドバス監視・制御部17で検知した時に、アプリケーション処理部16によって参照される。そして、アプリケーション処理部16は、連携テーブルに該当するイベントが発生したと判定した場合には、連携応答デバイスが連携結果を満たすように動作させる。なお、この連携テーブルは、図3に示すように、アプリケーション処理部16の一部の機能(連携テーブル16B)として構成されていても良い。
図13に示すソフトウェアパラメータには、パラメータとして記憶しておく情報の種類と、パラメータ種類情報と、パラメータ値とが対応付けられて格納されている。本例では、分散型共有メモリ13のサイズ、自己の構成記述ファイルCFGiの容量、末端デバイスの制御回数をパラメータとして記憶している。また、このソフトウェアパラメータとしては、フィールドバスインターフェース18A,18B,18Cで使用するパラメータ、アプリケーション処理部16で使用するパラメータ、記憶制御部12で使用するパラメータ、P2P通信処理部11で使用するパラメータ等も含む。
例えば分散型共有メモリ13のサイズは、記憶制御部12によって参照されて、リクエスタRi、他のプロバイダPiの構成記述ファイルCFGiが格納できるか否かが判定され、自己の構成記述ファイルCFGiの容量は、リクエスタRi、他のプロバイダPiに自己の構成記述ファイルCFGiが格納できるか否かが判定される。なお、この分散型共有メモリ1のサイズは、バイト単位ではなく、構成記述ファイルCFGiの記憶可能個数を表すスロットで記述されていても良い。
記憶制御部12は、ネットワークNWの全体における分散型共有メモリ1を利用して、他のプロバイダPiの分散型共有メモリ13に自己の構成記述ファイルCFGiをバックアップさせる処理と、リクエスタRi、他のプロバイダPiの構成記述ファイルCFGiを自己の分散型共有メモリ13にバックアップする処理とを行う。記憶制御部12は、自己の構成記述ファイルCFGiを他のプロバイダPiにバックアップさせる場合、構成記述情報ドライバ14に記憶された自己の構成記述ファイルCFGiを読み出して、P2P通信処理部11から他のプロバイダPiに送信させる。また、記憶制御部12は、リクエスタRi、他のプロバイダPiからバックアップリクエストをP2P通信処理部11を介して受け付けて、分散型共有メモリ13にリクエスタRi、他のプロバイダPiの構成記述ファイルCFGiを格納する。
また、図4に示すように、プロバイダPiは、作業者の操作パネルへの操作やディップスイッチへの動作などによって、デバイスコントローラIDが与えられる。このデバイスコントローラIDは、プロバイダID記憶部19に格納される。
このようなプロバイダPiは、図8に示すように、記憶制御部12として、情報受信部12A、情報更新部12B、情報要求部12C、構成記述情報メモリ12D、情報選択部12Eを備えている。
情報要求部12Cは、構成記述ファイル記憶部14a内のソフトウェアパラメータから自己の構成記述ファイルCFGiがないことを検知した場合には、デバイスコントローラIDを含むファイル転送リクエストをP2P通信処理部11から送信させる。このファイル転送リクエストを送信したことに応じて、他のプロバイダPiから一又は複数個の構成記述ファイルCFGiをP2P通信処理部11で受信すると、当該構成記述ファイルCFGiを情報受信部12Aで受信する。情報受信部12Aは、複数個の構成記述ファイルCFGiを構成記述情報メモリ12Dに蓄積すると、情報選択部12Eは、構成記述情報メモリ12Dに投票された形で格納された複数個の構成記述ファイルCFGiのうち、最新且つ改悪されていない構成記述ファイルCFGiを選択して、構成記述情報ドライバ14で使用可能とする。これによって、構成記述情報ドライバ14は、構成記述ファイル記憶部14aに格納された構成記述ファイルCFGiを最新のものとする。
また、記憶制御部12は、例えばフィールドバスA,B,Cの構成が変化した場合や、古い構成記述ファイルCFGiを記憶しているプロバイダPiが検知された場合に、当該構成記述ファイルCFGiを更新する必要がある。このとき、記憶制御部12は、情報更新部12Bによって、構成記述ファイルCFGiの更新が必要であることを、構成記述ファイル記憶部14aのソフトウェアパラメータから検知する。そして、情報更新部12Bは、自己の構成記述ファイルCFGiを更新するファイル更新リクエストにデバイスIDを含めて、P2P通信処理部11からブロードキャストさせる。
更に、記憶制御部12は、リクエスタRi、他のプロバイダPiから構成記述ファイルCFGiを情報受信部12Aで受信した場合、当該リクエスタRi、他のプロバイダPiの構成記述ファイルCFGiを分散型共有メモリ13に記憶させる。また、記憶制御部12は、リクエスタRi、他のプロバイダPiから当該プロバイダPiの空きスロット取得リクエストを受信した場合には、情報受信部12Aによって、当該空きスロット取得リクエストに含まれるデバイスIDに該当する構成記述ファイルCFGiを読み出して、送信する。
[分散記憶システムの機能]
上述したようなプロバイダPi及びリクエスタRiを備えた分散記憶システムは、図14に示すように、リクエスタRiに実装された分散型共有メモリ監視機能41及び記憶制御機能42と、プロバイダPiに実装された共有メモリ提供機能43とを有する。
分散型共有メモリ監視機能41は、各リクエスタRiに備えられた機能であり、プロバイダPiのメモリ状態レポート出力機能部43cでブロードキャストされたメモリ状態レポートS1を受信して、分散型共有メモリ1の状態と自己のファイルバックアップ状態とを監視する能動型監視部41aを有する。
図15に示すように、メモリ状態レポートS1には、プロバイダPiのデバイスID(以下、プロバイダIDと呼ぶ。)と、当該プロバイダPiの分散型共有メモリ13の全スロットのうちの保有スロット数(構成記述ファイルCFGiの記憶数)と、当該保有スロット数をどのリクエスタRiのために割り当てているかを示すスロット割当情報とを含み、能動型監視部41aで受信される。
メモリ状態レポートS1を受信すると、能動型監視部41aは、分散型共有メモリ1の状態を表す情報と、自己のファイルバックアップ状態を表す情報を作成して、記憶制御機能42に渡す。
能動型監視部41aは、分散型共有メモリ1の状態を表す情報として、各プロバイダPiがどのリクエスタRiの構成記述ファイルCFGiを格納しているかを示すアロケーションテーブル、自己が接続されているプロバイダPiのテーブル、プロバイダPiの総スロット数、リクエスタRiの総数、プロバイダPiの総数、最も複製数が多い構成記述ファイルCFGiで動作するリクエスタRiのID、構成記述ファイルCFGiの平均複製数を含む。また、自己のファイルバックアップ状態を表す情報として、自己の構成記述ファイルCFGiを記憶しているバックアッププロバイダPiのID、現在の分散記憶システム全体における自己の構成記述ファイルCFGiの複製数、望ましい要求複製数、分散型共有メモリ13に空きがあるメモリ利用可能なプロバイダPiの数、要求複製数をメモリ可能なプロバイダPiの数で除算したヒットレートとを含む。
記憶制御機能42は、構成記述ファイル記憶部14aに相当する構成記述情報記憶部42aと、共有メモリ状態ファイル42bと、バックアップ状態ファイル42cと、メモリ状態検知機能部42dと、空きスロット質問機能部42eと、空きスロット取得機能部42fと、複製数警告機能部42gと、スロット再割当機能部42hとを備える。
記憶制御機能42は、能動型監視部41aからの分散型共有メモリ監視機能41で作成された分散型共有メモリ1の状態を表す情報とバックアップ状態を表す情報とがメモリ状態検知機能部42dに渡されると、共有メモリ状態ファイル42b及びバックアップ状態ファイル42cを作成し、空きスロット質問機能部42e及び空きスロット取得機能部42fから参照可能とする。
空きスロット質問機能部42eは、自己の構成記述ファイルCFGiをプロバイダPiに記憶させたい場合に、ネットワークNWに空きスロット通知リクエストS2をブロードキャストし、当該空きスロット通知リクエストS2に対する空きスロット通知レスポンスS3を受信する。この空きスロット通知リクエストS2には、図15に示すように、自己のデバイスID(以下、リクエスタRiのデバイスIDをリクエスタIDと呼ぶ。)と、バックアップ状態ファイル42cに格納されているヒットレートとを含む。
この空きスロット通知リクエストS2は、プロバイダPiに実装された共有メモリ提供機能43で受信される。共有メモリ提供機能43は、受信した空きスロット通知リクエストS2に対して、要求管理機能43aによって自己の分散型共有メモリ13に相当する分散型共有メモリ43bを参照して、空きスロットを検索して空きスロットがある場合に、自己のプロバイダIDを含む空きスロット通知レスポンスS3をネットワークNWにブロードキャストする。
このスロット通知レスポンスS3を記憶制御機能42の空きスロット質問機能部42eで受信すると、空きスロット質問機能部42eは、当該スロット通知レスポンスS3に含まれるプロバイダIDを空きスロット取得機能部42fに通知する。空きスロット取得機能部42fは、図15に示すように、コマンド、空きスロットがあるプロバイダID、当該プロバイダIDを含むプロバイダリスト、自己の構成記述ファイルCFGiを含む空きスロット取得リクエストS4をネットワークNWにブロードキャストする。
また、空きスロット質問機能部42eは、スロット通知レスポンスS3をスロット再割当機能部42hに通知して、空きスロット取得機能部42fによってスロット再割当リクエストS5をネットワークNWにブロードキャストさせる。このスロット再割当リクエストS5は、図15に示すように、コマンド、プロバイダリスト、当該プロバイダリストに含まれるプロバイダPiが使用スロットに格納していた構成記述ファイルCFGiのリクエスタID、当該使用スロットに格納する新規(自己)のリクエスタID、新規(自己)の構成記述ファイルCFGiを含む。
プロバイダPiの共有メモリ提供機能43は、空きスロット取得リクエストS4を要求管理機能43aで受信すると、当該空きスロット取得リクエストS4に含まれる構成記述ファイルCFGiを分散型共有メモリ43bに格納する。また、要求管理機能43aは、空きスロット取得リクエストS4又はスロット再割当リクエストS5を受信したことによって分散型共有メモリ43bのメモリ状態が変化すると、分散型共有メモリ43bに格納して変化したスロット割当状態を含むメモリ状態レポートS1を作成して、メモリ状態レポート出力機能部43cからブロードキャストする。これによって、スロット割当状態が変化したことを表すメモリ状態レポートS1を能動型監視部41aで受信すると、共有メモリ状態ファイル42b及びバックアップ状態ファイル42cが更新される。
また、記憶制御機能42は、空きスロット質問機能部42eからスロット通知レスポンスS3が通知されて、自己の構成記述ファイルCFGiが分散記憶システム内に1個も複製されていないことを複製数警告機能部42gで検知する。このような構成記述ファイルCFGiが複製されていない場合は、その旨が能動型監視部41aに通知されて、バックアップ状態ファイル42cの現在の複製数が「0」に更新される。
[分散記憶システムの処理手順]
このような機能を有する分散記憶システムにおいて、分散型共有メモリ監視機能41及び記憶制御機能42の動作手順について、図16及び図17を参照して説明する。
リクエスタRiの分散型共有メモリ監視機能41は、先ず、図16に示すステップST1〜ステップST8の処理を行って、自己の構成記述ファイルCFGiが他のプロバイダPiにどの程度複製されているかを整理するために、共有メモリ状態ファイル42b及びバックアップ状態ファイル42cの更新を行い、次のステップST9における記憶制御処理によって、図17に示すステップST11〜ステップST24の処理を行う。
図16のステップST1において、能動型監視部41aは、共有メモリ状態ファイル42b及びバックアップ状態ファイル42cをリセットし、ステップST2において、ネットワークNWから配信されるメモリ状態レポートS1を検出し、ステップST3において、当該メモリ状態レポートS1が検出できたか否かを判定する。メモリ状態レポートS1が検出できた場合、ステップST4に処理を進めて、共有メモリ状態ファイル42bのアロケーションテーブルを更新する。このステップST2は、確実に毎回送信されるメモリ状態レポートS1を受信するために、メモリ状態レポートS1を送信する所定期間の2倍の時間単位で行われる。
このアロケーションテーブルには、各プロバイダIDと、当該プロバイダIDのプロバイダPiに記憶されている構成記述ファイルCFGiがどのデバイス(プロバイダPi、リクエスタRi)の構成記述ファイルCFGiかを示すテーブルである。そして、能動型監視部41aは、ステップST8において、共有メモリ状態ファイル42bを更新して、ステップST9の記憶制御機能42における記憶制御処理に処理を進める。
一方、メモリ状態レポートS1を受信していない場合、能動型監視部41aは、ステップST5において所定時間の待ち状態となり、メモリ状態レポートS1を受信していない時間が所定時間を経過した場合にステップST6に処理を進める。この所定時間は、少なくとも分散記憶システムにおいてメモリ状態レポートS1を送信する所定間隔の2倍の時間が設けられる。
ステップST6において、能動型監視部41aは、共有メモリ状態ファイル42bに含まれるアロケーションテーブルを参照して、分散記憶システムを構成するプロバイダID及びリクエスタIDを含むデバイステーブル、分散記憶システムの総スロット数、総リクエスタ数、総プロバイダ数、最大複製数保有リクエスタ(リクエスタID)、平均複製数(スロット数/リクエスタ数とリクエスタ数−1との小さい方の値)、バックアッププロバイダ数、現在の複製数、メモリ利用可能プロバイダ数を計算する。
次に、能動型監視部41aは、ステップST6で計算したパラメータに従って、バックアップ状態ファイル42cをステップST7で更新すると共に、共有メモリ状態ファイル42bをステップST8で更新して、ステップST9の記憶制御処理に移行する。
記憶制御処理は、図17に示すように、先ず、ステップST11において、メモリ状態検知機能部42dにより、バックアップ状態ファイル42cに含まれる現在の自己の構成記述ファイルCFGiの複製数が、共有メモリ状態ファイル42bに含まれる平均複製数以上か否かを判定する。そして、自己の構成記述ファイルCFGiの複製数が平均複製数以上である場合には、自己の構成記述ファイルCFGiの複製数が多くデータロスの恐れがないので、処理を図16のステップST1に戻す。
一方、自己の構成記述ファイルCFGiの複製数が平均複製数以上ではないと判定した場合には、ステップST12において、メモリ状態検知機能部42dにより、バックアップ状態ファイル42cのメモリ利用可能プロバイダ数が0か否かを判定する。そして、メモリ利用可能プロバイダ数が0であると判定した場合にはステップST21に処理を進め、0ではないと判定した場合には、ステップST13に処理を進める。
ステップST13において、メモリ状態検知機能部42dは、平均複製数から現在の自己の構成記述ファイルCFGiの複製数を減算して、分散記憶システムにおいて自己の構成記述ファイルCFGiを追加する必要がある複製数である要求複製数を算出して、ステップST14に処理を進める。
ステップST14において、空きスロット質問機能部42eは、空きスロット通知リクエストS2をネットワークNWに配信する。このとき、空きスロット質問機能部42eは、空きスロット通知リクエストS2に、自己のリクエスタRi、要求複製数をメモリ利用可能プロバイダ数で除算したヒットレートを含める。そして、空きスロット通知リクエストS2は、分散記憶システムの全プロバイダPiで受信されて、共有メモリ提供機能43の要求管理機能43aは、自己の分散型共有メモリ43bを参照して、空きスロットがある場合に自己のプロバイダIDを含む空きスロット通知レスポンスS3をネットワークNWにブロードキャストする。
次のステップST15において、空きスロット通知レスポンスS3をリクエスタRiの空きスロット質問機能部42eで受信したかを判定し、空きスロット質問機能部42eは、スロット通知レスポンスS3を受信できなかった場合には、ステップST16において分散記憶システムにおける空きスロットがないと判定する。また、空きスロット質問機能部42eは、スロット通知レスポンスS3を受信して、分散記憶システムの空きスロット数が0より多く且つ要求複製数よりも少ない場合にはステップST17に処理を進め、要求複製数よりも空きスロット数が多い場合にはステップST18に処理を進める。
空きスロット質問機能部42eによって空きスロット数が0より多く且つ要求複製数よりも少ないと判定された場合、その旨が空きスロット取得機能部42fに通知されて、ステップST19において、空きスロット取得機能部42fによって空きスロット取得リクエストS4をネットワークNWに配信して、ステップST11に処理を戻す。この空きスロット取得リクエストS4には、スロット通知レスポンスS3によって空きスロット数があるとブロードキャストしたプロバイダIDのリストと、自己のプロバイダIDと、構成記述ファイルCFGiとを含む。このプロバイダIDのリストは、空きスロットのリストを含む。
これによって、空きスロット取得リクエストS4を、プロバイダPiの共有メモリ提供機能43の要求管理機能43aで受信すると、空きスロット取得リクエストS4に含まれる構成記述ファイルCFGiを分散型共有メモリ43bに格納する。また、プロバイダPiの共有メモリ提供機能43は、新たな構成記述ファイルCFGiを分散型共有メモリ43bに格納したことによって発生したメモリ状態の変化を、次にメモリ状態レポート出力機能部43cで送信するメモリ状態レポートS1に反映させる。
また、ステップST18において空きスロット数が要求複製数よりも多いと判定した後のステップST20において、空きスロット取得機能部42fは、自己の要求複製数と空きスロットのリストと自己のプロバイダIDと構成記述ファイルCFGiとを含む空きスロット取得リクエストS4をネットワークNWにブロードキャストする。これによって、要求複製数を満たす数の構成記述ファイルCFGiが複製されて分散記憶システムに記憶されることになる。
更に、ステップST16において空きスロット数が0であると判定した後のステップST21において、空きスロット質問機能部42eは、共有メモリ状態ファイル42bの最大複製数保有リクエスタの複製数が、1よりも多いか否かを判定する。そして、最大複製数保有リクエスタの複製数が1より多いと判定した場合には、ステップST22において、その旨をスロット再割当機能部42hに通知し、空きスロット取得機能部42fによって、スロット再割当リクエストS5をネットワークNWにブロードキャストする。このスロット再割当リクエストS5には、最大複製数保有リクエスタの構成記述ファイルCFGiが複製されているプロバイダPiのスロットを指定するリストと、最大複製数保有リクエスタのIDと、最大複製数保有リクエスタに代えてスロットを新規に使用する自己のデバイスIDである新規のリクエスタIDと、自己の構成記述ファイルCFGiとを含む。
一方、最大複製数保有リクエスタの複製数が1より多くない場合には、ステップST23において、自己の構成記述ファイルCFGiの現在の複製数が0か否かを判定し、そうではないと判定した場合には処理をステップST11に戻し、自己の構成記述ファイルCFGiの複製数が0である場合には、ステップST24に処理を進める。
ステップST24において、空きスロット質問機能部42eは、自己の構成記述ファイルCFGiの複製数が0であることを複製数警告機能部42gに通知し、複製数警告機能部42gは、その旨を含む警告メッセージを能動型監視部41aに通知する。
[分散記憶システムのメモリ状態最適化動作]
このように、分散型共有メモリ監視機能41、記憶制御機能42及び共有メモリ提供機能43において動的に構成記述ファイルCFGiのメモリ状態を最適化させる分散記憶システムにおける動作について図18乃至図28を参照して説明する。
例えば図18(a)に示すように、分散記憶システムが3台のリクエスタRi、5台のプロバイダPiで構成されていて、図18(b)に示すように何れの構成記述ファイルCFGiも他の分散型共有メモリ43bに記憶されていない状態では、図19に示すように、分散型共有メモリ監視機能41、記憶制御機能42及び共有メモリ提供機能43が動作する。すなわち、プロバイダPi、リクエスタRiのメモリ状態レポート出力機能部43cは、自己のデバイスID(Ra,Rb,Rc,P1,P2,P3,P4,P5)と、保有スロット数(Ra:0,Rb:0,Rc:0,P1:4,P2:2,P3:5,P4:3,P5:8)と、空きスロット数(Ra:0,Rb:0,Rc:0,P1:4,P2:2,P3:5,P4:3,P5:8)とを通知するメモリ状態レポートS1を配信する。
また、各プロバイダPi、リクエスタRiは、他のプロバイダPi、リクエスタRiからのメモリ状態レポートS1を能動型監視部41aで受信して、総スロット数[a]が22(4+2+5+3+8)、総リクエスタ数[b]が8、総プロバイダ数[c]が5、最大複製数保有リクエスタ[d]が無し、平均複製数[e](min([a]/[b],[c]−1)が2(min(22/8,5−1)=2)であることを示す共有メモリ状態ファイル42bを作成し、現在の複製数[f]、要求複製数[g]([e]−[f])、メモリ利用可能プロバイダ数[h]を含むバックアップ状態ファイル42cを作成している。
このような状態で、リクエスタRiの記憶制御機能42は、ヒットレート([g]/[h])を算出し、空きスロット通知リクエストS2をブロードキャストしたことに応じてスロット通知レスポンスS3を受信する。この空きスロット通知リクエストS2によって、リクエスタRiは、それぞれ異なるプロバイダPiからのスロット通知レスポンスS3を受信する。ここで、プロバイダP5は、空きスロット通知リクエストS2をブロードキャストしても何れのプロバイダPiからもスロット通知レスポンスS3を受信できていないが、次の機会で再度空きスロット通知リクエストS2をブロードキャストすることになる。
そして、スロット通知レスポンスS3を受信したリクエスタRiは、スロット通知レスポンスS3に含まれるプロバイダIDに空きスロット取得リクエストS4をブロードキャストする。これによって、図20(a)に示すように、プロバイダP1〜P5には、他のプロバイダPi、リクエスタRiの構成記述ファイルCFGiが記憶されて、図20(b)に示すような分散記憶システムにおける複製数となる。
このような状態で、各プロバイダPi、リクエスタRiからメモリ状態レポートS1が配信されると、図21に示すように、各プロバイダPi、リクエスタRiの能動型監視部41aによってプロバイダPiの空きスロット数が変化し、スロット割当状態、最大複製数保有リクエスタ、平均複製数、現在の自己の複製数、要求複製数が更新される。また、この時点では、平均複製数よりも現在の複製数が少ないリクエスタRi、プロバイダPi(Rc,P4,P5)においては、メモリ利用可能プロバイダ数、ヒットレートがそれぞれ算出されて、空きスロット通知リクエストS2をブロードキャストし、更に、空きスロット取得リクエストS4をブロードキャストして、自己の複製数を増加させる動作を行う。ここで、リクエスタRcは、空きスロット通知リクエストS2をブロードキャストしても何れのプロバイダPiからもスロット通知レスポンスS3を受信できていないが、次の機会で再度空きスロット通知リクエストS2をブロードキャストすることになる。
これによって、図22(a)に示すように、プロバイダP1,P3,P5には、他のリクエスタRi、プロバイダPiの構成記述ファイルCFGiが記憶されて、図22(b)に示すように、プロバイダP4の構成記述ファイルCFGiの複製数を1だけ増加させることができ、プロバイダP5の構成記述ファイルCFGiの複製数を2だけ増加させることができる。
このような状態では、図23に示すように、リクエスタRcにおいて、要求複製数よりも現在の複製数が少なく、要求複製数、メモリ利用可能プロバイダ数、ヒットレートが算出され、空きスロット通知リクエストS2をブロードキャストしてスロット通知レスポンスS3の返信を受け、空きスロット取得リクエストS4をブロードキャストする。これによって、図24(a)に示すように、リクエスタRcの構成記述ファイルCFGiは、プロバイダP5に記憶されて、図24(b)に示すように、リクエスタRcの構成記述ファイルCFGiの複製数を1だけ増加させることができる。
この時点では、図25に示すように、全プロバイダPi、リクエスタRiの構成記述ファイルCFGiの複製数が平均複製数と同じ値となり、分散記憶システム全体における分散型共有メモリ43bが最適化された状態となる。したがって、全プロバイダPi、リクエスタRiにおいて要求複製数が「0」となり、何れのプロバイダPi、リクエスタRiからも空きスロット通知リクエストS2及び空きスロット取得リクエストS4がブロードキャストされない状態となる。
このように、分散記憶システムを構成する各プロバイダPi、リクエスタRiに分散型共有メモリ監視機能41,記憶制御機能42及び共有メモリ提供機能43を備えて、図16及び図17に示す処理を実行することによって、各プロバイダPi、リクエスタRiの構成記述ファイルCFGiの複製数を同一にしてバックアップを行い、全プロバイダPi、リクエスタRiの構成記述ファイルCFGiのデータロスの可能性を低減できる。
また、例えば図26(a)に示すように、ネットワークNWにリクエスタRcが接続されているが、プロバイダPiには空きスロットがなく、図26(b)に示すように、当該リクエスタRcの構成記述ファイルCFGiが何れのプロバイダPiにも記憶されていない場合には、分散記憶システムにおいてスロットの再割当を行う。また、この場合には、複製数警告機能部42gから能動型監視部41aに警告メッセージが発行される。
この場合、リクエスタRcは、平均複製数が「1」となるので要求複製数が「1」となり、空きスロット通知リクエストS2をブロードキャストしてスロット通知レスポンスS3を受信できても、メモリ利用可能プロバイダ数が「0」となる。したがって、リクエスタRcは、空きスロット取得機能部42fによってスロット再割当リクエストS5をブロードキャストする。このとき、リクエスタRcは、スロット再割当リクエストS5に、プロバイダID(P1)と、プロバイダP1に記憶されている構成記述ファイルCFGiのデバイスID(Ra)と、自己のデバイスID(Rc)と構成記述ファイルCFGiを含める。
このスロット再割当リクエストS5はプロバイダP1で受信され、プロバイダP1は、図28(a)に示すように、スロット再割当リクエストS5に含まれる前リクエスタIDの構成記述ファイルCFGiを削除し、これに代えて、リクエスタRcの構成記述ファイルCFGiを格納する。これによって、図28(b)に示すように、リクエスタRcの構成記述ファイルCFGiの複製数が分散記憶システムの平均複製数と同一とすることができる。
このように、本発明を適用した分散記憶システムによれば、ネットワークNWに接続されたプロバイダPiのメモリ容量がそれぞれ異なる場合であっても、全てのプロバイダPi、リクエスタRiが平均複製数を満たすように構成記述ファイルCFGiの複製数を調整できる。また、メモリ容量が小さくても全プロバイダPi、リクエスタRiで均一のバックアップ容量を有する必要がないので、分散記憶システム全体の分散型共有メモリ43bを有効に利用でき、データロスに対する耐性を保持することができる。
また、この分散記憶システムは、全てのプロバイダPi、リクエスタRiが平均複製数を満たすように動的に複製数を変化させたが、動的に複製数を変化させる他の形態としては、ネットワークNWにおいて重要な構成記述ファイルCFGiの複製数を少なくしないことが望ましい。したがって、全てのプロバイダPi、リクエスタRiは、自己の構成記述ファイルCFGi及び他のネットワーク機器の構成記述ファイルCFGiの重要度を予め設定しておき、複数のネットワーク機器の構成記述ファイルCFGiのうち重要度の低い構成記述ファイルCFGiの複製数よりも、重要度の高いネットワーク機器の構成記述ファイルCFGiの複製数を多くするようにバックアップしても良いことは勿論である。これにより、ネットワークNWにとって重要な構成記述ファイルCFGiを優先的に複数のネットワーク機器で保持して、当該重要度の高い構成記述ファイルCFGiのデータロスに対する耐性を高くできる。
[分散記憶システムにおけるプロバイダPi、リクエスタRi離脱時の動作]
つぎに、上述した分散記憶システムにおいて、ネットワークNWからプロバイダPi、リクエスタRiが離脱した時に、分散型共有メモリ43bを最適化する動作について説明する。
図29(a)に示すように、ネットワークNWに接続されているリクエスタRが、作業者によって取り外し作業がされて、分散記憶システムから離脱した場合、図29(a)及び図14に示すように、プロバイダP4の共有メモリ提供機能43に離脱トリガが発生する。この離脱トリガは、離脱するデバイスID(離脱ID)を含む。
プロバイダP4は、離脱トリガを検出すると、離脱するリクエスタRのデバイスID及び離脱コマンドを含む離脱リクエストをネットワークNWにブロードキャストする。ここで、リクエスタRの構成記述ファイルCFGiを記憶しているのは、プロバイダP1とプロバイダP4である。したがって、プロバイダP1及びプロバイダP4は、図29(b)に示すようにリクエスタRの構成記述ファイルCFGiを削除する。
また、離脱するプロバイダPi、リクエスタRiは、作業者による取り外し作業時に、自己のデバイスIDを含む離脱リクエストをネットワークNWにブロードキャストして、自己が離脱することをプロバイダPiに通知して、プロバイダPiによって構成記述ファイルCFGiを削除させても良い。
このような分散記憶システムにおいて、プロバイダPiは、図30に示すように、先ず、ステップST31において離脱トリガのチェック動作を共有メモリ提供機能43によって行う。この離脱トリガのチェック動作は、予め設定された期間ごとに行う。
ステップST32において、離脱トリガが検出されたか否かを判定する。離脱トリガが検出された場合、共有メモリ提供機能43は、離脱するデバイスIDを含む離脱リクエストをネットワークNWにブロードキャストする。一方、離脱トリガが検出されなかった場合、ステップST34において、ネットワークNWから受信した信号をチェックする動作を行い、ステップST35において離脱リクエストを受信したか否かを判定する。離脱リクエストを受信していない場合にはステップST31に処理を戻し、離脱リクエストを受信した場合にはステップST36に処理を進める。
ステップST36において、プロバイダPiは、離脱リクエストに含まれるデバイスIDの構成記述ファイルCFGiが自己の分散型共有メモリ43bに記憶されているか否かを判定する。離脱するプロバイダPi、リクエスタRiのIDが記憶されていない場合には、処理をステップST31に戻し、離脱するプロバイダPi、リクエスタRiのIDが記憶されている場合には、ステップST37において、当該デバイスIDの構成記述ファイルCFGiを削除して、ステップST31に処理を戻す。
このように、ネットワークNWからプロバイダPi、リクエスタRiが離脱する場合、当該デバイスIDを含む離脱リクエストをネットワークNWにブロードキャストして、当該デバイスIDの構成記述ファイルCFGiをプロバイダPiから削除するので、当該削除された構成記述ファイルCFGiが記憶されていたスロットに他の構成記述ファイルCFGiを記憶させることができる。したがって、構成記述ファイルCFGiの複製数を増加させて、更にデータロスの耐性を向上できる。また、分散記憶システムにおける分散型共有メモリ43bを更に有効に利用できる。
なお、上述の実施の形態は本発明の一例である。このため、本発明は、上述の実施形態に限定されることはなく、この実施の形態以外であっても、本発明に係る技術的思想を逸脱しない範囲であれば、設計等に応じて種々の変更が可能であることは勿論である。
すなわち、上述の分散記憶システムは、プロバイダPi、リクエスタRiからなるシステムや、デバイスコントローラDiのみならなるシステムについて説明したが、センサ等のデバイスに記憶されているファイルやデータを分散型共有メモリ1に分散記憶させるようにしても良い。