(57)【要約】      （修正有）【課題】ソースオブジェクトと同じオブジェクト形成から派生するオブジェクトに対して解明することのできるソースオブジェクトへのリンクを確立するための方法及びシステムを提供する。【解決手段】システムがソースオブジェクトを形成する。次いで、ソースオブジェクトの形成を識別するための子孫識別子を発生し、ソースオブジェクトに関連させる。ソースオブジェクトがコピーオブジェクトへコピーされると、ソースオブジェクトに関連した子孫識別子をコピーオブジェクトに関連させる。このように、コピーオブジェクトに関連した子孫識別子は、そのコピーオブジェクトがソースオブジェクトの形式から派生したことを指示する。又、ユーザが移動コマンドを特に使用せずにソースオブジェクトを有効に移動したときを検出し、移動したオブジェクトに、オリジナルオブジェクトに関連した区別された子孫識別情報を関連させる。【選択図】図７
2005044370.tif 000002
【特許請求の範囲】
【請求項１】
ファイルシステムオブジェクトの更新によりファイルシステムオブジェクトに関連した特性を維持するためのコンピュータシステムにおける方法であって、各オブジェクトはネームを有しており、上記方法は、
第１のネームを有する第１ファイルシステムオブジェクトであって、該第１ファイルシステムオブジェクトに関する１つ以上の特性が関連された第１ファイルシステムオブジェクトを記憶し、
上記記憶された第１ファイルシステムオブジェクトのネームが第２のネームに変更されたという指示を受け取り、
上記記憶された第１ファイルシステムオブジェクトのネームが第２のネームに変更されたという指示を受け取った後の所定の時間内に、第２ファイルシステムオブジェクトのネームが第１のネームに変更されたという指示を受け取り、そして
第２ファイルシステムオブジェクトのネームが第１のネームに変更されたという指示を受け取るのに応答して、上記第１ファイルシステムオブジェクトに関連した特性を上記第２ファイルシステムオブジェクトに関連させる、
という段階を備えたことを特徴とする方法。
【請求項２】
情報を記憶する上記段階はファイルシステムオブジェクト識別子を各々記憶する請求項１に記載の方法。
【請求項３】
ファイルシステムオブジェクトに関連したファイルシステムオブジェクト情報を更新により維持するためのコンピュータシステムにおける方法であって、
第１ネームを有する第１ファイルシステムオブジェクトを記憶し、
該第１ファイルシステムオブジェクトに関連して、第１ファイルシステムオブジェクトに関する第１ファイルシステムオブジェクト情報を記憶し、
第１ファイルシステムオブジェクトが削除されたという指示を受け取り、
第１ファイルシステムオブジェクトが削除されたという指示を受け取った後所定時間内に、第１ネームを用いて第２ファイルシステムオブジェクトが形成されたという指示を受け取り、そして
第１ネームを用いて第２ファイルシステムオブジェクトが形成されたという指示を受け取る段階に応答して、第２ファイルシステムオブジェクトに関連して第１ファイルシステムオブジェクトに関する情報を記憶する、
という段階を備えたことを特徴とする方法。
【請求項４】
第１ファイルシステムオブジェクトが削除されたという指示を受け取るのに応答して、最近削除されたファイルシステムオブジェクトのネームのリストに第１ネームを追加し、
上記第１ファイルシステムオブジェクトが削除されたという指示を受け取るのに応答して、第１ネームをハッシュし、
上記ハッシュされた第１ネームを最近削除されたファイルシステムオブジェクトのハッシュされたネームのリストに追加し、
ネームを有するファイルシステムオブジェクトが形成されたという指示を受け取り、
上記形成されたファイルシステムオブジェクトのネームをハッシュし、
上記形成されたオブジェクトの上記ハッシュされたネームを、ハッシュされたネームのリストにおける最近削除されたファイルシステムオブジェクトのハッシュされたネームと比較し、
上記形成されたファイルシステムオブジェクトのハッシュされたネームが、ハッシュされたネームのリストにおける最近削除されたファイルシステムオブジェクトのハッシュされたネームの１つに一致する場合に、上記形成されたファイルシステムオブジェクトのネームをネームのリストにおける最近削除されたファイルシステムオブジェクトのネームと比較し、そして
上記第２ファイルシステムオブジェクトのネームが上記第１ネームと同じである場合に、上記第１ネームを用いて第２オブジェクトが形成されたという指示を与える、
という段階を更に備えた請求項３に記載の方法。
【請求項５】
ファイルシステムオブジェクトの更新によりファイルシステムオブジェクトに関する情報を維持するための装置において、
第１のネームを有する第１ファイルシステムオブジェクト及び第２のネームを有する第２ファイルシステムオブジェクトを記憶するためのメモリと、
上記第１ファイルシステムオブジェクトに関連して、上記第１ファイルシステムオブジェクトに関する情報を記憶するための情報記憶サブシステムと、
第１ファイルシステムオブジェクトのネームが第３ネームに変更されたときを検出し、そしてその所定の時間内に、第２ファイルシステムオブジェクのネームが第１のネームに変更されるときを検出するためのネーム転送モニタと、
第１ファイルシステムオブジェクトのネームが第３のネームに変更されそしてその所定の時間内に第２ファイルシステムオブジェクトのネームが第１のネームに変更されることを上記ネーム転送モニタが検出したときに、第２ファイルシステムオブジェクトに関連して第１ファイルシステムオブジェクトに関する情報を記憶するための情報転送サブシステムと、
を備えたことを特徴とする装置。
【請求項６】
ファイルシステムオブジェクトの更新によりファイルシステムオブジェクトに関する情報を維持するための装置において、
第１のネームを有する第１ファイルシステムオブジェクトを含むファイルシステムオブジェクトを記憶するためのメモリと、
上記第１ファイルシステムオブジェクトに関連して、上記第１ファイルシステムオブジェクトに関する情報を記憶するための情報記憶サブシステムと、
第１ファイルシステムオブジェクトが削除されたときを検出し、そしてその所定の時間内に第１のネームを有する第２ファイルシステムオブジェクトが形成されるときを検出するための削除及び置き換えモニタと、
第１ファイルシステムオブジェクトが削除されそしてその所定の時間内に第１のネームを有する第２ファイルシステムオブジェクトが形成されることを上記削除及び置き換えモニタが検出したときに、第２ファイルシステムオブジェクトに関連して第１ファイルシステムオブジェクトに関する情報を記憶するための情報転送サブシステムと、
を備えたことを特徴とする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、１９９３年６月３０日に出願された米国特許出願第０８／０８５，１８６号の一部継続出願であり、これを参考としてここに援用する。
【０００２】
本発明は、一般に、オブジェクトに対するリンクを追跡するコンピュータ方法及びシステムに係り、より詳細には、オブジェクトに対するリンクを解明する方法及びシステムに係る。
【背景技術】
【０００３】
コンピュータシステムは、情報を含むオブジェクトを構成し、記憶し、検索しそして更新するのにしばしば使用される。ワードプロセッサ又はスプレッドシートのようなアプリケーションプログラムは、通常、これらのアクティビィティを実行するのに使用される。典型的に、ユーザは、アプリケーションプログラムを用いることによってオブジェクトを構成し、キーボードのような入力装置を用いてオブジェクトの全ての内容を入力する。例えば、ユーザは、テキストの多数の序文文節、数値表及びテキストの多数の終結文節を含むレポートオブジェクトを構成すべき場合に、通常は、キーボードを用いて、序文文節、数値の表及び終結文節をタイプ打ちする。
【０００４】
オブジェクトの内容を入力しやすくするために、ユーザは、既存のオブジェクトから、構成されているオブジェクトへ情報をコピーすることができる。このコピー方法は、ユーザが既に入力した情報の再入力を回避できるという利点を有する。例えば、ユーザがレポートオブジェクトを構成し、そして数値表を含む原簿オブジェクトが既に存在するときには、ユーザは、数値表を再タイプするのではなく、原簿オブジェクトからレポートオブジェクトへ数値表をコピーすることができる。
【０００５】
コピー方法は、数値表が原簿オブジェクトからレポートオブジェクトへコピーされるときに、そのオブジェクトが原簿オブジェクトとの関連性を失うという欠点を有する。従って、原簿オブジェクトが変更された場合に、レポートオブジェクトの数値表は自動的に変更されない。
【０００６】
関連性を失うというこの欠点は、オブジェクトリンクを使用することによって克服することができる。オブジェクトリンク（リンク）は、クライエントオブジェクトに記憶されたソースオブジェクトに対するレファレンスである。コンピュータシステムは、ソースオブジェクトの現在内容がクライエントオブジェクトに組み込まれているかのようにリンクを処理する。ユーザがクライエントオブジェクトにアクセスするときに、コンピュータシステムは、リンクに遭遇し、そしてソースオブジェクトを探索してそれにアクセスする。リンクのソースオブジェクトを探索することを、リンクを解明すると称する。リンクが使用されるときは、ソースオブジェクトの現在バージョンがクライエントオブジェクトに組み込まれる。それ故、クライエントオブジェクトは、たとえそれがリンクの形成後に生じたとしても、ソースオブジェクトに対して更新されるという利点を有する。
【０００７】
リンクの使用の一例として、ユーザは、セールス情報の数値表を含む原簿オブジェクトを、セールス情報のテキスト記述を含むレポートオブジェクトにリンクすることができる。
【０００８】
図１は、リンクの使用を説明する図である。「ｒｅｐｏｒｔ．ｄｏｃ」と称するレポートオブジェクト１０１は、「ｌｅｄｇｅｒ．ｘｌｓ」と称する原簿オブジェクト１０３に対するリンク１０２を含んでいる。ｒｅｐｏｒｔ．ｄｏｃオブジェクトが表示されたときには、ｌｅｄｇｅｒ．ｘｌｓオブジェクトに対するリンクが解かれ、ｌｅｄｇｅｒ．ｘｌｓオブジェクトの内容をアクセスして表示１０４に組み込むことができる。ここでは、ｌｅｄｇｅｒ．ｘｌｓオブジェクトがソースオブジェクトであり、そしてｒｅｐｏｒｔ．ｄｏｃオブジェクトがクライエントオブジェクトである。
【０００９】
各リンクは、ソースオブジェクトがどこに記憶されるかを探索するのに使用される情報を含んでいる。オブジェクトは、種々の記憶装置に種々の編成で一貫して記憶することができる。例えば、ハイアラーキファイルシステムはオブジェクトをファイルとして記憶する。ハイアラーキファイルシステムは、ルートディレクトリがファイル及びサブディレクトリを含むことのできるファイルシステムである。サブディレクトリは、ファイル及び更に別のサブディレクトリを含むことができる。従って、ルートディレクトリから下降するサブディレクトリの次々のレベルがハイアラーキを形成する。パスネームはハイアラーキ内の位置を記述しそして各パスネームはファイル又はサブディレクトリを参照する。例えば、パスネーム「＼ｄｏｓ＼ｃｏｐｙ．ｅｘｅ」は、ルートディレクトリに含まれた「ｄｏｓ」と称するディレクトリに含まれた「ｃｏｐｙ．ｅｘｅ」と称するファイルを記述する。ハイアラーキファイルシステムは、通常、リンクをパスネームとして記憶する。
【００１０】
パスネームは、絶対的であるか又は相対的であるかのいずれかである。絶対的なパスネームは、ルートディレクトリに対してファイルを位置決めするのに必要な情報を含んでいる。一方、相対的なパスネームは、他のファイルの位置に対してファイルを位置決めするのに必要な情報を含んでいる。相対的なパスネームを含むリンクは、クライエントオブジェクトの位置に対してソースオブジェクトの位置を特定する。ソースオブジェクトがクライエントオブジェクトと同じディレクトリに位置されているときには、リンクは、キャラクタ「．＼」が前に置かれたソースオブジェクトネームを含む。それ故、ｒｅｐｏｒｔ．ｄｏｃ及びｌｅｄｇｅｒ．ｘｌｓオブジェクトが同じディレクトリに配置された場合は、リンクのパスネームは、「．＼ｌｅｄｇｅｒ．ｘｌｓ」となる。絶対的なパスネームは、ルートディレクトリで始めて、ソースオブジェクトに到達するために次々に下降しなければならないサブディレクトリの順序付けされたリストである。ｌｅｄｇｅｒ．ｘｌｓオブジェクトが「ａｃｍｅ」と称するディレクトリにあって、これが次いで「ｃｏｍｐａｎｉｅｓ」と称するディレクトリにあり、そしてこれがルートディレクトリにある場合には、ｌｅｄｇｅｒ．ｘｌｓオブジェクトの絶対的なパスネームが「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ＼ｌｅｄｇｅｒ．ｘｌｓ」となる。
【００１１】
図２は、リンクを記憶しそして解明する従来の方法を示す。クライエントオブジェクト２００は、レポートオブジェクトである。これは、原簿オブジェクトに対するリンクを含み、原簿オブジェクトは、次いで、ソースオブジェクトの絶対的パスネーム「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ＼ｌｅｄｇｅｒ．ｘｌｓ」を含む。上記のように、この絶対的なパスネームは、ファイルシステムハイアラーキにおける位置を特定する。ファイルシステムハイアラーキは、ディレクトリ２２０ないし２２６を含む。ディレクトリ２２０は、＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅディレクトリであって、ソースオブジェクトを含んでいる。ディレクトリ２３０は、ディレクトリ２２６の詳細な図である。これは、＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅディレクトリに含まれたファイルネームの、ファイルシステム識別子に対するマッピングを含む。ファイルシステム識別子は、ファイルシステムにおけるファイルを独特に識別する。例えば、ディレクトリ２３０は、ファイルネーム「ｒｅｐｏｒｔ．ｄｏｃ」をファイルシステム識別子〈ｆｓｉｄ１〉に対してマップし、そしてファイルネーム「ｌｅｄｇｅｒ．ｘｌｓ」をファイルシステム識別子〈ｆｓｉｄ２〉に対してマップする。次いで、ファイルシステム識別子テーブル２４０は、各ファイルシステム識別子をアクセス情報ブロックに対してマップする。各アクセス情報ブロックは、位置及び記憶媒体、即ちファイルを構成するデータを含む「セクター」のリストを含んでいる。例えば、ファイルシステム識別子テーブルは、ファイルシステム識別子〈ｆｓｉｄ１〉からアクセス情報ブロック２５０へマップすると共に、ファイルシステム識別子〈ｆｓｉｄ２〉からアクセス情報ブロック２６０へマップする。アクセス情報ブロック２６０は、ソースファイルを構成するセクターのリストを含む。アクセス情報ブロック２６０は、レファレンス２６３、レファレンス２６４及びレファレンス２６５を構成するための３つのレファレンスを含む。これらのレファレンスは、媒体２７０のセクター２７３、２７４及び２７５を各々参照する。
【００１２】
オペレーティングシステムは、典型的に、ユーザがオブジェクトを移動したり又は再ネーム付けできるようにするコマンドを含んでいる。オブジェクト間のリンクをサポートするシステムにおいては、移動又は再ネーム付けコマンドは、移動又は再ネーム付けされるオブジェクトを参照するリンクのパスネームを更新するように拡張することができる。しかしながら、オペレーティングシステムは、オブジェクトを移動したり再ネーム付けしたりするためにユーザが使用するコピー及び削除コマンドも与える。ユーザは、オブジェクトを同じディレクトリにコピーしそしてコピー元オブジェクトを削除することによりオブジェクトを再ネーム付けすることができる。ユーザは、オブジェクトを異なるディレクトリにコピーしそしてコピー元オブジェクトを削除することによりオブジェクトを移動することができる。ユーザがコピー及び削除コマンドを用いてソースオブジェクトを移動又は再ネーム付けするときには、ソースオブジェクトに対するリンクを解明することができなくなる。
【００１３】
図３Ａ−３Ｃは、コピー及び削除コマンドを用いてソースオブジェクトを再ネーム付けするときに生じる問題を説明するブロック図である。図３Ａにおいて、ｒｅｐｏｒｔ．ｄｏｃオブジェクト３０１は、ｌｅｄｇｅｒ．ｘｌｓオブジェクト３０３に対するリンク３０２を含んでいる。このリンクは、ｌｅｄｇｅｒ．ｘｌｓオブジェクトを参照するために相対的なパスネームを使用する。この点においてリンクが解明された場合には、ｌｅｄｇｅｒ．ｘｌｓオブジェクトに対して正しく解明することになる。図３Ｂにおいては、ｒｅｐｏｒｔ．ｄｏｃオブジェクト、ｌｅｄｇｅｒ．ｘｌｓオブジェクト及びリンクが不変である。しかしながら、ｌｅｄｇｅｒ．ｘｌｓオブジェクトがｇｒｏｗｔｈ．ｘｌｓオブジェクト３０４へコピーされている。この点において、リンクは、ｌｅｄｇｅｒ．ｘｌｓオブジェクトを参照するパスネームをまだ含んでいるので、依然としてｌｅｄｇｅｒ．ｘｌｓオブジェクトを解明する。図３Ｃにおいては、ｌｅｄｇｅｒ．ｘｌｓオブジェクトが削除されている。リンクは、存在しないｌｅｄｇｅｒ．ｘｌｓオブジェクトを依然として参照するので、リンクを解明することはできない。この点において、たとえｇｒｏｗｔｈ．ｘｌｓオブジェクトが再ネーム付けされたｌｅｄｇｅｒ．ｘｌｓオブジェクトであると意図されても、リンクの解明は失敗となる。ユーザがコピー及び削除コマンドを用いてソースオブジェクトを移動又は再ネーム付けするときには、ソースオブジェクトに対するいかなるリンクも解明できなくなる。
【００１４】
ソースオブジェクトに対するリンクが不正確に解明される別の状況は、リンクを含むオブジェクトが異なるディレクトリに移動されたときに生じる。図４Ａ−４Ｂは、コピー及び削除コマンドを用いてソースオブジェクトを移動するときに生じる問題を示すブロック図である。図４Ａは、ソースｌｅｄｇｅｒ．ｘｌｓオブジェクト４０３へのリンク４０２を含むｒｅｐｏｒｔ．ｄｏｃオブジェクト４０１を示している。これらのｒｅｐｏｒｔ．ｄｏｃ及びｌｅｄｇｅｒ．ｘｌｓオブジエクトは、「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリに含まれる。
【００１５】
「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリは、異なるが同様のネームをもつｌｅｄｇｅｒ．ｘｌｓオブジェクト４０４を含んでいる。ｒｅｐｏｒｔ．ｄｏｃオブジェクトが「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリにある間に、リンクは、ｌｅｄｇｅｒ．ｘｌｓオブジェクト１０３に対して正しく解明する。図４Ｂは、「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリへ移動されたｒｅｐｏｒｔ．ｄｏｃオブジェクトを示している。ｒｅｐｏｒｔ．ｄｏｃオブジェクトが「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリにあるときは、リンクがｌｅｄｇｅｒ．ｘｌｓオブジェクト４０４に対して不正確に解明する。リンクを含むオブジェクトが移動されて、そのリンクに記憶されたパスネームがオブジェクトを記述しないか又は間違ったオブジェクトを記述するときにも、同様の問題が生じる。
【００１６】
リンクをサポートするあるコンピュータシステムにおいては、各リンクがパスネームではなくてオブジェクト識別子を含む。ロケータテーブルを用いてオブジェクト識別子がパスネームへとマップされる。ロケータテーブルにより加えられる間接化のレベルは、移動又は再ネーム付けされたソースオブジェクトに対してリンクを更新するプロセスを能率的なものにする。ソースオブジェクトに対していかに多くのリンクが存在しても、ロケータテーブルにおいてパスネームを一度変更するだけでそれらを全て更新することができる。図５はロケータテーブルの実施を示すブロック図である。ロケータテーブル５０１は、オブジェクト識別子５１１−５１４を含み、これらは各々ソースオブジェクトパスネーム５２１−５２４に対応する。ソースオブジェクト５３１−５３４の各々は独特のオブジェクト識別子５４１−５４４を含んでいる。ロケータテーブルは多くの異なるディレクトリにおいてオブジェクトに対するエントリーを含むので、絶対的なパスネームが使用される。ソースオブジェクトがリンクされるときには、そのオブジェクト識別子がリンクにコピーされる。オブジェクト識別子「１１１２」をもつオブジェクトは、オブジェクト識別子「１１１１」をもつオブジェクトに対してリンク５５１を含んでいる。オブジェクト識別子「１１１１」をもつオブジェクト５３１が移動又は再ネーム付けされた場合には、オブジェクト５３１の新たなネーム又は位置を正しく反映するようにパスネーム５２１を変更することによりリンクを保存することができる。
【００１７】
ロケータテーブルの使用は効率を改善するが、リンクの維持に伴う新たな問題を生じる。媒体の欠陥又は意図しない削除の場合にオブジェクトが失われるのを防止するために、オリジナルオブジェクトが一次記憶装置（例えば、ハードディスク）から文書保存用記憶装置（例えば、フロッピーディスク）へしばしばコピーされる。このコピー動作をアーカイブと称し、そしてコピー動作により生じたオブジェクトをアーカイブされたオブジェクトと称する。アーカイブされたオリジナルオブジェクトが崩壊又は消去された場合には、それに対応するアーカイブされたオブジェクトを一次記憶装置へコピーして戻すことができる。このコピー動作をオブジェクトの回復と称し、そしてコピー動作により形成されたオブジェクトを回復されたオブジェクトと称する。回復されたオブジェクトは、通常、一次記憶装置の崩壊又は削除されたオブジェクトに取って代わる。しかしながら、ユーザはオリジナルオブジェクトのネームを移動又は変更できるので、オブジェクトを回復すると、同じオブジェクトの２つのコピーが一次記憶装置上に生じることになる。同様に、ユーザはオブジェクトを異なるディレクトリに対して回復するように特定できるので、同じオブジェクトの２つのコピーが一次記憶装置上に生じることになる。両コピーは同じオブジェクト識別子を共用するが、ロケータテーブルにおいて個別のエントリーを有することもできる。同じオブジェクト識別子に対してロケータテーブルに２つのエントリーが存在し得るので、そのオブジェクト識別子からパスネームへのマッピングがあいまいなものとなる。その結果、複製されたオブジェクト識別子を含むリンクが、オリジナルオブジェクト又は回復されたオブジェクトのいずれかに対して解明される。オリジナルオブジェクト及び回復されたオブジェクトが互いに正確なコピーであるときには、このあいまいさが殆ど問題にならないが、いずれかのオブジェクトが変更されたときには、それらの共用オブジェクト識別子に対するリンクを解明するときに正しいオブジェクトを選択することが重要である。
【００１８】
例えば、オブジェクト識別子「１１１１」を有するオブジェクト５３１が「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリからアーカイブされそして「＼ｃｏｍｐａｎｉｅｓ＼ｄｉｒｅｃｔｏｒｙ」へ回復される場合には、オブジェクト識別子「１１１１」及びパスネーム「＼ｃｏｍｐａｎｉｅｓ＼ｌｅｄｇｅｒ．ｘｌｓ」を含む新たなエントリー（図示せず）がロケータテーブルに形成される。
【００１９】
５３２オブジェクトのリンクが解明されるときには、オブジェクト識別子「１１１１」をもつエントリーに対してテーブルをサーチするときに対応するロケータテーブルエントリーのどれに最初に遭遇するかに基づいて、オブジェクト識別子「１１１１」をもつオリジナルオブジェクトか又はオブジェクト識別子「１１１１」をもつ回復されたオブジェクトのいずれかに対して解明することができる。
【００２０】
オブジェクトが厳密なコピーのままである場合は、リンクがどちらに対して解明するかは重要でない。しかしながら、オリジナルオブジェクトがより多くの情報を含むように編集される場合には、回復されたオブジェクトに対してリンクが解明するときに、オリジナルオブジェクトの編集により加えられる情報がクライエントオブジェクトに組み込まれない。
【００２１】
ネットワークにより１つ以上の他のコンピュータシステムに接続されたコンピュータシステムの記憶装置に最初に記憶されたソースオブジェクトは、他の接続されたいずれかのコンピュータシステムの記憶装置へユーザが容易に移動することができる。上記の方法のいずれによってもソースオブジェクトが見つからない場合には、ソースオブジェクトをサーチするプログラムが、各接続されたコンピュータシステムへ要求を「放送」して、その記憶装置においてソースオブジェクトをサーチしそしてその結果を報告するのが一般的である。この「全処理サーチ(exhaustive search)」解決策は、ソースオブジェクトが識別可能であって且つ接続されたコンピュータシステムの記憶装置に記憶された場合にはこのソースオブジェクトを確かに有効に位置決めするが、この全処理サーチは、各記憶装置の全ての内容をサーチするのに各々の接続されたコンピュータシステムに対し著しい処理及び記憶検索リソースを必要とすると共に、要求を放送しそしてその結果を収集するために広範なネットワーク通信リソースを必要とするという点で非常に高価なものとなる。
【発明の開示】
【発明が解決しようとする課題】
【００２２】
本発明が解決しようとする課題は、ソースオブジェクトと同じオブジェクト形成から派生するオブジェクトに対して解明することのできるソースオブジェクトへのリンクを確立するための方法及びシステムを提供することである。
【００２３】
本発明の別の課題は、共通のオブジェクト形成から派生するオブジェクトを追跡するための方法及びシステムを提供することである。
【００２４】
本発明の更に別の課題は、ソースオブジェクトと同じオブジェクト形成から派生するオブジェクトに対するリンクを解明するための方法及びシステムを提供することである。
【００２５】
本発明の更に別の課題は、リンクのソースオブジェクトであるオブジェクトのためのアクセス可能な記憶ボリュームをサーチするための方法及びシステムを提供することである。
【課題を解決するための手段】
【００２６】
これらの課題、及び本発明を以下に詳細に述べるにつれて明らかとなる他の目的、課題は、共通のオブジェクト形成から派生するオブジェクトを追跡しそしてそれに対するリンクを解明するための方法及びシステムによって達成される。好ましい実施形態では、システムがソースオブジェクトを形成する。次いで、システムはソースオブジェクトの形成を識別するために子孫識別子を発生する。次いで、システムはこの子孫識別子をソースオブジェクトに関連させる。好ましい実施形態では、システムは、ソースオブジェクトへのリンクが形成されるときだけ子孫識別子をソースオブジェクトに関連させる。後で、システムは、形成されたオブジェクトをコピーオブジェクトへとコピーする。ソースオブジェクトがコピーオブジェクトへコピーされると、システムは、ソースオブジェクトに関連した子孫識別子をコピーオブジェクトに関連させる。このように、コピーオブジェクトに関連した子孫識別子は、そのコピーオブジェクトがソースオブジェクトの形成から派生したことを指示する。又、システムは、好ましくは、ユーザが移動コマンドを特に使用せずにソースオブジェクトを有効に移動したときを検出し、そしてその有効に移動したオブジェクトに、オリジナルオブジェクトに関連した区別された子孫識別子を関連させることができる。
【００２７】
システムは、ソースオブジェクトの子孫識別子を含むリンクをクライエントオブジェクトに記憶することによりクライエントオブジェクトをソースオブジェクトにリンクする。又、リンクは、ソースオブジェクトを、同じ子孫識別子を有する他のオブジェクトから区別するための情報も含んでいる。ソースオブジェクトに対するリンクを解明するときには、システムは、リンクに含まれた子孫識別子及び区別情報を選択する。次いで、システムは、その選択された子孫識別子及び区別情報をもつオブジェクトをサーチする。その選択された子孫識別子及び区別情報をもつオブジェクトが見つかったときには、システムは、その見つかったオブジェクトに対してリンクを解明する。その選択された子孫識別子及び区別情報をもつオブジェクトが見つからないときには、システムは、その選択された子孫識別子をもつオブジェクトを、その選択された区別情報にかかわりなくサーチする。その選択された子孫識別子をもつオブジェクトが見つかったときには、リンクシステムは、その見つかったオブジェクトに対するリンクを解明する。
【００２８】
リンクを解明するときには、システムは、好ましくは、最適な順序で一連のボリュームにおいてリンクのソースオブジェクトをサーチする。システムは、好ましくは、先ず、リンクに記憶されたパスネームをチェックし、次いで、暗示されるボリュームをサーチし、全てのローカルボリュームをサーチし、自動ボリュームリストにおけるボリュームをサーチし、手動ボリュームリストにおけるボリュームをサーチし、リモートボリュームリストのリストにより指示されるリモートボリュームリストにおけるボリュームをサーチし、そして全ての接続されたマシンへサーチ要求を放送する。又、好ましくは、システムは、パスネームにより指定されたディレクトリにおいてソースオブジェクトファイルネームをルックアップする段階をバイパスするように、リンクに使用されたオブジェクト識別子からファイルシステム識別子へ直接マップするオブジェクト識別子テーブルを具現化する。
【発明の効果】
【００２９】
以上、本発明を好ましい実施形態を参照して説明したが、本発明の精神及び範囲から逸脱せずに、その形態及び細部に種々の変更又は修正がなされ得ることが当業者に理解されよう。例えば、ファシリティは、コンピュータシステムに記憶されないオブジェクト、例えば、物理的な文書又はアートワークの子孫を追跡することもできる。更に、異なる構成のオブジェクト識別子が子孫情報を伝えることもできる。
【発明を実施するための最良の形態】
【００３０】
本発明の好ましい実施形態は、コンピュータシステムにおいてオブジェクトを追跡しそしてオブジェクトに対するリンクを解明するためのソフトウェアベースのオブジェクトリンク構成体（ファシリティ）である。このファシリティは、リンクのソースである各オブジェクトに、２つの要素、即ち子孫識別子及び区別識別子より成るオブジェクト識別子を指定する。オブジェクトは、２つの個別の方法で存在させることができ、即ちスクラッチから形成できるか又は既存のオブジェクトからコピーできるかのいずれかである。オブジェクトが形成されるときには、そのオブジェクトに、好ましい独特の子孫識別子及び区別識別子より成るオブジェクト識別子が指定される。オブジェクトがコピーされるときには、そのコピーオブジェクトに、そのコピー元（オリジナル）オブジェクトと同じ子孫識別子より成る好ましい独特のオブジェクト識別子が指定されると共に、その同じ子孫識別子をもつ他の各々のオブジェクト識別子の区別識別子とは異なる区別識別子が指定される。ファシリティは、ソースオブジェクトへのリンクを確立するときに、ソースオブジェクトのオブジェクト識別子をリンクに記憶する。リンクが解明されるときに、オリジナルのソースオブジェクトが依然としてアクセスできる場合には、ファシリティは、そのリンクに含まれた子孫識別子及び区別識別子をもつオブジェクトをサーチすることにより、オリジナルのソースオブジェクトを位置決めする。オリジナルのソースオブジェクトがアクセス不能であり、例えば、削除されている場合には、ファシリティは、リンクに含まれた子孫識別子をもつオブジェクトを、その選択された区別識別子に係わりなくサーチすることにより、オリジナルソースオブジェクトのコピーを見つけることができる。又、ファシリティは、好ましくは、ユーザがリンクのソースを第１ソースオブジェクトから第２ソースオブジェクトへ変更しようとする状況を検出し、そして全オブジェクト識別子を第１ソースオブジェクトから第２ソースオブジェクトへ自動的に転送する。これらの状況は、ユーザがコピー及び削除コマンドを用いてソースオブジェクトを有効に移動するとき、ユーザが典型的なアプリケーションプログラムを用いてソースオブジェクトの改定バージョンをセーブするとき、又はリンク及びリンクのソースの両方を含むオブジェクトのグループをユーザがコピーするときを含む。この後者の場合には、子孫識別子のみがコピーされ、そして新たな区別識別子が使用される。
【００３１】
別の実施形態においては、子孫識別子及び区別識別子を含むのではなく、オブジェクト識別子の各々は、子孫識別子と、一連のコピー識別子とを含む。この実施形態では、ファシリティは、オブジェクトが形成されたときにオブジェクトに子孫識別子を指定し、次いで、オブジェクトがコピーされるたびにオブジェクトにコピー識別子を指定する。コピー識別子は、区別識別子として働き、同じ形成を分担するオブジェクト間を区別する。又、この実施形態では、オブジェクトの特定の継承に関する情報も追加される。これは、ファシリティが、オブジェクト識別子の分かっているオブジェクトの祖先と子孫の間を区別できるようにする。
【００３２】
このように、オリジナルソースオブジェクトが使用できないリンクを解明するときには、ファシリティは、オリジナルソースオブジェクトの子孫、特に、近い子孫であるオブジェクトへの解明に優先順位を与えることができる。
【００３３】
ファシリティがリンクを効率的に解明できるのが望ましい。このため、ファシリティは、ボリューム（例えば、ディスクドライブ）に記憶されたオブジェクトに対する全てのオブジェクト識別子を、その各々を対応するソースオブジェクトの位置にマップするオブジェクト識別子テーブルに記憶するのが好ましい。解明中に、ファシリティは、ソースオブジェクトが記憶されたファイルシステムをサーチすることなく、オブジェクト識別子テーブルを用いてソースオブジェクトを直接参照する。又、ファシリティは、リンクの解明に使用するためにソースオブジェクトをおそらく含むリモートボリュームのリストを維持するためにリモートボリュームへの接続も監視する。更に、ファシリティは、ソースオブジェクトが更新されるときにソースオブジェクトの識別子が関連性を断つのを防止する。これは、コピーされそして削除されるオブジェクトの「短命」リストを維持しそしてその削除されたオリジナルオブジェクトの識別子をコピーに指定することにより行われる。更に、ファシリティは、最適なサーチ戦略を用いて、クライエントオブジェクトが記憶されたボリューム以外のボリュームに記憶されたソースオブジェクトを位置決めする。この戦略によれば、ファシリティは、先ず、クライエントオブジェクトの位置に対してソースオブジェクトの位置を記述するリンクに記憶された相対的なパスにより指定されたディレクトリをサーチする。次いで、ファシリティは、最後にリンクが解明されたときにソースオブジェクトを含むボリュームをサーチする。
【００３４】
図６は、ファシリティがその中で好ましく動作するところの汎用コンピュータシステムの高レベルブロック図である。コンピュータシステム６０１は、中央処理ユニット（ＣＰＵ）６０２と、コンピュータメモリ（メモリ）６０３と、入力／出力装置６０４とを備えている。入力／出力装置の中には、ハードディスクドライブのような記憶装置６０５と、ネットワーク接続部６０６がある。オブジェクトは、メモリ又は記憶装置のいずれに存在することもできる。更に、オブジェクトは、コンピュータシステム間でネットワーク接続部を経てコピー、移動又はアクセスすることができる。
【００３５】
オブジェクトがスクラッチから形成されるときには、ファシリティは、それに新たな子孫識別子及び新たな区別識別子を指定する。子孫識別子は、どのオブジェクトが同じ形成から派生するか、即ちどのオブジェクトがその形成されたオブジェクトのコピーでありそしてこれらコピーされたオブジェクトのコピーであるか、等々を反映するように意図される。好ましい実施形態では、子孫識別子は、１６バイト数字である。新たな子孫識別子は、日付、時刻及びコンピュータシステムの識別情報をエンコードすることにより発生されるのが好ましい。これは、使用する時間の表示が充分に正確である限り、通常は、厳密に同じ日付及び時刻に同じコンピュータシステムにおいて２つのオブジェクトを形成することが不可能であるから、子孫識別子を独特のものにする有効な方法である。コピー識別子も同様に発生されるのが好ましい。区別識別子は、同じ子孫識別子を有するオブジェクト、即ち同じ形成から派生するオブジェクトを区別するよう意図される。
【００３６】
好ましい実施形態では、区別識別子は、４バイト数字である。区別識別子として更に大きい数字を使用してもよいが、４バイト数字は、オブジェクトのコピーを区別するための区別識別子の容量と、区別識別子を記憶するための記憶リソースの消費量との間の有効な妥協であることが分かっている。オブジェクトについてなされるコピーの回数は、通常は、比較的僅かであるから、区別識別子が同じオブジェクトのコピーを区別するために非常に大きな容量をもつ必要はない。ランダム数字を選択することにより新たな区別識別子が発生されるのが好ましい。或いは又、動作中のコンピュータシステムを用いて新たな区別識別子が発生されてもよい。以下で詳細に述べるように、付加的な記憶量を各々消費する使用されるオブジェクト識別子の個数を制限するために、最初にオブジェクトへのリンクが形成されるときにオブジェクト識別子がオブジェクトに対して形成されそしてオブジェクトに関連されるのが好ましい。
【００３７】
オブジェクトがコピーされるときには、ファシリティは、オリジナルオブジェクトの子孫識別子及び新たな区別識別子をコピーオブジェクトに指定する。オリジナルオブジェクト及びコピーオブジェクトは、共通のオブジェクト形成から派生すると言える。子孫識別子は、オブジェクトに関連していることを示し、そして区別識別子は、オブジェクトを区別するために使用される。オブジェクトがアーカイブされそして回復されるときには、それがコピーされたと考えられ、ファシリティは、それに新たな区別識別子を指定する。オブジェクトが移動又は再ネーム付けされるときは、その子孫識別子及びその区別識別子の両方が同じままである。
【００３８】
ファシリティがオブジェクトに対してオブジェクト識別子（子孫識別子及び区別識別子を含む）を発生するときには、そのオブジェクト識別子にオブジェクトを関連させ、（ａ）ユーザがオブジェクトへのリンクを確立すると決定したときにファシリティがオブジェクト識別子を含むリンクを確立できるようにし、そして（ｂ）ファシリティは、リンクを解明するときに、あるオブジェクト識別子を有するオブジェクトをサーチすることができる。好ましい実施形態においては、ファシリティがオブジェクト識別子をオブジェクトに関連させるときに、オブジェクト識別子をオブジェクト内に記憶する。このようにして、オブジェクトは、それ自身のオブジェクト識別子を知る。ファシリティは、オブジェクト識別子を関連オブジェクトのパスネームにマップさせるオブジェクト識別子テーブルを確立するのが好ましい。オブジェクトに対してオブジェクト識別子が発生されるときには、ファシリティは、オブジェクトのパスネームに対するそのオブジェクト識別子のマップを含むようにオブジェクト識別子テーブルを更新する。ユーザがオブジェクトを移動するか又は再ネーム付けする場合に、ファシリティは、オブジェクト識別子テーブルに記憶されたパスネームを更新する。テーブルにオブジェクト識別子を記憶することにより、ファシリティはオブジェクトを迅速にサーチすることができる。
【００３９】
図７は、オブジェクト識別子がオブジェクトパスネームに対してマップされたオブジェクト識別子テーブルの具現化を示す概略図である。この図は、ｒｅｐｏｒｔ．ｄｏｃクライエントオブジェクト７００を示し、これは、ｌｅｄｇｅｒ．ｘｌｓソースオブジェクトへのリンク７０１を含んでいる。このリンクはソースオブジェクトを独特に識別するオブジェクト識別子７０２（〈ｏｂｊｉｄ１〉）を含んでいる。更に、この図は、オブジェクト識別子をファイルパスネームへとマップするオブジェクト識別子テーブル７１０を示している。ファシリティは、リンク７０１を解明しようとするときに、オブジェクト識別子テーブルを読み、オブジェクト識別子〈ｏｂｊｉｄ１〉７１１がパス「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ＼ｌｅｄｇｅｒ．ｘｌｓ」７１２へマップすることを決定する。更に、この図は、ルートディレクトリ７２０及び他のディレクトリ７２１−７２６より成るファイルシステムハイアラーキも示している。ソースオブジェクトのパス７１２は、「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリ７２６を特定し、これは、ディレクトリ７３０として詳細に示されている。ディレクトリ７３０は、ファイルネームからファイルシステム識別子へのマップを含み、これらファイルシステム識別子は、次いで、ファイルシステム識別子テーブル７４０により、オブジェクトがボリュームの媒体７７０から読み出せるようにするアクセス情報を含むアクセス情報ブロックへとマップされる。例えば、「ｒｅｐｏｒｔ．ｄｏｃ」ファイルネーム７３１はファイルシステム識別子７３３（〈ｆｓｉｄ１〉）へマップされ、そしてソースオブジェクトに対応する「ｌｅｄｇｅｒ．ｘｌｓ」ファイルネームは、ファイルシステム識別子７３４（〈ｆｓｉｄ２〉）へマップされる。ファイルシステム識別子テーブル７４０はファイルシステム識別子からアクセス情報ブロックへマップする。例えば、ファイルシステム識別子７４１（〈ｆｓｉｄ１〉）はアクセス情報ブロック７５０へマップされ、これは、対応するオブジェクトが媒体７７０のセクター７７１及び７７２を占有することを示す。同様に、ファイルシステム識別子７４２（〈ｆｓｉｄ２〉）はアクセス情報ブロック７６０へマップされ、これは、ソースオブジェクトが媒体７７０のセクター７７３、７７４及び７７５を占有することを示す。次いで、ソースオブジェクトを検索し、そしてセクター７７３、７７４及び７７５を検索することによりリンクを完全に解明することができる。
【００４０】
好ましい別の実施形態において、ファイルシステム識別子テーブルがファイルシステムによって露出される場合には、オブジェクト識別子をパスネームではなくてファイルシステム識別子へ直接マップするようなオブジェクト識別子テーブルをファシリティが維持して使用し、これにより、パスネームにより指定されたディレクトリにおけるファイルネームをルックアップする段階をバイパスするのが効率的である。図８は、オブジェクト識別子がファイルシステム識別子へ直接マップされたオブジェクト識別子テーブル８８０の具現化を示す概略図である。
【００４１】
オブジェクト識別子８０２（〈ｏｂｊｉｄ１〉）を含むリンク８０１を解明するために、ファシリティは、オブジェクト識別子テーブル８８０において「〈ｏｂｊｉｄ１〉」をルックアップする。このオブジェクト識別子は、ファイルシステム識別子「〈ｆｓｉｄ２〉」８８２へマップされ、従って、ファシリティは、ファイルシステム識別子テーブル８４０においてファイルシステム識別子「〈ｆｓｉｄ２〉」をルックアップする。ファイルシステム識別子「〈ｆｓｉｄ２〉」はアクセス情報ブロック８６０へマップされ、これは、ソースオブジェクトが媒体８７０のセクター８７３、８７４及び８７５を占有することを示す。次いで、ソースオブジェクトを検索し、そしてセクター８７３、８７４及び８７５を検索することによりリンクを完全に解明することができる。
【００４２】
ハイブリッドファイルシステムにおいては、各ソースオブジェクトに対するファイルシステム識別子をオブジェクト識別子テーブルに記憶するために使用できるが、ソースオブジェクトに対応するセクターを検索するための機構であって、そのファイルシステム識別子を用いて検索されるべきソースオブジェクトを識別するような機構は存在しない。むしろ、ソースオブジェクトに対応するセクターを検索する唯一の機構は、検索されるべきオブジェクトを識別するために絶対パスネームを使用するようなオブジェクト検索のためのファイルシステムサービスである。このようなハイブリッドファイルシステムにおいて、ファシリティは、好ましくは、ファイルシステム識別子を用いて、検索されるべきソースオブジェクトの絶対パスネームを決定し、次いで、ファシリティは、これを用いて、オブジェクトを検索するためのファイルシステムサービスを呼び出す。ファシリティは、ファイルシステム識別子を用いて、ソースオブジェクトが位置したディレクトリの識別（例えば、ディレクトリ７２６／７３０）と、ソースオブジェクトのファイルネーム（例えば、「ｌｅｄｇｅｒ．ｘｌｓ」）との両方を決定する。次いで、ファシリティは、そのディレクトリにおいてスタートし、そして各ディレクトリネームでファイルネームをプレペンドして、ルートノード７２０に達するまでディレクトリハイアラーキを「ウォークアップ（進行）」し、最終的に絶対パスを形成する。
【００４３】
オブジェクトは、ボリュームに記憶されてもよい。ボリュームとは、特定の記憶装置であるか又は特定の記憶装置の区画である。各ボリュームは、それ自身のルートディレクトリ及びファイルシステムハイアラーキを有している。コンピュータシステムは、それ自身の多数のボリュームを有し、そして更に、ネットワークコネクタを経て他のコンピュータシステムのボリュームへアクセスすることができる。好ましい実施形態では、ファシリティは各ボリュームに含まれたオブジェクトに対し個別のオブジェクト識別子テーブルを確立する。このテーブルは、それがオブジェクト識別子を含んでいるところのボリュームに記憶されるのが好ましい。これは、参照されたオブジェクトがアクセスできる場合及びその場合にのみ、オブジェクト識別子テーブルをアクセスできるよう確保する。一方、オブジェクト識別子テーブルを、それがオブジェクト識別子を含むところのボリュームに記憶できないこともある。ファシリティは、例えば、ボリュームが読み取り専用であるか又はそれがいっぱいであるために、ボリュームに書き込みできないことがある。このようなボリュームに対するオブジェクト識別子テーブルは、別のボリュームに記憶することができる。
【００４４】
別の好ましい実施形態においては、ファシリティは、関連するオブジェクトが最初にリンクされるときにオブジェクト識別子テーブルにオブジェクト識別子のみを追加する。又、ファシリティは、オブジェクトが最初にリンクされるまで、オブジェクト識別子とオブジェクトとの関連を抑制することもできる。これは、オブジェクト識別子が決して使用されないとき、即ちオブジェクトが決してリンクされないときに、オブジェクト識別子を発生して記憶するオーバーヘッドを排除するという利点を有する。しかしながら、これは、ある関連オブジェクトへのリンクを確立して解明するファシリティの能力を排除するという欠点も有する。
【００４５】
例えば、オブジェクトが最初にコピーされ、リンクされそして削除される場合には、コピーオブジェクトに対してリンクを解明することができない。
【００４６】
ファシリティがソースオブジェクトへのリンクを確立するたびに、ファシリティは、ソースオブジェクトのオブジェクト識別子をリンクへコピーする。好ましい実施形態においては、ファシリティは、ソースオブジェクトのパスネーム又は少なくともそのボリュームネームをリンクに記憶する。ソースオブジェクトが移動、コピー又は再ネーム付けされるときに、たとえこのパスネーム又はボリュームネームが更新されなくても、オブジェクトをサーチすべきスタート点を確立することができる。
【００４７】
図９は、ソースオブジェクトを位置決めするための第１のＭａｔｃｈＯｂｊｅｃｔサブルーチンを示すフローチャートである。このサブルーチンは、先ず、全オブジェクト識別子が一致するオブジェクトをサーチし、次いで、必要に応じて子孫識別子が一致するオブジェクトをサーチする。サブルーチンは、オブジェクト識別子をパラメータとして受け取る。ファシリティは、サブルーチンを呼び出すときに、それが解明するリンクに記憶されたオブジェクト識別子を通す。サブルーチンは、一致するオブジェクト識別子をもつオブジェクトに対し全てのオブジェクトをサーチする。このサーチは、オリジナルサーチオブジェクトが依然としてアクセスできる場合にこのオブジェクトのみを見つける。ステップ９０２において、一致するオブジェクト識別子をもつオブジェクトが見つかった場合に、サブルーチンは、ステップ９０３に続き、さもなくば、ステップ９０４へ続く。
【００４８】
ステップ９０３において、サブルーチンは、一致するオブジェクト識別子をもつオブジェクトへのリンクを解明する。次いで、サブルーチンは、復帰となる。
【００４９】
ステップ９０４において、サブルーチンは、一致する子孫識別子をもつオブジェクトに対し全てのオブジェクトをサーチする。このサーチは、オリジナルソースオブジェクトと同じ形成から派生するオブジェクトを見つける。ステップ９０５において、一致する子孫識別子をもつ２つ以上のオブジェクトが見つかった場合には、サブルーチンは、ステップ９０６へ続き、さもなくば、サブルーチンはステップ９０９へ続く。
【００５０】
ステップ９０６ないし９０７において、サブルーチンは、リンクを解明すべき関連オブジェクトをユーザが選択できるようにする。ステップ９０６において、サブルーチンは、一致する子孫識別子をもつオブジェクトのリストを表示する。
【００５１】
ステップ９０７において、サブルーチンは、ユーザがリストからオブジェクトを選択できるようにする。ステップ９０８において、サブルーチンは、ユーザにより選択されたオブジェクトへのリンクを解明する。ステップ９０８及び９１０では、ファシリティが、同じ子孫識別子及び異なる区別識別子を有するオブジェクトへのリンクを解明するときに、ファシリティは、リンクに記憶された区別識別子を解明されるオブジェクトの区別識別子へと変更するのが好ましい。これは、次に必要になったときにこのオブジェクトへのリンクをファシリティが更に容易に解明できるようにする。次いで、サブルーチンは復帰する。
【００５２】
ステップ９０９において、一致する子孫識別子を有するオブジェクトが見つかった場合に、サブルーチンはステップ９１０へ続き、さもなくば、サブルーチンはステップ９１１に続く。ステップ９１０では、サブルーチンは、一致する子孫識別子をもつオブジェクトへのリンクを解明する。次いで、サブルーチンは復帰する。ステップ９１１では、オブジェクトへのリンクの解明に失敗し、復帰となる。ファシリティは、特定のオブジェクトへのリンクを解明すると、そのオブジェクトをリンクのソースオブジェクトとして指定すると言える。
【００５３】
別の実施形態においては、ファシリティは、ＭａｔｃｈＯｂｊｅｃｔサブルーチンの変更バージョンを呼び出す。図１０は、ソースオブジェクトを位置決めするための第２のＭａｔｃｈＯｂｊｅｃｔサブルーチンのフローチャートである。
【００５４】
この変更サブルーチンは、最初に、一致する子孫識別子を有する全てのオブジェクトをサーチし、次いで、これらオブジェクトの中で、一致する区別識別子を有するオブジェクトをサーチする。又、この変更サブルーチンは、オブジェクト識別子をパラメータとして受け取る。
【００５５】
ステップ１００１において、変更サブルーチンは、一致する子孫識別子をもつオブジェクトに対し全てのオブジェクトをサーチする。ステップ１００２において、変更サブルーチンは、一致する区別識別子をもつオブジェクトに対し、ステップ１００１で見つかった全てのオブジェクトをサーチする。ステップ１００３において、一致する区別識別子をもつオブジェクトが見つかった場合には、変更サブルーチンは、ステップ１００４へ続き、さもなくば、ステップ１００５へ続く。ステップ１００４において、変更サブルーチンは、一致する区別識別子をもつオブジェクトへのリンクを解明する。このオブジェクトは、オリジナルソースオブジェクトである。次いで、変更サブルーチンは、復帰となる。
【００５６】
ステップ１００５において、一致する子孫識別子をもつ２つ以上のオブジェクトが見つかった場合には、変更サブルーチンはステップ１００６へ続き、さもなくば、ステップ１００９へ続く。ステップ１００６ないし１００７において、変更サブルーチンは、リンクを解明すべきところの一致する子孫識別子をもつオブジェクトをユーザが選択できるようにする。一致する子孫識別子をもつオブジェクトは、オリジナルソースオブジェクトと同じ形成から派生するオブジェクトである。ステップ１００６において、変更サブルーチンは、一致する子孫識別子をもつオブジェクトのリストを表示する。ステップ１００７において、変更サブルーチンは、ユーザがリストからオブジェクトを選択できるようにする。ステップ１００８では、変更サブルーチンは、ユーザにより選択されたオブジェクトへのリンクを解明する。ステップ１００８及び１０１０では、同じ子孫識別子及び異なる区別識別子を有するオブジェクトへのリンクをファシリティが解明するときに、ファシリティは、リンクに記憶された区別識別子を解明されるオブジェクトの区別識別子へと変更するのが好ましい。これは、次に必要になったときにこのオブジェクトへのリンクをファシリティが更に容易に解明できるようにする。次いで、変更サブルーチンは復帰する。
【００５７】
ステップ１００９において、一致する子孫識別子を有するオブジェクトが見つかった場合に、変更サブルーチンはステップ１０１０へ続き、さもなくば、変更サブルーチンはステップ１０１１に続く。ステップ１０１０では、変更サブルーチンは、一致する子孫識別子をもつオブジェクトへのリンクを解明する。これはオリジナルソースオブジェクトに関連したオブジェクトである。次いで、変更サブルーチンは復帰となる。
【００５８】
ステップ１０１１では、変更サブルーチンは、オブジェクトへのリンクの解明に失敗する。次いで、変更サブルーチンは復帰となる。
【００５９】
いずれかのＭａｔｃｈＯｂｊｅｃｔサブルーチンを使用することにより、ファシリティは、コピー及び削除コマンドを用いてソースオブジェクトを移動又は再ネーム付けするときに生じる問題を克服することができる。図１１Ａないし１１Ｃは、コピー及び削除コマンドを用いてソースオブジェクトを移動又は再ネーム付けするときに生じる問題をファシリティがいかに克服するかを示すブロック図である。この例及びこれ以降の例の説明上、子孫識別子及び区別識別子の両方は４つの１０進数に短縮する。図１１Ａにおいて、ｒｅｐｏｒｔ．ｄｏｃオブジェクト１１０１は、ソースオブジェクトｌｅｄｇｅｒ．ｘｌｓ１１０３へのリンク１１０２を含んでいる。このリンクは、ｌｅｄｇｅｒ．ｘｌｓオブジェクトの子孫識別子「７７１７」及びｌｅｄｇｅｒ．ｘｌｓオブジェクトの区別識別子「２１５５」を含んでいる。このときリンクが解明された場合は、ファシリティは、先ず、同じ子孫識別子及び区別識別子を有するオブジェクトをリンクとしてサーチする。第１のサーチは、ｌｅｄｇｅｒ．ｘｌｓオブジェクトを見つけ、そしてファシリティは、ｌｅｄｇｅｒ．ｘｌｓオブジェクトに対して解明する。図１１Ｂは、ｒｅｐｏｒｔ．ｄｏｃ及びｌｅｄｇｅｒ．ｘｌｓオブジェクトと、不変のリンクとを示している。ｌｅｄｇｅｒ．ｘｌｓオブジェクトのコピー１１０４が「ｇｒｏｗｔｈ．ｘｌｓ」というネームで形成される。ｌｅｄｇｅｒ．ｘｌｓオブジェクトのコピーとして、ｇｒｏｗｔｈ．ｘｌｓオブジェクトは、同じ子孫識別子「７１７７」を保持し、そして新たな区別識別子「３２１６」を受け取る。
【００６０】
この点において、リンクは、依然としてｌｅｄｇｅｒ．ｘｌｓオブジェクトに対して解明する。というのは、同じ子孫識別子及び同じ区別識別子をリンクとして有するからである。図１１Ｃでは、ｌｅｄｇｅｒ．ｘｌｓオブジェクトが削除されている。この点においてリンクが解明された場合には、ファシリティは、同じ子孫識別子及び区別識別子をリンクとして有するオブジェクトを最初にサーチする。このようなオブジェクトはもはや存在しないので、第１のサーチは失敗となる。次いで、ファシリティは、同じ子孫識別子をリンクとして有するオブジェクトをサーチする。この第２のサーチは、リンクが解明されるところのｇｒｏｗｔｈ．ｘｌｓオブジェクトを見つける。ファシリティは、この状態においてｇｒｏｗｔｈ．ｘｌｓオブジェクトに対して解明できるので、コピー及び削除の問題を受けない。
【００６１】
好ましい実施形態では、ファシリティは、コピー及び削除問題を更に効率的に解消するために移動確認ログを具現化する。ユーザがオブジェクトのコピーを行うときには、ファシリティは、短時間コピーログとも称する移動確認ログにコピーの指示を記憶する。ログに記憶されるコピーの指示は、オリジナルオブジェクト及びコピーオブジェクトの共通の子孫識別子と、形成されたオブジェクト及びコピーオブジェクトの区別識別子とを含むのが好ましい。ログは、少数のエントリーのみのスペースを有する円形リストである。それ故、いかなる所与の時間においても、ログは、ユーザにより行われた最後の若干のコピーのみの指示を保持する。ユーザがオブジェクトを削除するときには、ファシリティは、削除されたオブジェクトがコピーされたという指示に対してログをサーチする。ログがこのような指示を含む場合に、ファシリティは、コピーオブジェクトの区別識別子を削除されたオブジェクトの区別識別子へと変更し、削除されたオブジェクトに対して確立された全てのリンクがコピーオブジェクトに対して解明するようにさせる。この実施形態では、ファシリティは、多くの場合に、ファシリティの処理の集中するラインサーチ方法を用いることなくコピー及び削除問題を解消することができる。しかしながら、オリジナルオブジェクトのコピー動作と削除との間のコピーオブジェクトに対して確立されるリンクは、無効となる。
【００６２】
又、ファシリティは、クライエントオブジェクトを異なるディレクトリへ移動する問題も克服する。図１２Ａ−１２Ｂは、クライエントオブジェクトを異なるディレクトリに移動する問題をファシリティがいかに克服するかを示すブロック図である。図１２Ａは、ｒｅｐｏｒｔ．ｄｏｃオブジェクト１２０１を示し、これは、ソースｌｅｄｇｅｒ．ｘｌｓオブジェクト１２０３へのリンク１２０２を含む。このリンクは、ｌｅｄｇｅｒ．ｘｌｓオブジェクトの子孫識別子「７１７７」及びその区別識別子「２１５５」を含んでいる。ｒｅｐｏｒｔ．ｄｏｃ及びｌｅｄｇｅｒ．ｘｌｓオブジェクトは、「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリに含まれる。「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリは、異なるが同様のネームをもつｌｅｄｇｅｒ．ｘｌｓオブジェクト１２０４を含んでいる。「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリにおけるｌｅｄｇｅｒ．ｘｌｓオブジェクトは、独立して形成されたものであるから、「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリのｌｅｄｇｅｒ．ｘｌｓオブジェクトとは異なる子孫識別子及び異なる区別識別子を有する。ｒｅｐｏｒｔ．ｄｏｃオブジェクトが「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリにある間にリンクが解明される場合に、ファシリティは、子孫識別子及び区別識別子がリンクにおけるものと一致するようなオブジェクトに対してボリューム内の全てのオブジェクトをサーチする。このサーチは、「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリにおいてｌｅｄｇｅｒ．ｘｌｓオブジェクトを見つける。図１２Ｂは、「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリへのｒｅｐｏｒｔ．ｄｏｃオブジェクトの移動を示している。ｒｅｐｏｒｔ．ｄｏｃオブジェクトが「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリにある間にリンクが解明される場合には、ファシリティは、リンクと同じ子孫識別子及び区別識別子を有するオブジェクトに対しボリューム内の全てのオブジェクトをサーチする。「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリが「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリと同じボリューム内にある限り、ファシリティは、ｌｅｄｇｅｒ．ｘｌｓオブジェクト及び「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリへのリンクを見つけて解明する。ファシリティは、リンクを含むオブジェクトが移動された後もリンクを正しく解明できるので、ファシリティは、クライエントオブジェクトを異なるディレクトリに移動する問題を受けない。
【００６３】
更に、ファシリティは、オブジェクトの新たな改定をセーブするために多くのアプリケーションプログラムによって使用されるプロセスにより生じるリンク追跡の問題も克服する。オブジェクトの以前の改定をオブジェクトの現在の改定と単に置き換えるのではなく、これらのアプリケーションは、オブジェクトの現在の改定を一時的なオブジェクトに記憶し、次いで、以前の改定を現在オブジェクトネームからバックアップオブジェクトネームへ再ネーム付けし、そして一時的なオブジェクトを一時的なオブジェクトネームから現在オブジェクトネームへ再ネーム付けする。図１３は、オブジェクトの新たな改定をセーブするために多くのアプリケーションプログラムが使用するプロセスを示すオブジェクト状態タイミング図である。このオブジェクト状態タイミング図は、アプリケーションプログラムによって形成される原簿オブジェクトの次々の改定に各々対応する３つのオブジェクト１３０１−１３０３の状態を示している。これらの状態は、次々に遅い時間ｔ1−ｔ6を含む時間軸１３０４に対して示されている。時間ｔ1に、Ｒｅｖｉｓｉｏｎ１及びＲｅｖｉｓｉｏｎ２が存在する。Ｒｅｖｉｓｉｏｎ２オブジェクトは、ネーム「ｌｅｄｇｅｒ．ｘｌｓ」、オブジェクト識別子「０００２：０００１」を有し、ユーザは、これを原簿オブジェクトの「現在」改定即ち最後にセーブされた改定であると考える。Ｒｅｖｉｓｉｏｎ１オブジェクトは、ネーム「ｌｅｄｇｅｒ．ｂａｋ」、オブジェクト識別子「０００１：０００１」を有し、ユーザは、これを原簿オブジェクトの「バックアップ」改定即ち最後から２番目にセーブされた改定であると考える。時間ｔ1に、ユーザは、原簿オブジェクトの現在改定、Ｒｅｖｉｓｉｏｎ２に対するリンクを形成する（図示せず）。このリンクは、Ｒｅｖｉｓｉｏｎ２に対するオブジェクト識別子「０００２：０００１」を含む。時間ｔ2に、アプリケーションプログラムは、原簿オブジェクトの最新の改定であるＲｅｖｉｓｉｏｎ３をセーブする処理を開始する。アプリケーションは先ずＲｅｖｉｓｉｏｎ３オブジェクトを形成する。Ｒｅｖｉｓｉｏｎ３オブジェクトは、最初に、一時的なファイルネーム「ｌｅｄｇｅｒ．ｔｍｐ」及びオブジェクト識別子「０００３：０００１」を有する。時間ｔ3において、アプリケーションは、Ｒｅｖｉｓｉｏｎ１オブジェクトを削除する。時間ｔ4において、アプリケーションは、Ｒｅｖｉｓｉｏｎ２オブジェクト「ｌｅｄｇｅｒ．ｂａｋ」と再ネーム付けする。Ｒｅｖｉｓｉｏｎ２オブジェクトのオブジェクト識別子は変化しない。時間ｔ5において、アプリケーションは、Ｒｅｖｉｓｉｏｎ３オブジェクト「ｌｅｄｇｅｒ．ｘｌｓ」と再ネーム付けする。Ｒｅｖｉｓｉｏｎ３オブジェクトのオブジェクト識別子は変化しない。この点において、Ｒｅｖｉｓｉｏｎ３オブジェクトは原簿オブジェクトの現在改定であり、そしてＲｅｖｉｓｉｏｎ２オブジェクトは原簿オブジェクトのバックアップ改定である。殆どの場合に、ユーザは、ソースオブジェクトへのリンクがソースオブジェクトの現在改定に対して解明されることを期待すると仮定する。しかしながら、時間ｔ1で形成されたリンクが時間ｔ6で解明される場合には、リンクは、Ｒｅｖｉｓ��ｏｎ２（バックアップ）オブジェクトに対して解明される。というのは、異なるオブジェクト識別子を有するＲｅｖｉｓｉｏｎ３（現在）オブジェクトではなくて、リンクに記憶されたオブジェクト識別子を有するからである。
【００６４】
図１４は、オブジェクトの新たな改定をセーブするために多くのアプリケーションプログラムが使用するプロセスをいかにファシリティが好ましく取り扱うかを示したオブジェクト状態タイミング図である。時間ｔ4において、Ｒｅｖｉｓｉｏｎ２オブジェクトが再ネーム元のネーム「ｌｅｄｇｅｒ．ｘｌｓ」から再ネーム先のネーム「ｌｅｄｇｅｒ．ｂａｋ」へ再ネーム付けされるときに、再ネーム元のネームは「消失する」と言える。即ち、「消失される」ネームを有するオブジェクトは停止される。又、ネームを有するオブジェクトが削除されるときにもネームが消失することがある。ファシリティは、消失されるネーム、この場合は「ｌｅｄｇｅｒ．ｘｌｓ」を最新のネーム消失ログへ追加するためにＰｒｏｃｅｓｓＤｉｓａｐｐｅａｒａｎｃｅサブルーチンを呼び出すのが好ましい。
【００６５】
図１５は、ＰｒｏｃｅｓｓＤｉｓａｐｐｅａｒａｎｃｅサブルーチンのフローチャートである。このサブルーチンは、オブジェクトネームが消失するたびに呼び出される。ステップ１５０１において、ファシリティは、消失するネームと、消失するネームを有するオブジェクトのオブジェクト識別子と、消失したネームが再び現れるときにオブジェクトに転送されるオブジェクトに対応する他の情報とを含むネーム消失ログへエントリーを付加する。時間ｔ5において、Ｒｅｖｉｓｉｏｎ３オブジェクトが「ｌｅｄｇｅｒ．ｘｌｓ」と再ネーム付けされるときに、このネームは「出現する」と言える。ネームを有するオブジェクトが形成されるとき又は既存のオブジェクトがネームを有するように再ネーム付けされるときに、ネームが出現する。ネームが出現すると、ファシリティは、ネームが「再出現」するかどうか、即ち最近消失した後に現れるかどうかを決定する。出現するネームが再出現するかどうかを決定するために、ファシリティは、ＰｒｏｃｅｓｓＡｐｐｅａｒａｎｃｅサブルーチンを呼び出して、出現するネームに対し最新ネーム消失ログをチェックする。最新ネーム消失ログが出現するネームを含む場合には、ファシリティは、ネームが再出現すると結論する。ファシリティは、ネームが再出現すると結論する場合に、再出現するネームを有するオブジェクトを消失したネームを有するオブジェクトとユーザが置き換えようとするという仮定を使用し、そして消失したネームを有するオブジェクトへのリンクが再出現するネームを有するオブジェクトに対して解明されるようにする。このため、再出現するネームを有するオブジェクトがまだオブジェクト識別子を有していない場合に、ファシリティは、消失したネームを有するオブジェクトのオブジェクト識別子を再出現するネームを有するオブジェクトへ「転送」又は「トンネル通過」させ、再出現するネームを有するオブジェクトのオブジェクト識別子を消失したネームを有するオブジェクトのオブジェクト識別子に変更するのが好ましい。（消失したネームを有するオブジェクトのオブジェクト識別子は、この目的で最新ネーム消失ログに記憶されるのが好ましい。）
【００６６】
図１６は、ＰｒｏｃｅｓｓＡｐｐｅａｒａｎｃｅサブルーチンのフローチャートである。このＰｒｏｃｅｓｓＡｐｐｅａｒａｎｃｅサブルーチンは、オブジェクトネームが現れるたびに呼び出される。ファシリティは、先ず、出現するネームがネーム消失ログにあるかどうか決定する。ステップ１６０１において、出現するネームがネーム消失ログにある場合には、出現するネームは再出現し、ファシリティは、ステップ１６０２へ続き、さもなくば、出現するネームは再出現せず、ファシリティは復帰となる。ステップ１６０２において、ネームが再出現するオブジェクトがオブジェクト識別子を既に有している場合には、ファシリティは復帰となり、さもなくば、ファシリティはステップ１６０３へ続く。ステップ１６０２は、オブジェクトのオリジナルオブジェクト識別子と別のものとの置き換えを防止し、従って、オリジナルオブジェクト識別子へのリンクが遮断されることはない。ステップ１６０３では、ファシリティは、再出現するネームが消失したところのオブジェクトのオブジェクト識別子を、ネームが再出現するところのオブジェクトへトンネル通過させる。又、ステップ１６０３は、再出現するネームが消失したところのオブジェクトの他の特性、例えば、特徴、属性及び長いオブジェクトネームを、ネームが再出現するところのオブジェクトへコピーすることを含むのが好ましい。この例では、Ｒｅｖｉｓｉｏｎ３オブジェクトのオブジェクト識別子が時間ｔ5において「０００２：０００１」へ変更される。消失したネームを有するオブジェクトが依然として存在する（即ち、再ネーム付けされ、削除されていない）場合には、ファシリティは、オブジェクトに新たなオブジェクト識別子を指定するのが好ましい。新たなオブジェクト識別子は、同じ子孫識別子及び異なる区別識別子を有するのが好ましい。この例では、Ｒｅｖｉｓｉｏｎ２オブジェクトのオブジェクト識別子が時間ｔ5において「０００２：０００２」へ変更される。ｔ1に形成されたリンクはオブジェクト識別子「０００２：０００１」を含むので、ｔ5においてリンクはＲｅｖｉｓｉｏｎ３オブジェクトに対して解明される。Ｒｅｖｉｓｉｏｎ３オブジェクトが削除されるか又はアクセス不能なボリュームへ移動される場合には、リンクは、同じ子孫識別子及び異なる区別識別子を有するＲｅｖｉｓｉｏｎ２オブジェクトに対して解明される。又、ファシリティは、消失したネームを有するオブジェクトに関連した他の特性、例えば、特徴、属性及び長いオブジェクトネームを、再出現するネームを有するオブジェクトへコピーするのが好ましい。
【００６７】
ネームの出現は、ファイルシステムにおいてしばしば生じ、ネーム消失ログに記憶された消失したネームのリストをファシリティがしばしばサーチすることを必要とする。このサーチが行われるたびに消費される処理及びメモリアクセスリソースを最小にするために、ファシリティは、回転する消失ネームハッシュリストを用いて、最新ネーム消失ログが出現するネームを含むかどうかの決定を促進することが好ましい。回転する消失ネームハッシュリストは、少数のエントリーを含み、その各々は、最近消失したネームに対応し、そしてハッシュアルゴリズムにより例えば１６ビットの小さな値に減少されたネームで構成される。消失するネームが最新ネーム消失ログに追加されるたびに、最も古いエントリーの内容が、その消失したネームに対し、減少された即ち「ハッシュ」された値と置き換えられる。ファシリティは、出現するネームが再出現するかどうか判断するよう試みるときに、最初に、出現するネームをハッシュし、そしてそれにより得られるハッシュ値に対し回転する消失ネームハッシュリストをチェックする。ハッシュ値に対し回転する消失ネームハッシュリストをチェックすることは、小さなハッシュ値を少数の他の小さなハッシュ値と比較することを含むので、チェックは非常に迅速に行われる。回転する消失ネームハッシュリストがハッシュ値を含まない場合には、ファシリティは、出現するネームが再出現しないと結論し、さもなくば、ファシリティは、出現するネームに対し最新ネーム消失リストをチェックするように進む。
【００６８】
更に、ファシリティは、ソースオブジェクトをアーカイブ及び回復することに伴う問題も解消する。アーカイブされたオブジェクトが回復されるときには、ファシリティは、その子孫識別子を変更せず、新たな区別識別子を指定する。その結果、回復は、既存のオブジェクトと同一のオブジェクト識別子をもつ別のオブジェクトを導入することはない。リンクがオリジナルソースオブジェクトに対して形成されそしてオリジナルソースオブジェクトがその後にアーカイブされて回復される場合には、回復されたソースオブジェクトは、オリジナルソースオブジェクトと同じ子孫識別子、及び異なる区別識別子を有する。次いで、リンクが解明される場合には、ファシリティは、先ず、一致する子孫識別子及び区別識別子をもつオブジェクトを探す。オリジナルソースオブジェクトが依然として存在する場合には、このサーチによりそれが見つかる。オリジナルソースオブジェクトがもはや存在しない場合には、ファシリティは、同じ子孫識別子を有するオブジェクトをサーチする。この第２のサーチは、回復されたソースオブジェクトを見つけ、ファシリティはこれに対して解明する。アーカイブ及び回復は、同じオブジェクト識別子を有する２つの異なるオブジェクトを生じることはないので、ファシリティは、ソースオブジェクトのアーカイブ及び回復に伴う問題を受けることはない。
【００６９】
更に、ファシリティは、ファイルのグループをコピーするときに遭遇するリンクの解明の問題を克服する。多くのファイルシステムは、オブジェクトのグループ、例えば、特定のディレクトリにおける全てのオブジェクト、又はファイルシステムハイアラーキのサブツリーにおける全てのオブジェクトを同時にコピーするコマンドを有する。図１７Ａ−１７Ｂは、オブジェクトグループコピーコマンドを使用して、クライエントオブジェクトと、クライエントオブジェクトにおけるリンクのソースであるオブジェクトの両方をコピーすることにより生じる問題を示している。
【００７０】
図１７Ａは、ソース「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクト１７０３へのリンク１７０２を含む「ｒｅｐｏｒｔ．ｄｏｃ」オブジェクト１７０１を示している。リンクは、「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクトの子孫識別子「７１７７」及びその区別識別子「２１５５」を含んでいる。「ｒｅｐｏｒｔ．ｄｏｃ」及び「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクトは、「ａｃｍｅ」と称するカンパニーに関連し、「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリに含まれる。「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリは、最初、空である。
【００７１】
「ａｊａｘ」と称するカンパニーに関連したオブジェクト１７０１及び１７０３に対応するオブジェクトを形成するために、ユーザは、オブジェクトグループコピーコマンドを用いて、オブジェクト１７０１及び１７０３を「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリへコピーし、コピーされた両方のオブジェクトを編集して、「ａｃｍｅ」と称するカンパニーに関連させようとする。
【００７２】
図１７Ｂは、オブジェクトグループコピーコマンドを用いて「＼ｃｏｍｐａｎｉｅｓ＼ａｃｍｅ」ディレクトリから「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリへコピーされたクライエント及びソースオブジェクトを示している。オブジェクト１７０１及び１７０３は、図１７Ａから不変である。「ｒｅｐｏｒｔ．ｄｏｃ」オブジェクト１７０１のコピー１７１１は、「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクト１７０３のコピー１７１３と同様に、「＼ｃｏｍｐａｎｉｅｓ＼ａｊａｘ」ディレクトリに形成されている。両コピーオブジェクトは、対応するオリジナルオブジェクトと同じ子孫識別子と、対応するオリジナルオブジェクトとは異なる区別識別子とを有し、これらコピーをオリジナルと区別している。「ｒｅｐｏｒｔ．ｄｏｃ」オブジェクトのコピー１７１１は、厳密なコピーであるから、リンク１７０２の厳密なコピー１７１２を含んでいる。リンクコピー１７１２からの矢印で示されたように、リンクコピーは、依然としてオリジナル「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクト１７０３に対して解明するのであって、コピー「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクト１７１３に対するものではなく、これは、リンク１７１２に記憶された区別識別子とは異なる区別識別子を有する。これは殆ど問題ではないが、オリジナル「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクト１７０３及びコピー「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクト１７１３は同一のままであり、ユーザは、コピー「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクト１７１３を直ちに編集して、リンク１７１２によりコピー「ｒｅｐｏｒｔ．ｄｏｃ」オブジェクト１７１１に組み込まれたデータを変更することができる。リンク１７１２はオリジナル「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクト１７０３に対して解明するので、リンク１７１２によりコピー「ｒｅｐｏｒｔ．ｄｏｃ」オブジェクト１７１１に組み込まれたデータは変化せず、従って、ユーザの期待を裏切ることになる。
【００７３】
図１７Ｃは、ファイルのグループをコピーするときに遭遇するリンク解明問題をファシリティがいかに克服するかを示している。ファイルのグループをコピーするときに遭遇するリンク解明問題を克服するために、ファシリティは、図１７Ｃに示すように、コピー「ｌｅｄｇｅｒ．ｘｌｓ」オブジェクト１７１３を参照するようにリンク１７１２を更新する。これは、コピーされるリンクにおけるデータを組み立てながら、グループコピーコマンドを実行し、そしてグループコピーコマンドの完了直後に組み立てられたデータに基づいて必要なリンクを更新することを含む。グループコピーコマンドを実行する間に、ファシリティは２つのテーブルを構成する。クライエントオブジェクトテーブルは、グループコピーコマンドによりコピーされる各クライエントオブジェクトに対するエントリーを含み、これは、クライエントオブジェクトのファイルネームと、クライエントオブジェクトにより含まれた各リンクのオブジェクト識別子とを指示する。ソースオブジェクトテーブルは、グループコピーコマンドによりコピーされる各ソースオブジェクトに対するエントリーを含み、これは、オリジナルソースオブジェクトのオブジェクト識別子と、コピーソースオブジェクトのオブジェクト識別子（これは、オリジナルソースオブジェクトと同じ子孫識別子を有するが、オリジナルソースオブジェクトとは異なる区別識別子を有する）とを指示する。グループコピーコマンドが完了する直後に、ファシリティは、クライエントオブジェクトテーブルを横切る。クライエントオブジェクトテーブルの各エントリーに対し、ファシリティは、各含まれたリンクのオブジェクト識別子を検索する。ファシリティは、ソースオブジェクトテーブルにおいてこのオブジェクト識別子をルックアップし、このオブジェクト識別子を有するリンクのソースがオブジェクトグループコピーコマンドによりコピーされたものであるかどうかを決定する。オブジェクト識別子がソースオブジェクトテーブルにおいてオリジナルソースオブジェクトのオブジェクト識別子として現れる場合には、リンクのソースはオブジェクトグループコピーコマンドによってコピーされており、ファシリティは、クライエントファイルをアクセスするためのクライエントオブジェクトテーブルからのファイルネームを使用して、コピークライエントオブジェクトにおけるリンクのこのオブジェクト識別子をソースオブジェクトテーブルからのコピーオブジェクトのオブジェクト識別子に対して更新する。
【００７４】
ファシリティがリンクを解明するときに、オブジェクト識別子がリンクのオブジェクト識別子に一致するようなオブジェクトを見つけた場合には、ファシリティは、そのオブジェクトに対して直ちに解明する。というのは、所与のオブジェクト識別子をもつオブジェクトは１つしか存在し得ないからである。一方、オブジェクト識別子がリンクのオブジェクト識別子に一致するようなオブジェクトをファシリティが見つけられない場合は、ファシリティは、子孫識別子がリンクの子孫識別子に一致するような多数の候補オブジェクトを見つけることができる。
【００７５】
それらの子孫識別子がリンクの子孫識別子と一致するので、全ての候補オブジェクトはオリジナルソースオブジェクトに関連され、ある方法を用いて、それらの１つを選択してリンクを解明しなければならない。ＭａｔｃｈＯｂｊｅｃｔサブルーチンのフローチャートは、サブルーチンがこのようなオブジェクトのリストを表示することを示し、ファシリティがリンクを解明すべきところのそれらオブジェクトの１つをユーザが選択できるようにする。ある状況においては、ファシリティは、候補オブジェクト及びクライエントオブジェクトに関する情報を用いて１つの候補オブジェクトを自動的に選択できるのが好ましい。例えば、１つの候補オブジェクトのみがクライエントオブジェクトと同じ所有者を有する場合には、ファシリティは、その候補オブジェクトを選択する。同様に、１つの候補オブジェクトがファイルシステムにおいて他の候補オブジェクトよりもクライエントオブジェクトに相当に接近しており、即ち他の候補オブジェクトよりも僅かなディレクトリを経て移動することによりクライエントオブジェクトを含むディレクトリから到達できる場合には、ファシリティは、その接近したオブジェクトを選択する。又、１つの候補オブジェクトのパスネームのファイルネーム部分が、リンクに記憶されたパスネームのファイルネーム部分に一致する場合には、ファシリティは、このオブジェクトを選択する。
【００７６】
コンピュータシステムの第１ボリュームに記憶されたオブジェクトは、同じコンピュータシステム又は異なるコンピュータシステムの第２ボリュームへ移動することができるので、リンクを解明するときには、ファシリティは、リンクを含むオブジェクトが存在するボリューム以外のボリュームにおいてソースオブジェクトをサーチできるのが好ましい。各々のアクセス可能なボリュームの全処理サーチがおそらく最も有効であるが、アクセス可能なボリュームの番号は、１００番代で番号付けされ、全処理サーチを実行不能又は少なくとも不都合なものにする。むしろ、ファシリティは、ソースオブジェクトを含むおそれの高いボリュームをサーチのために選択する。
【００７７】
図１８は、リンクを解明するためのボリュームサーチの進行を示すフローチャートである。この図は、種々の関連するボリュームが好ましくサーチされる順序を示している。シークしたソースオブジェクトがある段階において見つかった場合には、サーチプログラムが終了となる。
【００７８】
リンクは、ソースオブジェクトが初期に位置していた１つ以上のパスネームを含むのが好ましい。リンクに記憶されるパスネームは、クライエントオブジェクトに対するソースオブジェクトの位置を記述する相対的なパスネームと、全ボリュームハイアラーキに対するソースオブジェクトの位置を記述する絶対的なパスネームとの両方を含むのが好ましい。ステップ１８０１において、ファシリティは、これらパスネームのいずれかにソースオブジェクトが依然として存在するかどうかを調べるべくチェックする。ステップ１８０１は、全ボリュームのサーチを伴わない唯一のサーチ段階であるから、他のサーチ段階の前に行われるのが好ましい。リンクに記憶されたパスネームを用いてステップ１８０１においてファシリティにより見つかったオブジェクトは、それらのオブジェクト識別子をリンクに記憶されたものと比較することにより照合されるのが好ましい。
【００７９】
又、リンクは、ソースオブジェクトを以前に保持したボリュームである暗示ボリュームの指示も含むのが好ましい。リンクにおけるこの暗示ボリュームは、リンクが解明されるたびに更新されるのが好ましい。ステップ１８０２において、ファシリティは、ソースオブジェクトに対して暗示ボリュームをサーチする。
【００８０】
ステップ１８０３において、ファシリティは、全てのローカルボリューム、即ちコンピュータシステムに含まれた記憶ボリュームであってクライエントオブジェクトが存在する全ての記憶ボリュームをサーチする。
【００８１】
各ユーザは、彼又は彼女が通常ソースオブジェクトを記憶するボリュームのリスト（手動ボリュームリストと称する）を維持するのが好ましい。ステップ１８０４では、ファシリティは、ソースオブジェクトに対し手動ボリュームにおいてボリュームをサーチする。
【００８２】
コンピュータシステムは、そのネットワーク接続を用いて別のコンピュータシステムのボリュームへ接続されるたびに、接続ログに入力を行うのが好ましい。
【００８３】
ファシリティは、接続ログを、「レジストリ」と称するソースオブジェクトを含むおそれのある他のコンピュータシステムのボリュームの自動ボリュームリストに対するソースとして使用する。ファシリティは、接続ログのエントリがレジストリに追加されるようにレジストリを維持するのが好ましい。ソースオブジェクトが対応するリモートボリュームにおいて普通に見つかる場合にはレジストリにエントリが保持され、そしてソースオブジェクトが対応するリモートボリュームにおいて滅多に見つからない場合にはエントリが破棄される。ステップ１８０５において、ファシリティは、レジストリにおけるボリュームをサーチする。ファシリティは、ソースオブジェクトを含むおそれのある多数のボリュームをサーチできるので、ソースオブジェクトを見つける機会は、サーチを行うために必要とされるリソースに対して最適なものとすることができる。
【００８４】
図１９は、例示的なレジストリを示す図である。このレジストリは、一定数のエントリ、ここでは、９つのエントリ１９０１−１９０９を含んでいる。各エントリは、ソースオブジェクトを含むリモートボリュームへのパス（「その指示」としても知られている）を含む。エントリ１９０１は、ソースオブジェクトを最も含み易いボリュームへのパスを含み、エントリ１９０２は、２番目に含み易いボリュームへのパスを含み、等々となる。ステップ１８０５が実行されるときには、ファシリティは、エントリ１９０１で始めて、レジストリの各エントリごとにボリュームのソースオブジェクトをサーチする。リモートボリュームの１つにおいてソースオブジェクトが見つかった場合には、そのボリュームのエントリは、レジストリにおいてその現在位置から好ましくはレジストリの上部へと上方に移動され、いかなる変位エントリも１位置だけ下方にシフトする。コンピュータシステムが新たなリモートボリュームに接続されるときには、ファシリティは、新たなボリュームに対しレジストリにエントリが存在するかどうか調べるべくチェックする。皆無である場合には、ファシリティは、新たなボリュームへのパスを含むレジストリ、好ましくはレジストリの中央に新たなエントリ１９１０を挿入する。これは、挿入ポイントより下のエントリを各々１位置だけ下方にシフトし、そして最も下のエントリ１９０９をレジストリから除去し、即ち「その底部から落下」させる。これは、ソースオブジェクトがそのボリュームに見つかった場合にそれが底部から落下する前に新たなエントリを上部へ昇進させる機会を与えることができる。ソースオブジェクトが規則的に見つかるようなリモートボリュームに対応するエントリをレジストリに保持するための他の解決策も代用できることが当業者に明らかであろう。例えば、ファシリティは、対応するリモートボリュームにおいて見つかるソースオブジェクトの個数、対応するリモートボリュームにおいてソースオブジェクトが見つかる割合、又は対応するリモートボリュームにおいてソースオブジェクトが最後に見つかってからの時間に基づいてレジストリのエントリを保持又は破棄することができる。
【００８５】
ファシリティは、リモートボリュームリストのリストを維持するのが好ましい。各リモートボリュームリストは、個々のコンピュータシステムに維持され、ソースオブジェクトを含み勝ちなボリュームを列挙する。ステップ１８０６では、ファシリティは、ソースオブジェクトに対し全てのリモートボリュームリストにおける全てのボリュームをサーチする。又、好ましい実施形態では、ファシリティは、リモートボリュームリストのリストそれ自体をボリュームリストとして用いて、ソースオブジェクトに対しリストされたリモートボリュームリストを含むボリュームをサーチする。
【００８６】
ステップ１８０７では、ファシリティは、ローカルマシンが接続された各マシンへサーチ要求を放送する。サーチ要求は、各接続されたマシンがソースオブジェクトに対し全てのボリュームをサーチし、そしてコンピュータシステムがソースオブジェクトを位置決めする場合にローカルマシンに報告を戻すように命令する。ステップ１８０７は、比較的多量の処理及びネットワーク転送リソースを消費する。このように、ファシリティは、このステップを省略するように構成できるのが好ましい。次いで、ファシリティは復帰となる。
【００８７】
図１８に示すステップにおいてファシリティによりサーチするように識別されたあるボリュームは、ソースオブジェクトに対するオブジェクト識別子の維持をサポートしないことがある。これらの「ダウンレベル」ボリュームの場合には、オブジェクト識別子に基づいてソースオブジェクトをサーチするのではなく、ファシリティは、その基準日付及び時刻に基づいてソースオブジェクトをサーチするのが好ましい。このため、ソースオブジェクトの位置、日付及び時刻がリンクに記憶される。形成日付及び時刻は、詳細な子孫識別子よりも弁別性が悪く、オリジナルソースオブジェクトをコピーから区別するための区別識別子に対応する情報を含まないが、それらは、通常はそれらのオブジェクトがコピーされるときにコピーされるので、子孫の指示を与える。
【００８８】
一般にオブジェクトは成形から削除まで同じ子孫識別子を維持するが、既存のオブジェクトに新たな子孫識別子を指定しなければならない場合もある。ユーザは、既存の完全なオブジェクトを新たなオブジェクトに対するテンプレートとしてしばしば使用する。即ち、ユーザは、既存の完全なオブジェクトをロードしたり、それを編集したり、その構造及びフォーマットのほとんどを残しながらその内容のほとんどを削除したり、それを新たなネームのもとでセーブしたりすることがある。これは、一般に、ファシリティによりオブジェクトの単なるコピーとみなされ、ファシリティは、これに応答して、同じ子孫識別子及び新たな区別識別子を指定する。しかしながら、これらの「テンプレート状」オブジェクトは、通常、それらの「テンプレート」とは完全に異なる内容を有し、従って、「テンプレート」オブジェクトに対して形成されたリンクは、「テンプレート状」オブジェクトに対して解明されてはならない。それ故、この状況においては、ファシリティは、新たな子孫識別子及び新たな区別識別子を「テンプレート状」オブジェクトに指定する。「テンプレート状」オブジェクトは、その「テンプレート」オブジェクトの実質的な代替物であると言える。
【００８９】
ファシリティは、コピーされたと思われるオブジェクトが実際にテンプレート状であったかどうか決定するために発見的手順を用いるのが好ましい。オブジェクトがロードされたときには、ファシリティは、そのサイズを記録する。オブジェクトが新たなネームでセーブされるときには、ファシリティは、オブジェクトのサイズがそれがロードされてから実質的に減少されたか（例えば、その元のサイズの２０％以下）どうか調べるべくチェックする。もしそうであれば、ファシリティは、セーブされるオブジェクトに新たな子孫識別子及び新たな区別識別子を指定する。もしそうでなければ、ファシリティは、セーブされるオブジェクトに、ロードされたオブジェクトと同じ子孫識別子及び異なる区別識別子を指定する。
【図面の簡単な説明】
【００９０】
【図１】図１は、リンクの使用を示す図である。
【図２】図２は、リンクを記憶しそして解明する従来の方法を示す図である。
【図３Ａ】図３Ａは、コピー及び削除コマンドを用いてソースオブジェクトを再ネーム付けするときに生じる問題を示すブロック図である。
【図３Ｂ】図３Ｂは、コピー及び削除コマンドを用いてソースオブジェクトを再ネーム付けするときに生じる問題を示すブロック図である。
【図３Ｃ】図３Ｃは、コピー及び削除コマンドを用いてソースオブジェクトを再ネーム付けするときに生じる問題を示すブロック図である。
【図４Ａ】図４Ａは、コピー及び削除コマンドを用いてソースオブジェクトを移動するときに生じる問題を示すブロック図である。
【図４Ｂ】図４Ｂは、コピー及び削除コマンドを用いてソースオブジェクトを移動するときに生じる問題を示すブロック図である。
【図５】図５は、ロケータテーブルの具現化を示す図である。
【図６】図６は、ファシリティがその中で好ましく動作するところの汎用コンピュータシステムの高レベルブロック図である。
【図７】図７は、オブジェクト識別子がオブジェクトパスネームに対してマップされるオブジェクト識別子テーブルの具現化を示す概略図である。
【図８】図８は、オブジェクト識別子がファイルシステム識別子に対して直接マップされるオブジェクト識別子テーブルの具現化を示す概略図である。
【図９】図９は、ソースオブジェクトを位置決めするための第１のＭａｔｃｈＯｂｊｅｃｔサブルーチンを示すフローチャートである。
【図１０】図１０は、ソースオブジェクトを位置決めするための第２のＭａｔｃｈＯｂｊｅｃｔサブルーチンを示すフローチャートである。
【図１１Ａ】図１１Ａは、いかにファシリティがコピー及び削除問題を克服するかを示すブロック図である。
【図１１Ｂ】図１１Ｂは、いかにファシリティがコピー及び削除問題を克服するかを示すブロック図である。
【図１１Ｃ】図１１Ｃは、いかにファシリティがコピー及び削除問題を克服するかを示すブロック図である。
【図１２Ａ】図１２Ａは、異なるディレクトリへのリンクを含むオブジェクトの移動の問題をいかにファシリティが克服するかを示すブロック図である。
【図１２Ｂ】図１２Ｂは、異なるディレクトリへのリンクを含むオブジェクトの移動の問題をいかにファシリティが克服するかを示すブロック図である。
【図１３】図１３は、多くのアプリケーションプログラムがオブジェクトの新たな改定をセーブするのに使用するプロセスを示すオブジェクト状態タイミング図である。
【図１４】図１４は、多くのアプリケーションプログラムがオブジェクトの新たな改定をセーブするのに使用するプロセスをいかにファシリティが好ましく取り扱うかを示すオブジェクト状態タイミング図である。
【図１５】図１５は、ＰｒｏｃｅｓｓＤｉｓａｐｐｅａｒａｎｃｅサブルーチンのフローチャートである。
【図１６】図１６は、ＰｒｏｃｅｓｓＡｐｐｅａｒａｎｃｅサブルーチンのフローチャートである。
【図１７Ａ】図１７Ａは、クライエントオブジェクトと、そのクライエントオブジェクトにおけるリンクのソースであるオブジェクトとの両方をコピーするためにオブジェクトグループコピーコマンドを使用することにより生じる問題を示す図である。
【図１７Ｂ】図１７Ｂは、クライエントオブジェクトと、そのクライエントオブジェクトにおけるリンクのソースであるオブジェクトとの両方をコピーするためにオブジェクトグループコピーコマンドを使用することにより生じる問題を示す図である。
【図１７Ｃ】図１７Ｃは、ファイルのグループをコピーするときに遭遇するリンク解明問題をファシリティがいかに克服するかを示す図である。
【図１８】図１８は、リンクを解明するためのボリュームサーチの進行を示すフローチャートである。
【図１９】図１９は、サンプル登録を示す図である。
【図１】
2005044370.tif 000003
【図２】
2005044370.tif 000004
【図３Ａ】
2005044370.tif 000005
【図３Ｂ】
2005044370.tif 000006
【図３Ｃ】
2005044370.tif 000007
【図４Ａ】
2005044370.tif 000008
【図４Ｂ】
2005044370.tif 000009
【図５】
2005044370.tif 000010
【図６】
2005044370.tif 000011
【図７】
2005044370.tif 000012
【図８】
2005044370.tif 000013
【図９】
2005044370.tif 000014
【図１０】
2005044370.tif 000015
【図１１Ａ】
2005044370.tif 000016
【図１１Ｂ】
2005044370.tif 000017
【図１１Ｃ】
2005044370.tif 000018
【図１２Ａ】
2005044370.tif 000019
【図１２Ｂ】
2005044370.tif 000020
【図１３】
2005044370.tif 000021
【図１４】
2005044370.tif 000022
【図１５】
2005044370.tif 000023
【図１６】
2005044370.tif 000024
【図１７Ａ】
2005044370.tif 000025
【図１７Ｂ】
2005044370.tif 000026
【図１７Ｃ】
2005044370.tif 000027
【図１８】
2005044370.tif 000028
【図１９】
2005044370.tif 000029