(57)【特許請求の範囲】
【請求項１】
オブジェクト有効期間管理システムであって、
１つまたは複数のオブジェクトに関する参照カウントを決定するように構成される参照カウント構成要素と、
前記参照カウントの解析に基づいて、前記１つまたは複数のオブジェクトの有効期間を制御するために、ネイティブオブジェクト有効期間管理システムと管理オブジェクト有効期間管理システムとを動的に切り替えるように構成される解析構成要素であって、前記ネイティブオブジェクト有効期間管理システムは、前記１つまたは複数のオブジェクトのネイティブオブジェクトピアによって使用されるメモリを、前記ネイティブオブジェクトピアが前記メモリを解放後に再構築することを可能にし、前記管理オブジェクト有効期間管理システムは、ガーベッジコレクション構成要素を使用して前記１つまたは複数のオブジェクトの管理オブジェクトピアのデストラクションを可能にする、解析構成要素と、
前記管理オブジェクトピアによって使用されるリソースを再構築するように構成されるガーベッジコレクション構成要素であって、前記ガーベッジコレクション構成要素は、前記参照カウント構成要素および前記解析構成要素によって与えられる、前記１つまたは複数のオブジェクトに関する到達可能性情報に基づいて将来的にアクセスされないオブジェクトを識別することによって前記識別されたオブジェクトをデストラクションし、前記リソースを再構築するように構成される、ガーベッジコレクション構成要素と、
前記ネイティブオブジェクトピアに対する参照を有する前記管理オブジェクトピア上に弱参照に対する参照を含み、および前記管理オブジェクトピアがファイナライズされるまで前記弱参照に対する参照を維持することによって前記管理オブジェクトピアのファイナライゼーション中の競合状態を回避する保留リストを格納するように構成されるストレージであって、前記ファイナライゼーションは、前記ネイティブオブジェクトピア上の前記管理オブジェクトピアの参照を解放する、ストレージと
を備えることを特徴とするオブジェクト有効期間管理システム。
【請求項２】
前記解析構成要素は、前記ネイティブオブジェクトピアに対する外部参照を解析するように構成されることを特徴とする請求項１に記載のシステム。
【請求項３】
前記ネイティブオブジェクトピアに対する外部参照が存在しないとき、前記解析構成要素は、前記ネイティブオブジェクトピアから管理オブジェクトピアに対する参照を弱めるように構成され、前記外部参照の少なくとも一つは、直接的参照または間接的参照の少なくとも一方であることを特徴とする請求項２に記載のシステム。
【請求項４】
直接的参照または間接的参照の少なくとも一方が前記ネイティブオブジェクトピアに対して行われるとき、前記解析構成要素は、前記ネイティブオブジェクトピアから管理オブジェクトピアに対する参照を強めるように構成され、前記直接的参照および前記間接的参照は、外部参照であることを特徴とする請求項２に記載のシステム。
【請求項５】
前記解析構成要素は、複数のネイティブオブジェクトピア間の参照を管理オブジェクトピア側に複製するように構成されることを特徴とする請求項３に記載のシステム。
【請求項６】
オブジェクトシステムのシャットダウン中に管理オブジェクトピアとネイティブオブジェクトピアとの間の参照を解放するように構成される最適化構成要素をさらに備えることを特徴とする請求項１に記載のシステム。
【請求項７】
オブジェクトシステムのシャットダウン中に前記ネイティブオブジェクトピアに対する参照を保持する少なくとも１つの管理オブジェクトピアのファイナライゼーションを行わないように構成される最適化構成要素をさらに備えることを特徴とする請求項１に記載のシステム。
【請求項８】
コンピュータ実行可能命令を格納するコンピュータ読み取り可能な記憶媒体であって、
前記コンピュータ実行可能命令は、プロセッサによって実行されると、前記プロセッサに、
１つまたは複数のオブジェクトに対する参照を解析するステップと、
前記解析に基づいて、前記１つまたは複数のオブジェクトの有効期間を制御するために、ネイティブオブジェクト有効期間管理システムと管理オブジェクト有効期間管理システムとを動的に切り替えるステップであって、前記ネイティブオブジェクト有効期間管理システムは、ネイティブオブジェクトによって使用されるメモリを、前記ネイティブオブジェクトが前記メモリを解放後に再構築することを可能にし、前記管理オブジェクト有効期間管理システムは、管理オブジェクトピアのデストラクションを可能にする、ステップと、
前記ネイティブオブジェクトに対する参照を有する前記管理オブジェクトピア上に弱参照に対する参照を含み、および前記管理オブジェクトピアがファイナライズされるまで前記弱参照に対する参照を維持することによって前記管理オブジェクトピアのファイナライゼーション中の競合状態を回避する保留リストを格納するステップであって、前記ファイナライゼーションは、前記ネイティブオブジェクト上の前記管理オブジェクトピアの参照を解放する、ステップと、
ネイティブオブジェクト有効期間管理システムおよび管理オブジェクト有効期間管理システムによって提供される、前記１つまたは複数のオブジェクトに関する到達可能性情報に基づいて将来的にアクセスされない未使用オブジェクトを識別することによって前記識別された未使用オブジェクトをデストラクションするステップと
を備える方法を実行させることを特徴とするコンピュータ読み取り可能な記憶媒体。
【請求項９】
前記１つまたは複数のオブジェクトに対する直接的参照または間接的参照の少なくとも一方を決定するステップであって、前記直接的参照および前記間接的参照は、外部参照である、ステップをさらに備えることを特徴とする請求項８に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１０】
前記解析に基づいて、参照を強めること、または参照を複製することのうちの少なくとも１つを行うステップをさらに備えることを特徴とする請求項９に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１１】
前記１つまたは複数のオブジェクトの前記ネイティブオブジェクトから管理オブジェクトピアに対する少なくとも１つの参照を弱めるステップであって、前記少なくとも１つの参照を弱めることは、前記ネイティブオブジェクトに対する前記外部参照の解析に基づく、ステップをさらに備えることを特徴とする請求項９に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１２】
前記解析は、ネイティブオブジェクトに対する外部参照の解析であり、参照を複製することは、ネイティブオブジェクト間の参照を管理オブジェクト側に複製することを備えることを特徴とする請求項１０に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１３】
オブジェクトシステムシャットダウン中に前記１つまたは複数のオブジェクトの管理オブジェクトピアとネイティブオブジェクトとの間の参照を解放するステップをさらに備えることを特徴とする請求項８に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１４】
オブジェクトシステムシャットダウン中に、前記ネイティブオブジェクトに対する参照を保持する前記管理オブジェクトピアのファイナライゼーションを行わないステップをさらに備えることを特徴とする請求項８に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１５】
１つまたは複数のオブジェクトの有効期間を制御するために、ネイティブオブジェクト有効期間管理システムと管理オブジェクト有効期間管理システムとを動的に切り替えるコンピュータ実行方法であって、前記動的な切り替えは、管理オブジェクトピアのメモリリークまたは時期尚早なデストラクションのうちの少なくとも一方を防止し、前記方法は、
１つまたは複数のネイティブオブジェクトピアに対する参照を解析するステップと、
前記解析に基づいて、前記１つまたは複数のネイティブオブジェクトピアの有効期間を制御するために、ネイティブオブジェクト有効期間管理システムと管理オブジェクト有効期間管理システムとを動的に切り替えるステップであって、前記ネイティブオブジェクト有効期間管理システムは、ネイティブオブジェクトピアによって使用されるメモリを、前記ネイティブオブジェクトピアが前記メモリを解放後に再構築することを可能にし、前記管理オブジェクト有効期間管理システムは、管理オブジェクトピアのデストラクションを可能にする、ステップと、
前記ネイティブオブジェクトに対する参照を有する前記管理オブジェクトピア上に弱参照に対する参照を含み、および前記管理オブジェクトピアがファイナライズされるまで前記弱参照に対する参照を維持することによって前記管理オブジェクトピアのファイナライゼーション中の競合状態を回避する保留リストを格納するステップであって、前記ファイナライゼーションは、前記ネイティブオブジェクト上の前記管理オブジェクトピアの参照を解放する、ステップと、
ネイティブオブジェクト有効期間管理システムおよび管理オブジェクト有効期間管理システムによって提供される、前記１つまたは複数のネイティブオブジェクトピアに関する到達可能性情報に基づいて将来的にアクセスされない未使用オブジェクトを識別することによって前記識別された未使用オブジェクトによって使用されるリソースを再構築するステップと
を備えることを特徴とする方法。
【請求項１６】
前記解析に基づいて、前記管理オブジェクトピアに対する少なくとも１つの参照を弱めるステップまたは強めるステップの少なくとも１つをさらに備えることを特徴とする請求項１５に記載の方法。
【請求項１７】
前記解析に基づいて、前記管理オブジェクトピア側にイントラネイティブ参照を複製するステップをさらに備えることを特徴とする請求項１５に記載の方法。
【請求項１８】
前記管理オブジェクトピアと１つまたは複数の前記ネイティブオブジェクトピアとの間の参照を解放することによってオブジェクトシステムシャットダウンを最適化するステップをさらに備えることを特徴とする請求項１５に記載の方法。
【請求項１９】
請求項１５に記載の方法を実施するコンピュータ実行可能命令が格納されていることを特徴とするコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、一般には、コンピュータシステムでのメモリ管理に関し、より詳細には、自動オブジェクト有効期間管理を容易にするシステムおよび方法に関する。
【背景技術】
【０００２】
コンピュータ・サイエンスが発展するにつれて、オブジェクト指向プログラミングは、コンピュータシステム内の機能を実装するのに設計者およびプログラマによって使用される、多くのなじみのあるモデルのうちの１つとなった。オブジェクトモデルは、関数の集合、または単に命令のリストであるプログラムを含む従来のモデルとは対照的に、互いに作用する１つまたは複数のオブジェクトを含むことができる。各オブジェクトは、メッセージを受け取り、データを処理し、他のオブジェクトにメッセージを送ることができ、各オブジェクトを、別個の役割または責任を有する独立したマシンと考えることができる。
【０００３】
オブジェクト指向プログラミングでは、オブジェクトのオブジェクト有効期間（またはライフサイクル）は、オブジェクトの生成（インスタンス化またはコンストラクションとも呼ばれる）とオブジェクトの破棄との間の時間である。オブジェクトを自動的に（管理オブジェクト（managed object）など）または手動で（ネイティブオブジェクトまたは非管理オブジェクト（unmanaged object）など）作成および／または破棄することができる。管理オブジェクトを、データ型（例えばメタデータ）によって記述して、オブジェクトがもはやアクセスされていないときにメモリからオブジェクトを除去するガーベッジコレクタなどの管理環境によって自動的に回収する（例えば再構築する）ことができる。一方、非管理オブジェクトを、標準オペレーティングシステムヒープから割り振ることができ、オブジェクト自体は、オブジェクトに対する参照がもはや存在しないときに、オブジェクトが使用するメモリを解放する任を担う。このことを、例えば参照カウントなどの周知の技法によって実施することができる。
【０００４】
上述のように、管理オブジェクトを管理ヒープから割り振り、自動的にガーベッジコレクションすることができる。このことを達成するために、管理オブジェクトに対する参照をトレースすることができる。オブジェクトに対する最後の参照が除去されたとき、ガーベッジコレクタは、オブジェクトによって占有されたメモリを再構築することができ、管理オブジェクトを参照カウントする必要が緩和される。管理環境は、オブジェクト上に存在する未完結の参照（outstanding reference）を追跡することができるので、トレースは管理コード内で可能である。新しい各オブジェクト参照が管理コード内で宣言されるとき、管理環境は、参照をライブ参照（live reference）のリストに追加することができる。したがって、所与の時刻に、オブジェクト自体ではなく管理環境が、所与のオブジェクト上に存在するライブ参照を認識することができる。参照が範囲外となったとき、または値を変更したとき、ライブ参照のリストを更新することができ、参照が管理コード内にとどまる限り、管理環境は参照をトレースすることができる。
【０００５】
オブジェクトの実装をネイティブ・パートと管理・パート（ピア）にわたって分割することができる。参照カウント技法でネイティブピアの有効期間を制御することができるのに対して、上述のように、ガーベッジコレクタは、管理ピア（managed peer）の有効期間を管理することができる。管理オブジェクト間の参照の一部がネイティブコードを通過するとき、管理オブジェクトがリークする可能性があり、または時期尚早に回収される可能性がある。
【０００６】
複数の管理オブジェクト／ネイティブオブジェクトのペアのシナリオでは、オブジェクトのどちらかに対する参照が存在する限り、そのペアは存続しなければならない。従来の解決策は、オブジェクトを再構築するのに複数のガーベッジコレクションを必要とし、メモリリークしがちであり、オブジェクトに対する外部参照がないとしてもオブジェクトが回収されず、時期尚早な回収をしがちであり、非管理参照が存在する可能性があったとしてもガーベッジコレクタがオブジェクトを再構築する。
【０００７】
以下では、本明細書のいくつかの態様の基本的理解を与えるために、本明細書の単純化した概要を提示する。この概要は、本明細書の包括的な概要ではない。本明細書の主要な要素または不可欠な要素を特定することも、本明細書の範囲を説明することも意図されない。この概要の唯一の目的は、後述される詳細な説明の前置きとして、本明細書のいくつかの概念を単純化した形で提示することである。
【０００８】
本明細書で開示され、特許請求の範囲に記載されるシステムは、その一態様では、オブジェクトの有効期間の管理を容易にする。このシステムは、参照カウントシステムなどのネイティブ側と、ガーベッジコレクションシステムなどの管理側のオブジェクト有効期間管理システム間の遷移を可能にする。ある段階では、このシステムは、参照カウントシステムを使用してオブジェクトのペアの有効期間を制御し、別の段階では、このシステムは、プログラマおよび／またはエンドユーザに対して透過的な方式で、有効期間制御をガーベッジコレクションシステムに引き継ぐ。このシステムは、オブジェクトに対する参照（直接または間接）の解析に基づいて、２つの有効期間管理システム間で動的に切り換えを行うことによってオブジェクトの有効期間を決定することができる。
【０００９】
このシステムの一態様によれば、参照カウント構成要素が、参照カウント技法を使用して、各オブジェクトに対する参照を計算する。参照カウント構成要素は、各ネイティブオブジェクトピアに対する参照の合計数を求め、それに応じて各ネイティブオブジェクトピアに参照カウントを割り当てる。解析構成要素が、ネイティブオブジェクトに対する参照を解析する。さらに解析構成要素は、その解析に基づいてオブジェクトピア間の参照を弱め、かつ／または強めて、メモリリークを回避する。弱参照は、管理オブジェクトに対する参照であり、管理オブジェクトがガーベッジコレクションされるのを防止せず、それによって、管理オブジェクトに対して強参照がない場合に、管理オブジェクトが回収可能となる。さらに、参照が弱められると、解析構成要素は、参照解析に基づいて、管理側に対するイントラネイティブ参照を複製し、時期尚早な回収を防止する。解析構成要素は、参照カウントシステムからガーベッジコレクションシステムへの、およびその逆への有効期間管理の遷移を容易にすることができる。
【００１０】
このシステムのさらに別の態様によれば、外部参照がネイティブ側の複数のオブジェクトのペアの中に存在しないとき、ネイティブピアから管理ピアへの参照が弱められる。サブツリー内の管理ピアに対する参照を弱めることにより、ピアに対する管理参照がドロップ／除去されたときに管理ピアを回収することが可能となる。管理ピアに対する参照が弱められると、このシステムは、管理側に対するネイティブ参照を複製し、時期尚早な回収を回避する。新しい外部（直接的および／または間接的）ネイティブ参照がネイティブピアに対して作成される場合、サブツリー内の管理ピアに対する参照が再び強められる。
【００１１】
このシステムの一態様は、管理ピアとネイティブピアとの間の参照を解放し、かつ／またはSafeHandleのファイナライゼーションを抑制するのに使用される最適化構成要素に関する。通常、SafeHandleは、ネイティブオブジェクトに対する参照を保持する管理オブジェクトである。管理オブジェクトが回収されるとき、管理オブジェクトのガーベッジコレクション中に最終処理を実行するファイナライゼーション機構が使用される。SafeHandleがガーベッジコレクションされるとき、そのファイナライゼーションステップが、ネイティブピアに対するSafeHandleの参照を解放する。本明細書に記載の最適化構成要素は、このシステムのドメイン特有のプロパティを活用して、参照をいつ強め／弱めるかを決定する１組の静的規則を導出する。さらに、このシステムの一態様によれば、管理ピアが状態を持たない場合、最適化構成要素は、管理ピアに対する弱参照を保つ。
【００１２】
このシステムのさらに別の態様は、競合状態を回避するのに使用される、参照に関する保留除去リスト（pending remove list）に関する。管理ピアがガーベッジコレクションされるとき、そのピアに関するSafeHandleがファイナライズされるまで、弱参照オブジェクトに対する参照が保留除去リスト内に保たれる。オブジェクトが回収された後の任意の時点で、オブジェクトをファイナライズすることができる。これにより、ファイナライザが実行される前に、必要ならば管理ピアを再生成する（recreate）ことができる。
【００１３】
以下の説明および添付の図面は、本明細書のいくつかの例示的態様を記述する。しかし、こうした態様は、本明細書の原理を利用することのできる様々な方式の一部を示すに過ぎない。図面と共に考慮するときに、本明細書の以下の詳細な説明から本明細書の他の利点および新規な特徴が明らかとなるであろう。
【図面の簡単な説明】
【００１４】
【図１】オブジェクト有効期間管理を容易にする例示的システムのブロック図である。
【図２】本明細書の一態様による、オブジェクトが管理側とネイティブ側の間で分割される例示的シナリオを示す図である。
【図３】本明細書の一態様による、管理ピアに対する参照が弱められる例示的シナリオを示す図である。
【図４Ａ】複数のオブジェクトのペアに関する例示的ガーベッジコレクション機構を示す図である。
【図４Ｂ】複数のオブジェクトのペアに関する例示的ガーベッジコレクション機構を示す図である。
【図４Ｃ】複数のオブジェクトのペアに関する例示的ガーベッジコレクション機構を示す図である。
【図４Ｄ】複数のオブジェクトのペアに関する例示的ガーベッジコレクション機構を示す図である。
【図５Ａ】本明細書の一態様による、複数のオブジェクトの管理ピア間のリンクが存在する、複数のオブジェクトのペアのガーベッジコレクションのための例示的機構を示す図である。
【図５Ｂ】本明細書の一態様による、複数のオブジェクトの管理ピア間のリンクが存在する、複数のオブジェクトのペアのガーベッジコレクションのための例示的機構を示す図である。
【図６】システムの一態様による、オブジェクトの時期尚早な回収を回避する例示的機構を示す図である。
【図７】システムの一態様による、最適化オブジェクト有効期間管理システムのブロック図である。
【図８Ａ】本明細書の一態様による、管理ピアおよびネイティブピアに対する参照に関するデータ構造を示す図である。
【図８Ｂ】本明細書の一態様による、管理ピアおよびネイティブピアに対する参照に関するデータ構造を示す図である。
【図９】本明細書の一態様による、ファイナライゼーション中の競合状態を回避する、管理ピアおよびネイティブピアに対する参照に関するデータ構造を示す図である。
【図１０】本明細書の一態様による、オブジェクト有効期間管理を容易にし、メモリリークおよび時期尚早な回収を回避する手順の例示的流れ図である。
【図１１】本明細書で開示されるアーキテクチャを実行するように動作可能なコンピュータのブロック図である。
【発明を実施するための形態】
【００１５】
これから、同様の要素を参照するのに全体にわたって同様の参照番号が使用される図面を参照しながら、特許請求の範囲に記載される主題を説明する。以下の説明では、説明の都合上、特許請求される主題の完全な理解を与えるために、多数の特定の詳細が記述される。しかし、特許請求の範囲に記載される主題をこうした特定の詳細なしに実施できることは明らかである。別の例では、特許請求の範囲に記載される主題を説明するのを容易にするために、周知の構造およびデバイスがブロック図の形式で示される。
【００１６】
本願では、「構成要素」、「モジュール」、「システム」などの用語は一般に、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアである、コンピュータ関連の実体を指すものとする。例えば、構成要素は、限定はしないが、プロセッサ上で実行中のプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行のスレッド、プログラム、および／またはコンピュータでよい。例として、コントローラ上で実行中のアプリケーションとコントローラとはどちらも構成要素でよい。１つまたは複数の構成要素が、プロセスおよび／または実行のスレッド内に常駐することができ、構成要素を１つのコンピュータ上に局在化させることができ、かつ／または２つ以上のコンピュータ間で分散させることができる。別の例として、インターフェースは、Ｉ／Ｏ構成要素、ならびに関連するプロセッサ、アプリケーション、および／またはＡＰＩ構成要素を含むことができる。
【００１７】
さらに、標準プログラミングおよび／またはエンジニアリング技法を使用して、特許請求の範囲に記載される主題を方法、装置、または製品として実装し、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを生成し、コンピュータが開示される主題を実装するように制御することができる。本明細書では、「製品」という用語は、任意のコンピュータ可読装置、コンピュータ可読搬送波、またはコンピュータ可読媒体からアクセス可能なコンピュータプログラムを包含するものとする。例えば、コンピュータ可読媒体は、限定はしないが、磁気記憶装置（例えば、ハードディスク、フロッピー（登録商標）ディスク、磁気ストライプ．．．）、光ディスク（例えば、コンパクトディスク（ＣＤ）、ＤＶＤ．．．）、スマートカード、およびフラッシュメモリ装置（例えば、カード、スティック、キードライブ．．．）を含むことができる。さらに、搬送波を使用して、電子メールを送信および受信する際に、またはインターネットやローカルエリアネットワーク（ＬＡＮ）などのネットワークにアクセスする際に使用されるようなコンピュータ可読電子データを搬送することができることを理解されたい。もちろん、特許請求の範囲に記載される主題の範囲または要旨から逸脱することなく、この構成に対して多くの修正を行えることを当業者は理解されよう。
【００１８】
さらに、「例示的」という語は、本明細書では、一例、実例、または例示として働くことを意味するのに使用される。本明細書で「例示的」なものとして説明される任意の態様または設計は、必ずしも他の態様または設計に勝って好ましいもの、または有利なものと解釈されるべきではない。むしろ、例示的という語の使用は、概念を具体的な形で提示するものとする。本願では、「または」という用語は、排他的な「または」ではなく、両立的な「または」を意味するものとする。すなわち、別段の指定がない限り、または文脈から明らかでない限り、「ＸがＡまたはＢを使用する」とは、自然な両立的順列（natural inclusive permutation）のいずれかを意味するものとする。すなわち、ＸがＡを使用し、ＸがＢを使用する場合、またはＸがＡとＢのどちらも使用する場合、「ＸがＡまたはＢを使用する」は、上記の例のいずれかの下で満たされる。さらに、本願および添付の特許請求の範囲で使用される冠詞「ａ」および「ａｎ」は一般に、別段の指定がない限り、または文脈から単数形を対象とすることが明らかでない限り、「１つまたは複数」を意味するように解釈されるべきである。
【００１９】
本明細書で使用される「回収」、「デストラクション」、「破棄」、「解放」などの用語は一般に、オブジェクトのガーベッジコレクションを指し、オブジェクトによって使用されるリソースを再構築することができる。再構築されるリソースを別のオブジェクトに割り振ることができる。
【００２０】
最初に図面を参照すると、図１は、オブジェクト１０２の有効期間を制御するオブジェクト有効期間管理システム１００を示す。オブジェクト１０２のライフサイクル（オブジェクト有効期間）は、オブジェクト１０２がメモリ内でインスタンス化され、オブジェクト１０２がもはや使用されなくなり、デストラクションまたは解放されるまでの時間である。これは一般には、オブジェクト１０２がもはや使用されなくなった後に、オブジェクト１０２をメモリから除去して、他のプログラムまたはオブジェクトがそのオブジェクトの場所を取るための空間を作成することができる場合である。メモリからオブジェクトを除去するために、未使用オブジェクト１０２に対してデストラクションメソッドを呼び出すことができる。オブジェクト１０２を破棄することは、オブジェクトに対する任意の参照（図示せず）が無効となることを引き起こす可能性がある。各オブジェクト１０２は、参照カウント機構およびガーベッジコレクション機構によってその有効期間をそれぞれ制御することができるネイティブピアおよび管理ピア（図示せず）を有することができる。
【００２１】
システム１００は通常、各オブジェクトに対する参照を計算するのにほぼ任意の参照カウント技法を使用することのできる参照カウント構成要素１０４を含むことができる。参照は、オブジェクト１０２上のオブジェクトピア（図示せず）間の外部参照または内部参照を含むことができる。参照はまた、複数のオブジェクトのペア間の参照をも含むことができる。参照カウント構成要素１０４は、各オブジェクト１０２に対する参照の合計数を求めることができ、したがって、参照カウントを各オブジェクト１０２に割り当てることができる。
【００２２】
解析構成要素１０６を使用して、オブジェクト１０２に対する参照を解析することができる。この解析に基づいて、解析構成要素１０６は、ネイティブピアと管理オブジェクトのピア間の参照を強め、または弱めることができる。さらに、解析構成要素１０６を使用して、解析に基づいてオブジェクトのピア間の参照を複製することもできる。解析構成要素１０６は、その解析に基づいて、参照カウントシステムからガーベッジコレクションシステムへの、およびその逆への有効期間管理の遷移を決定することができる。
【００２３】
システム１００は、ガーベッジコレクション構成要素１０８を使用することにより、未使用オブジェクト１０２を破棄または解放することができる。オブジェクト１０２が到達可能ではなく、それによってオブジェクト１０２に対する直接的または間接的な参照が存在しないとき、オブジェクトを回収することができる。オブジェクトがネイティブ側と管理側との間で分割されるシナリオでは、通常、ネイティブピアに対するネイティブ参照がある場合、管理ピアは活動状態のままでなければならず、管理ピアに対する管理参照がある場合、ネイティブピアは活動状態のままでなければならない。したがって、いずれかの側からの参照がある限り、各ピアのどちらもデストラクションされるべきではない。ガーベッジコレクション構成要素１０８は、参照カウント構成要素１０４および解析構成要素１０６によって提供されるオブジェクト１０２に関する到達可能性情報に基づいて、そのオブジェクト１０２を破棄すべきであると判定することができる。
【００２４】
図２は、本明細書の一態様によるオブジェクト１０２を示す。オブジェクト１０２を２つのピアオブジェクト２０４、２０６によって形成することができる。ネイティブピア２０４は、ネイティブ側２０８に常駐することができ、ネイティブピア２０４に対するネイティブ参照２１０を有することができるのに対して、管理ピア２０６は、管理側２１２に常駐することができ、管理参照２１４を有することができる。ネイティブ参照２１０が存在する場合、管理ピア２０６は活動状態のままでなければならず、同様に、管理参照２１４が存在する場合、ネイティブピア２０４は活動状態のままでなければならない。したがって、ピア２０４、２０６のどちらかに対する外部参照がある場合、ピア２０４、２０６はどちらも活動状態のままである必要がある。ネイティブピア２０４と管理ピア２０６のどちらも、互いに対する参照２１６、２１８を保持することができる。
【００２５】
ガーベッジコレクション機構によって管理ピアの有効期間を制御することができる。ガーベッジコレクションは、オブジェクトの到達可能性に基づいて、将来的にアクセスされることのないプログラム内のオブジェクトを求める。到達可能ではないオブジェクトを自動的にデストラクションすることができ、そのオブジェクトで使用されたリソースを再構築することができる。例えば、デストラクションされたオブジェクトで使用されたメモリを、今度は新しいオブジェクトに割り振ることができる。したがって、どんなルート参照からも管理ピア２０６が到達可能ではないとき、管理ピア２０６を破棄し、または解放することができる。さらに、サイクル内の参照を除いて外部参照を有さない管理オブジェクトを回収することができる。例えば、オブジェクトＡがオブジェクトＢに対する参照を有し、オブジェクトＢがオブジェクトＡに対する参照を有するが、オブジェクトＡとオブジェクトＢのどちらに対しても他の参照がない場合、これらのオブジェクトはどちらも回収可能である。
【００２６】
ネイティブ側２０８で参照カウント機構を使用して、ネイティブピアの有効期間を求めることができる。通常、参照カウントは、ピアに対する参照数に基づいて、各ピアについて求められる。ピアに対する参照が作成されるとき、ピアの参照カウントがインクリメントされ、参照が破棄されるとき、ピアの参照カウントがデクリメントされる。カウントがゼロに達したとき、ピアのメモリが再構築される。したがって、ネイティブピア２０４がネイティブピア２０４に対する参照を有さないとき、ネイティブピア２０４を再構築することができる。
【００２７】
２つの有効期間管理機構を動的に調整して、ユーザにとって不可視の方式でオブジェクト１０２の有効期間を管理することができ、それによってメモリリークおよび／または時期尚早なデストラクションが回避される。メモリリークは、ネイティブ参照２１０と管理参照２１４がどちらも消滅し、オブジェクトが回収／デストラクションされないときに生じる。ネイティブ参照２１０と管理参照２１４はどちらも、互いに対する参照２１６、２１８を保持するからである。
【００２８】
次に図３を参照すると、ネイティブピア２０４および管理ピア２０６を含むオブジェクト１０２がどちらのピアに対しても外部参照を有さない例示的シナリオが示されている。ネイティブピア２０４は、ネイティブ側２０８に常駐することができるのに対して、管理ピア２０６は、管理側２１２に常駐することができ、ネイティブ参照または管理参照がオブジェクト１０２に対して行われない。
【００２９】
管理ピア２０６が、他の管理オブジェクトからも、そのネイティブピアからも、管理ピア２０６に対するどんな参照も有さない場合、管理ピア２０６を自動的にデストラクションすることができる。しかし、管理ピア２０６がそれに関する状態を有さず、管理ピア２０６に対する唯一の参照がネイティブピアからのものだけである場合、同一のネイティブピア２０４について、後で管理ピア２０６をデストラクションし、再生成することができる。すなわち、管理コードがネイティブオブジェクトに対する管理参照を必要とする場合、ネイティブオブジェクトについて、新しい管理ピアを望み通りに作成することができる。管理ピアのデストラクションおよび再生成は、管理ピアが管理ピアに関する状態を有さない場合にのみ可能である。例えば、計算の結果がプライベート変数によって参照される管理オブジェクト上に格納され、次いで管理オブジェクトがデストラクションされた場合、管理オブジェクトが再生成された場合に計算の結果が失われ、エラーが引き起こされることになる。管理オブジェクトがアプリケーション状態を含まない場合、管理オブジェクトをデストラクションすることができる。このことは、システムが管理ピアを常に再生成することができるので可能である。このことは、ステートレスオブジェクトについても当てはめることができるが、ステートフルオブジェクトについては機能しない。
【００３０】
図３に戻ると、ネイティブピア２０４は、管理ピア２０６に対する弱参照３０２を保持することができる。弱参照は、システムが、オブジェクトをデストラクションさせないようにすることなくオブジェクトを参照することを可能にすることができる。ガーベッジコレクタが弱く到達可能なオブジェクト（weakly reachable object）を回収する場合、弱参照を通じてそのオブジェクトにもはやアクセスすることができなくなるように、弱く到達可能なオブジェクトに対する弱参照をヌルに設定することができる。
【００３１】
管理ピア２０６に対する弱参照３０２を保持することにより、管理コードにオブジェクト識別子を提供することができる。例えば、ユーザコードが管理ピア２０６に対する参照を保持している場合、弱参照は、ユーザコードが再びオブジェクトを求めるときに、管理ピア２０６に対する同一の参照がユーザコードに提供されることを保証することができる。しかし、弱参照は、管理ピア２０６に対する他の管理参照が存在しないときに、管理ピア２０６を回収することを可能にすることができる。
【００３２】
管理ピア２０６が管理ピア２０６に関する管理状態を有する場合、ネイティブピア２０４上の参照カウントが１となり、それによってネイティブピア２０４に対する唯一の参照が符号２１８となるとき、管理ピア２０６に対する参照３０２が弱められる。そのような場合、管理ピア２０６は、管理ピア２０６に対する管理参照がある間にのみ、活動状態にとどまることができる。最後の管理参照が除去されたとき、管理オブジェクトが回収され、ファイナライザが、ネイティブピア２０４に対する最終解放を実施することができる。しかし、オブジェクトのペアを回収するこの機構は、複数のオブジェクトのペアのために複数のガーベッジコレクションを必要とし、その結果、メモリリークが生じる可能性がある。
【００３３】
図４Ａ〜Ｄは、複数のオブジェクトのペアに関する例示的デストラクション機構を示す。図４Ａを参照すると、２つのオブジェクトのペア（符号４０２および４０４、４０６および４０８）が、ネイティブ側２０８のそれらの間の参照４１０と、ルートに対するネイティブ参照４１２と共に示されている。一例を挙げると、複数のオブジェクトは、内部のＣａｎｖａｓおよびＢｕｔｔｏｎを表す。機構はＣａｎｖａｓやＢｕｔｔｏｎなどの２つのオブジェクトに限定されず、任意の複数のオブジェクトのペアに対して適用できることを理解されたい。
【００３４】
図４Ｂは、ルート、例えばＣＣａｎｖａｓ４０２に対するネイティブ参照４１２（図４Ａ）が除去されるシナリオを示す。オブジェクト４０２に対する外部参照が存在しないので、ＣＣａｎｖａｓ４０２は、ＭｙＣａｎｖａｓ４０４に対するＣＣａｎｖａｓ４０２の参照４１４を弱めることができる。ＣＣａｎｖａｓ４０２からＭｙＣａｎｖａｓ４０４への参照が弱められると、他の参照を有さないので、ＭｙＣａｎｖａｓ４０４をデストラクションすることができる。
【００３５】
ＣＣａｎｖａｓ４０２からの参照４１０と、ＣＣｏｎｔｒｏｌ４０６の管理ピア４０８からの別の参照４１８のために、ＣＣｏｎｔｒｏｌ４０６に関する参照カウント（ＲＥＦ）は２である。したがって、ＣＣｏｎｔｒｏｌは、Ｂｕｔｔｏｎ４０８に対する強参照４１６を依然として保持することができる。さらに、Ｂｕｔｔｏｎ４０８は、Ｂｕｔｔｏｎ４０８に対する強参照４１６を有するので、Ｂｕｔｔｏｎ４０８はデストラクションされない。
【００３６】
管理ピアＭｙＣａｎｖａｓ４０４は、管理ピアＭｙＣａｎｖａｓ４０４に対する単一の弱参照４１４を有し、管理ピアＭｙＣａｎｖａｓ４０４をデストラクションすることができる。ＭｙＣａｎｖａｓ４０４がデストラクションされたとき、図４Ｃに示されるように、ＭｙＣａｎｖａｓのためのファイナライザ（図示せず）が、ネイティブピア４０２に関する最終解放を実施することができる。
【００３７】
図４Ｃを参照すると、オブジェクトのペア４０２〜４０４をデストラクションすることができ、ＣＣａｎｖａｓ４０２からＣＣｏｎｔｒｏｌ４０６への参照４１０を除去することができる。したがって、ＣＣｏｎｔｒｏｌは、ＣＣｏｎｔｒｏｌの管理ピア４０８から唯一の参照４１８を有するので、ＣＣｏｎｔｒｏｌの参照カウントは１でよい。上記で論じたように、ネイティブピアが外部参照を有さないとき、ネイティブピアは、ネイティブピアの管理ピアに対する参照を弱めることができる。したがって、Ｂｕｔｔｏｎ４０８に対する参照４１６が弱められる。
【００３８】
次に図４Ｄを参照すると、管理ピアＢｕｔｔｏｎ４０８が、単一の弱参照４１６と共に示されている。このとき、Ｂｕｔｔｏｎ４０８をデストラクションすることができる。Ｂｕｔｔｏｎ４０８がデストラクションされたとき、ＣＣｏｎｔｒｏｌ４０６に関する最終解放を実施することができる。図４Ａ〜Ｄからわかるように、複数のガーベッジコレクションに複数のペアのオブジェクトをデストラクションするように要求することができ、オブジェクトのペアのツリーに関するガーベッジコレクション数は、ツリーの深さに依存する。
【００３９】
図５Ａ〜Ｂは、複数のオブジェクトの管理ピア間のリンクが存在する、複数のオブジェクトのガーベッジコレクションに関する例示的機構を示す。前に論じたＣａｎｖａｓおよびＢｕｔｔｏｎの例を続けると、参照５０２が、管理側２１２でＢｕｔｔｏｎ４０８からＭｙＣａｎｖａｓ４０４に対して存在する。外部参照は存在しないので、ネイティブピアＣＣａｎｖａｓ４０２の参照カウントは１でよく、それに応じて参照４１４を弱めることができる。管理ピアＭｙＣａｎｖａｓ４０４は弱参照４１４を有するが、Ｂｕｔｔｏｎ４０８からの強参照５０２をも有する。ＣＣｏｎｔｒｏｌ４０６からＢｕｔｔｏｎ４０８に対して存在するルート参照４１６と、Ｂｕｔｔｏｎ４０８からＭｙＣａｎｖａｓ４０４に対する参照５０２のために、ＭｙＣａｎｖａｓ４０４はルートから到達可能であり、したがってＭｙＣａｎｖａｓ４０４をガーベッジコレクションすることができない。各ピア（符号４０２、４０４、４０６、４０８）の参照カウントは１より大きく、したがって、オブジェクト対に対して外部参照が存在しないとしても、ピアのいずれもガーベッジコレクションすることができず、結果としてメモリリークが生じる。
【００４０】
図５Ｂは、図５Ａに関して説明したメモリリーク状態を回避する機構を示す。ネイティブルートに対する最後の外部参照に関して、ツリー内のオブジェクトの有効期間は、管理参照に依存する。したがって、サブツリー内の管理ピアに対するすべての参照を弱め、メモリリークを回避することができる。
【００４１】
図５Ｂからわかるように、外部参照（直接的および／または間接的）は、ネイティブオブジェクトピア４０２、４０６のいずれに対しても存在しない。したがって、各管理ピアに対する参照４１４、４１６を弱めることができる。参照４１６を弱めることにより、Ｂｕｔｔｏｎ４０８に関する参照カウントはゼロにまで減少することができ、そのときＢｕｔｔｏｎ４０８をガーベッジコレクションすることができる。Ｂｕｔｔｏｎ４０８がガーベッジコレクションされるとき、参照５０２を除去することができ、したがって、そのときＭｙＣａｎｖａｓを回収することができる。
【００４２】
図６は、上述の例に対する参照を伴う、オブジェクトの時期尚早な回収を回避する機構を示す。ネイティブ側２０８から管理側２１２にネイティブ参照４１０を複製することができる。参照の複製は、管理ピアの時期尚早な回収を回避する。複製された参照６０２がない場合、管理ピアであるＭｙＣａｎｖａｓ４０４上の管理参照（図示せず）は、Ｂｕｔｔｏｎ４０８が回収されることを防止することができない。
【００４３】
ネイティブ側２０８に対する外部参照がないので、参照４１４および４１６を弱めることができる。さらに、管理ピアであるＢｕｔｔｏｎ４０８はこのとき、ＭｙＣａｎｖａｓ４０４からの複製参照６０２を有することができる。したがって、管理参照（図示せず）が管理側２１２に存在しない場合、Ｂｕｔｔｏｎ４０８はそのとき到達可能であるので、Ｂｕｔｔｏｎ４０８の時期尚早な回収を回避することができる。新しい外部ネイティブ参照がＣＣａｎｖａｓ４０２に対して行われる場合、参照４１４および４１６を再び強めることができる。
【００４４】
次に図７を参照すると、最適化構成要素７０２を含むオブジェクト有効期間管理システムが示されている。最適化構成要素７０２を使用して、管理ピアとネイティブピアとの間の参照を解放することができ、かつ／またはSafeHandleがファイナライズするのを抑制することができる。通常、SafeHandleを使用して、ハンドルリソース（handle resource）の不可欠なファイナライゼーションを実現することができ、ハンドルがガーベッジコレクションによって時期尚早に再構築されるのを回避することができる。
【００４５】
到達不能な管理オブジェクトがデストラクションされるとき、ファイナライゼーション機構を使用して、管理オブジェクトのガーベッジコレクション中に最終処理を実施することができる。SafeHandleのガーベッジコレクションの間、ファイナライゼーションステップは、ネイティブピアに対するその参照を解放する。最適化構成要素７０２は、システムのドメイン特有のプロパティを活用して、参照をいつ強め／弱めるかを決定する１組の静的規則を導出する。さらに、システムの一態様によれば、管理ピアが状態を担持しない場合、最適化構成要素７０２は、管理ピアに対する弱参照を保つ。
【００４６】
図８Ａ〜Ｂは、本明細書の一態様による、参照に関するデータ構造を示す。まず図８Ａを参照すると、上述のようにネイティブオブジェクト（またはピア）８０２がその管理ピア８０４に対する弱参照を保持することのできるデータ構造が示されている。そのような場合、管理ピアテーブル（ＭＰＴ：managed peer table）８０６は、管理ピア８０４を直接的に参照するのではなく、Weak Referenceオブジェクト８０８を参照する。さらに、SafeHandle８１０は、ネイティブオブジェクト８０２に対する参照カウント参照（reference counted reference）を有することができる。
【００４７】
ガーベッジコレクションが行われる場合、管理ピア８０４を回収することができ、ファイナライザスレッドは、SafeHandle８１０をファイナライズすることができ、SafeHandle８１０は、ネイティブオブジェクト８０２を解放する。ＭＰＴ８０６に対してロックを行うことができ、オブジェクトのエントリを除去することができる。
【００４８】
次に図８Ｂを参照すると、ネイティブオブジェクト（またはピア）８０２がその管理ピア８０４に対する強参照を保持することのできるデータ構造が示されている。ＭＰＴ８０６は、管理ピア８０４を直接的に参照する。さらに、SafeHandle８１０は、ネイティブオブジェクト８０２に対する参照を有することができる。ガーベッジコレクションの間、管理ピア８０４を回収することができ、ファイナライザスレッドは、SafeHandle８１０をファイナライズすることができ、SafeHandle８１０は、ネイティブオブジェクト８０２を解放する。さらに、ＭＰＴ８０６に対してロックを行うことができ、オブジェクトのエントリを除去することができる。
【００４９】
図９は、競合状態を回避する、保留除去リスト（pending remove list）９０２を含む参照に関するデータ構造を示す。競合状態は、弱参照が管理ピアに対して保たれるときに生じる可能性があり、前のものをファイナライズする前に管理ピアが再生成される可能性がある。この状態を防止するために、SafeHandleがファイナライズされるまで、弱参照に対する参照が第２のテーブル内に保たれる。
【００５０】
管理ピアがガーベッジコレクションされるとき、SafeHandle８１０がファイナライズされるまで、Weak Reference８０８に対する参照９０４を保留除去リスト９０２内に保つことができる。SafeHandle８１０がファイナライズされる前に管理ピア９０６が再生成される場合、ＭＰＴ８０６からの参照は、SafeHandle８１０のファイナライゼーション時には除去されない。ファイナライザスレッドがSafeHandle８１０をファイナライズするとき、保留除去リスト９０２内の参照９０４を除去することができる。したがって、競合状態を回避することができる。
【００５１】
次に図１０を参照すると、メモリリークおよび／または時期尚早な回収が防止されるようにオブジェクトの有効期間を管理する方法１０００が示されている。この方法を適用して、１つまたは複数のオブジェクトのペアのガーベッジコレクションを管理することができる。説明を簡単にするために、例えばフローチャートの形式の、本明細書に示される１つまたは複数の方法が、一連の動作として図示および説明されるが、本明細書によれば、いくつかの動作は、異なる順序で行うことができ、かつ／または本明細書に図示および説明されるのとは別の動作と同時に行うことができるので、本明細書は動作の順序によって限定されないことを理解されたい。例えば、別法として、状態図などで、一連の相互に関係する状態またはイベントとしてこの方法を表現できることを当業者は理解されよう。さらに、本明細書による方法を実施するのに、図示されるすべての動作が必要であるわけではないことがある。
【００５２】
方法１０００は、符号１００２で、１つまたは複数のオブジェクトのペアに対する外部参照を解析することを含む。判定ボックス１００４で示されるように、外部参照がネイティブ側に存在するかどうかを判定することができる。ネイティブピアに対する外部参照がない場合、符号１００６で、その管理ピアに対する参照を弱めることができる。管理側に対する参照を弱めることにより、メモリリークを回避することができる。さらに、符号１００８で、管理側に対してネイティブピア間の内部参照を複製することができ、それによって管理ピアは、ネイティブピア間の強参照を保持する。管理側に対する参照の複製は、オブジェクトの時期尚早な回収を防止する。さらに、外部参照がネイティブ側に存在すると判定された場合、符号１０１０で示されるように、ネイティブピアから管理ピアに対する参照を強めることができる。
【００５３】
次に図１１を参照すると、本明細書で開示されるアーキテクチャを実行するように動作可能なコンピュータのブロック図が示されている。本明細書の様々な態様について追加の状況を与えるために、図１１および以下の議論は、本明細書の様々な態様を実装することのできる適切なコンピューティング環境１１００の簡潔で一般的な説明を与えることが意図される。上記では、１つまたは複数のコンピュータ上で実行することのできるコンピュータ実行可能命令の一般的状況で本明細書が説明されたが、本明細書を、他のプログラムモジュールと組み合わせて、かつ／またはハードウェアとソフトウェアの組合せとして実装することもできることを当業者は理解されよう。
【００５４】
一般に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造などを含む。さらに、１つまたは複数の関連するデバイスにそれぞれ動作可能に結合することのできる、シングルプロセッサまたはマルチプロセッサコンピュータシステム、ミニコンピュータ、メインフレームコンピュータ、ならびにパーソナルコンピュータ、ハンドヘルドコンピューティングデバイス、マイクロプロセッサベースの、またはプログラム可能なコンシューマエレクトロニクスなどを含む他のコンピュータシステム構成で本発明の方法を実施できることを当業者は理解されよう。
【００５５】
本明細書の図示される態様を、通信ネットワークを介してリンクされるリモート処理デバイスによって一定のタスクが実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールをローカル記憶装置とリモートメモリ記憶装置のどちらにも配置することができる。
【００５６】
コンピュータは通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータでアクセスすることのできる入手可能などんな媒体でもよく、揮発性媒体と不揮発性媒体の両方、取外し可能媒体と取外し不能媒体の両方を含む。例えば、限定はしないが、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納する任意の方法または技術で実装された、揮発性媒体および不揮発性媒体、ならびに取外し可能媒体および取外し不能媒体を含む。コンピュータ記憶媒体は、限定はしないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ、または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気記憶装置、あるいは所望の情報を格納するのに使用することができ、コンピュータでアクセスすることのできる他の任意の媒体を含む。
【００５７】
通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波や他のトランスポート機構などの被変調データ信号で具体化し、通信媒体は任意の情報伝送媒体を含む。「被変調データ信号」という用語は、その特徴のうちの１つまたは複数が、信号内に情報を符号化するように設定または変更される信号を意味する。例えば、限定はしないが、通信媒体は、有線ネットワークやダイレクトワイヤード接続などの有線媒体と、音響、ＲＦ、赤外線、他のワイヤレス媒体などのワイヤレス媒体とを含む。上記の任意の組合せもコンピュータ可読媒体の範囲内に含まれる。
【００５８】
図１１を再び参照すると、本明細書の様々な態様を実装する例示的環境１１００はコンピュータ１１０２を含み、コンピュータ１１０２は、処理装置１１０４、システムメモリ１１０６、およびシステムバス１１０８を含む。システムバス１１０８は、処理装置１１０４に、限定はしないがシステムメモリ１１０６を含むシステム構成要素を結合する。処理装置１１０４は、様々な市販のプロセッサのいずれでもよい。デュアルマイクロプロセッサおよび他のマルチプロセッサアーキテクチャも処理装置１１０４として使用することができる。
【００５９】
システムバス１１０８は、様々な市販のバスアーキテクチャのいずれかを使用する（メモリコントローラを備え、または備えない）メモリバス、周辺バス、およびローカルバスにさらに相互接続することのできるいくつかのタイプのバス構造のいずれでもよい。システムメモリ１１０６は、読取り専用メモリ（ＲＯＭ）１１１０およびランダムアクセスメモリ（ＲＡＭ）１１１２を含む。基本入出力システム（ＢＩＯＳ）が、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭなどの不揮発性メモリ１１１０内に格納され、ＢＩＯＳは、起動時などにコンピュータ１１０２内の要素間で情報を転送する助けとなる基本ルーチンを含む。ＲＡＭ１１１２はまた、データをキャッシュするスタティックＲＡＭなどの高速ＲＡＭをも含むことができる。
【００６０】
コンピュータ１１０２は、内部ハードディスクドライブ（ＨＤＤ）１１１４（例えば、ＥＩＤＥ、ＳＡＴＡ）と、（例えば、取外し可能ディスケット１１１８に対して読み書きするための）磁気フロッピーディスクドライブ（ＦＤＤ）１１１６と、（例えば、ＣＤ−ＲＯＭディスク１１２２を読み取り、あるいはＤＶＤなどの他の大容量光学媒体に対して読み書きするための）光ディスクドライブ１１２０をさらに含み、内部ハードディスクドライブ１１１４を、外部の適切なシャーシ（図示せず）内で使用するように構成することもできる。ハードディスクドライブ１１１４、磁気ディスクドライブ１１１６、および光ディスクドライブ１１２０を、それぞれハードディスクドライブインターフェース１１２４、磁気ディスクドライブインターフェース１１２６、および光学ドライブインターフェース１１２８によってシステムバス１１０８に接続することができる。外部ドライブ実装のためのインターフェース１１２４は、ユニバーサルシリアルバス（ＵＳＢ）技術とＩＥＥＥ１３９４インターフェース技術の少なくとも一方または両方を含む。他の外部ドライブ接続技術は、本明細書の企図内にある。
【００６１】
ドライブおよびその関連するコンピュータ可読媒体は、データ、データ構造、コンピュータ実行可能命令などの不揮発性ストレージを実現する。コンピュータ１１０２について、ドライブおよび媒体は、適切なデジタルフォーマットでの任意のデータのストレージに対処する。上記のコンピュータ可読媒体の説明は、ＨＤＤと、取外し可能磁気ディスケットと、ＣＤやＤＶＤなどの取外し可能光学媒体を参照するが、ｚｉｐドライブ、磁気カセット、フラッシュメモリカード、カートリッジなどの、コンピュータで読取り可能な他のタイプの媒体も例示的動作環境で使用することができ、さらに、そのような任意の媒体は、本明細書の方法を実施するコンピュータ実行可能命令を含むことができることを当業者は理解されたい。
【００６２】
オペレーティングシステム１１３０、１つまたは複数のアプリケーションプログラム１１３２、他のプログラムモジュール１１３４、およびプログラムデータ１１３６を含むいくつかのプログラムモジュールをドライブおよびＲＡＭ１１１２内に格納することができる。オペレーティングシステム、アプリケーション、モジュール、および／またはデータのうちのすべてまたは一部をＲＡＭ１１１２内にキャッシュすることもできる。本明細書を、様々な市販のオペレーティングシステムまたはオペレーティングシステムの組合せと共に実装できることを理解されたい。
【００６３】
ユーザは、１つまたは複数の有線／ワイヤレス入力装置、例えばキーボード１１３８、およびマウス１１４０などのポインティングデバイスを介してコンピュータ１１０２にコマンドおよび情報を入力することができる。他の入力装置（図示せず）は、マイクロフォン、ＩＲリモートコントロール、ジョイスティック、ゲームパッド、スタイラスペン、タッチスクリーン等を含むことができる。上記および他の入力装置はしばしば、システムバス１１０８に結合される入力装置インターフェース１１４２を介して処理装置１１０４に接続されるが、パラレルポート、ＩＥＥＥ１３９４シリアルポート、ゲームポート、ＵＳＢポート、ＩＲインターフェース等の他のインターフェースで接続することもできる。
【００６４】
モニタ１１４４または他のタイプのディスプレイ装置も、ビデオアダプタ１１４６などのインターフェースを介してシステムバス１１０８に接続される。モニタ１１４４に加えて、コンピュータは通常、スピーカ、プリンタなどの他の周辺出力装置（図示せず）を含む。
【００６５】
コンピュータ１１０２は、リモートコンピュータ１１４８などの１つまたは複数のリモートコンピュータに対する有線通信および／またはワイヤレス通信を介する論理接続を使用して、ネットワーク環境で動作することができる。リモートコンピュータ１１４８は、ワークステーション、サーバーコンピュータ、ルータ、パーソナルコンピュータ、ポータブルコンピュータ、マイクロプロセッサベースのエンターテイメントアプライアンス、ピアデバイス、または他の共通ネットワークノードでよく、通常はコンピュータ１１０２に関して説明した要素のうちの多くまたはすべてを含むが、図を簡潔にするために、メモリ／記憶装置１１５０のみが示されている。図示される論理接続は、ローカルエリアネットワーク（ＬＡＮ）１１５２および／またはより大規模なネットワーク、例えば広域ネットワーク（ＷＡＮ）１１５４に対する有線／ワイヤレス接続性を含む。そのようなＬＡＮおよびＷＡＮネットワーキング環境は、オフィスおよび会社で一般的なものであり、イントラネットなどの企業全体のコンピュータネットワークを容易にし、それらのすべては、グローバル通信ネットワーク、例えばインターネットに接続することができる。
【００６６】
ＬＡＮネットワーキング環境で使用されるとき、コンピュータ１１０２は、有線および／またはワイヤレス通信ネットワークインターフェースまたはアダプタ１１５６を介してローカルネットワーク１１５２に接続される。アダプタ１１５６は、ＬＡＮ１１５２に対する有線通信またはワイヤレス通信を容易にすることができ、ＬＡＮ１１５２はまた、ワイヤレスアダプタ１１５６と通信するためにＬＡＮ１１５２上に配置されたワイヤレスアクセスポイントをも含むことができる。
【００６７】
ＷＡＮネットワーキング環境で使用されるとき、コンピュータ１１０２は、モデム１１５８を含むことができ、またはＷＡＮ１１５４上の通信サーバーに接続され、またはインターネットなどによってＷＡＮ１１５４を介して通信を確立する他の手段を有する。モデム１１５８は内蔵または外付けの有線装置またはワイヤレス装置でよく、シリアルポートインターフェース１１４２を介してシステムバス１１０８に接続される。ネットワーク環境では、コンピュータ１１０２に関して示されるプログラムモジュールまたはその一部を、リモートメモリ／記憶装置１１５０内に格納することができる。図示されるネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段を使用できることを理解されよう。
【００６８】
コンピュータ１１０２は、ワイヤレス通信に動作可能に配置された任意のワイヤレス装置またはエンティティ、例えばプリンタ、スキャナ、デスクトップおよび／またはポータブルコンピュータ、ＰＤＡ、通信衛星、ワイヤレス検出可能タグに関連する任意の装置または場所（例えば、キオスク、ニューススタンド、化粧室）、および電話と通信するように動作可能である。これは、少なくともＷｉ−ＦｉおよびBluetooth（登録商標）ワイヤレス技術を含む。したがって、通信は、従来型ネットワークの場合と同じく、所定の構造でよく、または単に、少なくとも２つの装置間のアドホック通信でよい。
【００６９】
Ｗｉ−ＦｉすなわちWireless Fidelityは、ワイヤなしに自宅、ホテルの部屋内のベッド、または職場の会議室からインターネットへの接続を可能にする。Ｗｉ−Ｆｉは、そのような装置、例えばコンピュータが基地局の範囲内の任意の場所の屋内および屋外でデータを送受信することを可能にする、携帯電話で使用されるのと同様のワイヤレス技術である。Ｗｉ−Ｆｉネットワークは、ＩＥＥＥ８０２．１１（ａ、ｂ、ｇなど）と呼ばれる無線技術を使用して、セキュアで、信頼性が高く、高速なワイヤレス接続性を実現する。Ｗｉ−Ｆｉネットワークを使用して、コンピュータを互いに、インターネットに対して、および（ＩＥＥＥ８０２．３またはイーサネット（登録商標）を使用する）有線ネットワークに対して接続することができる。Ｗｉ−Ｆｉネットワークは、アンライセンスの２．４ＧＨｚおよび５ＧＨｚ無線帯域で、例えば１１Ｍｂｐｓ（８０２．１１ａ）または５４Ｍｂｐｓ（８０２．１１ｂ）のデータ転送速度で動作し、または両方の帯域（デュアルバンド）を含む製品と共に動作し、したがって、ネットワークは、多くのオフィスで使用される１０ＢａｓｅＴ有線イーサネット・ネットワークと同様の現実世界性能を実現することができる。
【００７０】
上記で説明したものは、本明細書の例を含む。もちろん、本明細書を説明するために、構成要素または方法の想像できるあらゆる組合せを説明することは不可能であるが、本明細書の多数の別の組合せおよび置換が可能であることを当業者は理解することができる。したがって、本明細書は、特許請求の範囲の要旨および範囲に包含されるすべての変更、修正、および変形を含むものとする。さらに、「includes」という用語が詳細な説明または特許請求の範囲で使用される範囲で、こうした用語は、「comprising」という用語と同様に、包含的なものであるものとする。「comprising」は、使用されるときに、請求項では移行語として解釈されるからである。
【図１】
0005452474.tif 000002
【図２】
0005452474.tif 000003
【図３】
0005452474.tif 000004
【図４Ａ】
0005452474.tif 000005
【図４Ｂ】
0005452474.tif 000006
【図４Ｃ】
0005452474.tif 000007
【図４Ｄ】
0005452474.tif 000008
【図５Ａ】
0005452474.tif 000009
【図５Ｂ】
0005452474.tif 000010
【図６】
0005452474.tif 000011
【図７】
0005452474.tif 000012
【図８Ａ】
0005452474.tif 000013
【図８Ｂ】
0005452474.tif 000014
【図９】
0005452474.tif 000015
【図１０】
0005452474.tif 000016
【図１１】
0005452474.tif 000017