(57)【特許請求の範囲】
【請求項１】
プロセッサと、
前記プロセッサがアクセス可能な記憶装置であって、仮想開始アドレスを指定するファイル情報を含み、前記指定された仮想開始アドレスに基づく仮想分岐アドレスと共に、複数の不連続なフラグメントに分割されて格納されたファイルを有する記憶装置と、
前記プロセッサの代わりに前記記憶装置上に格納されたファイルを管理するファイルシステムであって、
前記ファイルが前記仮想開始アドレスおよび前記仮想分岐アドレスと前記記憶装置に圧縮されずに格納され、仮想マッピング可能である場合、前記ファイルが前記記憶装置上の適所で実行可能であると判定し、
前記前記仮想開始アドレスおよび前記仮想分岐アドレスに対応する前記記憶装置上の物理アドレスを取得して仮想アドレス変換器に通知する、ファイルシステムと、
前記ファイルシステムが前記記憶装置にアクセスするために使用されるアクセスドライバと、
前記物理アドレスと前記仮想開始アドレスおよび前記仮想分岐アドレスとの変換を行う、前記プロセッサと前記記憶装置とに直接接続された前記仮想アドレス変換器であって、前記ファイルシステムから通知された前記物理アドレスから前記仮想開始アドレスで始まる単一の連続した仮想アドレスを生成する仮想アドレス変換器と
を備え、前記プロセッサは、前記ファイルシステムおよび前記アクセスドライバを使用せずに、前記仮想開始アドレスに基づき前記仮想アドレス変換器を使用して前記ファイルを実行することを特徴とするコンピューティング装置。
【請求項２】
前記記憶装置は、バイトごとにアドレス指定可能であることを特徴とする請求項１に記載のコンピューティング装置。
【請求項３】
前記記憶装置は、ＮＯＲフラッシュＲＡＭであり、前記コンピュータ装置は、前記ファイルシステムが前記ＮＯＲフラッシュＲＡＭ上の前記ファイルに関するファイル情報にアクセスできるようにするアクセスドライバをさらに含むことを特徴とする請求項１に記載のコンピューティング装置。
【請求項４】
前記ファイルは、圧縮されない形で前記記憶装置上に格納されることを特徴とする請求項１に記載のコンピューティング装置。
【請求項５】
コンピュータが前記コンピュータのプロセッサがアクセス可能な記憶装置上の適所でファイルを実行する方法であって、前記ファイルは、仮想開始アドレスを指定するファイル情報を含み、前記指定された仮想開始アドレスに基づく仮想分岐アドレスと共に、前記記憶装置上の複数の連続しないフラグメントに分割されて前記記憶装置に格納されており、前記方法は、
前記ファイルシステムがアクセスドライバを利用して前記記憶装置上で前記ファイルの位置を特定するステップと、
前記ファイルシステムが、前記ファイルと共に仮想開始アドレスおよび仮想分岐アドレスが前記記憶装置に圧縮されずに格納され、仮想マッピング可能である場合、前記ファイルが実際に前記記憶装置上の適所で実行可能であると判定するステップと、
前記ファイルシステムが前記アクセスドライバを利用して、前記ファイルの前記仮想開始アドレスと前記仮想分岐アドレスに対応する前記記憶装置上の物理アドレスを取得して仮想アドレス変換器に通知するステップと、
前記仮想アドレス変換器が、前記物理アドレスから前記仮想開始アドレスで始まる単一の連続した仮想アドレスを生成するステップと、
プロセッサが前記仮想アドレスに基づいてコマンドを発行することにより、前記ファイルを実行するステップであって、前記仮想アドレス変換器は前記記憶装置から前記ファイルに関連して直接実行されるデータの位置を特定する、実行するステップと、
を備えたことを特徴とする方法。
【請求項６】
前記ファイルが圧縮されていないこと、および前記指定された仮想開始アドレスに基づく仮想分岐アドレスを含むものであると判定することによって、前記ファイルが前記記憶装置上の適所で実際に実行可能であると判定するステップを備えたことを特徴とする請求項５に記載の方法。
【請求項７】
コンピュータのプロセッサがアクセス可能な記憶装置上の適所でファイルを実行する方法を前記コンピュータに実行させるコンピュータ実行可能命令を格納したコンピュータ読取り可能記録媒体であって、前記ファイルは、仮想開始アドレスを指定するファイル情報を含み、前記指定された仮想開始アドレスに基づく仮想分岐アドレスと共に、前記記憶装置上の複数の連続しないフラグメントに分割されて前記記憶装置に格納されており、前記方法は、
前記ファイルシステムがアクセスドライバを利用して前記記憶装置上で前記ファイルの位置を特定するステップと、
前記ファイルシステムが、前記ファイルと共に仮想開始アドレスおよび仮想分岐アドレスが前記記憶装置に圧縮されずに格納され、仮想マッピング可能である場合、前記ファイルが実際に前記記憶装置上の適所で実行可能であると判定するステップと、
前記ファイルシステムが前記アクセスドライバを利用して、前記ファイルの前記仮想開始アドレスと前記仮想分岐アドレスに対応する前記記憶装置上の物理アドレスを取得して仮想アドレス変換器に通知するステップと、
前記仮想アドレス変換器が、前記物理アドレスから前記仮想開始アドレスで始まる単一の連続した仮想アドレスを生成するステップと、
プロセッサが前記仮想アドレスに基づいてコマンドを発行することにより、前記ファイルを実行するステップであって、前記仮想アドレス変換器は前記記憶装置から前記ファイルに関連して直接実行されるデータの位置を特定する、実行するステップと、
を備えたことを特徴とするコンピュータ読取り可能記録媒体。
【請求項８】
前記方法は、前記ファイルが圧縮されていないこと、および前記指定された仮想開始アドレスに基づく仮想分岐アドレスを含むものであると判定することによって、前記ファイルが前記記憶装置上の適所で実際に実行可能であると判定するステップを備えたことを特徴とする請求項７に記載のコンピュータ読取り可能記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピューティング装置に関し、具体的に言えば、たとえばそうした装置用のオペレーティングシステムが格納された比較的小規模なハードディスクまたはランダムアクセスメモリ（ＲＡＭ）などを備えたポータブルコンピューティング装置などの、比較的限られた記憶スペースを備えたコンピューティング装置に関する。より詳細には、本発明は、こうしたコンピューティング装置およびそのオペレーティングシステム／ファイルシステムに関し、具体的には比較的安全かつ効率的な方法でファイルシステム操作を実行することに関する。
【背景技術】
【０００２】
パーソナルコンピュータ、ゲームコンピュータ、家庭用ビデオレコーディングコンピュータ、およびその他などの多くの典型的なコンピューティング装置では、コンピューティング装置が比較的大規模な記憶装置を含む。その記憶装置は、もちろんそのコンピューティング装置上で実行可能であるアプリケーションと、そのコンピューティング装置上で実行され、同様に動作し、および記憶装置にアクセスできるオペレーティングシステムおよび／またはファイルシステム（以下、「ファイルシステム」と呼ぶ）とを含む、コンピューティング装置に関するデータを格納することができる。記憶装置が比較的大規模であるため、その上でアプリケーションおよびファイルシステムが使用する容量は比較的重要ではなく、したがって、ファイル保守、システムアップグレード、ファイルアクセス、ファイル記憶、およびその他の問題は特に深刻ではない。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、コンピューティング装置がこのように比較的大規模な記憶装置を含んでおらず、代わりに比較的小規模な記憶装置を含んでいる場合、その上でアプリケーションおよびファイルシステムが使用する容量は比較的重要となり、前述の問題がより深刻になる可能性がある。たとえば、コンピューティング装置がたとえばポータブルオーディオまたはビデオプレーヤあるいはポータブルゲームコンピュータなどのポータブルコンピューティング装置等あり、比較的小型な場合、特にコンピューティング装置は、その上で実行可能なアプリケーションおよび収容可能な記憶装置の物理的大きさといった必要な機能が制限される可能性がある。そのため、こうしたコンピューティング装置は、比較的小規模な記憶装置を含む場合がある。記憶装置が比較的小規模であるため、その上でファイルシステムが使用する容量は比較的重要であり、したがってファイル保守、システムアップグレード、ファイルアクセス、ファイル記憶、およびその他の問題を慎重に考慮する必要がある。
【０００４】
考慮しなければならない問題の１つが、比較的小規模な記憶装置上のアプリケーションまたはファイルシステムを更新する方法である。具体的に言えば、比較的大規模な記憶装置では、こうした更新は、更新データを記憶装置の未使用部分に首尾よく書き込み、その後、対応する古いデータを記憶装置の他の部分から削除することによって達成することができる。しかしながら比較的小規模な記憶装置では、その記憶装置上のスペースを使用して、古いデータを削除するのに先立って更新データを書き込むことができない場合があり、したがって更新データを書き込むのに先立って容量を確保するために古いデータを削除しなければならない。
【０００５】
しかしながら批判的に言えば、アプリケーションまたはファイルシステムの更新が何らかの形で失敗し、その古いデータがすでに削除されてしまっている場合、更新されていないアプリケーションまたはファイルシステムをコンピューティング装置上で実行することが可能であった以前の状態に、コンピューティング装置を復元する方法がない可能性がある。アプリケーションの場合、可能であればアプリケーションが再ロードされるまで、こうした障害は苛立ちの原因となる可能性がある。しかしながらファイルシステムの場合、ファイルシステムが機能しなければコンピューティング装置は動作不能となるため、こうした障害は致命的となる可能性がある。
【０００６】
考慮しなければならない他の問題が、比較的小規模な記憶装置上にファイルを格納する方法である。具体的に言えば、比較的大規模な記憶装置ではファイルの格納はクラスタごとに実行され、各ファイルは１、２、４、８、または１６キロバイトあるいはそれ以上として定義可能な少なくとも１つのクラスタを使用する。したがって、特定のクラスタに少量のデータ（たとえば１バイト）しか割り当てられていないファイルの場合、こうしたクラスタ内の残りのすべてのスペースは他のいずれのファイルによっても使用されることがなく、したがって無駄になる。比較的大規模な記憶装置、具体的には何十または何百ギガバイトといった容量を備えた記憶装置内では、こうした無駄なスペースは特に問題ではない。
【０００７】
しかしながら比較的小規模な記憶装置では、こうした無駄なスペースがすぐにかなりの水準にまで達し、記憶装置のスペースを使い果たしてしまうことさえある。たとえば、１６メガバイトの容量と１６キロバイトとして定義されたクラスタとを備えた記憶装置は、たとえ各ファイルがわずか数バイトであっても、約１０００ファイルしか保持できない。さらに多くの場合、上記で述べたような比較的小規模な記憶デバイスは、実際にその上にかなりの数のおよそ数バイトから数百バイトという非常に小さなファイルを格納している。
【０００８】
考慮の対象となる他の問題は、ファイルが未割り振りデータまたはｎｕｌｌデータの一部を含む場合に、比較的小規模な記憶装置上にファイルを格納する方法である。ファイル内のこうした未割り振りデータまたはｎｕｌｌデータは、ファイル内にそのためのスペースが存在するデータであるが、こうしたデータはまだ確立されていないことが理解できるであろう。たとえば特定の１２８キロバイトファイルでは、その中央部分が、プレースホルダとして動作するが後に何らかの型の情報で満たされることになる、３２キロバイトのｎｕｌｌデータで構成される場合がある。したがって、こうしたｎｕｌｌデータはすべてゼロなどで表すことが可能であり、また一方では後に実質的な情報で満たされる可能性がある。
【０００９】
具体的に言えば、比較的大規模な記憶装置では、たとえこうしたｎｕｌｌデータが何も表さない場合であっても、こうしたｎｕｌｌデータを含むファイル全体が格納される。こうした「格納された」ｎｕｌｌデータは、比較的大規模な記憶装置上でのスペースの無駄であり、もっと適切な使い方が可能なことが理解できるであろう。しかしながら、ここでもこうした無駄なスペースは、特におよそ何十または何百ギガバイトの容量を備えた比較的大規模な記憶デバイスでは特に重要ではない。
【００１０】
しかしながらまた一方、比較的小規模な記憶装置では、こうした無駄なスペースがすぐにかなりの水準にまで達し、記憶装置のスペースを使い果たしてしまうことさえある。さらに、こうした比較的小規模な記憶装置上に、装置上の古いファイルに基づいて新しいファイルを構築しようと試みる場合、具体的には装置がほとんど満杯である場合、こうした無駄なスペースが妨げとなる場合があることも理解されよう。
【００１１】
考慮の対象となる他の問題は、比較的小規模な記憶装置上でファイルを実行する方法である。具体的に言えば、たとえば移動式電話、ポジションロケータ、音楽プレーヤなどのこうした比較的小規模な記憶装置を有することになるコンピューティング装置では、ユーザは要求された処置がほぼ即時に実行されることを望む可能性がある。言い換えれば、要求された処置が実行可能ファイルの実行を必要とする場合、こうしたユーザは、ファイルを記憶装置からローカルＲＡＭなどにロードして実行の準備が整うまでに何秒も待っていたくはない。さらに特定の状況では、たとえばコンピューティング装置が緊急時に救急隊員が使用する可能性のある携帯通信装置である場合など、動作の性質によってほぼ即時の実行が要求される可能性がある。
【００１２】
したがって、比較的小規模な記憶装置を備えたコンピューティング装置上でアプリケーションまたはファイルシステムを更新するための方法が求められている。
【００１３】
さらに、必要以上の無駄なスペースなしに、比較的小規模な記憶装置の記憶容量を効率よく使用するファイルシステムのフレームワークが求められている。
【００１４】
さらに、特にファイルがｎｕｌｌデータを含んでいる場合に、比較的小規模な記憶装置の記憶容量を効率よく使用することが可能なファイルの構造が求められている。
【００１５】
さらに、コンピューティング装置の記憶装置上にあるファイルがほぼ即時に実行可能な方法および機構が求められている。具体的に言えば、ファイルが記憶装置上に格納され、そこから直接実行可能な方法および機構が求められている。さらに、ファイルをフラグメント化方式で記憶装置上に格納することが可能であり、こうした記憶装置から直接実行可能である方法および機構が求められている。
【課題を解決するための手段】
【００１６】
上記で求められていることは、コンピューティング装置の記憶装置に常駐するアプリケーションを更新するための方法が提供される本発明によって、少なくとも部分的に満たされる。この方法では、更新に関するデータを記憶装置へ実際にコミットする（ｃｏｍｍｉｔ）ことを除き、すべての必要な処置を実行することによって更新がシミュレートされ、シミュレートされた更新が成功したか否かが判別される。成功した場合、更新は、同じ必要な処置を実行すること、および更新に関するデータを記憶装置へ実際にコミットすることによって実行される。
【００１７】
上記で求められていることは、コンピューティング装置が記憶装置と記憶装置上でファイルを格納および検索するためのファイルシステムとを含む本発明の態様によっても、少なくとも部分的に満たされる。記憶装置は、セクタに分けられた記憶スペースを含む。ファイルシステムは、外部的には記憶装置をセクタごとにアドレス指定するが、内部的には記憶装置の各セクタをチャンクに分割し、各セクタ内のデータをチャンクごとに管理する。したがってファイルシステムは、チャンクを有するセクタを読み取ることまたは書き込むことによって、記憶装置からチャンクを読み取り、または記憶装置にチャンクを書き込む。
【００１８】
さらに上記で求められていることは、コンピューティング装置がファイルを有する記憶装置と、記憶装置上でファイルを格納および検索するためのファイルシステムとを含む本発明によっても、少なくとも部分的に満たされる。ファイルは複数のセグメントを含み、少なくとも一部のセグメントはそれぞれｎｕｌｌデータであり、少なくとも一部のセグメントはそれぞれ実質的データである。ファイルは、各ｎｕｌｌデータセグメント向けに割り振られたスペースを有するが、こうした割り振られたスペースは、実際には情報で満たされていない。一方でファイルは、各実質的データセグメント向けに割り振られたスペースを有し、こうした割り振られたスペースは実際に情報で満たされている。各ｎｕｌｌデータセグメントは実際には記憶装置上に物理的に格納されず、各実質的データセグメントは実際に記憶装置上に格納される。
【００１９】
さらに上記で求められていることは、コンピューティング装置が、プロセッサと、実行可能ファイルを有する記憶装置と、プロセッサの代わりに記憶装置上の適所でファイルを実行するためのファイルシステムとを含む本発明によっても、少なくとも部分的に満たされる。ファイルは、記憶装置上で複数の連続しないフラグメントに分割される。コンピューティング装置は、記憶装置上にあるファイルのフラグメントの物理アドレスと、プロセッサによって使用される対応する仮想アドレスとの間で変換する、プロセッサと記憶装置との間に挿入された仮想アドレス変換器をさらに含む。
【００２０】
前述の要約および本発明の諸態様についての以下の詳細な説明は、添付の図面と共に読むことでより良く理解されるであろう。図面には、現時点で好ましい態様が本発明を例示する目的で示されている。しかしながら本発明は、図示された精密な配置構成および手段に限定されるものでないことを理解されたい。
【発明を実施するための最良の形態】
【００２１】
（コンピュータ環境）
図１および以下の考察は、本発明および／またはその一部が実施可能な好適なコンピューティング環境を簡単かつ全般的に説明することを意図するものである。必須ではないが、本発明については、クライアントワークステーションまたはサーバなどのコンピュータによって実行中であるプログラムモジュールなどのコンピュータ実行可能命令との一般的な関連において説明する。一般にプログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、構成要素、データ構造、およびその他を含む。さらに本発明および／またはその一部は、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な家庭用電子製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ等を含む、他のコンピュータシステム構成でも実施可能であることを理解されたい。本発明は、通信ネットワークを介してリンクされたリモート処理装置によってタスクが実行される、分散コンピューティング環境でも実施可能である。分散コンピューティング環境では、プログラムモジュールをローカルおよびリモートのどちらのメモリ記憶装置にも配置することができる。
【００２２】
図１に示されるように、例示的な汎用コンピューティングシステムは、処理ユニット１２１、システムメモリ１２２、および、システムメモリを含む様々なシステム構成要素を処理ユニット１２１に結合するシステムバス１２３を含む、従来のパーソナルコンピュータ１２０またはその他を含む。システムバス１２３は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのうちのいずれかを使用するローカルバスを含む、いくつかの種類のバス構造のいずれかとすることができる。システムメモリは、読み取り専用メモリ（ＲＯＭ）１２４およびランダムアクセスメモリ（ＲＡＭ）１２５を含む。起動時などにパーソナルコンピュータ１２０内の要素間で情報を転送する際に役立つ基本ルーチンを含む基本入力／出力システム１２６（ＢＩＯＳ）は、ＲＯＭ１２４に格納される。
【００２３】
パーソナルコンピュータ１２０は、ハードディスク（図示せず）からの読み取りおよびこれへの書き込みのためのハードディスクドライブ１２７と、取り外し可能磁気ディスク１２９からの読み取りおよび書き込みを行う磁気ディスクドライブ１２８と、ＣＤ−ＲＯＭまたは他の光学式媒体などの取り外し可能光ディスク１３１からの読み取りおよび書き込みを行う光ディスクドライブ１３０とをさらに含むことができる。ハードディスクドライブ１２７、磁気ディスクドライブ１２８、および光ディスクドライブ１３０は、それぞれハードディスクドライブインターフェース１３２、磁気ディスクドライブインターフェース１３３、および光ドライブインターフェース１３４によって、システムバス１２３に接続される。ドライブおよびそれらに関連するコンピュータ読取り可能媒体は、パーソナルコンピュータ１２０に関するコンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶を提供する。
【００２４】
本明細書に記載された例示的な環境では、ハードディスク、取り外し可能磁気ディスク１２９、および取り外し可能光ディスク１３１を利用しているが、例示的なオペレーティング環境では、コンピュータがアクセス可能なデータを格納することができる他の種類のコンピュータ読取り可能媒体も使用可能であることを理解されたい。こうした他の種類の媒体には、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、およびその他が含まれる。
【００２５】
オペレーティングシステム１３５、１つまたは複数のアプリケーションプログラム１３６、他のプログラムモジュール１３７、およびプログラムデータ１３８を含み、いくつかのプログラムモジュールをハードディスク、磁気ディスク１２９、光ディスク１３１、ＲＯＭ１２４、またはＲＡＭ１２５に格納することができる。ユーザは、キーボード１４０およびポインティングデバイス１４２などの入力装置を介して、パーソナルコンピュータ１２０にコマンドおよび情報を入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナ、またはその他を含むことができる。これらおよび他の入力装置は、多くの場合システムバスに結合されたシリアルポートインターフェース１４６を介して処理ユニット１２１に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースによって接続することができる。モニタ１４７または他の種類のディスプレイ装置も、ビデオアダプタ１４８などのインターフェースを介してシステムバス１２３に接続される。パーソナルコンピュータには、通常、モニタ１４７に加えてスピーカおよびプリンタなどの他の周辺出力装置（図示せず）が含まれる。図１の例示的なシステムには、ホストアダプタ１５５、小型コンピュータシステムインターフェース（ＳＣＳＩ）バス１５６、およびＳＣＳＩバス１５６に接続された外部記憶装置１６２も含まれる。
【００２６】
パーソナルコンピュータ１２０は、リモートコンピュータ１４９などの１つまたは複数のリモートコンピュータへの論理接続を使用する、ネットワーク化環境で動作することができる。リモートコンピュータ１４９は、他のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、または他の共通ネットワークノードとすることが可能であり、通常は、パーソナルコンピュータ１２０に関して上記で説明した要素の多くまたはすべてを含むが、図１ではメモリ記憶装置１５０のみが示されている。図１に示す論理接続には、ローカルエリアネットワーク（ＬＡＮ）１５１およびワイドエリアネットワーク（ＷＡＮ）１５２が含まれる。こうしたネットワーキング環境は、オフィス、企業規模コンピュータネットワーク、イントラネット、およびインターネットでよく見られるものである。
【００２７】
ＬＡＮネットワーキング環境で使用される場合、パーソナルコンピュータ１２０はネットワークインターフェースまたはアダプタ１５３を介してＬＡＮ１５１に接続される。ＷＡＮネットワーキング環境で使用される場合、パーソナルコンピュータ１２０は、通常、インターネットなどのワイドエリアネットワーク１５２を介した通信を確立するためのモデム１５４または他の手段を含む。モデム１５４は内蔵型または外付け型が可能であり、シリアルポートインターフェース１４６を介してシステムバス１２３に接続される。ネットワーク化環境では、パーソナルコンピュータ１２０に関して示されたプログラムモジュールまたはその一部を、リモートのメモリ記憶装置に格納することができる。図示されたネットワーク接続は例示的なものであり、コンピュータ間で通信リンクを確立するための他の手段が使用可能であることを理解されよう。
【００２８】
（比較的小規模な記憶装置を備えたコンピューティングデバイス）
次に図２を見ると、本発明は、１つまたは複数のアプリケーション１４およびファイルシステム１６がロードされた比較的小規模な記憶装置１２を備えたコンピューティング装置１０に関連して、特に有用であると考えられる。コンピューティング装置１０は、本発明の趣旨および範囲を逸脱することのない任意の種類のコンピューティング装置とすることが可能であるが、記憶装置１２が比較的小型である場合、コンピューティング装置１０も同様であることが多い。たとえばコンピューティング装置１０は、携帯メディアプレーヤまたはゲームプレーヤ、携帯情報端末、または携帯パーソナルコンピュータとすることができる。
【００２９】
コンピューティング装置１０上の記憶装置１２は、本発明の趣旨および範囲を逸脱することのない任意の記憶装置とすることができる。本発明は、記憶装置１２が比較的小型である状況に特に適用可能であるが、こうした記憶装置１２は、実際には本発明の趣旨および範囲を逸脱することのない任意のサイズとすることができる。コンピューティング装置１０に応じて、記憶装置１２は、ハードディスクドライブ、メモリカード、フラッシュＲＡＭ（ランダムアクセスメモリ）等とすることが可能であり、こうした記憶装置１２は、それを介してアクセスが管理される適切なハードウェアドライバ（図示せず）を有する場合がある。
【００３０】
記憶装置１２に加えて、コンピューティング装置１０は、記憶装置１２からのデータを操作に先立って転送することができるローカルＲＡＭ１８を有する場合があることに留意されたい。すなわちコンピューティング装置１０は、少なくとも一部のインスタンスでは記憶装置１２に格納されたデータに対して直接操作を加えることはないと思われるが、代わりにこうしたデータを記憶装置１２からローカルＲＡＭ１８へとコピーし、ローカルＲＡＭ１８内でデータに対して操作を加え、その後必要であれば、こうした操作が加えられたデータを記憶装置１２へと再度コピーする。このようにする理由は数多くあって多様であるが、通常、速度およびアクセスの高速化に関連することを理解されたい。いずれにしてもこうしたローカルＲＡＭ１８は、本発明の趣旨および範囲を逸脱することのない任意の種類の適切なＲＡＭとすることができる。
【００３１】
記憶装置１２上のアプリケーション１４は、本発明の趣旨および範囲を逸脱することのない任意のアプリケーションとすることが可能であり、ローカルＲＡＭ１８またはその他の場所でインスタンス化することができる。コンピューティング装置１０がたとえばオーディオプレーヤ用などの特定タスク向け装置である場合、アプリケーション１４も同様に特定タスク向けであると思われるが、少なくとも一部のインスタンスでは、他のアプリケーション１４も存在可能であることを理解されよう。
【００３２】
ファイルシステム１６は、実際には一種のアプリケーション１４であるが、コンピューティング装置１０にとって特に重要であることを理解されよう。記憶装置１２上のファイルシステム１６も同様に本発明の趣旨および範囲を逸脱することのない任意のファイルシステムとすることが可能であり、ローカルＲＡＭ１８またはその他の場所でインスタンス化することができる。ファイルシステム１６は、必ずしも特定タスク向けである必要はないが、代わりにコンピューティング装置１０の特定タスク向けでない動作要件に合わせてさらに調整することができる。したがってこうしたファイルシステム１６は、コンピューティング装置１０の起動時およびその上にアプリケーション１４をロードする間に、コンピューティング装置１０を動作させるために使用され、記憶装置１２、ローカルＲＡＭ１８、およびその他の場所にあるデータにアクセスするためにも使用される。
【００３３】
（記憶装置１２上でのアプリケーション１４／ファイルシステム１６の更新）
上記で述べたように、比較的小規模な記憶装置１２上のアプリケーション１４またはファイルシステム１６の更新は、記憶装置１２が有する使用可能な空きスペースがそれほど多くない場合は特に複雑である可能性がある。たとえば、こうした記憶装置１２上に空きスペースがないことで、最初に古いデータを削除しなければデータの更新を書き込むことができない場合、更新時の障害がアプリケーション１４またはファイルシステム１６を首尾一貫しない状態および恐らく機能しない状態にする場合がある。同様に、こうした記憶装置１２上に空きスペースがないことから、「デルタ」データを使用して個々のファイルを修正することで更新を適用させる必要がある場合、更新時の障害がアプリケーション１４またはファイルシステム１６を首尾一貫しない状態および恐らく機能しない状態にする場合もある。ここでも、アプリケーション１４の場合、可能であればアプリケーションが再ロードされるまでこうした障害が苛立ちの原因となる場合があるが、ファイルシステム１６の場合、ファイルシステム１６が機能しなければコンピューティング装置１０は動作不能となるため、こうした障害は致命的となる可能性がある。
【００３４】
したがって本発明の一実施形態では、コンピューティング装置１０上でのアプリケーション１４またはファイルシステム１６（以下、「アプリケーション１４」とする）の更新は、２段階の手順として実行され、第１のステップでは更新がシミュレートされ、第１のステップのシミュレートされた更新が成功したとみなされる場合にのみ、第２のステップで更新が実際に実行される。具体的に言えば第１のステップでは、シミュレートされた更新が、更新に関するデータを実際に記憶装置１２にコミットすることを除くすべての必要な処置を実行し、第２のステップでは、実際の更新が同じ必要な処置を実行し、更新に関するデータも実際に記憶装置１２にコミットする。
【００３５】
本発明を実施するためには、通常、コンピューティング装置１０のファイルシステム１６が記憶装置１２上に格納されたデータに関するメタデータ２０を維持することを理解されたい。こうしたデータは、通常、記憶装置１２上にファイルとして格納され、メタデータ２０は、名前、サイズ、様々なタイムスタンプ、記憶装置１２上のファイルあるいは記憶装置１２上でファイルを構成する部分の物理および／または仮想位置、ならびにファイルに関する様々な属性等を含む各ファイルについてのデータを含むことができることを理解されよう。加えて、記憶装置１２が複数部分のデータに編成されていると想定すると、こうしたメタデータ２０は、記憶装置１２に関してデータの受け入れに使用可能なこうした部分の「空き」リスト、またはその等価物を含むことができる。
【００３６】
次に、コンピューティング装置１０の記憶装置１２のファイル内にあるデータを修正するためには、修正されたファイルに関するメタデータおよび恐らくは空きリストも修正する必要があるであろうことを理解されたい。また通常、ファイルシステム１６はその動作時にメタデータ２０またはその一部あるいはその等価物をローカルＲＡＭ１８にコピーし、その結果、ローカルＲＡＭ１８上のメタデータ２０のコピーがファイルシステム１６の動作中に必要に応じて修正され、ローカルＲＡＭ１８上のメタデータ２０の修正済みコピーが必要に応じて記憶装置１２に記憶される。
【００３７】
通常、ファイルシステム１６による記憶装置１２上のファイルへの修正は、新規ファイルの追加、既存ファイルの削除、および既存ファイルの修正を含むことができる。簡単に言えば、新規ファイルの追加は、メタデータ２０内の空きリストを利用してファイル用のスペースを見つけること、メタデータ２０内のファイルに適したデータを作成すること、記憶装置１２上の見つけたスペースに新規ファイルに関するデータを追加すること、および見つけたスペースの使用を反映するようにメタデータ内の空きリストを更新することによって達成される。同様に、既存ファイルの削除は、メタデータ２０内のファイルに関するデータを適宜除去すること、および現在の空きスペースを反映するようにメタデータ内の空きリストを更新することによって達成される。既存ファイルの修正は、データがファイルに追加され、もしくはファイルから削除される、またはその両方であるか否かに応じて、ファイルの追加または削除と類似した方法で達成される。いずれにしても、ファイルへの何らかの修正の結果として、ファイルに関連付けられたメタデータ２０への、またさらに記憶装置１２それ自体に関するメタデータ２０への、対応する修正が生じることを理解されよう。
【００３８】
前述の内容を念頭に置くと、本発明の一実施形態では、コンピューティング装置１０はシミュレーションモードおよび正規モードで動作可能であり、更新がシミュレートされる前述の第１のステップでは、コンピューティング装置１０はシミュレーションモードで動作する。同様に、第１のステップでシミュレートされた更新が成功したとみなされる場合に限り、更新が実際に実行される前述の第２のステップおよびその他の大部分の時間の間、コンピューティング装置１０は正規モードで動作する。アプリケーション１４に対する更新は、通常、インストーラによって実行され、コンピューティング装置１０は、その動作時に、こうしたインストーラによってシミュレーションモード内およびシミュレーションモード外に置くことができる。
【００３９】
主として、コンピューティング装置１０が正規モードからシミュレーションモードに置かれる場合、ローカルＲＡＭ１８に記述されたメタデータ２０のコピーは、後で検索するために記憶装置１２、ローカルＲＡＭ１８、キャッシュ、またはその他の場所のいずれかに保存される。その後、コンピューティング装置１０の動作時には、実際に記憶装置１２へデータがコミットされることはない。その後のある時点で、コンピューティング装置１０がシミュレーションモードから正規モードに戻される場合、メタデータ２０の保存されたコピーが検索され、記憶装置１２上のデータはシミュレーションモード中に変更されないため、記憶装置１２の実際の状態を反映するようにローカルＲＡＭ１８に復元される。その後、コンピューティング装置１０の動作時に、データが再度実際に記憶装置１２にコミットされる。したがって、コンピューティング装置１０をシミュレーションモードに置くことは、記憶装置１２上に格納されたいずれのデータをも永続的に変更しない。したがってこうしたデータへの「変更」は、あったとしてもそれほど多くのリスクなしにシミュレートすることができる。
【００４０】
ここで理解されるように、コンピューティング装置１０上でのアプリケーション１４の更新中にシミュレーションモードを使用することによって、こうした更新は第１にこうしたコンピューティング装置１０の記憶装置１２上のファイルを修正しないような非破壊的な方法で実行することができる。したがってこうしたシミュレーションモードは、修正を記憶装置１２にコミットすることなく、一連の修正が成功するかまたは失敗するかを予め判別することができる。シミュレーションモードでは、記憶装置１２に対するすべての修正が、実際にはローカルＲＡＭ１８内で維持されるメタデータ２０に対してのみ実行される。ファイルのコンテンツが割り振りおよび割り振り解除されると、ローカルＲＡＭ１８上のメタデータ２０の空きリストにある空きスペースが追跡されるが、ファイルデータは実際には記憶装置１２にコミットされない。たとえば、空きスペースが使い尽くされるか、またはファイル操作時にファイルシステム１６がエラーに遭遇すると、戻り値を介して呼び出し側エンティティに通知される。重要なことに、障害が発生した場合、コンピューティング装置１０が正規モードに戻されたときに、実際には更新の実行が許可されることはない。したがって障害が発生しない場合、コンピューティング装置１０が正規モードに戻されたときに、同じ一連の修正を再度実行することによって、実際に更新の実行が許可される。
【００４１】
ここで理解されるように、本発明では、コンピューティング装置１０がシミュレーションモードに置かれている間に第１のステップで実行されたコードは、記憶装置１２へデータを書き込むためのすべての書き込み操作がシミュレーションモードでは使用不可になることを除き、コンピューティング装置１０が正規モードに戻されている間に第２のステップで実行されたコードと同一である。したがって、シミュレーションモードにおける第１のステップですべての修正が成功した場合、同じ修正シーケンスは、正規モードにおける第２のステップも成功することになると想定することができる。同様に、シミュレーションモードおける第１のステップでいずれかの修正が失敗した場合、同じ修正は正規モードにおける第２のステップでも失敗することになると想定することが可能であるため、こうした第２のステップは実際には実行されない。
【００４２】
次に図３を見ると、コンピューティング装置１０の記憶装置１２上でアプリケーション１４をインストールまたは更新するインストーラ等は、以下の方法で実行する。予めインストーラは、コンピューティング装置１０をシミュレーションモードにすることによって、第１のステップを実行する（ステップ３０１）。こうしたステップは、通常、コンピューティング装置１０、具体的にはプロセッサまたはそのコントローラに対してコマンドを発行することによって実行可能であり、もちろんこれは、こうしたコンピューティング装置１０が実際にこうしたコマンドの受け入れおよび理解が可能であり、実際に前述のようにシミュレーションモードに入ることが可能であると想定している。
【００４３】
いずれにせよ、また上記でも述べたように、シミュレーションモードに入ると、コンピューティング装置１０は前述のように後で検索するためにメタデータ２０のコピーをローカルＲＡＭ１８に保存し、その後、こうしたコンピューティング装置１０のファイルシステム１６はファイル操作中に実際にデータを記憶装置１２にコミットしないように設定されるが、そうでない場合は、通常はこうしたファイル操作での責務であるすべての他の処置を実行するように設定される。
【００４４】
その後、インストーラによって禁止された各ファイル操作について、もちろん実際に記憶装置１２にデータをコミットすることを除き、ファイルシステム１６は実際にこうしたファイル操作を実行する（ステップ３０３）。通常こうしたファイル操作はそれぞれ成功または失敗を示す戻り値を備えた呼び出しとして発行されるという理解の下で、インストーラはファイル操作に関連付けられた戻り値を受け取り、その値から操作が成功したか否かを判別する（ステップ３０５）。こうしたインストーラは、たとえばこうしたインストーラに含まれるコードに基づき、または特定のシステム値の判別に基づく等の、こうした戻り値とは無関係な基準に基づき操作が成功したか否かを判別できることにも留意されたい。
【００４５】
操作が実際に成功した場合、インストーラは次のファイル操作をステップ３０３として実行する。しかしながら、何らかの理由で操作が失敗した場合、代わりにインストーラは、通常はコンピューティング装置１０および具体的にはそのプロセッサまたはコントローラにコマンドを発行することによって、コンピューティング装置１０を正規モードに戻すが（ステップ３０７）、ここでもこうしたコンピューティング装置１０は、実際にこうしたコマンドの受け入れおよび理解が可能であること、および実際に前述のような正規モードに戻ることが可能であることを想定している。
【００４６】
批判的に言えば、ステップ３０５での操作が成功しなかったとの判別を利用してステップ３０７で正規モードに戻ると、インストーラは実際に更新を実行せず、その代わりにコンピューティング装置１０が更新を受信できないとの想定に基づいて手順を終了する（ステップ３０９）。前述のように、ステップ３０７でコンピューティング装置１０がシミュレーションモードから正規モードに戻ると、保存されたメタデータ２０のコピーが検索され、記憶装置１２上のデータはシミュレーションモード中に変更されていないため、記憶装置１２の実際の状態を反映するようにローカルＲＡＭ１８に復元される。その後コンピューティング装置１０の操作中に、データは再度実際に記憶装置１２にコミットされる。
【００４７】
更新がステップ３０９で終了した場合、更新は実際には適用されず、更新されたはずのアプリケーション１４が未更新の状態で記憶装置１２上に残ることになる。重要なことに、こうしたアプリケーション１４は更新されていないが、アプリケーション１４を障害状態で機能させるか、さらに悪いことにはアプリケーション１４をまったく機能させないことになるような、少なくとも何らかの更新未完成の状態のままでは残されない。
【００４８】
次に、ステップ３０３で実行された各操作に戻り、ステップ３０５では失敗した操作が見つからなかったと想定すると、インストーラはある時点ですべての操作が実行されたものと決定することになる（ステップ３１１）。したがってステップ１は更新が首尾よくシミュレートされているという結論に達する。したがって、こうした更新は次にステップ２として実行することができる。
【００４９】
具体的に言えば、シミュレーションが成功すると、ここでも通常はコンピューティング装置１０および具体的にはそのプロセッサまたはコントローラにコマンドを発行することによって、インストーラはコンピューティング装置１０を正規モードに戻す（ステップ３１３）。批判的に言えば、ステップ３１３ですべての操作が成功したとの判別を利用して正規モードに戻ると、インストーラは実際に更新を実行する。前述のように、ステップ３１３でコンピューティング装置１０がシミュレーションモードから正規モードに戻されると、メタデータ２０の保存されたコピーが検索され、記憶装置１２上のデータはシミュレーションモード中に変更されていないため、記憶装置１２の実際の状態を反映するようにローカルＲＡＭ１８に復元される。その後、コンピューティング装置１０の操作中に、データは再度実際に記憶装置１２にコミットされる。
【００５０】
更新を実際に実行するため、およびインストーラによって禁止された各ファイル操作について、ファイルシステム１６は実際にこうしたファイル操作を実行する（ステップ３１５）。重要なことに、コンピューティング装置１０はここでは正規モードであるため、ファイルシステム１６はこうした各操作に関連して実際に記憶装置１２にデータをコミットする。ここでも、インストーラはある時点ですべての操作が実際に実行されたものと決定し、したがってアプリケーション１４の更新は首尾よくインストールされたとの結論に達し、終了することになる（ステップ３１７）。
【００５１】
ステップ３１５で各ファイル操作を実行中のインストーラは、操作がステップ３０５と類似した方法で成功したか否かを判別することができる（図示せず）。しかしながらこうしたステップは、各操作が以前にステップ３０３で首尾よくシミュレートされているため、本発明にとって絶対に不可欠であるとは考えられない。にもかかわらず、操作がシミュレーションモードでは成功したが、正規モードでは失敗したというインスタンスが発生する可能性がある。とは言うものの、こうしたインスタンスは稀であり、本発明の範囲を超えるものと考えられる。
【００５２】
本発明は更新をシミュレートすることによって動作するものであり、こうしたシミュレートされた更新においては、いかなるデータも記憶装置１２にコミットすることがない。シミュレーションモードで実行される操作は、正規モードで実行される操作と同一であるが、シミュレーションモード時には使用不可である記憶装置１２にデータをコミットすることは例外である。したがって、シミュレーションモードですべての更新操作が成功した場合、インストーラはたとえば記憶装置１２の致命的障害などの特定のケースを除き、同じ操作のシーケンスが正規操作でも成功するであろうと想定することができる。
【００５３】
更新が、記憶装置１２にコミットされたものと予測されるが実際にはされていないデータに対する操作を含む場合、ある種のわずかな修正が必要となる可能性があることを理解されたい。一般に、こうしたわずかな修正には、こうしたデータをキャッシュに入れることおよびこうした操作の実行をこうしたキャッシュ済みデータに転送することが必要であることも理解されたい。
【００５４】
（記憶装置１２の容量の効率的な使用）
通常、記憶装置１２などの記憶装置は、その上に格納された情報の個々のバイトそれぞれにアドレス指定することはできない。そのようにすることは通常は不要であり、より重要なことには、そのようにするためには持て余すことになるほど非常に大規模なアドレス情報を必要とし、記憶装置に関する情報の追跡をより複雑にする。こうした情報の追跡には、たとえば空きスペースおよび／または未使用スペースのリスト、不良スペースのリストなどが含まれる。代わって、次に図４を参照すると、記憶装置は通常、情報のアドレス指定可能セクタ２２に従ってそのスペースを細分化し、各セクタ２２はおよそ５１２または１０２４バイトを有するように定義可能であり、その後こうした記憶装置は、たとえセクタ２２内のほんの数バイトしか扱わない場合であっても、そのアドレスに従ってセクタごとにデータの読み取りおよび書き込みを行うことになる。
【００５５】
典型的なファイルシステムは、より大きなファイル２８が格納されている比較的大規模な記憶装置に関して、クラスタ２４をいくつかのセクタ２２として定義し、こうした記憶装置をクラスタごとにアドレス指定し、各ファイル２８が少なくとも１つのクラスタを使用するように要求する（図４ではそのように図示せず）方がより便利であるが、こうした記憶装置をセクタごとにアドレス指定することが可能である。前述のように、ファイルシステムがこのように実行することによって、前述のメタデータ２０内の空きリストなどの記憶装置に関する情報の追跡が手に余りかつ複雑になるほどにアドレス情報が極度に大規模になるのを防止することができる。典型的にはクラスタ２４は、たとえば１、２、４、８、１６キロバイトまたはそれ以上などの、セクタ２２の基数２の倍数（ｂａｓｅ−２  ｍｕｌｔｉｐｌｅ）であり、ファイルシステムはたとえクラスタ２４内のほんの数セクタ２２しか扱わない場合であっても、クラスタごとにデータの記憶装置からの読み取りおよび記憶装置への書き込みを行うことになる。
【００５６】
しかしながら、また上記で指摘したように、少量のデータ（たとえば数バイトから数百バイト）しかないファイル２８が特定のクラスタ２４に割り当てられた場合、こうしたクラスタ２４内の残りのすべてのスペースが無駄であり、比較的小規模な記憶装置では、こうした無駄なスペースがすぐに重大な問題となる可能性がある。したがって本発明の一実施形態では、第１の処置として、図２の記憶装置１２用のファイルシステム１６は、こうした記憶装置１２をクラスタごとにアドレス指定せず、代わりにセクタごとに同様にアドレス指定するため、各ファイル２８が記憶装置１２の少なくとも１つのセクタ２２を使用する（図４ではそのように図示せず）必要がある。その結果、たとえば５１２バイトのセクタ２２上におよそ数バイトから数十バイトの比較的小さなファイル２８を格納すると数百バイトしか無駄にせず、たとえば８キロバイトのクラスタ２４の場合のように何千バイトも無駄にすることがない。
【００５７】
ファイルシステム１６が記憶装置１２をセクタごとにアドレス指定する必要があることにより、結果として、クラスタごとに比べてより長くより複雑なアドレス指定が生じる一方で、比較的小規模な記憶装置１２の場合アドレス指定されることになる容量は比較的少なく、したがってアドレスも比較的少ない。たとえば、８キロバイトのクラスタおよび１キロバイトのセクタを備えた１６メガバイトの記憶装置１２の場合、セクタごとのアドレス指定には３つの追加ビットを備えたアドレスが必要であるが、こうしたアドレスでも依然として１４ビット長であり、適度であるとみなすべきである。
【００５８】
理解できるように、たとえファイルシステム１６が記憶装置１２をセクタごとにアドレス指定する場合であっても、何百またはたとえ何十バイトであっても無駄にすることは、数バイトから数十バイトの比較的小さなファイル２８がたとえば５１２バイトのセクタ２２上に格納されている場合、依然として許容できない不効率さであるとみなされる可能性がある。したがって本発明の一実施形態では、第２の処置として、ファイルシステム１６は依然として記憶装置１２をセクタごとにアドレス指定する一方で、内部的には各セクタ内のデータをチャンクごとに管理し、各チャンク２６（図４）はたとえばセクタ２２の基数２の分割として定義される。
【００５９】
ファイル２８を（図４に示されるように）チャンクごとに格納する場合、および理解されるように、ファイルシステム１６は、内部的には各ファイル２８が記憶装置１２の少なくとも１つのチャンク２６を使用することを必要とするが、外部的には依然としてセクタごとに記憶装置１２をアドレス指定することになる。したがって、特定のチャンク２６を記憶装置１２から読み取るかまたはこれへ書き込む場合、ファイルシステム１６はチャンク２６を有するセクタ２２を読み取るかまたは書き込まなければならなくなる。その結果、ファイルシステム１６はファイル２８が使用する各セクタ２２だけでなく、ファイル２８が使用する各セクタ２２内の各チャンク２６の追跡も続けなければならない。これを実行することは、より細密ではあるが極端に負担になるとは考えられず、本発明の趣旨および範囲を逸脱することのない任意の適切な様式で実行することができる。いずれにしても、また理解されるように、たとえば６４バイトのチャンク２６上に格納されたおよそ数バイトから数十バイトの比較的小さなファイル２８は数バイトから数十バイトしか無駄にせず、たとえば５１２バイトのセクタ２２の場合のように、何百バイトも無駄にすることはない。
【００６０】
上記と同様、ファイルシステム１６が内部的にファイル２８をチャンクごとにアドレス指定する必要があることにより、結果として、セクタごとに比べてより長くより複雑なアドレス指定が生じる一方で、比較的小規模な記憶装置１２の場合アドレス指定されることになる容量は比較的少なく、したがってアドレスも比較的少ない。以前の例を続けると、１キロバイトのセクタ２２および２５６バイトのチャンク２６を備えた１６メガバイトの記憶装置１２の場合、チャンクごとにアドレス指定するには２つの追加ビットを備えたアドレスが必要であるが、こうしたアドレスでも依然として１６ビット長さであり、適度であるとみなすべきである。
【００６１】
各クラスタ２４のサイズおよび各セクタ２２のサイズと同様に、記憶装置１２が初期にフォーマット化および／または区画化されるときに、ファイルシステム１６に関する各チャンク２６のサイズも定義するべきであることに留意されたい。しかしながら、記憶装置１２はファイルシステム１６によってチャンクごとにアドレス指定されないため、各チャンク２６のサイズを知っている必要はない。代わりに、および再度、ファイルシステム１６は内部的には記憶装置１２上のファイル２８をチャンクごとに編成するが、外部的には記憶装置１２をセクタごとにアドレス指定する。
【００６２】
上記で言及したように、ファイルシステム１６は記憶装置１２上の各ファイル２８について、ファイル２８によって使用される各セクタ２２およびファイル２８によって使用される各セクタ２２内の各チャンク２６の位置を特定するための情報の位置特定を維持しなければならない。理解されるように、このように実行することは、ファイル２８が単一のセクタ２２上で連続しているインスタンスでは比較的簡単であり、この場合、ファイルシステム１６は、関係する部分のセクタ２２のアドレス、セクタ２２内の開始チャンク２６のアドレス、およびチャンク２６内のファイルの長さのみに留意するだけでよい。しかしながら、ファイル２８が単一のセクタ２２上で２つの連続するフラグメント内にある場合、ファイルシステム１６はセクタ２２のアドレス、セクタ２２内の第１のフラグメントの開始チャンク２６のアドレス、チャンク２６内の第１のフラグメントの長さ、セクタ２２内の第２のフラグメントの開始チャンク２６のアドレス、およびチャンク２６内の第２のフラグメントの長さに留意しなければならない。理解されるように、ファイル２８をより多くのフラグメントに分けるに従い、こうしたファイル２８は、複数のセクタ２２上および各セクタ上の複数のチャンク２６内に常駐することになり、これに対応してファイル２８のすべてのフラグメントの位置を特定するための位置特定情報も同様により長くなる。
【００６３】
理解すべきであるように、こうした位置特定情報は、ファイルシステム１６によって維持されるリストに格納することができる。別の方法として、こうした位置特定情報の大部分をファイル２８それ自体と共にヘッダまたはその他として格納することも可能であり、この場合ファイルシステム１６は、こうしたヘッダを見つけるために必要な情報だけを維持すればよい。後者の場合では、理解すべきであるように、こうした位置特定情報が比較的大規模である場合、こうした情報をヘッダと分離し、こうしたヘッダが必要に応じてそれへの参照を含むようにすることができる。
【００６４】
いずれにしても、ある時点でファイル２８がより大きくなり、特にファイル２８がより多くのフラグメントに分けられるに従って、特に記憶装置１２が比較的小規模であり、そのスペースの使用が比較的効率よく実行されることになる場合、そのための位置特定情報は許容できないほど大規模になる。こうした問題は、各チャンク２６の定義済みサイズがより小さくなるほど、したがってファイル２８がより多くのフラグメントにまたがって広がることになるほど、特に深刻になる。またある時点でファイル２８がより大きくなり、より多くのフラグメントに分けられるに従って、特に、ファイル２８のフラグメントの数に相応して許容できないほど多数の読み取りまたは書き込み操作を実行しなければならない場合に、記憶装置１２からのファイルの位置特定および読み取りまたはこれへのファイル２８の書き込みが許容できないほど煩雑になる。前述のように、こうした問題は、各チャンク２６の定義済みサイズがより小さくなるほど、したがってファイル２８がより多くのフラグメントにまたがって広がることになるほど、特に深刻になる。
【００６５】
したがって要約すると、ファイルシステム１６は、各チャンク２６がセクタ２２よりも小さい場合、記憶装置１２上での各ファイル２８の格納をチャンクごとに実行することによって、スペースに関してより効率的に格納するが、このように実行する場合、フラグメント化されたファイル２８に関する位置特定情報が許容できないほどに大きくなり、フラグメント化されたファイル２８の格納および検索が極度に煩雑になるまで、ファイルが大きくなるに従って、ファイル２８はより多くのフラグメントに分けられる可能性がある。したがって本発明の一実施形態では、第３の処置として、ファイルシステム１６は依然として内部的には各ファイル２８をチャンクごとに管理しているにもかかわらず、ファイル２８が最低サイズよりも小さい部分にフラグメント化できないように各ファイル２８に対して最低サイズ要件を課している。たとえば、４キロバイトのセクタ２２および２５６バイトのチャンク２６（すなわちセクタ２２ごとに１６のチャンク２６）を備えた記憶装置１２の場合、最低サイズブロック３０（図４Ａ）は１、２、４、または８キロバイトまたはそれ以上として定義される可能性がある。少なくとも一部のインスタンスでは、こうした最低サイズブロック３０（図４Ａ）は、複数のセクタ２２にまたがって実行される可能性があるが、こうしたインスタンスは問題であるとは考えられないことに留意されたい。
【００６６】
最低サイズブロックごとにファイル２８を格納する場合において（図４Ａに示されるように）、理解すべきであるように、ファイル２８がフラグメント化された形式で記憶装置１２上に格納される場合、ファイルシステム１６は、内部的には各フラグメント３２が少なくとも定義された最低サイズブロック３０の大きさであることを要求するが、もちろんこうした最低サイズブロック３０を満たさないファイル２８の残りのフラグメント３２があれば除外する。このように実行する場合、ファイルシステム１６はデータを受け入れる際に使用可能なチャンク２６の「空き」リスト３４またはその等価物を維持し、これを考慮しなければならない。このような実行は当業者では知られているかまたは明らかなはずであるため、本明細書ではこれ以上詳細に説明する必要はない。したがってファイルシステム１６は、本発明の趣旨および範囲を逸脱することなしに、こうした空きリスト３４を使用し、こうした空きリスト３４および最低サイズブロック３０に基づいてファイル２８をフラグメント３２に分割する、任意の方法を使用することができる。
【００６７】
各チャンク２６のサイズと同様に、記憶装置１２が初期にフォーマット化および／または区画化されるときに、ファイルシステム１６に関して最低サイズブロック３０を定義しなければならないことに留意されたい。しかしながら、ファイルシステム１６は最低サイズブロック３０を直接参照して記憶装置１２をアドレス指定するのではないため、同様にこれを知っている必要がないことを理解されよう。
【００６８】
また、最低サイズブロック３０の要件を課すことによって、ファイルシステム１６は、記憶装置１２上にデータを格納する際にチャンク２６を使用することによって得られる効率性の一部を失う可能性があることにも留意されたい。にもかかわらず、こうした効率性の損失は、ファイルのフラグメント化が削減されることによって得られる効率性の向上によって相殺され、またはかえって効率がよくなる場合さえある。さらに、最低サイズブロック３０の要件に基づいて特定のファイル２８が使用できない記憶装置１２上のスペースのチャンク２６も、依然として他のファイル２８は使用できる。
【００６９】
少なくとも一部のインスタンスでは、ファイルシステム１６は、格納する前に各ファイル２８を圧縮することによって、記憶装置１２上で使用されるスペースの効率を上げることができる。その場合、本発明の一実施形態では、ファイル２８は最低サイズブロック３０のサイズを有するフラグメント３２に分割され、各フラグメント３２が圧縮される。こうして圧縮された各フラグメント３２は、最低サイズブロック３０よりも小さいサイズであるにもかかわらず、こうした配置構成は全体として有効に働くことが分かっている。
【００７０】
（ｎｕｌｌデータを備えたファイル用のファイル構造）
前述のように、あるインスタンスでは、記憶装置１２などの記憶装置上のファイル２８は、ファイル２８内にスペースは存在するが実質的なデータで満たされていないような、未割り振りデータまたはｎｕｌｌデータの一部を含むことができる。こうしたｎｕｌｌデータは、すべてゼロまたは何らかの他のプレースホルダ値などのように単純に表すことが可能であり、ある後の時点でこうした実質的データによって満たされるためにのみ存在する。別の方法として、どのような理由であっても、実質的なデータがファイル２８から除去されるときにこうしたｎｕｌｌデータを作成することができる。
【００７１】
したがって、比較的大規模なファイル２８は記憶装置１２上に存在することができるが、実際にはこうしたファイル２８のほとんどの部分が、単一の連続する部分において、または複数の連続するまたは不連続な部分としてのいずれかで、ｎｕｌｌデータである。こうしたインスタンスでは、特に記憶装置１２が比較的小規模である場合、ファイル２８のｎｕｌｌデータによって占有されたスペースを実際に解放することが非常に有用となろう。したがって、普通であれば占有されたこうしたスペースを他のファイル２８が利用するように使用可能にすることができる。
【００７２】
本発明の一実施形態では、次に図５を見ると、ファイル２８内のｎｕｌｌデータによって占有されたスペースを実際に解放するために、こうしたファイル２８は図示された構造に従ってファイルシステム１６によって記憶装置１２上に格納される。具体的に言えば、図に示されるように、こうしたファイル２８は、ファイルヘッダ３６、セグメント割り振りテーブル３８、およびｎｕｌｌデータを除く実際のファイルデータ４０を含む。
【００７３】
理解されるように、ファイルヘッダ３６は、ファイル属性、ファイルサイズ、タイムスタンプ、ファイル名、およびその他を含む、ファイル２８に関する情報を含む。加えて本発明では、ファイルヘッダ３６は、記憶装置１２上のセグメント割り振りテーブル３８の場所への参照を含む。こうした参照は、単一の連続するセグメント割り振りテーブル３８への参照、または単一の連続するテーブル３８を形成するために組み合わせられることになるこうしたセグメント割り振りテーブル３８の複数の連続しない部分への参照とすることができることに留意されたい。セグメント割り振りテーブル３８が高度にフラグメント化されている場合、ファイルヘッダ３６は、セグメント割り振りテーブル３８の一部の追加場所への参照を含む２次データヘッダ４２のリストを参照することさえ可能である。
【００７４】
いずれにしても、セグメント割り振りテーブル３８は、当業者では明らかなはずであるため本明細書ではこれ以上詳細に説明する必要のない方法で、こうした参照に基づいてこうした部分から構築することができる。実際にセグメント割り振りテーブル３８を構築する場合、図５に示されるように、こうしたテーブル３８は、ファイル２８を構成する実際のファイルデータ４０の場所への順序付けされた参照を含むことが分かる。理解されるように、こうした参照は、実際のファイルデータ４０の固定長または可変長のセグメントとすることができる。前者の場合、固定長は、たとえば前述の最低サイズブロック３０とすることが可能であり、後者の場合、各参照は、長さ属性を含むはずである。もちろん、固定長セグメントを使用する場合、こうした長さ属性は不要である。
【００７５】
したがって、アプリケーションが読み取りまたは書き込みのためにファイル２８を開く場合は必ず、セグメント割り振りテーブル３８のすべての部片位置を特定するためにファイルヘッダ３６が調べられ、こうした部片は記憶装置１２からローカルＲＡＭ１８の連続するセクション等へとコピーされる。その後、ファイル２８に関するデータ４０は、記憶装置１２上のこうしたデータ４０の位置を見つけるために連続するセグメント割り振りテーブル３８に索引付けすることによって位置を特定することができる。理解されるように、新しいデータがファイル２８に書き込まれる場合、最も遠いオフセットにある（ａｔ  ｔｈｅ  ｆｕｒｔｈｅｓｔ  ｏｆｆｓｅｔ）セグメントをファイル２８に包含するために必要に応じてテーブル３８が拡張される。テーブル３８のフラグメント化を制限するために、特にファイル２８の最終サイズがすでに分かっており、データ４０のセグメント長が固定されている場合、こうしたテーブル３８は、意図されたファイルサイズに予め割り振り可能であることに留意されたい。
【００７６】
重要なことに本発明では、ファイル２８用のデータ４０は「疎（ｓｐａｒｓｅ）」な方式で記憶装置１２上に格納され、これによってデータ４０の実質的なセグメントはセグメント割り振りテーブル３８によって参照され、実際に格納される一方で、データ４０のｎｕｌｌセグメントはセグメント割り振りテーブル３８によって注記付けされるが、実際には格納または参照されない。具体的に言えば、実質的なデータ４０を備えた各セグメントの場合、セグメント割り振りテーブル３８内の対応するエントリは参照を含み、ｎｕｌｌデータ４０のみを備えた各セグメントの場合、セグメント割り振りテーブル３８内の対応するエントリは参照を含まないか、もしくはｎｕｌｌ参照を含む。したがって、図５に示されたファイル２８は１５のセグメントを有するが、セグメント３、７、および１０〜１４はｎｕｌｌデータ４０を有するため、セグメント割り振りテーブル３８のいずれのエントリによっても実際には参照されない。
【００７７】
図５に示すように、ファイル２８を書き込む場合、コンピューティング装置１０のファイルシステム１６は、実際はデータ４０のｎｕｌｌセグメントを書き込まず、代わりに単にこうしたファイル２８用のセグメント割り振りテーブル３８内にそのための適切なエントリを作成する。次に本発明では、ファイルシステム１６は、ファイル２８に関するセグメント割り振りテーブル３８に基づいて、記憶装置１２への適切な呼び出しを使用してファイル２８の任意のオフセットからデータ４０を読み取り、同様に、ファイルシステム１６は、ファイル２８に関するセグメント割り振りテーブル３８に基づいて、記憶装置１２への適切な呼び出しを使用してファイル２８の任意のオフセットにデータ４０を書き込む。重要なことに、ファイル２８に割り振られた記憶装置１２の任意の物理部分は、もはや必要でなくなった場合に後で割り振りを解除し、こうした記憶装置１２上のスペースを解放することができる。
【００７８】
したがってファイルシステム１６は、データの実質的なセグメントを記憶装置１２に書き込み、それらに関するセグメント割り振りテーブル３８内のエントリを適切な参照で更新することによって、ファイル２８内のｎｕｌｌセグメントをデータ４０の実質的なセグメントに置き変えることができる。同様に、ファイルシステム１６は、セグメント割り振りテーブル３８内のそれらに関するエントリをｎｕｌｌ参照で更新するか、または既存の参照を除去することによって、その後のある時点でデータ４０の実質的なセグメントをｎｕｌｌデータに置き換えることができる。置き換えられた実質的なデータ４０は、たとえば物理的に削除するか、他の場所に移動するか、または他のデータ４０によって上書きするように残しておくことができる。特に本発明では、実質的なデータ４０をｎｕｌｌデータ４０に置き換える場合、こうした置き換えられた実質的なデータ４０によって占有されていた記憶装置１２上のスペースが実際に解放され、他のデータ４０を受け入れるために使用することが可能であるため、ファイルシステム１６はこれを反映させるために空きリスト３４を更新しなければならない。
【００７９】
本発明では、理解すべきであるように、ファイル２８は必ずしも最初から最後まで直線的な様式で構築する必要はない。その代わりに、ファイルのサイズに関する知識を備えたファイルシステム１６は、それらに関するセグメント割り振りテーブル３８を確立し、その後ファイル２８に関するデータ４０のセグメントをいずれかの順序で記憶装置１２上に読み込むことが可能である。重要なことに、こうしたデータ４０の各セグメントを記憶装置１２上に読み込む間、ファイルシステムは、テーブル３８内の対応するエントリにある同様のものを適切に参照する。
【００８０】
特に図５に示された本発明のファイル構造では、ファイルシステム１６はたとえばファイル２８を更新する際などに、古いファイル２８の一部を削除して新しいファイル２８を構築することが可能であり、このように実行する場合、ファイル２８の新しいバージョンを構築する一方で、ファイル２８の古いバージョンを解体して記憶装置１２上のスペースを解放することができる。実際には、ファイル２８の古いバージョンから解放されたスペースを使用して、ファイル２８の新しいバージョンの少なくとも一部を格納することができる。したがって、特にスペースがほとんど残されていない記憶装置１２において、ファイル２８を更新するために、こうしたファイル２８の古いバージョンを削除せずにファイル２８の新しいバージョンを構築するだけの十分な空きスペースを必ずしも必要とするわけではない。
【００８１】
代わりに、図６に示されるように、ファイル２８の新しいバージョンがファイル２８の古いバージョンからのセグメントを含めるためのものである場合、こうしたセグメントはファイル２８の古いバージョンからコピーし（ステップ６０１）、ファイル２８の新しいバージョンのセグメント割り振りテーブル３８を適切に修正することと共に、ファイル２８の新しいバージョンに保存する（ステップ６０３）ことができる。その後、こうしたファイル２８のセグメント割り振りテーブル３８を適切に修正すると共に、こうしたセグメントをファイル２８の古いバージョンから削除する（ステップ６０５）ことが可能であり、その後、こうしたファイル２８のセグメント割り振りテーブル３８を適切に修正すると共に、こうした処置に基づいて記憶装置１２から解放されたスペースを使用して、ファイル２８の新しいバージョンの他のセグメントを格納する（ステップ６０７）ことができる。
【００８２】
ここで理解すべきであるように、こうしたステップは、最終的にファイル２８の新しいバージョンが完全に構築される（ステップ６０９）まで多数回繰り返し可能であり、ファイル２８の古いバージョンの物理サイズが減少するに従って記憶装置１２上でファイル２８の新しいバージョンの物理サイズは増加していく。その後ファイル２８の古いバージョンを削除して、記憶装置１２上のこうした古いファイル２８の残りのセグメントによって占有されたスペースを解放することができる（ステップ６１１）。
【００８３】
少なくとも一部の環境では、ステップ６０１〜６０５に示されるように、セグメントをファイル２８の古いバージョンから物理的にコピーし、こうしたファイル２８の新しいバージョンに保存し、ファイル２８の古いバージョンから削除する必要がないことに留意されたい。代わりに、ファイル２８の古いバージョンのセグメント割り振りテーブル３８からセグメントを単に参照解除（ｄｅ−ｒｅｆｅｒｅｎｃｅ）し、ファイル２８の新しいバージョンのセグメント割り振りテーブル３８にある同じセグメントを参照するだけで十分な場合がある。
【００８４】
本発明では、ここで理解すべきであるように、ファイル２８のｎｕｌｌ部分が実際には格納されないように、ファイル２８を疎な方式で記憶装置１２上に格納することが可能である。その結果記憶装置１２上のスペースが解放され、他のファイル２８用に使用できる一方で、同時にその後のある時点でファイル２８のこうしたｎｕｌｌ部分を実質的なデータ４０と共に読み込むことができる。
【００８５】
（記憶装置上の適所でのファイルの実行）
前述のように、あるインスタンスでは、実行可能ファイル２８を記憶装置１２上でほぼ即時に、かつ同じものをローカルＲＡＭ１８または他の場所にロードせずに、実行することが望ましい。たとえば、コンピューティング装置１０がオンデマンドおよびほぼ瞬間的にユーザコマンドに反応すると予測される場合であり、こうしたコマンドはこうした実行可能ファイル２８の実行を必要とする。別の方法として、ファイル２８を実行するためにローカルＲＡＭ１８を使用しないで済ませることが望ましい場合がある。
【００８６】
前述のように、コンピューティング装置１０向けの典型的な記憶装置１２は、クラスタごとまたはセクタごとにしかアドレス指定ができない。したがって記憶装置１２内の各バイトには、そのセクタ２２またはクラスタ２４を読み取らずに直接アクセスすることができない。結果として、一般にこうした典型的な記憶装置１２からファイル２８を直接実行することは、特にこうした実行が一般にこうしたファイルへのバイトごとのアクセスを必要とするため、実行不可能である。したがってファイル２８を実行するために、通常、こうしたファイル２８は、記憶装置１２から、実際にこうしたファイル２８の各バイトに直接アクセスできると理解されるローカルにロードされる。
【００８７】
しかしながら本発明の一実施形態では、記憶装置１２は実際にバイトごとにアドレス指定することができる。たとえばこうした記憶装置１２はＮＯＲフラッシュＲＡＭとすることが可能であり、これは理解されるように、実際にバイトごとに直接アドレス指定可能なアクセスを可能にするものである。ＮＯＲフラッシュＲＡＭは、当業者には知られているため、本明細書でこれ以上詳細に説明する必要はない。したがって、こうしたＮＯＲフラッシュＲＡＭの任意の適切な種類を、本発明の趣旨および範囲を逸脱することなしにコンピューティング装置１０の記憶装置１２として使用することができる。
【００８８】
このようにして、ファイル２８はこうしたＮＯＲフラッシュＲＡＭ記憶装置１２上の適所で実行することができる。しかしながら、こうしたＮＯＲフラッシュＲＡＭ１２（図７）上の適所で実際に実行するためには、いくつかの要件を満たさなければならない。
【００８９】
第１の要件として、また初期の問題として、こうしたＮＯＲフラッシュＲＡＭ１２がドライブなどの他の記憶装置である場合と同様に、コンピューティング装置１０のファイルシステム１６がＮＯＲフラッシュＲＡＭ１２にアクセス可能でなければならない。そのためにＮＯＲフラッシュＲＡＭ１２は、対応するアクセスドライバ４４を必要とする。一般に、また理解すべきであるように、アクセスドライバ４４はコンピューティング装置１０上で実行される１つのソフトウェアであり、物理アドレスに基づいたファイルシステム１６によるＮＯＲフラッシュＲＡＭ１２からのデータの呼び出しに応答して、とりわけこうしたデータ４０を実際に検索することができる。こうしたアクセスドライバ４４は当業者には知られているため、本明細書でこれ以上詳細に説明する必要はない。したがって、本発明の趣旨および範囲を逸脱することなく、任意の適切な種類のこうしたアクセスドライバ４４を使用することが可能であり、もちろんこうしたアクセスドライバ４４が適切な機能を含んでいることを前提とする。
【００９０】
第２の要件として、ファイル２８は、圧縮形式でＮＯＲフラッシュＲＡＭ１２上に格納すべきではない。理解されるように、そのようにすると、こうしたファイル２８をたとえばローカルＲＡＭ１８などの他の場所にロードして圧縮解除しなければならなくなるため、実際にファイル２８がこうしたＮＯＲフラッシュＲＡＭ１２上の適所で実行できないことになる。
【００９１】
ファイル２８が連続した形またはフラグメント化されていない形で、かつ適切な物理分岐アドレスと共にＮＯＲフラッシュＲＡＭ１２上に格納されない限り、こうしたファイル２８は通常、ＮＯＲフラッシュＲＡＭ１２上の適所で実行できないことに留意されたい。しかしながら本発明の一実施形態では、たとえ連続しない形またはフラグメント化された形であっても、こうしたファイル２８を実際にＮＯＲフラッシュＲＡＭ１２上の適所で実行することができる。しかしながらそのように実行するために、また第３の要件として、こうしたファイル２８は開始仮想アドレスを指定し、指定された開始仮想アドレスに基づいて適切な仮想分岐アドレスと共にＮＯＲフラッシュＲＡＭ１２上に格納される。
【００９２】
図７に示すように、また第４の要件として、ＮＯＲフラッシュＲＡＭ１２上のファイル２８のフラグメント３２の物理アドレスと、コンピューティング装置１０上のプロセッサ４８またはその他が使用可能な対応する仮想アドレスとの間での変換が可能な、コンピューティング装置１０は仮想アドレス変換器４６を含まなければならない。理解すべきであるように、適所でファイル２８を実行中のこうしたプロセッサ４８は、こうした仮想アドレス基づいてファイル２８および仮想アドレス変換器４６から命令を取り出すことによってこれを実行することになる。
【００９３】
したがって仮想アドレス変換器４６を使用すると、ＮＯＲフラッシュＲＡＭ１２上のファイル２８は少なくともプロセッサ４８に対して連続するように見え、もちろん、それに対してファイル２８内の開始仮想アドレスが実際に仮想アドレス変換器４６によって使用されると仮定して、ファイル２８内の仮想分岐アドレスは正しい。一般に、また理解すべきであるように、仮想アドレス変換器４６は、ファイル２８に関するこうした物理アドレスと仮想アドレスとの間のマッピングを維持することによって機能する。こうした仮想アドレス変換器４６は当業者には知られているため、本明細書でこれ以上詳細に説明する必要はない。したがって、本発明の趣旨および範囲を逸脱することなく、任意の適切な種類のこうした仮想アドレス変換器４６を使用することができる。
【００９４】
次に図８に進むと、その後操作時に、コンピューティング装置１０は、以下の方式でＮＯＲフラッシュＲＡＭ１２上の適所でファイル２８を実行する。もちろんファイルシステム１６は、適切なコマンドを利用してファイル２８を実行することがユーザまたは他のエンティティによって予め約束されているため（ステップ８０１）、アクセスドライバ４４を利用してＮＯＲフラッシュＲＡＭ１２上でこうしたファイル２８の位置を特定する（ステップ８０３）。その後ファイルシステム１６は、ファイル２８がＮＯＲフラッシュＲＡＭ１２上に常駐している、圧縮されていない、仮想開始アドレスを指定する、およびそれに基づいて仮想分岐アドレスを含む、ならびにとりわけ仮想的にマッピング可能である、と判定することによって、ファイル２８がＮＯＲフラッシュＲＡＭ１２上の適所で実際に実行可能であると判定する（ステップ８０５）。
【００９５】
ファイル２８が実際にＮＯＲフラッシュＲＡＭ１２上の適所で実行可能であると想定すると、その後システム１６は、アクセスドライバ４４を利用して、ファイル２８の前述の仮想開始アドレスならびに各フラグメント３２の物理位置および長さを含む、ファイル２８に関する必要な情報を取得し（ステップ８０７）、同様の情報に関して仮想アドレス変換器４６に通知する（ステップ８０９）。ここで理解すべきであるように、こうした情報を使用して仮想アドレス変換器４６は、ＮＯＲフラッシュＲＡＭ１２上の複数の連続しない物理位置から、ファイル２８によって指定された仮想開始アドレスで始まる単一の連続する仮想位置への、ファイル２８のマッピングを作成する（ステップ８１１）。
【００９６】
ＮＯＲフラッシュＲＡＭ１２上のファイル２８内の仮想分岐アドレスは、指定された仮想開始アドレスに基づいて正しくなるようにすでにセットアップされているため、仮想アドレス変換器４６もプロセッサ４８もそれ自体が訂正に関与する必要はない。いずれにしても、プロセッサ４８は作成されたマッピングを使用して、仮想アドレス変換器４６によってマッピングされた仮想アドレスに基づいて適切にコマンドを発行することにより、ファイル２８をいつでも実行することができる（ステップ８１３）。したがってこうした仮想アドレスに基づいて、変換器４６は、ファイル２８に関連してＮＯＲ  ＲＡＭ１２から直接実行されるデータ４０の位置を特定する。このように実行する場合、プロセッサ４８はファイルシステム１６およびアクセスドライバ４４を使用する必要がないことに留意されたい。
【００９７】
本発明では、ここで理解すべきであるように、ファイル２８は、たとえ連続していない場合であってもコンピューティング装置１０の記憶装置１２上の適所で実行することができる。このように実行するために、ファイル２８は圧縮してはならず、所定の仮想開始アドレスに基づいて正しい仮想アドレスで格納しなければならず、記憶装置１２はファイルシステム１６がアクセスドライバ４４を利用してアクセス可能でなければならず、さらに仮想アドレス変換器４６は仮想アドレスから物理アドレスへの変換に基づいて記憶装置１２に直接アクセスできなければならない。
【００９８】
以上、本発明について特定の処置を実行する特定の要素で表して述べたが、本発明の趣旨および範囲を逸脱することなく、１つの要素の機能を他の要素の機能に包含することができることを理解されよう。たとえば、ファイルシステム１６がアクセスドライバ４４の機能を含む場合、またはプロセッサ４８が仮想アドレス変換器４６の機能を含む場合がある。
【００９９】
さらに本発明について、記憶装置１２として直接アドレス指定可能なＮＯＲフラッシュＲＡＭで表して述べたが、本発明の趣旨および範囲を逸脱することなく、任意の他の直接アドレス指定可能な記憶装置１２も使用可能であることを理解されよう。たとえば、ほとんどの記憶装置は現在のところ直接アドレス指定できないが、ある時点で、実際にハードドライブが直接アドレス指定できる場合がある。
【０１００】
結論
本発明は、関連する記憶媒体１２のサイズに関係なく、ほとんどの任意のコンピューティング装置１０上でのアプリケーション１４の更新に関して実施可能である。ここで理解すべきであるように、本明細書で説明した本発明では、こうした更新は実際に実行される前にまずシミュレートされ、こうした実際の実行はシミュレーションが成功したとみなされた場合に限って実行される。
【０１０１】
本発明に関連して実行されるプロセスを達成するために必要なプログラミングは比較的簡単であり、関連するプログラミング業界には明らかなはずである。したがって、こうしたプログラミングは本明細書に添付しない。任意の特定のプログラミングを使用して、本発明の趣旨および範囲を逸脱することなく本発明を達成することができる。
【０１０２】
前述の説明で、本発明が、特に比較的小規模な記憶装置１２を備えたコンピューティング装置１０上のファイルシステム１６などのアプリケーション１４を更新するための新しい有用な方法を有することがわかるであろう。この方法は、更新が成功するか、そうでなければ更新の実行を許可しないことを保証するものである。
【０１０３】
本発明は、チャンクごとに記憶装置１２上でファイルを編成するためのファイルシステム１６用の新しい有用なフレームワークも有する。このフレームワークは、ファイルシステム１６が、必要以上の無駄なしに記憶装置１２の記憶容量を効率よく使用できるようにするものである。
【０１０４】
本発明は、特にファイル２８がｎｕｌｌデータ４０を含む場合に、記憶装置１２の記憶容量を効率よく使用できるようにするファイル２８の新しい有用な構造をさらに有する。こうした構造は、ファイルシステム１６が、ファイル２８内にこうしたｎｕｌｌデータを不必要に格納することに基づく必要以上の無駄をせずに、記憶装置１２の記憶容量を効率よく使用できるようにするものである。
【０１０５】
本発明は、コンピューティング装置１０の記憶装置１２上のファイル２８をほとんど即時に実行できる方法および機構をさらに有する。ファイルは、記憶装置１２上に格納され、たとえファイル２８がフラグメント化された方式で記憶装置１２上に格納された場合であっても、そこから直接実行することができる。
【０１０６】
前述の諸実施形態は、本発明の概念を逸脱することなく変更が可能であることを理解されたい。したがって一般に本発明は、開示された特定の実施形態に限定されるものでなく、添付の特許請求の範囲に定義された本発明の趣旨および範囲の中での修正をカバーすることを意図するものであることを理解されたい。
【図面の簡単な説明】
【０１０７】
【図１】本発明の諸態様および／またはその一部を組み込むことが可能な、汎用コンピュータシステムを表すブロック図である。
【図２】アプリケーションを含むデータ、ファイルシステム、およびデータに関するメタデータが格納された、記憶装置を備えたコンピューティング装置を示すブロック図である。
【図３】本発明の一実施形態に従って記憶装置上でアプリケーションを更新する際に、図２のコンピューティング装置に関連して実行される主要なステップを示す流れ図である。
【図４】本発明の一実施形態に従った、チャンクに細分された図２の記憶装置上のセクタを示すブロック図である。
【図４Ａ】本発明の一実施形態に従った、図４のチャンクに従って格納されたファイルと各ファイルの各フラグメントに対する最小サイズのブロックとを示すブロック図である。
【図５】本発明の一実施形態に従った、ファイルのｎｕｌｌデータセグメントが実際には格納されない疎な実施に従って図２の記憶装置上に格納されたファイルを示すブロック図である。
【図６】本発明の一実施形態に従って、図５のファイル記憶の疎な実施に関連して実行される主要なステップを示す流れ図である。
【図７】本発明の一実施形態に従った、図２の記憶装置上に格納され適所で実行可能なファイルを示すブロック図である。
【図８】本発明の一実施形態に従って、適所での図７のファイルの実行に関連して実行される主要なステップを示す流れ図である。
【符号の説明】
【０１０８】
１２  記憶装置
２２  セクタ
２６  チャンク
３８  セグメント割り振りテーブル
４０  ファイルデータ
【図１】
0004825433.tif 000002
【図２】
0004825433.tif 000003
【図３】
0004825433.tif 000004
【図４】
0004825433.tif 000005
【図４Ａ】
0004825433.tif 000006
【図５】
0004825433.tif 000007
【図６】
0004825433.tif 000008
【図７】
0004825433.tif 000009
【図８】
0004825433.tif 000010