(57)【特許請求の範囲】
【請求項１】
ネットワークに接続された複数のノード間で、各ノードが有するローカルメモリ上に割り当てられた分散共有メモリを用いて、他プロセスとの間のデータ転送を制御するノード間データ転送制御装置であって、
前記複数のノード間でメモリ番地が仮想的あるいは物理的に同一である分散共有メモリと、
前記ノードの増設に応じて、該ノードに対応する領域を前記分散共有メモリに割り当てる領域割当手段と、
前記ノードの減設に応じて、前記分散共有メモリに割り当てられた領域を解除する領域解除手段と、を備え、
前記領域解除手段は、
領域を解除する際に、前記領域割当手段により後から割り当てられた領域を、先に解除することを特徴とするノード間データ転送制御装置。
【請求項２】
前記複数のノードの接続関係に基づくグループ単位で、所定の閾値を超過して前記分散共有メモリに割り当てられた領域が使用されているか判定する判定手段を更に備え、
前記領域割当手段は、
前記判定手段により、所定の閾値を超過して領域が使用されていると判定された場合に、前記グループ単位で、前記分散共有メモリに新たに領域を割り当てることを特徴とする請求項１記載のノード間データ転送制御装置。
【請求項３】
前記所定の閾値は、少なくとも１つ以上であり、
前記領域割当手段は、超過している所定の閾値の数に基づいて、前記グループ単位で前記分散共有メモリに割り当てる領域の容量を決定することを特徴とする請求項２記載のノード間データ転送制御装置。
【請求項４】
前記領域解除手段は、
後から前記グループ単位で割り当てられた領域を、先に解除することを特徴とする請求項２または３に記載のノード間データ転送制御装置。
【請求項５】
ネットワークに接続された複数のノード間で、各ノードが有するローカルメモリ上に割り当てられた分散共有メモリを用いて、他プロセスとの間のデータ転送を制御するノード間データ転送制御方法であって、
前記ノードの増設に応じて、該ノードに対応する領域を、前記複数のノード間でメモリ番地が仮想的あるいは物理的に同一である分散共有メモリに割り当てるステップと、
前記ノードの減設に応じて、前記分散共有メモリに割り当てられた領域を解除する際に、後から割り当てられた領域を、先に解除するステップと、
を含むことを特徴とするノード間データ転送制御方法。
【請求項６】
前記複数のノードの接続関係に基づくグループ単位で、所定の閾値を超過して前記分散共有メモリに割り当てられた領域が使用されているか判定するステップを更に含み、
前記所定の閾値を超過して領域が使用されていると判定された場合に、前記グループ単位で前記分散共有メモリに新たに領域を割り当てることを特徴とする請求項５記載のノード間データ転送制御方法。
【請求項７】
前記所定の閾値は、少なくとも１つ以上であり、
前記超過している所定の閾値の数に基づいて、前記グループ単位で前記分散共有メモリに割り当てる領域の容量を決定するステップを更に含むことを特徴とする請求項６記載のノード間データ転送制御方法。
【請求項８】
前記割り当てられた領域を解除する際に、後から前記グループ単位で割り当てられた領域を、先に解除することを特徴とする請求項６または７に記載のノード間データ転送制御方法。
【請求項９】
ネットワークに接続された複数のノード間で、各ノードが有するローカルメモリ上に割り当てられた分散共有メモリを用いて、他プロセスとの間のデータ転送を制御するノード間データ転送制御装置を制御するコンピュータに、
前記ノードの増設に応じて、該ノードに対応する領域を、前記複数のノード間でメモリ番地が仮想的あるいは物理的に同一である分散共有メモリに割り当てるステップと、
前記ノードの減設に応じて、前記分散共有メモリに割り当てられた領域を解除する際に、後から割り当てられた領域を、先に解除するステップと、
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノード内、あるいはノード間でデータ転送を行う、分散共有メモリを用いる転送制御装置のメモリの構成で、特に分散共有メモリと各ノード内のローカルメモリの構成において、既に構成された分散共有メモリに他の設定を行って、分散共有メモリの割り当てを解除するノード間データ転送制御装置、ノード間データ転送制御方法、及びプログラムに関する。
【背景技術】
【０００２】
分散共有メモリを用いたプロセッサ間（あるいはノード間）データ転送制御装置は、通常、ＬＡＮ、ＡＴＭ、ＴＣＰ／ＩＰ等の既存の伝送方式を利用して、これら伝送方式のネットワーク内のノード番地（ＩＰアドレス等を指すが、ＩＰアドレスでなくてもネットワーク内でノードを識別する識別子であれば良い）を分散共有メモリ番地に対応付けることで、データ転送を行うものである。
【０００３】
従来、上記プロセッサ間データ転送制御装置において、ローカルメモリの一部を分散共有メモリに割り当てて利用する場合、既に分散共有メモリ用に割り当てられたローカルメモリについて分散共有メモリとしての割り当て解除は、ローカルメモリを分散共有メモリ用に割り当てる手段に依存する。そのため、利用者側が割り当ての仕方を用意する技術が提案されている（例えば、特許文献１参照）。
【特許文献１】特開平１０−１３３９４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、分散共有メモリは、ローカルメモリの一部をノード間データ転送用に割り当てたものであり、従ってノード間データ転送のために常に十分な領域が確保されているわけではなく、ローカルメモリを分散共有メモリに割り当てる手段が必要になる。現在使用している分散共有メモリにおける、ネットワーク内の個々のノードと対応する個々のメモリ領域の集合の中で、ある定まったメモリサイズを超過しているものがあるかどうかを判定し、超過しているメモリ領域の集合に対して新たなメモリ領域を確保し、確保したメモリ領域に対して、ノード番地対応手段に関する機能を修正することにより、超過しているメモリ領域の集合に追加して確保したメモリ領域を利用していた。
【０００５】
分散共有メモリは、ローカルメモリの一部であることから、メモリ番地のみで、その位置を識別することになり、新たに確保するメモリ領域のサイズも、現在使用している分散共有メモリのメモリ領域の集合のサイズと同じであれば、割り当てが容易である。しかし、個々のメモリ領域の集合に対して、サイズ超過判定する必要があるため、使用状況を識別したメモリの構成と処理のフローを適用することで、サイズ超過を判定して割り当てを行うことが必要となる。また、新たなメモリ割り当てに不足や無駄が生じるため、使用状況を識別したメモリの構成と処理のフローを適用することが必要となる。また、ネットワーク構造に適合したメモリ構成と割り当て処理のフローにより、複数に区分されたネットワークに対応付けを行うことが必要となる。この場合、効率的な割り当て解除が行えるように、割り当ての段階で予め割り当て解除を前提とした手段を組み込み、割り当て解除時には、現在のメモリ使用状況とネットワーク区分を前提に、効率の良いメモリ割り当て状態になり、かつ、メモリ読出し書き込み速度を低下させない手段を用意することが必要となる。
【０００６】
しかしながら、該従来技術では、割り当て手段を効果的に機能させているものの、該割り当て手段を、効果的な解除手段として用いることは考慮されていない。すなわち、従来技術では、現在使用している分散共有メモリにおける、ネットワーク内の個々のノードと対応する個々のメモリ領域の集合の中で、ある定まったメモリサイズを超過しているものがあるかどうかを判定し、超過しているメモリ領域の集合に対して新たなメモリ領域を確保し、該確保したメモリ領域に対して、ノード番地対応機能を修正することにより、超過しているメモリ領域の集合に追加して確保したメモリ領域を利用していた。新たに確保するメモリ領域のサイズも、現在使用している分散共有メモリのメモリ領域の集合のサイズと同じである。
【０００７】
さらに、個々のメモリ領域の集合に対して、ある定まったメモリサイズを超過しているかどうかを判定し、新たに割り当てるメモリ領域のサイズを多く必要としなくても多く割り当てたり、あるいは、より多く必要としても割り当てサイズが小さかったりするという問題がある。また、分散共有メモリの割り当て方法がどのノードに対しても共通であるため、ネットワークが複数に区分されている場合には、分散共有メモリとノードの対応付けが複雑になるにもかかわらず、これらを考慮した設計はなされていないという問題がある。
【０００８】
したがって、割り当てを解除する場合においても、ある定まったサイズごとに無作為に解除されるため、使用していないメモリの範囲が多く存在しても、割り当てが解除されないままになり、メモリ使用効率が悪化したり、また、同じノードを対象にしている分散共有メモリがローカルメモリ上に不連続に存在したり、同じネットワーク区分を対象にしている分散共有メモリがローカルメモリ上に不連続に存在したりすることになり、メモリ読出し書き出しの時間が大きくなる、という問題があった。
【０００９】
本発明は、このような事情を考慮してなされたものであり、その目的は、効率的に割り当てを行うことができるとともに、後で割り当てが不要になった場合でも、割り当て時の効率を維持しながら割り当て解除を行うことができるノード間データ転送制御装置、ノード間データ転送制御方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【００１０】
上述した課題を解決するために、本発明は、ネットワークに接続された複数のノード間で、各ノードが有するローカルメモリ上に割り当てられた分散共有メモリを用いて、他プロセスとの間のデータ転送を制御するノード間データ転送制御装置であって、前記複数のノード間でメモリ番地が仮想的あるいは物理的に同一である分散共有メモリと、前記ノードの増設に応じて、該ノードに対応する領域を前記分散共有メモリに割り当てる領域割当手段と、前記ノードの減設に応じて、前記分散共有メモリに割り当てられた領域を解除する領域解除手段と、を備え、前記領域解除手段は、領域を解除する際に、前記領域割当手段により後から割り当てられた領域を、先に解除することを特徴とするノード間データ転送制御装置である。
【００１１】
本発明は、上記の発明において、前記複数のノードの接続関係に基づくグループ単位で、所定の閾値を超過して前記分散共有メモリに割り当てられた領域が使用されているか判定する判定手段を更に備え、前記領域割当手段は、前記判定手段により、所定の閾値を超過して領域が使用されていると判定された場合に、前記グループ単位で、前記分散共有メモリに新たに領域を割り当てることを特徴とする。
【００１２】
本発明は、上記の発明において、前記所定の閾値は、少なくとも１つ以上であり、前記領域割当手段は、超過している所定の閾値の数に基づいて、前記グループ単位で前記分散共有メモリに割り当てる領域の容量を決定することを特徴とする。
【００１３】
本発明は、上記の発明において、前記領域解除手段は、後から前記グループ単位で割り当てられた領域を、先に解除することを特徴とする。
【００１４】
また、上述した課題を解決するために、本発明は、ネットワークに接続された複数のノード間で、各ノードが有するローカルメモリ上に割り当てられた分散共有メモリを用いて、他プロセスとの間のデータ転送を制御するノード間データ転送制御方法であって、前記ノードの増設に応じて、該ノードに対応する領域を、前記複数のノード間でメモリ番地が仮想的あるいは物理的に同一である分散共有メモリに割り当てるステップと、前記ノードの減設に応じて、前記分散共有メモリに割り当てられた領域を解除する際に、後から割り当てられた領域を、先に解除するステップと、を含むことを特徴とするノード間データ転送制御方法である。
【００１５】
本発明は、上記の発明において、前記複数のノードの接続関係に基づくグループ単位で、所定の閾値を超過して前記分散共有メモリに割り当てられた領域が使用されているか判定するステップを更に含み、前記所定の閾値を超過して領域が使用されていると判定された場合に、前記グループ単位で前記分散共有メモリに新たに領域を割り当てることを特徴とする。
【００１６】
本発明は、上記の発明において、前記所定の閾値は、少なくとも１つ以上であり、前記超過している所定の閾値の数に基づいて、前記グループ単位で前記分散共有メモリに割り当てる領域の容量を決定するステップを更に含むことを特徴とする。
【００１７】
本発明は、上記の発明において、前記割り当てられた領域を解除する際に、後から前記グループ単位で割り当てられた領域を、先に解除することを特徴とする。
【００１８】
また、上述した課題を解決するために、本発明は、ネットワークに接続された複数のノード間で、各ノードが有するローカルメモリ上に割り当てられた分散共有メモリを用いて、他プロセスとの間のデータ転送を制御するノード間データ転送制御装置を制御するコンピュータに、前記ノードの増設に応じて、該ノードに対応する領域を、前記複数のノード間でメモリ番地が仮想的あるいは物理的に同一である分散共有メモリに割り当てるステップと、前記ノードの減設に応じて、前記分散共有メモリに割り当てられた領域を解除する際に、後から割り当てられた領域を、先に解除するステップと、を実行させることを特徴とするプログラムである。
【発明の効果】
【００１９】
この発明によれば、ノードの増設に応じて、該ノードに対応する領域を分散共有メモリに割り当て、ノードの減設に応じて、分散共有メモリに割り当てられた領域を解除する際に、後から割り当てられた領域を、先に解除するようにしたので、分散共有メモリを効率的に利用することができ、また、後で割り当てが不要になった場合も、割り当て時の効率を維持しながら割り当てた領域を解除することができるという利点が得られる。
【００２０】
また、本発明によれば、複数のノードの接続関係に基づくグループ単位で、所定の閾値を超過して分散共有メモリに割り当てられた領域が使用されているか判定し、所定の閾値を超過して領域が使用されていると判定された場合に、グループ単位で、分散共有メモリに新たに領域を割り当てるようにしたので、分散共有メモリの中で使用されている領域がある定まったメモリサイズを超過しているものがあり、領域不足が起こり得るような場合において、効率的にサイズ超過を判定し、効率的に割り当てを行うことができるという利点が得られる。
【００２１】
また、本発明によれば、超過している所定の閾値の数に基づいて、前記グループ単位で前記分散共有メモリに割り当てる領域の容量を決定するようにしたので、領域不足が起こり得るような場合において、効率的にサイズ超過を判定し、効率的に割り当てを行うことができるという利点が得られる。
【００２２】
また、本発明によれば、後からグループ単位で割り当てられた領域を、先に解除するようにしたので、後で割り当てが不要になった場合も、割り当て時の効率を維持しながら割り当て解除を行うことができるという利点が得られる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の一実施形態を、図面を参照して説明する。
ノード番地に対して少なくとも１つ以上の分散共有メモリ番地が対応付けられており、メモリ番地を指定することで対応するノードヘデータが送られる構造を有している。市販されているメモリであっても番地は十分多いので、通常はノードに対応付けるメモリ領域が不足することはないが、何らかの理由でメモリ番地の数が不十分である場合は仮想メモリ番地を用いて、対応付けるメモリ番地の数を増やすことができるようになっている。
【００２４】
しかしながら、さらにメモリ番地の数が不足する場合や、ノードの下位にさらに他のネットワーク（下位ネットワーク）が接続されるようなネットワーク構造等においては、ノードの識別子に子番号を用意し、階層的に分散共有メモリの領域を構成することになる。この場合、下位ネットワークが接続されたノードを介してネットワークを区分するようになっている。すなわち、下位ネットワークに属するノードは、親（上位）のノード番地を共有しており、子（下位）のノード番地が異なるようにして、分散共有メモリ領域を構成しておく。ノード間の構造がリング状の場合など、メモリ領域をノード間構造に割り当てにくい場合には、メモリの構成をノードの関係の構造に一致させるか、あるいは近づけて構成することになる。
【００２５】
図１は、本発明の実施形態による通信システムと通信を行うノード内部の構成を示すブロック図である。図において、本通信システムは、ネットワーク１−Ｉと、該ネットワーク１−Ｉに接続された複数のノード１−Ｆ、１−Ｊ〜１−Ｎとからなる。なお、以下の説明では、ノード１−Ｆの構成についてのみ説明するが、他のノード１−Ｊ〜１−Ｎについても同じ構成である。
【００２６】
ノード１−Ｆは、アプリケーションプログラム１−Ａ、１−Ａ’と、ノード番地変換手段１−Ｂ、分散共有メモリ１−Ｃ、転送制御手段１−Ｄを備え、各々、内部バス１−Ｅにより接続されている。図１に示す内部バス１−Ｅおいて、一点鎖線と点線は、データ・アドレスの流れを示している。アプリケーションプログラム１−Ａは、例えば、ローカルメモリ上に確保された分散共有メモリ１−Ｃにデータを書き込む。分散共有メモリ１−Ｃは、ローカルメモリ上に確保され、各ノードで共有されるメモリ領域である。ノード番地対応手段（領域割当手段、領域解除手段、判定手段）１−Ｂは、内部バス１−Ｅ上を流れるデータのメモリ番地を参照し、メモリ番地をノード番地に変換し、転送制御手段１−Ｄに通知する。転送制御手段１−Ｄは、通知されたノード番地に向けてデータをネットワーク１−Ｉに送出する。
【００２７】
ノード番地対応手段１−Ｂにおいて、メモリ番地をノード番地に変換する手段は、（ａ）メモリ番地とノード番地とが対応付けられたテーブルを備えており、このテーブルを検索するか、あるいは、（ｂ）メモリ番地のシフトや、一部のマスク、あるいは演算といった所定の規則に基づいてメモリ番地を加工したものをノード番地とする。
【００２８】
なお、「通知」と記載したが、転送制御手段１−Ｄがノード番地対応手段１−Ｂに問い合わせるか、あるいは、ノード番地対応手段１−Ｂ内の変換後のノード番地を参照する、等でも構わない。
【００２９】
データを受信したノードにおいては、データのメモリ番地を参照して受信ノードのローカルメモリ上に確保された分散共有メモリ上の該メモリ番地にデータを書き込む。これにより、送信ノードと受信ノードとは、それぞれ自ノード内の分散共有メモリの同一メモリ番地に同じデータを共有することになる。
【００３０】
例えば、アプリケーションプログラム１−Ａが、分散共有メモリ１−Ｃにデータ１−Ｇを書き込むと、ノード番地対応手段１−Ｂは、内部バス１−Ｅ上を流れるデータ１−Ｇのメモリ番地部を参照し、メモリ番地「１−Ｃ−１」をノード番地に変換し、転送制御手段１−Ｄに通知する。転送制御手段１−Ｄは、通知されたノード番地１−Ｈに向けてデータ１−Ｇをネットワーク１−Ｉに送出する。
【００３１】
データ１−Ｇを受信したノードにおいては、データ１−Ｇのメモリ番地を参照して受信ノードのローカルメモリ上に確保された分散共有メモリ上の該メモリ番地にデータ１−Ｇを書き込むことで、送信ノードと受信ノードは、それぞれ自ノード内の分散共有メモリの同一番地に同じデータを共有する。図１には、ノード１−Ｆとノード１−Ｊ〜１−Ｎとがデータを送受信する例として、データがノード１−Ｍ宛である場合、すなわち、受信側をノード１−Ｍとしており、ノード１−Ｍで転送制御手段１−Ｄ’により分散共有メモリ１−Ｃ’上の送信側と同じメモリ番地１−Ｃ−１に書き込む。他のノード１−Ｆ〜１−Ｎでも同じ動作である。
【００３２】
次に、図２は、本実施形態による、通信システムであって、ネットワークに接続されたノードの関係の概略を示す概念図である。また、図３は、本実施形態による、通信システムであって、ノード内部のメモリの構造の概略を示す概念図である。図２（ａ）に示すように、ネットワーク区分が複数（１−ａ、２−ａ、…、ｍ−ａ；１−ｂ、…、ｍ−ｂ；…）ある場合、ネットワーク区分の集まりがこの１つだけであれば、図３（ｂ）に示すように、ノード１−ａ（便宜上、ノード番地、あるいはノード番地をノード名で兼ねた表記とする）宛の共有メモリ領域を、メモリ番地上位が１、メモリ番地下位がａ、のように分散共有メモリの構成を設定し、ノード番地変換手段１−Ｂにその変換方法を登録しておく。但し、メモリ番地は、マスクを設定することができ、各メモリ領域は、複数のバッファ（以降、区別可能と思われる箇所は、バッファを単にメモリ領域と記す）から構成されるので、同一のノード宛に複数のデータを送ることもできる。つまり、図２（ａ）のノード１−ａに対応したメモリ領域を図３（ｂ）の共有メモリ領域（１，ａ）とすると、図３（ａ）に示すように、ｐ個の番地で構成されるバッファが複数個集まった構成をとることを意味する。
【００３３】
分散共有メモリ１−Ｃを、ある単位で区切った場合（ハードディスクのセクタ相当）、セクタの最大数は、共有メモリサイズ／（セクタの中の最大バッファ数×バッファサイズ）となるので、使用セクタ数をｍ、セクタ内の使用バッファ数をｎとすると、搭載するメモリに余裕がある限り、ｍは大きくできるが、ｎはセクタ内の最大バッファ数までしか大きくできない。
【００３４】
このように、ｎまたはｍのどちらか一方は、メモリ空間を使いきる程度までは十分大きくとれるが、他方は制限されるので、図３（ｅ）に示すように、制限が生じにくい側（前述の例では、ｍは余裕があるがメモリサイズに制限があるので、ｎに比較して制限が生じにくい）を、複数番地を１つの番地に代表して扱い、他方の不足を避けるようにする。あるいは、図３（ｄ）に示すように、不足番号に相当する部分を途中で不連続（図３（ｄ）では、ｃとｄの間や、ｗとｘの間が不連続になっている）になっても、実際には、仮想番地を用いて別のメモリ領域を割り当てておき、ネットワーク内のノード関係とメモリ番地の関係は、同じ配列で識別可能とする。
【００３５】
このように、本実施形態では、ネットワーク区分の構造に合わせて分散共有メモリ領域の構造をブロック化しておく。例えば、図３（ｂ）のａ〜ｍ、…と１〜ｎとで示されたメモリ領域が連続して確保できない場合には、図３（ｄ）のように、幾つかに分けて確保することになる。なお、図２（ａ）に示すネットワーク区分構成と図３（ｂ）に示す分散共有メモリ領域の構成とが対応し、図２（ｂ）に示すネットワーク区分構成と図３（ｃ）に示す分散共有メモリ領域の構成とがそれぞれ対応している。
【００３６】
例えば、ネットワーク上でノードが増減し、例えば、図２（ｂ）でノード１−ａのネットワーク区分にノード１−ｎが追加されても、図３（ｂ）の分散共有メモリ１−Ｃ上のｍに続く位置にノード１−ｎに対応する領域を割り当てればよい。
【００３７】
また、図２（ｂ）に示すように、ネットワーク区分Ｃ−１に、ノード１−ａ’、１−ｂ’、１−ｃ’からなる集合Ｃ−２が増加する場合には、前述したように、ノード１−ｎを追加した場合と同様に、１−（ｎ＋１），１−（ｎ＋２）、…、と追加しても良いが、これらノード１−ａ’、１−ｂ’、１−ｃ’を新たなネットワーク区分として、ノード１−ａ、…、１−ｎや、ノード２−ａ、…、２−ｐ等と並列になるよう、分散共有メモリ１−Ｃ上にバッファを割り当てても良い。この場合、図３（ｃ）では、分散共有メモリ領域Ｃ−１が既存のノード用の分散共有メモリ、すなわち、図２（ｂ）のネットワーク区分Ｃ−１に対応し、分散共有メモリ領域Ｃ−２が図２（ｂ）のネットワーク区分Ｃ−２に対応する。つまり、既存の分散共有メモリ領域（図３（ｃ）のＣ−１）に、図２（ｂ）のネットワーク区分Ｃ−２に対応する、新たな分散共有メモリ領域Ｃ−２を追加することになる。また、ノードが減少する場合には、バッファを減らすことになる。
【００３８】
このような、メモリの割り当てには、ノードの変更規則（後述）を予め設けておく。したがって、新たなノードが追加されたり、ノードが減少されたり、新たなネットワーク区分が追加されたり、削除されたりしても、送信データを生成し宛先を指定するアプリケーションプログラムや、ＯＳなどは、ノード関係が変更されたとしても、変更／追加／削除される各々のノードの変更／追加／削除後のノード番号を登録したり、設定したりするなどの操作を行うことはない。
【００３９】
ここで、本実施形態によるメモリ構成変更処理による効果を明確にするために、通常のメモリ構成変更処理と本実施形態によるメモリ構成変更処理について説明する。
【００４０】
図４は、通常のメモリ構成変更処理の動作を説明するためのフローチャートである。図において、まず、分散共有メモリ利用者やアプリケーションやＯＳ類が遷移を起こさせるために、ノード関係に変更があると（ステップＳａ１）、ノード関係変更のために通信停止状態へ遷移させる（ステップＳａ２）。次に、ノード番地（ＩＰ番号等）の変更情報を入力し（ステップＳａ３）、アプリケーションやＯＳなどに変更箇所を通知する（ステップＳａ４）。アプリケーションやＯＳなどは、更新されたメモリ番地をそれぞれに設定する（ステップＳａ５）。その後、アプリケーションや、ＯＳなどを、ノード関係変更後の通信可能状態へ遷移させる（ステップＳａ６）。
【００４１】
次に、図５は、本実施形態によるメモリ構成変更処理の動作を説明するためのフローチャートである。図において、分散共有メモリ利用者やアプリケーションやＯＳ類が遷移を起こさせるために、ネットワークや、ネットワーク区分でノードが増減すると（ステップＳｂ１）、まず、ノード番地対応手段１−Ｂは、アプリケーションや、ＯＳなどを、ノード関係変更のために通信停止状態へ遷移させる（ステップＳｂ２）。また、ノード番地対応手段１−Ｂは、分散共有メモリ構成の変更規則（後述）に従ってメモリ位置を決定し（ステップＳｂ３）、アプリケーションや、ＯＳなどを、ノード関係変更後の通信可能状態へ遷移させる（ステップＳｂ４）。
【００４２】
このように、本実施形態では、メモリ構造の変更規則を参照できる状態にありさえすれば、アプリケーションや、ＯＳなどは、分散共有メモリ１−Ｃにおける、ノード関係の変更に対応してノード番地対応手段１−Ｂにより変更された、メモリ構造の指定領域にデータを書き込むだけで、転送制御手段１−Ｄにより、変更後の所定のノード宛にデータを送信することができる。
【００４３】
上述した変更規則は、メモリ構造とノードとの関係の対応付けを意味しており、例えば、次のような規則が考えられる。
（１）ノードの追加
ノードが含まれるセグメントに対応するメモリブロックのＩＰアドレス（非マスク部分）と一致するメモリ番地を割り当てる。
【００４４】
（２）ノードの減少
ノードが含まれるセグメントに対応するメモリブロックのＩＰアドレス（非マスク部分）と一致するメモリ番地を、分散共有メモリ１−Ｃとしての割り当てから解除する。
【００４５】
変更規則の決め方によっては、セグメントとメモリブロックとを対応させたり、ノード番地（ＩＰアドレス等）とメモリ番地の一部とを一致させたり、単純な演算で対応付けを可能にする。例えば、セグメント毎にメモリのブロックを区分し、ＩＰアドレスの非マスク部分とメモリ番地とを一致させる変更規則の場合には、セグメントとメモリブロックとの対応関係の情報に変更があると、ノード番地変換手段１−Ｂに登録する必要はある。
【００４６】
但し、新たなノードが加わった場合、すなわち、新たにノードに対応するメモリ番地を割り当てることになる場合には、必ずしも、割り当てられたメモリ番地の対応関係を登録する必要はない。つまり、アプリケーションが上記変更規則を参照さえできる状態であれば、目的ノードが対応するメモリ番地を指定してデータを書き込む（送信）ことができる。参照できる状態とは、用いる変更規則をソフトウェアとして、あるいはメモリ上に保持されたテーブルや、プログラム、あるいは組み込みロジックなどとして保持しておき、アプリケーションや、ＯＳなどがデータを送信する処理の中、あるいはその前にリードするか、あるいは目的ノード名や、プロセス名などを指定すると、メモリ番地が出力され、該メモリ番地を取得することが可能な状態である。
【００４７】
変更規則を用いる場合、分散共有メモリ１−Ｃの領域に不足が生じても、１つ１つのメモリ領域（例えば、図３（ｂ）の（１，ａ）で示されたメモリの部分、つまり、図２（ａ）のノード１−ａ宛の領域がその１つ）に不足があったとしても、必ずしも個々のメモリ毎に不足を判定する必要はない。つまり、あるまとまった複数のメモリ領域で構成された単位で不足を判定し、その複数のメモリ領域の単位で、ある不足の基準を超えない間は、その単位の中で、メモリ領域の不足があるところに、余剰のあるところからのメモリを追加する、といった方法を、変更規則を修正するだけで適用することができる。
【００４８】
また、ノードが減少する場合も、必ずしも、割り当てられているメモリ番地の対応を直接特定して割り当てから削除することはない。これは、検索等の処理の負荷が大きくなるためである。ノードが減少する場合には、上述したノード追加の場合の反対方向のプロセスであって、ノード番地（ＩＰアドレス等）とメモリ番地の一部同士を一致させたり、単純な演算で対応付けたりすることによって、出力されたメモリ番地を、ノードとの対応関係から削除するようにすればよい。
【００４９】
なお、ノードと記述した装置は、コンピュータ、サーバ、ルータ、センサ（ノード）、駆動装置、制御装置などで通信機能を有する装置であれば制限はない。また、メモリ配置は、物理的でなくてもよく、仮想メモリを用いても構わない。ここで説明しているメモリ構成は、ネットワーク接続前に通信機能を初期化する段階で予め行ってもよいし、既に通信を行っている状況でメモリを再構成しても構わない。また、ノードの関係は、便宜上、バス構造のように表記しているが、リング状やスター状など、実際の物理的な接続状態はどのような形態であっても構わない。
【００５０】
また、ノードの増減や、メモリ構成の変更などがあっても、ノード番地変換手段１−Ｂは、ノード番地とメモリ番地との対応関係を示すテーブルを保持し、そのテーブルにおいてノード番地とメモリ番地の対応を変更するようになっている。あるいは、ノード番地変換手段１−Ｂは、メモリ番地のシフトや、一部のマスク、あるいは演算といった事前に定められた規則に基づいて、メモリ番地に加工を施したものがノード番地となる、等の手段によって、メモリ番地とノード番地との変換を行う。そのため、分散共有メモリ１−Ｃの領域が不足しても、ノード番地変換手段１−Ｂを、大規模に書き換えたり、修正したりすることなしに、ノード番地変換手段１−Ｂのテーブルに、メモリ番地とノードの新たな対応関係を付け加えるだけで、あるいは、ノード番地変換手段１−Ｂの演算を、メモリ番地とノードの新たな対応となるように修正するだけで、不足を解消することができる。
【００５１】
次に、ネットワーク構造が、図２（ｂ）のように、ネットワーク区分Ｃ−１とネットワーク区分Ｃ−２のみのであった場合を例にメモリ構成の設定法について説明する。
【００５２】
図６は、本実施形態による、メモリ構成の設定法の一例を説明するための概念図である。尚、図６（ａ）において、１、２、ｑ（１）とある箇所は、本来、１、２、３、…、ｑ（１）、の合計ｑ（１）個の領域集合を示しているが、記載の簡略化のために省略してある。他の領域についても同様である。また、領域のグループを示す符号Ｇ５と記した１、２、ｑ（５）の次の領域を、領域のグループを示す符号Ｇｓと記した１、２、ｑ（ｓ）と記載している。これも、領域のグループを示す符号Ｇ１と記した領域のグループである、１、２、ｑ（１）の後に、領域のグループを示す符号Ｇ２と記した次の領域のグループの１、２、ｑ（２）があり、同様に、最左に符号Ｇ５と記した次の領域のグループの１、２、ｑ（５）があり、さらに、領域のグループを示す符号Ｇｓと記した次の領域のグループの１，２、ｑ（ｓ）があるというように、同種の領域のグループがｓ個ある、という意味であるが、記載の簡略化のために省略してある。
【００５３】
また、図６（ａ）に示す、メモリ領域Ｍ１とメモリ領域Ｍ２は、横に表記しているが、図２（ｂ）のＣ−１、Ｃ−２、…、Ｃ−ｉの何れかに相当するメモリ領域、あるいは、図３（ｄ）に示す「１、２、…、ｎ」、及び「ａ、ｂ、…、ｄ、ｆ」の正方領域で示されるメモリ領域と同等のメモリ領域の何れかに相当する。メモリ領域のサイズは、図３と図６とで異なっているが、これらはメモリ構成の一例を示しているのであって、メモリ領域のサイズは考慮せず、構成が互いに対応していることを示している。
【００５４】
したがって、ローカルメモリ内に、図３（ｃ）や、図３（ｄ）の正方領域で示される、メモリ領域が複数あって、Ｍ１やＭ２は、その中の２つのメモリ領域である。但し、物理的に連続した位置に確保される必要はない。また、仮想メモリにより、図３（ｃ）や、図３（ｄ）の正方領域で示される、メモリ領域の各々が、物理的な位置に関して、複数に分かれていて、物理的に不連続であっても構わない。
【００５５】
また、図６において、メモリ領域Ｍ１、Ｍ２の最小領域として記されている、番地［Ｇ１−１，ａ］、［Ｇ１−１，ｂ］、…、［Ｇｓ−ｑ（ｓ），ｃ］等は、物理的なメモリの最小構成でなくても構わない。つまり、これらは、上位レイヤから見たデータ転送の最小単位であり（データ転送最小単位領域と記す）、「この単位領域にデータが書きこまれると、そのデータがこの単位領域のサイズに達していなくても、目的ノードに転送される」といった用途の領域であり、ある程度のサイズを有している。
【００５６】
図面上、その位置を示す記号として数字やアルファベットの組み合わせを用いているが、その一文字は、１つの番地であっても構わないし、図３（ｅ）のように複数番地（あるいは図３（ｅ）より更に多い、多数番地）を示しても構わない。
【００５７】
分散共有メモリ１−Ｃとして現在使用されているメモリ領域の不足が予測される場合に、分散共有メモリ１−Ｃにメモリ領域を新たに割り当てる必要が生じる。そこで、本実施形態では、現在使用されているメモリ領域Ｍ１の不足が予測されると、ローカルメモリ内で空き領域として存在し、かつ分散共有メモリ１−Ｃとして割り当て可能なメモリ領域が存在すれば、これをメモリ領域Ｍ２として、メモリ領域Ｍ１に追加することで、分散共有メモリ１−Ｃのメモリ領域不足を解消する。
【００５８】
既に分散共有メモリ１−Ｃとして使用されているメモリ領域Ｍ１において、網掛したデータ転送最小単位領域が現在、ノードと対応付けられているとする。すなわち、図６（ａ）の番地［Ｇ１−１，ａ］が図１のノード１−Ｊと対応しているか、あるいは、図２（ａ）のノード１−ａと対応している、とする。また、領域のグループＧ１、Ｇ２、…、Ｇｓは、例えば、領域グループＧ１の［Ｇ１−１，ａ］、［Ｇ１−１，ｂ］、…、［Ｇ１−１，ｘ］は、図２（ａ）において、ノード１−ａに対応し、領域グループＧ１の［Ｇ１−２，ａ］、［Ｇ１−２，ｂ］、…、［Ｇ１−２，ｘ］は、図２（ａ）において、ノード１−ｂに対応し、領域グループＧ２の［Ｇ２−１，ａ］、［Ｇ２−１，ｂ］、…、［Ｇ２−１，ｘ］は、図２（ａ）において、ノード２−ａに対応している、というように、ネットワーク区分と対応しているとする。
【００５９】
このような状態において、図６（ａ）には、領域グループＧ１、領域グループＧ３、領域グループＧ４、及び領域グループＧ５が所定の不足基準を上回ったとした状況を示している。所定の不足基準は、通常、適用するシステムにより、適切な値は異なるため、システムによって適切な値を選択して設定しても構わない。また、複数存在しても構わない。例えば、図６（ａ）において、メモリ領域Ｍ１では、不足基準Ｌ１と不足基準Ｌ２の２つの不足基準が存在している。閾値に相当する値である。
【００６０】
図６（ａ）に示す網掛け部分は、ノード番地とメモリ番地とが既に対応付けられている領域、すなわち、ノード番地変換手段１−Ｂにおいて、メモリ番地が入力されれば、ノード番地が出力される状態とされているような、分散共有メモリ１−Ｃ内の領域を示している。例えば、当該領域グループ内に、対応付け済みメモリ領域が領域集合内の区分ｃを超えた位置に存在する場合、すなわち、不足基準Ｌ１を右側に超えた位置に存在する場合を、不足基準を超えたと判定し、さらに、不足基準Ｌ２を右側に超えた位置に存在する場合には、不足基準を２回超えたと判定する。
【００６１】
メモリ領域Ｍ１で不足基準Ｌ１を超えた領域グループが存在するかどうかを判定することにより、まず、領域グループＧ１、領域グルーブＧ３、領域グループＧ４、及び領域グループＧ５が、不足基準Ｌ１を超えたと判定される。ここで述べた不足基準Ｌ１は、領域グルーブ内では、メモリ領域割り当て基準として扱われる。不足基準Ｌ１を上回った領域グループＧ１、領域グループＧ３、領域グループＧ４、及び領域グループＧ５の夫々に対し、メモリ領域割り当て基準を超えているかどうかを判定する。
【００６２】
但し、メモリ領域割り当て基準は、複数存在していても構わないし（例えば、図６（ａ）のメモリ領域Ｍ１では、Ｌ１とＬ２の２つのメモリ領域割り当て基準が存在している）、複数の場合には、それぞれのメモリ領域割り当て基準に対して、メモリ領域割り当て基準を超えているかどうかを判定する。すなわち、図６（ａ）のメモリ領域Ｍ１では、Ｌ１とＬ２の２個のメモリ領域割り当て基準が存在していて、領域グループＧ１、領域グループＧ３、領域グループＧ４、及び領域グループＧ５がメモリ領域割り当て基準Ｌ１を超えていて、領域グループＧ１及び領域グループＧ５がメモリ領域割り当て基準Ｌ２を超えている。
【００６３】
メモリ領域割り当て基準を超えた領域グループに対して、新たなメモリ領域を追加割り当てするが、メモリ領域割り当て基準を幾つ超えているかを判定することにより、追加割り当てするメモリ領域のサイズを決定することで、メモリ領域の不足が多いメモリグループに対して、より大きなメモリ領域を新たに割り当てる。すなわち、いかに大きなサイズのメモリ領域を割り当てるかが、メモリ領域割り当て基準をどの区分（領域グループ内の領域集合の区分）に定めるかによって決定される。このため、この例で説明したように、領域グループ内の最大のメモリ領域を使用している領域集合のメモリ領域使用量を、メモリ領域割り当て基準との比較判定の対象としないで、他の値をメモリ領域割り当て基準との比較判定の対象とする場合があっても構わない。つまり、適用対象とするシステム、あるいは、メモリ領域の使用状況によっては、他の値をメモリ領域割り当て基準との比較判定の対象としてもよい。
【００６４】
図６（ａ）のメモリ領域Ｍ２は、メモリ領域Ｍ１で不足している領域グループに対して新たに割り当てるメモリ領域の例である。新たに割り当てるメモリのサイズは、メモリ領域割り当て基準を幾つ超えているかに基づく。例えば、図６（ａ）のメモリ領域Ｍ１で、メモリ領域割り当て基準Ｌ１を１個超えている、領域グループＧ３と領域グループＧ４に対しては、１個の新たな領域グループに相当するサイズのメモリ領域を割り当てており、それぞれＧ３２とＧ４２で示している。また、メモリ領域割り当て基準Ｌ２を２個超えている、領域グループＧ１と領域グループＧ５に対しては、２個の新たな領域グループに相当するサイズのメモリ領域を割り当てており、それぞれＧ１２とＧ５２で示している。なお、メモリ領域割り当て基準Ｌ１、Ｌ２を超えていない、領域グループＧ２と領域グループＧｓについては、新たなメモリ領域を割り当てていない。
【００６５】
また、本実施形態では、領域グループに相当するサイズのメモリ領域を単位として割り当てている。しかし、これは、一例であって、適用対象とするシステム、あるいは、メモリ領域の使用状況によっては、別のサイズを単位として割り当てても構わないし、メモリ領域割り当て基準Ｌ１、Ｌ２を超えていない領域グループに対しても、メモリ領域割り当て基準を超えている領域グループに対して割り当てるメモリサイズに比較して小さなサイズの新たな割り当てを行うようにしてもよい。
【００６６】
図６（ａ）において、メモリ領域Ｍ１とメモリ領域Ｍ２との間を結ぶ矢線（点線）は、メモリ領域Ｍ１における領域集合の境界がメモリ領域Ｍ２においてどこに対応するかを示している。新たなメモリ領域の割り当てを行った後、引き続き分散共有メモリ１−Ｃが使用されている状況の一例を、図６（ｂ）のメモリ領域Ｍ１’とメモリ領域Ｍ２’で示している。新たな割り当て前に分散共有メモリ１−Ｃのメモリ領域Ｍ１が使用されていたのと同じ使用量増加率で分散共有メモリ１−Ｃが使用されたとした場合には、領域グループＧ１、領域グルーブＧ５においては、メモリ領域Ｍ１’が全て使用され、それに加えてメモリ領域Ｍ２’が使用されており、領域グループＧ１、領域グループＧ３、領域グループＧ４においては、メモリ領域Ｍ１’がまだ全て使用されていないが、メモリ領域Ｍ２’も使用されている状況である。なお、メモリ領域Ｍ１’とメモリ領域Ｍ２’は、隣接して記載されているが、物理的なメモリの位置が隣接している必要はない。
【００６７】
次に、図７は、本実施形態において、メモリ領域が変更された後の分散共有メモリ１−Ｃの状況の概略を示す概念図である。図において、図７（ａ）には、ノードが新たに加わったり、ノードに割り当てる分散共有メモリ１−Ｃが不足したりしてメモリ構成の変更が行われた後の、メモリの状態の一例を示している。図７（ｂ）には、ノードに割り当てる分散共有メモリ１−Ｃの一部が不要になったり、ノード数が減少したりしたために、対象部分の分散共有メモリ１−Ｃの割り当てが解除され、通常のローカルメモリ用途にされた状況を示している。
【００６８】
まず、図７（ａ）では、領域グループＧ１に属する領域［Ｇ１−１，ａ］が領域不足のために追加される場合、領域グループＧ３が存在するために、領域［Ｇ１−１，ａ］が領域グループＧ１の領域に連続した領域として割り当てられず、不連続な位置に領域［Ｇ１−１，ａ］用として割り当てられている（［Ｇ１−１，ａ］（増設）やＧ１（増設）と示した箇所）。また、割り当ては、本来、領域［Ｇ１−１，ｂ］のように、初期的に割り当てられた後、不足が生じると、メモリ幅方向に割り当て単位を増やすことを前提にしている。つまり、領域［Ｇ１−１，ｅ］のように、割り当て単位を２個割り当てられることを前提にしている。
【００６９】
例えば、効率化のために、図６（ａ）、（ｂ）で説明したような手法で、割り当て単位の大きさより小さい単位で割り当てていく。つまり、図６（ａ）では、メモリ幅方向の増設対象となる割り当て単位領域が縦方向に置かれている状況に相当しており、図６（ａ）でメモリ領域Ｍ１とメモリ領域Ｍ２を横に並べると、図６（ｂ）に相当する。しかし、図６（ｂ）で示したように、割り当て単位は、本来の割り当て方を前提に分けられている（図６（ａ）のメモリ領域Ｍ１、Ｍ２も同様）。
【００７０】
図７（ａ）には、領域［Ｇ１−１，ａ］は、［Ｇ１−１，ａ］（増設）として割り当てられる前に、既に、本来は［Ｇ１−１，ｂ］用である領域（※１）や、本来は［Ｇ１−１，ｃ］用である領域（※２）に割り当てられていたが、それだけで不足したために［Ｇ１−１，ａ］（増設）として割り当てられている状態が示されている。初期的に分散共有メモリ１−Ｃとして用いられる範囲とは異なる位置に取られる。
【００７１】
図７（ｂ）には、［Ｇ１−１，ａ］用が一部不要になったため、増設の手順と逆の順序で減設され状態が示されている。まず、［Ｇ１−１，ａ］（増設）が分散共有メモリ１−Ｃとしての割り当てを解除される。さらに、［Ｇ１−１，ａ］用で不要な量が増えると、本来は［Ｇ１−１，ｃ］用である領域（※２）や、本来は［Ｇ１−１，ｂ］用である領域（※１）１が［Ｇ１−１，ａ］用としての割り当てを解除される。但し、ここは、領域グループＧ１内の領域なので、分散共有メモリ領域としての割り当ては解除されず、［Ｇ１−１，ｂ］や［Ｇ１−１，ｃ］の必要量が増えた際に、それぞれに割り当てられる領域として確保される。図７（ｂ）で［Ｇ１−１，ｃ］が消えているのは、［Ｇ１−１，ｃ］と対応するノードがネットワークから削除された場合を示していて、領域（※３）は、［Ｇ１−１，ｃ］としての割り当ては解除されるが、領域グループＧ１内であるので、分散共有メモリ領域としての割り当ては解除されず、領域グループＧ１内で新たにノードが加わった場合に割り当てるために確保された状態を維持する。
【００７２】
次に、本実施形態による、メモリ構成設定処理の主要な部分の動作について、従来技術と比較して説明する。
【００７３】
図８は、従来技術による、メモリ構成設定処理の主要な部分の動作を説明するためのフローチャートである。図８では、従来技術において、必要な分散共有メモリ１−Ｃが増えたためローカルメモリの一部を分散共有メモリ１−Ｃとして割り当て、その結果、分散共有メモリ１−Ｃが追加される場合の、メモリ構成の設定法の主要な部分の動作の流れの概略を示したものである。なお、図において、領域Ｍ１、Ｍ２として記したものは、図６（ａ）に示した領域Ｍ１、Ｍ２に対応しており、それぞれ既に分散共有メモリ１−Ｃとして使用されている領域と新たに分散共有メモリ１−Ｃとして割り当てる領域を示すものである。領域グループ長単位とは、図６（ａ）の太線で囲まれた最小領域であり、メモリ割り当て処理において、新たにメモリ領域を割り当てる際のメモリ領域の単位である。
【００７４】
まず、ノード番地対応手段は、分散共有メモリ１−Ｃの領域Ｍ１において、メモリ領域割り当て基準を超過している領域集合があるか否かを判定し（ステップＳｃ１）、超過している領域集合がある場合には、領域集合のサイズが、未使用領域で分散共有メモリ１−Ｃとして確保可能であるか否かを判定する（ステップＳｃ２）。そして、確保可能でない場合には、エラーを通知する（ステップＳｃ３）。一方、未使用領域で分散共有メモリ１−Ｃとして確保可能である場合には、ノード番地対応手段は、領域集合のサイズの確保可能な領域の番地を、ノード番地変換手段が参照するテーブル内の番地の領域Ｍ１の後続に追加する（ステップＳｃ４）。その後、所定時間だけ待機し（ステップＳｃ５）、その後、ステップＳｃ１に戻る。なお、ここでは、テーブルを使用する前提で説明しているが、演算によりノード番地変換を行う場合には、演算手段を修正する。
【００７５】
上述したように、従来技術では、現在使用している分散共有メモリ１−Ｃのメモリ領域集合の中で、メモリ割り当て基準を超過しているものがあるかどうかを判定し、超過しているメモリ領域集合が存在すれば、新たなメモリ領域を確保し、確保したメモリ領域に対して、超過しているメモリ領域集合が対応しているノード番地と同じノード番地を対応付けるために、ノード番地対応手段が参照するテーブル、あるいは、演算手段を修正する。
【００７６】
このことにより、超過しているメモリ領域集合の後続として確保したメモリ領域を利用できるように、すなわち、超過しているメモリ領域集合が、「超過しているメモリ領域集合及び確保したメモリ領域」に置き換えられることになる。確保したメモリ領域のサイズは、通常、現在使用している分散共有メモリ１−Ｃのメモリ領域集合のサイズと同じであるが、これは、メモリ領域集合を全て同じ大きさにしておき、さらに、追加する領域も同じサイズにすることで、ローカルメモリから分散共有メモリ１−Ｃヘの割り当てが容易になるからである。超過するメモリ領域集合があるかどうかの判定は、定期的、あるいは非定期に本ノード間データ転送制御装置の利用者や、利用システムなどからの指示を契機に行う。従来技術では、図６（ａ）のような領域の集合や、グループなどを構成していないため、分散共有メモリ１−Ｃの使用伏況や、ノード間の関係にあわせた効率的なメモリ割り当てが困難である。
【００７７】
次に、図９及び図１０は、本実施形態による、メモリ構成の設定処理の主要な部分の動作を説明するためのフローチャートである。図９及び図１０に示すフローチャートも、図８と同様に、必要な分散共有メモリ１−Ｃが増えたためローカルメモリの一部を分散共有メモリ１−Ｃとして割り当て、その結果、分散共有メモリ１−Ｃが追加される場合の、メモリ構成の設定法の主要な部分の動作の流れの概略を示したものである。
【００７８】
まず、ノード番地変換手段１−Ｂは、現在使用している分散共有メモリ１−Ｃのメモリ領域Ｍ１において、メモリ領域集合が複数集まった領域グループの中で、不足基準を超過しているものがあるか否かを判定し（ステップＳｄ１）、不足基準を超過しているものがある場合には、対象の領域グループの中で最もメモリ領域を多く使用しているメモリ領域集合が、メモリ領域割り当て基準を超えているかを判定する（ステップＳｄ２）。通常、不足基準とメモリ領域割り当て基準は同じ値であるが、これを異なった値に設定してもよく、それによりマージンを確保し、メモリ領域追加の時期を変え、他の領域グループヘのメモリ領域追加と時期をあわせるなどを行うことも可能である。
【００７９】
そして、メモリ領域割り当て基準を超過しているメモリ領域集合がある場合には、当該メモリ領域集合を含む領域グループヘの新たな領域グループ割り当て数を１だけ加算する（ステップＳｄ３）。次に、ノード番地変換手段１−Ｂは、対象の領域グループ内で最もメモリ領域を多く使用しているメモリ領域集合のメモリ使用量の値を、対象の領域グループ内の最大メモリ使用量として、対象の領域グループ内の最大メモリ使用量から領域グループ長単位を引き（ステップＳｄ４）、グループ超過数を１だけ加算し（ステップＳｄ５）、ステップＳｄ２に戻る。以降、対象の領域グループの中で最もメモリ領域を多く使用しているメモリ領域集合が、メモリ領域割り当て基準を超えなくなるまで、ステップＳｄ２〜Ｓｄ５を繰り返す。
【００８０】
そして、対象の領域グループの中で最もメモリ領域を多く使用しているメモリ領域集合が、メモリ領域割り当て基準を超えなくなると、ノード番地変換手段１−Ｂは、領域集合（［Ｇｘ−ｘ，ｘ］等）に対し新たに加わった割り当て単位数を１だけ加算し（ステップＳｄ６）、領域閾値Ｍ１で不足基準を超過する領域グループが無くなるまで、上記ステップＳｄ２〜Ｓｄ５を繰り返す（ステップＳｄ７）。そして、領域閾値Ｍ１で不足基準を超過する領域グループが無くなると、領域グループ割り当て数と領域グループ長単位の積をとり、その積を各領域グループについて合計する（ステップＳｄ８）。
【００８１】
次に、ノード番地変換手段１−Ｂは、上記合計サイズが、未使用領域で分散共有メモリ１−Ｃとして確保可能であるか否かを判定し（ステップＳｄ９）、上記合計サイズが確保できない場合には、（空きサイズ÷合計サイズ）×領域グループ長を、新たに割り当てる領域グループ長とすることで、合計サイズの値を確保可能なサイズに縮小し（ステップＳｄ１０）、合計サイズが未使用領域で分散共有メモリ１−Ｃとして確保可能であるか否かを判定する（ステップＳｄ１１）。そして、合計サイズが分散共有メモリ１−Ｃとして割り当て可能なサイズに達しなければ、ノード間データ転送制御装置の利用者や、利用システムにエラーを通知する（ステップＳｄ１２）。
【００８２】
一方、ステップＳｄ９、あるいはステップＳｄ１１で、合計サイズが、分散共有メモリ１−Ｃとして割り当て可能なローカルメモリ内に確保可能であった場合には、確保可能領域のうち、合計サイズに相当する領域を領域Ｍ２とする（ステップＳｄ１３）。次に、領域Ｍ２のメモリ番地を、ノード番地変換手段１−Ｂが参照するテーブル内の番地の、領域Ｍ１の後続に追加する（ステップＳｄ１４）。その後、所定時間待機し（ステップＳｄ１５）、その後、ステップＳｄ１に戻る。
【００８３】
なお、演算によりノード番地変換を行う場合には、演算手段を修正する。また、領域グループ割り当て数の初期値は０である。不足基準を超過する領域グループがあるかどうかの判定は、定期的、あるいは非定期に本ノード間データ転送制御装置の利用者や、利用システムからの指示を契機に行えばよい。
【００８４】
次に、本実施形態による、割り当て解除処理について説明する。
図９及び図１０において、領域Ｍ１で、不足基準を超過する領域グループがある場合、当該グループについて超過していることを領域集合（図６（ａ）の［Ｇｘ−ｘ，ｘ］等）毎に割り当て単位の番地とともに記録しておく（グループ超過数と記す）。当該グループに分散共有メモリ１−Ｃを割り当てた後、もし、当該グループについて分散共有メモリ１−Ｃが少なくても良い状況となれば、割り当てを解除することになるが、このとき、まず、上記グループ超過数の記録を参照し、記録に何らかの値があれば、その値が０になるまで、分散共有メモリ１−Ｃとして初期的に割り当てない範囲（図７（ａ）参照）の番地を対象に、ノード番地変換手段１−Ｂが保持するテーブル（ノード番地とメモリ番地との対応を示すテーブル）を検索して、該当ノードの増設領域を特定し、その領域に対して分散共有メモリ１−Ｃとしての割り当てを解除することを続ける。
【００８５】
当該グループについて分散共有メモリ１−Ｃが少なくて良い状況となって、このグループ超過数の記録が０であるならば、領域集合（図６（ａ）の［Ｇｘ−ｘ，ｘ］等）に対して新た加わった割り当て単位数を参照し、この割り当て単位数の値が０になるまで、グループ内の番地を対象に、ノード番地変換手段１−Ｂが保持するテーブルを検索して、該当ノードの増設領域を特定し、その領域に対して分散共有メモリ１−Ｃとしての割り当てを解除することを続ける。割り当てを解除する順番としては、「グループ超過によって増設された領域」を先に解除し、「グループ内で増設された領域」を次に解除する。したがって、通常は、テーブル内の後続に追加されたメモリ番地を後ろから順に削除する処理を行えばよい。なお、解除した後の領域の用途は、図７（ａ）で説明した通りである。
【００８６】
次に、本実施形態による、割り当て解除処理の動作について説明する。
図１１は、本実施形態による、割り当て解除処理の動作を説明するためのフローチャートである。ノード番地変換手段１−Ｂは、まず、領域集合の減設が必要であるか判定し（ステップＳｅ１）、領域集合の減設の必要がある場合には、（該当領域集合の）グループ超過数が０であるか否かを判定する（ステップＳｅ２）。そして、（該当領域集合の）グループ超過数が０より大きければ、グループ超過に該当する番地に存在する当該領域集合の割り当て単位の内、１つに相当する番地を減設する（ステップＳｅ３）。これは、図６（ａ）で［Ｇ１−１，ａ］（増設）部分で割り当て単位を１つ減設することに相当し、（該当領域集合の）グループ超過数を１つ減し（ステップＳｅ４）、ステップＳｅ１に戻り、上述した処理を繰り返す。
【００８７】
一方、グループ超過数が０であれば、領域集合に対し新た加わった割り当て単位数が０であるか否かを判定する（ステップＳｅ５）。そして、領域集合に対し新た加わった割り当て単位数が０より大きい場合には、領域集合に対し新た加わった割り当て単位の内、１つに相当する番地を減設する（ステップＳｅ６）。これは、図７（ａ）において、領域（※１）や、（※２）を減設することに相当し、領域集合に対し新た加わった割り当て単位数＝領域集合に対して新た加わった割り当て単位数を１つ減らし（ステップＳｅ７）、減設した領域の初期的割り当て時に割り当てられていた領域集合の領域としてノード番地変換手段１−Ｂを変更する（ステップＳｅ８）。このとき、メモリ領域割り当て基準は、超えている状態が維持されるので、変更された領域は、初期的割り当て時に割り当てられていた領域集合として用いられず、領域グループ内の他の領域集合の領域が不足した際に利用できる状態となる。その後、ステップＳｅ１に戻り、上述した処理を繰り返す。
【００８８】
上記ステップＳｅ５における、「領域集合（図６（ａ）の［Ｇｘ−ｘ，ｘ］等）に対し新たに加わった割り当て単位数≠０か」とは、「領域グループ内の当該領域集合で初期的割り当てと異なる領域が存在するか」を判定していることである。例えば、ネットワークのセグメントに領域グループが対応している場合には、セグメント内のあるノードが削除されることで、領域グループ内の領域集合に相当する箇所にローカルメモリが置かれ、領域グループが複数に分離されてしまうことを防げる。
【００８９】
すなわち、初期的割り当て状態では、送信先／元ノードとメモリ番地との対応をとる際、セグメント単位で対応付けができ、検索などもセグメント単位で行えるが、分離されてしまうと、セグメント単位のメモリ操作ができなくなるので、このような非効率性を避けることができる。そこで、領域集合に対し新た加わった割り当て単位数が０であれば、領域集合に対して初期的割り当て時に割り当てられていた割り当て単位の内、１つに相当する番地を減設する（ステップＳｅ９）。これは、図７（ａ）において、領域（※４）や、（※５）を減設することであり、領域（※５）も減設されることは、当該領域集合に対するノードが削減されたことに相当する。領域集合（図６（ａ）の［Ｇｘ−ｘ，ｘ］等）に対して割り当て単位の内、１つに相当する番地を減設するが、ノード番地変換手段１−Ｂを変更しない（メモリ領域割り当て基準を超えていない状態となれば、領域グループ内の他の領域集合の領域が不足した際に利用できる状態となる）。その後、待機状態とする（ステップＳｅ１０）。
【００９０】
なお、本発明においては、概ねメモリ構成を物理的に想定して説明示しているが、仮想メモリを用いることで、使用するメモリ番地が実メモリ番地と異なっても構わない。この場合、本実施形態によるメモリ構成は、仮想メモリ上の説明となり、仮想番地と実番地との変換を経て、物理メモリ番地に基づいて処理が行われることになる。また、あるメモリ領域について、仮想的なメモリ番地が連続していても、物理的なメモリ配置が不連続となる場合も可能となるので、例えば、図６（ａ）の領域Ｍ１は、メモリ領域が連続しているように記されているが、これは仮想メモリ上のことであり、実メモリ上では、離散的に割り当てられたものであっても構わない。
【００９１】
ノード番地変換は、ノード番地と分散共有メモリ１−Ｃのメモリ番地とを対応付けるテーブルを用いる場合もある。あるいは、例えば、メモリ番地の下位をマスクすると、ノード番地となるように設定する等して、演算、あるいは、メモリ操作等により、ノード番地と分散共有メモリ１−Ｃのメモリ番地とを対応付ける場合もある。
【００９２】
ここで、ノード番地変換手段１−Ｂが演算によりノード番地を変換する場合について、簡単な一例について説明する。図１２は、本実施形態において、ノード番地変換手段１−Ｂが演算によりノード番地を変換する場合について説明するための概念図である。ノード番地や、メモリ番地などが複雑な値をとったり、同一領域グループに対応するノード数が多数存在する場合には、ノード番号や、メモリ番地などを、演算前に、（ａ）整列する、（ｂ）オフセットを与える、（ｃ）以下の例内の１０倍や、１００倍等の値を適切な大きな値にしたりすることによって、同様の処理で実行できる。
【００９３】
同一領域グループに対応するノードが１０以下のときは、図１２（ａ）、（ｂ）に示すように、ノード番地を「１０×領域集合サイズ倍」した値を領域集合の先頭番地とし、領域グループを「１００×領域集合サイズ倍」毎に設定しておく。増設が不要な領域集合については、「１０倍単位とする領域集合」であるが、メモリを増設する領域集合については、「１０倍」の処理を、例えば、１１倍にして、「１１倍単位とする領域集合」としてリスト化しておく。減設する領域集合については、「１０倍」の処理を、例えば、９倍にして、「９倍単位とする領域集合」としてリスト化しておく。「１０倍単位とする領域集合」については、ノード番地を「１０×領域集合サイズ倍」すれば、メモリ番地を得られる（メモリ番地からノード番地を得るには、その逆の処理を行う）。
【００９４】
「１１（９）倍単位とする領域集合」にリスト化されている領域集合は、ノード番地を「１１（９）×領域集合サイズ倍」でノード番地を得る。演算、あるいは、メモリ操作等により、ノード番地と分散共有メモリ１−Ｃのメモリ番地とを対応付ける場合における増減設は、図１２（ｃ）に示すように、このように、「α倍単位とする領域集合」リストに領域集合の番地、またはノード番地を追加、または削除することで行う。領域グループ自体が増減設の対象となった場合も、領域集合の増減設の場合と同様である。なお、「１０倍する」等に相当する処理を、シフトや、マスクなどで行っても良いし、演算を使用しても構わない。
【００９５】
図１２において、例えば、「ノード番地６は、１１個の領域集合を持ち、領域集合の開始番地は通常の初期割り当て（各ノードが１０個ずつ）の場合に対し１０番地減じた位置となっている」ことを示す。このリストの「α倍単位」にノード番地を登録することで、演算即ち、「ノード番地×１０×領域集合によりノード番地に対応する領域集合の位置を決定する」を用いたメモリ増設減設を可能にする。「１１倍」に登録していたノードを「１０倍」に登録することで、初期状態のメモリ割り当てに戻る。「９倍」から「１１倍」にすると増設される（逆は減設される）ことになる。
【００９６】
上述した実施形態によれば、分散共有メモリ１−Ｃの中で使用されている領域、あるいは、バッファがある定まったメモリサイズを超過しているものがあり、領域不足が起こり得るような場合において、効率的にサイズ超過を判定し、効率的に割り当てを行い、その際、後で割り当てが不要になった場合も、割り当て時の効率を維持しながら割り当て解除を行うことができる。
【００９７】
また、分散共有メモリ１−Ｃが効率的に利用でき、また、ローカルメモリを効率的に割り当て、その際、後で割り当てが不要になった場合も、割り当て時の効率を維持しながら割り当て解除を行うことができる。
【００９８】
また、本実施形態によれば、ノードの変更規則を用いる場合、必ずしも個々の領域の不足に対してメモリを追加する必要はなく、変更規則を修正することにより、あるまとまった単位の領域に対して不足を判定し、追加するといった、効率的な割り当てが可能になり、割り当て解除する場合にも変更規則を修正することにより同様の効果が得られる。
【００９９】
また、複数に区分されたネットワークに容易に対応付けを行うことができるので、割り当て／割り当て解除の双方共に、個々のメモリ領域の集合に対して、サイズ超過判定／減設必要性判定を行う必要はなく、また、新たなメモリ割り当て／メモリ割り当て解除の結果にメモリの不足や、無駄を減少させることができ、ノード関係にあわせたメモリ割り当て／割り当て解除が可能になる。
【０１００】
なお、上述した実施形態において、上述したノード番地変換手段１−Ｂなどによる各ステップを実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、また、ノード番地変換手段１−Ｂなどの機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行するようにしてもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものであってもよい。また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリ等の書き込み可能な不揮発性メモリ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。
【０１０１】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（例えばＤＲＡＭ（Dynamic Random Access Memory））のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【図面の簡単な説明】
【０１０２】
【図１】本発明の実施形態による通信システムと通信を行うノード内部の構成を示すブロック図である。
【図２】本実施形態による、通信システムであって、ネットワークに接続されたノードの関係の概略を示す概念図である。
【図３】本実施形態による、通信システムであって、ノード内部のメモリの構造の概略を示す概念図である。
【図４】通常のメモリ構成変更処理の動作を説明するためのフローチャートである。
【図５】本実施形態によるメモリ構成変更処理の動作を説明するためのフローチャートである。
【図６】本実施形態による、メモリ構成の設定法の一例を説明するための概念図である。
【図７】本実施形態において、メモリ領域が変更された後の分散共有メモリ１−Ｃの状況の概略を示す概念図である。
【図８】従来技術による、メモリ構成の設定法の主要な部分の動作を説明するためのフローチャートである。
【図９】本実施形態による、メモリ構成の設定法の主要な部分の動作を説明するためのフローチャートである。
【図１０】本実施形態による、メモリ構成の設定法の主要な部分の動作を説明するためのフローチャートである。
【図１１】本実施形態による、割り当て解除の手順を説明するためのフローチャートである。
【図１２】本実施形態において、ノード番地変換手段１−Ｂが演算によりノード番地を変換する場合について説明するための概念図である。
【符号の説明】
【０１０３】
１−Ａ  アプリケーションプログラムまたはＯＳ類
１−Ｂ  ノード番地変換手段
１−Ｃ、１−Ｃ’  分散共有メモリ
１−Ｃ−１、１−Ｃ−ｎ  メモリ番地
１−Ｄ、１−Ｄ’  転送制御手段
１−Ｅ  内部バス
１−Ｆ、１−Ｊ、…、１−Ｎ  ノード
１−Ｇ  データ
１−Ｈ  ノード番地
１−Ｉ  ネットワーク
【図１】
0005068151.tif 000002
【図２】
0005068151.tif 000003
【図３】
0005068151.tif 000004
【図４】
0005068151.tif 000005
【図５】
0005068151.tif 000006
【図６】
0005068151.tif 000007
【図７】
0005068151.tif 000008
【図８】
0005068151.tif 000009
【図９】
0005068151.tif 000010
【図１０】
0005068151.tif 000011
【図１１】
0005068151.tif 000012
【図１２】
0005068151.tif 000013