(57)【特許請求の範囲】
【請求項１】
サーバによりネットワーク・アドレスを仮想マシンに帰属させる方法であって、利用可能なアドレスはすべて、１つ以上の連続的な範囲として表され、前記範囲それぞれは、先頭アドレス及び終端アドレスによってそれぞれ定義され、前記方法は、
前記サーバがリクエスト側エンティティから特定の数のアドレスを求めるリクエストを受信するステップと、
前記サーバが利用可能なアドレスの連続的な範囲の長さと、リクエストされたアドレスの前記数とを比較するステップと、
前記サーバが前記リクエストされたアドレスの数よりも多い数のアドレスを含む利用可能なアドレスの範囲を選択するステップと、
前記サーバが前記選択された範囲から切り取られ、前記リクエストされた数のアドレスを含む第１の新たな範囲を定義するステップと、
前記サーバが前記第１の新たな範囲に属さない、前記選択された範囲の残りを含む、１つ以上のさらなる新たな範囲を定義するステップと、
前記サーバが前記第１の新たな範囲を、前記リクエスト側エンティティ用に帰属させるステップと、
を含む方法。
【請求項２】
利用可能なアドレスの連続的な範囲の前記長さと、リクエストされたアドレスの前記数とを比較する前記ステップは、利用可能なアドレスの連続的な範囲すべての前記長さと、リクエストされたアドレスの前記数とを比較することを伴い、選択する前記ステップは、十分な長さの利用可能な１つの範囲を選択することを伴う、請求項１に記載の方法。
【請求項３】
利用可能なアドレスの連続的な範囲の前記長さと、リクエストされたアドレスの前記数とを比較する前記ステップは、利用可能なアドレスの連続的な範囲それぞれの前記長さを、十分な長さの利用可能な範囲が特定されるまで順に比較して、利用可能なアドレスのさらなる連続的な範囲の前記長さと、リクエストされたアドレスの前記数との比較はせずに、前記十分な長さの利用可能な範囲を選択することを伴う、請求項１に記載の方法。
【請求項４】
アドレスの範囲を、予約エンティティに対し予約済みと定義するさらなるステップと、その後、前記リクエスト側エンティティが前記予約エンティティではない場合、利用可能なアドレスの当該範囲の前記長さと、リクエストされたアドレスの前記数とを比較する前記ステップにおいて、前記予約済みの範囲を無視するさらなるステップと、
を含む、請求項１乃至３のいずれかに記載の方法。
【請求項５】
隣接する利用可能な範囲又は同じエンティティに帰属させられている隣接する範囲を特定し、単一の範囲を形成するために前記隣り合った範囲をマージするさらなるステップ
を含む、請求項１乃至４のいずれかに記載の方法。
【請求項６】
以前に帰属させられた範囲が、次のリクエストの前に解放されている場合であっても、同じ前記特定の数のアドレスを求める連続するリクエストには、異なるアドレスの範囲が循環的に帰属させられる、請求項１乃至５のいずれかに記載の方法。
【請求項７】
ネットワーク・アドレスを仮想マシンに帰属させるサーバであって、利用可能なアドレスはすべて、１つ以上の連続的な範囲として表され、前記範囲それぞれは、先頭アドレス及び終端アドレスによってそれぞれ定義され、前記サーバは、
リクエスト側エンティティから特定の数のアドレスを求めるリクエストを受信する手段と、
利用可能なアドレスの連続的な範囲の長さと、リクエストされたアドレスの前記数とを比較する手段と、
前記リクエストされたアドレスの数よりも多い数のアドレスを含む利用可能なアドレスの範囲を選択する手段と、
前記選択された範囲から切り取られ、前記リクエストされた数のアドレスを含む第１の新たな範囲を定義する手段と、
前記第１の新たな範囲に属さない、前記選択された範囲の残りを含む、１つ以上のさらなる新たな範囲を定義する手段と、
前記第１の新たな範囲を、前記リクエスト側エンティティ用に帰属させる手段と、
を含む装置。
【請求項８】
コンピュータ・プログラムがコンピュータ上で実行されると、請求項１〜６のうちのいずれか１項に記載の方法を前記コンピュータに実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク・アドレスを管理するアドレス・サーバと、並列コンピューティング環境においてネットワーク・アドレスを帰属させる（ａｔｔｒｉｂｕｔｅ）方法に関する。
【背景技術】
【０００２】
高性能コンピューティング環境などの並列コンピューティング環境には、何千ものノード上で実行される、大規模な並列アプリケーションが存在する。チェックポイントを行い、アプリケーションをリスタートすることができるようにするためには、それらのアプリケーションをコンテナ内で実行する必要がある。チェックポインティングとして既知である技術は、未来の時間に、完全な状態を復元してアプリケーションが続行できるように、実行中のアプリケーションの状態をファイルに保存することを伴う。リスターティングとして既知の技術は、チェックポイント・ファイルから状態を復元し、アプリケーションが中断されなかったかのように（しかし場合によっては別のセットの計算ノード上で）実行を続けるような形で、実行を再開することを伴う。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
チェックポイント及びリスタート動作中に、ＴＣＰ／ＩＰ接続の状態を保存し、復元することができるが、これにはネットワークの仮想化が必要である。そうするために、少なくとも１つの仮想ＩＰアドレスが各コンテナに関連付けられる。ＴＣＰ／ＩＰ接続は、仮想アドレスを経由するため、１つのノードから別のノードへ移動可能である。所与のアプリケーションに関し、すべての仮想ＩＰアドレスが、同じサブ・ネットワークに属さなくてはならない。仮想ＩＰアドレスは、異なる２つのアプリケーションによって同時に使用されてはならず、使用されると、これはＴＣＰ／ＩＰのコンフリクトをもたらす。
【課題を解決するための手段】
【０００４】
本発明によれば、添付の独立請求項１に記載の、仮想マシンにネットワーク・アドレスを帰属させる方法と、添付の請求項７に記載の装置と、添付の請求項８に記載のコンピュータ・プログラムと、添付の請求項９に記載のコンピュータ可読媒体とが提供される。
【０００５】
好適な実施形態が、従属請求項において定義される。
【０００６】
以下、本発明の実施形態について、添付の図面を参照して例として記載する。図面では、同じ参照符号は同様の構成要素を示す。
【図面の簡単な説明】
【０００７】
【図１】本発明に属さないサーバの概略図である。
【図２】本発明の実施形態を示す、図１のものに対応する概略図である。
【図３】実施形態のステップを示すフローチャートである。
【図４】図４ａは、実施形態によるメモリの割り当てを概略的に示し、図４ｂは、実施形態による別のメモリ割り当て状況を概略的に示す。
【図５】隣接する（ｃｏｎｔｉｇｕｏｕｓ）非同質（ｎｏｎ−ｈｏｍｏｇｅｎｅｏｕｓ）の２つの範囲を、その２つの範囲にわたる範囲を予約するために分割する原理を示す。
【図６】美化（ｂｅａｕｔｉｆｉｃａｔｉｏｎ）アルゴリズムのステップのフローチャートである。
【図７】図７ａ、７ｂ、７ｃ及び７ｄ及び７ｅは、図６のアルゴリズムにより実行される動作の例を示し、具体的には、図７ａは、美化プロセスの第１の段階を示し、図７ｂは、美化プロセスの第２の段階を示し、図７ｃは、美化プロセスの第３の段階を示し、図７ｄは、美化プロセスの第４の段階を示し、図７ｅは、美化プロセスの第５の段階を示す。
【図８】コンパクト化アルゴリズム（ｃｏｍｐａｃｔｉｎｇ  ａｌｇｏｒｉｔｈｍ）の効果を示す。
【発明を実施するための形態】
【０００８】
並列アプリケーションの実行に使用可能な、仮想ＩＰアドレスのセットを管理するようになっているサーバを想像するとよい。この文脈においてこの表現は、仮想化されること、又は別の方法でその機能をサポートしている物理的手段から抽象化されることが可能なソフトウェア・エンティティを主として示し得る。このサーバは、クライアントが、特定の数の空き仮想ＩＰアドレスを割り当て、特定のセットの仮想ＩＰアドレスを割り当て又は解放できるようにすると考えられる。サーバの有用な特徴は、その状態を、障害が起こった場合に同じ状態でリスタートできるようディスク上のファイル内に常に保存する能力であろう。
【０００９】
並列アプリケーションは、何千ものノード上で実行されるため、サーバは、数千の仮想ＩＰアドレスを管理する必要があるであろう。
【００１０】
図１は、本発明に属さないそのようなサーバの概略図である。図のように、サーバ１００は、メモリ１１０内に、各アドレスに関して、その値１１１及びその状態１１２の表現を提供する。この同じ情報が、状態ファイル１３０に書き込まれることが可能であろう。サーバとクライアント１２１との間でやり取りされるメッセージでは、すべてのアドレスが１つずつ書かれることになるため、例えばクライアントが特定の数のアドレスを割り当てるためのリクエストを送信するとき、メッセージは必要なアドレスすべてを指定することになる。続いてサーバは、すべてのアドレスを１つずつ確認して、そのアドレス１１１のメモリ・セクションの位置を特定し、関連するステータス空間１１２の値を読み取り、続いて必要なアドレスそれぞれの状態を、それに応じて１つずつ更新することになる。アドレスの状態が更新されるたびに、サーバ１００は状態ファイル１３０も更新することになる。
【００１１】
比較的少数のアドレスには十分であるが、発明者らは、アドレスの数が非常に多いと非常に大量のメモリがサーバに必要となり、状態ファイルが非常に大きくなり、サーバとクライアントとの間でやり取りされるメッセージが非常に大きくなり、リクエストを処理するのに必要な時間が望ましくないほど長くなる可能性があると判断した。
【００１２】
アドレスの範囲は、その第１のアドレス及び最後のアドレスによって表される。２つのアドレスのみで、１００のアドレスの範囲も、数千のアドレスの範囲も表現することができる。これにより大量のメモリを節約することができる。或る範囲のアドレスはすべて同じ状態を共有する。或る範囲の一部のアドレスのみの状態が変更されなければならない場合は、まず、その範囲がいくつかの範囲に分割され、続いて、別々の範囲の状態がセットされる。つまり、該アドレスの範囲は新たな状態に、さらに最終的に新たな範囲の前後にある残りのアドレスの範囲が以前の状態を用いてセットされる。可能なときはいつでも、同じ状態の範囲はマージされる。以下に記載するように、アドレスのシーケンスは、そのシーケンスすべてのアドレスが同じステータスを有すれば同質と見なされる。本発明による範囲は、必ず同質である。
【００１３】
図２は、本発明の実施形態を示す、図１のものに対応する概略図である。図のように、サーバ１００は、メモリ１１０内に、アドレスの複数範囲を、先頭アドレス２１１、及び終端アドレス２１２、及びステータス・フィールド２１３によって表す。この同じ情報が、状態ファイル１３０に書き込まれることが可能であろう。この、範囲による表現は、サーバのメモリ・フットプリント、状態ファイル（ｓｔａｔｅ  ｆｉｌｅ）のサイズ、サーバとクライアントとの間でやり取りされるメッセージのサイズを大幅に削減し、サーバがリクエストを処理するのに要する時間を改善する。
【００１４】
６４０Ｋ（６５５３４０）のアドレスがある例では、図１に関して記載したサーバによって使用されるメモリは、３０ＭＢのオーダであることもあり得るが、本実施形態によれば、４０ＫＢのオーダに近く、すなわち７００分の１になる可能性がある。同様に、図１に関して記載したサーバによって使用される状態ファイルは、４０ＭＢのオーダであることもあり得るが、本実施形態によれば、４ＫＢのオーダに近くなり得る。図１に関して記載されたクライアントとサーバとの間でやり取りされるメッセージは、約４ＭＢであることもあり得るが、本実施形態によれば、２００Ｂのオーダに近くなり得る。以前の実装によってリクエストを処理するのに要する時間は、アドレスの数の関数であったが、ここでは範囲の数の関数になる。
【００１５】
最悪の場合には、いずれの隣接する２つのアドレスも同じ状態を有さず、サーバは、各アドレスを範囲によって表現する必要がある。サーバは、常に可能な限り隣接してアドレスを割り当てるため、これが起こる可能性は低い。そのような状況は、例えばユーザが、奇数アドレスのみを明示的に割り当てる場合などにのみ起こり得る。
【００１６】
以前に帰属させられた範囲が、次のリクエストの前に解放されている場合であっても、同じ特定の数のアドレスを求める連続するリクエストには、異なるアドレスの範囲が循環的に（ｃｙｃｌｉｃａｌｌｙ）帰属させられることが好ましい。
【００１７】
したがって、メモリ内の各アドレスを表現するのではなく、アドレスの範囲が使用される改善されたサーバが提案される。具体的には、ネットワーク・アドレスを仮想マシンに帰属させる方法が提案され、すべての利用可能なアドレスが、１つ以上の連続的な範囲として表され、各範囲は、先頭アドレス及び終端アドレスによってそれぞれ定義される。本方法は、リクエスト側エンティティから特定の数のアドレスを求めるリクエストを受信するステップと、利用可能なアドレスの連続的な範囲の長さと、リクエストされたアドレスの数とを比較するステップと、リクエストされたアドレスの数よりも多い数のアドレスを含む利用可能なアドレスの範囲を選択するステップと、前記選択された範囲から切り取られ、リクエストされた数のアドレスを含む第１の新たな範囲を定義するステップと、前記第１の新たな範囲に属さない、前記選択された範囲の残りを含む、１つ以上のさらなる新たな範囲を定義するステップと、第１の新たな範囲を、リクエスト側エンティティ用に帰属させるステップであって、該さらなる新たな範囲はその現在のステータスを保つ、該ステップとを含む。
【００１８】
連続的な範囲とは、数値的又は論理的に当該範囲に入るすべてのアドレスを含む範囲である。したがって、１９２．１６８．０．１の先頭値及び１９２．１６８．０．５の終端値を有する連続的な範囲は、アドレス１９２．１６８．０．２、１９２．１６８．０．３及び１９２．１６８．０．４を必ず含む。例えば、特殊用途用に確保されているなど、特定のアドレスが利用可能でないこともあるが、その場合は、そのような予約済みのアドレスをスキップしても連続的な範囲は連続的と見なされてよい。２つのアドレスは、１つが、別のものの、数値的にすぐ後又は前のものであれば隣り合っている（ａｄｊａｃｅｎｔ）。したがって、１９２．１６８．０．２と１９２．１６８．０．３とは隣り合っている。１つの範囲の先頭値が、別の範囲の終端値と隣り合っていれば、２つの範囲は隣り合っている。さらに、隣り合った範囲は、それらがともにアドレスの連続したシーケンスを表すが、２つの別々の範囲を単位として定義されているということに基づき、隣接していると言うこともできる。
【００１９】
図３は、実施形態のステップを示すフローチャートである。図のように、本方法は、ステップ３０５として開始し、それからステップ３１０へ進み、そこで特定の数のアドレスを求めるリクエストがリクエスト側エンティティから受信される。本方法は、ステップ３１５へ進み、そこで、例えばアドレス予約メモリ１１０において定義されている、利用可能なアドレスの連続的な範囲の長さと、リクエストされたアドレスの数とを比較する。本方法は続いて、ステップ３２０へ進み、そこで、リクエストされたアドレスの数よりも多い数のアドレスを含む利用可能なアドレスの範囲が選択される。本方法は続いて、ステップ３２５へ進み、そこで、前記選択された範囲から切り取られ、リクエストされた数のアドレスを含む、第１の新たな範囲が定義される。
【００２０】
同じく本方法は後続のステップ３３０にて、前記第１の新たな範囲に属さない、前記選択された範囲の残りを含む１つ以上のさらなる新たな範囲を定義する。続いて本方法は、リクエスト側エンティティ用に第１の新たな範囲を帰属させることに進み、該さらなる新たな範囲は、その現在のステータスを保ち、その後、ステップ３３５にて終了する。好適な一実施形態によれば、利用可能なアドレスの連続的な範囲の長さと、リクエストされたアドレスの数とを比較するステップ３１５は、利用可能なアドレスの連続的な範囲すべての長さと、リクエストされたアドレスの数とを比較することを伴い、選択する前記ステップは、十分な長さの、最も都合のよい利用可能な範囲を選択することを伴う。
【００２１】
別の好適な実施形態によれば、利用可能なアドレスの連続的な範囲の長さと、リクエストされたアドレスの数とを比較するステップ３１５は、利用可能なアドレスの連続的な範囲それぞれの長さを、十分な長さの利用可能な範囲が特定されるまで順に比較して、利用可能なアドレスのさらなる連続的な範囲の長さと、リクエストされたアドレスの数との比較はせずに、前記十分な長さの利用可能な範囲を選択することを伴う。
【００２２】
サーバＡＰＩの説明
実施形態によれば、改善されたサーバは以下のリクエストを認識する。
【００２３】
−「ｇｅｔ」。このリクエストは、割り当てるアドレスの数を渡し、割り当てられたアドレスの範囲のリストを返す。一実施形態によれば、サーバは、それが発見する、最初のアドレスの範囲を返す。本実施形態によれば、考慮される範囲はすべて同じサブ・ネットワークに属する。アドレスが常に同じサブ・ネットワークからもたらされることがないように、サーバは各リクエストで異なるサブ・ネットワークを検討することが好ましい。
【００２４】
サーバは、利用可能なサブ・ネットワークを循環することが好ましい。
【００２５】
−「ｕｓｅ」。このリクエストは、割り当てるアドレスの範囲を渡し、単に動作のステータスを返す。サーバは、このアドレスすべてが空きであるかどうかを確認し、そうであれば、それらを割り当てる。
【００２６】
−「ｒｅｌｅａｓｅ」。このリクエストは、解放する（割り当て解除する）アドレスの範囲を渡し、単に動作のステータスを返す。サーバは、使用中のアドレスすべてを解放する。なお、特定の実施形態によれば、一部のアドレスは予約されていることもあり、したがって、それらは空きにはならないが、予約される。
【００２７】
−「ｍａｋｅ  ｒｅｓｅｒｖａｔｉｏｎ」。このリクエストは、予約するアドレスの範囲を渡し、予約の識別子を返す。サーバは、予約を作成し、予約をこのアドレスすべてに追加する。
【００２８】
−「ｃｈｅｃｋ  ｒｅｓｅｒｖａｔｉｏｎ」。このリクエストは、予約の識別子を渡し、予約の状態を返す（準備ができているか否か）。サーバは、予約を検索し、その状態を確認する。
【００２９】
−「ｕｓｅ  ｒｅｓｅｒｖａｔｉｏｎ」。このリクエストは、予約の識別子を渡し、動作のステータスを返す。サーバは、予約の準備ができているかどうかを確認し、できていれば、予約を消去して、予約の一部であるアドレスすべてを割り当てる。
【００３０】
−「ｃａｎｃｅｌ  ｒｅｓｅｒｖａｔｉｏｎ」。これは、予約の識別子を渡し、動作のステータスを返す。サーバは、予約を消去し、それを、予約の一部であったアドレスすべてから削除する。
【００３１】
内部表現の説明
サーバのメモリ内で表現されるオブジェクトがいくつかある。アドレスの範囲、サブ・ネットワーク、及び予約である。
【００３２】
アドレスの範囲は、同じ状態及び同じ予約のリストを備える、連続的な一連のアドレスのセットを表現するオブジェクトである。アドレスの範囲のプロパティは、第１のアドレス、最後のアドレス、範囲の状態（「空き」、「使用中」、又は「予約済み」）、範囲内のアドレスの数、及び範囲に関連付けられている予約のリストである。２つの範囲は、それらが隣接し、同じ状態であり、同じ予約のリストを共有している場合にマージ可能である。
【００３３】
サブ・ネットワークは、このサブ・ネットワークのアドレスを含むアドレスの範囲すべてをグループ化するオブジェクトである。サブ・ネットワークのプロパティは、サブ・ネットワークのアドレス、そのマスク、及びサブ・ネットワークの一部である範囲のリストである。
【００３４】
予約は、予約されたアドレスのセットと、識別子とを関連付けるオブジェクトである。予約のプロパティは、その識別子及び予約の一部であるアドレスの範囲のリストである。予約は、予約の一部であるアドレスの範囲の変更をリスン（ｌｉｓｔｅｎ）する。範囲が分割されると、その結果新たな範囲が、予約の一部である範囲のリストに追加される。２つの範囲がマージされると、削除された範囲が、予約の一部である範囲のリストから削除される。これは、予約の一部である範囲のリストが一貫性のある状態を保つことを可能にする。範囲の状態が変化すると、予約はその状態を更新する。すべての範囲が現在「予約済み」状態であり、予約がリストの最初のものであれば、それは、予約を使用する準備ができていることを意味する。
【００３５】
サーバは、すべてのサブ・ネットワーク及びすべての予約を参照する。
【００３６】
「ｇｅｔ」リクエストの説明
クライアントは、同じサブ・ネットワークから特定の数のアドレスを得るために「ｇｅｔ」リクエストを行う。サーバはまず、十分な空きアドレスを備えるサブ・ネットワークを探す。次に、サブ・ネットワークの空き範囲をパース（ｐａｒｓｅ）し、必要な数のアドレスを得るまで各範囲のアドレスを割り当てるようサブ・ネットワークに要求する。最後の範囲を除いて、各範囲は全体を割り当てられ、最後の範囲は、正確な数を得るために部分的に割り当てられるとよい。
【００３７】
図４ａは、実施形態によるメモリの割り当てを概略的に示す。アドレスの範囲４００を割り当てるために、サブ・ネットワークは、アドレスを割り当てる空き範囲４０５を探す。割り当てるアドレスの範囲が空き範囲４０５に一致すれば、空き範囲の状態が単純に「使用中」に変更される。割り当てるアドレスの範囲が、空き範囲４０５の始まり又は終端にあれば、空き範囲４０５は、割り当てるアドレスを含む「使用中」状態の１つの範囲４１０と、残りのアドレスを備える「空き」状態の別の範囲４１５との、２つの範囲４１０及び４１５に分割される。
【００３８】
図４ｂは、実施形態による、別のメモリ割り当て状況を概略的に示す。図４ａに関して記載された、割り当てるアドレスの範囲４００が、図４ａに関して記載された空き範囲４０５の内側にあれば、空き範囲４０５は、３つの範囲４２０、４２５、４３０、つまり、「空き」状態の２つの範囲４２０、４３０、及び、中間にあり割り当てられるアドレスを含む「使用中」状態の範囲４２５に分割される。
【００３９】
「ｕｓｅ」リクエストの説明
クライアントは、アドレスの範囲のリストとして渡される、アドレスの特定のセットを割り当てるために「ｕｓｅ」リクエストを行う。
【００４０】
サーバは最初に、範囲のリストを美化する（ｂｅａｕｔｉｆｙ）。次に、どのサブ・ネットワークにアドレスが属するかを検索し、アドレスがサブ・ネットワークのどの範囲に属するかを検索する。
【００４１】
サーバは、割り当てるアドレスを含むアドレスの範囲すべてを得ると、その範囲すべてが「空き」状態であるかどうかを確認する。そうであれば、サーバは続いて、このアドレスすべてを割り当てるようサブ・ネットワークに要求する。サブ・ネットワークがアドレスを割り当てる方法は、前のセクションに記載している。
【００４２】
「ｒｅｌｅａｓｅ」リクエストの説明
クライアントは、アドレスの範囲のリストとして渡される、アドレスの特定のセットを解放する（割り当て解除する）ために「ｒｅｌｅａｓｅ」リクエストを行う。
【００４３】
サーバはまず、以下で美化用アルゴリズムに関連して記載されるように、範囲のリストを美化することが好ましい。次に、どのサブ・ネットワークにアドレスが属するかを検索し、このアドレスすべてを解放するようサブ・ネットワークに要求する。
【００４４】
或る範囲のアドレスを解放するために、サブ・ネットワークはまず、アドレスの範囲内に特定のアドレスすべてが存在することを確認する。次に、すべての範囲を調べ、解放されるべきアドレスを含む範囲に変更を加える。範囲の状態が「予約済み」又は「空き」であれば、何もしない。範囲の状態が「使用中」であれば、サブ・ネットワークは、状態を「空き」に、又はその範囲に対する予約があれば「予約済み」に変更する。その範囲のアドレスがすべて解放されるものではなければ、範囲はまず分割され、続いて、解放されるアドレスに対応する新たな範囲の状態のみが変更される。この後、サブ・ネットワークは、以下でコンパクト化アルゴリズムに関連して説明されるように、いくつかの範囲を最終的にマージするために、コンパクト・ルーチン（ｃｏｍｐａｃｔ  ｒｏｕｔｉｎｅ）を呼び出す。
【００４５】
「ｍａｋｅ  ｒｅｓｅｒｖａｔｉｏｎ」リクエストの説明
クライアントは、アドレスの範囲のリストとして渡される、アドレスの特定のセットを予約するために「ｍａｋｅ  ｒｅｓｅｒｖａｔｉｏｎ」リクエストを行う。
【００４６】
サーバはまず、以下で説明するように、範囲のリストを美化することが好ましい。続いて、どのサブ・ネットワークにアドレスが属するかを検索する。新たな予約識別子を定義し、続いて、このアドレスすべてを予約するようサブ・ネットワークに要求する。最後に、このアドレスすべてを伴う新たな予約を作成する。
【００４７】
或る範囲のアドレスを予約するために、サブ・ネットワークはまず、アドレスの範囲内に特定のアドレスすべてが存在することを確認する。次に、すべての範囲をパースして、その予約キューにこの予約を追加する。範囲が、予約されるアドレスの範囲と一致しなければ、サブ・ネットワークはまず、既存の範囲を分割し、その後、適切なものに対し予約を追加する。
【００４８】
範囲が予約済みとして定義されると、リクエスト側エンティティが予約エンティティではない場合には、帰属プロセスの間、この予約済みの範囲は、利用可能なアドレスの当該範囲の長さと、リクエストされたアドレスの数とを比較する前記ステップにおいて無視される。
【００４９】
図５は、隣接する非同質の２つの範囲を、その２つの範囲にわたるアドレスのシーケンスを予約するために分割する原理を示す。図のように、特定の範囲５０５の予約リクエストが受信される。アドレスのシーケンス５０５は、アドレス予約メモリにおいて定義されている２つの範囲５１０、５２０にまたがる。第１の定義済み範囲５１０は、「空き」ステータスを有し、第２の定義済みメモリ５２０は、「使用中」ステータスを有し、すなわち、特定のクライアントに帰属させられている。「ｍａｋｅ  ｒｅｓｅｒｖａｔｉｏｎ」命令を実装するために、２つの範囲５１０、５２０がそれぞれ分割され、その結果、現在は４つの範囲がある。端の範囲５１１、５２１は、当初定義されていた範囲５１０、５２０のステータスを保つ一方、内側の２つの範囲５１５、５２５はそれぞれ、それらが分割された当初定義されていた範囲のステータスと、「予約済み」ステータスとを累積する。最後に、以下に記載のように場合によっていくつかの範囲をマージするために、コンパクト・ルーチンを呼び出し、予約されたすべての範囲を返す。
【００５０】
「ｃｈｅｃｋ  ｒｅｓｅｒｖａｔｉｏｎ」リクエストの説明
クライアントは、予約の準備ができているか否かを確認するために、「ｃｈｅｃｋ  ｒｅｓｅｒｖａｔｉｏｎ」リクエストを行う。
【００５１】
サーバは、予約を検索し、続いてその状態を返す。
【００５２】
「ｕｓｅ  ｒｅｓｅｒｖａｔｉｏｎ」リクエストの説明
クライアントは、予約の一部であるアドレスすべてを「使用中」状態に切り替えるために「ｕｓｅ  ｒｅｓｅｒｖａｔｉｏｎ」リクエストを行う。その結果予約は破棄される。
【００５３】
サーバは、予約を検索し、続いて、アドレスを使用するよう予約に要求する。この動作が成功すれば、予約リストから予約を削除し、それを破棄する。
【００５４】
或る範囲のアドレスを使用するために、予約は、その予約の一部であるすべての範囲をパースし、そのステータスを「使用中」に変更し、その範囲の予約のキューからその予約を削除する。
【００５５】
「ｃａｎｃｅｌ  ｒｅｓｅｒｖａｔｉｏｎ」リクエストの説明
クライアントは、予約をキャンセルするために「ｃａｎｃｅｌ  ｒｅｓｅｒｖａｔｉｏｎ」リクエストを行う。予約は破棄され、この予約によって予約されていたすべてのアドレスが空けられる（又はそれらは予約済みのままになるが、そのキュー内の次の予約）。
【００５６】
サーバは、予約を検索し、続いてその予約に、それ自体をキャンセルするよう要求する。この動作が成功すれば、予約リストから予約を削除し、それを破棄する。
【００５７】
予約は、それ自体をキャンセルするために、その予約の一部であるすべての範囲をパースする。各範囲に関して、予約は、その状態を調べる。範囲の状態が「予約済み」であれば、他の予約がある場合には状態を「空き」に変更し、そうでない場合には、範囲を「予約済み」状態にさせ、この範囲は以降単に別の予約により予約される。範囲の状態が「使用中」であれば、その範囲の状態は変更しない。何れの場合でも、予約は、それ自体を範囲の予約キューから削除する。
【００５８】
美化用アルゴリズムの説明
このアルゴリズムは、例えば、クライアントが範囲のリストの帰属をリクエストする場合に、アドレスの範囲の所与のリストから、アドレスの範囲の新たな美化済みリストを構成する。範囲の美化済みリストは、すべての範囲が隣接しておらず、昇順にソートされた範囲のリストである。したがって、アルゴリズムは、あらゆる重複を削除し、任意の隣接する範囲、又は任意の重なり合う範囲をマージし、範囲を昇順にソートしなければならない。アルゴリズムは、以下の通りである。
【００５９】
−範囲の特定のリストを反復する。各範囲に対して、次を行う。
【００６０】
−範囲の美化済みリストが空であれば、その範囲を美化済みリストに挿入して、次の範囲を処理する。
【００６１】
−範囲の美化済みリストを反復する。各範囲に対して、次を行う。
【００６２】
−その範囲の最後のアドレスが、美化済みリストの範囲の第１のアドレスよりも小さければ、範囲の美化済みリスト内の現在の範囲より前に範囲を挿入して、美化済みリストの反復を止める。
【００６３】
−その範囲の最後のアドレスが、美化済みリストの範囲の第１のアドレスの直前のものであれば、美化済みリストの範囲の第１のアドレスをこの範囲の第１のアドレスに変更することによって範囲をマージし、美化済みリストの反復を止める。その範囲の第１のアドレスが、美化済みリストの範囲の第１のアドレスより大きいか、又は等しく、且つ美化済みリストの範囲の最後のアドレスより小さいか、又は等しければ、美化済みリストの範囲の最後のアドレスを、その範囲の最後のアドレスに変更することによって、重なり合う範囲をマージし、美化済みリストの反復を止める。
【００６４】
−美化済みリストの反復は完了したが、範囲が処理されていなければ、美化済みリストの終端に追加する。
【００６５】
図６は、美化アルゴリズムのステップのフローチャートである。図のように、本方法はステップ６０５にて開始し、その後６１０へ進み、そこで、アドレス予約メモリにおいて定義されている第１の範囲が、ｎを１にセットすることによって選択される。ｎは、現在選択されている範囲の番号である。これは、処理される第１の範囲であるため、美化済みリストは、この段階では必ず空である。したがって本方法は、ステップ６１５にて、第１の範囲をすぐに美化済みリストに追加する。本方法は、ステップ６４０へ進み、そこでｎがインクリメントされる。次に、本方法はステップ６４５にて、ｎが現在、アドレス予約メモリにおいて定義されている範囲の数を超えているかどうかを判断する。ｎが現在、アドレス予約メモリにおいて定義されている範囲の数を超えていれば、本方法はステップ６５０にて終了する。そうでなければ、本方法は、ステップ６５５へ進み、そこで、第ｎの範囲の最後のアドレスが、美化済みリストの範囲の第１のアドレスよりも小さいかどうかが判断される。第ｎの範囲の最後のアドレスが、美化済みリストの範囲の第１のアドレスよりも小さければ、本方法は、ステップ６６０へ進み、そこで、第ｎの範囲の最後のアドレスが、美化済みリストの範囲の第１のアドレスの直前のものであるかどうかが判断される。第ｎの範囲の最後のアドレスが、美化済みリストの範囲の第１のアドレスの直前のものであると判断されれば、本方法は、ステップ６６５へ進み、そこで、現在選択されている範囲が、範囲の美化済みリスト内の現在の範囲の前に挿入され、その後ステップ６４０に戻る。第ｎの範囲の最後のアドレスが、美化済みリストの範囲の第１のアドレスの直前のものではないと判断されれば、本方法はステップ６７０へ進み、そこで、美化済みリストの範囲の第１のアドレスを、現在選択されている範囲の第１のアドレスに変更することによって、美化済みリストにおいて定義されている範囲にその範囲がマージされる。一方、ステップ６５５にて、第ｎの範囲の最後のアドレスが、美化済みリストの範囲の第１のアドレスよりも小さくないと判断されれば、本方法は、ステップ６７５へ進み、そこで、第ｎの範囲の第１のアドレスが、美化済みリストの範囲の第１のアドレスよりも大きいか、又は等しいかが判断される。第ｎの範囲の第１のアドレスが、美化済みリストの範囲の第１のアドレスよりも大きいか、又は等しいと判断されれば、本方法はステップ６２０へ進み、そこで、現在選択されている範囲が美化済みリストに追加され、その後ステップ６４０へ戻る。
【００６６】
そうでなければ、本方法はステップ６８０へ進み、そこで、第ｎの範囲の第１のアドレスが、美化済みリストの範囲の最後のアドレスよりも小さいか、又は等しいかどうかが判断される。第ｎの範囲の第１のアドレスが、美化済みリストの範囲の最後のアドレスよりも小さいか、又は等しいと判断されれば、本方法は、ステップ６８５へ進み、そこで、美化済みリストの範囲の最後のアドレスを、範囲の最後のアドレスに変更することによって、重なり合う範囲がマージされ、その後ステップ６４０へ戻る。その他の場合、本方法はステップ６２０へ進む。
【００６７】
図７ａ、７ｂ、７ｃ及び７ｄ及び７ｅは、図６のアルゴリズムにより実行される動作の例を示す。
【００６８】
図７ａは、美化プロセスの第１の段階を示す。図のように、アドレス予約サーバからの、処理されるべき第１の範囲は、範囲７１０である。図６を参照して記載したように、第１の範囲は、美化済みリストに範囲７５０としてすぐに追加される。図７ｂは、美化プロセスの第２の段階を示す。アドレス予約サーバからの、処理されるべき次の範囲は、範囲７２０であり、これは、いくらか重複はしているが、範囲７１０よりも高いアドレスの範囲に位置する。したがって、ステップ６５５への応答は「いいえ」であり、ステップ６７５及び６８０への応答はそれぞれ「いいえ」及び「はい」であり、ステップ６８５に至り、それによって、新たな範囲７２０は範囲７５０にマージされ、新たな美化済みリストの範囲７５１を形成する。
【００６９】
図７ｃは、美化プロセスの第３の段階を示す。アドレス予約サーバからの、処理されるべき次の範囲は、範囲７３０であり、これは、範囲７５１よりも高いアドレスの範囲に位置し、重複はない。したがって、ステップ６５５への応答は「いいえ」であり、ステップ６７５への応答は「はい」であり、ステップ６６５に至り、したがって、新たな範囲７３０は、新たな美化済みリストの範囲７５２として追加される。
【００７０】
図７ｄは、美化プロセスの第４の段階を示す。アドレス予約サーバからの、処理されるべき次の範囲は、範囲７４０であり、これは、範囲７５１と、７５２との間のアドレスの範囲に位置し、重複はない。プロセスは、比較の第１の基準として範囲７５１を選ぶ。したがってステップ６５５への応答は「いいえ」であり、ステップ６７５への応答は「はい」であり、ステップ６６５に至り、したがって、新たな範囲７４０は、新たな美化済みリストの範囲として追加される。
【００７１】
比較の第１の基準として範囲７５２を選ぶことに進むと、ステップ６５５への応答は「はい」であり、ステップ６６０への応答は「はい」であり、ステップ６７０に至り、それによって新たな範囲７４０は、新たな美化済みリスト範囲７５３を形成するよう第２の７３０美化済みリスト範囲７５２にマージされる。
【００７２】
図７ｅは、美化プロセスの第５の段階を示す。上記のように、アルゴリズムは、昇順でソートされた範囲の新たな美化済みリストを構築したが、さらにマージ可能な２つの範囲７５１及び７５３がまだあるため、もう１つのパスが実行される。
【００７３】
−範囲の美化済みリストを反復する。第２のものから最後まで、各範囲に関して以下を行う。
【００７４】
−現在の範囲が前の範囲に隣接していれば、前の範囲の最後のアドレスを、現在の範囲の最後のアドレスに変更することによって、それらをマージする。続いて現在の範囲を削除する。ここで、単一の切れ目のない範囲７５４を備える、美化済みリストの準備ができる。
【００７５】
コンパクト化アルゴリズムの説明
このアルゴリズムは、サブ・ネットワークの範囲をコンパクト化する。
【００７６】
サブ・ネットワークの範囲を、第２のものから開始して反復し、以下の動作を行う。
【００７７】
前の範囲の最後のアドレス及び現在の範囲の第１のアドレスが隣接しており、この範囲が同じ状態であり、同じ予約リストを有すれば、前の範囲の最後のアドレスを現在の範囲の最後のアドレスに変更して現在の範囲を削除することによって、現在の範囲を前の範囲にマージする（図４参照）。
【００７８】
図８は、コンパクト化アルゴリズムの効果を示す。図のように、同じステータス（この場合は「空き」）を有する２つの範囲８１０、８２０がマージされて、もとの２つと同じステータスを有する新たな範囲８３０を形成する。
【００７９】
状態ファイルメカニズムの説明
アドレス・サーバは、起動すると、管理しなければならないアドレスのセットをファイルから読み取ることが好ましい。状態ファイルがアクティブ化されていれば、サーバは状態ファイルを探す。状態ファイルが存在すれば、その状態を復元するためにそれを読み取る。状態ファイルが存在していなければ、状態ファイルを作成して、その状態をそれに書き込む。続いて、サーバは、リクエストが処理されてその内部状態に何らかの変更が加えられるたびに、状態ファイルを絶えず更新する。
【００８０】
サーバの内部状態は、変動する数の範囲でできているため、既存の状態ファイルを修正することはできない。状態ファイルを維持する１つの手法は、サーバの内部状態が変更されるたびに状態ファイルを完全に書き換えることである。より好ましいのは、サーバがその状態を、状態ファイルに書き込むようになっており、それにセパレータが続くことである。その結果、変更がサーバの内部状態に加えられるたびに、サーバは、変更の記述を付加する。この方が速く、より単純である。サーバがその状態を状態ファイルから復元する必要があるときは、状態ファイルから初期状態を読み取り（セパレータまで）、続いてセパレータの後に記録されているすべての変更を読み取り、それらを再実装する。状態ファイルが大きくなりすぎることを避けるために、状態ファイルは、例えば１００の変更毎など、時々完全に書き換えられてもよい。
【００８１】
さらなる実施形態によれば、並列コンピューティング環境において、ネットワーク・アドレスを仮想マシンに帰属させるためのサーバが提供され、それによりサーバは、先頭アドレス、終端アドレス、及び範囲内のすべてのアドレスに等しく当てはまる１つ以上のステータス値の観点から定義された１つ以上の範囲として、ネットワーク・アドレスの利用可能な範囲を定義する。ステータス値は、「使用中」、「利用可能」、「予約済み」などであってもよい。仮想マシンが、範囲のセットをリクエストすると、サーバは、リクエストを満たすのに十分なアドレスを含む既存の範囲を選択し、それを新たな範囲に分割し、そのうちの１つが、リクエストされたアドレスの数を正確に含み、この範囲が、リクエスト側仮想マシンに帰属させられる。美化アルゴリズムが、範囲を定期的にパースし、同一のステータスを有する隣り合った範囲をマージする。
【００８２】
本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、又はハードウェア及びソフトウェア両方の構成要素を含む実施形態の形態をとることができる。好適な実施形態では、本発明はソフトウェアにおいて実装され、これは、限定はされないが、ファームウェア、常駐ソフトウェア、マイクロコードなどを含む。
【００８３】
さらに、本発明は、コンピュータ使用可能又はコンピュータ可読媒体からアクセス可能なコンピュータ・プログラム製品の形態をとり、コンピュータ又は任意の命令実行システムにより、又はそれに関連して使用されるプログラム・コードを提供することができる。本記載では、コンピュータ使用可能又はコンピュータ可読媒体は、命令実行システム、装置若しくはデバイスによって、又はそれに関連して使用されるプログラムを含むこと、記憶すること、伝達すること、伝播させること、又は搬送することができる任意の装置とすることができる。
【００８４】
媒体は、電子、磁気、光学、電磁気、赤外線、又は半導体システム、（若しくは装置若しくはデバイス）、又は伝播媒体とすることができる。コンピュータ可読媒体の例には、半導体又は固体メモリ、磁気テープ、リムーバブル・コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、剛体磁気ディスク、及び光ディスクが含まれる。光ディスクの現在の例には、コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｋ−ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）、コンパクト・ディスク読み取り／書き込み（ＣＤ−Ｒ／Ｗ：ｃｏｍｐａｃｔ  ｄｉｓｋ−ｒｅａｄ／ｗｒｉｔｅ）、及びＤＶＤが含まれる。
【００８５】
プログラム・コードの記憶若しくは実行又はその両方に適したデータ処理システムは、システム・バスを介してメモリ要素に直接又は間接的に結合された少なくとも１つのプロセッサを含む。
【００８６】
メモリ要素は、プログラム・コードを実際に実行する間に用いられるローカル・メモリ、大容量記憶装置、及び、実行中にコードが大容量記憶装置から読み出されなければならない回数を減らすために少なくとも一部のプログラム・コードの一時的な記憶装置となるキャッシュ・メモリを含むことができる。
【００８７】
入出力、すなわちＩ／Ｏ（ｉｎｐｕｔ／ｏｕｔｐｕｔ）デバイス（限定はされないが、キーボード、ディスプレイ、ポインティング・デバイスなどを含む）は、直接、又は介在するＩ／Ｏコントローラを介して、システムに結合されることが可能である。
【００８８】
ネットワーク・アダプタもシステムに結合されて、データ処理システムが、他のデータ処理システム又はリモート・プリンタ又は記憶デバイスに、介在するプライベート又はパブリック・ネットワークを介して結合された状態となることを可能にしてもよい。モデム、ケーブル・モデム、及びイーサネット・カードが、現在利用可能なタイプのネットワーク・アダプタのごく一部である。
【図１】
0005528557.tif 000002
【図２】
0005528557.tif 000003
【図３】
0005528557.tif 000004
【図４】
0005528557.tif 000005
【図５】
0005528557.tif 000006
【図６】
0005528557.tif 000007
【図７】
0005528557.tif 000008
【図８】
0005528557.tif 000009