(57)【特許請求の範囲】
【請求項１】
コンピュータ上のリソースの第１の名前空間および前記コンピュータ上のリソースの第２の名前空間を使用して前記コンピュータ上のリソースへのアクセスを提供するための方法であって、前記名前空間の前記リソースは順序付けされており、１つまたは複数の名前は双方の名前空間で共通しており、前記１つまたは複数の名前は、それぞれ異なる各々のリソースインスタンスを参照しており、第１の名前空間は第２の名前空間が有する優先度よりも高い優先度を有し、前記方法は、
アプリケーションによるリソースの要求を受け取ることと、
前記受け取ることに応答して、第１の名前空間と第２の名前空間を動的にマージして論理名前空間を形成することであって、前記動的にマージすることは、第１の名前空間についての現在の候補および第２の名前空間についての第２の候補が候補リストにおいて共通するときに、第１の名前空間についての現在の候補を前記論理名前空間のために選択し、第２の名前空間についての第２の候補を前記候補リストから取り除くことを含む、ことと、
前記論理名前空間を使用して前記リソースを取得することと
を含む方法。
【請求項２】
前記動的にマージすることは、
第１の名前空間についての現在の候補および第２の名前空間についての第２の候補を探し出し、前記候補から前記論理名前空間のための名前を選択することを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記論理名前空間のための前記名前は、現在の候補の相対順序に基づいて選択されることを特徴とする請求項２に記載の方法。
【請求項４】
第１の現在の候補が前記論理名前空間のための名前として選択されている場合、第１の現在の候補を第１の名前空間内の次の名前に合わせることをさらに含むことを特徴とする請求項３に記載の方法。
【請求項５】
第２の現在の候補が、前記論理名前空間のための名前として選択されている第１の現在の候補と同じである場合、第２の現在の候補を第２の名前空間内の次の名前に合わせることをさらに含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記リソースは、第１の名前空間及び第２の名前空間を論理的に動的にマージすることが完了する前に前記論理名前空間から取得されることを特徴とする請求項１に記載の方法。
【請求項７】
前記名前空間は、前記現在の候補が同じである場合、高い優先度の現在の候補が選択されるように優先度によって順位付けられていることを特徴とする請求項１に記載の方法。
【請求項８】
コンピュータ上のリソースへの仮想化されたアクセスをアプリケーションに提供する方法であって、前記リソースは第１の名前空間および第２の名前空間内で名付けられ、前記第１の名前空間は、第１のリソース名リストを備え、前記第２の名前空間は、第２のリソース名リストを備え、それぞれの名前空間は、前記コンピュータ上のリソースのそれぞれ異なるセットに対応し、前記リソースの一部は、それぞれ異なるセット内にあるが、双方の名前空間内で同じ名前で名付けられており、第１の名前空間は、第２の名前空間が有する優先度よりも高い優先度を有し、前記方法は、
前記アプリケーションが第１の名前のリソースを要求し、それに応答して、第１の名前空間および第２の名前空間にアクセスすることによって、第１の名前空間で名付けられたリソースのセットからの前記リソースを取得することであって、第１の名前空間で名付けされたリソースおよび第２の名前空間で名付けされたリソースの名前が共通するときに、前記アプリケーションによる第１の名前のリソースの前記要求に応答して、前記第１の名前空間で名付けられたリソースのセットからの前記リソースを取得し、取得したリソースへの仮想化されたアクセスが前記アプリケーションに提供される、ことと、
前記アプリケーションが第２の名前のリソースを要求し、それに応答して、第１の名前空間および第２の名前空間にアクセスすることによって、第２の名前空間で名付けられたリソースのセットからの前記リソースを取得することであって、第１の名前空間で名付けされたリソースのセットが第２の名前のリソースを含まず且つ第２の名前空間で名付けされたリソースのセットが第２の名前のリソースを含むときに、前記アプリケーションによる第２の名前のリソースの前記要求に応答して、前記第２の名前空間で名付けられたリソースのセットからの第２の名前のリソースを取得し、取得したリソースへの仮想化されたアクセスが前記アプリケーションに提供される、ことと
を含む方法。
【請求項９】
第１の名前空間の名前は順序付けられ、第２の名前空間の名前は順序付けられ、第１の名前のリソースが、第２の名前空間内の同じ名前に対する相対的な前記第１の名前空間内のその名前の順序に基づいて取得されることを特徴とする請求項８に記載の方法。
【請求項１０】
第１の名前空間の名前は順序付けられ、第２の名前空間の名前は順序付けられ、前記取得は、
名前による後続のリソースの要求により、前記名前空間から名前が昇順に返されるように前記名前空間を動的にマージすることを含むことを特徴とする請求項８に記載の方法。
【請求項１１】
第１の名前空間の名前は順序付けられ、第２の名前空間の名前は順序付けられ、前記第１および第２のリソースは、第１および第２の名前空間を先へ移動する候補ウィンドウからそれらの名前を選択することによって取得され、前記第１および第２のリソースの前記名前は前記ウィンドウ内にあり、前記第２の名前の前記リソースが、前記第１のリソースの名前に対して低い順序を有する前記第２のリソースの名前に基づいて前記第１の名前の前記リソースの前に取得されることを特徴とする請求項８に記載の方法。
【請求項１２】
名前空間の相対優先度に基づいて、ある名前空間の名前が、別の名前空間の同じ名前よりも優先されることを特徴とする請求項８に記載の方法。
【請求項１３】
前記第１の名前空間内で名前が論理的に削除されるとき、前記第１の名前空間の対応するリソースと前記第２の名前空間の対応するリソースの両方は、前記アプリケーションから使用できなくなることを特徴とする請求項８に記載の方法。
【請求項１４】
前記要求および前記取得は、前記名前空間の双方の内の名前から順序付けられたリソース名リストが取得されるように繰り返し実施されることを特徴とする請求項８に記載の方法。
【請求項１５】
アプリケーションによって必要とされるリソースにアクセスする方法であって、前記アプリケーションは、名前の昇順（または降順）で複数のリソースにアクセスし、前記リソースは潜在的に、コンピュータ上の複数のリソースのコンテナのいずれか１つから生じることができ、前記コンテナは、互いに対して異なるおよび／または変化する優先度を有しており、前記方法は、
それぞれのコンテナについて、リソースの対応する名前リストを昇順（または降順）に提供することと、
論理マージ内の新しい名前が必要なとき、前記名前が順序付けられたリストから動的に選ばれるように、前記順序付けられた名前リストの前記論理マージ内の名前を列挙することによって、前記アプリケーションによって必要とされる前記リソースにアクセスすることであって、前記名前が順序付けられたリストから動的に選ばれる際に、前記順序付けられたリスト内の名前が論理的削除済みとマーク付けされている場合、順序付けられた別のリスト内の同じ名前を論理的削除済みとして扱い、前記順序付けられたリストの前記論理マージから前記名前を省かせる、ことと
を含む方法。
【請求項１６】
前記名前が順序付けられたリストから動的に選ばれる際に、
以前に選ばれていない同じ名前が、順序付けられた２つのリストに現れる場合、高い優先度の対応する前記コンテナを有する前記リストから前記名前を選ぶことを含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記論理マージ内の新しい名前は、前記順序付けられたリスト内の以前に選ばれていない名前のうちから順番に選ばれることを特徴とする請求項１５に記載の方法。
【請求項１８】
前記名前が順序付けられたリストから動的に選ばれる際に、
順序付けられた２つのリスト内に以前選ばれていない名前がある場合、前記論理マージ内の前記新しい名前に最も低い名前を選ぶことを含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記リソースは、前記順序付けられたリストの前記論理マージが不完全なときにアクセスされることを特徴とする請求項１５に記載の方法。
【請求項２０】
コンピュータ上のリソースの第１の名前空間および前記コンピュータ上のリソースの第２の名前空間を使用して前記コンピュータ上のリソースへのアクセスを提供するための方法であって、前記名前空間の前記リソースは順序付けされており、１つまたは複数の名前は双方の名前空間で共通しており、前記１つまたは複数の名前は、それぞれ異なる各々のリソースインスタンスを参照しており、前記方法は、
アプリケーションによるリソースの要求を受け取ることと、
前記受け取ることに応答して、第１の名前空間と第２の名前空間を動的にマージして論理名前空間を形成することと、
前記論理名前空間を使用して前記リソースを取得することと
を含み、第１の名前空間は、第２の名前空間が有する優先度よりも高い優先度を有し、
前記動的にマージすることは、第１の名前空間についての現在の候補および第２の名前空間についての第２の候補の名前が候補リストにおいて共通し且つ第１の名前空間内で現在の候補が論理的に削除されるときに、第１の名前空間についての現在の候補および第２の名前空間についての第２の候補の名前を前記候補リストから取り除くことを含む、方法。
【請求項２１】
第１の名前空間および第２の名前空間によりリソースが共通の第２の名前で名付けされ且つ第１の名前空間内で第２の名前のリソースが論理的に削除されるときに、前記アプリケーションによる第２の名前のリソースの前記要求に応答して、第１の名前空間で名付けられたリソースのセットおよび第２の名前空間で名付けられたリソースのセットから第２の名前のリソースが取得されない、請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、名前空間のマージに関する。
【背景技術】
【０００２】
コンピュータアプリケーションは一般に、オペレーティングシステムを介してコンピュータまたはシステムリソースにアクセスする。リソースは、ファイル、ライブラリ、システムサービス（たとえばカット＆ペースト、プリンタ）、レジストリまたは構成情報、その他であり得る。仮想化環境またはコンポーネントは、アプリケーションによるシステムリソースへのアクセスを仮想化し、アプリケーションがあたかも直接オペレーティングシステムを相手にしているかのように、アプリケーションによるシステムリソースへのアクセスを透過的に処理する。
【０００３】
仮想化環境は、複数のシステムリソースのセットへのアクセスを管理することができ、それらのリソースの一部は重複しまたは競合し得る。ネイティブオペレーティングシステムは、「／ｓｏｍｅｐａｔｈ／ｓｏｍｅＦｉｌｅＮａｍｅ」などのファイル名を有するファイルを含めて、１組のファイルリソースを有し得る。アプリケーション仮想化パッケージ（または１組のシャドウリソース）は、同じファイル名、たとえば「／ｐａｔｈ／ｓｏｍｅＦｉｌｅＮａｍｅ」を使用する異なるファイルインスタンスを有し得る。仮想化環境は、アプリケーションによる「／ｐａｔｈ／ｓｏｍｅＦｉｌｅＮａｍｅ」へのアクセスを、アプリケーションに透過的なやり方で管理する。アプリケーションは、「／ｐａｔｈ／ｓｏｍｅＦｉｌｅＮａｍｅ」に書き込むことがあり、仮想化環境は、ファイル「／ｐａｔｈ／ｓｏｍｅＦｉｌｅＮａｍｅ」のどのインスタンスがネイティブオペレーティングシステムファイルまたは仮想化パッケージファイルに書き込まれるか決定する。
【０００４】
リソースへのアクセスの管理に関連する技術について、以下に論じられる。
【発明の概要】
【０００５】
以下の要約は、下記の発明を実施するための形態において論じられるいくつかの概念について述べるためだけに含まれている。この要約は、包括的なものではなく、また最後に提示される特許請求の範囲によって示される特許請求された主題の範囲を定めるためのものではない。
【０００６】
アプリケーションは、第１の名前空間および第２の名前空間内で名付けられた、コンピュータ上のリソースへの仮想化されたアクセスを有する。第１の名前空間は、リソース名の第１のリストを備え、第２の名前空間は、リソース名の第２のリストを備える。それぞれの名前空間は、コンピュータ上のリソースの異なるセットに対応し、このコンピュータ上のリソースの一部は、それぞれ異なるセット内にあるが、両方の名前空間内で名付けられている。すなわち、偶然同じ名前を有するそれぞれ異なるリソースが、それぞれの名前空間内に存在することがある。アプリケーションは、第１の名前のリソースを要求し、それに応答して、第１の名前空間および第２の名前空間にアクセスすることによって、第１の名前空間で名付けられたリソースのセットからリソースが取得される。アプリケーションは第２の名前のリソースを要求し、それに応答して、第１の名前空間および第２の名前空間にアクセスすることによって、リソースが第２の名前空間で名付けられたリソースのセットから取得される。
【０００７】
付随する特徴の多くは、添付の図面に関連して考慮された下記の詳細な説明を参照して以下に説明される。
【０００８】
この説明は、添付の図面を考慮して読まれる下記の詳細な説明からよりよく理解される。図面では、付随する説明における同様の部分を指定するために、同じ参照符号が用いられている。
【図面の簡単な説明】
【０００９】
【図１】コンピュータ上の仮想化環境を示す図である。
【図２】重複するリソースの複数のセットへのアクセスを管理する仮想化層を示す図である。
【図３】リソース名前空間を１回限りマージする技術を示す図である。
【図４】リソース名前空間を動的にマージする技術を示す図である。
【図５】論理リソース名前空間を列挙するときの操作シーケンスを示す図である。
【図６】動的な論理名前空間マージのプロセスを示す図である。
【図７】完了時、リソース名前空間から動的に生成されている論理リソース名前空間を示す図である。
【図８】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図９】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図１０】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図１１】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図１２】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図１３】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図１４】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図１５】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図１６】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図１７】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【図１８】図７に示された論理リソース名前空間をもたらす動的マージアルゴリズムの操作シーケンスを示す図である。
【発明を実施するための形態】
【００１０】
概要
以下に論じられた実施形態は、コンピュータシステム上のリソースへの仮想アクセスの管理に関する。まず、仮想環境について論じられる。次いで、リソース名前空間の静的マージの技術について説明される。次いで、静的マージとは対照的に、リソース名前空間の動的マージについて述べられ、また、動的マージの様々な方法が説明される。そして、例示的な問題を、動的マージのための諸実施形態のうちの１つによってそれが処理されるところで順を追って確認してゆく（ｗａｌｋ  ｔｈｒｏｕｇｈ）。
【００１１】
仮想環境
図１は、コンピュータ１０２上の仮想化環境１００を示している。コンピュータ１０２上で実行されるアプリケーション１０４は、仮想化環境１００を介して様々なシステムリソース１０６、１０８および１１０にアクセスする。仮想化環境１００は、アプリケーション１０４によるシステムリソース１０６、１０８、１１０へのアクセスを管理する。システムリソース１０６、１０８および１１０は、コンピュータ上で使用可能な任意のタイプのリソースであり得る。たとえば、システムリソース１０６は、システムファイル、レジストリまたはデータベースエントリ、初期化または設定ファイル、動的にロードされたライブラリなどであり得る。システムリソース１０８は、オブジェクト通信サービス、印刷サービス、カット＆ペーストサービスなどのシステムサービスであり得る。システムリソース１１０は、プロファイルデータ、ＴＣＰ／ＩＰアドレスおよび／またはポート、ミューテック、セマフォ、名前付きパイプ、ＣＯＭオブジェクト、フォントであり得る。
【００１２】
システムリソース１０６、１０８および１１０は、コンピュータ１０２上のそれぞれ異なる可視性の範囲を有し得る。一部のリソース１０６、１０８、１１０は、コンピュータ１０２上のすべてのアプリケーションから見えるグローバルなネイティブリソースであり得る。一部のシステムリソース１０６、１０８および１１０は、アプリケーション１０４だけから見える、またはアクセス可能なローカルリソースであり得る。たとえば、アプリケーション仮想化パッケージは、ファイル、レジストリエントリ、構成設定、またはアプリケーション１０４だけが使用する他のリソースのインスタンスを含み得る。仮想化環境１００を使用している特定のユーザまたはアプリケーションだけに使用可能な他の半ローカル（semi-local）のリソースもあり得る。特に、これらのローカルまたは半ローカルリソースのうちのいずれかが、同じ名前を有する対応するネイティブリソースインスタンス（すなわちコンピュータ１０２上のグローバルリソース）を有し得る。すなわち、背景技術において示唆されたように、リソース名について考慮すると、その名前を有するグローバルリソースのインスタンス、その名前を有するローカルリソースのインスタンス、および／または同じ名前を有する半ローカルリソースのインスタンスがあり得る。重複するこうしたリソースをマージし、それにアクセスする技術について、以下で詳細に論じられる。
【００１３】
仮想化環境１００によって、リソース１０６、１０８、１１０は、１つの仮想リソースセット１１２として現れるようになる。アプリケーション１０４が、あたかもシステムリソース１０６、１０８および１１０に直接アクセスするかのように読出しおよび／または書込み操作を実施し得る間、仮想化環境１００は、それらの操作の間に介在する。一般に、アプリケーション１０４は、コンピュータ１０２上に仮想化環境１００が存在しない場合の動作と異なる動作をしない。しかし、以下に論じられた、（システムリソース１０６、１０８および１１０などの）リソースの名前空間をマージするための実施形態は、仮想化環境の存在下でアプリケーションがその振舞いを変更するかどうかに関係なく適用することができる。
【００１４】
図２は、重複する複数のリソースセット１５２と１５４および１５６へのアクセスを管理する仮想化層１５０を示している。アプリケーション１５８は、仮想化環境１５０を介してリソース１５２、１５４および１５６に透過的にアクセスする。リソースセット１５２、１５４および１５６は、それぞれ異なる優先順位（precedence）および目的を有する。ユーザセット１５２は、アプリケーション１５８だけを範囲としており、パッケージセット１５４は、仮想化層１５０下で同じユーザによって実行されているアプリケーションを範囲とし、グローバルセット１５６はグローバル範囲を有しており、ホストコンピュータ上のどんなアプリケーションまたはユーザ識別も、リソースセット１５６に潜在的にアクセスすることができる。他のタイプのリソースが使用されてもよい。別の実施形態では、セット１５２は、仮想環境内で実行されるすべてのアプリケーション用とすることができ、セット１５４は、アプリケーションを実行しているすべてのユーザにわたるすべての仮想環境用とすることができる。リソースセット１５２、１５４および１５６はタイプ別にカテゴリ１６０、１６２および１６４に分けて示されているが、これは、必要ではなく、特定のコンピューティングプラットフォーム上でリソースがどのようにアクセスされるかに依存し得る。一実施形態では、リソースセット１５２、１５４または１５６は、同じ範囲を有するすべてのタイプのリソース、たとえばグローバルファイル、レジストリエントリ、ネットワーク接続、またはローカルファイルおよびシステムサービスなどを含むコンテナである。
【００１５】
リソースセット１５２、１５４および１５６は、上記に論じられたように、あるリソースセットが、別のセット内の別のリソースインスタンスと同じ名前を有するリソースインスタンスを有し得るという点で重複し得る。図２の例では、リソースのインスタンス「ｃ：＼ｄｉｒ＼ｆｉｌｅ１」は、リソースセットのそれぞれに存在する。これらのインスタンスは、それぞれ異なるコンテンツ、異なるサイズなどを有する。「ｃ：＼ｄｉｒ１＼ｆｉｌｅ４」などの別のリソースは、グローバルリソースセット１５６内だけにある。仮想化層１５０は、「ｃ：＼ｄｉｒ１＼ｆｉｌｅ２」という名前のファイルを開くことを求める、アプリケーション１５８の要求を処理する。恐らくユーザリソースのセット１５２に優先権を与える仮想化層１５０は、使用リソース１５２内の「ｃ：＼ｄｉｒ１＼ｆｉｌｅ２」のインスタンスを開き、対応するファイルハンドルまたはファイルオブジェクトをアプリケーション１５８に返し、したがってアプリケーション１５８に、ユーザリソースセット１５２内のインスタンスを使用させ得る。アプリケーションが「ｃ：＼ｄｉｒ１＼ｆｉｌｅ４」という名前のファイルにアクセスするとき、リソースは、リソースセット１５４、すなわちそのリソースを有する唯一のセットから取得される。
【００１６】
リソース名前空間のマージ
図３は、リソース名前空間１８０、１８２および１８４を１回限りマージ（one-time merging）する技術を示している。リソース名前空間１８０、１８２および１８４内の文字は、一部の任意リソースインスタンスの名前を表しており、それぞれ異なるリソース名前空間内の同じ文字は、同じ名前が付けられたリソースのそれぞれ異なるインスタンス（それぞれ異なるコンテンツを有するそれぞれ異なるインスタンス）を表す。リソース１８０、１８２および１８４への一貫性のある論理的なアクセスを提供するために、リソースはマージされて１８５、マージされたリソース名前空間１８８が作成される。このマージ１８５は、アプリケーション１８６がリソース名前空間１８０、１８２および１８４内の様々なリソースにアクセスする前に実施される。必要とするリソースの名前のリストを有するアプリケーション１８８は、リストを調べ始め、リソースＡ、リソースＢ、リソースＧなどを要求する。アプリケーション１８８は、リソース、たとえばリソースＡを必要とするとき、完全にマージされた名前空間１８６からリソースを取得する。マージされた名前空間は、名前またはリソースを含むものとして論じられ得るが、実際には、こうしたマージは、（アプリケーションによって見られる名前以外の）名前、一意の識別子、参照など、グローバルに明白な何らかの情報を含む。リソースが、名前空間から取得されるものとして述べられる場合、これは、リソースへのアクセスを可能にするいずれかの情報、たとえばポインタ、一意の識別子またはアドレス、オブジェクトなどにアクセスするためのデータ構造体またはオブジェクトなどを取得することを含む。
【００１７】
図３の静的マージ手法に関する複数の問題がある。たとえば、１度限りのマージ１８５の後にベースであったリソース名前空間１８０、１８２および１８４のうちの１つの構成が変化する場合、マージされたリソース名前空間１８８は不正確になり、アプリケーション１８８に不正確なリソースを供給することがあり、あるいはリソース名前空間１８０、１８２および１８４は、再びマージされる必要がある。また、名前空間が前もってマージされる場合、パフォーマンスの犠牲を伴うことになる。
【００１８】
動的なリソース名前空間マージ
図４は、リソース名前空間を動的にマージする技術を示している。この手法では、アプリケーションは、２つ以上の構成（constituent）リソース名前空間、たとえばローカルリソース名前空間、グローバルリソース名前空間から、必要に応じてリソースを取得する。リソースが必要であると判断された場合２００、構成リソース名前空間を動的にマージすることによって論理名前空間が提供される２０２。論理名前空間は、集合（名前の集合）を完全に列挙するメソッドを有するオブジェクトインターフェースを介してアクセスすることができる。論理名前空間は、その一部が必要とされるときに、（構成リソース名前空間の動的マージによって）生成される。したがって、アプリケーションから見て論理名前空間が正確な名前空間のようになる。アプリケーションが、リソースＡなどのリソースを必要とする場合２０４、動的マージの論理は、リソースＡを有する構成リソース名前空間を見つけることによってそれを取得し２０６、アプリケーションにそれを返す。リソースＡは、ローカル名前空間など、構成名前空間のうちのいずれかから生じ得る。アプリケーションが、リソースＢなどの別のリソースを必要とする場合２０８、動的マージ論理は、構成名前空間を見て、どの名前空間がリソースＢを提供するか決定し、このリソースＢは、構成名前空間から取得され２１０、アプリケーションに返される。リソースＢは、グローバル名前空間など、構成リソース名前空間のうちのいずれかから生じ得る。両方の名前空間は、Ａという名前のそれぞれ異なるリソースのインスタンスを有することがあり、また両方が、Ｂという名前のそれぞれ異なるリソースのインスタンスを有し得る。
【００１９】
図５は、論理リソース名前空間２２０を列挙するときの操作シーケンスを示している。アプリケーション２２２は、Ａという名前のリソースを必要とする場合２２４、たとえば、ｅｎｕｍｅｒａｔｅ（）、ｎｅｘｔ（）、ｎｏｎｅｍｐｔｙ（）、ｆｉｒｓｔ（）など、列挙インターフェースのメソッドを使用して、論理名前空間２２０からのリソースを要求する。動的マージコンポーネント２２６は、ベースリソース名前空間２２８、２３０および２３２内のマージされていないリソース名（unmerged names of resources）を見る。動的マージコンポーネント２２６は、ベースリソース名前空間２２８、２３０および２３２を調べ、ベースリソース名前空間２２８からのリソースＡを返し、このリソースＡは、論理リソース名前空間２２０内の第１のリソースとしてアプリケーション２２２に返される。アプリケーション２２２がリソースＢを必要とする場合２３４、同様のプロセスが行われ、動的マージコンポーネント２２６は、ベースリソース名前空間２２８、２３０および２３２内のリソースのマージされていない名前を見て、リソースＢが、ベースリソース名前空間２２８および２３０内で得られるが、ベースリソース名前空間２８０から生じるべきであると決定する。ベースリソース名前空間２２８からのリソースＢが、アプリケーションに返される。リソースＧが必要な場合、それがベースリソース名前空間２３０から返される、以下同様である。
【００２０】
図６は、動的論理リソース名前空間マージのプロセスを示している。言及されたように、集合（名前空間内のリソースの集合など）の列挙は、以前にアクセスされていない集合のメンバが、すべてのメンバがアクセスされるまで（好ましくは何らかの論理順序で）連続的にアクセスされるように、集合のメンバにアクセスすることを伴う。図６のプロセスで、アプリケーションまたは他の何らかのプログラムは、論理リソース名前空間の列挙を開始する２５０。候補リストは、各候補リソース名前空間からの次の未使用の（マージされていない）名前が取り込まれ（populated）、またはそれで埋められる（filled）２５２。論理リソース名前空間の次々出てくる（rolling）次の名前が、候補リストから返され２５４、空きスロットに増分される。候補リストは、たとえば、返された２５４候補の名前を候補リストから取り除くことによって最新の情報に更新される２５６。図６のプロセスが繰り返される間、空の候補リストエントリは、それぞれの候補リソース名前空間からの次の未使用の名で再び埋められる。論理名前空間内の次の名前は、候補リストを介して、様々な候補リソース名前空間のうちの１つから連続的に来る。
【００２１】
一部の実施形態から理解されるように、重複する候補リソース名前空間からのリソースは、アプリケーションによる求めに応じて、それらの名前空間から次々（in a rolling fashion）返される。様々な任意のリソースが必要とされる場合、基になる名前空間（underlying namespaces）を使用して、列挙なしに名前を直接検索することができ、その場合、検索は、各名前空間で実施され、第１のヒットが返される。動的なマージでは、候補リソース名前空間のうちの１つが変化する場合、その変化は、アプリケーションに対して明確なものとなる。さらに、アプリケーションが名前順に（たとえばアルファベットの昇順に）リソースを要求する場合、および候補リソース名前空間がそれに応じて事前にソートされる場合、アプリケーションは、完全なマージを完了する必要がないので、要求されるときに迅速にリソースを取得することができる。これは、図７〜１８について論じられるとき、より明らかになる。
【００２２】
図７は、例示的なリソース名前空間２８２、２８４および２８６から動的に生成され完了した時の論理リソース名前空間２８８を示している。図８〜１８は、リソース名前空間２８２、２８４および２８６に適用されるとき、図７に示された論理リソース名前空間２８８をもたらす、動的マージアルゴリズム２８０のマージ操作のシーケンスを示している。例示的なリソース名前空間２８２、２８４および２８６は、それぞれ異なる範囲および優先順位を有するリソース名前空間である。この実施例では、リソース名前空間２８２、２８４および２８６のうち、リソース名前空間２８２は、最も高い優先順位を有しており、リソース名前空間２８６は、最も低い優先順位を有している。一実施形態では、リソース名前空間２８２、２８４および２８６の優先順位は、名前によって異なることがある。換言すると、ある名前ではリソース名前空間２８２が最も高い優先順位を有することがあるが、別の名前では、リソース名前空間２８４が、より高い優先順位を有することがある。図８に空の初期論理名前空間２８８は示されており、完了時の論理名前空間２８８は、図１８（ならびに図７）に示されている。
【００２３】
図８に示されるように、何らかのソフトウェアが論理名前空間２８８を列挙し始めるときに恐らく要求されるように、最初、次の名前が、論理名前空間２８８から求められる。ソフトウェアは、仮想化環境または他の何らかの仮想化または疑似仮想化されたソフトウェアで実行されるアプリケーションであり得る。次いで、候補リスト２９０内の空きスロットは、各々の候補名前空間からの次の名前；名前空間２８２からのＡ、名前空間２８４からのＢおよび名前空間２８６からのＯで埋められる２８０．１。これらのリソースは、候補名前空間２８２、２８４および２８６内の「×」によって表されるように、各々の名前空間内で使用されたものとしてマークされる。図９で、候補リスト２９０内で最も小さいエントリ、Ａが検索され２８０．２、その名前を有する候補リスト２９０内のすべてのエントリ（名前空間２８２からのＡ）が削除され２８０．３、検索された２８０．２エントリ、Ａが、論理名前空間２８８の列挙の次の名前として返される２８０．５。
【００２４】
図１０で、論理名前空間２８８から次の名前が求められる場合、プロセス２８０が繰り返される。リソース名前空間２８２の空の候補は、その中の次のリソース、Ｂ２８２で埋められる。Ｂ２８２は、リソース名前空間２８２に使用されたものとしてマークされる。図１１で、候補リスト２９０内の最も小さいエントリ、Ｂが検索される２８０．２。２８０．２．ｂは、名前空間２８２と２８４の両方に存在する最小のリソース名である（候補リスト２９０内に２つの「Ｂ」のエントリがある）ので、候補リスト内の最も早いエントリ（最優先のリソース名前空間からのもの）が選択される。その名前を有する候補リスト２９０内のすべてのエントリ（名前空間２８２からのＢ２８２、および名前空間２８４からのおよびＢ２８４）が取り除かれる２８０．３。検索された２８０．２エントリ、Ｂ２８２が、論理名前空間２８８内の次の名前として返される２８０．５。
【００２５】
図１２で、論理名前空間２８８から次の名前が求められる場合、プロセス２８０が繰り返される。リソース名前空間２８２の空の候補は、その中の次のリソース、Ｉ（削除済み）で埋められ、Ｉは、リソース名前空間２８２内で、論理的に削除済みであるとマークされる。リソース名前空間２８４の空の候補は、その中の次のリソース、Ｇで埋められる。これらの両方が、対応するリソース名前空間２８２および２８４内で使用されたものとしてマークされる。図１３で、候補リスト２９０内で最も小さいエントリ、Ｇが検索され２８０．２、候補リスト２９０から取り除かれ２８０．３、論理名前空間２８８内の次の名前として返される２８０．５。
【００２６】
図１４で、論理名前空間２８８から次の名前が求められる場合、プロセス２８０が繰り返される。リソース名前空間２８４の空の候補は、その中の次のリソース、Ｉで埋められる。このエントリは、リソース名前空間２８４内で使用されたものとしてマークされる。図１５で、候補リスト２９０内の最小のエントリ、Ｉ（削除済み）が検索される２８０．２。すべてのＩのエントリが、候補リスト２９０から取り除かれる２８０．３。しかし、論理的に削除済みとしてマークされるＩエントリ（リソース名前空間２８２からのエントリ）があるので、Ｉを返す２８０．５のではなく、プロセス２８０が繰り返され、Ｉは、論理名前空間２８８のメンバとして返されない（名前が別の名前空間ではなく、ある名前空間内で論理的に削除済みとマークされている場合、より高い優先順位の名前空間からの名前が、削除を行うべきかどうか制御することに留意されたい）。図１６で、Ｉエントリによって空にされた候補リスト２９０スロットは、リソース名前空間からの名前；リソース名前空間２８２からのＬ、およびリソース名前空間２８４からのＫで埋められる２８０．１。図１７で、最小の候補リソース、Ｋが検索され２８０．２、候補リスト２９０から取り除かれ２８０．３、論理名前空間２８８内の次のエントリとして返される２８０．５。図１８は、プロセス２８０をさらに数回繰り返した後の完了した論理名前空間２８８を示している。
【００２７】
論理名前空間のエントリまたは要素は、様々な形をとることができる。好ましくは、エントリは、アプリケーションがそれを使用して、対応する正確なリソース名前空間からのリソースにアクセスすることを可能にするのに十分な情報を有する。エントリは単に、リソース名、またはリソース名への参照、およびそれがどのリソース名前空間に属するかの表示を有し得る。たとえば、エントリは、ファイルの名前を示す情報、およびファイルが特定のリソース名前空間内にあることを示す情報を含み得る。名前空間の識別子が含まれ得る。エントリは、リソースオブジェクト、またはそれへの参照を含み得る。こうしたエントリは、動的マージの間、リソースが論理名前空間に追加されるべき場合に生成され得る。リソース名は、対応するベースリソース名前空間内のリソースを開くために使用される。リソースが開くことからオブジェクト、参照、ファイルハンドルなどが返され、論理名前空間に追加される。
【００２８】
上記のパラグラフで論じられた論理的削除は、リソース名前空間の間の整合性を保証するのに有用であり得る。アプリケーションは、リソースを削除する必要がある場合、あるリソース名前空間からのリソースを、他の名前空間からリソースを削除する必要なしに論理的に削除することができる。削除は、論理的マージによって達成される。論理名前空間が生成されるとき、論理的に削除されたリソースの名前を有するリソースは、論理名前空間内に含まれない。有用ではあるが、論理的削除は必要ない。
【００２９】
上記に論じられた実施形態によれば、論理リソース名前空間は、アプリケーションが論理名前空間のメンバを列挙すべきとき、アプリケーションによって有効に使用され得る。すなわち、アプリケーションが１組のリソースにアクセスする必要があり、アクセスされるリソースの名前が順序付けられる場合、リソースは、候補名前空間から効率的に取得することができる。図７の例を参照すると、アプリケーションがＡ、Ｂ、Ｇ、Ｋ、ＬおよびＯにその順序でアクセスするとき、リソース（または名前／名前への参照）は、計算上のオーバーヘッドをほとんど伴わずにリソース名前空間２８２、２８４および２８６から取得することができる。同時に、競合するリソースは、高い優先度のリソースが、同じ名前の低い優先度のリソースよりも使用されるように、一貫したやり方で解決することができる。しかし、低い優先度の名前空間からのリソースが、高い優先度の名前空間内でそのリソースが検索されない場合には依然として使用され得る。
【００３０】
結論
上記に論じられた名前空間マージの諸技術は、それだけに限らないが、仮想化の設定に有用である。諸技術は、名前空間の重複を有するそれぞれ異なるリソースセットが必要なときに使用されてもよい。諸技術の一部は、リソース名前空間が順序付けられるときに効率的に働くが、これは必須ではない。同様に、論理名前空間は、順番に、たとえばアルファベット順に列挙される場合に効率的に使用され得る。しかし、これは必須ではなく、また、論理名前空間内の要素もランダムにアクセスすることができる。
【００３１】
上記に論じられた実施形態および特徴は、揮発性または不揮発性コンピュータまたは装置読取り可能媒体内に格納された情報の形で実現することができる。これは、光学記憶装置（たとえばＣＤ−ＲＯＭ）、磁気媒体、フラッシュＲＯＭ、またはデジタル情報を格納する現在または将来の任意の手段など、少なくとも媒体を含むと見なされる。格納された情報は、マシン実行可能命令（たとえばコンパイルされた実行可能なバイナリコード）、ソースコード、バイトコード、あるいはコンピューティング装置が上記に論じられた様々な実施形態を実施することを可能にし、またはコンピューティング装置をそのように構成するために使用され得る他の任意の情報の形であり得る。これは、少なくともＲＡＭなどの揮発性メモリ、および／または実施形態を実施するプログラムの実行時にＣＰＵ命令などの情報を格納する仮想メモリ、ならびにプログラムまたは実行可能物をロードし実行することを可能にする情報を格納する不揮発性媒体を含むとも見なされる。諸実施形態および諸特徴は、携帯用装置、ワークステーション、サーバ、モバイル無線装置などを含めて、任意のタイプのコンピューティング装置上で実施することができる。
【図１】
0005437238.tif 000002
【図２】
0005437238.tif 000003
【図３】
0005437238.tif 000004
【図４】
0005437238.tif 000005
【図５】
0005437238.tif 000006
【図６】
0005437238.tif 000007
【図７】
0005437238.tif 000008
【図８】
0005437238.tif 000009
【図９】
0005437238.tif 000010
【図１０】
0005437238.tif 000011
【図１１】
0005437238.tif 000012
【図１２】
0005437238.tif 000013
【図１３】
0005437238.tif 000014
【図１４】
0005437238.tif 000015
【図１５】
0005437238.tif 000016
【図１６】
0005437238.tif 000017
【図１７】
0005437238.tif 000018
【図１８】
0005437238.tif 000019