(57)【要約】  ＦＡＴボリューム内の個々のファイルを圧縮するとともに、圧縮するファイル以外のファイルを非圧縮状態に保つことができる。ＦＡＴ圧縮フィルタ（ＦＣＦ）プログラムは、ファイルシステムに対する呼び出しをインタセプトし、ＦＡＴボリュームにおけるファイルに関する圧縮タスクおよび解凍タスクを実行する。ＦＡＴファイルシステムと共に個々のファイルの圧縮を使用することで、個々のファイルの圧縮の利点を提供しながら、確実にフラッシュメモリの寿命を長くし、すぐに機能しなくなることがないようにすることができる。ＦＡＴ圧縮フィルタ（ＦＣＦ）により、ボリューム内の個々のファイルは、圧縮されることから除外することができる。
2009527847.tif 000002
【特許請求の範囲】
【請求項１】
ＦＡＴボリューム内の個々のファイルを圧縮するとともに、圧縮するファイル以外のファイルを非圧縮状態に保つためのコンピュータ実装方法であって、
前記ＦＡＴボリュームにおけるファイルに対するデータ読み取りまたはデータ書き込みを行うファイルシステム要求を受信することと、
前記ファイルが圧縮されているか否かを判定することと、
前記ファイルが圧縮されている場合、
前記ファイルシステム要求が、前記データ書き込みであるときには、前記データを圧縮して、前記ＦＡＴボリュームにおける前記ファイルに前記圧縮したデータを書き込むことであって、前記ＦＡＴボリュームは、非圧縮ファイルおよび圧縮ファイルを含む、書き込むことと、
前記ファイルシステム要求が、前記データ読み取りであるときには、前記ＦＡＴボリュームにおける前記ファイルにアクセスし、前記データを解凍し、該解凍したデータを返すことと
を備えることを特徴とする方法。
【請求項２】
前記ファイルシステム要求を受信することは、
前記ファイルシステム要求がファイルシステムに到達する前に、前記ファイルシステム要求をインタセプトすること
を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記ファイルが圧縮されているか否かを判定することは、
除外リストをチェックすること
を含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記除外リストは、非圧縮状態のまま保たれるべきファイルおよびフォルダを含む
ことを特徴とする請求項３に記載の方法。
【請求項５】
前記除外リストにブートファイルを記憶すること
をさらに備えることを特徴とする請求項３に記載の方法。
【請求項６】
前記ファイルが圧縮されているか否かを判定することは、
前記ファイルが圧縮されていることを示す識別子を前記ファイルが含んでいるか否かを判定すること
を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記識別子は、圧縮タイプ部分とマッピング部分とを含むヘッダである
ことを特徴とする請求項６に記載の方法。
【請求項８】
前記データを圧縮すること、および前記データを解凍することは、
前記ヘッダの前記圧縮タイプ部分内で指定された圧縮アルゴリズムを使用して実行される
ことを特徴とする請求項７に記載の方法。
【請求項９】
前記ファイルにアクセスすることは、
前記ヘッダの前記マッピング部分にアクセスすることと、
前記ファイル内の前記データに対するマッピングを判定することと
を含むことを特徴とする請求項７に記載の方法。
【請求項１０】
ＦＡＴボリューム内の個々のファイルを圧縮するとともに、圧縮するファイル以外のファイルを非圧縮状態に保つためのシステムであって、
圧縮ファイルおよび非圧縮ファイルの両方を含むＦＡＴボリュームと
ファイル圧縮フィルタ（ＦＣＦ）プログラムと
を備え、
前記ＦＣＦプログラムは、
ファイルシステム書き込み要求を受信して、前記ＦＡＴボリュームにおける前記圧縮ファイルのうちの１つにデータを書き込むことと、
ファイルシステム読み取り要求を受信して、前記ＦＡＴボリュームにおける前記圧縮ファイルのうちの１つからデータを読み取ることと、
前記圧縮ファイルのうちの前記１つから前記データを解凍し、前記読み取り要求に応答して、前記解凍したデータを返すことと、
前記データを圧縮し、前記書き込み要求に応答して、前記圧縮ファイルのうちの前記１つに前記圧縮したデータを記憶することと
を含む動作を実行するように構成されている
ことを特徴とするシステム。
【請求項１１】
前記ＦＡＴボリューム内の圧縮すべきファイルを識別する除外リスト
をさらに備えたことを特徴とする請求項１０に記載のシステム。
【請求項１２】
前記除外リストは、該除外リストがいつ変更されたかを示すために使用されるチェックサムを含む
ことを特徴とする請求項１１に記載のシステム。
【請求項１３】
前記ＦＡＴボリュームにおける前記圧縮ファイルの各々は、圧縮アルゴリズムを指定する圧縮タイプを含むヘッダを有する
ことを特徴とする請求項１１に記載のシステム。
【請求項１４】
前記ＦＣＦプログラムは、少なくとも１つのアタッチされたＦＡＴボリュームを示すボリュームリストをさらに含む
ことを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記ＦＣＦプログラムは、最小圧縮閾値が満たされるか否かを判定するようさらに構成されている
ことを特徴とする請求項１３に記載のシステム。
【請求項１６】
圧縮ファイルおよび非圧縮ファイルを含む第２のＦＡＴボリューム
をさらに備え、
前記ＦＣＦプログラムは、前記ＦＡＴボリュームと前記第２のＦＡＴボリュームとの間で、前記圧縮ファイルおよび前記非圧縮ファイルをコピーし、移動させるようさらに構成されている
ことを特徴とする請求項１３に記載のシステム。
【請求項１７】
ＦＡＴボリューム内の個々の圧縮ファイルに関する設定を調節するとともに、圧縮ファイル以外のファイルを非圧縮状態に保つためのコンピュータ実行可能命令を有するコンピュータ読み取り可能な媒体であって、前記命令は、
前記ＦＡＴボリュームにおいて非圧縮状態のまま保たれるべきファイルをリストする除外リストと、前記ＦＡＴボリュームにおけるファイルの圧縮状態と、圧縮アルゴリズムとのうちの１つを更新する要求を受信することと、
前記要求に応答して、前記除外リストと、前記圧縮状態と、前記圧縮アルゴリズムとのうちの前記１つを更新することと
を有することを特徴とするコンピュータ読み取り可能な媒体。
【請求項１８】
前記除外リストを更新する前記要求は、
前記除外リストに追加すること、
前記除外リストから削除すること、
前記除外リストを表示すること、および
前記除外リスト内の要素を変更すること
のうちのいずれかを示す
ことを特徴とする請求項１７に記載のコンピュータ読み取り可能な媒体。
【請求項１９】
前記ＦＡＴボリュームにおける前記ファイルの前記圧縮状態を更新する前記要求は、前記ファイルを圧縮するか否か、または前記ファイルを解凍するか否かの指示を含む
ことを特徴とする請求項１７に記載のコンピュータ読み取り可能な媒体。
【請求項２０】
前記圧縮アルゴリズムを更新する前記要求は、圧縮アルゴリズムのタイプを示すことを含む
ことを特徴とする請求項１７に記載のコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
メモリは、組み込みシステムにおいて重要なリソースである。多くの組み込みデバイスにとって、フラッシュメモリは最適な記憶媒体である。しかし、フラッシュメモリは、機能しなくなるまでに制限された回数しか書き込むことができない、高価な不揮発性メモリである。フラッシュメモリの障害は、各フラッシュセクタにおいてフラッシュメモリが機能しなくなる前および使い果たされる前に実行できる書き込みイベントが、制限された回数しかないことによって生じる。コストを削減するために、多くのシステムでは、必要なフラッシュメモリの量を最小限に抑えるよう努めている。ＮＴＦＳ（Ｎｅｗ  Ｔｅｃｈｎｏｌｏｇｙ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）は、メモリスペースを低減する圧縮をサポートするものであるが、一般的にはフラッシュメモリと共に使用されることはない。
【発明の開示】
【発明が解決しようとする課題】
【０００２】
フラッシュメモリと共にＮＴＦＳを使用すると、ＮＴＦＳがログファイルを媒体上の特定のセクタに定期的に書き込みをすることにより許容される書き込みイベントを超えてしまうので、メモリがすぐに機能しなくなるおそれがある。さらに、ＮＴＦＳでは、他のファイルシステムと比べて、より大量の空間オーバヘッドが必要である。一般に、ＦＡＴ（Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ）ファイルシステムが、フラッシュメモリと共に使用される。ＦＡＴと併せて使用されるセクタベースまたはボリュームベースの圧縮では、ボリューム全体が圧縮されるので、それにより、いくつかのアプリケーションおよびオペレーティングシステムのコンポーネントが、実行に時間がかかるか、または不適切に実行されてしまう場合がある。
【課題を解決するための手段】
【０００３】
この要約は、以下の発明の詳細な説明においてさらに説明する概念を選択して簡潔に紹介するものである。この要約は、特許請求する主題事項の重要な特徴または不可欠な特徴を特定するよう意図するものでもないし、特許請求する主題事項の範囲を決定するのを助けるものとして使用するよう意図するものでもない。
【０００４】
ＦＡＴボリューム内の個々のファイルを圧縮するとともに、圧縮するファイル以外のファイルを非圧縮状態に保つことができる。ＦＡＴ圧縮フィルタ（ＦＣＦ：ＦＡＴ  Ｃｏｍｐｒｅｓｓｉｏｎ  Ｆｉｌｔｅｒ）プログラムは、ファイルシステムに対するファイル要求をインタセプトし、ＦＡＴボリュームにおけるファイルに関する圧縮タスクおよび解凍タスクを実行する。ＦＡＴボリュームに記憶されたファイルの圧縮および解凍に関する動作を構成して実行するために、ＡＰＩが使用されてもよい。ＦＡＴファイルシステムと共に個々のファイルの圧縮を使用することで、個々のファイルの圧縮の利点を提供しながら、確実にフラッシュメモリの寿命を長くし、すぐに機能しなくなることがないようにすることができる。ＦＡＴ圧縮フィルタにより、ボリューム内の個々のファイルは、圧縮されることから除外される。一般に、圧縮されることから除外されるファイルは、圧縮時にアプリケーションのパフォーマンスに悪影響を及ぼすことになるファイルである。
【発明を実施するための最良の形態】
【０００５】
次に、図面を参照しながら、様々な実施形態について説明する。図面において、類似した符号は、類似した要素を表している。特に、図１および図１に対応する記載は、様々な実施形態を実装できる適切なコンピューティング環境を簡潔かつ一般的に説明することを目的とするものである。
【０００６】
一般に、プログラムモジュールには、特定のタスクを実行するか、または特定の抽象データ型を実装する、ルーチン、プログラム、コンポーネント、データ構造、および他のタイプの構造体が含まれる。ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの家庭用電化製品またはプログラム可能な家庭用電化製品、ミニコンピュータ、メインフレームコンピュータなどの、他のコンピュータシステム構成が使用されてもよい。通信ネットワークを介してリンクされるリモート処理デバイスによってタスクが実行される分散コンピューティング環境が使用されてもよい。分散コンピューティング環境において、プログラムモジュールは、ローカルメモリストレージデバイスおよびリモートメモリストレージデバイスの両方に配置されてもよい。
【０００７】
次に図１を参照して、様々な実施形態において利用されるコンピュータ１００の例示的なコンピュータアーキテクチャについて説明する。図１に示したコンピュータアーキテクチャは、モバイルコンピューティングデバイスおよび／または従来のコンピューティングデバイスとして構成することができる。例えば、コンピューティングデバイス１００は、スマートフォン、ＰＤＡ、デスクトップコンピュータ、サーバ、タブレット、ラップトップコンピュータなどとして構成することができる。
【０００８】
図示するように、コンピュータ１００は、中央処理ユニット（ＣＰＵ）５、ランダムアクセスメモリ（ＲＡＭ）９とリードオンリメモリ（ＲＯＭ）１１とを含むシステムメモリ７、およびＣＰＵ５にメモリを接続するシステムバス１２を備えている。システムメモリ７は、不揮発性メモリおよび揮発性メモリの任意の組合せとすることができる。起動時などにコンピュータ内の要素間で情報を転送するのを助ける基本ルーチンを含む基本入出力システムは、ＲＯＭ１１に記憶されている。コンピュータ１００は、オペレーティングシステム１６、アプリケーションプログラム、および他のプログラムモジュールを記憶するための大容量ストレージデバイス１４をさらに備えている。これについては、以下で詳細に説明する。
【０００９】
大容量ストレージデバイス１４は、バス１２に接続された大容量ストレージコントローラ（図示せず）を介してＣＰＵ５に接続される。大容量ストレージデバイス１４およびそれに関連するコンピュータ読み取り可能な媒体は、コンピュータ１００に不揮発性の記憶領域を提供する。本明細書で説明するコンピュータ読み取り可能な媒体は、ハードディスク、ＤＶＤドライブまたはＣＤ−ＲＯＭドライブなどの大容量ストレージデバイスを指しているが、コンピュータ読み取り可能な媒体は、コンピュータ１００がアクセス可能な任意の利用可能な媒体とすることができる。
【００１０】
例えば、コンピュータ読み取り可能な媒体には、コンピュータ記憶媒体および通信媒体を含めることができるが、これらに限定されるものではない。コンピュータ記憶媒体には、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実装された、揮発性媒体および不揮発性媒体、ならびに取り外し可能な媒体および取り外し不可能な媒体が含まれる。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、もしくは他のソリッドステートメモリ技術、ＣＯ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、もしくは他の磁気記憶デバイス、または、所望の情報を記憶するのに使用でき、かつコンピュータ１００がアクセス可能な他の任意の媒体が含まれるが、これらに限定されるものではない。
【００１１】
様々な実施形態にしたがうと、コンピュータ１００は、インターネットなどのネットワーク１８を介してリモートコンピュータに対する論理接続を使用するネットワーク環境において動作することができる。コンピュータ１００は、バス１２に接続されたネットワークインタフェースユニット２０を介して、ネットワーク１８に接続することができる。ネットワークインタフェースニット２０はまた、他のタイプのネットワークおよびリモートコンピュータシステムに対して接続するために利用することもできる。この接続は、有線接続および／または無線接続とすることができる。コンピュータ１００はまた、キーボード、マウス、電子スタイラスなどの多くのデバイスからの入力を受信して処理するための入出力コントローラ２２を備えている。また、入出力コントローラ２２は、ディスプレイ２８、スピーカ、またはいくつかの他のタイプのデバイスに対する出力を提供することができる。
【００１２】
簡潔に上述したように、多くのプログラムモジュールおよびデータファイルは、コンピューティングデバイスの動作を制御するのに適したオペレーティングシステム１６を含むコンピュータ１００のメモリに記憶することができる。このようなオペレーティングシステムとして、ワシントン州レドモンドを本拠とする本件特許出願人のＷＩＮＤＯＷＳ（登録商標）  ＭＯＢＩＬＥまたはＷＩＮＤＯＷＳ（登録商標）  ＸＰのオペレーティングシステムなどがある。コンピューティングデバイス１００は、組み込みオペレーティングシステムと共に、他の組み込みデータ、組み込みファイル、および組み込みアプリケーションを含む組み込みシステムであってもよい。
【００１３】
オペレーティングシステム１６は、ＦＡＴファイルシステムを利用することができる。一般に、ＦＡＴファイルシステムにより、オペレーティングシステムは、１つのファイルの各部分の位置およびシーケンスを追跡することができる。さらに、ＦＡＴファイルシステムにより、オペレーティングシステム１６は、まだ割り当てられておらず、かつ新たなファイルに利用可能なクラスタを識別することができる。ファイルを読み取る要求が受信されると、ＦＡＴファイルシステムは、表示するために、ファイルの各部分を１つのユニットに再構築する。
【００１４】
一実施形態にしたがうと、全てまたはいくつかのメモリは、フラッシュメモリ、または組み込みシステムに適したいくつかの他のメモリとすることができる。大容量ストレージデバイス１４およびＲＡＭ９は、１つまたは複数のプログラムモジュールをさらに記憶することができる。特に、大容量ストレージデバイス１４およびＲＡＭ９は、ＦＡＴ圧縮フィルタ（ＦＣＦ）プログラム１０を記憶することができる。ＦＣＦプログラム１０は、ファイル２４と対話してファイル２４を圧縮／解凍し、かつオペレーティングシステム１６と対話する機能を提供するよう動作可能である。例えば、ＦＣＦプログラム１０は、ＦＡＴファイルシステムに対する呼び出しを個別にインタセプトし、圧縮タスクおよび解凍タスクを実行して、大容量ストレージデバイスにおけるボリュームに対して／大容量ストレージデバイスにおけるボリュームから、または要求元アプリケーションに対して／要求元アプリケーションからデータを返すように構成される。ＦＡＴファイルシステムと共に個々のファイルの圧縮を使用することで、個々のファイルの圧縮を提供しながら、確実にフラッシュメモリは寿命が長くなり、すぐに機能しなくなることがないようにすることができる。ＦＡＴボリューム内の個々のファイルは、圧縮されることから除外することができる。その際、除外リスト２６を利用して、特定のファイルの圧縮を除外することを容易に行うことができる。他のタイプのインジケータを使用して、ファイルを圧縮すべきか否かを示してもよい。例えば、各ファイルは、ヘッダ内にインジケータを有して、ファイル名が圧縮すべきであるか否かなどを示すようにしてもよい。一般に、圧縮から除外されるファイルは、コンピューティングデバイスのブートプロセスにおいて初期に必要なファイル、または圧縮時にアプリケーションのパフォーマンスに悪影響を及ぼすファイルである。圧縮から除外すべきファイルの判断は、許可されたユーザにより設定することができる。例えば、あるアプリケーションでは、許可されたユーザは、システム管理者とすることができるのに対し、他のアプリケーションでは、許可されたユーザは、コンピューティングデバイス１００のユーザとすることができる。ＦＣＦプログラム１０の動作に関するさらなる詳細については、以下で説明する。
【００１５】
図２は、個々のファイルの圧縮を行うＦＡＴ圧縮システムを示している。図示するように、ＦＡＴ圧縮システム２００は、アプリケーション２０２、ファイルシステム要求２０４、ＦＣＦプログラム１０、ボリュームリスト２１０、設定２１２、ＩＯマネージャ２２０、ファイルシステム２２２、ボリュームマネージャ２２４、ＦＡＴボリューム２３０、２５０、除外リスト２３２、ヘッダ２３４を含む圧縮ファイル２３６、非圧縮ファイル２４０、アプリケーションプログラミングインタフェース（ＡＰＩ）２３８、およびストレージ２６０を含む。
【００１６】
一般に、ＦＡＴ圧縮システム２００により、ＦＡＴボリューム内の個々のファイルを圧縮するとともに、圧縮するファイル以外のファイルを非圧縮状態に保つことができる。ＦＣＦプログラム１０は、ファイルシステム２２２に対してアプリケーション（例えば、アプリケーション２０２）が行うファイルシステム要求２０４をインタセプトし、ファイルに関する圧縮タスクおよび解凍タスクを実行する。一般に、圧縮することから除外されるファイルは、ブートファイルであり、圧縮時にアプリケーションのパフォーマンスに悪影響を及ぼすファイルである。ＦＡＴボリュームに記憶されるファイルは、圧縮ファイル２３６と非圧縮ファイル２４０とを混合したものであってもよい。ファイルはまた、１つまたは複数のＦＡＴボリューム（例えば、ＦＡＴボリューム１  ２３０およびＦＡＴボリューム２  ２５０）に存在してもよい。ＦＣＦプログラム１０により、ボリューム内の個々のファイルを圧縮することから除外することができる。
【００１７】
除外リスト２３２を使用して、圧縮すべきでないファイルを識別する。除外リスト２３２にはまた、圧縮すべきでないフォルダまたはパスを含めることもできる。除外リスト２３２は、ファルダ内または特定のパス下に含まれるファイルおよび／またはサブディレクトリの全ておよび／または一部を圧縮するように構成することができる。除外リスト２３２には、チェックサムをさらに含めることができるので、ＦＣＦプログラム１０は、除外リストのファイルが改ざんされているか否か、または破損しているか否かを判定することができる。除外リストが改ざんされているか否か、および／または破損しているか否かを判定するのに、他の方法を使用してもよい。
【００１８】
ＦＣＦプログラム１０は設定２１２を含む。設定２１２には、ＦＣＦプログラム１０の動作に関する多くの様々なタイプの設定を含めることができる。例えば、設定２１２には、常に圧縮されることから除外されるファイルのリスト、デフォルトの圧縮アルゴリズム、最小圧縮閾値（ｍｉｎｉｍｕｍ  ｃｏｍｐｒｅｓｓｉｏｎ  ｔｈｒｅｓｈｏｌｄ）などを含めることができる。設定２１２は、ボリューム単位で、フォルダ単位で、またはファイル単位で、グローバルに構成してもよい。
【００１９】
ＦＣＦプログラム１０はまた、ボリュームリスト２１０も含む。ボリュームリスト２１０は、どのＦＡＴボリュームがアタッチされるのかを定義したものであり、ＦＣＦプログラム１０が圧縮すべきファイルを含む。新たなＦＡＴボリュームにアクセスすると、ＦＣＦプログラム１０は、構成ファイル２３１のＦＡＴボリュームのルートをチェックする。構成ファイル２３１が存在し、かつ構成ファイル２３１が、ボリュームをＦＣＦプログラム１０にアタッチすべきであると識別した場合、そのボリュームがＦＣＦプログラム１０にアタッチされ、ボリュームリスト２１０が更新される。同様に、あるボリュームがデタッチされた（ｕｎａｔｔａｃｈｅｄ）場合、そのボリュームは、ボリュームリスト２１０から削除される。あるＦＡＴボリュームをＦＣＦプログラム１０にアタッチするか否かを判定するために、多くの他の方法を用いてもよい。例えば、コンピューティングデバイス上に存在する任意のＦＡＴボリュームを自動的にアタッチしてもよいし、特定の（１つまたは複数の）ＦＡＴボリュームだけをアタッチするなどの方法を用いてもよい。
【００２０】
圧縮ファイル２３６および非圧縮ファイル２４０の両方が、ＦＡＴボリュームに存在する。一実施形態にしたがうと、各圧縮ファイル２３６は、ＦＣＦプログラム１０が利用するヘッダ２３４を含む。一実施形態にしたがうと、ヘッダ２３４は、シグネチャ、圧縮タイプ、チェックサム、および圧縮マッピング情報を含む。特に、ＦＣＦプログラム１０は、ヘッダ２３４を使用して、ファイルを圧縮するか否かを識別する。ファイルがヘッダ２３４を含む場合、そのファイルは圧縮される。ファイルがヘッダ２３４を含まない場合、そのファイルは圧縮されない。これにより、システム２００は、ファイルをポータブルにすると共に、個々のマッピングファイルなしでファイルを読み取ることが可能になり、また、異なる圧縮アルゴリズムを同一のファイルシステムにおいて使用することが可能になる。ヘッダ２３４内の一意なシグネチャを使用して、ファイルを圧縮ファイルとして識別することもできる。
【００２１】
ヘッダ２３４内の圧縮タイプを使用して、ファイルに対して圧縮を実行する際に使用する圧縮アルゴリズムを指定することもできる。一実施形態にしたがうと、ＭＳＺｉｐ圧縮アルゴリズムなどのＺＩＰ圧縮アルゴリズムをデフォルトで使用して、ファイルが圧縮される。他の圧縮アルゴリズムを指定してもよい。例えば、ＬＺＮＴ圧縮アルゴリズムを使用してもよい。様々な圧縮アルゴリズムには、異なる利点がある。一般に、空間とパフォーマンスとの間にはトレードオフが存在する。圧縮アルゴリズムを選択できることにより、アプリケーションおよびデバイスを特定用途向けに最適化することが可能になる。
【００２２】
他の方法を使用して、圧縮アルゴリズムを識別してもよい。例えば、デフォルト圧縮アルゴリズムを使用して全てのファイルを圧縮してもよいし、各ファイルおよび当該ファイルの圧縮アルゴリズムなどを識別するリストが含まれてもよい。圧縮ファイル２３６の各々のヘッダ２３４内に圧縮アルゴリズムのタイプを含めることで、たとえファイルシステムが異なるデフォルト圧縮アルゴリズムをサポートしていても、確実に圧縮ファイル２３６をアクセス可能にできる。一実施形態にしたがうと、１つのタイプの圧縮アルゴリズムを使用してひとたびファイルが圧縮されると、そのファイルに対して行ういずれの更新についても、同一の圧縮アルゴリズムを使用し続けることになる。圧縮アルゴリズムを変更するためには、ＦＣＦプログラム１０によってファイルを解凍し、次いで、選択した圧縮アルゴリズムを使用して、ＦＣＦプログラム１０によって再圧縮する。
【００２３】
アプリケーション２０２が、アタッチされたＦＡＴボリューム（例えば、ＦＡＴボリューム２３０）からデータを読み取ることを要求した場合、ＦＣＦプログラム１０は、ファイルが圧縮されているか否かを識別する。一実施形態にしたがうと、ＦＣＦプログラム１０は、ファイルがヘッダ２３４を含むか否かを判定する。ファイルがヘッダを含む場合、ＦＣＦプログラム１０は、ファイルからデータを読み取り、ファイルの要求された部分を解凍し、ファイルシステム要求２０４を介して要求元アプリケーション２０２に要求されたデータを返す。ファイルがヘッダを含まない場合、ＦＣＦプログラム１０は、データに対して全く解凍を行わずに、要求されたデータを返す。
【００２４】
アプリケーション２０２が書き込みを要求した場合、ＦＣＦプログラム１０は、ファイルシステム要求２０４を介して要求を受信し、ファイルが圧縮されているか否か、またはファイルを圧縮すべきか否か（例えば、ファイルが現在存在しない、異なるボリュームへのコピーなど）を判定する。ファイルがＦＡＴボリューム内に存在しなかった場合、除外リスト２３２にアクセスして、ＦＡＴボリュームにファイルを書き込む前にファイルを圧縮するか否かを判定する。読み取り要求と同様に、ファイルがヘッダ２３４を含むか否かに関して判定される。ファイルがヘッダ２３４を含む場合、ＦＣＦプログラム１０は、ヘッダ２３４内で指定された圧縮アルゴリズムを判定し、その指定された圧縮アルゴリズムを使用して、ＦＡＴボリュームにおけるファイルにデータを書き込む前にデータを圧縮する。ファイルがヘッダを含まない場合、データを圧縮せずに、ＦＡＴボリュームにおけるファイルにデータを書き込む。
【００２５】
ＦＡＴボリュームにおけるファイルをコピーする場合、圧縮システム２００は、新たなファイルを指定された位置に書き込む。圧縮すべきファイルを指定する位置にファイルをコピーする場合、ＦＡＴボリュームに記憶する前にファイルを圧縮する。同一のＦＡＴボリューム内でファイルを移動させることは、ファイルアロケーションテーブル内のファイル位置を変更することであって、ファイルの圧縮を変更するわけではない。代替として、移動には、ファイルを新たな位置において圧縮すべきであるか、非圧縮状態にすべきかを判定することを含めることができる。この例では、移動は、移動後に元のファイルをＦＡＴボリュームから削除した状態でコピーするものとして扱うことになる。同様に、ボリューム全体にわたってファイルを移動することは、ファイルを新たなボリュームにコピーして、次いで、元のボリュームにおけるファイルを削除することを含む。
【００２６】
一実施形態にしたがうと、別のデバイス上のボリュームにファイルをコピーして、圧縮された形式で記憶する場合、ＦＣＦプログラムによってコピー先のデバイス上でファイルを再圧縮する。これにより、確実に各デバイスが圧縮ファイルと対話できる。別の実施形態にしたがうと、圧縮された形式で、ファイルを新たな位置にコピーしてもよい。この場合、確実にデバイスが指定された圧縮アルゴリズムに対するサポートを含むようになされるべきである。
【００２７】
一実施形態にしたがうと、ファイルを圧縮すべき場合、ＦＣＦプログラム１０は、圧縮状態のファイルが最小圧縮閾値（例えば、デフォルトで５％未満の節減）を満たすか否かを判定する。他の閾値を利用してもよい。ファイルが最小圧縮閾値を満たさない場合、ファイルを非圧縮ファイルとして記憶し、これにより確実にパフォーマンスが低下しないようにする。最小圧縮閾値を満たさないために圧縮されることから除外されたファイルは、除外リスト２３２に追加され、最小圧縮閾値を満たさないものとしてマーク付けされる。最小圧縮閾値を満たさないものとしてマーク付けされたファイルは全て、指定された設定にしたがって、定期的に再検査されてもよい。最小圧縮閾値は、設定２１２内に記憶され、多くの異なる方法で設定することができる。例えば、最小圧縮閾値は、ＡＰＩ２３８を使用して設定することができる。
【００２８】
一実施形態にしたがうと、ＦＣＦプログラム１０にとって既知のブートファイルは、非圧縮状態に保たれ、圧縮されなくてよい。ブートファイルは、ＦＣＦプログラム１０により、ブートドライバのランタイムレジストリを検索することで動的に識別することができる。こうしたブートドライバを除外リスト２３２および／または設定２１２に追加して、必須のものとしてマーク付けすることができる。必須のものとしてマーク付けされた場合、ファイルは決して圧縮されない。
【００２９】
ＡＰＩ２３８は、対話するためのインタフェースを提供して、ＦＡＴボリュームにおける個々のファイルの圧縮に関する設定を調節する。ＡＰＩ２３８を利用して、例えば、次のことを行うことができる：除外リスト２３２からファイルまたはパスを削除する；除外リストの変更を直ちに行う；特定のファイル（または、あるフォルダ内のファイル群またはあるパス下のファイル群）を圧縮すべきか、非圧縮状態にすべきかを設定する；ファイルの圧縮状態を更新する；変更を新たなファイルのみに適用する；ボリュームをアタッチ／デタッチする；および、デフォルトの圧縮タイプを変更することができる。コマンドラインツールを使用して、ＦＡＴボリュームにおけるファイルの圧縮に関する設定を構成してもよい。例えば、コマンドラインツールを使用して、あるボリュームのＦＣＦプログラムに対するアタッチまたはデタッチ、除外リストの表示などを行ってもよい。以下は、ＡＰＩ２３８内で利用できる例示的な関数のリストである。関数の他の組合せを使用してもよい。
【００３０】
除外リスト２３２の情報を追加、削除、表示、および変更するために、除外リストの更新（Ｕｐｄａｔｅ  Ｅｘｃｌｕｓｉｏｎ  Ｌｉｓｔ）を使用する。
【００３１】
ある１つのファイル、またはディレクトリ構造内のファイル群に対して変更を行うために、ファイルの変換関数（Ｃｏｎｖｅｒｔ  Ｆｉｌｅｓ  Ｆｕｎｃｔｉｏｎ）を使用する。一実施形態にしたがうと、ファイルの変換関数には、次の引数の利用を含めることができる。「Ｓｕｂｄｉｒｓ」引数は、ディレクトリおよびそのサブディレクトリ内の全てのファイルを指定された圧縮状態に変更させる。「Ｃ」、すなわち圧縮引数は、ファイルを圧縮する。「Ｕ」、すなわち解凍引数は、ファイルを解凍する。ＦＯＲＣＥ引数は任意の他の引数と組み合わせて、除外リスト２３２にファイルが含まれているか否かに関わらず、そのファイルの変更を強制する。使用する圧縮アルゴリズムを指定する引数（例えば、−ＬＺＮＴ、−ＭＳＺｉｐなど）を利用してもよい。
【００３２】
図３は、ＦＡＴボリュームにおける非圧縮ファイルと圧縮ファイルとの間のマッピングを示している。非圧縮ファイル３１０は、３２ｋ「チャンク（ｃｈｕｎｋ）」に記憶されているファイルを表す。他のチャンクサイズを使用してもよい。非圧縮ファイル３１０が圧縮されて圧縮ファイル３１２になると、ヘッダ３２０がファイルに追加され、非圧縮ファイル３１０内の各チャンク（１〜４）が圧縮されて、ヘッダ３２０の後ろに圧縮された各チャンク（１〜４）が記憶される。図示するように、元の非圧縮ファイル３１０のチャンク１は、サイズが２４ｋ減少し、チャンク２は、サイズが３ｋ減少し、チャンク３は、サイズが４ｋ減少し、チャンク４は、サイズが２３ｋ減少した。簡単に上述したように、ヘッダは、（断片化（ｆｒａｇｍｅｎｔａｔｉｏｎ）を可能にするための、）圧縮されたチャンクのマッピングを含む。次の例では、非圧縮ファイル３１０内の６０ｋ目から始まる１２ｋ分のデータを、非圧縮ファイル３１０に対して要求した。ヘッダ３２０内に含まれるマッピング情報を使用して、圧縮ファイル３１２内の要求されたデータにアクセスすべき場所を判定する。
【００３３】
ＦＣＦプログラムは、ファイル要求がファイルシステムに送信される前に、そのファイル要求をインタセプトする。圧縮によるファイル構造の変化を明らかにするために、非圧縮ファイルから圧縮ファイルへのオフセットをマッピングすることにより、ファイル要求が変更される。この例では、チャンク２および３に対する要求が、ディスクＩＯを処理するファイルシステムのスタックに送信される。次いで、ファイルシステムは、圧縮ファイル３１２の圧縮されたデータ（チャンク２および３）を返す。ＦＣＦプログラムは、返されたデータをインタセプトし、そのデータを解凍し、要求されなかった余分なデータを全て切り捨て、次いで、要求されたものとしてデータを返す。
【００３４】
次に図４〜図６を参照して、ＦＡＴボリュームにおける個々のファイルを圧縮する例示的なプロセスについて説明する。本明細書内で提示するルーチンの説明を読む際、様々な実施形態の論理動作は、（１）コンピューティングシステム上で実行される一連のコンピュータ実装動作すなわちプログラムモジュールとして、および／または（２）コンピューティングシステム内の相互接続されたマシンの論理回路または回路モジュールとして実装されることを理解されたい。実装は、コンピューティングシステムのパフォーマンス要件に応じて選択できる。したがって、図示して本明細書内で説明する実施形態を構成する論理動作は、操作、構造デバイス、動作、またはモジュールと様々に呼ばれる。これらの操作、構造デバイス、動作、またはモジュールは、ソフトウェア、ファームウェア、特殊用途デジタルロジック、およびこれらの任意の組合せで実装することができる。
【００３５】
図４は、読み出し要求を受信するプロセス４００を示している。開始動作後、プロセスは動作４１０に進み、動作４１０で、読み取り要求が受信される。読み取り要求は、圧縮ファイル内のデータまたは非圧縮ファイル内のデータに対して行うことができる。一実施形態にしたがうと、読み取り要求は、ファイルシステムに到達する前に、ＦＣＦプログラムによってインタセプトされる。
【００３６】
判定動作４２０に進み、要求されたデータを含むファイルを圧縮されているか否かに関して判定がなされる。一実施形態にしたがうと、ファイルは、ヘッダを含む場合、圧縮されている。
【００３７】
ファイルが圧縮されていなかった場合、プロセスは動作４３０に進み、動作４３０で、要求されたデータが、非圧縮ファイルから取り出される。次いで、プロセスは動作４６０に進み、動作４６０で、データを返す。
【００３８】
ファイルが圧縮されていた場合、プロセスは動作４４０に進み、動作４４０で、圧縮ファイルから要求されたデータの場所が探されて、要求されたデータが、圧縮ファイルから取り出される。一実施形態にしたがうと、圧縮ファイル内のヘッダは、圧縮ファイル内の要求されたデータにアクセスすべき場所を示すマッピング情報を含む。
【００３９】
動作４５０に進み、取り出されたデータが、指定された圧縮アルゴリズムを使用して解凍される。次いで、動作４６０に進み、動作４６０で、データが、要求元アプリケーションに返される。次いで、プロセスは終了動作に進み、他のアクションの処理に戻る。
【００４０】
図５は、書き込み要求を受信するプロセス５００を示している。開始動作後、プロセスは動作５１０に進み、動作５１０で、書き込み要求が受信される。書き込み要求は、圧縮ファイルにデータを書き込むよう要求するものであってもよいし、非圧縮ファイルにデータを書き込むよう要求するものであってもよいし、ＦＡＴボリュームに現在存在しないファイルにデータを書き込むよう要求するものであってもよい。
【００４１】
判定動作５２０に進み、書き込み要求が、すでにＦＡＴボリュームに存在するファイルに対して行われるか否かに関して判定がなされる。ファイルが存在しない場合、プロセスは動作５４０に進み、動作５４０で、ファイルが作成される（図６および図６に関する説明を参照）。一般に、ファイルは、圧縮ファイルまたは非圧縮ファイルとして作成される。
【００４２】
ファイルがすでに存在する場合、プロセスは判定動作５３０に進み、動作５３０で、ファイルが圧縮されているか否かに関して判定がなされる。ファイルが圧縮されていない場合、プロセスは動作５６０に進み、動作５６０で、非圧縮データがファイルに書き込まれる。
【００４３】
ファイルが圧縮されている場合、プロセスは動作５５０に進み、動作５５０で、書き込み要求に関連付けられたデータが、選択した圧縮アルゴリズムを使用して圧縮される。また、マッピング情報に対する全ての変更を含むように、ヘッダも更新される。次いで、プロセスは動作５６０に進み、動作５６０で、圧縮データがファイルに書き込まれる。
【００４４】
次いで、プロセスは終了ブロックに進み、他のアクションの処理に戻る。
【００４５】
図６は、ファイルを作成するプロセスを示している。開始動作後、プロセス６００は判定動作６１０に進み、動作６１０で、ファイルを圧縮すべきであるか否かに関して判定がなされる。一実施形態にしたがうと、除外リストをチェックして、ファイルを圧縮すべきであるか否かを判定する。ファイルを圧縮すべきでない場合、プロセスは動作６４０に進み、動作６４０で、非圧縮データが、新たなファイルに書き込まれる。
【００４６】
ファイルを圧縮すべきである場合、プロセスは動作６２０に進み、動作６２０で、選択した圧縮アルゴリズムを使用してデータが圧縮される。次いで、プロセスはオプションの動作６３０に進み、動作６３０で、ヘッダが作成される。上述したように、ヘッダは、ファイルの圧縮に関する情報と共に、マッピング情報も含む。
【００４７】
動作６４０に進み、圧縮データおよびヘッダ（含まれる場合）が、新たなファイルに書き込まれる。次いで、プロセスは終了動作に進み、他のアクションの処理に戻る。
【００４８】
上述の明細書、例、およびデータは、本発明の製造を完全に記述し、かつ本発明の構成を使用できるようにするものである。本発明の多くの実施形態が、本発明の趣旨および範囲から逸脱することなく可能であるので、本発明は、添付の特許請求の範囲内に示すものとする。
【図面の簡単な説明】
【００４９】
【図１】例示的なコンピューティングアーキテクチャを示す図である。
【図２】個々のファイルの圧縮を行うＦＡＴ圧縮システムを示す図である。
【図３】ＦＡＴボリュームにおける非圧縮ファイルと圧縮ファイルとの間のマッピングを示す図である。
【図４】読み取り要求を受信するプロセスを示す図である。
【図５】書き込み要求を受信するプロセスを示す図である。
【図６】ＦＡＴボリュームにファイルを作成するプロセスを示す図である。
【図１】
2009527847.tif 000003
【図２】
2009527847.tif 000004
【図３】
2009527847.tif 000005
【図４】
2009527847.tif 000006
【図５】
2009527847.tif 000007
【図６】
2009527847.tif 000008
【国際調査報告】
2009527847.tif 000009
2009527847.tif 000010