(57)【要約】  ファイルシステムにおけるオブジェクトのための参照カウンタの完全性をチェックする方法が開示される。一意識別子が、オブジェクトを参照する参照に関連付けられることができる。参照チェックがオブジェクトに関連付けられ、オブジェクトを参照するいかなる参照も追加される前、所定初期値に設定されることができる。オブジェクトを参照する新しい参照が追加されるとき、参照カウンタが１だけ増やされ、新しい参照に関連付けられた識別子が参照チェックに対して加算される。オブジェクトを参照する既存の参照が除去されようとするとき、参照カウンタは１だけ減らされ、既存の参照に関連付けられた識別子は参照チェックから減算される。参照カウンタがゼロであるときに参照チェックが初期値に等しくない場合、エラーメッセージがファイルシステムに送られる。
2016520910.tif 000002
【特許請求の範囲】
【請求項１】
ファイルシステムにおけるオブジェクトの参照カウンタの完全性をチェックする方法であって、当該方法は、
前記オブジェクトに参照チェックを関連付けるステップであり、前記参照チェックは、前記オブジェクトを参照するいかなる参照も追加される前、所定初期値に設定される、ステップと、
前記オブジェクトを参照する各参照に一意識別子を関連付けるステップと、
前記オブジェクトに関連付けられた参照チェックに対して、参照に関連付けられた一意識別子を加算し及び減算する２項演算のペアを決定するステップと、
を含み、
前記オブジェクトを参照する新しい参照が追加されることに応答して、当該方法は、
前記参照カウンタを１だけ増やすステップと、
前記参照チェックに対して、前記新しい参照に関連付けられた一意識別子を加算するステップと、
をさらに含み、
前記オブジェクトを参照する既存の参照が除去されることに応答して、当該方法は、
前記オブジェクトの参照カウンタを１だけ減らすステップと、
前記参照チェックから、前記既存の参照に関連付けられた一意識別子を減算するステップと、
前記参照カウンタがゼロに等しいと決定するステップと、
前記参照チェックが前記所定初期値に等しいと決定するステップと、
前記参照チェックが前記所定初期値に等しくない場合、前記ファイルシステムにエラーメッセージを送るステップと、
をさらに含む、
方法。
【請求項２】
前記オブジェクトにおいて参照している参照に関連付けられた一意識別子は、前記オブジェクトのハッシュを圧縮することによって決定される、請求項１に記載の方法。
【請求項３】
前記オブジェクトのハッシュを圧縮することは、前記オブジェクトのハッシュの先頭６４ビットを切り詰めることを含む、請求項２に記載の方法。
【請求項４】
前記オブジェクトのハッシュはハッシュ関数によって決定される、請求項２に記載の方法。
【請求項５】
前記ハッシュ関数はＳＨＡファミリーの暗号学的ハッシュ関数の１つである、請求項４に記載の方法。
【請求項６】
前記ハッシュ関数はＴｉｇｅｒハッシュ関数の１つである、請求項４に記載の方法。
【請求項７】
前記加算の２項演算は結合性及び可換性を有する、請求項１に記載の方法。
【請求項８】
前記減算の２項演算（［−］）は、前記加算の２項演算（［＋］）を用いて、任意の一意識別子ａ、ｂ及びｃについて、
ａ［＋］ｂ＝ｃ，
ｃ［−］ｂ＝ａ
の式により定義される、請求項１に記載の方法。
【請求項９】
前記加算の２項演算は規則的な整数加算である、請求項１に記載の方法。
【請求項１０】
前記加算の２項演算はビット単位のＸＯＲ演算である、請求項１に記載の方法。
【請求項１１】
前記オブジェクトの参照カウンタが１に等しいと決定するステップと、
一組のあり得る参照を受け取るステップと、
前記参照カウンタが１に等しい場合、前記一組のあり得る参照からの各参照の一意識別子と前記オブジェクトに関連付けられた参照チェックと比較して、前記オブジェクトを参照している可能性が高い参照を決定するステップと、
をさらに含む請求項１に記載の方法。
【請求項１２】
前記オブジェクトの参照カウンタが１より大きいと決定するステップと、
一組のあり得る参照を受け取るステップと、
前記参照カウンタが１より大きい場合、
前記一組のあり得る参照から参照の組み合わせを選択するステップ、
前記参照の組み合わせからの参照に関連付けられた一意識別子の総和を算出するステップ、及び
前記総和と前記オブジェクトの参照チェックとを比較するステップ、
によって、前記オブジェクトを参照する参照のリストを決定するステップと、
をさらに含む請求項１に記載の方法。
【請求項１３】
命令を記憶させた非一時的プロセッサ可読媒体であって、前記命令は、１又は複数のプロセッサにより実行されると、オブジェクトの参照カウンタの完全性をチェックする方法のステップを前記１又は複数のプロセッサに実行させ、前記方法は、
前記オブジェクトに参照チェックを関連付けるステップであり、前記参照チェックは、前記オブジェクトを参照するいかなる参照も追加される前、所定初期値に設定される、ステップと、
前記オブジェクトを参照する各参照に一意識別子を関連付けるステップと、
前記オブジェクトに関連付けられた参照チェックに対して、参照に関連付けられた一意識別子を加算し及び減算する２項演算のペアを決定するステップと、
前記オブジェクトを参照する新しい参照が追加されるとき、
前記参照カウンタを１だけ増やすステップと、
前記参照チェックに対して、前記新しい参照に関連付けられた一意識別子を加算するステップと、
前記オブジェクトを参照する既存の参照が除去されるとき、
前記オブジェクトの参照カウンタを１だけ減らすステップと、
前記参照チェックから、前記既存の参照に関連付けられた一意識別子を減算するステップと、
前記参照カウンタがゼロに等しいと決定するステップと、
前記参照カウンタがゼロに等しい場合、
前記参照チェックが前記所定初期値に等しいと決定するステップと、
前記参照チェックが前記所定初期値に等しくない場合、ファイルシステムにエラーメッセージを送るステップと、
を含む、非一時的プロセッサ可読媒体。
【請求項１４】
前記オブジェクトにおいて参照している参照に関連付けられた一意識別子は、前記オブジェクトのハッシュを圧縮することによって決定される、請求項１３に記載の非一時的プロセッサ可読媒体。
【請求項１５】
前記オブジェクトのハッシュを圧縮することは、前記オブジェクトのハッシュの先頭６４ビットを切り詰めることを含む、請求項１４に記載の非一時的プロセッサ可読媒体。
【請求項１６】
前記オブジェクトのハッシュはハッシュ関数によって決定される、請求項１４に記載の非一時的プロセッサ可読媒体。
【請求項１７】
前記ハッシュ関数はＳＨＡファミリーの暗号学的ハッシュ関数の１つである、請求項１６に記載の非一時的プロセッサ可読媒体。
【請求項１８】
前記ハッシュ関数はＴｉｇｅｒハッシュ関数の１つである、請求項１６に記載の非一時的プロセッサ可読媒体。
【請求項１９】
前記加算の２項演算は結合性及び可換性を有する、請求項１３に記載の非一時的プロセッサ可読媒体。
【請求項２０】
前記減算の２項演算（［−］）は、前記加算の２項演算（［＋］）を用いて、任意の一意識別子ａ、ｂ及びｃについて、
ａ［＋］ｂ＝ｃ，
ｃ［−］ｂ＝ａ
の式により定義される、請求項１３に記載の非一時的プロセッサ可読媒体。
【請求項２１】
前記加算の２項演算は規則的な整数加算である、請求項１３に記載の非一時的プロセッサ可読媒体。
【請求項２２】
前記加算の２項演算はビット単位のＸＯＲ演算である、請求項１３に記載の非一時的プロセッサ可読媒体。
【請求項２３】
前記方法は、
前記オブジェクトの参照カウンタが１に等しいと決定するステップと、
一組のあり得る参照を受け取るステップと、
前記参照カウンタが１に等しい場合、前記一組のあり得る参照からの各参照の一意識別子と前記オブジェクトに関連付けられた参照チェックと比較して、前記オブジェクトを参照している可能性が高い参照を決定するステップと、
をさらに含む、請求項１３に記載の非一時的プロセッサ可読媒体。
【請求項２４】
前記方法は、
前記オブジェクトの参照カウンタが１より大きいことをチェックするステップと、
一組のあり得る参照を受け取るステップと、
前記参照カウンタが１より大きい場合、
前記一組のあり得る参照から参照の組み合わせを選択するステップ、
前記参照の組み合わせからの参照に関連付けられた一意識別子の総和を算出するステップ、及び
前記総和と前記オブジェクトの参照チェックとを比較するステップ、
によって、前記オブジェクトを参照する参照のリストを決定するステップと、
をさらに含む、請求項１３に記載の非一時的プロセッサ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１３年４月２３日に申請された米国仮出願第６１／８１５２１５号の利益を主張する。前述された出願の開示は、本明細書においてすべての目的のために参照により援用される。
【０００２】
本開示は、概してデータ処理に関し、より詳細には参照カウンタ完全性チェックに関する。
【背景技術】
【０００３】
このセクションに記載されるアプローチは追求された可能性があるが、必ずしもこれまでに着想され又は追求されてきたアプローチではない。したがって、その他の方法で示されない限り、このセクションに記載されるアプローチのいずれも、単にこのセクションに含まれることを理由として先行技術と見なすと仮定されるべきではない。
【０００４】
コンピュータシステムにおいて、ランダムアクセスメモリ（ＲＡＭ）、ハードディスクドライブ（ＨＤＤ）又は何らかの他のデータ記憶装置に記憶されるデータは、参照を有するオブジェクトとして通常編成され、上記参照は、オブジェクトを参照している。オブジェクトは、該オブジェクトを指し示す多くの参照を有し得るものであり、逆に言うと、このオブジェクト自体は、他のオブジェクトを指し示す参照を含み得る。
【０００５】
コンピュータメモリ及びハードディスク記憶装置のリソースを効率的に利用するために、所与のオブジェクトが該オブジェクトを参照している何らかの参照を有するか知ることは、重要である。オブジェクトを参照する参照がない場合、このことは、このオブジェクトがもはや使用されておらず、ゆえにオブジェクトデータベースから除去されてもよいことを意味し、オブジェクトにより使用されるコンピュータメモリ又はハードディスクストレージの中のスペースは、非占有としてラベル付けされ、新しいデータオブジェクトにより使用されることができる。
【０００６】
いくつかのコンピュータシステムは、簡易な参照カウント手法を使用して、どれほどの数の参照が所与のオブジェクトを参照しているかを追跡することができる。新しい参照がオブジェクトに追加されるたびに、オブジェクトに関連付けられた参照カウンタが１だけインクリメントされ、相応に、所与のオブジェクトを参照する参照が除去されるたびに、参照カウンタが１だけデクリメントされる。オブジェクトの参照カウンタについての記憶された値がこれまでにゼロに達した場合、このオブジェクトは解放することができ、このオブジェクトが他のオブジェクトを参照している場合、その参照カウンタは順にデクリメントすることができる。こうして、１つのオブジェクトの削除は、解放されるオブジェクトの再帰的なカスケードと参照カウントの広範なデクリメントとを引き起こす可能性がある。したがって、参照の間違ったカウントは、オブジェクトの参照カウンタがゼロになることとオブジェクトの削除とに起因して、大量のデータロスをもたらす可能性がある。
【０００７】
いくつかの状況が、間違った参照カウントを引き起こす可能性がある（例えば、カウンタが正しくインクリメントされていないのにその後デクリメントされる、同じ参照のカウンタが２回以上デクリメントされる、誤ったオブジェクトのカウンタがデクリメントされる、あるいは、参照カウンタが破損している）。こうしたエラーは、データ破損とソフトウェアバグとの双方によって引き起こされる可能性があり、データ破損やソフトウェアバグは、常に起こり得ることである。したがって、間違った参照カウンタに起因したオブジェクトの偶然の削除を防止するさらなる方策が取られるべきである。
【発明の概要】
【０００８】
本発明の概要は、以下で詳細な説明においてさらに説明される概念のうち選択されたものを簡易化された形式で紹介するために提供される。本発明の概要は、請求される対象事項の重要な特徴又は必須の特徴を識別するものではなく、請求される対象事項の範囲の特定を支援するものとして使用されるものでもない。
【０００９】
本明細書に開示される手法は、参照カウントの完全性のチェックに関する。従来の参照カウントは、オブジェクトを参照する新しい参照が追加されるときにオブジェクトの参照カウンタを１だけインクリメントすることと、オブジェクトを参照する既存の参照が削除されるときに参照カウンタを１だけデクリメントすることとを含む。
【００１０】
理論上、本明細書に記載される参照カウントの整合性のチェック法は、下記のとおり実施することができる。オブジェクトを参照するすべての参照の完全なリストが、オブジェクトの存続期間の間に記録され、保持される場合、参照カウンタをチェックすることは簡単であろう。このリストは、各参照に関連付けられた一意識別子を含むことになる。参照を追加することは、参照カウンタをインクリメントし、この参照に関連付けられた一意識別子を記録することになる。参照カウンタをデクリメントするとき、ソフトウェアは、削除される参照の識別子を提供することになる。こうして、オブジェクトに対する新しい参照が削除されようとするたび、その対応する識別子をリストが既に含んでいるかを決定し、この決定に基づいて、参照カウンタをデクリメントするか、あるいはこのデクリメントがインクリメントとマッチしない可能性があるかを判断することは、簡単であろう。上記のマッチしないことは、エラー、ソフトウェアバグ又は破損を示している。
【００１１】
しかしながら、参照カウンタの完全性をチェックするための上記の理論上の手法は、可変である参照の一意識別子のリストに起因して、かなりのさらなる記憶空間及び計算時間を必要とするであろうため、実用的ではない。
【００１２】
いくつかの実施形態において、参照の識別子のリストを保持することを含ませた手法は、識別子が任意の順序で追加され又は除去され得るように数学的に生成された固定サイズ値の算出で概算することができ、いったんすべての識別子が除去されると、この固定サイズ識別子は初期値に戻ることになる。
【００１３】
一意識別子は、様々なハッシュ関数によって生成することができる。ハッシュ関数は各参照について一意の識別子をもたらすことが望ましいが、厳密に必要とはされない。この保証をすることができないハッシュ関数は、単純にいくらかの精度を失い、どの参照がエラー状態にあるかの決定においていくらかの多義性を取り込むおそれがあるが、依然としてソフトウェアバグという根本原因を決定するのに有用であり得る。
【００１４】
いずれにせよ、固定サイズチェック値のデータ破損は多義性をもたらす可能性があることが留意されるべきである。
【００１５】
いくつかの実施形態において、ハッシュ関数は、ＳＨＡ１、ＳＨＡ３などの暗号学的ハッシュである。他の実施形態において、ハッシュ関数はＴｉｇｅｒを含んでもよく、Ｔｉｇｅｒは、６４ビットプラットフォーム上での効率のための暗号学的ハッシュ関数である。Ｔｉｇｅｒハッシュ値のサイズは１９２ビットである。特定のハッシュサイズを仮定するプロトコルとの互換性のために、切り詰められた（Truncated）バージョン（Ｔｉｇｅｒ／１２８及びＴｉｇｅｒ／１６０として知られる）が使用されてもよい。ＳＨＡファミリーとは違い、この切り詰められたバージョンは完全なＴｉｇｅｒ／１９２ハッシュ値の単にプレフィックスであるため、特徴的な初期化値は定義されない。
【００１６】
フルサイズのハッシュを記憶することが、計算時間又は利用可能メモリの観点であまりに高価であるとき、ハッシュ値のサンプルを使用して、識別子の一意性を保証することにおいて精度のいくらかのロスを伴いながら、ハッシュ値をより短い数へと圧縮してもよい。例えば、ハッシュ関数としてＳＨＡ１が使用されるとき、これは１６０ビットの識別子をもたらす。ＳＨＡ１値を、６４ビットなどのコンピュータのネイティブなサイズ型に圧縮することは、より速い計算をもたらす。圧縮は、様々な形態をとってよく、６４ビットのプレフィックス若しくはサフィックス、又はハッシュ値に適用される任意の他の数学的関数をとってもよい。
【００１７】
いくつかの実施形態において、識別子は、ＳＨＡ１ハッシュの６４ビットのプレフィックスであり、上記識別子が、参照カウンタがインクリメントされるときにチェック値に対して加算され、参照カウンタがデクリメントされるときに減算される（注釈：ここで「加算される」及び「減算される」は、正確な数学的定義の加算及び減算を意味する）。
【図面の簡単な説明】
【００１８】
本願実施形態は、限定ではなく例として添付図面の図において図示され、これにおいて、同様の参照は同様の要素を示す。
【図１】例示的なデータオブジェクトと、オブジェクトを参照する参照と、オブジェクトに関連付けられた正しい参照カウンタとを示す。
【図２】例示的なデータオブジェクトと、オブジェクトを参照する参照と、オブジェクトに関連付けられた間違った参照カウンタとを示す。
【図３】例示的なデータオブジェクトと、オブジェクトを参照する参照と、参照のハッシュと、ハッシュのソースと、参照カウンタと、オブジェクトに関連付けられた参照チェックとを示す。
【図４】オブジェクトを参照する新しい参照が追加された後、オブジェクトに関連付けられた参照カウンタ及び参照チェックを変更する方法を示すプロセスフロー図である。
【図５】オブジェクトを参照する既存の参照が除去された後、オブジェクトに関連付けられた参照カウンタ及び参照チェックを変更する方法を示すプロセスフロー図である。
【図６】マシンのコンピューティング装置の概略表現をコンピュータシステムの例示的電子形態において示し、これにおいて、本明細書に論じられる方法論のうち任意の１又は複数をマシンに実行させる命令セットを実行することができる。
【発明を実施するための形態】
【００１９】
下記の詳細な説明は、添付図面に対する参照を含み、添付図面は、詳細な説明の一部をなす。図面は、例示的な実施形態に従って例示を示す。これらの例示的な実施形態は、本明細書において「例」とも呼ばれ、当業者が本願対象事項を実施することを可能にするほど十分に詳細に説明される。本願実施形態は組み合わせられてもよく、他の実施形態が利用されてもよく、あるいは、請求される範囲から逸脱することなく構造的、論理的及び電気的な変更がなされてもよい。それゆえに、下記の詳細な説明は限定的な意味でとられるべきではなく、上記範囲は別記される請求項とその均等物とによって定義される。本文献において、特許文献に一般的であるとおり、用語「一の（“a”，“an”）」は、１又は２以上を含むように使用される。本文献において、用語「又は」は、非排他的な「又は」を指すように使用され、したがって、「Ａ又はＢ」は、他に示されない限り、「ＢでなくＡ」と「ＡでなくＢ」と「Ａ及びＢ」とを含む。
【００２０】
本明細書に開示される実施形態の手法は、様々なテクノロジーを使用して実施されてよい。例えば、本明細書に説明される方法は、コンピュータシステム上で実行されるソフトウェアにおいて、あるいは、マイクロプロセッサ若しくは他の専用に設計された特定用途向け集積回路（ＡＳＩＣ）の組み合わせ、プログラム可能ロジック装置、又はこれらの様々な組み合わせを利用するハードウェアにおいて実施されてよい。具体的に、本明細書に説明される方法は、ディスクドライブなどの記憶媒体又はコンピュータ可読媒体上に存在する一連のコンピュータ実行可能命令によって実施されてもよい。本明細書に説明される方法は、コンピュータ（例えば、デスクトップコンピュータ、タブレットコンピュータ、ラップトップコンピュータ）、ゲームコンソール、手持ち型ゲーム用装置、携帯電話、スマートフォン、スマートテレビジョンシステムなどによって実施できることに留意すべきである。
【００２１】
本明細書に記載されるテクノロジーは、ファイルシステムにおいてデータオブジェクトに関連付けられた参照カウンタを追跡することに関する。様々な実施形態において、参照カウンタの完全性をチェックする方法が、参照チェックをオブジェクトに関連付けることを含み得る。参照チェックは、オブジェクトを参照するいかなる参照も追加される前、予め定義された初期値に設定される。上記方法は、オブジェクトを参照する各参照に一意識別子を関連付けることに続き得る。上記方法は、データオブジェクトに関連付けられた参照チェックに対して、参照に関連付けられた識別子を加算し及び減算する２項演算のペアを決定することに進み得る。オブジェクトを参照する新しいオブジェクト参照が追加されるとき、上記方法は、参照カウンタを１だけ増やし、参照チェックに対して新しい参照に関連付けられた一意識別子を追加することを含み得る。オブジェクトを参照する既存の参照が除去されるとき、上記方法は、オブジェクトの参照カウンタを１だけ減らし、参照チェックから既存の参照に関連付けられた一意識別子を減算することを含み得る。上記方法はさらに、参照カウンタがゼロであるかを決定することに進み得る。参照カウンタがゼロに等しい場合、上記方法は、参照チェックが所定初期値に等しいかを決定することを可能にし得る。参照カウンタがゼロであると同時に参照チェックが所定初期値に等しくない場合、上記方法は、ファイルシステムに対してエラーメッセージを送信することを含み得る。
【００２２】
ファイルシステムにおいて、データオブジェクトの存続期間の間、オブジェクトに関連付けられる参照カウンタがある。このカウンタは、ファイルシステムの中のいくつの他のオブジェクトがこのオブジェクトを参照しているかを示す。図１は、データオブジェクトＤとこのオブジェクトＤを参照する３つの参照Ａ、Ｂ及びＣとの一例を示している。オブジェクトＤに関連付けられた参照カウンタＲＣは、３に等しい。
【００２３】
何らかのファイルシステムの失敗（例えば、コンピュータの不整合な停止及び開始、又はソフトウェアバグ）に起因して、データオブジェクトの参照カウンタが間違っている場合がある。いくつかの状況において、参照カウンタは、オブジェクトを参照する参照の数より少ない数を保有している可能性がある。図２は、参照カウンタにおける不整合の一例を示している。図２において、４つの参照Ａ、Ｂ、Ｃ及びＥがオブジェクトＤを参照している。しかしながら、オブジェクトＥのための参照を加算することに失敗があったため、オブジェクトＤに関連付けられた参照カウンタは、４ではなく３に等しい。このことは、参照Ａ、Ｂ及びＣが除去される場合に参照カウンタがゼロになり、オブジェクトＤがオブジェクトストアから解放される可能性があることを意味する。このことは、オブジェクトＥがＤにアクセスできない状態のままにすることになるが、このオブジェクトはさらに、その参照を決して追加されないオブジェクトでもある。しかしながら、オブジェクトＥが、オブジェクトが開放される前に、その参照を除去しようと誤って試みた場合、このことは、Ａ、Ｂ又はＣに対してデータロスをもたらすであろう。例えば、Ａ及びＢがその参照を除去した場合、参照カウンタを１にすることになる。それから、誤って加算されなかったＥがその参照を除去した場合、このことは、Ｃが依然として参照を有し、Ｃは最初正しくその参照を加算したにもかかわらず、参照カウンタを０の状態にすることになり、Ｄは解放されることになる。こうして、参照チェックがない場合、オブジェクトＣは、オブジェクトＥにより成された誤りのためにデータロスという不利益をもたらされる。
【００２４】
図３に示されるとおり、参照チェック（又は、ＲＥＦＣＨＫ）と呼ばれるさらなるパラメータを、ファイルシステムにおいて各データオブジェクトに関連付けることができる。図３の例において、データオブジェクトＤは、参照Ａ、Ｂ及びＣによって参照されている。オブジェクトＤに関連付けられた参照カウンタＲＣは、３に等しい。オブジェクトＤを参照する各参照（Ａ、Ｂ及びＣ）は一意識別子（ハッシュＡ、ハッシュＢ及びハッシュＣ）を有し、この一意識別子は「オブジェクト識別子」又は「ハッシュ」と呼ばれる。オブジェクトＤの参照チェックは、識別子のソース（sources）と呼ばれる参照オブジェクト識別子の一部に基づいて算出することができる。特定の実施形態において、オブジェクト識別子及び他の参照は、長さにおいて２０バイトであり得る。様々な実施形態において、一意オブジェクト識別子は、様々なハッシュ関数によって生成することができる。いくつかの実施形態において、ハッシュ関数は、ＳＨＡ１、ＳＨＡ３などの暗号学的ハッシュである。他の実施形態において、ハッシュ関数は、Ｔｉｇｅｒ、６４ビットプラットフォーム上での効率のための暗号学的ハッシュ関数を含み得る。特定の実施形態において、識別子のソースは、長さにおいて６４ビットであり得る。いくつかの実施形態において、識別子のソースは、オブジェクト識別子を圧縮することによって得ることができる。特定の実施形態において、識別子のソースは、オブジェクト識別子の先頭６４ビットとして定義することができる。
【００２５】
オブジェクト自身を参照している参照を有さないオブジェクトのための参照チェックは、予め定義された初期値ｉｎｉｔに等しいと仮定される。
【００２６】
いくつかの実施形態において、参照チェックの算出を定義するために、一組のソースについて、加算２項演算［＋］を導入することができる。加算演算は、結合性及び可換性を有さなければならず、換言すると、任意のソースａ、ｂ及びｃについて、下記の
（ａ［＋］ｂ）［＋］ｃ＝ａ［＋］（ｂ［＋］ｃ），
ａ［＋］ｂ＝ｂ［＋］ｃ
が当てはまらなければならない。
【００２７】
加算演算は、減算演算［−］とペアにされる。減算演算［−］は、任意のソースａ、ｂ及びｃについて、下記の一組の式
ａ［＋］ｂ＝ｃ，
ｃ［−］ｂ＝ａ
によって定義される。
【００２８】
いくつかの実施形態において、規則的な（regular）整数の加算及び減算演算を２項演算のペアとして使用して、参照チェックの計算方法を定義することができる。他の実施形態において、論理ＸＯＲ演算が、加算及び減算双方の演算の役割を果たすことができる。
【００２９】
参照チェックを修正するために使用される加算２項演算の結合性及び可換性に起因して、参照カウンタの値は、ソースが加算し又は減算されてきた順序に依存しない。
【００３０】
少なくとも１つの特別な例において、オブジェクトを参照する参照が１つだけあるとき、この参照のソースは、このオブジェクトに関連付けられた参照チェックを使用して識別することができる。すべてのあり得る参照のセットの大域的な分析を通して、上記のことを、参照チェック組み合わせを計算することによって、２又はそれ以上の参照オブジェクトに拡張することが可能である。
【００３１】
図４は、一例示的実施形態に従い、オブジェクトを参照する参照が追加された後、オブジェクトに関連付けられた参照カウンタ及び参照チェック値を変更する方法４００を示すプロセスフロー図である。ステップ４１０において、オブジェクトを参照する新しい参照が追加されるたびに、ステップ４２０において、オブジェクトに関連付けられた参照カウンタが１だけ増やされる。ステップ４３０において、参照チェックは、参照チェックの古い値に対して適用される加算２項演算の結果として設定され、参照のハッシュのソースが加算される。
【００３２】
図５は、一例示的実施形態に従い、オブジェクトを参照する既存の参照が除去された後、オブジェクトに関連付けられた参照カウンタ及び参照チェック値を変更する方法５００を示すプロセスフロー図である。ステップ５１０において、オブジェクトを参照する参照が除去されるたびに、ステップ５２０において、オブジェクトに関連付けられた参照カウンタが１だけ減らされる。ステップ５３０において、参照のソースは、減算２項演算を使用して参照チェックから減算される。
【００３３】
ステップ５４０において、方法５００は、オブジェクトの参照カウンタがゼロであるかをチェックすることに進み得る。参照カウンタがゼロである場合、オブジェクトストアからオブジェクトを削除する前に、ステップ５６０において、参照チェックを関与させたさらなるテストを実行することができる。参照カウンタがゼロであると同時に参照チェックが予め定義された初期値ｉｎｉｔに等しい場合、ステップ５８０において、オブジェクトはオブジェクトストアから安全に解除することができる。
【００３４】
参照カウンタがゼロであり、さらなるテストが参照チェックはｉｎｉｔに等しくないことを示している場合、このことは、参照カウンタが壊れていることを示し、ステップ５７０において、対応するエラーメッセージがファイルシステムに送信される。
【００３５】
いくつかの実施形態において、オブジェクトを参照する一組の参照を個々に追加し及び除去するよりも、上記一組の参照を一度にすべて追加し及び除去することが便利であろう。こうした場合、単一のソースを上記一組の参照に割り当てることができ、オブジェクトに関連付けられた参照カウンタ及び参照チェックを修正するために、１回だけの加算又は減算演算が必要とされることになる。
【００３６】
図６は、マシンのコンピューティング装置の概略表現を、コンピュータシステム６００の例示的電子形態において示しており、これにおいて、本明細書に論じられる方法論のうち任意の１又は複数をマシンに実行させる命令セットを実行することができる。様々な例示的な実施形態において、マシンは、スタンドアロン装置として稼働し、あるいは他のマシンに接続され（例えば、ネットワーク化され）てもよい。ネットワーク化された配置において、マシンは、サーバ‐クライアントネットワーク環境の中でサーバ又はクライアントマシンのキャパシティにおいて、あるいはピアツーピア（又は分散型）ネットワーク環境の中でピアマシンとして稼働してもよい。マシンは、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、パーソナルデジタルアシスタント、セルラー電話、ポータブル音楽プレーヤ（例えば、ＭＰ３（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ  Ａｕｄｉｏ  Ｌａｙｅｒ  ３）プレーヤなどのポータブルハードドライブオーディオ装置）、ゲーム用パッド、ポータブルゲームコンソール、車載コンピュータ、スマートホームコンピュータ、又はマシンが取るべき措置を指定する命令セット（順次の又は別な方法の）を実行する能力がある任意のマシンであってよい。さらに、単一のマシンだけが例示されているが、用語「マシン」は、一の（又は複数の）命令セットを個々に又は連帯して実行して本明細書に論じられる方法論のうち任意の１又は複数を実行するマシンのいかなる集合をも含むとみなされるものとする。
【００３７】
例示的なコンピュータシステム６００は、一のプロセッサ又は複数のプロセッサ６０５（例えば、中央処理ユニット（ＣＰＵ）、グラフィクス処理ユニット（ＧＰＵ）、又は双方）、メインメモリ６１０及びスタティックメモリ６１５を含み、これらは、バス６２０を介して互いに通信する。コンピュータシステム６００は、さらに、ビデオディスプレイユニット６２５（例えば、液晶ディスプレイ（ＬＣＤ）又は陰極線管（ＣＲＴ））を含んでよい。コンピュータシステム６００は、さらに、英数字入力装置（例えば、キーボード）、カーソル制御装置（例えば、マウス）、マイクロフォン、デジタルカメラ、ビデオカメラなどの、少なくとも１つの入力装置６３０を含む。コンピュータシステム６００は、さらに、ディスクドライブユニット６３５、信号生成装置６４０（例えば、スピーカ）、及びネットワークインタフェース装置６４５を含む。
【００３８】
ディスクドライブユニット６３５には、非一時的コンピュータ可読媒体６５０を含み、これに、本明細書に記載された方法論又は機能のうち任意の１又は複数を具現化し、あるいはその任意の１又は複数によって利用される１又は複数の命令セット及びデータ構造（例えば、命令６５５）が記憶される。命令６５５は、コンピュータシステム６００による該命令の実行の間、メインメモリ６１０内及び／又はプロセッサ６０５内に、完全に又は少なくとも部分的に存在してもよい。メインメモリ６１０とプロセッサ６０５とは、マシン可読媒体を構成してもよい。
【００３９】
命令６５５は、さらに、複数の周知のトランスファープロトコル（例えば、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、ＣＡＮ、シリアル及びＭｏｄｂｕｓ）のうちいずれかを利用するネットワークインタフェース装置６４５を介してネットワーク６６０を通じて送られ、あるいは受信されてもよい。例えば、ネットワーク６６０は、インターネット、ローカルイントラネット、ＰＡＮ（パーソナルエリアネットワーク）、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）、ＭＡＮ（メトロポリタンエリアネットワーク）、仮想プライベートネットワーク（ＶＰＮ）、ストレージエリアネットワーク（ＳＡＮ）、フレームリレー接続、高度インテリジェントネットワーク（ＡＩＮ）接続、同期光ネットワーク（ＳＯＮＥＴ）接続、デジタルＴ１、Ｔ３、Ｅ１若しくはＥ３回線、デジタルデータサービス（ＤＤＳ）接続、ＤＳＬ（デジタル加入者回線）接続、イーサネット接続、ＩＳＤＮ（統合サービスデジタル通信網）回線、ケーブルモデム、ＡＴＭ（非同期転送モード）接続、又はＦＤＤＩ（光ファイバ分散データインターフェース）若しくはＣＤＤＩ（銅線分散データインターフェース）接続のうち、１又は複数を含んでよい。さらに、通信は、ＧＰＲＳ（Ｇｅｎｅｒａｌ  Ｐａｃｋｅｔ  Ｒａｄｉｏ  Ｓｅｒｖｉｃｅ）、ＧＳＭ（Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）、ＣＤＭＡ（符号分割多重アクセス）若しくはＴＤＭＡ（時分割多重アクセス）、セルラーフォンネットワーク、ＧＰＳ、ＣＤＰＤ（セルラーデジタルパケットデータ）、ＲＩＭ（リサーチ・イン・モーション社）デュプレックス・ページング・ネットワーク、Ｂｌｕｅｔｏｏｔｈ無線、又はＩＥＥＥ８０２．１１ベースの無線周波数ネットワークを含む、様々なワイヤレスネットワークのいずれかに対するリンクを含んでもよい。
【００４０】
コンピュータ可読媒体６５０は、一例示的な実施形態において単一の媒体であるように示されているが、用語「コンピュータ可読媒体」は、１又は複数の命令セットを記憶する単一の媒体又は複数の媒体（例えば、集中型若しくは分散型のデータベース、並びに／又は関連するキャッシュ及びサーバ）を含むとみなされるべきである。用語「コンピュータ可読媒体」は、マシンによる実行のために命令セットを記憶し、エンコードし又は運ぶ能力があってマシンに本出願に係る方法論のうち任意の１又は複数を実行させる任意の媒体、あるいは、上記の命令セットによって利用される又は上記の命令セットに関連付けられたデータ構造を記憶し、エンコードし又は運ぶ能力がある任意の媒体を含むともみなされるものとする。用語「コンピュータ可読媒体」は、したがって、これらに限定されないが、ソリッドステートメモリと光の及び磁気の媒体とを含むとみなされるものとする。こうした媒体には、制限なく、ハードディスク、フロッピーディスク、フラッシュメモリカード、デジタルビデオディスク（ＤＶＤ）、ＲＡＭ、読取専用メモリ（ＲＯＭ）などを含んでもよい。
【００４１】
本明細書に説明される例示的な実施形態は、ハードウェアにおいて又はソフトウェアとハードウェアとの組み合わせにおいてコンピュータ上にインストールされたコンピュータ実行可能命令（例えば、ソフトウェア）を含む稼働環境で実施することができる。コンピュータ実行可能命令は、コンピュータプログラミング言語で書かれてもよく、あるいはファームウエアロジックで具現化されてもよい。広く認められた標準に合うプログラミング言語で書かれる場合、上記の命令は、様々なハードウェアプラットフォーム上で、及び様々なオペレーティングシステムに対するインタフェースのために実行されてよい。これらに限定されないが、本願方法を実施するためのコンピュータソフトウェアプログラムは、任意の数の適切なプログラミング言語、例えば、ハイパーテキストマークアップ言語（ＨＴＭＬ）、ダイナミックＨＴＭＬ、拡張マークアップ言語（ＸＭＬ）、拡張スタイルシート言語（ＸＳＬ）、文書スタイル意味指定言語（ＤＳＳＳＬ）、カスケーディングスタイルシート（ＣＳＳ）、同期マルチメディア統合言語（ＳＭＩＬ）、ワイヤレスマークアップ言語（ＷＭＬ）、ＪａｖａＴＭ、ＪｉｎｉＴＭ、Ｃ、Ｃ＋＋、Ｐｅｒｌ、ＵＮＩＸシェル、ビジュアルベーシック若しくはビジュアルベーシックスクリプト、仮想現実マークアップ言語（ＶＲＭＬ）、ＣｏｌｄＦｕｓｉｏｎＴＭ、又は、他のコンパイラ、アセンブラ、インタプリタ、若しくは他のコンピュータ言語若しくはプラットフォームなどで書かれてよい。
【００４２】
上述のとおり、参照カウンタの完全性をチェックする方法が開示された。本明細書に記載されたテクノロジーは、オブジェクトに対して指し示される参照が除去された場合にエラーを捕らえる能力を提供する。本明細書に記載されたテクノロジーは、さらに、オブジェクトに関連付けられた参照カウンタがゼロである場合に、このオブジェクトをオブジェクトストアから安全に解除することができるかを決定する能力を提供する。
【００４３】
実施形態は、特定の例示的な実施形態を参照して説明されているが、本出願のより広い主旨及び範囲から逸脱することなく様々な修正及び変更が上記の例示的な実施形態に対してなされ得ることが明らかになるであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきである。
【図１】
2016520910.tif 000003
【図２】
2016520910.tif 000004
【図３】
2016520910.tif 000005
【図４】
2016520910.tif 000006
【図５】
2016520910.tif 000007
【図６】
2016520910.tif 000008
【国際調査報告】
2016520910.tif 000009