(57)【特許請求の範囲】
【請求項１】
参照カウントされたアイテム（ＲＣＩ）を高速参照するためのシステムであって、
前記ＲＣＩを参照する第１の高速参照アイテムであって、前記ＲＣＩへの複数の参照を獲得する第１の高速参照アイテムと、
前記第１の高速参照アイテムに関連付けられた高速参照カウント（ＦＲＣ）と、
前記ＦＲＣを確立するように適合された高速参照カウント作成器とを含み、
前記ＦＲＣが確立されたときの前記ＦＲＣの値Ｆは、前記ＲＣＩを参照することを求める後続の参照アイテムが獲得できる、前記ＲＣＩへの参照の数を表し、
前記ＲＣＩを参照することを求める、１つまたは複数の第２の参照アイテムが、前記ＲＣＩへの１つまたは複数の参照を、前記ＦＲＣを使用することによって前記第１の高速参照アイテムから獲得することを特徴とするシステム。
【請求項２】
前記高速参照カウント作成器が前記値Ｆを、前記ＲＣＩへのポインタ内の１つまたは複数のビットに格納することを特徴とする、請求項１に記載のシステム。
【請求項３】
前記ＦＲＣを格納する前記１つまたは複数のビットが連続していることを特徴とする、請求項２に記載のシステム。
【請求項４】
前記ＦＲＣを格納する前記１つまたは複数のビットが連続していないことを特徴とする、請求項２に記載のシステム。
【請求項５】
３つのビットを使用して前記ＦＲＣを格納することを特徴とする、請求項４に記載のシステム。
【請求項６】
前記１つまたは複数の第２の参照アイテムが、前記ＲＣＩへの前記１つまたは複数の参照を、前記第１の高速参照アイテムから、前記第１の高速参照アイテムに関連付けられた前記ＦＲＣの前記値が所定のしきい値Ａよりも大きいときに、選択的に獲得することを特徴とする、請求項１に記載のシステム。
【請求項７】
前記１つまたは複数の第２の参照アイテムが、前記ＲＣＩへの前記１つまたは複数の参照を解放するように動作可能であることを特徴とする、請求項６に記載のシステム。
【請求項８】
前記１つまたは複数の第２の参照アイテムが、前記ＲＣＩを直接デリファレンスすることを特徴とする、請求項７に記載のシステム。
【請求項９】
前記１つまたは複数の第２の参照アイテムが、前記１つまたは複数の参照を、前記１つまたは複数の参照を獲得した前記１つまたは複数の第２の参照アイテムから元の前記第１の高速参照アイテムに戻すことを特徴とする、請求項７に記載のシステム。
【請求項１０】
前記第２の参照アイテムが、データ構造、オブジェクト、処理、または実行のスレッドであることを特徴とする、請求項７に記載のシステム。
【請求項１１】
前記参照カウントされたアイテムが、記憶位置、データ構造、およびオブジェクトのうちの１つであることを特徴とする、請求項１に記載のシステム。
【請求項１２】
前記第１の高速参照アイテムが、データ構造、オブジェクト、処理、または実行のスレッドであることを特徴とする、請求項１に記載のシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にコンピュータプログラミングに関する。より詳細には、本発明は、参照カウントされたアイテムの高速参照に関する。
【０００２】
【従来の技術】
参照カウントは、メモリ管理システムにおいて使用される。参照カウントされたアイテムは、それに対して存在する参照された数のカウントを保つ。参照が存在しないアイテムは、使用可能な空きメモリとして回収することができる。参照カウントは典型的には１のカウントで開始され、各参照が追加されるごとに１ずつ増分され、各参照が解消されるごとに１ずつ減分される。このようなシステムでは、参照カウントがゼロになったとき、このアイテムはもはや必要とされず、再使用することができ、したがって関連付けられたメモリが解放される。正確な参照カウントを維持することは、メモリ管理に重要である。たとえば、参照カウントが、アイテムへの参照がないことを示し、参照カウントされたアイテムを参照するアプリケーションがあるが、参照カウントされたアイテムが削除された場合には、そのアプリケーションが「未解決なポインタ」の問題を経験する可能性があり、あるいは、そのアプリケーションが、もはやそのアプリケーションに関連付けられたアイテムを表さないメモリを読み込まれている可能性がある。さらなる例示として、参照カウントが、アイテムへの参照があったことを示しているが、このアイテムを参照するエンティティ（実体）がなかった場合には、このアイテムは再利用されず、参照カウントされたアイテムが関連付けられたシステムが「メモリリーク」の問題を被る可能性がある。したがって、参照カウントが正確に維持されることを保証することが重要である。したがって、参照カウントが頻繁にロックによって保護され、これにより、一度にただ１つのエンティティのみが参照カウントにアクセスすることを容易にすることで、未解決なポインタおよびメモリリークの問題が軽減される。しかし、ロック機構は、たとえば、２つ以上のエンティティがロックを同時点に獲得することを求めたとき、競合の問題を生じる。ロックを獲得したエンティティ以外のエンティティは待機しなければならず、これによりシステム性能に否定的な影響を与える。
【０００３】
オペレーティングシステム、マルチスレッド（多重系）アプリケーション、およびサーバは、たとえば、しばしば、変更可能なサブデータが関連付けられたデータ構造を維持する。たとえば、コンピュータシステムのユーザがプロファイルを有する可能性があるが、これは１組のアクセス権（たとえば、ファイルを読むことができるが、ファイルに書き込むことができない）を含む。サブデータ（たとえば、アクセス権）にアクセスするには、従来の参照カウント方法では、サブデータへのポインタを保護するロックを獲得し、サブデータへのポインタを取り出し、サブデータに関連付けられた参照カウントを増分し、次いでロックを解除する。したがって、ロックおよびアンロック動作がサブデータの各アクセスについて使用され、これにより、このようなオペレーティングシステム、マルチスレッドアプリケーションおよびサーバの処理速度が、たとえば上に記載した競合の問題により低下する。サブデータにアクセスする並行プロセッサの数が増加するにつれて、従来のロック、取り出し、増分、ロック解除方法の性能は急速に低下するが、これは、より多くのエンティティがロックを求めて競合するからである。このような従来方法は特に、サブデータが頻繁に読み出されるがめったに変更されないとき、システムリソース（たとえば、ＣＰＵサイクル）を無駄にする。
【０００４】
【発明が解決しようとする課題】
したがって、参照カウントされたアイテムを高速参照するためのシステムおよび方法で、方法の性能がそれほど急速に低下しないものが必要とされる。
【０００５】
以下に、本発明のいくつかの態様についての基本的な理解を提供するために、本発明の簡単な要約を提示する。この要約は、本発明の広範な概要ではない。本発明のキーとなる、あるいは臨界の要素を明らかにすることも、本発明の権利範囲を線引きすることも意図されるものではない。この要約の唯一の意図は、本発明のいくつかの概念を簡単な表現形式において、後に提示するより本発明の詳細な説明の序文として提示することにある。
【０００６】
本発明は、参照カウントされたアイテムを高速参照して、並行プロセッサを使用するマルチスレッドアプリケーションおよび／またはシステムの性能を助長するためのシステムおよび方法を提供する。
【０００７】
【課題を解決するための手段】
本発明では、高速参照アイテムが、参照カウントされたアイテムにおける参照カウントを１より大きい値に確立し、参照カウントされたアイテムへのポインタを確立し、参照カウントに関連付けられたローカル値を格納するが、これは高速参照カウント（ＦＲＣ）として知られている。最初のＦＲＣ値は、参照カウントされたアイテムを参照する参照アイテムの数より大きい。
【０００８】
参照カウントされたアイテムにおける参照の数を１より大きく確立することによって、参照アイテムが、複数の参照を獲得したとみなすことができる。次いで、「エキストラ（臨時の）」参照が、参照カウントされたアイテムへの参照を求める後続のアイテムで使用可能であり、一定の条件下で、このような後続の獲得アイテムが、ロックを獲得し、参照カウントを変更し、ロックを解除することを要求されない。むしろ、後続の獲得アイテムが、高速参照アイテムにおいて使用可能な参照の数を検査し、１つまたは複数の「エキストラ」参照を獲得（たとえば、「盗む／借りる」）ことができる。この方法を使用して参照を獲得するとき、アトミックオペレーション（たとえば、ＩｎｔｅｒｌｏｃｋｅｄＣｏｍｐａｒｅＥｘｃｈａｎｇｅ（））を使用して、高速参照アイテムにおけるＦＲＣを変更して、参照カウントされたアイテムへの参照の正確なカウントの維持を容易にする。複数の参照を獲得する高速参照アイテムは、それ自体で使用可能な参照について検査することができ、その獲得された使用可能な参照の１つまたは複数を有することができる。
【０００９】
ＦＲＣを、ポインタにおける可変の、あるいは、１つまたは複数のビットに格納することができる。このようなビットは、たとえば、参照カウントされたアイテムがメモリ領域に位置し、アイテムが８バイト境界に合わせられた（たとえば、ポイントタの下位３ビットを解放する）場合、あるいは、ポインタにおける他のビットが使用可能であった場合、使用可能にすることができる。ＦＲＣを格納するために使用されたビットは、ポインタにおいて連続にすることができ、あるいは、これらをポインタ中で分散させることができる。
【００１０】
したがって、このシステムおよび方法は、ロックを獲得し、参照を獲得し、ロックを解除するロックアルゴリズムを使用することなく、参照カウントされたアイテムへの参照を得ることを容易にする。したがって、多数のエンティティが、参照カウントされたアイテムへのロックを獲得することを求めているときに生じる競合の問題による、性能低下が緩和される。
【００１１】
【発明の実施の形態】
前述および関連する本発明の目的を達成するための本発明の実施についての、本発明の例示的な実施形態を、添付の図面に基づき以下に詳述する。ただ、これらの実施形態は、本発明の原理を使用することができる様々な方法のほんの数例を示したものにすぎず、本発明は、このようなすべての形態およびそれらの均等物を含むことを意図するものである。本発明の他の効果および新規な特徴は、以下の本発明の詳細な説明を、図面と共に考察したときに明らかになるであろう。
【００１２】
さて、本発明を、図面を参照して説明し、類似の参照番号を使用して全体で類似の要素を参照する。以下の記載では、本発明の完全な理解を提供するために多数の特定の細部を述べる。しかし、本発明をこれらの特定の細部なしに実施できることは、当業者には明らかであろう。別の例では、よく知られた構造およびデバイスを、本発明の記載を容易にするために、ブロック図の形式において図示する。
【００１３】
最初に図１を参照して、参照カウントされたアイテム１６を高速参照するためのシステム１０を例示する。高速参照アイテム１２および非高速参照アイテム１４を例示する。参照カウントされたアイテム１６は、たとえば、メモリ場所、データ構造、および／またはオブジェクトにすることができる。参照カウントされたアイテム１６は、たとえば、コンピュータユーザプロファイルに関連して使用することができる。プロファイルは、不変データおよび可変データを含む可能性がある。可変データは、たとえば、ファイルの読み取り、書き込みおよび実行に関係する、コンピュータユーザの資格証明書（credential）にすることができる。可変データを、参照カウントされたアイテム１６における参照カウントに関連付けることができる。可変データは変更することができるが、変更の可能性が低かった場合、可変データへの参照のカウントに関連付けられたローカル値が、高速参照アイテム１２におけるキャッシュング（caching）に適している。したがって、可変データへの参照のカウントに関連付けられたローカル値が、他の高速参照アイテム１２および非高速参照アイテム１４で使用可能である。
【００１４】
ここで図２を参照して高速参照アイテム１２を例示するが、これは高速参照カウント３３（ＦＲＣ）を含み、これがＦ参照を表す値を保持し、これらが、参照カウントされたアイテム１６における参照カウント３１に格納された参照のカウントＸに関係する。ＦＲＣ３３を、高速参照カウント作成器３５によって作成することができる。たとえば、オペレーティングシステム参照カウントマネージャが、高速参照カウント作成器３５として機能し、高速参照カウント３３を作成することができる。高速参照カウント作成器３５は、コンピュータに関係したエンティティであって、ハードウェア、ハードウェアおよびソフトウェアの組み合わせ、ソフトウェア、または実行中のソフトウェアとすることができる。たとえば、高速参照カウント作成器３５を、プロセッサ上で動作中の処理、オペレーティングシステムコンポーネント（構成要素）、プロセッサ、オブジェクト、実行可能なもの、実行スレッド（thread）、プログラムおよびコンピュータにすることができる。Ｆの値は最初に、参照カウントされたアイテム１６を参照するアイテムの実際の数より大きい値に設定され、これにより、後続の参照アイテムが高速参照アイテム１２から参照を獲得することを容易にする。図２は、新しい参照アイテム１５も例示し、これは、参照カウントされたアイテム１６への参照を、高速参照アイテム１２から、ＦＲＣ３３を使用することによって獲得しようと試みることができ、したがって、参照カウントされたアイテム１６に関連付けられたロックを獲得かつ解除することに関係付けられた問題を緩和する。たとえば、新しい参照アイテム１５が、ＦＲＣ３３からのカウント値を、参照カウントされたアイテム１６を参照しようとするその試みにおいて利用することができる。したがって、他の参照アイテムによって使用することができるエキストラ参照カウントを有するＦＲＣ３３によって、ＦＲＣ３３が、他の参照アイテムによる、参照カウントされたアイテム１６の高速参照を容易にする。
【００１５】
ここで、図３を参照して、システム１０をより詳細に例示する。参照カウントされたアイテム１６が参照カウント３０を含み、これは、参照カウントされたアイテム１６を参照中であるアイテムの数のカウントである。参照カウントされたアイテム１６は、他の情報、たとえば、データおよび／または方法３８を含むこともできる。高速参照アイテム１２は、参照カウントされたアイテム１６へのポインタ３４を維持し、参照カウント３０に関連付けられたローカル値（これをポインタの一部にすることができる）も維持し、これは、本明細書では高速参照カウント３２（ＦＲＣ）と称するものとする。本発明の一形態によれば、参照カウントされたアイテム１６を作成するとき、高速参照アイテム１２が、参照カウントされたアイテム１６へのロックを獲得し、参照カウント３０を１より大きい値に確立し、ロックを解除する。高速参照アイテム１２が、参照カウントされたアイテム１６を参照するただ１つのアイテムであっても、参照カウント３０を、参照カウントされたアイテム１６を参照するアイテムの実際の数より大きい数で確立することによって、高速参照アイテム１２によって獲得されたエキストラ参照を、ある条件下で、他の高速参照アイテム１２および非高速参照アイテム１４（図１）によって、ロックを獲得かつ解除する要件なしに獲得することができる。このような条件は、高速参照アイテム１２が、参照カウント３０に関連付けられたサブデータにおける値を読み取るが変更しないことを求めたとき、存在する。もう１つのこのような条件は、非高速参照アイテム１４が、参照カウント３０に関連付けられたサブデータにおける値を読み取るが、変更しないことを求めたとき、存在する。高速参照アイテム１２または非高速参照アイテム１４のいずれかが、参照カウント３０に関連付けられたサブデータを変更することを求めた場合、これらのアイテムが従来のロック獲得、アクセス、ロック解除方法を使用する。
【００１６】
しかし、後続の獲得アイテムが、参照カウント３０に関連付けられたデータの読み取りを可能にするための参照を獲得することを求めたとき、次いで、獲得アイテムがプロセッサ３７を使用して、高速参照アイテム１２におけるＦＲＣ３２を検査して、いずれかの参照が、獲得アイテムによって獲得されるために使用可能であるかどうかを決定することができる。１つまたは複数の参照が、獲得されるために使用可能であった場合、獲得アイテムがアトミックオペレーション（たとえば、ＩｎｔｅｒｌｏｃｋｅｄＣｏｍｐａｒｅＥｘｃｈａｎｇｅ（））をプロセッサ３７上で実行させて、ＦＲＣ３２を、獲得アイテムによって獲得された参照の数だけ減らし、それ自体のローカル参照カウントを確立する。ＦＲＣ３２を検査し、アトミック更新動作を実行し、ローカル参照カウントを獲得アイテムにおいて確立することは、プロセッサ３７がロックを獲得かつ解除することなく、実行される。したがって、参照カウントされたアイテム１６への参照を獲得するための従来の方法に関連付けられた競合の問題が緩和される。獲得アイテムが高速参照アイテム１２であった場合、獲得アイテムはＦＲＣ３２を、他の後続の獲得者によって検査かつ操作させることができる。プロセッサ３７は、コンピュータに関係したエンティティであり、ハードウェア、ハードウェアおよびソフトウェアの組み合わせ、ソフトウェア、または実行中のソフトウェアにすることができる。たとえば、プロセッサを、マイクロプロセッサ上で動作中の処理、マイクロプロセッサ、オブジェクト、実行可能なもの、実行スレッド、プログラムおよびコンピュータにすることができる。例示のため、サーバ上で動作中のアプリケーションおよびサーバをプロセッサにすることができる。
【００１７】
ここで、図４を参照して、高速参照カウント５２（ＦＲＣ）を格納するための２つの具体例としての方法を示す。第１の方法では、Ｎビットからなるポインタ４０、および、Ｘビットからなる変数４２が使用される。ポインタ４０は、参照カウントされたアイテム１６（図１）のアドレスを保持し、変数４２は高速参照カウント５２（ＦＲＣ）を保持する。第２の方法では、Ｎビットからなるポインタ５０が、Ｍビットからなるポインタ部分、および、Ｎ−ＭビットからなるＦＲＣ５２部分の２つの部分に区分される。たとえば、ポインタ５０が３２ビットからなることができ、そのうちの２９ビットが、参照カウントされたアイテム１６（図１）のアドレスの格納に割り付けられ、３ビットがＦＲＣ５２を格納するために割り付けられる。Ｎビットのすべてが、参照カウントされたアイテム１６（図１）のアドレスを格納するために必要とされるのではないとき、ポインタ５０のビットを使用してＦＲＣ５２を格納することができる。たとえば、参照カウントされたアイテム１６がメモリ領域に位置し、データアイテムが８バイト境界に合わせられた場合、３２ビットのうちの３ビットは、アドレスを格納するために必要とされない。したがって、この使用可能な３ビットを使用してＦＲＣ５２を格納することができ、値はゼロから７の範囲となる。図４では、ＦＲＣ５２を格納するために使用された３ビットを互いに連続して例示するが、以下で図５に関連して記載するように、これらのビットが連続している必要はない。３２ビットおよび３ビットを上で論じたが、本発明によれば、より多い数あるいは少ない数のビットを使用できることを、当業者には理解されたい。
【００１８】
第１の方法に勝る第２の方法の利点は、ポインタ５０において使用可能なビットを使用することによって、メモリ要件を低減させることができ、処理速度を向上させることができることである。たとえば、第１の方法における２つのメモリルックアップに対して、１つのメモリルックアップを使用して、ポインタ５０におけるアドレスを解決し、ＦＲＣ５２を検索することができる。いずれの場合も、後続の獲得アイテムによってロックを獲得することなく、ＦＲＣ５２を検査して、参照が獲得されるために使用可能であるかどうかを決定することができる。参照が使用可能であり、後続の獲得アイテムが、参照カウント３０（図３）に関連付けられたサブデータを読み取るが変更しないことを求めた場合、後続の獲得アイテムが、ロックを獲得かつ解除せずに、アトミックオペレーションを実行してＦＲＣ５２を変更することができる。したがって、参照カウントされたアイテムへの参照を獲得するためにロックを求める競合に関連付けられた問題が緩和される。
【００１９】
図５は、高速参照カウント６０（ＦＲＣ）を格納するように適合されたポインタ６８を例示し、ＦＲＣ６０を格納するために使用されたビットが連続していない。ポインタ６８はＮビットを有することができる。参照カウントされたアイテム１６（図１）のアドレスを格納するためにＭビットが必要とされた場合、Ｎ−Ｍビットが、ＦＲＣ６０を格納するために使用可能である。図５では、Ｎ−Ｍビット、ＦＲＣA1６２、ＦＲＣA2６４ないしＦＲＣN-M６６が、ポインタ６８中で分散される。Ｎ−Ｍビットを、ポインタ６８において左から右へ配置して例示するが、Ｎ−Ｍビットのいかなる適した配置も本発明において使用できることを、当業者には理解されたい。
【００２０】
図６は、タイミング図であり、参照カウント９０が確立され、操作されるときの、参照カウントされたアイテム７２における参照カウント９０を例示する。高速参照アイテム７０が、参照カウントされたアイテム７２を確立する。参照カウントされたアイテム７２の確立において、高速参照アイテム７０が参照カウント９０および高速参照カウント８０を確立する。参照カウント９０、高速参照カウント８０、および高速参照カウント１００を、４つの異なる時点Ｔ1、Ｔ2、Ｔ3およびＴ4で例示する。Ｔ1は、高速参照アイテム７０が作成され、参照カウントされたアイテム７２を作成する時点に対応する。高速参照アイテム７０が参照カウント９０A1を値８で確立し、８つのアイテムが、参照カウントされたアイテム７２を参照中であることを指示する。しかし、時点Ｔ1で、ただ１つのアイテムのみが、参照カウントされたアイテム７２を参照中である。したがって、参照カウントされたアイテム７２への７つの参照が、参照カウントされたオブジェクト７２に関連付けられたサブデータを読み取るが変更しないことを求める他のアイテムによって、獲得されるために使用可能である。時点Ｔ1で、第２の高速参照アイテム７４はまだ作成されておらず、したがって、高速参照カウント１００A1のための値が定義されていない。時点Ｔ2で、高速参照アイテム７４が作成される。高速参照アイテム７４は、参照カウントされたアイテム７２に関連付けられたサブデータを読み取るが変更しないことを求め、したがって、高速参照アイテム７４が、参照を高速参照アイテム７０から獲得しようと試みることができる。高速参照アイテム７４がＦＲＣ８０A1を検査し、参照が使用可能であることを決定し、ＦＲＣ８０A1のアトミック更新に、ＦＲＣ８０A1を、高速参照アイテム７４が獲得中である１つの参照だけ減らすようにさせる。アトミックオペレーションは、同時に獲得中の他のアイテムがＦＲＣ８０A1を、高速参照アイテム７４と同時に検査かつ変更しないようにすることを容易にするために、必要とされる。アトミックオペレーションが完了したとき、時点Ｔ2で、高速参照アイテム７０がＦＲＣ８０A2を６に減らし、６つの参照が獲得されるために使用可能であることを指示し、高速参照アイテム７４がＦＲＣ１００A2をゼロに設定し、これが、獲得されるために使用可能な参照を有していないことを指示する。参照カウントされたオブジェクト７２における参照カウント９０A2は変更されず、これは、１つの参照が高速参照アイテム７０によって使用中であり、１つの参照が高速参照アイテム７４によって使用中であり、６つの参照が、高速参照アイテム７０から使用可能であるとして列挙され、これらが合計で、参照カウント９０A2において指示された８つの参照となるからである。代替例では、高速参照アイテム７４が複数の参照を高速参照アイテム７０から獲得することができ、この場合、高速参照カウント８０A2が、高速参照アイテム７４によって獲得された参照の数だけ減らされ、高速参照カウント１００A2が、獲得された参照の数より１だけ小さく設定され、高速参照アイテム７４から獲得されるために使用可能な参照の数を指示する。このような代替獲得の後、高速参照アイテム７０および高速参照アイテム７４が、いずれかがなお他のアイテムが獲得するために適切な参照を有しているかどうかを決定するために、検査されるために使用可能である。
【００２１】
時点Ｔ3で、高速参照アイテム７０が、参照カウントされたアイテム７２への関心（interest）を失い、したがって、参照カウント９０A3を１に変更し、６つの「エキストラ」参照がもはや使用可能でないこと、および、高速参照アイテム７０によって消費された１つの参照がもはや使用中でないことを指示する。高速参照アイテム７０がＦＲＣ８０A3をヌル値に設定し、高速参照アイテム７０がもはや参照カウントされたアイテム７２を参照中でないことを指示する。参照カウント９０A3における値１は、正確に、１つのアイテム、高速参照アイテム７４が、参照カウントされたアイテム７２を参照中であることを指示する。
【００２２】
時点Ｔ4で、高速参照アイテム７４が、参照カウントされたアイテム７２への関心を失い、したがって、参照カウント９０A4をゼロに変更し、参照カウントされたオブジェクト７２を参照中のアイテムがないことを指示する。参照カウント９０A4におけるゼロは、参照カウントされたアイテム７２に関連付けられたメモリが、たとえば、ガベージコレクション処理によって再生利用できることを指示する。高速参照アイテム７４がＦＲＣ１００A4をヌル値に設定し、高速参照アイテム７４がもはや参照カウントされたアイテム７２を参照中でないことを指示する。
【００２３】
高速参照アイテム７０が最初に、参照カウントされたアイテム７２において８のカウントを確立したが、１より大きいいかなる適切な値も、参照カウントされたアイテム７２において確立することができ、後続の獲得アイテムがロックの獲得かつ解除をせずに、参照カウントされたアイテム７２への参照を獲得することを容易することができることを、当業者には理解されたい。したがって、ロックを求める競合に関連付けられた問題が緩和される。高速参照アイテム７４が複数の参照を高速参照アイテム７０から獲得できることを、さらに理解されたい。
【００２４】
図７はタイミング図であり、参照カウント１３０が確立され、操作されるときの、参照カウントされたアイテム１１２における参照カウント１３０を例示する。高速参照アイテム１１４が、参照カウントされたアイテム１１２を確立する。参照カウントされたアイテム１１２の確立において、高速参照アイテム１１４が参照カウント１３０および高速参照カウント１２０を確立する。参照カウント１３０、高速参照カウント１２０、および非高速参照カウント１４０を、４つの異なる時点Ｔ1、Ｔ2、Ｔ3およびＴ4で例示する。Ｔ1は、高速参照アイテム１１４が作成され、参照カウントされたアイテム１１２を作成する時点に対応する。高速参照アイテム１１４が参照カウント１３０A1を値８で確立し、８つのアイテムが、参照カウントされたアイテム１１２を参照中であることを指示する。しかし、時点Ｔ1で、ただ１つのアイテムのみが、参照カウントされたアイテム１１２を参照中である。したがって、参照カウントされたアイテム１１２への７つの参照が、参照カウントされたオブジェクト１１２に関連付けられたサブデータを読み取るが変更しないことを求める他のアイテムによって、獲得されるために使用可能である。時点Ｔ1で、非高速参照アイテム１１６はまだ作成されておらず、したがって、非高速参照カウント１４０A1のための値が定義されていない。
【００２５】
時点Ｔ2で、非高速参照アイテム１１６が作成される。非高速参照アイテム１１６は、参照カウントされたアイテム１１２に関連付けられたサブデータを読み取るが変更しないことを求め、したがって、非高速参照アイテム１１６が、参照を高速参照アイテム１１４から獲得しようと試みる。非高速参照アイテム１１６がＦＲＣ１２０A1を検査し、参照が使用可能であることを決定し、ＦＲＣ１２０A1のアトミック更新に、ＦＲＣ１２０A1を、非高速参照アイテム１１６が獲得中である１つの参照だけ減らすようにさせる。アトミックオペレーションは、同時に獲得中の他のアイテムがＦＲＣ１２０A1を、非高速参照アイテム１１６と同時に検査かつ変更しないようにすることを容易にするために、必要とされる。アトミックオペレーションが完了したとき、時点Ｔ2で、高速参照アイテム１１４がＦＲＣ１２０A2を６に減らし、６つの参照が獲得されるために使用可能であることを指示し、非高速参照アイテム１１６がＦＲＣ１４０A2を１に設定し、これが参照を消費中であることを指示する。非高速参照アイテム１１６を使用して参照をそこから獲得することはできず、したがって、その非高速参照カウント１４０は、参照が使用可能であることを指示せず、むしろそれが参照を消費中であることを指示する。参照カウントされたオブジェクト１１２における参照カウント１３０A2は変更されず、これは、１つの参照が高速参照アイテム１１４によって使用中であり、１つの参照が非高速参照アイテム１１６によって使用中であり、６つの参照が、高速参照アイテム１１４から使用可能であるとして列挙され、これらが合計で、参照カウント１３０A2において指示された８つの参照となるからである。
【００２６】
時点Ｔ3で、高速参照アイテム１１４が、参照カウントされたアイテム１１２への関心を失い、したがって、参照カウント１３０A3を１に変更し、６つの「エキストラ」参照がもはや使用可能でないこと、および、高速参照アイテム１１４によって消費された１つの参照がもはや使用中でないことを指示する。高速参照アイテム１１４がＦＲＣ１２０A3をヌル値に設定し、高速参照アイテム１１４がもはや参照カウントされたアイテム１１２を参照中でないことを指示する。参照カウント１３０A3における値１は、正確に、１つのアイテム、非高速参照アイテム１１６が、参照カウントされたアイテム１１２を参照中であることを指示する。
【００２７】
時点Ｔ4で、非高速参照アイテム１１６が、参照カウントされたアイテム１１２への関心を失い、したがって、参照カウント１３０A4をゼロに変更し、参照カウントされたオブジェクト１１２を参照中のアイテムがないことを指示する。参照カウント１３０A4におけるゼロは、参照カウントされたアイテム１１２に関連付けられたメモリが、たとえば、ガベージコレクション処理によって再生利用できることを指示する。非高速参照アイテム１１６がＦＲＣ１４０A4をヌル値に設定し、非高速参照アイテム１１６がもはや参照カウントされたアイテム１１２を参照中でないことを指示する。
【００２８】
高速参照アイテム１１４が最初に、参照カウントされたアイテム１１２において８のカウントを確立したが、１より大きいいかなる適切な値も、参照カウントされたアイテム１１２において確立することができ、後続の獲得アイテムがロックの獲得かつ解除をせずに、参照カウントされたアイテム１１２への参照を獲得することを容易することができることを、当業者には理解されたい。したがって、ロックを求める競合に関連付けられた問題が緩和される。
【００２９】
図８はタイミング図であり、参照カウント１７０が確立され、操作されるときの、参照カウントされたアイテム１５２における参照カウント１７０を例示する。高速参照アイテム１５０が、参照カウントされたアイテム１５２を確立する。参照カウントされたアイテム１５２の確立において、高速参照アイテム１５０が参照カウント１７０および高速参照カウント１６０を確立する。参照カウント１７０、高速参照カウント１６０、および非高速参照カウント１８０を、４つの異なる時点Ｔ1、Ｔ2、Ｔ3およびＴ4で例示する。Ｔ1は、高速参照アイテム１５０が作成され、参照カウントされたアイテム１５２を作成する時点に対応する。高速参照アイテム１５０が参照カウント１７０A1を値８で確立し、８つのアイテムが、参照カウントされたアイテム１５２を参照中であることを指示する。しかし、時点Ｔ1で、ただ１つのアイテムのみが、参照カウントされたアイテム１５２を参照中である。したがって、参照カウントされたアイテム１５２への７つの参照が、参照カウントされたオブジェクト１５２に関連付けられたサブデータを読み取るが変更しないことを求める他のアイテムによって、獲得されるために使用可能である。時点Ｔ1で、非高速参照アイテム１５４はまだ作成されておらず、したがって、非高速参照カウント１６０A1のための値が定義されていない。時点Ｔ2で、非高速参照アイテム１５４が作成される。非高速参照アイテム１５４は、参照カウントされたアイテム１５２に関連付けられたサブデータを読み取るが変更しないことを求め、したがって、非高速参照アイテム１５４が、参照を高速参照アイテム１５０から獲得しようと試みることができる。非高速参照アイテム１５４がＦＲＣ１６０A1を検査し、参照が使用可能であることを決定し、ＦＲＣ１６０A1のアトミック更新に、ＦＲＣ１６０A1を、非高速参照アイテム１５４が獲得中である１つの参照だけ減らすようにさせる。アトミックオペレーションは、同時に獲得中の他のアイテムがＦＲＣ１６０A1を、非高速参照アイテム１５４と同時に検査かつ変更しないようにすることを容易にするために、必要とされる。アトミックオペレーションが完了したとき、時点Ｔ2で、高速参照アイテム１５０がＦＲＣ１６０A2を６に減らし、６つの参照が獲得されるために使用可能であることを指示し、非高速参照アイテム１５４がその非高速参照カウント１８０A2を１に設定し、これが参照を消費中であることを指示する。非高速参照アイテム１５４を使用して参照をそこから獲得することはできず、したがって、その非高速参照カウント１８０は、参照が使用可能であることを指示せず、むしろそれが参照を消費中であることを指示する。参照カウントされたオブジェクト１５２における参照カウント１７０A2は変更されず、これは、１つの参照が高速参照アイテム１５０によって使用中であり、１つの参照が非高速参照アイテム１５４によって使用中であり、６つの参照が、高速参照アイテム１５０から使用可能であるとして列挙され、これらが合計で、参照カウント１７０A2において指示された８つの参照となるからである。
【００３０】
少なくとも２つの方法を、非高速参照アイテム１５４が獲得した参照を、参照カウントされたアイテム１５２における関心を失ったときに解放するために、使用可能である。第１の方法では、非高速参照オブジェクト１５４が、参照カウントされたアイテム１５２を直接デリファレンスする。したがって、時点Ｔ31で、非高速参照アイテム１５４が、参照カウントされたアイテム１５２への関心を失い、参照カウント１７０A3を７に変更し、非高速参照アイテム１５４によって消費された１つの参照がもはや使用中でないことを指示する。非高速参照アイテム１５４がＦＲＣ１８０A3をヌル値に設定し、非高速参照アイテム１５４がもはや参照カウントされたアイテム１５２を参照中でないことを指示する。参照カウント１７０A3における値７は、正確に、１つのアイテム、高速参照アイテム１５０が、参照カウントされたアイテム１５２を参照中であること、および、これが他のアイテムによる獲得のためになお使用可能である６つの「エキストラ」参照を有することを指示する。
【００３１】
もう１つの方法では、非高速参照アイテム１５４が、それが高速参照アイテム１５０から獲得した参照を戻すことができる。したがって、時点Ｔ32で、非高速参照オブジェクトがアトミックオペレーションを実行して、高速参照カウント１６０A4を７に増加し、これが、非高速参照アイテム１５４によって獲得された参照を戻したこと、および、７つの参照が再度獲得のために使用可能であることを指示する。
【００３２】
類似の方法で、少なくとも２つの方法を、高速参照アイテムが、参照カウントされたアイテム１５２をデリファレンスするために、使用可能である。第１の方法では、高速参照アイテムが高速参照カウント１７０を、高速参照アイテムによって解放された参照の数だけ減らすことができる。第２の方法では、高速参照アイテムが、別の高速参照アイテムから獲得された参照の数を戻し、参照カウント１７０を不変のままにすることができる。獲得された参照を、それらの獲得元の高速参照アイテムへ戻す前に、復帰アイテムが、参照の獲得元の高速参照アイテムがなお存在し、戻された参照を有するために使用可能であることを決定する。
【００３３】
高速参照アイテム１５０が最初に、参照カウントされたアイテム１５２において８のカウントを確立したが、いかなる適切な値も、参照カウントされたアイテム１５２において確立することができ、後続の獲得アイテムがロックの獲得かつ解除をせずに、参照カウントされたアイテム１５２への参照を獲得することを容易にすることができることを、当業者には理解されたい。したがって、ロックを求める競合に関連付けられた問題が緩和される。
【００３４】
ここで、図９を参照して、参照カウントされたアイテム２０２を例示する別のタイミング図を提供する。時点Ｔ1で、高速参照アイテム２００が作成され、参照カウントされたアイテム２０２を確立する。高速参照アイテム２００が参照カウント２２０A1を８に設定し、高速参照アイテム２００が、参照カウントされたアイテム２０２への８つの参照を獲得したことを指示する。時点Ｔ1で、高速参照アイテム２０４はまだ作成されておらず、したがって、高速参照カウント２３０A1のための値がない。時点Ｔ1で、高速参照アイテム２００が高速参照カウント２２３A1を７に設定し、これが、獲得されるために使用可能な７つの参照を有することを指示する。
【００３５】
時点Ｔ2は、時点Ｔ1よりも後のある期間にすることができ（たとえば、多数の獲得および／または解放が起こっている可能性がある）、ここで高速参照アイテム２０４が作成される。高速参照アイテム２０４が高速参照カウント２２３を検査し、参照を高速参照アイテム２００から獲得できることを決定する。アトミックオペレーションを実行して高速参照カウント２２３を減らすことにおいて、高速参照オブジェクト２０４が、高速参照カウント２２３A2をゼロにしたことを決定する。したがって、高速参照オブジェクト２０４が追加処理を実行して、参照カウントされたアイテム２０２への追加の参照を獲得することができるかどうかを決定する。さらに参照を獲得することができた場合、高速参照アイテム２０４がこれらの参照を獲得し、これらをそれ自体のために保つか、あるいは、それらを高速参照アイテム２００に割り当てることができる。図９では、高速参照アイテム２０４が、参照カウントされたアイテム２０２で参照が使用可能であることを、参照カウント２２０A2を検査することによって決定する。参照カウント２２０A2が、参照カウントされたアイテム２０２へ許可された参照の最大数より小さいので、高速参照アイテム２０４がロックを獲得し、参照カウント２２０A3をＴ3で８に変更し、追加の参照を高速参照アイテム２００に割り当て、高速参照カウント２２３A3が６に増加される。時点Ｔ4で、高速参照アイテム２０４が、参照カウントされたアイテム２０２への関心を失い、したがって、その参照を高速参照アイテム２００へ戻し、高速参照カウント２２３A4を７に増加する。
【００３６】
高速参照アイテム２０４が、参照カウントされたアイテム２０２への６つの追加の参照を獲得したが、本発明によれば、より多い数あるいは少ない数の参照を高速参照アイテム２０４によって獲得できたことを、当業者には理解されたい。同様に、高速参照アイテム２０４が追加で獲得された参照の６つを高速参照アイテム２００に割り当てたが、より少ない数を割り当てることができ、より多い数を保持できることを理解されたい。
【００３７】
このとき図１０を参照して、本発明の一実施形態中のサンプルデータフローを例示する。高速参照アイテム３００が、参照カウントされたアイテム３０２を作成する。参照カウントされたアイテム３０２が、それに関連付けられた参照カウント３０８を有する。参照カウント３０４のコピーが、高速参照アイテム３００に渡される。高速参照アイテム３００が、参照カウント３０４に関連付けられたローカル値（たとえば、高速参照カウント）を作成し、高速参照データストア３０６に格納する。高速参照カウントデータストア３０６は、参照カウントデータストア３０８に格納された値とは異なる値を含むことができる。他の高速参照アイテム３１０が、参照カウントされたアイテム３０２への参照を獲得することを求めることができる。
【００３８】
本発明の一実施形態によれば、高速参照アイテム３１０が、参照カウント３０６データストアに格納された高速参照カウントを検査する。高速参照アイテム３１０が、参照が獲得されるために使用可能であると決定した場合、高速参照アイテム３１０がアトミックオペレーション（たとえば、ＩｎｔｅｒｌｏｃｋｅｄＣｏｍｐａｒｅＥｘｃｈａｎｇｅ（））を使用して、高速参照カウント３０６データストアにおける使用可能な参照の数を、高速参照アイテム３１０によって獲得された参照の数に等しい量だけ減らすことができる。高速参照アイテム３１０が、獲得された参照の数に関連付けられた値を高速参照カウント３１４データストアに格納する。高速参照アイテム３１０を、参照の利用可能性について順番に検査することができ、これがそれらの「エキストラ」参照を獲得させることができる。
【００３９】
高速参照アイテム３１０が、獲得された参照により処理されたとき、高速参照アイテム３１０がアトミックオペレーションを使用して、高速参照カウント３０６データストアにおける使用可能な参照の数を、高速参照アイテム３１０によって解放された参照の数に等しい量だけ増加することができる。高速参照アイテム３１０はロックを獲得し、参照カウントされたオブジェクト３０２への獲得された参照を、参照カウント３０８データストアに格納された参照カウントを減らすことによって戻し、ロックを解除することもできる。
【００４０】
高速参照アイテム３１０は、１つまたは複数の参照を高速参照アイテム３００から獲得することによって、高速参照カウント３０６データストアに格納された使用可能な参照が使い尽くされたことを決定することもできる。したがって、高速参照アイテム３１０が、参照カウントされたアイテム３０２への追加の参照を獲得しようと試み、追加の参照をそれら自体のために保持するか、あるいは追加の参照を高速参照アイテム３００に割り当てることができる。
【００４１】
非高速参照アイテム３２０も、参照カウントされたアイテム３０２への参照を獲得することを求めることができる。本発明の一実施形態によれば、非高速参照アイテム３２０が、高速参照カウント３０６データストアに格納されたカウントを検査する。非高速参照アイテム３２０が、参照が獲得されるために使用可能であると決定した場合、非高速参照アイテム３２０がアトミックオペレーション（たとえば、ＩｎｔｅｒｌｏｃｋｅｄＣｏｍｐａｒｅＥｘｃｈａｎｇｅ（））を使用して、高速参照カウント３０６データストアにおける使用可能な参照の数を、非高速参照アイテム３２０によって獲得された参照の数に等しい量だけ減らすことができる。非高速参照アイテム３２０は、参照カウントされたアイテム３０２を直接デリファレンスするか、あるいは、獲得された参照を高速参照アイテム３００へ戻すこともできる。
【００４２】
１つの獲得高速参照アイテム３１０および１つの獲得非高速参照アイテム３２０を例示したが、本発明によれば、より多い数あるいは少ない数の高速参照アイテムおよび／または非高速参照アイテムを使用できることを、当業者には理解されたい。
【００４３】
図１ないし図９に関連した考察を通じて、「アイテム」という用語を使用した（たとえば、参照カウントされたアイテム、高速参照アイテム、非高速参照アイテム）。そのように使用されたような「アイテム」という用語の意味には、メモリ場所、データ構造、オブジェクト、処理および／または実行のスレッドが含まれる可能性があるが、それらに限定されないことを、当業者には理解されたい。
【００４４】
上に図示かつ記載した例示的システムに鑑みて、本発明によって実施することができる方法は、図１１および図１２の流れ図を参照すると、よりよく理解されるであろう。説明を簡潔にするため、図１１および図１２の方法を一連のステップとして図示し、記載するが、本発明がこの順序のステップによって限定されず、いくつかのステップが、本発明によれば、異なる順序で、かつ／または、図示かつ本明細書に記載したもの以外のステップと同時に起こることができることを理解されたい。さらに、例示したすべてのステップが、本発明による方法を実施するために必要とされる可能性があるのではない。
【００４５】
ここで図１１を参照して、参照カウントされたアイテムへの参照を獲得するための方法を流れ図にする。ステップ４００で、全体的な初期化が実行される。たとえば、高速参照アイテムを作成することができ、参照カウントされたオブジェクトを作成することができ、参照カウントを、参照カウントされたオブジェクトにおいて確立することができ、参照カウント（たとえば、高速参照カウント（ＦＲＣ））に関連付けられたローカル値を確立することができる。ステップ４１０で、ステップ４００の参照カウントされたアイテムへの参照を獲得することを求めるアイテムが、ＦＲＣを検査して、ステップ４００の高速参照アイテムが、獲得のために使用可能ないずれかの参照を有するかどうかを決定する。
【００４６】
ステップ４２０で、ＦＲＣが所定のしきい値より大きいかどうかに関する決定が行われる。ステップ４２０で決定がＮＯであった場合、ステップ４３０で、ロック、アクセスおよびアンロックを使用して参照を獲得するための従来の方法が実行される。ステップ４４０で、さらにいずれかの獲得者がいるかどうかに関する決定が行われる。ステップ４４０の決定がＹＥＳであった場合、制御がステップ４１０へ戻り、そうでない場合はこの方法が終了する。ステップ４２０の決定がＹＥＳであった場合、ステップ４５０で、獲得アイテムが高速参照アイテムであるかどうかに関する決定が行われる。ステップ４５０の決定がＮＯであった場合、ステップ４６０で、非高速参照アイテムが、ステップ４００の参照カウントされたアイテムへの１つの参照を、アトミックオペレーションを使用してＦＲＣを操作することにより獲得し、その後、制御がステップ４４０へ移る。ステップ４５０の決定がＹＥＳであった場合、ステップ４７０で、獲得高速参照アイテムがＩ個の参照を獲得し、Ｉは整数である。ステップ４７０で、アトミックオペレーションが使用されて、参照の獲得元のアイテムのＦＲＣが操作される。
【００４７】
ステップ４８０で、ステップ４７０の獲得により、参照の獲得元のアイテムにおけるＦＲＣがゼロにされたかどうかに関する決定が行われる。ステップ４８０の決定がＮＯであった場合、制御がステップ４４０へ移る。しかし、ステップ４８０の決定がＹＥＳであった場合、ステップ４９０で、獲得高速参照アイテムが、参照の獲得元の高速参照アイテムのＦＲＣを元通りにしようと試みることができる。たとえば、獲得高速参照アイテムが、ステップ４００の参照カウントされたアイテムの参照カウントを検査し、追加の参照が使用可能かどうかを決定することができる。このような追加の参照が使用可能であった場合、獲得高速参照アイテムが、ロック、アクセスおよびアンロック方法を使用して、追加の参照を獲得することができ、追加の参照を、ＦＲＣがゼロにされた高速参照アイテムに割り当てることができる。別法として、獲得高速参照アイテムが追加の参照を保持することができ、これは続いて他の獲得アイテムによる獲得のために使用可能となる。
【００４８】
ここで、図１２を参照して、参照カウントされたアイテムへの１つまたは複数の参照を解放するための方法を流れ図にする。ステップ５００で、１つまたは複数の参照を解放するアイテムが高速参照アイテムかどうかに関する決定が行われる。ステップ５００の決定がＹＥＳであった場合、ステップ５１０で、解放アイテムが１つまたは複数の参照を、それが参照を獲得した元の高速参照アイテムへ戻したいかどうかに関する決定が行われる。ステップ５１０の決定がＮＯであった場合、ステップ５２０で、解放アイテムが、参照カウントされたアイテムを直接デリファレンスし、その後、制御がステップ５３０へ移る。ステップ５３０で、さらにいずれかの解放アイテムがあるかどうかに関する決定が行われる。ステップ５３０の決定がＹＥＳであった場合、制御がステップ５００へ移り、そうでない場合はこの方法が終了する。ステップ５１０で、決定がＹＥＳであった場合、ステップ５４０で、参照の獲得元の高速参照アイテムがなお存在するかどうかに関する決定が行われる。ステップ５４０の決定がＮＯであった場合、制御がステップ５２０へ移る。そうでない場合、ステップ５４０の決定がＹＥＳであった場合、ステップ５５０で、復帰アイテム（returning item）がＩ個の参照を戻し、Ｉは１以上の整数である。復帰アイテムが、高速参照アイテムから獲得した参照のすべて、あるいはすべてより少ないものを戻すことができる。ステップ５６０で、解放アイテムが、参照カウントされたアイテムへのいずれかの参照を残しているかどうかに関する決定が行われる。決定がＮＯであった場合、解放アイテムがもはや、参照カウントされたアイテムを参照せず、ステップ５７０で、解放アイテムのＦＲＣをＮＵＬＬ値に設定し、これがもはや、参照カウントされたアイテムを参照しないことを指示し、その後、制御がステップ５３０へ移る。ステップ５６０の決定がＹＥＳであった場合、解放アイテムがなお、参照カウントされたアイテムを参照し、したがって制御がステップ５３０へ移る。
【００４９】
ステップ５００の決定がＮＯであった場合、解放アイテムが高速参照アイテムではなく、ステップ５８０で、解放アイテムがその参照を、それが参照を獲得した元の高速参照アイテムへ戻したいかどうかに関する決定が行われる。ステップ５８０の決定がＮＯであった場合、ステップ５９０で、解放アイテムが、参照カウントされたアイテムを直接デリファレンスし、その後、制御がステップ５３０へ移る。ステップ５８０で、決定がＹＥＳであった場合、ステップ６００で、参照の獲得元の高速参照アイテムがなお存在するかどうかに関する決定が行われる。ステップ６００の決定がＮＯであった場合、制御がステップ５９０へ移る。そうでない場合、ステップ６００の決定がＹＥＳであった場合、ステップ６１０で、復帰アイテムがその参照を、それが参照を獲得した元の高速参照アイテムへ戻し、その後、制御がステップ５３０へ移る。
【００５０】
図１３を参照すると、本発明の様々な態様を実施するための例示的環境７１０が、コンピュータ７１２を含み、これは、処理装置７１４、システムメモリ７１６、およびシステムバス７１６を含み、これが、システムメモリ７１６を含む様々なシステム構成要素を処理装置７１４へ結合する。処理装置７１４は、様々な市販のプロセッサのいずれにすることもできる。デュアルマイクロプロセッサおよび他のマルチプロセッサアーキテクチャを、処理装置７１４として使用することもできる。
【００５１】
システムバス７１６を、いくつかのタイプのバス構造のいずれにすることもでき、これには、様々な市販のバスアーキテクチャのいずれかを使用した、メモリバスまたはメモリコントローラ、周辺バス、ローカルバスが含まれる。システムメモリ７１６は、読み取り専用メモリ（ＲＯＭ）７２０およびランダムアクセスメモリ（ＲＡＭ）７２２を含む。基本入出力システム（ＢＩＯＳ）は、起動中など、情報をコンピュータ７１２内の要素の間で転送するための助けとなる基本ルーチンを含み、ＲＯＭ７２０に格納される。
【００５２】
コンピュータ７１２はさらに、ハードディスクドライブ７２４、たとえば、取外し可能ディスク７２８から読み取りあるいはこれに書き込むための磁気ディスクドライブ７２６、および、たとえば、ＣＤ−ＲＯＭディスク７３２を読み取るか、あるいは他の光媒体から読み取りあるいはこれに書き込むための光ディスクドライブ７３０を含む。ハードディスクドライブ７２４、磁気ディスクドライブ７２６、および光ディスクドライブ７３０が、システムバス７１６へ、それぞれハードディスクドライブインターフェイス７３４、磁気ディスクドライブインターフェイス７３６、および光ドライブインターフェイス７３８によって接続される。ドライブおよびそれらの関連付けられたコンピュータ可読媒体が、適切なデジタルフォーマットによるブロードキャストプログラミングの格納用を含む、コンピュータ７１２用の、データ、データ構造、コンピュータ実行可能命令などの不揮発性記憶装置を提供する。上のコンピュータ可読媒体の説明では、ハードディスク、取外し可能磁気ディスクおよびＣＤを参照するが、ｚｉｐドライブ、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジなど、コンピュータにより可読である他のタイプの媒体も例示的動作環境において使用できること、および、さらに、いかなるこのような媒体も、本発明の方法を実行するためのコンピュータ実行可能命令を含むことができることを、当業者には理解されたい。
【００５３】
いくつかのプログラムモジュールをドライブおよびＲＡＭ７２２に格納することができ、これには、オペレーティングシステム７４０、１つまたは複数のアプリケーションプログラム７４２、他のプログラムモジュール７４４およびプログラムデータ７４６が含まれる。例示したコンピュータにおけるオペレーティングシステム７４０は、たとえば、「Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録商標）  ＮＴ」オペレーティングシステムであるが、本発明を、様々な市販のオペレーティングシステム、またはオペレーティングシステムの組み合わせにより実施できることを理解されたい。
【００５４】
ユーザが、コマンドおよび情報をコンピュータ７１２へ、キーボード７４８、および、マウス７５０などのポインティングデバイスを介して入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ＩＲリモートコントロール、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどが含まれる可能性がある。これらおよび他の入力デバイスが、しばしば処理装置７１４へ、システムバス７１６に結合されたシリアルポートインターフェイス７５２を介して接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（「ＵＳＢ」）、ＩＲインターフェイスなど、他のインターフェイスによって接続することもできる。モニタ７５４または他のタイプの表示デバイスも、システムバス７１６へ、ビデオアダプタ７５６などのインターフェイスを介して接続される。モニタ７５４に加えて、コンピュータ７１２は典型的には、スピーカ、プリンタなど、他の周辺出力デバイス（図示せず）を含む。
【００５５】
コンピュータ７１２は、ネットワーク環境において、リモートコンピュータ７５８など、１つまたは複数のリモートコンピュータへの論理接続を使用して動作することができる。リモートコンピュータ７５８は、ワークステーション、サーバコンピュータ、ルータ、パーソナルコンピュータ、マイクロプロセッサに基づいた娯楽電気器具、ピアデバイス、または他の共通ネットワークノードにすることができ、典型的には、コンピュータ７１２に関して記載した要素の多数またはすべてを含むが、簡潔にするため、記憶デバイス７６０のみを例示する。図示の論理接続は、ローカルエリアネットワーク（ＬＡＮ）７６２および広域ネットワーク（ＷＡＮ）７６４を含む。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネットおよびインターネットにおいて一般的である。
【００５６】
ＬＡＮネットワーキング環境において使用するとき、コンピュータ７１２がローカルネットワーク７６２へ、ネットワークインターフェイスまたはアダプタ７６６を介して接続される。ＷＡＮネットワーキング環境において使用するとき、コンピュータ７１２が典型的にはモデム７６８を含み、あるいは、ＬＡＮ上の通信サーバに接続され、あるいは、インターネットなどのＷＡＮ７６４を介して通信を確立するための他の手段を有する。モデム７６８を内部あるいは外部にすることができ、システムバス７１６へ、シリアルポートインターフェイス７５２を介して接続して、たとえば、ＰＯＴＳを介して通信を可能にすることができる。代替実施形態では、モデム７６８を内部あるいは外部にすることができ、システムバス７１６へ、ネットワークアダプタ７６６を介して接続して、たとえば、ＤＳＬおよび／またはモデムを介して通信を可能にすることができる。ネットワーク環境では、コンピュータ７１２に関して示したプログラムモジュール、またはその一部を、リモート記憶デバイス７６０に格納することができる。図示のネットワーク接続は例示的であり、通信リンクをコンピュータの間で確立する他の手段を使用できることを理解されたい。
【００５７】
上に記載したものは、本発明の例示を含むものである。もちろん、考えられるあらゆる組み合わせの構成要素または方法を、本発明を説明するために記載することは可能ではないが、本発明の多数のさらなる組み合わせおよび交換が可能であることは、当業者には理解されよう。したがって、本発明は、添付の特許請求の範囲の技術思想および技術範囲の中に含まれるそのような変更、修正および変形形態をすべて包含することを意図するものである。さらに、「含む（ｉｎｃｌｕｄｅｓ）」という用語が詳細な説明または特許請求の範囲において使用される範囲まで、このような用語が、「具備する（ｃｏｍｐｒｉｓｉｎｇ）」という用語が請求項における従来の言葉として解釈されることに類似した方法において、包含的であることを意図するものである。
【図面の簡単な説明】
【図１】本発明の一実施形態による、アクセスされている、参照カウントされたアイテムを例示する概略的ブロック図である。
【図２】本発明の一実施形態による、高速参照アイテムに関連付けられた高速参照カウントを例示する概略的ブロック図である。
【図３】本発明の一実施形態による、参照カウントされたアイテムへのポインタに格納されている、参照カウントされたアイテムにおける参照カウントに関連付けられたローカル値を例示する図である。
【図４】本発明の一実施形態による、在来のポインタ、および、参照カウントに関連付けられたローカル値を格納するように適合されたポインタを例示する図である。
【図５】本発明の一実施形態による、参照カウントに関連付けられたローカル値を格納するように適合された、別のポインタを例示する図である。
【図６】本発明による、参照カウントされたアイテムにおける参照カウント、および、参照アイテムにおける参照カウントに関連付けられたローカル値を例示するタイミング図である。
【図７】本発明による、参照カウントされたアイテムにおける参照カウント、および、参照アイテムにおける参照カウントに関連付けられたローカル値を例示する、別のタイミング図である。
【図８】本発明による、参照カウントされたアイテムにおける参照カウント、および、参照アイテムにおける参照カウントに関連付けられたローカル値を例示する、別のタイミング図である。
【図９】本発明による、参照カウントされたアイテムにおける参照カウント、および、参照アイテムにおける参照カウントに関連付けられたローカル値を例示する、別のタイミング図である。
【図１０】本発明の一実施形態による、サンプルデータフローを例示するデータフロー図である。
【図１１】本発明の一実施形態による、参照カウントされたアイテムへの参照を獲得するための方法を例示する流れ図である。
【図１２】本発明の一実施形態による、参照カウントされたアイテムへの参照を解放するための方法をさらに例示する流れ図である。
【図１３】本発明によって構成されたシステムにおける例示的動作環境の概略的ブロック図である。
【符号の説明】
１０  システム
１２、７０、７４、１１４、１５０、２００、２０４、３００、３１０
高速参照アイテム
１４、１１６、１５４、３２０  非高速参照アイテム
１５  新しいアイテム
１６、７２、１１２、１５２、２０２、３０２  参照カウントされたアイテム
３０、９０、１３０、１７０、２２０、３０４、３０８、３１２、３２２、
３２４、３３０    参照カウント
３１  Ｘ参照カウント
３２、５２、６０、６２、６４、６６、８０、１００、１２０、１６０、
２２３、２３０、３０６、３１４  高速参照カウント（ＦＲＣ）
３３  Ｆ参照カウント
３４、４０、５０、６８  ポインタ
３５  高速参照カウント作成器
４２  変数
７１４  処理装置
７１６  システムメモリ
７１８  バス
７２０  ＲＯＭ
７２２  ＲＡＭ
７２４  ハードドライブ
７２６  磁気ディスクドライブ
７２８  ディスク
７３０  ＣＤ−ＲＯＭドライブ
７３２  ディスク
７３４  インターフェイス
７３６  インターフェイス
７３８  インターフェイス
７４０  オペレーティングシステム
７４２  アプリケーション
７４４  モジュール
７４６  データ
７４８  キーボード
７５０  マウス
７５２  シリアルポートインターフェイス
７５４  モニタ
７５６  ビデオアダプタ
７５８  リモートコンピュータ
７６０  記憶装置
７６２  ＬＡＮ
７６４  ＷＡＮ
７６６  ネットワークアダプタ
７６８  モデム
【図１】
0004743737.tif 000002
【図２】
0004743737.tif 000003
【図３】
0004743737.tif 000004
【図４】
0004743737.tif 000005
【図５】
0004743737.tif 000006
【図６】
0004743737.tif 000007
【図７】
0004743737.tif 000008
【図８】
0004743737.tif 000009
【図９】
0004743737.tif 000010
【図１０】
0004743737.tif 000011
【図１１】
0004743737.tif 000012
【図１２】
0004743737.tif 000013
【図１３】
0004743737.tif 000014