(57)【要約】コンピュータにおけるアーカイバルは、コピーされるアイテムがディレクトリである場合、プロセスを生成することによって、および代わりにアイテムがファイルである場合（図１Ａ、１０１）、アイテムをコピーすることによって行なわれる。生成されたプロセスは次に、上述の行為、たとえば作成するまたはコピーする行為（図１Ｂ、１０３）を、上述のディレクトリにある別のアイテムとともに、再帰的に行なう。したがって、コピーされるディレクトリの数次第で、対応する数のプロセスが生成され得（図２Ａ，１１７）、これによりコピーの速度が上がる。コピープロセスに利用可能なリソースのデフォルト値制限は、コピーを迅速に行なうために、リソースにとっての最大制限に設定され得る（図２Ａ、１１１）。アーカイバルは、データをファイルから一時バッファに転送し、一時バッファをロックし、かつ直接メモリアクセス（ＤＭＡ）プロセスを引き起こすことによって、速度を上げることができる。アーカイバルはまた、（それ自身を指す記号のリンク等の）円形リンクのコピーをチェックするおよび削除することによって、速度を上げることができる。このような生成されたプロセスは、宛先のリソースが一杯である場合、ｅメールメッセージを送信し、ｅメールメッセージを送信した後で再始動されるのを待ち得る。ｅメールメッセージを受信するユーザは、適切な処置を行ない（たとえば宛先ディスクのファイルを削除する、または新しいディスクをロードする）、その後で停止されたプロセスを再始動する。再始動されると、プロセスは、それが停止されたのがファイルをコピーする最中であった場合、ファイルを再びコピーする。
2004528646.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータで実現されるアイテムをコピーする方法であって、
コピーされるアイテムがディレクトリである場合、プロセスを生成するステップと、
該アイテムがファイルである場合、該アイテムをコピーするステップとを含む、方法。
【請求項２】
該ディレクトリにおける別のアイテムに対して、作成またはコピーするという行為を行なうプロセスをさらに含む、請求項１に記載の方法。
【請求項３】
コピーした後で、
別のアイテムに対して、作成またはコピーするという行為を繰返すステップをさらに含む、請求項１に記載の方法。
【請求項４】
生成する前に、
コピーするために開始されたプロセスの現在の数を、制限と比較するステップと、
該現在の数が該制限よりも大きい、または該制限と等しい場合に、待つステップとをさらに含む、請求項１に記載の方法。
【請求項５】
コピーする前に、
リソースのデフォルト値制限から該リソースにとっての最大制限に増大させるステップをさらに含む、請求項１に記載の方法。
【請求項６】
該リソースは開いたファイルの数である、請求項５に記載の方法。
【請求項７】
該リソースはファイルのサイズである、請求項５に記載の方法。
【請求項８】
該リソースはメモリである、請求項５に記載の方法。
【請求項９】
該メモリはスタックとして編成される、請求項８に記載の方法。
【請求項１０】
該メモリはヒープとして編成される、請求項８に記載の方法。
【請求項１１】
該コピーするステップは、
データを該ファイルから一時バッファへ転送するステップと、
該一時バッファをロックするステップと、
該一時バッファからコピーするために、直接メモリアクセス（ＤＭＡ）プロセスを引起こすステップとを含む、請求項１に記載の方法。
【請求項１２】
コピーする前に、
該アイテムがそれ自身へのリンクであるかどうかをチェックするステップと、
該アイテムがそれ自身へのリンクではない場合にのみ、前記コピーを行なうステップとをさらに含む、請求項１に記載の方法。
【請求項１３】
該チェックするステップは、ストリング比較動作を含む、請求項１２に記載の方法。
【請求項１４】
コピーの際に、
宛先のリソースが一杯である場合、ｅメールメッセージを送信するステップをさらに含む、請求項１に記載の方法。
【請求項１５】
コピーの際に、
該ｅメールメッセージを送信した後で、再始動されるのを待つステップをさらに含む、請求項１４に記載の方法。
【請求項１６】
前記待つステップは、
信号を自身に送信して、実行を中断するステップを含む、請求項１５に記載の方法。
【請求項１７】
コピーする際に、
再始動されると、前記ファイルを始めから再びコピーするステップをさらに含む、請求項１４に記載の方法。
【請求項１８】
作成またはコピーを行なうプロセスを開始したユーザの識別（identity)に基づいて、パスワードファイルからｅメールアドレスを識別するステップをさらに含む、請求項１４に記載の方法。
【請求項１９】
前記生成するステップは、前記ディレクトリが現在のディレクトリではなく、かつ親ディレクトリでない場合にのみ、行なわれる、請求項１に記載の方法。
【請求項２０】
コンピュータで実現されるファイルをコピーする方法であって、
リソースのデフォルト値制限から該リソースにとって最大制限に増大させるステップと、
ファイルをコピーするステップとを含む、方法。
【請求項２１】
前記リソースは、（開いたファイルの数、ファイルのサイズおよびメモリ）のうちの１つである、請求項２０に記載の方法。
【請求項２２】
コンピュータで実現されるファイルをコピーする方法であって、
データを該ファイルから一時バッファへ転送するステップと、
該一時バッファをロックするステップと、
該一時バッファからコピーするために、直接メモリアクセス（ＤＭＡ）プロセスを引起こすステップとを含む、方法。
【請求項２３】
転送する前に、
該ファイルがそれ自身へのリンクであるかどうかをチェックするステップと、
該ファイルがそれ自身へのリンクではない場合にのみ、前記コピーを行なうステップとをさらに含む、請求項２２に記載の方法。
【請求項２４】
コンピュータで実現されるファイルをコピーする方法であって、
ファイルをコピーするステップと、
宛先のリソースが一杯である場合、ｅメールメッセージを送信するステップとを含む、方法。
【請求項２５】
該ｅメールメッセージを送信した後で、再始動されるのを待つステップをさらに含む、請求項２４に記載の方法。
【請求項２６】
該コピーを開始したユーザの識別（identity)に基づいて、パスワードファイルからｅメールアドレスを識別するステップをさらに含む、請求項２４に記載の方法。
【請求項２７】
ファイルをコピーする方法であって、
ファイルをコピーするためにプロセスを開始するステップと、
宛先のリソースが一杯である場合、ｅメールメッセージを受信するステップとを含む、
方法。
【請求項２８】
該ｅメールメッセージに応答して、該宛先の該リソースを変更するステップと、
該プロセスを再始動するステップとをさらに含む、請求項２７に記載の方法。
【請求項２９】
アイテムをコピーするための装置であって、
コピーされるアイテムがディレクトリである場合、プロセスを生成するための手段と、
該アイテムがファイルである場合、該アイテムをコピーするための手段とを含む、装置。
【請求項３０】
宛先ディスクが一杯である場合、ｅメールメッセージを送信するための手段をさらに含む、請求項２９に記載の装置。
【請求項３１】
リソースの制限を最大に増大させるための手段をさらに含む、請求項２９に記載の装置。
【請求項３２】
前記コピーするための手段は、
一時バッファを使用するための手段と、
直接メモリアクセス（ＤＭＡ）を使用するための手段とを含む、請求項２９に記載の装置。
【請求項３３】
該アイテムがそれ自身へのリンクであるかどうかをチェックするための手段をさらに含む、請求項２９に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
ユニックス（Unix（Ｒ））オペレーティングシステムのための２つのファイルアーカイビングユーティリティは、ＣＰＩＯ（コピー  イン／アウト）およびＴＡＲ（テープアーカイバ）である。双方のユーティリティを、システムをバックアップするために、またはただファイルアーカイブを作成するのに使用することができる。これらは本来、テープデバイスとともに使用されることが意図されていたが、双方はディスク上でアーカイブファイルを作成する。別のユーティリティであるＤＵＭＰはまた、ファイルシステムをバックアップするのに使用され得る。対応するユーティリティＲＥＳＴＯＲＥは、ＤＵＭＰバックアップからデータを復元する。ＲＥＳＴＯＲＥはインタラクティブに使用されて、あるファイルまたはディレクトリのみを復元し得る。
【０００２】
ＢＳＤユニックスにおいて、ＴＡＲユーティリティは、ユーティリティＰＡＸへのフロントエンドとして実現される。（１つのモードの）ＰＡＸはファイルオペランドを宛先ディレクトリにコピーする。ファイルオペランドは、コピーされるまたはアーカイブされるファイルのパスネームを指定する。ファイルオペランドが、少なくとも１つのアーカイブメンバを選択しないとき、ＰＡＸは、これらのファイルオペランドパスネームを診断メッセージで標準エラーに書込み、次に非ゼロ出口ステータスで終了する。ファイルオペランドが指定されないとき、コピーするファイルのリストが１行につき１つ、標準入力から読取られる。ファイルオペランドがディレクトリであるとき、そのディレクトリに根づくすべてのファイル階層が含まれる。コピーの効果は、元のファイルおよびコピーされたファイルの間にハードなリンクがあり得ることを除けば、あたかもコピーされたファイルがアーカイブファイルに書込まれ、その後で抽出されるというようなものである（−１オプションを参照）。読取動作またはリストの動作中に損傷を受けたアーカイブを処理する間に、ＰＡＸはメディア欠陥からの回復を試み、アーカイブを検索して、できるだけ最大数のアーカイブメンバを見つけ出しかつ処理する（誤り処理に関するさらなる詳細として、−ｅオプションを参照されたい）。
【０００３】
ディレクトリオペランドは宛先ディレクトリパスネームを指定する。ディレクトリオペランドが存在しない、それがユーザによって書込可能でない、またはそれがタイプディレクトリでない場合、ＰＡＸは非ゼロ出口ステータスで終了する。パターンオペランドを使用して、アーカイブメンバの１つ以上のパスネームを選択することができる。アーカイブメンバは、fnmatch（３）によって記述されたパターン照合表記法を使用して選択される。パターンオペランドが与えられないとき、アーカイブのすべてのメンバが選択される。パターンがディレクトリに一致するとき、そのディレクトリに根ざすすべてのファイル階層が選択される。パターンオペランドが少なくとも１つのアーカイブメンバを選択しないとき、ＰＡＸは、パターンオペランドを診断メッセージで標準エラーに書込み、次に非ゼロ出口ステータスで終了する。
【０００４】
アーカイブを書込むとき、出力を、アーカイブファイルに書込むごとに、正の十進整数のバイトにブロック化する。ブロックサイズは、最大が３２２５６バイトである、５１２バイトの倍数でなければならない。ブロックサイズはｋまたはｂで終わって、１０２４（１Ｋ）または５１２のそれぞれによる乗算を指定することができる。１対のブロックサイズは×によって分離されて、積を示すことができる。特定のアーカイブデバイスは、それがサポートすることになるブロッキングのサイズに追加の制限を課し得る。ブロッキングが指定されないとき、デフォルト値のブロックサイズは、使用される特定のアーカイブフォーマットに依存する。文字専用のアーカイブファイルのデフォルト値のブロックサイズは１０２４０である。５１２の倍数である３２２５６よりも少ないまたはそれに等しいすべてのブロックサイズがサポートされる。
【０００５】
アーカイブを読取るときにＰＡＸがファイルもしくはリンクを作成できない、アーカイブを書込むときにファイルを見つけることができない、または−ｐオプションが指定されたときにユーザＩＤ、グループＩＤもしくはファイルモードを保存することができないときは常に、診断メッセージが標準エラーに書かれ、非ゼロ出口ステータスが戻されるが、処理は継続する。ＰＡＸがファイルへのリンクを作成できない場合には、ＰＡＸは、ファイルの第２のコピーを作成しない。アーカイブからのファイルの抽出が信号またはエラーによって時期尚早に終了される場合、ＰＡＸはユーザが必要とするファイルを部分的に抽出しただけかもしれない。さらに、抽出されたファイルおよびディレクトリのファイルモードは、不正確なファイルビットを有し得、修正およびアクセス時間が間違っているかもしれない。
【０００６】
アーカイブの作成が、信号またはエラーによって時期尚早に終了される場合、ＰＡＸは特定のアーカイブフォーマット仕様に違反し得るアーカイブを部分的に作成しただけかもしれない。コピーを行なう際に、ＰＡＸが、ファイルがそれ自身を重ね書きしようしているのを発見した場合、ファイルはコピーされず、診断メッセージが標準エラーに書かれ、ＰＡＸが完了したら非ゼロ出口ステータスで終了する。
【０００７】
ファイルアーカイブはまた、その全体が本明細書に引用により援用される、ポングラツ(Pongracz)らによる「マルチプルコンピュータシステムを用いてファイルを効率的にバックアップするための方法および装置("Method and Apparatus for Efficiently Backing up Files Using Multiple Computer Systems")」と題した、米国特許第６，００３，０４４号に記載されている。
【発明の開示】
【課題を解決するための手段】
【０００８】
概要
本発明の一局面に従った方法およびシステムは、コピーされるアイテムがディレクトリである場合は、プロセスを生成することによって、および代わりにアイテムがファイルである場合は、アイテムをコピーすることによって、コンピュータにおけるアーカイブを行なう。一実施例において、生成されたプロセスは次に、上述の行為、たとえば作成するまたはコピーする行為を、上述のディレクトリにある別のアイテムとともに再帰的に行なう。同時に（たとえば２つ以上のプロセッサの場合）または同時発生的に（単一のプロセッサの場合）、生成されたプロセスの親は、別のアイテムに対して、作成またはコピーする行為を繰返す。多重プロセスを使用すると、単一のプロセスを使用した場合と比較して、アーカイブの速度が上がる。したがって、コピーされるディレクトリの数次第で、対応する数のプロセスが生成される。一実施例において、生成されたプロセスの数は、オペレータによって指定された最大制限によって制限される。このような制限が指定されるとき、生成プロセスは、別のプロセスを生成する前に、数が制限よりも下になるのを待つ。
【０００９】
この発明の別の局面に従うと、コピープロセスは、コピーする前に、リソースのデフォルト値制限をリソースの最大制限に変更する。たとえば、プロセスの生成の前に、親プロセス（または親の親）は制限を変更して、その後に生成されるすべてのプロセスが新しい制限を引継ぐ。リソースの例は、開いたファイルの数、ファイルのサイズおよび利用可能なメモリの量（これはスタックおよび／またはヒープであるかもしれない）である。このようなリソースの制限を増大させることは、アーカイブの速度を上げるのに役立つ。
【００１０】
この発明のさらに別の局面に従うと、コピープロセスは、一時バッファからコピーするために、データをファイルから一時バッファに転送することによって、一時バッファをロックすることによって、および直接メモリアクセス（ＤＭＡ）プロセスを呼出すことによって、その速度が上がる。コピープロセスは、（それ自身を指す記号のリンク等の）円形リンクをチェックすることによって、および円形リンクをコピーしようとする際に先行技術によって費やされていた時間を排除することによって、さらに速度を上げることができる。
【００１１】
この発明のさらに別の局面に従うと、宛先のリソースが一杯である場合、コピープロセスはｅメールメッセージを送信し、その後で再始動されるのを待つ。プロセスは、そのプロセスを開始したユーザの識別(identity)に基づいて、パスワードファイルからこのようなメッセージのｅメールアドレスを識別し得る。ｅメールを受信するユーザは、適切な処置（たとえば宛先ディスクのファイルを削除する、または新しいディスクをロードする）を行なって、その後でプロセスを再始動し得る。再始動されると、プロセスが停止したときにファイルをコピーする最中であった場合、プロセスはファイルを（ファイルの初めから）再びコピーする。
【発明を実施するための最良の形態】
【００１２】
詳細な説明
この発明の一実施例における方法および装置は、ファイルを１つ以上のソース１０１Ａ−１０１Ｎ（Ａ≦Ｉ≦Ｎ、Ｎはソースの合計数である）から１つ以上の宛先１０２Ａ−１０２Ｍ（Ａ≦Ｊ≦Ｍ、Ｍは宛先の合計数である）にコピーすることによって、（ＩＢＭのＰＣまたはサンワークステーション(Sun workstation)等の）コンピュータでのアーカイバルを行なう。この実施例において、ソース１０１Ａ−１０１Ｎを、１つ以上の、ファイル名のリストおよび／または各々が全体としてコピーされるディレクトリの名前として指定することができる。代わりに、ユーザは、除外される必要のあるファイルおよび／またはディレクトリのリスト（「除外されるリスト」("excluded list")とも呼ばれる）を識別することができる。
【００１３】
図１Ａでは、各々のファイルソース１０１Ｉをディスクとして、各々の宛先１０２Ｊを別のディスクとして示したが、このようなソースおよび宛先はディスクである必要はなく、代わりにテープまたは他の記憶媒体であってもよい。さらに、開示に鑑みた技術者に明らかであるように、このようなソースおよび宛先は全て、別途の記憶媒体にあるのではなく、同じ記録媒体に（たとえば同じディスクに）ある可能性がある。
【００１４】
該方法を実現化するプロセスは、（オペレーティングシステムへのコマンドによって）始動されるとき、そのプロセスに許容された最大制限よりも低い可能性がある制限（「デフォルト値制限」("default limits")と呼ばれる）に基づいて、リソースにアクセスする。したがって、オプションの行為において、（図２Ａの行為１１１によって示されるように）プロセスは、デフォルト値制限を最大制限に変更する。このような変更は、最大制限を識別するシステムファンクション“getrlimit”の呼出によって、続いてデフォルト値としてその最大制限を設定する別のシステムファンクション“setrlimit”の呼出によって、ユニックスオペレーティングシステムにおいて実現化され得る。
【００１５】
たとえば、開いたファイルのデフォルト値制限を、同時に開いた６４のファイルから最大である１０２４に変更することができる。同様の態様で、スタックサイズ、ヒープサイズおよびファイルサイズといった他の制限が、それらの対応する最大値に変更される。１つの実現例において、ヒープサイズはその最大値まで増大されず、最大値よりも１０少なくされるが、これはいくつかのプラットホームでは、制限を最大値に設定することが成功しないことがあったためである。
【００１６】
なお、新しい制限は（制限を変更する）現在のプロセスには影響を及ぼさず、代わりに現在のプロセスから生成された（またはフォークされた）いかなる新しいプロセスにも影響を及ぼす。一実現例において、現在のプロセスはまた、それ自身を（図２Ａに示されていないオプションの行為において）プロセスグループとして設定して、現在のプロセスを終了することによって、現在のプロセスから引起こされた（またはフォークされた）すべてのプロセスを終了するようにする。次に、この実現例において、現在のプロセスは、新しい制限を受ける新しいプロセスを引起こし、次に現在のプロセスは、新しいプロセスが完了するのを待つ。
【００１７】
一実施例において、新しいプロセスは２つのループを有し、すべてのソース１０１Ａ−１０１Ｎ上に外部ループ１１２（図２Ａ）および各々のソース１０１Ｉ内のすべてのファイル上に内部ループ１１３（図２Ａ）を有する。これらのループ内部で、プロセスは、コピーされるアイテムがファイルであるかどうかをチェックし、そうであれば、（行為１１５によって示されるように）単にファイルをコピーする。このようなコピーの際に、ファイルは、指定されれば、多数の宛先にコピーされ得る。
【００１８】
アイテムがファイルではなく、ディレクトリである場合、プロセスは、現在実行しているプロセスの数が最大値よりも少ないかどうかをチェックし（図２Ａの行為１１６を参照）、そうであれば新しいプロセスを生成し（行為１１７を参照）、ループ１１３に戻り、そうでない場合はその数が最大値よりも少なくなるまで待つ（行為１１８を参照）。したがって、新しいプロセスは、繰返しの態様で、上述のディレクトリのコンテンツのコピーを処理する。実現例次第で、このようなプロセスは、より多くのループまたはより少ないループ（すなわち２つのループ以外）を有することができる。
【００１９】
いかなる所与のときにも、いくつかのプロセス１０３Ａ−１０３Ｐ（Ａ≦Ｋ≦Ｐ、Ｐはプロセスの合計数である）は、たとえば対応する数のディレクトリに対してコピー動作を行ない得る。これらのコピープロセス１０３Ａ−１０３Ｐは、上述のグループプロセス（図１Ｂに図示せず）に追加的である（上述のグループプロセスから引き起こされる）。したがって、各々のプロセス１０３Ａ−１０３Ｐが個々にキルされる必要がなく、代わりにグループプロセスがキルされるときにそれらはすべてキルされる。
【００２０】
特に、一実現例において、コピープロセス１０３Ｋは、ユーザが与えたソースリストを獲得し、各々のソースディレクトリを開き、完全なツリーを終わりまで横切る。このようなツリーの横断の前に、コピープロセス１０３Ｋは、第１に絶対ディレクトリ（完全な名前）および相対ディレクトリ（子の現在の位置）を記憶するための、（宛先にディレクトリを作成する際に使用するために）コピーされるファイルの識別および管理に使用するための、メモリを割当てる。
【００２１】
コピープロセス１０３Ｋはまた、メモリを割当てて、コピーされる各々のファイルからのデータを保持する。この実現例において、コピープロセス１０３Ｋは最初に、オペレーティングシステムに対し最大制限（たとえば１ＧＢ）を与えるよう要求して、うまくいかなければ、以前に要求した量の半分を成功するまで繰返し要求する。ソース１０１Ａ−１０１Ｎ次第で、割当てられたメモリは、コピーされるファイルの大多数の各々のサイズよりも大きいかもしれない。そうであれば、このようなコピーは、ソース１０１Ｉへの（ファイル毎に）一回の読取動作で行なわれ、それにより、（たとえば５１２バイトの）１つのブロックを一度にコピーする（“ＣＰＩＯ”または“ＴＡＲ”等の）先行技術のプロセスと比較して、全体的な入出力（Ｉ／Ｏ）動作を最小にすることができる。
【００２２】
たとえば、コピープロセス１０３Ｋは、（割当てられたメモリが１ＭＢよりも大きい場合）１ＭＢのファイルを一回の読取動作で、割当てられたメモリにコピーすることができる。ファイルのサイズが割当てられたメモリよりも大きい場合、複数回の読取が要求されるが、このような読取の回数は、（割当てられたメモリのサイズ次第で）先行技術よりも少なくなる可能性がある。たとえば、割当てられたメモリが２０ＭＢしかない場合、８０ＭＢのファイルは４回の読取動作でコピーされ得る。
【００２３】
一実現例において、コピープロセス１０３Ｋは、ディレクトリ名の長さがパスの所定の最大の長さ（たとえば１０２４）を超えないことをチェックする。次に、コピープロセス１０３Ｋは、（たとえば、“sprintf”を局所に維持されたスタックに行い、スタック内でポインタを変化させ、ポインタは上下に動き、常にスタックの初めを指すようにすることによって）絶対パスおよび局部パスを現在のディレクトリにスタックで記憶する。
【００２４】
ソースディレクトリにおけるエントリが記号のリンクである場合、コピープロセス１０３Ｋは、記号のリンクが円形である（すなわち、図１Ｃに示したように、戻ってそれ自身を指す）かどうかをチェックして、そうであればリンクを無視する。プロセス１０３Ｋは、記号のリンクの横断を行い、リンクが指している場所を見つける。たとえば、プロセス１０３Ｋは、現在のディレクトリが親ディレクトリ等を指しているかどうかをチェックする。プロセス１０３Ｋはまた、このチェックを行なうときにそれが１０２４のリンクを超えているかどうかをチェックする。最後に、プロセス１０３Ｋはストリング比較を行ない、それが同じファイルであれば円形リンクである。プロセス１０３Ｋはまた、リンクが存在するかどうかをチェックすることによって、それが非存在であるか、または何らかのジャンクであるかをチェックする。プロセス１０３Ｋは、システムから正規のファイルの統計を与える“stat”およびリンク統計のための“lstat”を呼出す。
【００２５】
記号のリンクが非存在である（またはジャンクである）場合、コピープロセス１０３Ｋは、記号のリンクをブラインド的に保持する。プロセス１０３Ａ−１０３Ｐは並行に動作するため、別のプロセス１０３Ａは、“junk”とわかったファイルを書込んでいるかもしれない。したがって、プロセス１０３Ｋは、１つのディレクトリのみを処理し、記号のリンクは、別のプロセス１０３Ａがまだコピーしている別のディレクトリへのリンクであるかもしれない。したがって、ポインタはプロセス１０３Ａが完了した後で、有効なポイントとなり得る。プロセス１０３Ｋは、それが（１）正規のファイル、（２）円形リンク、または（３）非存在ファイル（またはジャンク）を見つけるまで、記号のリンクを横断し続ける。
【００２６】
記号のリンクがファイルまたはディレクトリを指していれば、リンクのコピーが、あて先において形成され、その後（エントリの性質次第で）以下の行為が行なわれる。ソースディレクトリにおけるエントリがファイルである（または記号のリンクがファイルを指す）場合、コピープロセス１０３Ｋはファイルをコピーする。ファイルをコピーする前に、プロセス１０３Ｋは宛先にディレクトリを作成する。特に、プロセス１０３Ｋは、ユーザによって与えられた宛先ディレクトリを相対ディレクトリおよび現在のディレクトリの名前と組み合わせて、宛先アドレスを形成する。ディレクトリの作成またはファイルコピーの際に、プロセス１０３Ｋはタイムスタンプおよび許可を保持する。また、（以下で詳細に説明するように）ディレクトリの作成またはファイルのコピーの際に、宛先に十分なスペースがないというエラーが出た場合、プロセス１０３Ｋはユーザにｅメールを送信し、ユーザを待つ。多数の宛先が指定されるとき、ユーザを待つことは、スペースが不十分な宛先だけでなく、すべての宛先に対するコピーに影響を及ぼす。
【００２７】
なお、プロセス１０３Ｋが有効なコピーを行ない、かつ宛先ファイルが予めそこにあれば、プロセス１０３Ｋはそのファイルを「アンリンク“unlink”」し、新しいファイルをコピーする。また、ファイルのコピーそれ自体の間、プロセス１０３Ｋは宛先ファイルを作成し（それが既に存在する場合、プロセス１０３Ｋはアンリンクを行なう）、次にプロセス１０３Ｋはファイルを０バイトに切り捨てる。プロセス１０３Ｋは、ディスク上にスペースがないというエラーを得るかもしれず、その場合プロセス１０３Ｋは（以下で説明するように）ｅメールを送信する。
【００２８】
また、（たとえば５１２バイトの）１ブロックのデータを一度に、最初にメモリにおけるユーザの領域に、それからカーネル領域にコピーする（“CPIO”または“TAR”といった）先行技術のプロセスとは異なって、コピープロセス１０３Ｋは、データを直接上述の割当てられたメモリに一度だけコピーし、その後直接メモリアクセス（ＤＭＡ）を引起こして、割当てられたメモリからデータをコピーする。したがって、いかなるコピーの前にも、コピープロセス１０３Ｋは割当てられたメモリをロックして、メモリがＤＭＡ中に利用可能であるようにする。
【００２９】
ソースディレクトリのエントリが別のディレクトリである場合、コピープロセス１０３Ｋは、並行のプロセスの数（これはユーザによって指定されており、ユーザがこれを与えていなければ、デフォルトで１０といった所定の数になる）の“npp”制限を使用して、別のプロセスを生成することができるかどうかを決定する。たとえば、システムが８個のＣＰＵを有する場合、ユーザはnppを８または１６（すなわちＣＰＵ当たり１つのプロセスまたはＣＰＵ当たり２つのプロセス）になるように指定し得る。したがって、プロセスは、“npp”を、「プロセスの現在の数」を識別し、かつ１で開始する変数“cnp”と比較する。“cnp”が“npp”よりも少なければ、新しいプロセスは子プロセスをフォークする。したがって、多くのプロセスは並行に動作して、異なるディレクトリのコピーを行なう。
【００３０】
一実施例において、新しいプロセスが、通常存在し、かつ現在のディレクトリのためのエントリ“.”および親ディレクトリのための“..”等のディレクトリ構造に関連する、ディレクトリにおけるエントリ（「アイテム」とも呼ばれる）のためには生成されない。また、実施例次第で、新しいプロセスは、ユニックスオペレーティングシステムによって作成されたディレクトリであるディレクトリ“lost＋found”のためには生成されないかもしれない。また、（上述したように）ディレクトリが除外されたリストにある場合、新しいプロセスは生成されないかもしれない。
【００３１】
上述のように、宛先ディスクが一杯であるとき、プロセス１０３Ｋはｅメールメッセージをオペレータに送信する。特に、プロセス１０３Ｋは、環境変数“ＡＬＥＲＴ＿ＵＳＥＲ”において識別されるアドレスにｅメールを送信する。この変数が設定されていない場合、プロセス１０３Ｋは、プロセスを実行している現在のユーザを識別し、（たとえばユニックスにおいては、/etc/passwordを読取ってユーザ情報を獲得し、パスワードファイルからユーザのｅメールｉｄを入手することによって）ユーザのｅメールアドレスを識別する。
【００３２】
次に、プロセス１０３Ｋは、ｅメールメッセージを保持するための一時ファイルを作成する。ディスクにいかなるスペースもない場合、プロセス１０３Ｋは、ディスクのスペースが利用可能であるところに（たとえば、ユーザの＼tmpまたはホームディレクトリ等のさまざまなディレクトリに）ファイルを作成する。プロセス１０３Ｋは、ｅメールメッセージを保存するのに約１ＫＢしか必要としない。次に、プロセス１０３Ｋは、一時ファイルにｅメールアドレスを書込み、次にシステムコマンド（たとえばユニックスにおけるmailx）を引起こしてｅメールメッセージを送信する。次に、プロセス１０３Ｋは、（たとえばアンリンク機能を引起こすことによって）ファイルを削除する。プロセス１０３Ｋはまた、それ自身に停止するよう信号を送信する（たとえばユニックスにおけるkill（getpid()，ＳＩＧＳＴＯＰ）。したがって、ユーザは通知されて、プロセス１０３Ｋはこの時点で停止され、ユーザはコピーを継続する場所を整理しなければならない。次に、ユーザがディスクを整理した後で、ユーザはプロセス１０３Ｋへ継続信号を送信しなければならない。ユーザが、ユニックスオペレーティングシステムにおけるコマンド“kill”−ＣＯＮＴ'pid'”を出すと、プロセス１０３Ｋはその動作を継続し得る。“kill”コマンドは、プロセスを停止するまたは開始するシステムコールである。メールメッセージは、プロセスｉｄをユーザに与え、そこでユーザはプロセスを再始動する必要がある。再始動すると、プロセス１０３Ｋはコピー機能に戻って開始し、そこでファイル記述子を始め（書き込んだバイト数を引いた現在の数）にリセットする。
【００３３】
次に、プロセス１０３Ｋはファイル全体を書直す（別の実施例において、それは単に、たとえば“lseek”システムコールを用いて、ファイルポインタをファイル内のいかなる場所にも移動させて、それが中断したところから継続する）。プロセス１０３Ｋは最後の文字が書かれた位置を知っているため、継続することができる。したがって、オペレーティングシステムがブロックが位置する場所の追跡をしながら、整理した後で宛先ファイルを生成することができる。各々のブロックは次のブロックへのポインタを有し、オペレーティングシステムはポインタを更新する。ある数のバイトをディスクへ書込むように求められたとき、オペレーティングシステムは、使用していないブロックを入手し、かつ１つのブロックから次のブロックへとポインタをセットアップする。大量のブロック（たとえば１ＧＢブロック）を書込むときに、オペレーティングシステムは１ブロックを一度にコピーする。
【００３４】
なお、宛先ディスクが一杯であるときにｅメールメッセージを生成するのではなく、他のエラーに遭遇したときでさえもこのようなｅメールメッセージが生成され得、その場合適切なエラー通告がｅメールメッセージに含まれる。
【００３５】
一実施例において、プロセス１０３Ｋは、上述の、そこにあるすべてのファイルおよびディレクトリのためのディレクトリの横断を行なって、ファイルを見つければコピーをし、そうでなければ、同様に上述のように、プロセスをフォークする。このような横断の際に、プロセス１０３Ｋがディレクトリの数の最大制限に到達した場合、それを現在のディレクトリへの絶対パスおよび局所パスを含む上述のスタックに保持することができる。プロセス１０３Ｋは同じ動作を行なうが、再帰的な態様で（終わりに）それ自身を呼出して、スタック領域として通常使用されるオペレーティングシステムのメモリを使用する。なお、上述のスタックはサイズが制限されており、これはプロセス１０３Ｋがメモリの残余（いかなる所与の時にも、コピーされるソースファイルおよび宛先ファイルを識別する２つの変数を含む４バイトを除く）をコピー目的のために割当てるからである。
【００３６】
したがって、プロセス１０３Ｋが上述のスタックに割当てられたスペースを使い果たしたとき、プロセス１０３Ｋは、再帰呼出を行なうことによって、オペレーティングシステムのスタックスペースを使用し、すべてのディレクトリを再帰的に横断する。再帰呼出は、プロセス１０３Ｋが上述のスタックのためのスペースを使い果たすまで行なわれない。上述のスタックは、横断中の（または実現例次第で横断される必要のある）ディレクトリのリストを保持するために使用される。プロセス１０３Ｋのための残余の割当てられたメモリは、大域の変数およびディスクからの／ディスクへのデータを転送するための一時バッファを保持する。上述のように、一時バッファはロックされ、ＤＭＡプロセスはコピーを行なうように命じられる。
【００３７】
本明細書に記載された方法およびシステムの１つの実現は、本明細書に付録として（以下に）添付されたソフトウェアの記述において示される。この特定の実現は、並行なコピーを行ない、いかなる所与の時にも並行のプロセスの最大数Ｎは、各々のディレクトリのために生成される１つのプロセスを伴う、コマンドラインオプションである。このような実現は、ディレクトリのリストをコピーすることができ、−１オプションが使用されるときに、ユーザはコピーしたいディレクトリを選択することができる。また、このような実現において、多数のソースディレクトリおよび多数の宛先ディレクトリがある可能性がある。このような実現はまた、ルーピングを避けるために円形リンクを識別し得る。また、このような実現は、コピーされるファイルのためのタイムスタンプおよび許可を保存することができる。さらに、このような実現は、オーナが同じでない場合を除いて、宛先にファイルを重ね書きし得る。
【００３８】
さらに、宛先ディスクがコピーの最中に一杯になったとき、この実現は環境変数であるALERT＿USERにｅメールを送信する。この変数が設定されていない場合、ｅメールはオプションとしてコピー方法を開始したユーザidに送信され、同じ情報が端末ttyに書込まれ得る。また、この実現は、ディスクのスペースが利用可能になるまで待つ。多数の宛先が選択され、１つの宛先にはディスクのスペースがない場合、この実現は、ディスクのスペースが１つの宛先で利用可能になるまで他の宛先を待たせ続ける。しかしながら、この実現において、多数の宛先が与えられ、かつこれらのディレクトリがＮＦＳ実現である場合、１つのネットワークが遅ければ、他のディレクトリも遅くなる。このような実現に、コピー動作の際にある指定されたファイルを無視するというオプションを与えることができる。また、このような実現に、記号のリンクを保存せずにこのようなリンクの適所にファイルをコピーするというオプションを与えることができる。
【００３９】
なお、本明細書に記載された、さまざまな機能および／またはソフトウェア、および／またはデータ構造は、アーカイバルプロセスにおいての使用に限定されず、代わりに当業者に明らかであるような、他のプロセスと共に使用してもよい。たとえば、ユーザ通知機能（たとえばｅメールメッセージの使用）を、遠隔のコンピュータから、ローカルのコンピュータでファイルのダウンロードを行なうプロセスで使用することができる。別の例として、ユーザ通知を、開示に鑑みた当業者にとって明らかであるように、ディスクのフラグメンテーション解消プロセスにおいて、またはウィルスチェックを行なうプロセスにおいて、使用することができる。したがって、ユーザがいなくても実行できるが、ある状況においてはユーザの支援を必要とするいかなるプロセスも、その状況が生じたときにユーザ通告機能を使用することができる。
【００４０】
実施例のさまざまな修正および適合が別掲の特許請求の範囲に含まれる。
【００４１】
［付録］
ファンクションgetmntent()は、各々の呼出のために/etc/filesystemsからの１つのエントリを戻す。戻すとは、次のエントリを見つけることに成功した場合０；＞何らかのエラーがある場合０およびＥof上の場合＜０である。このファンクションは、標準のライブラリにおいて“getmntent”を与えないプラットフォームのために実現される。
【００４２】
ファンクションgetmnt＿ent()は次のマウントポイントを戻す。ファンクションgetmntent()を呼出す。
【００４３】
ファンクションwrite＿mesg()は、オペレータにメールメッセージを書く。ファンクションwrite＿mesg()は以下を入力として受取る。すなわち、メッセージが書かれるファイル名、停止中のプロセスを識別し、そのプロセスオペレータによって再び開始され得るプロセスid、アーカイバルが停止された位置を識別するソースディレクトリ、ディスクのスペースが不十分である位置を識別する宛先ディレクトリ、および宛先のファイルシステム名。ファンクションwrite＿mesg()は、停止されたプロセスを再始動する方法についての命令を含み、たとえば「コピーを継続するため‘kill＿CONTpid’とタイプせよ」という命令を含み、そこでpidは上述のプロセスidと取替えられる。
【００４４】
ファンクションgetDirName()は、パスのための親ディレクトリ名を獲得する。ファンクションgetDirName()は、パスおよび文字"ch"を入力として受取り、chが最後に現れるまでストリングを戻す。
【００４５】
ファンクションgetmpoint()は、ファイルシステム（ユニックスまたはウィンドウズ（Ｒ））次第で、“. ”および“＼”または“/”を通してパーズすることによって、パスのためのマウントポイントを戻す。ファンクションgetmpoint()は、パスへのポインタを入力として受取る。ファンクションgetDirName()およびgetmnt＿ent()を呼出す。
【００４６】
ファンクションsendmail()は、環境変数ALERT＿USERに（または、これがヌルである場合はこのプロセスを開始したオペレータに）メールを送信し、ディスクが一杯であることを示す。ファンクションsendmail()は第１に、メッセージを保持するようファイルを作成するためになんらかの一時的な位置を、たとえば“/tmp”のディレクトリまたはユーザのホームディレクトリに見つける。ファンクションwrite＿mesg()を呼出す。（単にwrite＿mesgに渡される）ソースパスおよび（ファンクションgetDirNameおよびgetmpointとともに使用されて、ファンクションwrite＿mesgへ宛先ファイルシステムの名前を知らせる）宛先パスを、入力として受取る。
【００４７】
ファンクションbasename()は、ストリングを文字chの最後の出現からパスの最後に戻す。入力としてパスおよび文字chとして受取る。
【００４８】
ファンクションreadIn()は、ファイル記述子から次の行を読取り、その行をバッファにコピーし、読取られたバイト数を戻す。特に、それはファイル記述子、およびその行が記憶されるバッファへのポインタを入力として受取り、それは読取られたバイト数を出力として与える。
【００４９】
ファンクションisFileIsDir()は、パスを入力として受取り、パスがディレクトリであればRT＿DIR、パスがファイルであればRT＿FILE、パスが記号のリンクであればRT＿SYM、およびエラー、または何らかの特別なファイルもしくは円形リンクがあればRT＿ERR、のうちの１つを戻す。ディレクトリエントリの属性を見ることによって、パスが記号のリンクであるかどうかをチェックする。たとえば、モードがディレクトリのエントリである場合、(mode & S＿IFMT)==S＿IFLNKであるかどうかをチェックし、そうであれば、システム呼出readlink()を行なうことによって、パスがどこにリンクされているのかを読み取る。パスが“..”にリンクされていれば、円形リンクのため、RT＿ERRを戻す。パスへのディレクトリを変更し、成功すればRT＿SYMを戻し、そうでなければパスが正規のファイルへのsymリンクでなく、したがって作業ディレクトリに戻って変更する。パスが“.”にリンクしていれば、円形リンクのため、再びRT＿ERRを戻す。また、ストリングは、パスを現在のディレクトリと比較して、ファイルがそれ自身に、たとえば/tmp/foo−＞/tmp/fooにリンクされているかどうかを確認し、円形リンクのため、再びRT＿ERRを戻す。なお、このファンクションは、絶対パスおよび現在のディレクトリに対するパスの双方として、円形リンクをチェックする。ファンクションbasename()を呼出して、“.”の前後にファイル名の一部をパーズする。
【００５０】
ファンクションcopy()は、入力変数src＿fileによって識別されたすべてのファイルを、別の入力変数dest＿dirsによって識別された宛先にコピーし、第３の入力変数srcfは、ソースのファイル名のみを保持し、同じソースが多数の宛先ディレクトリにコピーされるときに使用される。値がsrc＿fileが記号のリンクであることを示す０である間に、変数“done”においてループする。ループ内で、ファンクションcopy()は、ユーザが記号のリンクを保存することを選んだか、または宛先でファイル／ディレクトリをコピーすることを選んだかをチェックする。ユーザが、記号のリンクではなく、ファイルをコピーすることを選んだ場合、ファンクションcopy()は、それがディレクトリ／ファイル、または円形リンク、もしくは悪いリンクを見つけるまで、ループし続ける。ユーザがオプションを指定しなかった場合、デフォルト値は、ファンクションcopy()が記号のリンクを保持する（すなわちコピーする）ためにある。ファイルが見つかると、ファンクションcopy（）はファイルをコピーする。ディレクトリが見つかると、ファンクションcopy()はディレクトリ全体をコピーする。悪いリンクまたは円形リンクが見つかると、ファンクションcopy()はユーザに警告する。ループの際に、src＿fileが相対パスへの記号のリンクかどうかをチェックし、すなわちsrc＿fileを（ファンクションgetDirNameを呼出すことによって獲得された）現在の位置と比較して、相対パスへの記号リンクであれば、いかなるコピーもせずに戻るが、円形リンクが見つかったため、ユーザに警告する。このファンクションはまた、ディレクトリエントリがリンク属性を有するかどうかをチェックし、たとえば（ファンクションisFileIsDirを参照して上述したような）モードであるかどうかをチェックし、それがリンクである場合はもう一度再帰する必要がある。他に、変数doneが１に、そうでなければ２に設定されている場合、(mode & S＿IFMT)==S＿IFDIRであるかどうかをチェックする。ファンクションcopy()はまた、doneが１である（これはディレクトリがコピーされるためである）とき、新しいプロセス（「子」（“child”））を生成し、生成が失敗したら、単に５秒間スリープし、再び試みる。新しいプロセス（「子」）はファンクションscanDirs()を行なう。ファンクションcopy()はまた、宛先ディスクが一杯であるかどうかをチェックし、そうであれば（上述した）ファンクションsendmailを引起こして、ディスクのスペースが利用可能になるのを待つ。
【００５１】
ファンクションrec＿dir()は、終わりの葉まで、ディレクトリに再帰的に移動し、葉が正規のファイルであればコピーし、葉がsymlinkであれば記号のリンクを作り、そうでなければディレクトリを作成する。一実施例では、スタック成長のため、再帰的ファンクショニングを使用しない。２つの名前、すなわち相対ディレクトリ名および絶対ディレクトリ名を入力として受取る。第１の名前のストリングの長さが、（一実施例において１０２４である）PATH＿MAXよりも長いかどうかをチェックし、そうであれば、エラーの信号を送り、戻る。ディレクトリエントリをEofまで読取り、“.”,“..”および“lost+found”エントリを無視する。各々のファイル名でファンクションisFileIsDir()を呼出し、いかなるエラーも無視し、それがファイルまたはリンクであればエントリをコピーする。宛先にディレクトリを作成する。宛先ディスクが一杯である場合、ファンクションrec＿dir()はまた、（上述した）ファンクションsendmailを引起して、ディスクのスペースが利用可能になるのを待つ。ファンクションrec＿dir()の呼出しがファンクションscanDirs()によって行われるのは、十分なメモリがスタックにないとき（つまりスタックのオーバフロー）であり、ファンクションcopy()によって行われるのは、記号のリンクであるディレクトリを横断するためかつユーザが記号のリンクを保存しないと決めた場合である。
【００５２】
ファンクションscanDirs()は２つの引き数、すなわちabspathofDirおよびrelDirNameを受取る。このファンクションは２つのスタックを有し、１つのスタックはソースディレクトリの絶対パス（たとえばabspathofDir）を記憶し、および別のスタックはソースディレクトリからの相対パス（たとえばrelDirName）を記憶する。このファンクションは、ディレクトリの絶対パスを横断し、以下のことを行なう。つまり、それがファイルまたは記号のリンクを見つけた場合、ファンクションcopy()を呼出して、ファイルまたはリンクをコピーし、それがディレクトリを見つけた場合、このディレクトリへの（相対パスおよび絶対パスの双方の）パスをスタックにプッシュする。スタック上においてコピーするまたはプッシュするという上述の行為は、現在のディレクトリにおける（たとえば、ファイル、リンクまたはディレクトリであるかもしれない）各々のエントリのために繰返される。このファンクションは、コピーの前に、このファイルがコピーされる必要があるかないか（ユーザはこのファイルを除外することができる）を確認する。宛先ディレクトリを作成する際に、宛先ディスクが一杯である場合、ファンクションscanDirs()はまた、（上述の）ファンクションsendmailを引起こして、ディスクのスペースが利用可能になるのを待つ。現在のディレクトリにおけるすべてのエントリが処理されたとき、スタックはポップされ（すなわちスタックからの値が現在のディレクトリに設定され）、上述の動作が現在のディレクトリに対して行なわれる。このようなスタックからのディレクトリの処理は、スタックが空になるまで、継続する。スタックオーバーフローの場合、このファンクション（すなわちscanDirs）は、（前の段落で説明した）ファンクションrec＿dirを呼出して、ディレクトリから続行する。
【００５３】
ファンクションusage()は、ユーザによるこのツールの使用をエコーする。このファンクションは、ユーザが間違ったオプションを使用するとき常に呼出される。
【００５４】
ファンクションexclude＿thisfile()は以下の動作を行なう。各々のファイルをコピーする前に、ユーザが除外オプションを使用するときに除外されるファイル名のリストを含む、特定のファイルにおけるファイル名をチェックする。このオプションを使用するとコピーのプロセスが減速する。
【００５５】
ファンクションmake＿arglist()は、コマンドライン引き数をチェックし、デフォルト値をユーザが与えた値に重ね書きする。たとえば、プロセスの数はデフォルト値で１０であるが、ユーザによって重ね書きされることができる。
【００５６】
ファンクションincrease＿limits()は、スタックサイズ、ヒープサイズ、ファイルを開いた記述子の数およびファイルのサイズといったさまざまなリソース制限を増やす。
【００５７】
ファンクションcopy＿srcfile()は、引き数としての、ソースファイル名および相対パスを有する（以下で説明される）ファンクションmainによって呼出される。ソースファイル名が正規のファイルまたは記号のリンクである場合、このファンクションは（上述した）ファンクションcopy()を呼出す。それがディレクトリである場合、このファンクションは実行している並行なプロセスの数をチェックする。並行なプロセスの数が、制限“numproc”（これはユーザによって設定され得、デフォルト値でこの数は１０に設定される）よりも少なければ、次にそれは子プロセスをフォークし、子プロセスはファンクションscandirs()を呼出し、親プロセスはファンクションmainに戻る。
【００５８】
ファンクションmain()は、（上述の）ファンクションincrease＿limits()を呼出し、プロセスをグループリーダとして設定し、子をフォークし、子を待つ。子は（上述の）ファンクションmake＿arglist()を呼出して、コマンドライン引き数を確認し、/dev/ttyを開いてユーザにメッセージを書く。子は次に、すべてのソースディレクトリをループして、コピーを行なう。すなわち、各々のソースディレクトリをスキャンし、各々のエントリのために（上述のように、子を生成して戻る）ファンクションcopy＿srcfileを呼出す。戻ると、子は、除外または包含オプションが使用されるかどうかチェックする。除外オプションコマンドラインオプションに設定されていれば、それは（上述の）ファンクションexclude＿thisfile()を呼出す。包含オプション（すなわちリストされたファイルのみをコピーする）が設定されると、ソースディレクトリをスキャンする（すなわちファンクションcopy＿srcfileを呼出すことによって、リストされたファイルから読取りそれらをコピーする）のではなく、リストされたファイルのみをコピーする。除外または包含オプションのいずれも設定されていない場合、子はファンクションcopy＿srcfileを呼出し、それにより必要であれば、追加の子プロセスを再帰的に生成する。ファンクションcopy＿srcfileから戻ると、この子は、その子プロセスのすべてが終了するのを待つ。
【図面の簡単な説明】
【００５９】
【図１Ａ】多数のソースから多数の宛先へのファイルアーカイバルのための一実施例のシステムを示す、高レベルのブロック図である。
【図１Ｂ】コピーを行なうのに図１Ａのシステムにおける多数のプロセスの使用を示す、中間レベルのブロック図である。
【図１Ｃ】図１Ａのソースにおける円形リンクを示す、低レベルのブロック図である。
【図２Ａ】一実施例において図１Ｂのプロセスによって行なわれる行為を示す、高レベルのフロー図である。
【図２Ｂ】図２Ａに示したコピー動作において行なわれる行為を示す、より低レベルのフロー図である。
【図１Ａ】
2004528646.tif 000003
【図１Ｂ】
2004528646.tif 000004
【図１Ｃ】
2004528646.tif 000005
【図２Ａ】
2004528646.tif 000006
【図２Ｂ】
2004528646.tif 000007
【国際公開パンフレット】
2004528646.tif 000008
2004528646.tif 000009
2004528646.tif 000010
2004528646.tif 000011
2004528646.tif 000012
2004528646.tif 000013
2004528646.tif 000014
2004528646.tif 000015
2004528646.tif 000016
2004528646.tif 000017
2004528646.tif 000018
2004528646.tif 000019
2004528646.tif 000020
2004528646.tif 000021
2004528646.tif 000022
2004528646.tif 000023
2004528646.tif 000024
2004528646.tif 000025
2004528646.tif 000026
2004528646.tif 000027
2004528646.tif 000028
2004528646.tif 000029
2004528646.tif 000030
2004528646.tif 000031
【手続補正書】
【提出日】平成15年5月12日(2003.5.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータで実現されるアイテムをコピーする方法であって、
該アイテムがディレクトリである場合、プロセスを生成するステップと、
該アイテムがファイルである場合、該ファイルをコピーするステップとを含む、方法。
【請求項２】
コピーした後で、
別のアイテムに対して、生成またはコピーするという行為を繰返すステップをさらに含む、請求項１に記載の方法。
【請求項３】
生成する前に、
コピーするために開始されたプロセスの現在の数を、制限と比較するステップと、
該現在の数が該制限よりも大きい、または該制限と等しい場合に、待つステップとをさらに含む、請求項１に記載の方法。
【請求項４】
コピーする前に、
リソースの制限を増大させるステップと、
コピーの際に、該リソースを、増大した制限で使用するステップとをさらに含む、請求項１に記載の方法。
【請求項５】
該リソースは開いたファイルの数である、請求項４に記載の方法。
【請求項６】
該リソースはファイルのサイズである、請求項４に記載の方法。
【請求項７】
該リソースはメモリである、請求項４に記載の方法。
【請求項８】
該メモリはスタックとして編成される、請求項７に記載の方法。
【請求項９】
該メモリはヒープとして編成される、請求項７に記載の方法。
【請求項１０】
該コピーするステップは、
データを該ファイルから一時バッファへ転送するステップと、
該一時バッファをロックするステップと、
該一時バッファからコピーするために、直接メモリアクセス（ＤＭＡ）プロセスを引起こすステップとを含む、請求項１に記載の方法。
【請求項１１】
コピーする前に、
該アイテムがそれ自身へのリンクであるかどうかをチェックするステップと、
該アイテムがそれ自身へのリンクではない場合にのみ、前記コピーを行なうステップとをさらに含む、請求項１に記載の方法。
【請求項１２】
該チェックするステップは、ストリング比較動作を含む、請求項１１に記載の方法。
【請求項１３】
コピーの際に、
宛先のリソースが一杯である場合、ｅメールメッセージを送信するステップをさらに含む、請求項１に記載の方法。
【請求項１４】
コピーの際に、
該ｅメールメッセージを送信した後で、再始動されるのを待つステップをさらに含む、請求項１３に記載の方法。
【請求項１５】
前記待つステップは、
信号を自身に送信して、実行を中断するステップを含む、請求項１４に記載の方法。
【請求項１６】
コピーする際に、
再始動されると、前記ファイルを始めから再びコピーするステップをさらに含む、請求項１３に記載の方法。
【請求項１７】
生成またはコピーを行なう方法を開始したユーザの識別（identity）に基づいて、パスワードファイルからｅメールアドレスを識別するステップをさらに含む、請求項１３に記載の方法。
【請求項１８】
前記生成するステップは、前記ディレクトリが現在のディレクトリではなく、かつ親ディレクトリでない場合にのみ、行なわれる、請求項１に記載の方法。
【請求項１９】
コンピュータで実現されるファイルをコピーする方法であって、
リソースの制限を増大させるステップと、
該リソースを増大した制限で用いて、ファイルをコピーするステップとを含む、方法。
【請求項２０】
前記リソースは（開いたファイルの数、ファイルのサイズおよびメモリ）のうちの１つである、請求項１９に記載の方法。
【請求項２１】
コンピュータで実現されるファイルをアーカイブする方法であって、
データをファイルからメモリにおける一時バッファに転送するステップと、
アーカイブに使用される記憶媒体上で、該データを該一時バッファから別のファイルへコピーするために、直接メモリアクセス（ＤＭＡ）プロセスを引起こすステップとを含む、方法。
【請求項２２】
転送する前に、
該ファイルがそれ自身へのリンクであるかどうかをチェックするステップと、
該ファイルがそれ自身へのリンクではない場合にのみ、前記コピーのみを行なうステッ
プとをさらに含む、請求項２１に記載の方法。
【請求項２３】
コンピュータに実現されたファイルをコピーする方法であって、
ファイルをコピーするステップと、
コピーの際にエラーに遭遇した場合に、ｅメールメッセージを送信するステップとを含む、方法。
【請求項２４】
該ｅメールメッセージを送信した後で、再始動されるのを待つステップをさらに含む、請求項２３に記載の方法。
【請求項２５】
該コピーを開始したユーザの識別（identity）に基づいて、パスワードファイルからｅメールアドレスを識別するステップをさらに含む、請求項２３に記載の方法。
【請求項２６】
ファイルをコピーする方法であって、
ファイルをコピーするためのプロセスを開始するステップと、
コピーの際にエラーに遭遇した場合に、ｅメールメッセージを受信するステップとを含む、方法。
【請求項２７】
該ｅメールメッセージに応答して、該宛先の該リソースを変更するステップと、
該プロセスを再始動するステップをさらに含む、請求項２６に記載の方法。
【請求項２８】
アイテムをコピーするための装置であって、
コピーされるアイテムがディレクトリである場合、プロセスを生成するための手段と、
該アイテムがファイルである場合、該アイテムをコピーするための手段とを含む、装置。
【請求項２９】
該コピーするための手段がエラーに遭遇した場合、ｅメールメッセージを送信するための手段をさらに含む、請求項２８に記載の装置。
【請求項３０】
リソースの制限を最大に増大させるための手段をさらに含む、請求項２８に記載の装置。
【請求項３１】
前記コピーをするための手段は、
一時バッファを使用するための手段と、
直接メモリアクセス（ＤＭＡ）を使用するための手段とを含む、請求項２８に記載の装置。
【請求項３２】
該アイテムがそれ自身へのリンクであるかどうかをチェックするための手段をさらに含む、請求項２８に記載の装置。
【請求項３３】
該ディレクトリにある各々のアイテムのために前記方法を行なうように命令して、該プロセスが開始される、請求項１に記載の方法。
【請求項３４】
前記プロセスは、前記繰返すステップによって生成されたいかなる新しいプロセスとも並行して実行する、請求項２に記載の方法。
【請求項３５】
生成によって作成されたプロセスの数は、コピーされるディレクトリの数に対応する、請求項２に記載の方法。
【請求項３６】
該アイテムは、コピーされるアイテムのリストからのものであり、
該方法は、前記リストから別のアイテムを生成するまたは別のアイテムとコピーするという行為を繰返すステップをさらに含む、請求項１に記載の方法。
【請求項３７】
該ファイルが、コピーから除外されたアイテムのリストにあるかどうかをチェックするステップと、
該ファイルが前記リストにない場合にのみ、前記コピーを行なうステップとをさらに含む、請求項１に記載の方法。
【請求項３８】
該ファイルは、該ユーザによって指定された場合、多数の宛先にコピーされる、請求項１に記載の方法。
【請求項３９】
転送する行為および引起こす行為の間で、該一時バッファをロックするステップをさらに含む、請求項２１に記載の方法。
【請求項４０】
該エラーは、該宛先のリソースが一杯であるという内容である、請求項２３に記載の方法。
【請求項４１】
該エラーは、該宛先のリソースが一杯であるという内容である、請求項２６に記載の方法。
【請求項４２】
ソフトウェアで符号化されたコンピュータ読取可能記憶媒体であって、該ソフトウェアは、以下のステップによってコンピュータにアイテムをアーカイブするように、という命令を含み、前記以下のステップは、
該アイテムがディレクトリである場合、プロセスを生成するステップと、
該アイテムがファイルである場合、該アイテムをコピーするステップとを含む、コンピュータ読取可能記憶媒体。
【国際調査報告】
2004528646.tif 000032