(57)【要約】本開示は、ファイルシステムボリュームに大きなファイルを記憶するための技術を説明する。いくつかの例では、本開示は、ファイルアロケーションテーブル（ＦＡＴ）ファイルシステムに認められた最大ファイルサイズよりも大きなファイルをＦＡＴファイルシステムにしたがってフォーマット化されたボリュームに記憶するための技術を説明する。本開示は、大きなファイルに関係するコールを取り扱うための技術を説明する。このように、本明細書において説明する技術は、後方互換性でありながらより大きなファイルサイズをサポートできる。【選択図】  図６Ａ
2020502704.tif 000002
【特許請求の範囲】
【請求項１】
ボリュームへファイルを書き込むための方法であって、
前記ファイルに関するディレクトリ表示を含んでいるディレクトリエントリを書き込むステップと、
前記ファイルのプロパティを示している文字を有する名前を含んでいる前記ディレクトリ内の１つ又は複数のディレクトリエントリを書き込むステップと
を含む方法。
【請求項２】
前記ファイルに関するディレクトリ表示は、前記ディレクトリが隠れシステムディレクトリであることを示しているディレクトリエントリを含む、請求項１に記載の方法。
【請求項３】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、特別な文字列によりファイルとして前記ディレクトリを識別しているラージファイルインジケータエントリを含む、請求項１に記載の方法。
【請求項４】
前記特別な文字列が、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌという文字列を含む、請求項３に記載の方法。
【請求項５】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、属性エントリ名の文字を使用している前記ファイルの属性を特定している属性エントリを含み、前記属性エントリ名が、Ｆ＄ｘｘ００００．０００という文字列にしたがってフォーマット化され、前記文字列のｘｘの文字が、前記ファイルの前記属性を示す、請求項１に記載の方法。
【請求項６】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、属性エントリ名の文字を使用している前記ファイルの属性を特定している属性エントリを含み、前記属性エントリ名が、Ｆ＄ｘｘ００００．０００という文字列にしたがってフォーマット化され、前記文字列のｘｘの文字が、前記ファイルの前記属性を示す、請求項４に記載の方法。
【請求項７】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、前記ファイルのサイズを特定しているサイズエントリを含み、前記ファイルの前記サイズが前記サイズエントリの前記名前により示される、請求項１に記載の方法。
【請求項８】
前記サイズエントリの前記名前が、ベース３２値を使用して前記ファイルの前記サイズを示す、請求項７に記載の方法。
【請求項９】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、前記ファイルのサイズを特定しているサイズエントリを含み、前記ファイルの前記サイズが前記サイズエントリの前記名前により示され、前記サイズエントリの前記名前が、ベース３２値を使用して前記ファイルの前記サイズを示す、請求項６に記載の方法。
【請求項１０】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、１つ又は複数のインデックスエントリを含む、請求項９に記載の方法。
【請求項１１】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、１つ又は複数のインデックスエントリを含み、インデックスエントリが、４，２９０，７７２，９９２バイトの最大ファイルサイズを含む、請求項１に記載の方法。
【請求項１２】
記憶された命令を含む非一時的なコンピュータ可読記憶媒体であって、実行したときに、デバイスの１つ又は複数のプロセッサに、
隠れシステムディレクトリとしてファイルに関するディレクトリ表示を書き込ませ、
前記ファイルのプロパティを示している文字を有する名前を含んでいる前記ディレクトリ内の１つ又は複数のディレクトリエントリを書き込ませる、
非一時的なコンピュータ可読記憶媒体。
【請求項１３】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌという特別な文字列によりファイルとして前記ディレクトリを識別しているラージファイルインジケータエントリを含む、請求項１２に記載の非一時的なコンピュータ可読記憶媒体。
【請求項１４】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、属性エントリ名の文字を使用している前記ファイルの属性を特定している属性エントリを含み、前記属性エントリ名が、Ｆ＄ｘｘ００００．０００という文字列にしたがってフォーマット化され、前記文字列のｘｘの文字が、前記ファイルの前記属性を示す、請求項１３に記載の非一時的なコンピュータ可読記憶媒体。
【請求項１５】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、前記ファイルのサイズを特定しているサイズエントリを含み、前記ファイルの前記サイズが前記サイズエントリの前記名前により示される、請求項１４に記載の非一時的なコンピュータ可読記憶媒体。
【請求項１６】
前記ディレクトリ内の前記１つ又は複数のディレクトリエントリが、１つ又は複数のインデックスエントリを含み、インデックスエントリが、４，２９０，７７２，９９２バイトの最大ファイルサイズを含む、請求項１５に記載の非一時的なコンピュータ可読記憶媒体。
【請求項１７】
ボリュームからファイルを読み込むための方法であって、
ディレクトリエントリ内に１つ又は複数のディレクトリエントリを含んでいるディレクトリエントリがファイルに関するディレクトリ表示であることを判断するステップと、
前記ディレクトリエントリ内の前記１つ又は複数のディレクトリエントリの名前に含まれた文字に基づいて前記ファイルのプロパティを判断するステップと、
前記文字の値に基づいて前記ファイルを読み込むステップと
を含む方法。
【請求項１８】
前記ディレクトリエントリ内に１つ又は複数のディレクトリエントリを含んでいるディレクトリエントリがファイルに関するディレクトリ表示であることを判断するステップは、前記ディレクトリエントリが隠れシステムディレクトリであることを判断するステップと、前記ディレクトリエントリ内の１つ又は複数のディレクトリエントリが特別な文字列を含んでいることを判断するステップとを含む、請求項１７に記載の方法。
【請求項１９】
前記特別な文字列が、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌを含む、請求項１８に記載の方法。
【請求項２０】
ディレクトリエントリ内に１つ又は複数のディレクトリエントリを含んでいるディレクトリエントリがファイルに関するディレクトリ表示であることを判断し、
前記ディレクトリエントリ内の前記１つ又は複数のディレクトリエントリの名前に含まれた文字に基づいて前記ファイルのプロパティを判断し、
前記文字の値に基づいて前記ファイルを読み込む
ように構成された１つ又は複数のプロセッサを備える、デバイス。
【請求項２１】
前記ディレクトリエントリ内に１つ又は複数のディレクトリエントリを含んでいるディレクトリエントリがファイルに関するディレクトリ表示であることを判断することは、前記ディレクトリエントリが隠れシステムディレクトリであることを判断することと、前記ディレクトリエントリ内の１つ又は複数のディレクトリエントリが特別な文字列を含んでいることを判断することとを含む、請求項２０に記載のデバイス。
【請求項２２】
前記特別な文字列が、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌを含む、請求項２１に記載のデバイス。
【請求項２３】
ファイルに関するディレクトリ表示に対するコールを取り扱うための方法であって、
前記ファイルに関する仮想ファイルオブジェクトを呼び出すステップと、
ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出すステップと、
前記仮想ファイルオブジェクトに関係するコールを受信するステップと、
前記それぞれのデータ構造のうちの１つに前記コールをリマッピングするステップと
を含む方法。
【請求項２４】
前記コールをリマッピングするステップが、前記それぞれのデータ構造のうちの１つに対する高次レイヤコールを呼び出すステップを含む、請求項２３に記載の方法。
【請求項２５】
ファイルに関するディレクトリ表示が隠れシステムディレクトリを含み、前記隠れシステムディレクトリのエントリ内のディレクトリエントリが、ファイルとして前記ディレクトリを識別している特別な文字列を含む、請求項２３に記載の方法。
【請求項２６】
前記特別な文字列が、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌを含む、請求項２５に記載の方法。
【請求項２７】
ファイルに関するディレクトリ表示に対するコールを取り扱うための方法であって、
前記ファイルに関する仮想ファイルオブジェクトを呼び出すステップと、
ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出すステップと、
前記仮想ファイルオブジェクトに関係するコールを受信するステップと、
前記それぞれのデータ構造のうちの１つに前記コールを変換するステップと
を含む方法。
【請求項２８】
前記コールを変換するステップが、前記それぞれのデータ構造のうちの１つに対する高次レイヤコールを呼び出さずにマッピング情報を判断するステップを含む、請求項２７に記載の方法。
【請求項２９】
ファイルに関するディレクトリ表示が隠れシステムディレクトリを含み、前記隠れシステムディレクトリのエントリ内のディレクトリエントリが、ファイルとして前記ディレクトリを識別する特別な文字列を含む、請求項２７に記載の方法。
【請求項３０】
前記特別な文字列が、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌを含む、請求項２９に記載の方法。
【請求項３１】
ファイルに関するディレクトリ表示に対するコールを取り扱うための方法であって、
前記ファイルに関する仮想ファイルオブジェクトを呼び出すステップと、
ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出さずに前記仮想ファイルオブジェクトに関するデータ構造を呼び出すステップと、
前記仮想ファイルオブジェクトに関係するコールを受信するステップと、
前記コールを取り扱うステップと
を含む方法。
【請求項３２】
ファイルに関するディレクトリ表示が隠れシステムディレクトリを含み、前記隠れシステムディレクトリのエントリ内のディレクトリエントリが、ファイルとして前記ディレクトリを識別する特別な文字列を含む、請求項３１に記載の方法。
【請求項３３】
前記特別な文字列が、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌを含む、請求項３２に記載の方法。
【請求項３４】
ファイルに関する仮想ファイルオブジェクトを呼び出し、
ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出し、
前記仮想ファイルオブジェクトに関係するコールを受信し、
前記それぞれのデータ構造のうちの１つに前記コールをリマッピングすること、又は前記それぞれのデータ構造のうちの１つに前記コールを変換することのうちの１つを実行することにより前記コールを取り扱う
ように構成された１つ又は複数のプロセッサを備える、デバイス。
【請求項３５】
前記コールをリマッピングすることが、前記それぞれのデータ構造のうちの１つに対する高次レイヤコールを呼び出すことを含む、請求項３４に記載のデバイス。
【請求項３６】
前記コールを変換することが、前記それぞれのデータ構造のうちの１つに対する高次レイヤコールを呼び出さずにマッピング情報を判断することを含む、請求項３４に記載のデバイス。
【請求項３７】
ファイルに関するディレクトリ表示が隠れシステムディレクトリを含み、前記隠れシステムディレクトリのエントリ内のディレクトリエントリが、ファイルとして前記ディレクトリを識別する特別な文字列を含み、前記特別な文字列が、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌを含む、請求項３４に記載のデバイス。
【請求項３８】
ファイルに関する仮想ファイルオブジェクトを呼び出し、
ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出さずに前記仮想ファイルオブジェクトに関するデータ構造を呼び出し、
前記仮想ファイルオブジェクトに関係するコールを受信し、
前記コールを取り扱う
ように構成された１つ又は複数のプロセッサを備えるデバイス。
【請求項３９】
ファイルに関するディレクトリ表示が隠れシステムディレクトリを含み、前記隠れシステムディレクトリのエントリ内のディレクトリエントリが、ファイルとして前記ディレクトリを識別する特別な文字列を含み、前記特別な文字列が、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌを含む、請求項３８に記載のデバイス。
【請求項４０】
記憶された命令を含んでいる非一時的なコンピュータ可読記憶媒体であって、実行したときに、デバイスの１つ又は複数のプロセッサに
ファイルに関する仮想ファイルオブジェクトを呼び出させ、
ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出させ、
前記仮想ファイルオブジェクトに関係するコールを受信させ、
前記それぞれのデータ構造のうちの１つに前記コールをリマッピングすること、又は前記それぞれのデータ構造のうちの１つに前記コールを変換することのうちの１つを実行することにより前記コールを取り扱わせる、
非一時的なコンピュータ可読記憶媒体。
【請求項４１】
前記コールをリマッピングすることが、前記それぞれのデータ構造のうちの１つに対する高次レイヤコールを呼び出すことを含む、請求項４０に記載の非一時的なコンピュータ可読記憶媒体。
【請求項４２】
前記コールを変換することが、前記それぞれのデータ構造のうちの１つに対する高次レイヤコールを呼び出さずにマッピング情報を判断することを含む、請求項４０に記載の非一時的なコンピュータ可読記憶媒体。
【請求項４３】
ファイルに関するディレクトリ表示が隠れシステムディレクトリを含み、前記隠れシステムディレクトリのエントリ内のディレクトリエントリが、ファイルとして前記ディレクトリを識別する特別な文字列を含み、前記特別な文字列が、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌを含む、請求項４０に記載の非一時的なコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0002]この開示は、ファイルシステムでの使用のためのシステム及び方法、特にファイルアロケーションテーブルに基づくファイルシステムを使用して大きなファイルを記憶するための技術に関する。
【関連出願】
【０００２】
[0001]この出願は、２０１６年１１月１４日出願の米国特許仮出願第６２／４２１，６６６号、２０１６年１２月６日出願の米国特許仮出願第６２／４３０，４４６号、及び２０１７年８月１１日出願の米国特許仮出願第６２／５４４，２８７号の恩恵を主張し、その各々は、その全体が参照により組み込まれている。
【背景技術】
【０００３】
[0003]ラップトップ又はデスクトップコンピュータ、タブレットコンピュータ、テレビ、ディジタルビデオレコーダ、セットトップボックス、ディジタルメディアプレーヤ、ビデオゲームデバイス、及び携帯電話機を含めデバイスは、データがどのようにコンピュータ可読媒体に記憶され、そこから検索されるかを制御するためにファイルシステムを利用することができる。例えば、デバイスは、定義されたファイルシステムにしたがって、メモリカード（例えば、標準容量（ＳＤＳＣ：Ｓｔａｎｄａｒｄ−Ｃａｐａｃｉｔｙ）、大容量（ＳＤＨＣ：Ｈｉｇｈ−Ｃａｐａｃｉｔｙ）と、エクステンディッド容量（ＳＤＸＣ：ｅＸｔｅｎｄｅｄ−Ｃａｐａｃｉｔｙ）フォーマットを含むセキュアディジタル（ＳＤ：Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、エンベデッドＭＭＣ（ｅＭＭＣ：ｅｍｂｅｄｄｅｄ  ＭｕｌｔｉＭｅｄｉａＣａｒｄ）を含むマルチメディアカード（ＭＭＣ：ＭｕｌｔｉＭｅｄｉａＣａｒｄ）、及びユニバーサルフラッシュ記憶（ＵＦＳ：Ｕｎｉｖｅｒｓａｌ  Ｆｌａｓｈ  Ｓｔｏｒａｇｅ）カード）、ハードディスクドライブ、並びに／又はユニバーサルシリアルバス（ＵＳＢ：Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ソリッドステートドライブ（いわゆる「フラッシュ」、「サム」、又は「ジャンプ」ドライブ）などの記憶デバイスへデータを読み込む及び／又は書き込むことができる。ファイルシステムのタイプは、例えば、拡張ファイルシステム（Ｅｘｔｅｎｄｅｄ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）（ｅｘｔ）に基づくファイルシステム、階層ファイルシステム（ＨＦＳ：Ｈｉｅｒａｒｃｈｉｃａｌ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）に基づくファイルシステム、ＸＦＳファイルシステムに基づくファイルシステム、Ｚファイルシステム（ＺＦＳ：Ｚ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）に基づくファイルシステム、新技術ファイルシステム（ＮＴＦＳ：Ｎｅｗ  Ｔｅｃｈｎｏｌｏｇｙ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）に基づくファイルシステム、並びにＦＡＴ１２、ＦＡＴ１６、ＦＡＴ３２、ｅｘＦＡＴ、及びトランザクショナルｅｘＦＡＴファイルシステムを含めファイルアロケーションテーブル（ＦＡＴ：Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ）ファイルシステムに基づくファイルシステムを含む。それぞれのデータオブジェクト（例えば、ファイル）は、ボリューム内の記憶デバイスに記憶されることがある。ファイルシステムは、最大ファイルサイズを指定することができる。いくつかのファイルシステムに許される現在の最大ファイルサイズは、理想的なものよりも小さいことがある。
【発明の概要】
【０００４】
[0004]一般に、本開示は、大きなファイルをファイルアロケーションテーブル（ＦＡＴ）に基づくファイルシステムボリュームに記憶するための技術を説明する。特に、本開示は、ファイルアロケーションテーブル（ＦＡＴ）ファイルシステムに許された最大ファイルサイズよりも大きなファイルをＦＡＴファイルシステムにしたがってフォーマット化されたボリュームに記憶するための技術を説明する。このように、本明細書において説明する技術は、ＦＡＴファイルシステムとの後方互換性を維持しながら大きなファイルサイズをサポートできる。本明細書において文書の参照による組み込みは、説明目的であり、本明細書において使用する用語に関して限定する及び／又は曖昧さを作り出すように解釈されるべきではないことに留意すべきである。例えば、１つの組み込まれた参考文献がもう１つの組み込まれた参考文献とは用語の異なる定義を与えるケースでは、及び／又は用語が本明細書において使用されるように、用語は、各々それぞれの定義を広く含む方法で及び／又は代替形態における特定の定義の各々を含む方法で解釈されるべきである。
【０００５】
[0005]開示の１つの例によれば、ボリュームへファイルを書き込むための方法は、上記ファイルに関するディレクトリ表示を含んでいるディレクトリエントリを書き込むステップと、上記ファイルのプロパティを示している文字を有する名前を含んでいる上記ディレクトリ内の１つ又は複数のディレクトリエントリを書き込むステップとを含む。
【０００６】
[0006]開示のもう１つの例によれば、デバイスは、ファイルに関するディレクトリ表示を含んでいるディレクトリエントリを書き込み、上記ファイルのプロパティを示している文字を有する名前を含んでいる上記ディレクトリ内の１つ又は複数のディレクトリエントリを書き込むように構成された１つ又は複数のプロセッサを備える。
【０００７】
[0007]開示のもう１つの例によれば、非一時的なコンピュータ可読記憶媒体は、記憶された命令を含み、実行したときに、デバイスの１つ又は複数のプロセッサに、ファイルに関するディレクトリ表示を含んでいるディレクトリエントリを書き込ませ、上記ファイルのプロパティを示している文字を有する名前を含んでいる上記ディレクトリ内の１つ又は複数のディレクトリエントリを書き込ませる。
【０００８】
[0008]開示のもう１つの例によれば、装置は、ファイルに関するディレクトリ表示を含んでいるディレクトリエントリを書き込むための手段と、上記ファイルのプロパティを示している文字を有する名前を含んでいる上記ディレクトリ内の１つ又は複数のディレクトリエントリを書き込むための手段とを備える。
【０００９】
[0009]開示のもう１つの例によれば、ボリュームからファイルを読み込むための方法は、ディレクトリエントリがファイルに関するディレクトリ表示であることをディレクトリエントリが示しているかどうかを判断するステップと、上記ディレクトリ内の１つ又は複数のディレクトリエントリが上記ファイルのプロパティを示している文字を有する名前を含んでいるかどうかを判断するステップと、上記文字の値に基づいて上記ファイルを読み込むステップとを含む。
【００１０】
[0010]開示のもう１つの例によれば、デバイスは、ディレクトリエントリがファイルに関するディレクトリ表示であることをディレクトリエントリが示しているかどうかを判断し、上記ディレクトリ内の１つ又は複数のディレクトリエントリが上記ファイルのプロパティを示している文字を有する名前を含んでいるかどうかを判断し、上記文字の値に基づいて上記ファイルを読み込むように構成された１つ又は複数のプロセッサを備える。
【００１１】
[0011]開示のもう１つの例によれば、非一時的なコンピュータ可読記憶媒体は、記憶された命令を含み、実行したときに、デバイスの１つ又は複数のプロセッサに、ディレクトリエントリがファイルに関するディレクトリ表示であることをディレクトリエントリが示しているかどうかを判断させ、上記ディレクトリ内の１つ又は複数のディレクトリエントリが上記ファイルのプロパティを示している文字を有する名前を含んでいるかどうかを判断させ、上記文字の値に基づいて上記ファイルを読み込ませる。
【００１２】
[0012]開示のもう１つの例によれば、装置は、ディレクトリエントリがファイルに関するディレクトリ表示であることをディレクトリエントリが示しているかどうかを判断するための手段と、上記ディレクトリ内の１つ又は複数のディレクトリエントリが上記ファイルのプロパティを示している文字を有する名前を含んでいるかどうかを判断するための手段と、上記文字の値に基づいて上記ファイルを読み込むための手段とを備える。
【００１３】
[0013]開示の１つの例によれば、ファイルに関するディレクトリ表示に対するコールを取り扱うための方法は、上記ファイルに関する仮想ファイルオブジェクトを呼び出すステップと、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出すステップと、上記仮想ファイルオブジェクトに関係するコールを受信するステップと、上記それぞれのデータ構造のうちの１つに上記コールをリマッピングするステップとを含む。
【００１４】
[0014]開示のもう１つの例によれば、デバイスは、ファイルに関する仮想ファイルオブジェクトを呼び出し、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出し、上記仮想ファイルオブジェクトに関係するコールを受信し、上記それぞれのデータ構造のうちの１つに上記コールをリマッピングするように構成された１つ又は複数のプロセッサを備える。
【００１５】
[0015]開示のもう１つの例によれば、非一時的なコンピュータ可読記憶媒体は、記憶された命令を含み、実行したときに、デバイスの１つ又は複数のプロセッサに、ファイルに関する仮想ファイルオブジェクトを呼び出させ、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出させ、上記仮想ファイルオブジェクトに関係するコールを受信させ、上記それぞれのデータ構造のうちの１つに上記コールをリマッピングさせる。
【００１６】
[0016]開示のもう１つの例によれば、装置は、ファイルに関する仮想ファイルオブジェクトを呼び出すための手段と、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出すための手段と、上記仮想ファイルオブジェクトに関係するコールを受信し、上記それぞれのデータ構造のうちの１つに上記コールをリマッピングするための手段とを備える。
【００１７】
[0017]開示の１つの例によれば、ファイルに関するディレクトリ表示に対するコールを取り扱うための方法は、上記ファイルに関する仮想ファイルオブジェクトを呼び出すステップと、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出すステップと、上記仮想ファイルオブジェクトに関係するコールを受信するステップと、上記それぞれのデータ構造のうちの１つに上記コールを変換するステップ（ｔｒａｎｓｌａｔｉｎｇ）とを含む。
【００１８】
[0018]開示のもう１つの例によれば、デバイスは、ファイルに関する仮想ファイルオブジェクトを呼び出し、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出し、上記仮想ファイルオブジェクトに関係するコールを受信し、上記それぞれのデータ構造のうちの１つに上記コールを変換するように構成された１つ又は複数のプロセッサを備える。
【００１９】
[0019]開示のもう１つの例によれば、非一時的なコンピュータ可読記憶媒体は、記憶された命令を含み、実行したときに、デバイスの１つ又は複数のプロセッサに、ファイルに関する仮想ファイルオブジェクトを呼び出させ、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出させ、上記仮想ファイルオブジェクトに関係するコールを受信させ、上記それぞれのデータ構造のうちの１つに上記コールを変換させる。
【００２０】
[0020]開示のもう１つの例によれば、装置は、ファイルに関する仮想ファイルオブジェクトを呼び出すための手段と、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出すための手段と、上記仮想ファイルオブジェクトに関係するコールを受信するための手段と、上記それぞれのデータ構造のうちの１つに上記コールを変換するための手段とを含む。
【００２１】
[0021]開示の１つの例によれば、ファイルに関するディレクトリ表示に対するコールを取り扱うための方法は、上記ファイルに関する仮想ファイルオブジェクトを呼び出すステップと、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出さずに上記仮想ファイルオブジェクトに関するデータ構造を呼び出すステップと、上記仮想ファイルオブジェクトに関係するコールを受信するステップと、上記コールを取り扱うステップとを含む。
【００２２】
[0022]開示のもう１つの例によれば、デバイスは、ファイルに関する仮想ファイルオブジェクトを呼び出し、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出さずに上記仮想ファイルオブジェクトに関するデータ構造を呼び出し、上記仮想ファイルオブジェクトに関係するコールを受信し、上記コールを取り扱うように構成された１つ又は複数のプロセッサを備える。
【００２３】
[0023]開示のもう１つの例によれば、非一時的なコンピュータ可読記憶媒体は、記憶された命令を含み、実行したときに、デバイスの１つ又は複数のプロセッサに、ファイルに関する仮想ファイルオブジェクトを呼び出させ、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出さずに上記仮想ファイルオブジェクトに関するデータ構造を呼び出させ、上記仮想ファイルオブジェクトに関係するコールを受信させ、上記コールを取り扱わせる。
【００２４】
[0024]開示のもう１つの例によれば、装置は、ファイルに関する仮想ファイルオブジェクトを呼び出すための手段と、ディレクトリに含まれた複数のサブファイルの各々についてそれぞれのデータ構造を呼び出さずに上記仮想ファイルオブジェクトに関するデータ構造を呼び出すための手段と、上記仮想ファイルオブジェクトに関係するコールを受信するための手段と、上記コールを取り扱うための手段とを備える。
【００２５】
[0025]１つ又は複数の例の詳細が、添付の図面及び下記の説明に記述されている。他の特徴、目的、及び利点は、説明及び図面から、並びに特許請求の範囲から明らかであろう。
【図面の簡単な説明】
【００２６】
【図１】本開示の１つ又は複数の技術を実施することができるコンピューティングデバイスの例を図示しているブロック図である。
【図２】本開示の１つ又は複数の技術を実施することができるコンピューティングデバイスのオペレーティングシステムの例を図示しているブロック図である。
【図３】本開示の１つ又は複数の技術による例のファイルシステムにしたがって定義されたボリュームの例を図示している概念図である。
【図４】本開示の１つ又は複数の技術によるディレクトリエントリレコードフォーマットの例を図示している概念図である。
【図５】本開示の１つ又は複数の技術によるファイルに関係するディレクトリエントリの例を図示している概念図である。
【図６Ａ】本開示の１つ又は複数の技術による大きなファイルに関係するディレクトリエントリの例を図示している概念図である。
【図６Ｂ】本開示の１つ又は複数の技術による大きなファイルに関係するディレクトリエントリの例を図示している概念図である。
【図７】本開示の１つ又は複数の技術によるディレクトリテーブルに含まれたディレクトリエントリの例を図示している概念図である。
【図８】本開示の１つ又は複数の技術による大きなデータオブジェクト用の書き込みディレクトリエントリの例を図示しているフローチャートである。
【図９】本開示の１つ又は複数の技術による大きなデータオブジェクト用の読み込みディレクトリエントリの例を図示しているフローチャートである。
【図１０】本開示の１つ又は複数の技術にしたがって呼び出されることがあるデータ構造の例を図示している概念図である。
【図１１Ａ】本開示の１つ又は複数の技術にしたがって呼び出されることがあるデータ構造の例を図示している概念図である。
【図１１Ｂ】本開示の１つ又は複数の技術にしたがって呼び出されることがあるデータ構造の例を図示している概念図である。
【図１２】本開示の１つ又は複数の技術による大きなデータオブジェクトに対するコールの取り扱いの例を図示しているフローチャートである。
【図１３】本開示の１つ又は複数の技術にしたがって呼び出されることがあるデータ構造の例を図示している概念図である。
【図１４】本開示の１つ又は複数の技術による大きなデータオブジェクトに対するコールの取り扱いの例を図示しているフローチャートである。
【発明を実施するための形態】
【００２７】
[0040]ユーザデータは、定義されたファイルシステムにしたがって記憶デバイスに配置され、体系化され、及び／又は管理されることがある。ファイルシステムは、ボリュームの構造及び必要条件を指定することができ、ここでボリュームは、ユーザデータを記憶し検索するために必要なデータ空間に対して定義された論理構造の集合である。ボリュームは、（１つ又は複数の）ブートレコード、（１つ又は複数の）ファイルアロケーションテーブル、他のデータ構造（例えば、アロケーションビットマップ及び実行記録）、並びにユーザデータを含むことができる。ユーザデータは、ディレクトリ及びファイル、並びに／又は類似のデータ構造を含むことができる。ディレクトリ、ファイル、及び／又は類似のデータ構造の各々は、データオブジェクト又はデータアイテムと一般に呼ばれることがある。ユニックス（Ｕｎｉｘ（登録商標））に基づくファイルシステムでは、アイノード（ｉｎｏｄｅ）という用語は、ファイル又はディレクトリデータオブジェクトを言及するために使用されることがある。本明細書において使用するように、アイノードという用語は、ユーザデータに関係するデータオブジェクトをより一般的に言及することがある。ユーザデータは、記憶デバイスの１つ又は複数のセクタに物理的に記憶されることがある。ファイルシステムは、セクタの数にしたがってクラスタ（又はアロケーションユニット）を定義することができ、ここでクラスタは、データオブジェクトに割り当てられることがあるメモリの最小の論理単位である。このように、１つ又は複数のクラスタが、記憶デバイスに記憶される各データオブジェクトに割り当てられる。（１つ若しくは複数の）ファイルアロケーションテーブル、（１つ若しくは複数の）アロケーションビットマップ、及び／又はファイルシステム内の類似の論理構造は、１つ又は複数の割り当てられたクラスタへのデータオブジェクトのマッピングを行い、それ自体アロケーションマッピング構造と呼ばれることがある。下記にさらに詳細に説明するように、ファイルシステムドライバは、アプリケーション及び／又はアプリケーションに関係するプロセスがデータオブジェクトを記憶デバイス上で修正させることを可能にすることができる。
【００２８】
[0041]ファイルシステムの例は、いわゆる（ＦＡＴ）ファイルシステム（例えば、ＦＡＴ１２、ＦＡＴ１６、及びＦＡＴ３２）を含む。ＦＡＴ３２ファイルシステムが、マイクロソフト拡張可能ファームウェアイニシアティブＦＡＴ３２ファイルシステム仕様書（Ｍｉｃｒｏｓｏｆｔ  Ｅｘｔｅｎｓｉｂｌｅ  Ｆｉｒｍｗａｒｅ  Ｉｎｉｔｉａｔｉｖｅ  ＦＡＴ３２  Ｆｉｌｅ  Ｓｙｓｔｅｍ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）（１．０３版、２０００年１２月６日）に記載されており、その全体が参照により組み込まれている。ファイルシステムは、最大ファイルサイズをサポートすることができる。例えば、下記にさらに詳細に説明するように、ＦＡＴ３２ファイルシステムは、ディレクトリエントリに４バイトファイルサイズフィールドを含み、したがって２３２（４，２９４，９６７，２９６）バイト（すなわち、４ＧｉＢ））の最大ファイルサイズをサポートする。４ＧｉＢの最大ファイルサイズは、いくつかのアプリケーション（例えば、高品質ビデオ録画）にとって不十分なことがある。ＦＡＴ３２ファイルシステムは、様々なオペレーティングシステムにより広くサポートされている有用なファイルシステムであり、したがって、ＦＡＴ３２ファイルシステムを利用しながらより大きな最大ファイルサイズのサポートを可能にすることは、有用なことがある。ｅｘＦＡＴファイルシステム、これはマイクロソフトｅｘＦＡＴ改訂版１．００ファイルシステム基本仕様書（Ｍｉｃｒｏｓｏｆｔ  ｅｘＦＡＴ  Ｒｅｖｉｓｉｏｎ  １．００  Ｆｉｌｅ  Ｓｙｓｔｅｍ  Ｂａｓｉｃ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）（第４リリース、２００９年１月１日）が４ＧｉＢよりも大きな最大ファイルシステムをサポートすることに留意すべきである。しかしながら、ｅｘＦＡＴファイルシステムは、ＦＡＴドライバと後方互換性ではなく、ｅｘＦＡＴ特有のフォーマッティング及びリペアツールを必要とする。さらに、予備ビット又は未使用ビットに対して特定の値を設定することによりＦＡＴファイルシステムのより大きなファイルサイズをサポートするための努力が行われてきていることに留意すべきである。これらの努力は、ドライバ及び他のツールが不注意に（又は意図的に）ビットを修正することがあり、以てより大きなファイルを破壊し、それ自体ＦＡＴ３２と後方互換的ではないので、理想的なものには届かない。さらに、ＦＡＴドライバ及び他のツールは、４ＧｉＢよりも長いＦＡＴチェーンを切り詰めることができる。
【００２９】
[0042]本開示は、４ＧｉＢよりも大きなファイルがＦＡＴボリューム、例えば、ＦＡＴ３２ボリュームに記憶されることを可能にするための技術を提供する。本明細書において説明する例の技術は、４ＧｉＢよりも大きなファイルがＦＡＴ３２ボリュームに記憶されることを可能にし、旧来のＦＡＴ３２ドライバ並びにフォーマッティング及びリペアツールと後方互換性である。すなわち、このような大きなファイルを除いて、ボリュームの残りは、標準ＦＡＴ３２ドライバにより依然としてアクセス可能である。下記にさらに詳細に説明するように、４ＧｉＢよりも大きなファイルは、ディレクトリ内に特定のタイプのディレクトリエントリをともなうディレクトリとして実装され、ここでは特定のタイプのディレクトリエントリが大きなファイルに関係する情報を提供する。したがって、旧来のＦＡＴ３２ドライバ及びツールは、ディレクトリとして大きなファイルを見るはずであり、通常のＦＡＴ３２ドライバは、同じ名前のディレクトリをリネームする及び／又は削除することにより依然として大きなファイルをリネームできる及び／又は削除できる。さらに、下記に詳細に説明するように、ファイルシステムドライバ及び／又はＦＡＴ３２ドライバ上で動作しているアプリケーションは、大きなファイルを表しているディレクトリ及びディレクトリ内の特定のタイプのディレクトリエントリを解析することにより、４ＧｉＢよりも大きなファイルを読み込みそして書き込むように構成されることがある。
【００３０】
[0043]図１は、本開示の１つ又は複数の技術を実施することができるコンピューティングデバイスの例を図示しているブロック図である。コンピューティングデバイス１００は、１つ又は複数のプロセッサ並びに複数の内部及び／又は外部記憶デバイスを含むことができる。記憶デバイスの例は、ファイルサーバ、ファイルトランスファプロトコル（ＦＴＰ：Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）サーバ、ネットワーク接続記憶（ＮＡＳ：ｎｅｔｗｏｒｋ  ａｔｔａｃｈｅｄ  ｓｔｏｒａｇｅ）デバイス、ローカルディスクドライブ、例えば、メモリカード及びＵＳＢメモリデバイスなどの脱着可能メモリデバイス、又はデータを記憶することが可能な任意の他のタイプのデバイス若しくは記憶媒体を含む。記憶媒体は、光学的記憶媒体（例えば、ＤＶＤ、ＣＤ−ＲＯＭ、等）、磁気記憶媒体、フラッシュメモリ、又は任意の他の好適なディジタル記憶媒体を含むことができる。本明細書において説明する技術がソフトウェアで部分的に実施されると、デバイスは、適切で非一時的なコンピュータ可読媒体にソフトウェア用の命令を記憶することができ、１つ又は複数のプロセッサを使用してハードウェアで命令を実行することができる。
【００３１】
[0044]コンピューティングデバイス１００は、コンピュータ可読媒体にデータを記憶する又はそこからデータを検索するように構成されたコンピューティングデバイスの例である。データは、例えば、アプリケーションファイル、文書ファイル、メディアファイル（オーディオファイル及び／又はビデオファイル）、等を含むことができる。コンピューティングデバイス１００は、有線通信及び／又は無線通信のために装備されることがあり、例えば、デスクトップ又はラップトップコンピュータ、モバイルデバイス、スマートフォン、携帯電話、タブレットデバイス、セットトップボックス、ＤＶＲ、監視システム、パーソナルゲームデバイス、ドローン、及び自動車インフォテインメントシステムなどのデバイスを含むことができる。図１に図示したように、コンピューティングデバイス１００は、（１つ又は複数の）中央処理ユニット１０２、システムメモリ１０４、システムインターフェース１１０、（１つ又は複数の）記憶デバイス１１２、（１つ又は複数の）入力／出力（Ｉ／Ｏ）デバイス１１４、及びネットワークインターフェース１１６を含む。図１に図示したように、システムメモリ１０４は、アプリケーション（ａｐｐｓ）１０６及びオペレーティングシステム１０８を含む。アプリケーション及びこれに関係する機能がユーザ空間として一般に呼ばれることがあることに留意すべきである。例のコンピューティングデバイス１００が別個の機能ブロックを有するように図示されているとはいえ、このような説明図は、説明の目的のためであり、特定のハードウェア又はソフトウェアアーキテクチャにコンピューティングデバイス１００を限定しないことに留意すべきである。コンピューティングデバイス１００の機能は、ハードウェア、ファームウェア及び／又はソフトウェア実装形態の任意の組合せを使用して実現されることがある。
【００３２】
[0045]（１つ又は複数の）中央処理ユニット１０２は、コンピューティングデバイス１００での実行のための機能及び／又はプロセス命令を実施するように構成されることがある。（１つ又は複数の）中央処理ユニット１０２は、本明細書において説明する複数の技術のうちの１つ又は複数を実施するための命令、コード、及び／又はデータ構造を検索すること及び処理することが可能であってもよい。命令は、システムメモリ１０４又は（１つ若しくは複数の）記憶デバイス１１２などのコンピュータ可読媒体に記憶されることがある。（１つ又は複数の）中央処理ユニット１０２は、ディジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、又は他の等価な集積回路若しくは単体論理回路を含むことができる。（１つ又は複数の）中央処理ユニット１０２は、１つ又は複数のマルチコア中央処理ユニットを含むことができる。（１つ又は複数の）中央処理ユニット１０２は、ページサイズにしたがって動作することができ、ここでページは仮想メモリの固定長連続ブロックを含む。中央処理ユニットアーキテクチャ用の一般的なページサイズは、４０９６バイト（すなわち、４キロバイト（ｋｉＢ））である。他の例のページサイズは、８ｋｉＢ、１６ｋｉＢ、３２ｋｉＢ、６４ｋｉＢ、等を含むことができる。
【００３３】
[0046]ページは、定義されたデータ構造に対応するデータを記憶することができる。例えば、下記にさらに詳細に説明するように、ページは、アイノードオブジェクト構造のインスタンスに対応するデータを記憶することができる。さらに、ページは、記憶デバイス上の物理ブロックに対応するデータを記憶することができる。記憶デバイス上の物理ブロックに対応するデータを記憶しているページは、ページキャッシュに含まれる。ページキャッシュのページは、ブロックを含むことができ、ここでブロックは記憶デバイスの１つ又は複数のセクタを表すことができる。セクタ当たりのバイトの数は、記憶デバイスのタイプに基づくことができ、ここでセクタは記憶デバイスの最小のアドレス指定可能単位を表している。例えば、一般的なセクタサイズは、ハードディスクドライブに関して５１２バイトであり、そしてＣＤ−ＲＯＭディスクは、２０４８バイトのセクタを有する。このように１つの例では、ページキャッシュの４ｋｉＢページは、４ブロックを含むことができ、ここで各ブロックは記憶デバイスの２つの５１２バイトセクタを表している。フラッシュメモリに基づく記憶デバイスに関して、ブロックという用語は、消去することができるデータの最小単位（すなわち、消去ブロック）を呼ぶことができることに留意すべきである。フラッシュメモリに基づく記憶デバイスに関して、消去ブロックは、多数のページを含み、ここでフラッシュメモリデバイスの文脈でのページは書き込まれることができるデータの最小単位を呼ぶ。典型的には、フラッシュメモリに基づく記憶デバイスでは、ページが書き込まれることがある前に、ページは消去される必要がある。フラッシュメモリに基づく記憶デバイスに関する典型的なブロックサイズ及びページサイズは、それぞれ４〜８ＭＢ（２＾２０バイト）及び８〜１６ｋｉＢである。本明細書において使用するように、セクタという用語は、フラッシュメモリデバイスのページを含むことができる。
【００３４】
[0047]システムメモリ１０４は、動作中にコンピューティングデバイス１００により使用されることがある情報を記憶するように構成されることがある。システムメモリ１０４は、非一時的な又は有体コンピュータ可読記憶媒体として説明されることがある。いくつかの例では、システムメモリ１０４は、一時的なメモリ及び／又は長期記憶装置を形成することができる。いくつかの例では、システムメモリ１０４又はその一部分は、不揮発性メモリとして記述されることがあり、他の例ではシステムメモリの一部分は、揮発性メモリとして記述されることがある。揮発性メモリの例は、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、及びスタティックランダムアクセスメモリ（ＳＲＡＭ）を含む。不揮発性メモリの例は、磁気ハードディスク、光ディスク、フロッピディスク、フラッシュメモリ、又は電気的プログラマブルメモリ（ＥＰＲＯＭ）若しくは電気的消去可能プログラマブル（ＥＰＲＯＭ）メモリの形態を含む。１つの例では、システムメモリ１０４は、内部ハードディスクドライブ及び／又は内部フラッシュメモリを含むことができる。
【００３５】
[0048]システムインターフェース１１０は、コンピューティングデバイス１００の構成要素同士の間の通信を可能にするように構成されることがある。１つの例では、システムインターフェース１１０は、１つのピアデバイスから別のピアデバイスへ又は記憶媒体へデータが転送されることを可能にする構造を備える。例えば、システムインターフェース１１０は、周辺機器相互接続（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）、周辺機器相互接続エクスプレス（ＰＣＩｅ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）バスプロトコル、プロプライエタリバスプロトコル、又はピアデバイスを相互接続するために使用されることがある構造の任意の他の形態をサポートするチップセットを含むことができる。
【００３６】
[0049]（１つ又は複数の）記憶デバイス１１２は、システムメモリ１０４とは異なる期間にわたり異なる量の情報を記憶するように構成されることがあるコンピューティングデバイス１００のメモリを表す。システムメモリ１０４と同様に、（１つ又は複数の）記憶デバイス１１２は、１つ又は複数の非一時的な又は有体コンピュータ可読記憶媒体をさらに含むことができる。（１つ又は複数の）記憶デバイス１１２は、内部メモリであっても外部メモリであってもよく、いくつかの例では，不揮発性記憶素子を含むことができる。（１つ又は複数の）記憶デバイスは、メモリカード（例えば標準容量（ＳＤＳＣ）、大容量（ＳＤＨＣ）、及びエクステンディッド容量（ＳＤＸＣ）フォーマットを含めセキュアディジタル（ＳＤ）メモリカード、エンベデッドＭＭＣ（ｅＭＭＣ：ｅｍｂｅｄｄｅｄ  ＭＭＣ）を含めマルチメディアカード（ＭＭＣ：ＭｕｌｔｉＭｅｄｉａＣａｒｄ）、及びユニバーサルフラッシュ記憶（ＵＦＳ：Ｕｎｉｖｅｒｓａｌ  Ｆｌａｓｈ  Ｓｔｏｒａｇｅ）カード）、外部ハードディスクドライブ、並びに／又は外部ソリッドステートドライブを含むことができる。（１つ又は複数の）記憶デバイス１１２に記憶されたデータは、例えば、ＦＡＴ１２、ＦＡＴ１６、ＦＡＴ３２及び／又は本明細書において説明する技術に基づくファイルシステムを含めプロプライエタリファイルシステムなどの定義されたファイルシステムにしたがって記憶されることがある。
【００３７】
[0050]（１つ又は複数の）Ｉ／Ｏデバイス１１４は、入力を受信し、コンピューティングデバイス１００用の出力を与えるように構成されることがある。入力は、例えば、タッチ感応スクリーン、トラックパッド、トラックポイント、マウス、キーボード、マイクロフォン、１つ若しくは複数のビデオカメラ、又は入力を受信するように構成されたいずれかの他のタイプのデバイスなどの入力デバイスから発生されることがある。出力は、例えば、スピーカ又はディスプレイデバイスなどの出力デバイスへ与えられることがある。いくつかの例では、（１つ又は複数の）Ｉ／Ｏデバイス１１４は、コンピューティングデバイス１００の外部であってもよく、例えば、ユニバーサルシリアルバスプロトコル（ＵＳＢ）などの標準化された通信プロトコルを使用してコンピューティングデバイス１００に動作可能に結合されてもよい。
【００３８】
[0051]ネットワークインターフェース１１６は、コンピューティングデバイス１００が１つ又は複数のネットワークを介して外部コンピューティングデバイスと通信することを可能にするように構成されることがある。ネットワークインターフェース１１６は、イーサネットカード（「イーサネット」は登録商標）などのネットワークインターフェースカード、光トランシーバ、無線周波数トランシーバ、又は情報を送信でき受信できるいずれかの他のタイプのデバイスであってもよい。ネットワークインターフェース１１６は、例えば、グローバルシステムモバイル通信（ＧＳＭ：Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ（登録商標））規格、符号分割多重接続（ＣＤＭＡ：ｃｏｄｅ  ｄｉｖｉｓｉｏｎ  ｍｕｌｔｉｐｌｅ  ａｃｃｅｓｓ）規格、第３世代パートナーシッププロジェクト（３ＧＰＰ：３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ  Ｐａｒｔｎｅｒｓｈｉｐ  Ｐｒｏｊｅｃｔ）規格、インターネットプロトコル（ＩＰ：Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）規格、ワイアレスアプリケーションプロトコル（ＷＡＰ：Ｗｉｒｅｌｅｓｓ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）規格、及び／又は複数の８０２．１１規格のうちの１つ若しくは複数などのＩＥＥＥ規格などの１つ若しくは複数の通信プロトコル、並びにこれらの様々な組合せにしたがって動作するように構成されることがある。
【００３９】
[0052]図１に図示したように、システムメモリ１０４は、アプリケーション１０６及びオペレーティングシステム１０８を含む。アプリケーション１０６は、コンピューティングデバイス１００内に実装される又はこれにより実行される任意のアプリケーションを含むことができ、コンピューティングデバイス１００の構成要素内に実装される若しくは含まれてもよく、構成要素により動作可能であってもよく、構成要素により実行されてもよく、及び／又は構成要素に動作可能に／通信可能につなげられてもよい。アプリケーション１０６は、コンピューティングデバイス１００の（１つ又は複数の）中央処理ユニット１０２に特定の機能を実行させることができる命令を含むことができる。アプリケーション１０６は、（１つ又は複数の）中央処理ユニット１０２に、例えば、システムメモリ１０４及び／又は（１つ若しくは複数の）記憶デバイス１１２などのコンピュータ可読媒体へデータを書き込ませる又はこれからデータを読み込ませることができる。アプリケーション１０６は、ｆｏｒループ、ｗｈｉｌｅループ、ｉｆ文、ｄｏループ、等などのコンピュータプログラミング文で表現されるアルゴリズムを含むことができる。
【００４０】
[0053]図１にさらに図示したように、アプリケーション１０６は、オペレーティングシステム１０８上で実行することができる。オペレーティングシステム１０８は、（１つ又は複数の）中央処理ユニット１０２及びコンピューティングデバイス１００の他のハードウェア構成要素とのアプリケーション１０６の対話を容易にするように構成されることがある。オペレーティングシステム１０８は、ラップトップ及びデスクトップにインストールされるように設計されたオペレーティングシステムであってもよい。例えば、オペレーティングシステム１０８は、ウィンドウズ（Ｗｉｎｄｏｗｓ）（登録商標）オペレーティングシステム、リナックス（Ｌｉｎｕｘ）（登録商標）、又はマック（Ｍａｃ）ＯＳ（登録商標）であってもよい。オペレーティングシステム１０８は、スマートフォン、タブレット、セットトップボックス、及び／又はゲーミングデバイスにインストールされるように設計されたオペレーティングシステムであってもよい。例えば、オペレーティングシステム１０８は、ウィンドウズ（登録商標）、リナックス、マックＯＳ、アンドロイド、ｉＯＳ、ウィンドウズモバイル（Ｗｉｎｄｏｗｓ  Ｍｏｂｉｌｅ）（登録商標）、又はウィンドウズフォーン（Ｗｉｎｄｏｗｓ  Ｐｈｏｎｅ）（登録商標）オペレーティングシステムであってもよい。技術が特定の例のオペレーティングシステムにしたがって説明されることがあるとはいえ、本明細書において説明する技術は、特定のオペレーティングシステムに限定されないことに留意すべきである。
【００４１】
[0054]図２は、本開示の１つ又は複数の技術を実施することができるコンピューティングデバイスのオペレーティングシステムの例を図示しているブロック図である。図２に図示したように、オペレーティングシステム１０８は、カーネル２０２を含む。１つの例では、カーネル２０２は、リナックスカーネルに基づくカーネルであってもよい。他の例では、カーネル２０２は、オペレーティングシステムの構成要素又は命令の部分集合であってもよい。図２に図示したように、カーネルは、デバイスドライバ２０４及びファイルシステムドライバ２０６を含む。デバイスドライバ２０４は、オペレーティングシステム１０８とハードウェアデバイスとの間の、例えば、システムインターフェース１１０などのインターフェースとして動作するように構成されることがある。ファイルシステムドライバ２０６は、アプリケーション１０６及び／又はオペレーティングシステム１０８と、例えばシステムメモリ１０４及び／又は（１つ又は複数の）記憶デバイス１１２などの記憶デバイスとの間の抽象概念のレイヤを与えるように構成されることがある。例えば、ファイルシステムドライバ２０６は、アプリケーションがファイル管理の態様を実行することを必要とせずにアプリケーションが（１つ又は複数の）記憶デバイス１１２の（例えば、ユーザ入力に応じて）データオブジェクトを修正することを可能にすることができる。データオブジェクトを修正することは、ファイルを作成すること、修正すること、リネームすること、移動させること、又は削除することから、ディレクトリを作成すること、修正すること、リネームすること、移動させること、又は削除することまでのボリューム内でのいずれかのタイプのデータ変更を含むことができる。１つの例では、ファイルシステムドライバ２０６は、本明細書において説明する技術にしたがったファイルアロケーションテーブル（ＦＡＴ）ファイルシステムに基づくファイルシステムにしたがってシステムメモリ１０４及び／又は（１つ又は複数の）記憶デバイス１１２にデータが記憶されることを可能にするように構成されることがある。いくつかの例では、ファイルシステムドライバ２０６は、多数のファイルシステム（例えば、ＦＡＴ及びｅｘＦＡＴファイルシステムの両者）を実装する１つのドライババイナリとして実装されてもよいことに留意すべきである。他の例では、ファイルシステムドライバ２０６は、それぞれのファイルシステム用に別々のバイナリドライバを含むことができる。さらに、オペレーティングシステム１０８及び／又はファイルシステムドライバ２０６は、例えば、（１つ又は複数の）記憶デバイス１１８などの記憶デバイスを検査し、誤りを訂正するようにさらに構成されることがある。ｆｓｃｋは、ファイルシステムにしたがって定義されたボリュームをチェックし任意選択で修復するために使用されることがあるリナックスにおいて利用可能なコマンドである。ｃｈｋｄｓｋは、ファイルシステムにしたがって定義されたボリュームをチェックし任意選択で修復するために使用されることがあるウィンドウズ（登録商標）オペレーティングシステムにおいて利用可能なコマンドである。
【００４２】
[0055]図３は、例のファイルシステムにしたがって定義されたボリュームの例を図示している概念図である。１つの例では、ボリューム３００は、本明細書において説明する技術を実行するＦＡＴファイルシステムを含め、ＦＡＴファイルシステム（例えば、ＦＡＴ１２、ＦＡＴ１６、及びＦＡＴ３２）にしたがって定義されることがある。いくつかの例ではボリューム３００がＦＡＴファイルシステムに関して説明されるとはいえ、本明細書において説明する技術は、必ずしもＦＡＴファイルシステムに限定される必要はなく、他のファイルシステムで使用されてもよいことに留意すべきである。さらに、例のボリューム３００がボリュームの例示的な例を表しており、簡潔さのために、ファイルシステムにしたがって定義されるボリュームの網羅的な説明としては意図されていないことに留意すべきである。ボリュームのさらなる詳細が、対応するファイルシステム仕様書に見出されることがある。例えば、ボリューム３００がＦＡＴ１２、ＦＡＴ１６、及びＦＡＴ３２ファイルシステムのうちの１つ又は複数に基づくファイルシステムにしたがって定義されるケースでは、ボリュームのさらなる詳細が、マイクロソフト拡張可能ファームウェアイニシアティブＦＡＴ３２ファイルシステム仕様書（１．０３版、２０００年１２月６日）に見出されることがある。
【００４３】
[0056]図３に図示した例では、ボリューム３００は、（１つ又は複数の）ブートレコード３０２、（１つ又は複数の）ファイルアロケーションテーブル３０４、及びデータ領域３０６を含む。（１つ又は複数の）ブートレコード３０２、（１つ又は複数の）ファイルアロケーションテーブル３０４、及びデータ領域３０６の各々は、セクタ値にしたがって、例えば、（１つ又は複数の）記憶デバイス１１２などの記憶デバイス上でアドレス指定可能なことがある。（１つ又は複数の）ブートレコード３０２は、ファイルシステムパラメータを記述しているデータエントリを含む。１つの例では、（１つ又は複数の）ブートレコード３０２は、ボリュームをブートストラップするためのデータ、ボリュームに関する基本ファイルシステムパラメータ、及び様々なエラーチェック情報を含む。（１つ又は複数の）ブートレコード３０２は、１つ又は複数のブートレコードを含むことができる。１つの例では、（１つ又は複数の）ブートレコード３０２は、プライマリブートレコード及びバックアップブートレコードを含み、ここでバックアップブートレコードはプライマリブートレコードのレプリカである。図３に図示したように、（１つ又は複数の）ブートレコード３０２に含まれた情報の例は、ボリューム長、ファイルアロケーションテーブル長、クラスタカウント、ルートディレクトリの第１のカウンタ、セクタ当たりのバイト、及びクラスタ当たりのセクタを含む。１つの例では、ボリューム長は、セクタ内のボリューム３００のサイズを指定する。１つの例では、ファイルアロケーションテーブル長は、セクタ内のファイルアロケーションテーブル３０４のサイズを指定する。１つの例では、クラスタカウントは、データ領域３０６に含まれたクラスタの数を指定する。図３に図示されていないとはいえ、（１つ又は複数の）ブートレコード３０２が割り当てられたクラスタの割合を示している情報及びボリューム３００がブートストラップされることを可能にする情報も含むことができることに留意すべきである。（１つ又は複数の）ブートレコード３０２は、ファイル及びディレクトリが修正されるときに更新されることがある。１つの例では、ルートディレクトリの第１のクラスタは、データ領域３０６内のルートディレクトリのセクタ位置を指定する。
【００４４】
[0057]１つの例では、セクタ当たりのバイトは、セクタに含まれるバイトの数を指定する。１つの例では、セクタ当たりのバイトの数は、２のべき乗の表記法で表されることがあり、セクタ当たり５１２バイトの最小値からセクタ当たり４０９６バイトの最大値までの範囲に及ぶことがある。１つの例では、クラスタ当たりのセクタは、クラスタ当たりのセクタの数を指定する。１つの例では、クラスタ当たりのセクタの最小数は、１であってもよく、クラスタ当たりのセクタの最大数は、３２ｋｉＢの最大クラスタサイズを形成することができる。いくつかの例では、クラスタのサイズは、ボリュームサイズ及び／又はオペレーティングシステムに依存してもよいことに留意すべきである。例えば、３２ギガバイト（ＧｉＢ）（ここで、１ＧｉＢは１，０２４３バイトである）よりも大きなボリュームとして定義される最大ボリュームについての規格対応ＦＡＴボリュームに関して、クラスタサイズは、３２ｋｉＢ（例えば、５１２バイトの６４セクタ又は４０９６バイトの８セクタ）であるＦＡＴについての最大クラスタサイズであるはずである。規格対応３２ＧｉＢ  ＦＡＴボリュームは、１６ｋｉＢのサイズを有するクラスタを使用するはずである。規格対応１６ＧｉＢ  ＦＡＴボリュームは、８ｋｉＢクラスタを使用するはずである。規格対応８ＧｉＢ  ＦＡＴボリュームは、４ｋｉＢクラスタを使用するはずである。ＦＡＴ３２がいくつかのケースでは３２ｋｉＢよりも大きなクラスタをサポートすることに留意すべきである。例えば、１２８ｋｉＢ及び２５６ｋｉＢのクラスタサイズが、５１２バイトよりも大きなセクタサイズをサポートされることがある。
【００４５】
[0058]（１つ又は複数の）ファイルアロケーションテーブル３０４は、１つ又は複数のファイルアロケーションテーブルを含むことができる。１つの例では、（１つ又は複数の）ファイルアロケーションテーブル３０４は、単一のファイルアロケーションテーブル３０４を含む。もう１つの例では、（１つ又は複数の）ファイルアロケーションテーブル３０４は、２つ以上のファイルアロケーションテーブルを含む。（１つ又は複数の）ファイルアロケーションテーブル３０４は、データ領域３０６のファイルなどのデータオブジェクトに割り当てられるクラスタの一連のクラスタ（また、クラスタのチェーンとも呼ばれる）を記述するために使用されることがある。図３に図示したように、ファイルアロケーションテーブルは、エントリ及びこのエントリに対応する値を含むことができる。図３に図示した例では、エントリ００は、メディアタイプを示している値を含み、エントリ０１は、プレースホルダ値を含む。エントリ０２からクラスタカウント＋１は、データオブジェクトに割り当てられたクラスタのシーケンスを記述している情報を与えることができる。１つの例では、エントリは、一連のクラスタにおける引き続くクラスタエントリを示している値、「悪い」クラスタを示している値、クラスタが使用されていないことを示している値、又は一連のクラスタの終わり（ＥＯＦ）を示している値を含むことができる。
【００４６】
[0059]図３に図示した例では、ルートファイルディレクトリはクラスタ０２で始まる。図３に図示したように、エントリ０２は、ルートディレクトリがいずれの追加のクラスタにも割り振られていないことを示すＥＯＦマーカを含む。図３に図示したように、エントリ０３は、０４のアドレスを含み、データオブジェクトについてのシーケンスの次のクラスタがクラスタ０４であることを示している。エントリ０４は、データオブジェクトがいずれの追加のクラスタにも割り当てられていないことを示すＥＯＦマーカを含む。このように、（１つ又は複数の）ファイルアロケーションテーブルは、データオブジェクトに割り当てられた一連のクラスタを特定するために使用されることがある。図３に図示した例では、データオブジェクトに割り当てられたクラスタが連続しているとはいえ、他の例では、データオブジェクトに割り当てられたクラスタが、連続していないクラスタ（例えば、エントリ０７を指しているエントリ０３、等）を含むことができることに留意すべきである。
【００４７】
[0060]データ領域３０６は、データオブジェクトを作るデータが記憶されるボリューム３００の領域であってもよい。いくつかの例では、データ領域３０６は、クラスタヒープと呼ばれることがある。データ領域３０６は、ファイルの１つ又は複数のタイプを表しているデータオブジェクトを含むことができる。例えば、データ領域３０６は、例えばマイクロソフトワード文書などのワードプロセシング文書、例えばＪＰＥＧファイルなどのメディアファイル、ビデオファイル、及び／又は他のタイプのファイルを含むことができる。上に説明したように、データ領域３０６の構成に関する情報は、（１つ又は複数の）ブートレコード３０２（例えば、クラスタカウント及び割り当てられたクラスタの割合）に含まれることがある。大部分のケースでは、（１つ又は複数の）ブートレコード３０２は、マウンティングイベントで典型的には更新されることに留意すべきである。上にさらに説明したように、データ領域３０６に記憶されるデータオブジェクトへの修正は、更新しようとする（１つ又は複数の）ファイルアロケーションテーブル３０４を必要とすることがある。図３に図示したように、データ領域は、ディレクトリテーブル及びファイルデータを含む。上に説明したように、ディレクトリテーブルは、ファイルとディレクトリとの間の関係を示すツリー構造を記述しているエントリを含むことができる。例えば、ディレクトリテーブルは、特定のファイルが親ディレクトリのサブディレクトリに記憶されることを示してもよい。
【００４８】
[0061]図３に図示した例では、ディレクトリテーブルは、ルートディレクトリ及び「ＶＡＣＡＴＩＯＮＳ」ディレクトリを含む。図３にさらに図示したように、ピクチャファイル（「ＰＩＣ＿Ａ．ＪＰＧ」）は、「ＶＡＣＡＴＩＯＮＳ」ディレクトリ内に含まれ、ビデオファイル（「ＭＹＭＯＶＩＥ．ＭＰ４」）は、「ＶＡＣＡＴＩＯＮＳ」ディレクトリ内に含まれる。図３に図示した例では、ルートディレクトリは、ボリューム及びデータ領域に関する一般的な情報を含むことができる。ディレクトリエントリがファイルシステムにしたがって定義されるときに異なるタイプの１つ又は複数のレコードを含むことができることに留意すべきである。１つ又は複数のレコードは、データ領域にデータオブジェクトをマッピングすることができる。例えば、レコードの第１のクラスタフィールドは、データの１つ又は複数のクラスタへのファイルの初期マッピングを行うことができる。ボリュームに記憶されたデータオブジェクトが修正されるときに、レコードが更新されてもよい。ファイルデータは、例えば、図３の例におけるＰＩＣ＿Ａ．ＪＰＧ及びＭＹＭＯＶＩＥ．ＭＰ４などのファイルを表しているデータを含むことができる。
【００４９】
[0062]上に説明したように、ディレクトリテーブルに含まれるディレクトリエントリは、異なるタイプの１つ又は複数のレコードを含むことができる。図４は、本開示の１つ又は複数の技術にしたがったディレクトリエントリレコードフォーマットの例を図示している概念図である。図４に図示した例のディレクトリエントリ４００は、ＦＡＴ１２、ＦＡＴ１６、及びＦＡＴ３２にしたがって定義されたディレクトリレコードに対応する。図４を参照して、ディレクトリエントリ４００は、３２バイトディレクトリエントリレコード４０２（これはショートディレクトリエントリレコードと呼ばれることがある）を含み、１つ又は複数の３２バイトロングネームディレクトリエントリレコード（複数可）４０４を含むことができる。（１つ又は複数の）ロングネームディレクトリエントリレコード４０４の数は、ファイル名の長さに基づいている。すなわち、ＦＡＴ３２では、１１文字よりも長いファイル名は、１つ又は複数のロングネームディレクトリエントリを必要とする。
【００５０】
[0063]表１は、ＦＡＴ３２にしたがったショートディレクトリエントリ用のディレクトリエントリ構造の概要を与える。簡潔さのために、ＦＡＴ３２にしたがったショートディレクトリエントリ用のディレクトリエントリ構造及びロングディレクトリエントリ用のディレクトリエントリ構造の完全な説明が本明細書中では与えられないことに留意すべきである。しかしながら、マイクロソフト拡張可能ファームウェアイニシアティブＦＡＴ３２ファイルシステム仕様書（１．０３版、２０００年１２月６日）を参照する。
【表１】
2020502704.tif 000003
【００５１】
[0064]表１に与えられ、図４に図示されたように、ファイルサイズを形成する４バイトフィールドが、ショートディレクトリエントリに含まれ、したがって、上に説明したように、ＦＡＴ３２は、２３２（４，２９４，９６７，２９６）バイト（すなわち、４ＧｉＢ）の最大ファイルサイズをサポートする。ＦＡＴ３２では、バイトに関する値が１６進数を含むことがあることに留意すべきである。表２は、２進値と１６進値との間の関係を与える。例えば、２Ｆの１６進値（これは０ｘ２Ｆ又は２Ｆｈと表されることがある）は、００１０  １１１１の２進値に対応するはずである。
【表２】
2020502704.tif 000004
【００５２】
[0065]表１に与えられ、図４に図示されたように、データオブジェクトの属性を与える１バイトフィールドが、ショートディレクトリエントリに含まれる。表３は、ＦＡＴ３２値において指定された属性の概要を与える。表３に図示したように、属性は、フラグを使用して示される。例えば、隠しファイル及び読出し専用ファイルは、００００  ００１１のバイト値又は０３ｈの１６進値を含むはずである。表３にさらに図示したように、特定のビット組合せは、ディレクトリエントリがロングディレクトリエントリであることを示している特別なケースを規定する。
【表３】
2020502704.tif 000005
【００５３】
[0066]表１に与えられ、図４に図示されたように、１バイトフィールドが、データオブジェクトの名前を形成するそれぞれの文字を与える。表４は、ＡＳＣＩＩ文字への１６進値のマッピングを与える。例えば、「ＰＩＣ＿Ａ」は、次の１６進値：５０ｈ  ４９ｈ  ４３ｈ  ５Ｆｈ  ４１ｈを使用して示されるはずである。ＦＡＴ３２では、使用されていない文字バイトが、値２０ｈを使用して指定されることに留意すべきである。
【表４】
2020502704.tif 000006
【００５４】
[0067]このように、ＦＡＴ３２ファイルシステムドライバは、特定のデータオブジェクトに関するショートネームディレクトリエントリ及びゼロ以上のロングネームディレクトリエントリの各フィールドについての値を読み込み書き込むことができる。図５は、ファイル「ＰＩＣ＿Ａ．ＪＰＧ」に関するディレクトリエントリの例を図示する。１つの例では、「ＰＩＣ＿Ａ．ＪＰＧ」は、上に説明した「ＶＡＣＡＴＩＯＮＳ」ディレクトリに含まれたディジタル画像ファイルであってもよく、ＦＡＴ３２により与えられる最大ファイルサイズ（すなわち、４ＧｉＢ）よりも小さなファイルサイズを有することができる。上に説明したように、ＦＡＴ３２ファイルシステムを利用しながらより大きな最大ファイルサイズのサポートを可能にすることは有用なことがある。例えば、上に説明した「ＶＡＣＡＴＩＯＮＳ」ディレクトリに含まれた「ＭＹＭＯＶＩＥ．ＭＰ４」は、ディジタルビデオファイルであってもよく、ＦＡＴ３２により与えられる最大ファイルサイズよりも大きなファイルサイズを有することができる（例えば、ＭＹＭＯＶＩＥ．ＭＰ４は４ＧｉＢよりも大きくてもよい）。本明細書において説明した技術によれば、４ＧｉＢよりも大きなファイルサイズが、ディレクトリとしてファイルを表すことによってＦＡＴ３２ボリュームに含まれることがあり、ここではディレクトリの名前が大きなファイルの名前であり、ディレクトリ内の特別なネームフィールド値（すなわち、特別な文字列）を有するディレクトリエントリを含んでいる。
【００５５】
[0068]図６Ａ〜図６Ｂは、本開示の１つ又は複数の技術による大きなファイルに関係するディレクトリエントリの例を図示している概念図である。図６Ａを参照して、ＭＹＭＯＶＩＥ．ＭＰ４に関して、ロングディレクトリエントリ及びショートディレクトリエントリを含むネームエントリが図示されている。図６Ａに図示した例では、ロングディレクトリエントリ及びショートディレクトリエントリのディレクトリエントリ構造は、ＦＡＴ３２に与えられた構造に対応する。図６Ａに図示したように、ショートネームディレクトリエントリは、ＤＩＲ＿Ａｔｔに関して１６ｈの値を含むことに留意すべきである。すなわち、このように、ＭＹＭＯＶＩＥ．ＭＰ４というファイルは、ＨＩＤＤＥＮ及びＳＹＳＴＥＭとして示されているＦＡＴ３２ディレクトリとして表される。このように、ファイルシステムドライバ及び／又はアプリケーションは、ＭＹＭＯＶＩＥ．ＭＰ４というディレクトリがＤＩＲＥＣＴＯＲＹ、ＨＩＤＤＥＮ及びＳＹＳＴＥＭフラグの値に基づく最大ファイルサイズよりも大きなファイルサイズを有するファイルのディレクトリ表示であり得ることを判断することができる。本開示の技術によれば、ファイルシステムドライバ（又はアプリケーション）がこのようなディレクトリに出会うと、ファイルシステムドライバは、ディレクトリの内容を読むことができて、ディレクトリが大きなファイルの表示であるかどうかをさらに判断することができる。図６Ａ〜図６Ｂは、大きなファイルのディレクトリ表示に含まれることがある例のディレクトリエントリを図示している。ＦＡＴ３２規格がディレクトリ内の語頭の「．」及び「．．」エントリを義務付けていることに留意すべきである。それとして、例のラージファイルインジケータエントリ、属性エントリ、サイズエントリ、及びインデックスエントリは、ディレクトリにおける語頭の「．」及び「．．」エントリに続くことがある。
【００５６】
[0069]図６Ａ〜図６Ｂを参照して、ラージファイルインジケータエントリ、属性エントリ、サイズエントリ、及びインデックスエントリの各々は、ＤＩＲ＿Ａｔｔに対して０７ｈの値を含み、それとしてＨＩＤＤＥＮ、ＳＹＳＴＥＭ及びＲＥＡＤ−ＯＮＬＹとフラグを立てられている。このように、標準ＦＡＴ３２ファイルシステムドライバは、ＨＩＤＤＥＮ、ＳＹＳＴＥＭ及びＲＥＡＤ−ＯＮＬＹファイルを含んでいるＨＩＤＤＥＮ及びＳＹＳＴＥＭディレクトリとして大きなファイルを処理するはずであることに留意すべきである。このように、標準ＦＡＴ３２ファイルシステムドライバは、ディレクトリをリネームすることにより大きなファイルをリネームでき、ディレクトリ及びそのコンテンツを消去することにより大きなファイルを消去できるはずである。しかしながら、ファイルがＲＥＡＤ−ＯＮＬＹ及びＳＹＳＴＥＭとしてフラグを立てられているという理由で、標準ＦＡＴドライバ又はアプリケーションが大きなファイルを修正し、したがって潜在的に破壊するはずであるというほんのわずかなリスクがある。
【００５７】
[0070]図６Ａを再び参照して、ラージファイルインジケータエントリは、特別な文字列を含む名前を有することにより大きなファイルの表示としてディレクトリを識別する。図６Ａに図示した例では、特別な文字列は、「Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌ」である。他の例では、他の特別な文字列が使用されてもよいことに留意すべきである。１つの例では、「Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌ」と名付けられたファイルが生成されると、これに割り当てられたクラスタを何も持たずに生成されることがあり、ゼロのファイルサイズを有することがある。しかしながら、大きなファイルが消去され、このケースでは何らかの割当てがファイルとともに解放される（ｆｒｅｅ）ことがない限り、見出された何らかの割当てが修正されないままであることに留意すべきである。
【００５８】
[0071]図６Ａを再び参照して、属性エントリは、属性エントリ名の文字を使用して大きなファイルの属性を特定する。図６Ａに図示した例では、属性エントリは、「Ｆ＄ｘｘ００００．０００」と名付けられ、ここで「ｘｘ」は大きなファイルのＦＡＴ属性を示している文字としての２桁の１６進数である。例えば、大きなファイルが読み込み専用ファイル、すなわち、表４に与えられたＡＳＣＩＩ文字に対する１６進値のマッピングにしたがって０ｘ０１である場合、「ｘｘ」は、下記の１６進値：３０ｈ  ３１ｈを含むはずである。１つの例では、「Ｆ＄ｘｘ００００．０００」の「００００．０００」構成要素は、エントリが作成されるときに「０」の文字に設定されるべきであり、ファイルが修正されるときに保存されるべきである文字としての７桁の１６進数である。他の例では、他の値が「００００．０００」構成要素に対して使用されてもよいことに留意すべきである。
【００５９】
[0072]図６Ｂを参照して、サイズエントリは、サイズエントリ名の文字を使用して大きなファイルのサイズを特定する。図６Ｂに図示した例では、サイズエントリは、「Ｓ＄ｘｘｘｘｘｘ．ｘｘｘ」と名付けられ、ここで「ｘｘｘｘｘｘ．ｘｘｘ」内のｘの各々はベース（Ｂａｓｅ）３２値を示している文字である。表５は、値０〜３１に対して文字をマッピングするために使用されることがあるベース３２アルファベットの例を与えている。いくつかの例では、小文字値ａ〜ｖが１０〜３１にさらにマッピングされてもよいことに留意すべきである。さらに、他の例では、他のベース３２アルファベットが使用されてもよいことに留意すべきである。９個のベース３２値を使用することは、３２ＴｉＢ弱である３５１８４３７２０８８８３１バイト（すなわち、３２９）の最大ファイルサイズを可能にする。ＦＡＴについての最大ボリュームサイズが５１２バイトセクタを用いて２ＴｉＢそして４０９６バイトセクタを用いて１６ＴｉＢであることに留意すべきである。他の例では、他の最大サイズが大きなファイルに対して使用されることがあることに留意すべきである。例えば、３２７の最大ファイルサイズが、大きなファイルに対して使用されることがある。この例では、「ｘｘｘｘｘｘ．ｘｘｘ」のｘのうちの２つが、大きなファイルに関する追加の情報（例えば、属性値）を与えるために使用されることがある。
【表５】
2020502704.tif 000007
【００６０】
[0073]図６Ｂを参照して、大きなファイルのディレクトリ表示は、ゼロ、１個、又はそれ以上のファイルインデックスエントリを含むことができる。図６Ｂに図示した例では、ファイルインデックスエントリは、「Ｕ＄ｘｘｘｘ」と名付けられ、ここで「ｘｘｘｘ」が大きなファイルの内部のサブファイルのインデックスを作る文字としての４桁の１６進数である。すなわち、１つの例では、「Ｓ＄ｘｘｘｘｘｘ．ｘｘｘ」により指定されるファイルサイズがゼロよりも大きい場合、ディレクトリは、１つ又は複数の「Ｕ＄ｘｘｘｘ」サブファイルを含む。４桁の１６進数は、最大で６５５３６個のサブファイルを可能にすることに留意すべきである。図６Ｂに図示した例では、大きなファイルは、２ＧｉＢサブファイルを使用してインデックスを付けられる。例えば、１ＴｉＢのサイズを有するファイルは、５１２個のサブファイルを含むはずである。他の例では、サブファイルの他のサイズ（例えば、１ＧｉＢ、３ＧｉＢ、等の最大４ＧｉＢまで）がインデックスを付けるために使用されてもよいことに留意すべきである。１つの例では、ファイルは、４，２９０，７７２，９９２バイト（すなわち、４ＧｉＢマイナス４ＭｉＢ）のサイズを有するサブファイルを使用してインデックスを付けられることがある。さらに、いくつかの例では、可変長のサブファイルサイズが利用可能にされてもよい。例えば、サイズエントリの「Ｓ＄ｘｘｘｘｘｘ．ｘｘｘ」名のｘのうちの１つが、サブファイルサイズ（例えば、サブファイルが１ＧｉＢ又は２ＧｉＢであるかどうか）を示すために使用されることがある。
【００６１】
[0074]２ＧｉＢサブファイルの例では、第１のインデックスエントリが、「Ｕ＄００００」と名付けられることがあり、大きなファイルの最初の２１４７４８３６４８バイトを含むことがあり、ここではその第１のバイトが大きなファイルの第１のバイトに対応し、その第２のバイトが大きなファイルの第２のバイトに対応する、等、そして第２のインデックスエントリが、「Ｕ＄０００１」と名付けられることがあり、その第１のバイトが大きなファイルにおいて２１４７４８３６４８のオフセットでのバイトに対応する、等。最後のインデックスエントリが、それ以前のインデックスファイルについてのファイルサイズよりも小さなファイルサイズを有してもよいことに留意すべきである。例えば、ＭＹＭＯＶＩＥ．ＭＰ４のファイルサイズが、５ＧｉＢ（すなわち、５３６８７０９１２０バイト）である場合、ＭＹＭＯＶＩＥ．ＭＰ４というディレクトリは、ベース３２  ５００００００としてファイルサイズを特定している「Ｓ＄００５００００．０００」と名付けられたファイル、並びに少なくとも３個のサブファイル、例えば、サイズ２ＧｉＢの「Ｕ＄００００」、サイズ２ＧｉＢの「Ｕ＄０００１」及びサイズ１ＧｉＢ以上の「Ｕ＄０００２」を含むはずである。図７は、ＭＹＭＯＶＩＥ．ＭＰ４が５ＧｉＢである例にしたがったディレクトリテーブルに含まれる例のディレクトリエントリを図示している概念図である。
【００６２】
[0075]１つの例では、「Ｓ＄ｘｘｘｘｘｘ．ｘｘｘ」により指定されたファイルサイズがゼロである場合、インデックスファイルが存在することも存在しないこともある。このケースでは、ファイルシステムドライバは、ファイルが存在するとしてもいずれかのファイル「Ｕ＄ｘｘｘｘ」を探す必要がなくてもよい。さらに、いくつかの例では、最後のサブファイルが指定されたファイルサイズよりも大きい場合、いくつかのケースでは、スペースは、余分に割り当てられたが使用されていないスペースとして扱われてもよく、ファイルシステム実装形態により解放される及び／又は切り詰められてもよいことに留意すべきである。同様に、指定されたファイルサイズに基づいて予想されるものよりも大きなインデックス数名をともなうさらなるファイルがある場合、いくつかのケースでは、これらのサブファイルは、使用されていないとして扱われることもあってもよく、ファイルシステム実装形態により削除されてもよい。
【００６３】
[0076]いくつかの例では、大きなファイルを表しているディレクトリが１つ又は複数のサブディレクトリを含むことができることに留意すべきである。例えば、大きなファイルのディレクトリの内部に２ＧｉＢサブファイルを有することの代わりに、ＤＩＲＥＣＴＯＲＹ、ＨＩＤＤＥＮ及びＳＹＳＴＥＭという属性を有するサブディレクトリが、サブファイルを含むことがある。例えば、「Ｓ＄ｘｘｘｘｘｘ．ｘｘｘ」というエントリは、１つ又は複数のサブファイルを示しているディレクトリであってもよい。サブディレクトリを含んでいることは、メインディレクトリが小さくなることを可能にするはずであり、したがってより迅速に解析されてもよいことに留意すべきである。いくつかの例では、実装形態は、ファイル又はサブファイルを含んでいるディレクトリのいずれかである「Ｓ＄ｘｘｘｘｘｘ．ｘｘｘ」というエントリをサポートすることができる。いくつかのケースでは、サブファイルの数は、「Ｓ＄ｘｘｘｘｘｘ．ｘｘｘ」がファイルであるかディレクトリであるかどうかを判断するために使用されることがある。
【００６４】
[0077]いくつかの例では、大きなファイルがサイズで４ＧｉＢ未満に切り詰められる（例えば、ビデオの一部分が削除される）場合、ファイルシステムドライバ（又はアプリケーション）実装形態は、ラージファイルディレクトリ表示を標準ＦＡＴ３２ファイルフォーマットへ変換することができることに留意すべきである。さらに、いくつかの例では、標準ＦＡＴ３２ファイルが４ＧｉＢ以上に拡張される（例えば、ビデオ録画アプリケーションが連続的に録画している）場合、ファイルシステムドライバ（又はアプリケーション）実装形態は、ファイルを上に説明したラージファイルディレクトリ表示フォーマットへ変換することができる。標準ＦＡＴドライバがこのような拡張操作に失敗することがあることに留意すべきである。
【００６５】
[0078]ファイルが４ＧｉＢよりも大きく拡張されるケースでは、ファイルシステムドライバ（又はアプリケーション）は、ファイルを表しているディレクトリに対してＦＡＴのクラスタを割り当てることができ、ディレクトリ中の「．」及び「．．」エントリ、並びに上に説明した「Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌ」、「Ｆ＄ｘｘ００００．０００」及び「Ｓ＄００００００．０００」エントリを設定することができる。ファイルシステムドライバは、「Ｕ＄ＸＸＸＸ」サブファイル用のエントリも作成することができ、各サブファイルに対してＲＥＡＤ−ＯＮＬＹ、ＨＩＤＤＥＮ、ＳＹＳＴＥＭにフラグを設定することができ、そしてファイルサイズを２ＧｉＢにさらに設定することができる（最後のサブファイルについてのファイルサイズがファイルサイズモジュロ２ＧｉＢに設定されることがあることを除く）。ファイルシステムドライバは、各サブファイルについての第１のクラスタフィールド（すなわち、１ｓｔ  Ｃｌｕｓｔｅｒ  Ｈｉｇｈ及び１ｓｔ  Ｃｌｕｓｔｅｒ  Ｌｏｗ）を対応するＦＡＴチェーンフラグメントの対応する第１のクラスタ値にその時には設定することができる（すなわち、Ｕ＄００００が変換されるべきファイルから第１のクラスタを取得し、そしてＵ＄０００１がオリジナルファイルの内部の２ＧｉＢのオフセットでのクラスタに設定された第１のクラスタを取得する、等）。ファイルシステムドライバは、各２ＧｉＢ境界のところにＥｎｄ  Ｏｆ  Ｃｈａｉｎターミネータを挿入するファイルに対して、オリジナルの第１のクラスタのところで始まるオリジナルファイルのクラスタチェーンをその時には分割することができる。この事例では、現在は多数のチェーン、例えば、ファイルの最初の２ＧｉＢを含んでいる１つの２ＧｉＢ  ＦＡＴチェーン及びファイルのさらなる２ＧｉＢ部分を含んでいる１つ又は複数のさらなるＦＡＴチェーンがあることに留意すべきである。ファイルシステムドライバは、次いで、ファイルに関する第１のクラスタフィールドをディレクトリに関する上に割り当てたクラスタへ変更することができ、ファイルサイズをゼロに設定することができ（ＦＡＴ３２のディレクトリがゼロとしてそれ自体のサイズを記録する）、そしてフラグをＤＩＲ、ＨＩＤＤＥＮ、ＳＹＳＴＥＭに設定することができ、そしてそれとして、変換を完了する。
【００６６】
[0079]ファイルが４ＧｉＢ未満に切り詰められるケースでは、ファイルシステムドライバ（又はアプリケーション）は、ＦＡＴチェーンを連結することによりクラスタチェーンを更新することができる。例えば、サブファイルＵ＄００００及びＵ＄０００１は、Ｕ＄００００のＥｎｄ  ｏｆ  ＣｈａｉｎターミネータをＵ＄０００１の第１のクラスタ値で置き換えることにより連結されることがある。サブファイルクラスタチェーンが連結された後で、ファイルシステムドライバは、ラージファイルディレクトリに関する第１のクラスタフィールドをＵ＄００００の第１のクラスタへ変更することができ、ラージファイルディレクトリ内のファイルサイズを（Ｓ＄００００００．０００エントリからの）ラージファイルサイズに設定することができ、そしてラージファイルディレクトリ内のフラグをＦ＄ｘｘ００００．０００エントリにより与えられる値に設定することができる。ファイルシステムドライバは、（１つ又は複数の）もはや使用されていないディレクトリクラスタをその時には解放することができる。
【００６７】
[0080]上に説明したように、オペレーティングシステム１０８及び／又はファイルシステムドライバ２０６は、ファイルシステム仕様書により定義されたボリュームにしたがって（１つ又は複数の）記憶デバイス１１８などの記憶デバイスにデータを記憶するように構成されることがある。１つの例では、オペレーティングシステム１０８及び／又はファイルシステムドライバ２０６は、クラスタを割り当て、クラスタの割当てを解除し、データオブジェクトを作成し、データオブジェクトを削除し、及び／又はデータオブジェクトをリネームするように構成されることがある。上に説明したように、オペレーティングシステム１０８及び／又はファイルシステムドライバ２０６は、１つ又は複数のアプリケーションにより受信された命令に基づくボリュームにしたがって記憶デバイスにデータを記憶させるように構成されることがある。１つの例では、オペレーティングシステム１０８及び／又はファイルシステムドライバ２０６は、本明細書において説明した技術のうちの１つ又は複数にしたがって大きなファイルを記憶するように構成されることがある。
【００６８】
[0081]図８は、本開示の１つ又は複数の技術にしたがって大きなデータオブジェクトに関するディレクトリエントリを書き込むことの例を図示しているフローチャートである。フローチャート８００がファイルシステムドライバ２０６に関して説明されているとはいえ、図８に図示した技術は、コンピューティングデバイス１００及びその構成要素の任意の組合せにより実行されてもよいことに留意すべきである。さらに、本明細書において説明した技術は、標準ＦＡＴドライバの上で動作しているアプリケーションにより実施されることがある。ファイルシステムドライバ２０６は、ファイル書き込みコマンドを受信する（８０２）。ファイルシステムドライバ２０６は、ファイルサイズが最大ファイルサイズよりも大きいかどうかを判断する（８０４）。例えば、ファイルシステムドライバ２０６は、ファイルサイズがＦＡＴ３２により与えられる４ＧｉＢサイズよりも大きいかどうかを判断する。ファイルサイズが最大ファイルサイズよりも大きくないと判断すると、ファイルシステムドライバ２０６は、旧来のファイルシステムにしたがってディレクトリエントリを書き込むことができる（８０６）。例えば、ファイルサイズがＦＡＴ３２により与えられる４ＧｉＢサイズよりも大きくないとファイルシステムドライバ２０６が判断する場合、ファイルシステムドライバは、上に説明したように、ＦＡＴ３２により与えられるようなショートネーム及びゼロ以上のロングネームディレクトリエントリを書き込むことができる。
【００６９】
[0082]ファイルサイズが最大ファイルサイズよりも大きいと判断すると、ファイルシステムドライバ２０６は、ディレクトリ表示にしたがってファイルに関するディレクトリエントリを書き込むことができる（８０８）。例えば、ファイルサイズがＦＡＴ３２により与えられる４ＧｉＢサイズよりも大きいとファイルシステムドライバ２０６が判断する場合、ファイルシステムドライバ２０６は、上に説明したように、ファイルに関するＨＩＤＤＥＮ及びＳＹＳＴＥＭフラグを有するディレクトリを示しているディレクトリエントリを書き込むことができる。ファイルシステムドライバ２０６は、ファイルディレクトリに１つ又は複数のディレクトリエントリを書き込むことができる（８１０）。例えば、ファイルシステムドライバ２０６は、上に説明したように、ファイルのプロパティを示している特別な文字列を有するディレクトリエントリ及びサブファイルに対応するゼロ以上のエントリを書き込むことができる。このように、コンピューティングデバイス１００は、標準ファイルシステムを使用して大きなファイルを記憶するように構成されたデバイスの例を表している。
【００７０】
[0083]図９は、本開示の１つ又は複数の技術にしたがって大きなデータオブジェクトに関するディレクトリエントリを読み込むことの例を図示しているフローチャートである。フローチャート９００がファイルシステムドライバ２０６に関して説明されているとはいえ、図９に図示した技術は、コンピューティングデバイス１００及びその構成要素の任意の組合せにより実行されてもよいことに留意すべきである。ファイルシステムドライバ２０６は、ディレクトリエントリレコードを読み込む（９０２）。データオブジェクトがディレクトリであることをディレクトリエントリレコードが示しているかどうか及びＨＩＤＤＥＮ及びＳＹＳＴＥＭフラグが設定されているかどうかを、ファイルシステムドライバ２０６は判断する（９０４）。データオブジェクトがディレクトリであり、設定されたＨＩＤＤＥＮ及びＳＹＳＴＥＭフラグを有することをディレクトリエントリレコードが示すと判断すると、ファイルシステムドライバ２０６は、ディレクトリ内のディレクトリエントリを読み込む（９０６）。エントリが特別な文字列を含んでいる名前を有するかどうかを、ファイルシステムドライバ２０６は判断する（９０８）。例えば、上に説明したように、エントリが、ラージファイルインジケータ、属性エントリ、サイズエントリ、及び／又はインデックスエントリのうちのいずれかを含んでいるかどうかを、ファイルシステムドライバ２０６は判断する。エントリが特別な文字列を含んでいる名前を有することを判断すると、ファイルシステムドライバ２０６は、大きなファイルとしてディレクトリを扱うことができる（９１０）。例えば、ファイルシステムドライバ２０６は上に説明したようにインデックスエントリを使用することができ、大きなファイルを形成しているサブファイルを読み込むことができる。このように、コンピューティングデバイス１００は、旧来のファイルシステムを使用して大きなファイルを記憶するように構成されたデバイスの例を表している。
【００７１】
[0084]上に説明したように、カーネル２０２は、リナックスカーネルに基づくカーネルであってもよい。リナックスカーネルは、規定された方法及びデータ構造を含む仮想ファイルシステムを含む。仮想ファイルシステムは、アプリケーションが様々な定義されたファイルシステムと相互運用することを可能にする抽象概念として働く。Ｌｉｎｕｘ  Ｋｅｒｎｅｌに関して定義されたＶｉｒｔｕａｌ  Ｆｉｌｅｓｙｓｔｅｍ（又はＶｉｒｔｕａｌ  Ｆｉｌｅ  Ｓｗｉｔｃｈ）は、次のデータ構造：スーパーブロックオブジェクト、アイノードオブジェクト、デントリオブジェクト、及びファイルオブジェクトを含む。Ｌｉｎｕｘ  Ｋｅｒｎｅｌに関して定義されたＶｉｒｔｕａｌ  Ｆｉｌｅｓｙｓｔｅｍが他のタイプのオブジェクトを含むことに留意すべきであり、簡潔さのために、Ｌｉｎｕｘで定義されたＶｉｒｔｕａｌ  Ｆｉｌｅｓｙｓｔｅｍの完全な論議は、本明細書において詳細には説明しない。しかしながら、Ｌｉｎｕｘ  Ｋｅｒｎｅｌ  Ｏｒｇａｎｉｚａｔｉｏｎにより維持される文書を参照する。さらに、本明細書において説明した技術が、様々なファイルシステム抽象概念に一般に適用可能であってもよいことに留意すべきである。さらに、本明細書において使用するように、仮想ファイルシステムという用語は、オペレーティングシステム（及び／又はアプリケーション）とサードパーティのファイルシステムとの間の抽象概念を一般に参照するために使用されてもよいことに留意すべきである。例えば、マックＯＳ／アンドロイド／リナックス用のＦＵＳＥ及びウィンドウズフィルタドライバは、仮想ファイルシステムの例と考えられることがある。
【００７２】
[0085]リナックスでは、スーパーブロックオブジェクトのインスタンスは、特定のマウントされたファイルシステムボリュームを表す。例えば、スーパーブロックオブジェクトは、コンピューティングデバイスにマウントされた記憶デバイスに記憶されたＦＡＴボリュームを表すことができる。スーパーブロックオブジェクトは、識別子、ファイルシステムタイプ（例えば、ＦＡＴ３２）及びアイノードのリストを含むことができる。アイノードオブジェクトのインスタンスは、特定のデータオブジェクトを表す（すなわち、アイノードオブジェクトはファイル又はディレクトリを操作するために必要なすべての情報を含む）。例えば、アイノードオブジェクトは、記憶デバイスに記憶されたＦＡＴボリュームに含まれたユーザファイルを表すことができる。アイノードは、数により特定されることがあり、ファイルサイズなどのデータオブジェクトのプロパティを示すことができる。さらに、アイノードは、関連するマッピングを含み（すなわち、アイノードがアドレス空間オブジェクトを参照し）、これがデバイスメモリのページにアイノードをマッピングする。例えば、４８ＫｉＢファイルに対応するアイノードは、ファイルのデータをページキャッシュに含まれた１２個の４ＫｉＢへマッピングする関連のマッピングを含むことができる。デントリ（すなわち、ディレクトリエントリ）オブジェクトのインスタンスは、ディレクトリに特有の動作（例えば、パスネームルックアップ）を実行するためのパス内の特定の構成要素を表す。ファイルオブジェクトのインスタンスは、プロセス（例えば、アプリケーション読み込みに関係するシステムコール）により開かれたファイルを表す。すなわち、ファイルオブジェクトは、オープンファイルのインメモリ表示である。ファイルオブジェクトがオープン（）システムコールに応じて作成され、クローズ（）システムコールに応じて破壊されることに留意すべきである。さらに、多数のプロセスが同時にファイルを開くことができ、操作できるという理由で、同じファイルに存在する多数のファイルオブジェクトがあってもよい。ファイルオブジェクトは、デントリに指し戻し、これが順にオープンファイルを実際に表すアイノードに指し戻す。本明細書において使用するように、コールという用語は、プロセス、システムコール、タスク、機能、スレッド、等を呼ぶために使用されてもよいことに留意すべきである。
【００７３】
[0086]リナックスでは、アプリケーションがファイルを開くためにプロセスを始めると（例えば、ファイルオブジェクトを開くためにシステムコールを呼び出すと）、リナックスカーネルは、（例えば、ファイルオブジェクトに対応するデントリ、アイノード、及びアドレス空間を使用して）ページキャッシュを検索して、データがページキャッシュに記憶されているかどうかを判断する。データがページキャッシュに記憶される場合、データは、記憶デバイスにアクセスせずにページキャッシュから読み込まれる。データがページキャッシュに記憶されていない場合、データは、記憶デバイスから読み込まれ、後のアクセスのためにページキャッシュに追加される。アプリケーションがデータをファイルに書き込むプロセスを始める場合、ページキャッシュのデータが更新される。データがページキャッシュにおいて更新されると、記憶デバイスに記憶された対応するデータは期限切れになる。このケースでは、記憶デバイスはバッキングストアと呼ばれることがあることに留意すべきである。ページキャッシュのページは、バッキングストアのデータのセクタと同期されず、汚れている（ｄｉｒｔｙ）と言われる。汚れたページは、バッキングストアに結局は書き戻される。
【００７４】
[0087]上に説明したように、ファイルシステムドライバ２０６は、アプリケーション及び／又はオペレーティングシステムと記憶デバイスとの間の抽象概念のレイヤを与えるように構成されることがある。Ｌｉｎｕｘ  Ｋｅｒｎｅｌ及びＦＡＴ３２ファイルシステムのケースでは、ファイルシステムドライバ２０６は、Ｖｉｒｔｕａｌ  Ｆｉｌｅｓｙｓｔｅｍのために定義されたデータ構造を使用してＬｉｎｕｘ  ＫｅｒｎｅｌへＦＡＴ３２ボリュームを提示する。さらに、Ｖｉｒｔｕａｌ  Ｆｉｌｅｓｙｓｔｅｍオブジェクトのために定義された方法がコールされると、ファイルシステムドライバ２０６は、Ｌｉｎｕｘ  Ｋｅｒｎｅｌに隠される方式で方法を実施する。このように、ファイルシステムドライバが、アプリケーション及び／又はオペレーティングシステムと記憶デバイスとの間の抽象概念として働くために実装されることがある様々な方法がある。
【００７５】
[0088]図１０は、本開示の１つ又は複数の技術にしたがって呼び出されることがあるデータ構造の例を図示している概念図である。図１０に図示した例は、プロセスにより開かれたファイルのインスタンス（すなわち、ＭＹＭＯＶＩＥ．ＭＰ４）に関する仮想ファイルシステムを、ファイルシステムドライバ２０６がどのように呼び出すことができるかの例を図示している。図１０に図示したように、ＭＹＭＯＶＩＥ．ＭＰ４は、ディレクトリテーブル内の単一エントリとして表されることに留意すべきである。すなわち、例えば、ＭＹＭＯＶＩＥ．ＭＰ４は、ＦＡＴ３２ボリュームに含まれた４ＧｉＢ未満のサイズを有するファイルである。このように、図１０に図示した例では、ファイルシステムドライバ２０６は、単一デントリオブジェクト、単一アイノードオブジェクト、及び単一アドレス空間オブジェクトを使用して仮想ファイルシステムへＭＹＭＯＶＩＥ．ＭＰ４を提示する。このケースでは、（ＭＹＭＯＶＩＥ．ＭＰ４）に対する動作は、単一デントリオブジェクト、単一アイノードオブジェクト、及び単一アドレス空間オブジェクトに対応する方法コールを進めることができる。すなわち、図１０に図示したように、プロセスが読み込まれたユーザ空間を含むケースでは、仮想ファイルシステムは、ファイルシステムドライバ２０６により実施される読み込み方法を呼び出す読出しコールを使用してコールを最初に取り扱うことができる。特に、ファイルシステムドライバ２０６は、仮想ファイルシステムデータ構造（例えば、単一デントリオブジェクト、単一アイノードオブジェクト、及び単一アドレス空間オブジェクト）により与えられるマッピングを（利用可能であれば）使用してページキャッシュからファイルデータを読み込むことができる。
【００７６】
[0089]上に説明したように、本明細書において説明した技術によれば、ラージファイルインジケータエントリ、属性エントリ、サイズエントリ及びディレクトリ内の１つ又は複数のサブファイル用のエントリを含んでいるディレクトリとしてファイルを表すことによりＦＡＴ３２ファイルシステムを利用しながらより大きな最大ファイルサイズのサポートを可能にすることは有用であり得る。４ＧｉＢよりも大きなファイルがラージファイルインジケータエントリ、属性エントリ、サイズエントリ及びＦＡＴ３２ボリューム内の１つ又は複数のサブファイル用のエントリを含んでいるディレクトリとして表されるケースでは、ファイルシステムドライバがアプリケーション及び／又はオペレーティングシステムと記憶デバイスとの間の抽象概念として働くために実装されてもよい様々な方法があることに留意すべきである。下記にさらに詳細に説明する技術は、４ＧｉＢよりも大きなファイルがラージファイルインジケータエントリ、属性エントリ、サイズエントリ及びディレクトリ内の１つ又は複数のサブファイル用のエントリを含んでいるディレクトリとして表されるケースにおいてファイルシステムドライバを実装することの例を与える。本明細書において説明する実装技術は、デバイス効率を向上させることができ、及び／又はデバイス故障の場合にファイル破壊の可能性を緩和することができることに留意すべきである。
【００７７】
[0090]図１１Ａ〜図１１Ｂ及び図１３は、本開示の１つ又は複数の技術にしたがって呼び出されることがあるデータ構造の例を図示している概念図である。図１１Ａ〜図１１Ｂ及び図１３に図示した例では、ＭＹＭＯＶＩＥ．ＭＰ４がラージファイルインジケータエントリ、属性エントリ、サイズエントリ及びディレクトリ内の１つ又は複数のサブファイル用のエントリを含んでいるディレクトリとして表されることに留意すべきである。すなわち、例えば、ＭＹＭＯＶＩＥ．ＭＰ４は、４ＧｉＢよりも大きなサイズを有するＦＡＴ３２ボリュームに含まれたファイルである。特に、図１１Ａ〜図１１Ｂ及び図１３に図示した例は、図７の例に図示した例のディレクトリテーブルに対応する。上に説明したように、２ＧｉＢ以外のサブファイルサイズがインデックスを付けるために使用されてもよいことに留意すべきである。このように、図１１Ａ〜図１１Ｂ及び図１３に関して説明した仮想ファイルシステムを呼び出すことの説明は、特定のサブファイルサイズに限定されない。
【００７８】
[0091]図１１Ａ〜図１１Ｂに図示した例は、プロセスにより開かれたファイル（すなわち、ＭＹＭＯＶＩＥ．ＭＰ４）のインスタンスに関する仮想ファイルシステムを、ファイルシステムドライバ２０６がどのように呼び出すことができるかの例を図示しており、ここで、ファイルがラージファイルインジケータエントリ、属性エントリ、サイズエントリ、及びディレクトリ内の１つ又は複数のサブファイル用のエントリを含んでいるディレクトリとして表されている。図１１Ａ〜図１１Ｂに図示したように、ＭＹＭＯＶＩＥ．ＭＰ４ディレクトリ、Ａ＄ＦＴ＄ＬＧＥ．Ｆ＄Ｌ、Ｆ＄２０００００．０００、Ｓ＄００５０００．０００、並びにＵ＄００００、Ｕ＄０００１、及びＵ＄０００２サブファイルの各々は、デントリ及びアイノードオブジェクトを使用して仮想ファイルシステムに呼び出される。このように、この例では、ファイルシステムドライバ２０６は、カーネルに大きなファイルを表しているディレクトリのコンテンツ全体を提示する。図１１Ａ〜図１１Ｂにさらに図示したように、ファイルシステムドライバ２０６は、ファイルオブジェクトとしてユーザ空間にＭＹＭＯＶＩＥ．ＭＰ４を提示する。すなわち、ファイルシステムドライバ２０６は、仮想ファイルであるファイルオブジェクト（すなわち、図１１Ａ〜図１１ＢではＶ＿ＭＹＭＯＶＩＥとして特定される）を呼び出す。このように、ファイルシステムドライバ２０６は、内部のディレクトリとして及び外部のファイルとしてＭＹＭＯＶＩＥ．ＭＰ４ディレクトリを提示すると言われることがある。リナックスにおけるＶｉｒｔｕａｌ  Ｆｉｌｅｓｙｓｔｅｍがファイルオブジェクトに関するデントリ及びアイノードを必要とすることに留意すべきである。このように、図１１Ａ〜図１１Ｂに図示したように、ファイルシステムドライバ２０６は、仮想ファイルであるファイルオブジェクトに関するデントリオブジェクト（すなわち、図１１Ａ〜図１１ＢではＶ＿ＭＹＭＯＶＩＥとして特定される）及びアイノードオブジェクト（すなわち、図１１Ａ〜図１１ＢではＶ＿ＭＹＭＯＶＩＥとして特定される）を呼び出す。さらに、上に説明したように、スーパーブロックはアイノードのリストを含む。アイノードオブジェクトが仮想ファイルであるファイルオブジェクトに関して呼び出されるケースでは、スーパーブロックに含まれるアイノードのリストは、アイノードオブジェクトを含むはずである。このように、本明細書において説明した技術によれば、ファイルがラージファイルインジケータエントリ、属性エントリ、サイズエントリ及びディレクトリ内の１つ又は複数のサブファイル用のエントリを含んでいるディレクトリとして表されるケースでは、ファイルシステムドライバ２０６は、仮想ファイルに対応する１つ又は複数のオブジェクトを呼び出すように構成されることがある。
【００７９】
[0092]図１１Ａに図示した例を参照して、図１１Ａは、ユーザ空間プロセスがファイルシステムドライバによりどのように取り扱われ得るかをさらに図示している。例えば、プロセスがユーザ空間読み込みを含むケースでは、仮想ファイルシステムは、仮想ファイル用の読み込みコールを使用してユーザ空間読み込みを最初に取り扱うことができ、このようにファイルシステムドライバ２０６により実施される読み込み法を呼び出すことができる。このケースでは、仮想ファイルオブジェクトが、（例えば、単一デントリオブジェクト、単一アイノードオブジェクト、及び単一アドレス空間オブジェクトのケースにおけるように）仮想ファイルシステムデータ構造により与えられるマッピングを使用してファイルデータを単純に読み込むことよりはむしろ、ラージファイルインジケータエントリ、属性エントリ、サイズエントリ及びディレクトリ内の１つ又は複数のサブファイル用のエントリを含んでいるディレクトリに対応するという理由で、ファイルシステムドライバ２０６は、特定のサブファイルアイノードに対応する読み込みコールへ仮想ファイルオブジェクトに対応する読み込みコールをリマッピングするように構成されることがある。例えば、ユーザ空間プロセスがＭＹＭＯＶＩＥ．ＭＰ４の３ＧｉＢオフセットでデータを読み込むように要求する場合、ファイルシステム２０６ドライバは、３ＧｉＢオフセットがアイノードＵ＄０００１に対応すると判断することができ、仮想ファイルシステムデータ構造（例えば、Ｕ＄０００１デントリオブジェクト、Ｕ＄０００１アイノードオブジェクト、及びＵ＄０００１単一アドレス空間オブジェクト）により与えられるマッピングを（利用可能であれば）使用してページキャッシュからＵ＄０００１ファイルデータを読み込むことにより読み込み動作を実行することができる。図１１Ａに図示した例では、ファイルシステムドライバ２０６は、カーネルへのサブファイル読み込みコールを呼び出し、サブファイル読み込みコールを引き続いて取り扱うことによりデータを読み込むことができる。ファイルシステムドライバ２０６がコールをリマッピングすることによりデータを読み込むケースでは、ＦＡＴ３２ドライバ読み込みコールは、サブファイル読み込みコールを引き続き取り扱うために使用されることがあり、これがファイルシステムドライバ２０６の実施形態を単純化できることに留意すべきである。すなわち、このケースでは、ＦＡＴ３２ファイルシステムを使用する４ＧｉＢよりも大きなファイルのためのサポートは、本明細書において説明したように、既存のＦＡＴ３２ドライバ上のラッパとして実施されることがあり、ここでラッパが仮想ファイルオブジェクトに関するデータ構造を呼び出し、仮想ファイルオブジェクトに対応するコールをリマッピングする。しかしながら、コールをリマッピングすることによりデータを読み込むことは、仮想ファイルアイノード（例えば、アイノードＶ＿ＭＹＭＯＶＩＥ）及びサブファイルアイノード（例えば、アイノードＵ＄０００１）の両者に対してキャッシュされる重複したファイルデータ、これは理想的なものよりも小さいことがある、にいくつかのケースでは帰結することがあることに留意すべきである。
【００８０】
[0093]図１１Ｂに図示した例を参照して、図１１Ｂは、ユーザ空間プロセスがファイルシステムドライバによりどのように取り扱われ得るかの例をさらに図示している。１つの例では、ファイルシステムドライバ２０６は、カーネルへのコールを呼び出さずに（すなわち、コールを変換することにより）データを直接読み込むことができる。ファイルシステムドライバ２０６がカーネルへのコールを呼び出さずにデータを直接読み込むケースでは、ファイルシステムドライバ２０６は、読み込みコールをサブファイルに対応するアドレス空間へ変換することができる。このケースでは、重複ファイルデータのキャッシングが回避されることがあることに留意すべきである。しかしながら、アドレス空間へのコールの変換は、既存のＦＡＴ３２ドライバ上のラッパとして実施され得ない。図１１Ａ〜図１１Ｂに図示した例の各々に関して、ファイルの属性が更新されることがあり、ファイルのサイズが属性エントリ及びサイズエントリをそれぞれリネーミングすることにより更新されることがあることに留意すべきである。図１１Ａ〜図１１Ｂに図示した例が、読み込み動作に関して説明されているとはいえ、他のユーザ空間プロセス動作（例えば、書き込み動作）のケースでは、ファイルシステムドライバ２０６は、類似の方法でコールをリマッピングする又は変換するはずであることに留意すべきである。
【００８１】
[0094]図１２は、本開示の１つ又は複数の技術による大きなデータオブジェクトに対するコールの取り扱いの例を図示しているフローチャートである。図１２のフローチャートは、図１１Ａ〜図１１Ｂに説明した例に対応する。フローチャート１２００がファイルシステムドライバ２０６に関して説明されるとはいえ、図１２に図示した技術は、コンピューティングデバイス１００及びその構成要素の任意の組合せにより実行されてもよいことに留意すべきである。ファイルシステムドライバ２０６は、仮想ファイルオブジェクトのデータ構造を呼び出す（１２０２）。例えば、ファイルシステムドライバ２０６は、ファイルを表しているディレクトリに関するファイルオブジェクト、アイノードオブジェクト、及びデントリオブジェクトを呼び出す。ファイルシステムドライバ２０６は、ボリュームに含まれたデータオブジェクトに関するデータ構造を呼び出す（１２０４）。例えば、ファイルシステムドライバ２０６は、ラージファイルインジケータエントリ、属性エントリ、サイズエントリ及びディレクトリ内の１つ又は複数のサブファイル用のエントリに関するアイノードオブジェクト及び／又はデントリオブジェクトを呼び出す。ファイルシステムドライバ２０６は、仮想ファイルオブジェクトに対するコールを受信する（１２０６）。例えば、ファイルシステムドライバ２０６は、読み込みコール又は書き込みコールを受信する。ファイルシステムドライバ２０６は、１つの例では、コールをリマッピングする、又は１つの例では、コールを変換する（１２０８）。上に説明したように、コールをリマッピングすることは、サブファイルに対する高次レイヤコールを呼び出すことを含む。上にさらに説明したように、コールを変換することは、サブファイルに対する高次レイヤコールを呼び出さずに対応するサブファイルに関するマッピング情報を判断することを含む。コールの性質に基づいて、ファイルシステムドライバ２０６は、必要に応じて属性エントリ及び／又はサイズエントリをリネームする（１２０８）。このように、コンピューティングデバイス１００は、仮想ファイルに対応する１つ又は複数のオブジェクトを呼び出すように構成されたデバイスの例を表している。
【００８２】
[0095]図１１Ａ〜図１１Ｂに関して上に説明した例の各々において、所与のファイルに関して、プロセスはサブファイルを切り替えることを含むことができることに留意すべきである。例えば、読み込み動作が２つのサブファイルに含まれたデータ（例えば、図７の例では、読み込みデータが１．８ＧｉＢ〜２．１ＧｉＢオフセットする）を必要とする場合、サブファイルを切り替えることは、サブファイルの各々を開くこと及び閉じること、並びに多数のリマッピング動作又は変換動作を実行すること含むことがあり、いくつかのケースでは、データを２回キャッシングすること（すなわち、サブファイルそれ自体のメモリキャッシュに１回、そして仮想ファイルオブジェクト用のメモリキャッシュに１回）もさらに含むことがある。このように、１つの例では、本明細書において説明した技術によれば、４ＧｉＢよりも大きなファイルがＦＡＴ３２ボリュームに含まれ、ラージファイルインジケータエントリ、属性エントリ、サイズエントリ及びディレクトリ内の１つ又は複数のサブファイル用のエントリを含んでいるディレクトリとして表されるケースでは、ファイルシステムドライバ２０６は、カーネルへ大きなファイルを表しているディレクトリのコンテンツ全体を提示せずに仮想ファイルに対応する１つ又は複数のオブジェクトを呼び出すように構成されることがある。
【００８３】
[0096]図１３に図示した例では、ファイルシステムドライバ２０６は、ファイルオブジェクトとしてユーザ空間にＭＹＭＯＶＩＥ．ＭＰ４を提示し、カーネル内の対応するオブジェクトを呼び出し、カーネルへのＭＹＭＯＶＩＥ．ＭＰ４ディレクトリのコンテンツに関するオブジェクトを呼び出さない。このように、ファイルシステムドライバ２０６は、内部にディレクトリコンテンツを顕さずに外部にファイルとしてＭＹＭＯＶＩＥ．ＭＰ４ディレクトリを提示すると言われることがある。図１３に図示したように、ファイルシステムドライバ２０６は、単一デントリオブジェクト、単一アイノードオブジェクト、及び単一アドレス空間オブジェクトを使用して仮想ファイルシステムにＭＹＭＯＶＩＥ．ＭＰ４を提示する。このケースでは、（ＭＹＭＯＶＩＥ．ＭＰ４）に関する動作は、単一デントリオブジェクト、単一アイノードオブジェクト、及び単一アドレス空間オブジェクトに対応する方法コールで進めることができる。すなわち、図１３に図示したように、ユーザ空間により始められたプロセスは、リマッピング又は変換動作を実行せずにファイルシステムドライバ２０６により実施されるコール及び方法を使用して取り扱われることがある。図１３にさらに図示したように、ラージファイルインジケータエントリ、属性エントリ、サイズエントリ、及び１つ又は複数のサブファイル用のエントリの各々は、メタデータとして扱われることがある。このケースでは、メタデータは、ユーザ空間により始められたプロセスからもたらされる何らかの変更（例えば、アクセス／最終修正時間、ファイルサイズ、等）を追跡するために更新されることがある。ファイルシステムドライバ２０６は、メタデータに基づいてボリュームの対応するディレクトリエントリをその後更新することができる。ボリュームの対応するディレクトリエントリを更新することが、大部分のケースではその場で（すなわち、特定のクラスタのデータを上書きすることにより）実行されることがあることに留意すべきである。
【００８４】
[0097]図１４は、本開示の１つ又は複数の技術による大きなデータオブジェクトに対するコールの取り扱いの例を図示しているフローチャートである。図１４のフローチャートは、図１３に説明した例に対応する。フローチャート１４００がファイルシステムドライバ２０６に関して説明されるとはいえ、図１４に図示した技術は、コンピューティングデバイス１００及びその構成要素の任意の組合せにより実行されてもよいことに留意すべきである。ファイルシステムドライバ２０６は、仮想ファイルオブジェクトのデータ構造を呼び出す（１４０２）。例えば、ファイルシステムドライバ２０６は、ファイルを表しているディレクトリに関するファイルオブジェクト、アイノードオブジェクト、デントリオブジェクト、及びアドレス空間オブジェクトを呼び出す。ファイルシステムドライバ２０６は、仮想ファイルオブジェクトに対するコールを受信する（１４０４）。例えば、ファイルシステムドライバ２０６は、読み込みコール又は書き込みコールを受信する。ファイルシステムドライバ２０６は、仮想ファイルオブジェクトに対するコールを取り扱う（１４０４）。コールの性質に基づいて、ファイルシステムドライバ２０６は、メタデータを更新する（１４０６）。ファイルシステムドライバ２０６は、メタデータに対応するディレクトリエントリを更新する（１４０８）。このように、コンピューティングデバイス１００は、仮想ファイルに対応している１つ又は複数のオブジェクトを呼び出すように構成されたデバイスの例を表している。
【００８５】
[0098]１つ又は複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、又はこれらの任意の組合せに実装されることがある。ソフトウェアで実装された場合、機能は、１つ又は複数の命令又はコードとして、コンピュータ可読媒体に記憶される又はこれを通して送信されることがあり、ハードウェアに基づく処理ユニットにより実行されることがある。コンピュータ可読媒体は、データ記憶媒体などの有体媒体に対応するコンピュータ可読記憶媒体、又は例えば通信プロトコルにしたがって１つの場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含むことができる。このように、コンピュータ可読媒体は、（１）非一時的である有体コンピュータ可読記憶媒体又は（２）信号若しくは搬送波などの通信媒体に一般に対応することがある。データ記憶媒体は、本開示において説明した技術の実施のための命令、コード及び／又はデータ構造を検索するために１つ若しくは複数のコンピュータ又は１つ若しくは複数のプロセッサによりアクセスされることが可能ないずれかの利用可能な媒体であってもよい。コンピュータプログラム製品は、コンピュータ可読媒体を含むことができる。
【００８６】
[0099]例として、限定ではなく、このようなコンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ若しくは他の光ディスク記憶装置、磁気ディスク記憶装置、若しくは他の磁気記憶デバイス、フラッシュメモリ、又は命令若しくはデータ構造の形態で所望のプログラムコードを記憶するために使用されることが可能であり、コンピュータによりアクセスされることが可能である任意の他の媒体を備えることができる。さらに、任意の接続がコンピュータ可読媒体と適切に呼ばれる。例えば、命令が、同軸ケーブル、光ファイバケーブル、ツイスティッドペア、ディジタル加入者線（ＤＳＬ：ｄｉｇｉｔａｌ  ｓｕｂｓｃｒｉｂｅｒ  ｌｉｎｅ）、又は赤外線、無線、及びマイクロ波などのワイアレス技術を使用してウェブサイト、サーバ、又は他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイスティッドペア、ＤＳＬ、又は赤外線、無線、及びマイクロ波などのワイアレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体及びデータ記憶媒体は、接続、搬送波、信号、又は他の送信媒体を含まないが、非一時的な有体記憶媒体に代わりに向けられていることを理解すべきである。ディスク（ｄｉｓｋ）及びディスク（ｄｉｓｃ）は、本明細書において使用したように、コンパクトディスク（ＣＤ）、レーザディスク、光ディスク、ディジタル多目的ディスク（ＤＶＤ）、フロッピディスク及びブルーレイディスクを含み、ここでディスク（ｄｉｓｋ）は磁気的にデータを通常再生し、一方でディスク（ｄｉｓｃ）はレーザを用いて光学的にデータを再生する。上記の組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【００８７】
[0100]命令は、１つ又は複数のディジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、又は他の等価な集積回路若しくは単体論理回路などの１つ又は複数のプロセッサにより実行されることがある。したがって、「プロセッサ」という用語は、本明細書において使用したように、本明細書において説明した技術の実施のために適した前述の構造又は任意の他の構造のうちのいずれかを指すことができる。加えて、いくつかの態様では、本明細書において説明した機能は、専用ハードウェア及び／又はソフトウェアモジュール内に与えられることがある。さらに、技術は、１つ又は複数の回路又は論理素子に完全に実装されることがある。
【００８８】
[0101]本開示の技術は、ワイアレスハンドセット、集積回路（ＩＣ）又はＩＣのセット（例えば、チップセット）を含め、多種多様なデバイス又は装置において実施されることがある。様々な構成要素、モジュール、又はユニットは、開示した技術を実行するように構成されたデバイスの機能的な態様を強調するように本開示では説明されるが、異なるハードウェアユニットによる実現を必ずしも必要としない。むしろ、上に説明したように、様々なユニットが、コーデックハードウェアユニットに組み合わせられることがある、又は適切なソフトウェア及び／又はファームウェアと併せて、上に説明したような１つ又は複数のプロセッサを含め、相互に動作可能なハードウェアの集合体により与えられることがある。
【００８９】
[0102]様々な例が、説明されてきている。これらの例及び他の例は、添付の特許請求の範囲の範囲に含まれる。
【図１】
2020502704.tif 000008
【図２】
2020502704.tif 000009
【図３】
2020502704.tif 000010
【図４】
2020502704.tif 000011
【図５】
2020502704.tif 000012
【図６Ａ】
2020502704.tif 000013
【図６Ｂ】
2020502704.tif 000014
【図７】
2020502704.tif 000015
【図８】
2020502704.tif 000016
【図９】
2020502704.tif 000017
【図１０】
2020502704.tif 000018
【図１１Ａ】
2020502704.tif 000019
【図１１Ｂ】
2020502704.tif 000020
【図１２】
2020502704.tif 000021
【図１３】
2020502704.tif 000022
【図１４】
2020502704.tif 000023
【国際調査報告】
2020502704.tif 000024
2020502704.tif 000025
2020502704.tif 000026