(57)【特許請求の範囲】
【請求項１】
記憶位置のブロックを複数有するメモリに対しデータを書き込む装置であって、前記複数のブロックは連続しており、前記装置が、
ループ書き込みモードがイネーブルされたとき、前記複数のブロックのうちの連続した２以上のブロックを、前記ループ書き込みモードにおけるループ状書き込みのためブロック・ループに割り当てる手段であって、前記ブロック・ループが含む前記連続した２以上のブロックは、最初のブロックと最後のブロックを含み、該最後のブロックの次に前記最初のブロックを続けることにより連続ループを構成する、手段と、
前記ループ書き込みモードがイネーブルされている間、前記ブロック・ループが構成する前記連続ループに対しデータを書き込んで、前記連続ループに既にデータが書き込まれているときには前記ループ書き込みモードがディスエーブルされるまでそのデータに上書きを行い、前記ループ書き込みモードがディスエーブルされたとき、前記複数のブロックのうちの、前記ブロック・ループの前記最後のブロックの直後のブロックからデータを書き込む手段と、
を備えた装置。
【請求項２】
請求項１記載の装置において、
前記データが、メディア・データを含む、装置。
【請求項３】
請求項１記載の装置において、
前記ブロック・ループが、該ブロック・ループが含む前記２以上のブロックの前記最初のブロックから前記最後のブロックまでの長さを表す実ループ長を有し、
前記実ループ長は、セットされた要求ループ長以上の長さである、
装置。
【請求項４】
請求項１記載の装置であって、更に、
１つ以上のトリガリング・イベントを検出する手段と、
第１のトリガリング・イベントに応答して、前記ループ書き込みモードをディスエーブルする手段と、
を備えた、装置。
【請求項５】
請求項４記載の装置であって、更に、
前記メモリにリニアに書き込むリニア・シーケンス書き込みモードをイネーブルする手段,
を備えた、装置。
【請求項６】
請求項５記載の装置において、
リニア・シーケンス書き込みモードをイネーブルする前記手段は、前記第１トリガリング・イベントに応答して動作する、装置。
【請求項７】
請求項５記載の装置であって、更に、
前記ループ書き込みモードがディスエーブルされると、前記ブロック・ループをリニア・シーケンスのブロックに再構成する手段を備え、
前記再構成する手段は、
前記ループ書き込みモードをディスエーブルする前にデータが書き込まれた前記連続ループ内の最後のブロックを、前記ブロック・ループをアンラップするためのアンラップ・ブロックとして定める手段と、
前記連続ループ内の前記アンラップ・ブロックに続くブロックを前記リニア・シーケンスのブロックの最初のブロックとし、前記アンラップ・ブロックを前記リニア・シーケンスのブロックの最後のブロックとして、前記ブロック・ループを前記リニア・シーケンス・のブロックにアンラップする手段と、
を備えた、装置。
【請求項８】
請求項５記載の装置であって、更に、
前記ループ書き込みモードがディスエーブルされ、前記リニア・シーケンス書き込みモードがイネーブルされたとき、前記ブロック・ループをリニア・シーケンスのブロックに再構成する手段を備え、
前記再構成する手段は、
前記ループ書き込みモードをディスエーブルする前にデータが書き込まれた前記連続ループ内の最後のブロックを、前記ブロック・ループをアンラップするためのアンラップ・ブロックとして定める手段と、
前記連続ループ内の前記アンラップ・ブロックに続くブロックを前記リニア・シーケンスのブロックの最初のブロックとし、前記アンラップ・ブロックを前記リニア・シーケンスのブロックの最後のブロックとして、前記ブロック・ループを前記リニア・シーケンス・のブロックにアンラップする手段と、
を含む、装置。
【請求項９】
請求項８記載の装置において、
前記再構成する手段が、更に、
前記リニア・シーケンス書き込みモードをイネーブルした後にデータを書き込む前記複数のブロックのうちの最初のブロックである非ループ・ブロックであって、前記ブロック・ループのブロックではない前記非ループ・ブロックを判定する手段と、
前記非ループ・ブロックを前記アンラップ・ブロックに続くブロックとして定める手段であって、これにより前記非ループ・ブロックに書き込まれるデータが、前記アンラップ・ブロックにおけるデータの直後に連続的に続くようにする、手段と、
を備えた、装置。
【請求項１０】
請求項９記載の装置であって、更に、
第２のトリガリング・イベントに応答して、前記リニア・シーケンス書き込みモードをディスエーブルする手段と、
前記リニア・シーケンス書き込みモードがディスエーブルされると、前記複数のブロックのうち使用されていない連続した２以上のブロックを、ループ書き込みモードにおける前記ループ状書き込みのための第２のブロック・ループに割り当てる手段であって、前記第２のブロック・ループが含む前記連続した２以上のブロックは、最初のブロックと最後のブロックを含み、該最後のブロックの次に前記最初のブロックを続けることにより連続ループを構成する、手段と、
前記第２トリガリング・イベントに応答して、前記第２ブロック・ループの前記連続ループにデータを書き込む前記ループ書き込みモードを再度イネーブルする手段と、
を備えた、装置。
【請求項１１】
請求項１から１０のいずれかに記載の装置であって、
前記装置はコンピュータ・システムを含み、
該コンピュータ・システムは、
中央演算装置と、
少なくとも１つのファイルを有するファイル・システムを提供するオペレーティング・システムと、
前記メモリを構成する少なくとも１つのメモリ記憶システムと、
を備え、
前記メモリの記憶位置の前記ブロックは、前記ファイル・システムによって前記メモリの物理的位置にマッピングされる記憶位置の論理ブロックであり、
前記少なくとも１つのメモリ記憶システムは、前記オペレーティング・システムと協働して前記中央演算装置により実行されたときに前記装置の各前記手段を実現するための命令を内部に記憶した、
装置。
【請求項１２】
記憶位置のブロックを複数有するメモリに対しデータを書き込むための方法であって、前記複数のブロックは連続しており、前記方法が、
ループ書き込みモードがイネーブルされたとき、前記複数のブロックのうちの連続した２以上のブロックを、前記ループ書き込みモードにおけるループ状書き込みのためのブロック・ループに割り当てるステップであって、前記ブロック・ループが含む前記連続した２以上のブロックは、最初のブロックと最後のブロックを含み、該最後のブロックの次に前記最初のブロックを続けることにより連続ループを構成する、ステップと、
前記ループ書き込みモードがイネーブルされている間、前記ブロック・ループが構成する前記連続ループにデータを書き込むステップであって、これにより前記連続ループに既にデータが書き込まれているときには前記ループ書き込みモードがディスエーブルされるまでそのデータに上書きを行う、ステップと、
前記ループ書き込みモードがディスエーブルされたとき、前記複数のブロックのうちの、前記ブロック・ループの前記最後のブロックの直後のブロックからデータを書き込むステップと、
を備えた方法。
【請求項１３】
請求項１２記載の方法において、
前記データが、メディア・データを含む、方法。
【請求項１４】
請求項１２記載の方法において、
前記ブロック・ループが、該ブロック・ループが含む前記２以上のブロックの前記最初のブロックから前記最後のブロックまでの長さを表す実ループ長を有し、
前記実ループ長は、セットされた要求ループ長以上の長さである、
方法。
【請求項１５】
請求項１２記載の方法であって、更に、
１つ以上のトリガリング・イベントを検出するステップと、
第１のトリガリング・イベントに応答して、前記ループ書き込みモードをディスエーブルするステップと、
を含む、方法。
【請求項１６】
請求項１５記載の方法であって、更に、
前記メモリにリニアに書き込むリニア・シーケンス書き込みモードをイネーブルするステップを含む、方法。
【請求項１７】
請求項１６記載の方法において、
前記第１トリガリング・イベントに応答して、前記リニア・シーケンス書き込みモードをイネーブルする前記ステップを実行する、方法。
【請求項１８】
請求項１６記載の方法であって、更に、
前記ループ書き込みモードがディスエーブルされると、前記ブロック・ループをリニア・シーケンスのブロックに再構成するステップを含み、
前記再構成するステップは、
前記ループ書き込みモードをディスエーブルする前にデータが書き込まれた前記連続ループ内の最後のブロックを、前記ブロック・ループをアンラップするためのアンラップ・ブロックと定めるステップと、
前記連続ループ内の前記アンラップ・ブロックに続くブロックを前記リニア・シーケンスのブロックの最初のブロックとし、前記アンラップ・ブロックを前記リニア・シーケンスのブロックの最後のブロックとして、前記ブロック・ループを前記リニア・シーケンス・のブロックにアンラップするステップと、
を含む、方法。
【請求項１９】
請求項１６記載の方法であって、更に、
前記ループ書き込みモードがディスエーブルされ、前記リニア・シーケンス書き込みモードがイネーブルされたとき、前記ブロック・ループをリニア・シーケンスのブロックに再構成するステップを含み、
前記再構成するステップは、
前記ループ書き込みモードをディスエーブルする前にデータを書き込んだ前記連続ループ内の最後のブロックを、前記ブロック・ループをアンラップするためのアンラップ・ブロックと定めるステップと、
前記連続ループ内の前記アンラップ・ブロックに続くブロックを前記リニア・シーケンスのブロックの最初のブロックとし、前記アンラップ・ブロックを前記リニア・シーケンスのブロックの最後のブロックとして、前記ブロック・ループを前記リニア・シーケンスのブロックにアンラップするステップと、
を含む、方法。
【請求項２０】
請求項１９記載の方法において、
前記再構成するステップが、更に、
前記リニア・シーケンス書き込みモードをイネーブルした後にデータを書き込む前記複数のブロックのうちの最初のブロックである非ループ・ブロックであって、前記ブロック・ループのブロックではない前記非ループ・ブロックを判定するステップと、
前記非ループ・ブロックを前記アンラップ・ブロックに続くブロックとして定めるステップであって、これにより前記非ループ・ブロックに書き込まれるデータが、前記アンラップ・ブロックにおけるデータの直後に連続的に続くようにする、ステップと、
を含む、方法。
【請求項２１】
請求項２０記載の方法であって、更に、
第２のトリガリング・イベントに応答して、前記リニア・シーケンス書き込みモードをディスエーブルするステップと、
前記リニア・シーケンス書き込みモードがディスエーブルされると、前記複数のブロックのうち使用されていない連続した２以上のブロックを、ループ書き込みモードにおける前記ループ状書き込みのための第２のブロック・ループに割り当てるステップであって、前記第２のブロック・ループが含む前記連続した２以上のブロックは、最初のブロックと最後のブロックを含み、該最後のブロックの次に前記最初のブロックを続けることにより連続ループを構成する、ステップと、
前記第２トリガリング・イベントに応答して、前記第２ブロック・ループの前記連続ループにデータを書き込む前記ループ書き込みモードを再度イネーブルするステップと、
を含む、方法。
【請求項２２】
請求項１２から２１のいずれかに記載の方法において、
前記メモリは、コンピュータ・システムに含まれており、
前記メモリの記憶位置の前記ブロックは、前記コンピュータ・システムのオペレーティング・システムが提供するファイル・システムによって前記メモリの物理的位置にマッピングされる記憶位置の論理ブロックである、
方法。
【請求項２３】
請求項１２から２１のいずれかに記載の方法をコンピュータに実行させる命令を格納したコンピュータ読み取り可能記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生情報の記録に関する。更に特定すれば、本発明は、非同期イベント(asynchronous event)が発生した後の当該イベントの記録に関するものである。
【背景技術】
【０００２】
生情報の記録、即ち、イベントが実際に行われつつこれを記録する際に特有の問題として、特定の対象イベントが記録されずに行われてしまう可能性があることがあげられる。例えば、ビデオグラフィ(videography)では、ビデオ撮影者は、裁判所の戸口のような場所で、特定の人の退出というようなイベントを捕獲しようと期待しつつ監視している場合がある。ビデオ撮影者がこのようなイベントを捕獲できない場合の主な理由として２つあげられる。第１に、ビデオ撮影者が、当該イベントを捕獲するように記録を開始するのに間に合わなかった場合である。第２に、ビデオ撮影者は記録してはいるものの、媒体がもはや入手できずに記録の停止を余儀なくされたり、新たな媒体への交換がイベント発生前に完了しなかったというような場合である。
【０００３】
この問題を解決する１つの機構が提案されており、ＰＣＴ出願連番第ＵＳ９６／０２４６０号に例示されている。この公報は、ビデオおよびオーディオ・メディアを一時的にリング・バッファに記録するモーション・ビデオ・カメラについて記載するものである。データを連続的にリング・バッファに書き込み、ループ化記録を終了するようにカメラにトリガするまで、リング・バッファの内容を上書きしていく。リング・バッファの内容をファイルに添付し、後にこれを通常のリニア記録モードで記録する。また、米国特許第４，４０９，６７０号，第５，０５６，０５６号，および第４，６４６，２４１号に示すフライト・データ・レコーダのような障害検出システムや、米国特許第４，３７３，１９３号および第４，１３９，９０３号に示すロジック・アナライザにおいても、ある形態のバッファが用いられている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
バッファにデータを維持し、特定のイベントが発生したときにこのデータをセーブすると、いくつかの問題が生ずる。まず第１に、典型的なバッファは通常集積回路メモリで実施しており、したがってわずか数メガバイトのデータを保持できるに過ぎない。このような小さなバッファでは、非同期モーション・ビデオ・イベントの記録に使用するには不十分である。第２に、このようなバッファを用いるには、バッファの使用、およびそのデータと後に記録される任意のデータとの関係を制御するアプリケーションが必要となる。
【課題を解決するための手段】
【０００５】
本発明は、記憶場所のクラスタを論理ループ化したファイルへのデータ書き込みに対応するファイル・システムを有するオペレーティング・システムを提供する。書き込みは、ループ・モードまたは非ループ・モードで実行することができ、ループ化記録と非ループ化記録との間の遷移にも対応することができる。非同期イベントの発生に先立つ記録は、ループ・モードで行う。非同期イベントの発生後は、オペレーティング・システムがクラスタに対してポインタを操作することによって、ループ部分に収集したデータを、続いて収集したデータと継目なく併合する。このようなコンピュータのファイル・システムにおいて用いる一般的な構造を備えることにより、ループ化記録に利用できるメモリ容量が大幅に増大する。実際、フル・モーションの放送品質ビデオを、数分にわたって捕獲することが可能となる。加えて、本ファイル・システムを用いてデータの記憶を処理することによって、アプリケーションは、記録した情報を物理的な記録媒体上に配する必要がなくなる。
【０００６】
このようなファイル・システムは、非同期イベントの発生を捕獲する目的でデータを収集するあらゆる用途において使用可能である。このようなアプリケーションには、モーション・ビデオの記録、監視、検査データ収集、および何らかの任意の「トリガ」状態に先立つイベントを記録する必要があり、しかも大量の記憶を必要とする場合があり得る、その他の種類のシステムが含まれ、しかもこれらに限定される訳ではない。
【０００７】
したがって、本発明の一態様は、ファイル・システムを備え、これを通じてアプリケーション・プログラムがデータを収容したファイルにアクセスすることを可能にする、コンピュータ用オペレーティング・システムである。ファイルに書き込むモードは、クラスタの連続ループにデータを書き込むときにイネーブルすることができる。その後、ループ・モードでデータをファイルに書き込む。ループは、指定の長さを有する。ファイルに書き込んだデータ量がループ長よりも大きくなった場合、なおもループ内のクラスタにデータを書き込む。ループ化書き込みがディスエーブルされた場合、一連のリニア・クラスタにファイルを再構成する。
【０００８】
本発明には、数多くのその他の態様および実施例があり、このようなオペレーティング・システムを有するモーション・ビデオ・カメラや、このようなループ化ファイルを作成し、書き込み、再構成する、コンピュータ実装プロセスを含み、しかもこれらに限定される訳ではない。また、本発明は、コンピュータ・プログラム生産物または頒布用ディジタル情報生産物にも実施可能である。
【図面の簡単な説明】
【０００９】
【図１】図１は、本発明を用いることができる、汎用コンピュータを記述するブロック図である。
【図２】図２は、図１のコンピュータ・システムに典型的にどのようにファイルを割り当てるかについて、一例として示す図である。
【図３】図３は、本発明によるファイル・ループ・クラスタ・チェーンを、一例として示す図である。
【図４】図４は、ループ・モードを解除した後、ファイル・ループ・クラスタ・チェーンをどのようにしてアンラップする(unwrap)かについて、一例として示す図である。
【図５】図５は、本発明の一実施形態において、ファイル・ループ制御情報を表すために用いるデータ構造の図である。
【図６】図６は、本発明の一実施形態に対応するように変更した、ファイル記述子のデータ構造の一部の図である。
【図７】図７は、本発明のこの実施形態によるファイル・システムのループ制御機能を典型的にアプリケーション・プログラムがどのように用いるのかについて記述するフロー・チャートである。
【図８】図８は、本発明の一実施形態によるＤＯＳオペレーティング・システムにおける"ioctl"関数に対する変更を記述する疑似コードである。
【図９】図９は、ファイル・ループ制御機能の一実施形態を記述するフロー・チャートである。
【図１０】図１０は、ファイルのループ化を解除するときに、ファイル割り当ておよびディレクトリ・エントリを補正するアンラップ機能の一実施形態を記述するフロー・チャートである。
【図１１】図１１は、本発明の一実施形態による、ループ化書き込み機能を実施するために、どのようにしてデータをループ化セグメントに書き込むかについて記述するフロー・チャートである。
【図１２】図１２は、ループを有するファイルのファイル割り当てテーブル・エントリをアンラップしたことを保証するために、どのようにしてファイルを閉じるかについて記述するフロー・チャートである。
【発明を実施するための形態】
【００１０】
以下の詳細な説明を添付図面と関連付けて読むことによって、本発明に関して一層完全な理解が得られよう。図面において、同様の参照番号は同様の構造を示すものとする。
コンピュータのファイル・システムは、オペレーティング・システムがファイルを管理するための機構である。ファイルとは、名称を付けた論理構造であり、オペレーティング・システムによって定義し、実装し、その名称および一連のデータの論理レコードを物理的な記憶媒体にマッピングする。オペレーティング・システムは、具体的に種々のレコード・タイプに対応することができ、あるいはアプリケーション・プログラムが解釈または制御するためにこれらを未定義のままにしておくことも可能である。アプリケーション・システムは、ファイルをその名称で参照し、オペレーティング・システムを通じてアクセスし、その際このオペレーティング・システムが定義するコマンドを用いる。オペレーティング・システムは、ファイルを作成し、ファイルを開き、ファイルに書き込み、ファイルを読み出し、ファイルを閉じるために用意した、基本的なファイル処理を行う。
【００１１】
ファイルを作成するためには、オペレーティング・システムは最初に、ファイル・システムが制御する記憶媒体における空間を識別する。次に、ディレクトリ内に、新しいファイルのエントリを作る。ディレクトリは、使用可能なファイルの名称、およびファイル・システム内におけるこれらの位置を示すエントリを含む。ファイルの作成には、ある使用可能な空間を当該ファイルに割り当てることを含む場合がある。ファイルを開くと、ハンドル(handle)がアプリケーション・プログラムに返され、これを用いてファイルにアクセスする。ファイルを閉じると、ハンドルは無効になる。
【００１２】
データをファイルに書き込むためには、アプリケーション・プログラムはコマンドをオペレーティング・システムに発行し、ファイル名、ハンドルまたはその他の記述子のようなファイルの指示子、およびファイルに書き込む情報双方を指定する。ファイルの指示子が与えられると、オペレーティング・システムはディレクトリを探索し、ファイルの位置を探し出す。ディレクトリ・エントリは、書き込みポインタと呼ばれる、ファイルの現在の終端のポインタを記憶している。このポインタを用いて、次に使用可能な記憶ブロックの物理的な位置を計算し、そのブロックに情報を書き込む。書き込みポインタをディレクトリ内で更新し、新たなファイルの終端を示すようにする。
【００１３】
ファイルからデータを読み出すためには、アプリケーション・プログラムはコマンドをオペレーティング・システムに発行し、ファイルの指示子、および次のデータ・ブロックを置くべき、当該アプリケーションに割り当てられたメモリ位置を指定する。オペレーティング・システムは、そのディレクトリを探索して、ファイルの指示子が与えられた該当エントリを求める。ディレクトリは、次に読み出すデータ・ブロックに対するポインタを備えることもでき、あるいはアプリケーションが使用するファイルの先頭からのオフセットをプログラムまたは指定することも可能である。
【００１４】
ファイル・システムを用いることの主な利点は、アプリケーション・プログラムにとって、ファイルは、オペレーティング・システムが用いる物理的記憶装置には全く関与せずに、作成、開放、書き込み、読み出し、および閉鎖を行うことができる論理的構造であるという点にある。
【００１５】
殆どの物理的媒体は、セクタまたはブロックと呼ばれる、最小単位の記憶サイズを有し、データの書き込みおよびデータの読み出しはこれに対して行うことができる。典型的に、一次元のブロック番号を用いてセクタを表し、公知の数式を用いてこれを面、トラック、およびトラック内のセクタに変換し、そのセクタにアクセスする。ブロックは、ファイルの一部である場合に「用いる」。ブロックは、単体でも、クラスタと呼ばれるグループでも用いることができる。クラスタという用語は、ここで用いる場合、ファイル内で書き込んだり、ファイル内に含ませるために使用可能な場合、１つ以上の「空いた」ブロックを意味するものとする。自由空間は、リンク・リスト(linked list)またはtableまたはアレイによる等、多くの方法で表すことができる。ディスク空間を割り当てるには、連続割り当て、連結割り当て(linked allocation)、およびインデックス化割り当て(indexed allocation)という主要な３方法がある。本発明の一実施形態では、変更するファイル・システムは、ファイル割り当てテーブルを用いる、MS-DOSファイル・システムである。以下の説明では、このような割り当て方法を実施の一例として用いる。しかしながら、他の割り当て方法も使用可能であることは理解されよう。
【００１６】
本発明の一実施形態では、オペレーティング・システムが、データ・ファイルへのデータの書き込みを制御することによって、データ・ファイルに対するループ化書き込みおよび非ループ化書き込みに対応する。即ち、データをファイルに書き込む際、オペレーティング・システムは、繰り返し同じブロックのループにデータを書き込み、周期的に同じブロックに上書きする。このループ化記録は、データを書き込んでいる現在の位置、および所望のループ・サイズに基づいて、書き込みポインタを制御することによって実施する。例えば、ユーザがボタンを押すことによる等のようなトリガ・イベント(triggering event)の発生時に、現在書き込み中のデータ・ブロックから次のデータ・ブロックへの連結を切断し、追加のデータ・ブロックを割り当てる。このデータ・ブロックは、ループ化のリンク・リストの一部ではなく、以前には割り当てられていない記憶領域からのものである。ループ・モード(looped mode)を解除するとき、またはファイルを閉じるとき、オペレーティング・システムはファイル割り当てテーブルを変更し、結果的に得られたデータ・ファイルの実際の構造を示すようにする。
【００１７】
次に本発明の一実施形態について、以下の図と共に詳細に説明する。ここで図１を参照すると、本発明を実施可能な適切なコンピュータ・システム２０は、典型的に、出力装置２２を含み、これがユーザに情報を表示する。コンピュータ・システム２０は、出力装置２２に接続してあるメイン・ユニット２４と、キーボードのような入力装置２６を含む。メイン・ユニット２４は、一般に、相互接続機構３２を通じてメモリ・システム３０に接続してあるプロセッサ２８を含む。入力装置２６も、出力装置２２と同様、接続機構３２を介して、プロセッサ２８およびメモリ・システム３０に接続してある。
【００１８】
コンピュータ・システムには１つ以上の出力装置を接続可能であることは理解されよう。出力装置の例には、陰極線管（ＣＲＴ）ディスプレイ、液晶ディスプレイ（ＬＣＤ）、プリンタ、モデムのような通信機器、および音声出力が含まれる。また、コンピュータ・システムには１つ以上の入力装置も接続可能であることも理解されよう。入力装置の例には、キーボード、キーパッド、トラック・ボール、マウス、ペンおよびタブレット、通信機器、音声入力、ならびにスキャナが含まれる。本発明は、コンピュータ・システムと組み合わせて用いる特定の入力装置や出力装置、またここに記載するものには限定されないことは理解されよう。
【００１９】
コンピュータ・システム２０は、典型的に、汎用コンピュータ・システムであり、アプリケーション・プログラムを生産するための「Ｃ」または「パスカル」のような高級コンピュータ・プログラミング言語を用いて、プログラムすることができる。また、コンピュータ・システムは、特別にプログラムした、特殊目的ハードウエアとすることも可能である。汎用コンピュータ・システムでは、プロセッサは典型的に市販のプロセッサであり、Intel社から入手可能なｘ８６プロセッサ・シリーズや、Motorola社から入手可能な６８０Ｘ０シリーズ・マイクロプロセッサがその例である。多くの他のプロセッサも使用可能である。コンピュータ・システムでは、プロセッサは、オペレーティング・システムと呼ばれるプログラムを実行する。ＵＮＩＸ（登録商標）、ＤＯＳおよびＶＭＳがその例である。オペレーティング・システムは、他のコンピュータ・プログラムの実行を制御し、ファイル・システム、スケジューリング、デバッギング、入出力制御、コンパイル、記憶領域の割り当て、データ管理およびメモリ管理、ならびに通信制御および関連するサービスを行う。プロセッサおよびオペレーティング・システムは、高級プログラミング言語のアプリケーション・プログラムを書くためのコンピュータ・プラットフォームを規定する。
【００２０】
メモリ・システムは、典型的に、コンピュータ読み取り可能および書き込み可能な不揮発性記録媒体を含み、磁気ディスク、フラッシュ・メモリおよびテープがその例である。ディスクは、フロッピ・ディスクとして知られている着脱自在のもの、またはハード・ドライブとして知られている永続的なものでもよい。ディスクは、多数のトラックを有し、その中に二進形態、例えば、一連の１および０として解釈する形態で信号を記憶する。このような信号は、プロセッサが実行するアプリケーション・プログラムを定義したり、あるいはアプリケーション・プログラムが処理する、ディスク上に記憶してある情報を定義することができる。典型的に、動作においては、プロセッサは、不揮発性記録媒体から、集積回路メモリ素子にデータを読み込ませる。集積回路メモリ素子は、典型的に、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）またはスタティック・メモリ（ＳＲＡＭ）のような、揮発性ランダム・アクセス・メモリである。集積回路メモリ素子は、ディスクよりも、プロセッサによる情報アクセスの高速化を可能にする。プロセッサは、通常、集積回路内部でデータを操作し、次いで処理が完了したときにデータをディスクにコピーする。ディスクと集積回路メモリ素子との間のデータ移動を管理するための機構は、多種多様のものが公知である。本発明はこれに限定される訳ではない。また、本発明は特定のメモリ・システムにも限定されるものではないことも理解されよう。
【００２１】
本発明は、特定のコンピュータ・プラットフォームにも、特定のプロセッサにも、特定の高級プログラミング言語にも限定されないことは理解されよう。加えて、コンピュータ・システム２０は、マルチプロセッサ・コンピュータ・システムとしてもよく、あるいはコンピュータ・ネットワークを通じて接続した多数のコンピュータを含むことも可能である。ファイル・システムは、磁気ディスクに限定される訳ではなく、光ディスクのような他の記憶媒体や、ＲＡＭドライブのようなメモリを基本とするファイルも含むことができる。
【００２２】
前述のように、オペレーティング・システムは、ファイル・システム、即ち、論理的構造および関連するコマンドを備え、アプリケーション・プログラム間にアブストラクション層(layer of abstraction)を与えると共に、メモリ・システム内においてデータを物理的にどのように記憶媒体上に記憶するかについて規定する。ファイルは、アプリケーションが用いる名称で表し、オペレーティング・システムはこれを記憶位置にマッピングする。アプリケーション・プログラムの観点からは、任意のいずれの時点においても、ファイルを開いて、書き込みを行い、ループ・モードにセットすることができ、データは、確定した記憶領域を有さない無限の記憶領域を有するかのようにファイルに書き込まれ、ファイル・システムが当該ファイル内のループ化を扱う。ある時点において、何らかのイベントが発生した場合、ファイルをリニア・アクセス・モードに転換し、追加のデータは、新たに割り当てるディスク空間に書き込む。ループ・モードは、どの時点でも、再度イネーブルしたり、再度ディスエーブルすることも可能である。ファイルへの書き込みが完了すると、ファイルを閉じる。ファイル・システム内部では、ポインタを操作して、ファイルがそれ自体の上でループしているという事実を、アプリケーション・プログラムから隠す。
【００２３】
以下に説明する機構は、ブロック割り当て方式を用い、割り当てテーブルを維持して特定のブロックをファイルに指定し、ブロックのステータスを追跡し、ブロックへのランダム・アクセスに対応し、動的なクラスタまたはブロックの割り当てを有する、いずれのファイル・システムにも実施することができる。例えば、本発明は、ＰＣＴ出願連番第ＵＳ９６／０２４６０号に示すような、モーション・ビデオ・レコーダに用いることができる。その内容は、この言及により本願にも含まれるものとする。これは、MS-DOS 6.0ファイル・システムと互換性のある、WIND River Systems社からのVx Worksリアル・タイム・カーネルの一部である、MS-DOSオペレーティング・システムの一バージョンを用いることができる。
【００２４】
図２は、オペレーティング・システムが一般にファイル内のブロックまたはクラスタをどのように管理するのかを示す。典型的に、オペレーティング・システムは、ディレクトリ構造およびファイル割り当てテーブル（ＦＡＴ：file allocation table）を含む。ディレクトリは、数個のサブディレクトリについて、各ファイルの名称、およびデータ・ファイルの先頭である、ディスク上の対応ブロックを示す。ＦＡＴは、各ファイルに割り当てたブロック、およびこれらをどのようにブロックのチェーンに組み込んでファイル内容を規定するかを示す。図２に内容の例として、ブロック０ないし１０を示す。例えば、ファイルがブロック４から開始すると仮定する。ブロック内の番号は、このファイルのデータを収容する次のファイルを示す。図示のように、このファイルは、ブロック４，５，８および１０の内容を含む。'FFFF'は、最後のブロックを示す。
【００２５】
ここで図３を参照し、クラスタ・ループの一例を示す。この図では、ブロック番号は、当該ブロックを表すボックスの内側にある。例えば、データをブロック１０に書き込んでいる間に、ループ化制御をインスタンス化する(instantiate)場合、更にデータを書き込みながら、追加のブロックを割り当てる。書き込んだデータ量が、所望のループ・サイズに対応する場合、書き込みは、ループの最初のブロックを用いて継続する。この例では、ブロック１４がブロック１０に続く。次に、ブロック１７，２０および４４にデータを書き込む。データをブロック４４に書き込んだ後、アプリケーションがループの終了を要求するまで、ブロック１４を用いて書き込みは継続する。例えば、アプリケーションが、ブロック１７への２回目の書き込みの間に、ループのアンラップを要求しようとした場合、データはブロック６３に書き込まれ、次いでブロック８３に書き込まれる。図３に示すループ・ポインタ構造もアンラップする。このようなアンラップは、要求時、例えば、ブロック１７への書き込みの後、またはデータ・ファイルを閉じるときに行うことができる。この例のループ化データ・ファイルをアンラップした結果を図４に示す。即ち、ブロック１０の後に、ブロック２０，４４，１４および１７が続き、更にその後に、ブロック６３および８３が続く。
【００２６】
ループ化ファイル構造を実施するために用いる制御情報を表すには、図５に示すようなループ制御構造と呼ばれるデータ構造を、オペレーティング・システムに追加する。この構造は、ループ・モードに入ったか否かを示す、１００に示すような値、１０２に示すような要求ループ長、および１０４に示すような実ループ長を記憶する。実ループ長は、要求サイズの実際のブロック・サイズに対する整合に対処するために、要求長とは異なる場合もある。
【００２７】
ループ化書き込みの作成、およびループ化書き込みを終了した後に、ループ化ファイルのアンラップに対応するために、ファイル記述子のデータ構造も、図６に示すように、いくつかの追加の値を含むように変更してある。図６も、これらの値を初期化した場合について示す。即ち、ループ・アクティブ値１０６が、ファイルのループ・モードのステータスを示し、初期状態では偽となっている。ループ・オフセット１０８は、ファイル内のループのオフセットを示す。ループ長１１０は、ループのサイズを示し、初期状態では０である。ループ・カウント１１２は、初期状態では０であるが、一旦ループ化が行われると０以外になる。別の値１１４が、ループ前の最後のクラスタを示し、初期状態では０である。アンラップを行うクラスタも１１６に記憶する。これは、アンラップ・クラスタと呼び、初期状態では０である。最後に、ループ内の最終クラスタ１１８も、初期状態では０である。
【００２８】
次に図７を参照し、アプリケーション・プログラムがどのようにループ化記録を利用するのかを記述するフロー・チャートについてこれより説明する。アプリケーション・プログラムは、最初に、ステップ２００においてファイル記述子（図６）およびループ制御構造（図５）に対応して、変数を初期化する。次に、ステップ２０２において、所望のファイルを開き、その最初の書き込み位置に対するポインタを得る。ステップ２０４において、ある時間期間、アプリケーションがファイルにデータをリニアに書き込むことも可能である。最終的に、アプリケーションは、ステップ２０６において、ループ化書き込みを制御するために、変数（図５）をセットすればよい。これらの変数は、要求ループ長１０２を含み、ループ・イネーブル１００を真にセットする。ステップ２０８において、以下で説明する"ioctl"関数をコールし、所望のファイルをループ化記録モードに置く。ステップ２１０において、ある時間期間、データをファイル内のループに書き込むことができる。ループ化書き込みを終了する場合、アプリケーションは、ステップ２１２においてループ制御イネーブル値１００を偽にセットし、更にステップ２１４において"ioctl"関数を適用することによって、ループ化をディスエーブルする。次に、ステップ２１６において、データをデータ・ファイルにリニアに書き込むことができる。最終的に、ステップ２１８において、データ・ファイルを閉じる。
【００２９】
次に、図８を参照すると、ファイル・ループは、特殊なＩ／Ｏシステム制御機能（ＤＯＳオペレーティング・システムおよびその他のシステムでは一般に'ioctl'と呼ぶ）として実施する。これは、図７のステップ２０８において示したような、オープン・ファイル・ポインタ上で実行する。Ｉ／Ｏ制御機能は、特殊機能コードとして実施し、１つ以上のパラメータを、単純な関数コールによって、Ｉ／Ｏシステムに渡す。この例におけるＩ／Ｏ制御機能コードは、FIOLOOPMODEと称し、一意の機能コードを割り当ててある。このＩ／Ｏ制御機能は、図５のループ制御構造であるファイル・システムに、パラメータを渡す。
【００３０】
ioctl関数の変更のための疑似コードの一例を図８に示す。図８の疑似コードは、このioctl関数が、制御対象ファイルのファイル記述子、ループ制御機能を示すことができる機能コード、およびループ制御機能にとって、ループ制御構造（図５）のメモリ内のアドレスである引数とを受け取ることを示す。この場合、受け取った機能コード、および引数によって指定されたループ制御構造（図５）に基づいて「ケース」スイッチによって、要求された機能を実行する。この機能コードは、ファイル・システムのループ制御機能をコールするものであり、以下に、指示したファイル記述子に適用した場合について、図９および図１０と関連付けて説明する。
【００３１】
ここで、図９と関連付けて、ループ制御機能について説明する。ファイル・ループ制御機能は、ステップ２２０における初期化によって開始する。以下で述べるループ・パッドおよびループ・クラスタ値を０に初期化し、ファイル記述子に対するボリューム記述子にアクセスし、このボリューム内におけるクラスタ当たりのバイト数を識別する。次に、ステップ２２２において、ファイル記述子およびボリュームの制御を行う。このステップは、例えば、セマファー(semaphore)を用いることによって実行することができる。また、ファイル記述子をチェックして、それが現行のものであり、削除されたものでも古いものでもないことを確認することも可能である。ファイル記述子が現行のものでない場合、セマファーを解放し、エラーを返すことができる。
【００３２】
適正な初期化が行われたなら、ループ制御イネーブル値１００（図５）が偽にセットされていることが、ステップ２２４において判定された場合、ループ・アクティブ値１０６（図６）をチェックし、それも偽ではないことを確認する（ステップ２２６）。ファイルがループ・モードになく、ループ・ディスエーブル・コマンドを受け取った場合、ステップ２２８においてエラーを返す。かかるエラーの場合、ボリュームおよびファイル記述子上のあらゆるセマファーも解放する。
【００３３】
少なくとも１回ファイルを既にループ化してある場合、その位置情報を記録する。より具体的には、ステップ２３０において、ループ・カウント値をチェックする。それが非ゼロである場合、ステップ２３２において、ファイル記述子の新しいポインタ（図示せず）を、ループ・オフセットおよびループ長の和にセットすることによって、ファイル・ポインタをループの終端にセットする。ステップ２３４において、データが書き込まれた最後のクラスタのファイル記述子に、アンラップ・クラスタ値１１６をセットする。次に、ステップ２３６においてループ・アクティブ値１０６を偽にセットし、ループ・ステップにおいてループをアンラップする。これについては、図１０と関連付けて以下で更に詳細に説明する。
【００３４】
ループ制御イネーブル値１００が真であることが、ステップ２２４において判定された場合、およびループ・アクティブ値１０６が既に真にセットされていることがステップ２４０において判定された場合、ステップ２４２においてエラーを返し、ファイルは既にループ化のためにイネーブルしてあることを示す。このようなエラーが発生した場合、ボリュームおよびファイル記述子を制御するあらゆるセマファーを解放する。それ以外の場合、開始オフセットがクラスタの境界上にないとステップ２４４において判定された場合、ステップ２４６において別のエラー・メッセージを返す。この場合も、ボリュームおよびファイル記述子のセマファーを解放する結果となる。ステップ２４４は、ファイル記述子の新たなポインタを、クラスタ当たりのバイト数で除算し、剰余があるか否かチェックすることによって実行すればよい。
【００３５】
次に、ステップ２４８において、ループ化を開始するオフセットをセットする。これを行うには、ファイル記述子のループ・オフセット値１０８を新たなポインタ値にセットする。次に、ステップ２５０において、ループ・サイズを、次の全クラスタ・サイズにまで調節する。即ち、要求長１０２をクラスタ当たりのバイト数で除算した剰余として、ループ・パッド値を計算する。ステップ２２０において初期化したループ・クラスタ値を、要求ループ長をクラスタ当たりのバイト数で除算し、剰余を除いた値にセットする。この値は、ループ内のクラスタ数を表す。クラスタ数が０の場合、またはループ・パッド値が０に等しくない場合、ループ・クラスタ値を１だけ増分する。ステップ２５０は、ループ内のクラスタ数が少なくとも１であり、ループの要求長よりも大きいことを確認する。
【００３６】
次に、ステップ２５６においてループ・アクティブ値１０６およびループ長値１１０をセットし、書き込み機能の間、ループ化を活性化する。これについては、図１１に関連付けて以下で説明する。次に、ステップ２５８において、実際のループ長１０４をセットする。ステップ２６０において、ループ前の最後のクラスタである、現クラスタの指示を記憶する。ループ・オフセットが０の場合、この値１１４を０にセットする。それ以外の場合、この値１１４は、現クラスタを示すようにセットする。次に、ステップ２６２において、全てのセマファーを解放し、ioctl関数の処理を完了する。ステップ２６４において、成功(success)を返す。
【００３７】
ループを解除する場合に、ファイル割り当てテーブルおよびディレクトリ・エントリ構造をパッチ・アップ(patch up)するために、ステップ２３８でコールしたアンラップ機能について、図１０と関連付けてこれより説明する。アンラップ・プロセスは、ステップ２６４における初期化から開始する。例えば、いくつかの変数を初期化し、ファイルのディレクトリ・エントリに対するポインタ、およびファイル記述子から得られるボリューム記述子を得て、ループ内の最初のクラスタを表す整数値を０にセットする。この値を、先頭クラスタ値と呼ぶ。次に、ループ化を実際に行った場合、ファイルをアンラップする。このために、ステップ２６６においてファイル記述子ループ・カウンタ１１２をチェックする。ループ化を行わなかった場合、プロセスは終了し、ステップ２９４において成功を返す。ステップ２６８において、ループ・アクティブ値１０６をチェックする。この値が、ループ化がアクティブであることを示す場合、ステップ２７０においてエラーを返す。
【００３８】
ループ・カウンタが０よりも大きく、ループ化が行われたが、ループ化はもはやアクティブでないことを示す場合、ステップ２７２において、ファイルに対するディレクトリ・ファイルを読み出す。ステップ２７４において、値１１６を値１１８と比較することによって、アンラップ・クラスタ１１６が当該ループ内の最後のクラスタであることが判定された場合も、プロセスはステップ２９４において終了する。それ以外の場合、ファイル割り当てテーブルを変更する。この変更については、図１０の残りのステップと関連付けてこれから説明する。ファイル割り当てテーブルを訂正するために、最初にステップ２７６において、ループの前の最後のクラスタ、即ち、ファイル記述子内の値１１４が０に等しいか否かについて判定することによって、ループがファイル・オフセット０において開始したか否かについて判定を行う。ファイルの先頭がループ内の最初のクラスタである場合、ステップ２７８においてディレクトリ・エントリから得られる、ファイルの先頭を定義するクラスタを示す値に、先頭クラスタ値をセットする。次に、ボリューム記述子を用いて決定した、アンラップ・クラスタ１１６に続くファイルにおける次のクラスタが、ファイルの新たな先頭であることを示すように、ディレクトリ・エントリを変更する（ステップ２８０）。
【００３９】
ループがファイル・オフセット０から開始しなかった場合、即ち、ループ値１１４の前の最後のクラスタが０に等しくない場合、ステップ２８２において、ボリューム記述子にしたがって、次のクラスタとなるように、即ち、ファイル記述子のループ値１１４の前の最後のクラスタの後に、先頭クラスタ値をセットする。次に、ステップ２８４において、ファイル割り当てテーブル・エントリを書き込み、ループ前の最後のクラスタを、アンラップ・クラスタの後にあるクラスタに接続する。例えば、値１１４に対応するクラスタ、およびボリューム記述子を用いて決定したアンラップ・クラスタ１１６の後ろにある次のクラスタを、ファイル割り当てテーブルにおいて連結する。
【００４０】
次に、アンラップ・クラスタ１１６を、いずれかのループ後セグメント(post-loop segment)内の最初のクラスタに接続する。即ち、ステップ２８６において、ループ１１８内の最後のクラスタの後にある次のクラスタがヌル(null)でないと、ボリューム記述子を用いて判定された場合、アンラップ・クラスタ１１６を、ループ１１８内の最後のクラスタの後にある次のクラスタに連結するように、ファイル割り当てテーブルのエントリを書き込む（ステップ２８８）。ボリューム記述子が、ループ１１８内の最後のクラスタに続くクラスタを示さない場合、アンラップ・クラスタはファイルの最後である。したがって、アンラップ・クラスタ１１６の後は、ファイルの終端となることを示す、ファイル割り当てテーブル・エントリを書き込む（ステップ２９０）。最後に、ステップ２９２において、ファイル割り当てテーブル・エントリを書き込むことによって、ループ１１８内の最後のクラスタを、先頭クラスタ値に対応するクラスタにリンクする。これらのステップが完了した後、ステップ２９４において、問題なくアンラップ機能から戻る。
【００４１】
これまで、ioctl関数の一例について説明したが、実際のデータ書き込みでは、どのようにしてループ内の最初のブロックにループ・バックするのかについて、これより説明する。このループ化機能性(looping functionality)は、ファイル・システムの書き込み機能において実施する。書き込み機能は、ファイル記述子ポインタ、書き込むデータを示すバッファへのポインタ、および書き込むバイト数を表す整数を示す入力を含む（ステップ２９９）。データ書き込みプロセスでは、標準的な機能性を実行することに加えて、ステップ３００において、ファイル記述子のデータ構造のループ・アクティブ・フィールド１０６を分析することによって、ループがアクティブか否かについても判定を行う。ファイル記述子に対する新たなポインタが、ループに対して割り当てられたクラスタ内にないことが、ステップ３０２において判定された場合、この状態は、ループ化を行うべきことを示す。ループ・カウンタ１１２の現在値が０の場合、このループは最初のループであり、ループ・カウント１１２を増分する（ステップ３０４）。これが最初のループの場合、ステップ３０６において、このクラスタの指示をループ１１８内の最後のクラスタとして記憶する。ステップ３０８において、ファイル記述子に対する新たなポインタをループ・オフセット・ポインタ１０８にセットすることによって、ファイル・ポインタを戻す(rewind)。次いで、ステップ３１０において、戻したファイル・ポインタを用いて、書き込みプロセスを続け、データを書き込む。
【００４２】
上述のように、図９および図１０のioctl関数は、前述の機構を適用する(engage)場合に、ループ化ファイル割り当てテーブル・エントリのアンラップを処理する。しかしながら、ファイルを閉じるときにこれらのエントリをアンラップしてあることを確認することが望ましい場合がある。つまり、これより図１２と関連付けて説明するように、標準的な閉鎖機能を変更することができる。ステップ３１９においてファイル記述子の値を初期化した後、ステップ３２０において、ループ・カウンタを検査する。これが非ゼロであり、ループ化書き込みを行ったことを示す場合、ステップ３２２においてループ・アクティブ・フィールドを検査する。ループがアクティブの場合、ステップ３２４において（図１０のプロセスを用いて）ループをアンラップし、ループ・アクティブ値１０６をリセットする。次いで、３２６において、閉鎖機能はそのステータスを返すことができる。
【００４３】
これまで本発明の実施形態をいくつか説明してきたが、前述のものは、限定ではなく単なる例示であり、一例として提示したに過ぎないことは、当業者には明白であろう。多数の変更やその他の実施形態は、当技術分野における通常の知識の範囲内であり、添付の請求の範囲によって規定する本発明の範囲およびその均等物に該当するものと見なすこととする。
【図１】
0004390846.tif 000002
【図２】
0004390846.tif 000003
【図３】
0004390846.tif 000004
【図４】
0004390846.tif 000005
【図５】
0004390846.tif 000006
【図６】
0004390846.tif 000007
【図７】
0004390846.tif 000008
【図８】
0004390846.tif 000009
【図９】
0004390846.tif 000010
【図１０】
0004390846.tif 000011
【図１１】
0004390846.tif 000012
【図１２】
0004390846.tif 000013