(57)【要約】ディスク・ベース・データ記憶デバイス（例えば、ハード・ディスク・ドライブ等）に格納されるデータ・ブロックが、一緒にコード化され、複数の線形に独立したネットワーク・コード化ブロックを形成する。次いで、ネットワーク・コード化ブロックは、データ記憶デバイスに格納される。次いで、時間効率的にデータ記憶デバイスから元のデータ・ブロックを引き出すために、コード化シーキングを使用することができる。元のデータ・ブロックに関連する革新的コード化パケットを要求するリード要求を、データ記憶デバイスに送ることができる。このリード要求に応答して、データ記憶デバイスは、このデバイスのリード・エレメントの現在位置に元も近い革新的コード化パケットをディスクから読み出すことができる。【選択図】図１
2016519354.tif 000002
【特許請求の範囲】
【請求項１】
複数のネーティブ・データ・ブロックに関連する複数のネットワーク・コード化ブロックが格納されたディスク・ベース・データ記憶デバイスからデータを引き出すときに使用する方法であって、
前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求するリード要求を受けるステップと、
前記リード要求に応答して、前記ディスク・ベース・データ記憶デバイスに格納されている革新的コード化ブロックの内、前記ディスク・ベース・データ記憶デバイスのリード変換器の現在位置に最も近いものを識別するステップと、
前記識別した革新的コード化ブロックを読み出すステップと、
を含む、方法。
【請求項２】
請求項１記載の方法において、前記複数のネーティブ・データ・ブロックに関連し、前記ディスク・ベース・データ記憶デバイスに格納された前記複数のネットワーク・コード化ブロックが、各々、前記複数のネーティブ・データ・ブロックの線形組み合わせを含む、方法。
【請求項３】
請求項２記載の方法において、前記ディスク・ベース・データ記憶デバイスに格納され、前記複数のネーティブ・データ・ブロックに関連する前記複数のネットワーク・コード化ブロックが、各々、前記対応する線形組み合わせを生成するために使用される係数のリストを含む、方法。
【請求項４】
請求項１記載の方法において、革新的コード化ブロックの引き出しを要求するリード要求を受けるステップが、前記複数のネーティブ・データ・ブロックに関連する、以前に引き出されたコード化ブロックをデコードするときに有用である追加の自由度を提供するコード化ブロックの引き出しを要求するリード要求を受けるステップを含む、方法。
【請求項５】
請求項１記載の方法において、受けるステップ、識別するステップ、および読み出すステップが、前記ディスク・ベース・データ記憶デバイスに関連するコントローラによって実行される、方法。
【請求項６】
請求項１記載の方法において、
前記ディスク・ベース・データ記憶デバイスが、少なくともＮ個の線形独立コード化ブロックをその内部に格納しており、Ｎが、前記複数のネーティブ・データ・ブロック内におけるネーティブ・ブロックの数である、方法。
【請求項７】
請求項１記載の方法において、
前記ディスク・ベース・データ記憶デバイスが、磁気ディスク・ドライブである、方法。
【請求項８】
複数のネーティブ・データ・ブロックに関連する複数のネットワーク・コード化ブロックが格納されたディスク・ベース・データ記憶デバイスからデータを引き出すときに使用する方法であって、
前記複数のネーティブ・データ・ブロックが、前記ディスク・ベース・データ記憶デバイスから引き出される必要があると判定するステップと、
前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求するリード要求を、前記ディスク・ベース・データ記憶デバイスに送るステップと、
を含む、方法。
【請求項９】
請求項８記載の方法であって、更に、
前記リード要求に応答して、前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックを受けるステップと、
前記複数のネーティブ・データ・ブロックに関連する前記革新的コード化ブロックを、メモリに一時的に格納するステップと、
前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックが、前記複数のネーティブ・データ・ブロックを抽出するためのデコーディングを可能にするのに十分な数だけ、前記ディスク・ベース・データ記憶デバイスから引き出されたか否か判定するステップと、  
前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックが、デコーディングを可能にするのに十分な数だけ前記ディスク・ベース・データ記憶デバイスから引き出されていない場合、前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求する他のリード要求を前記ディスク・ベース・データ記憶デバイスに送るステップと、
を含む、方法。
【請求項１０】
請求項９記載の方法であって、更に、
前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックが、デコーディングを可能にするのに十分な数だけ前記ディスク・ベース・データ記憶デバイスから引き出されるまで、受けるステップ、一時的に格納するステップ、判定するステップ、および他のリード要求を送るステップを繰り返すステップを含む、方法。
【請求項１１】
請求項１０記載の方法であって、更に、
十分な数の革新的コード化ブロックが前記ディスク・ベース・データ記憶デバイスから引き出された後、ネーティブ・データ・ブロックを抽出するために革新的コード化ブロックをデコードするステップを含む、方法。
【請求項１２】
請求項８記載の方法において、前記複数のネーティブ・データ・ブロックに関連付けられ前記ディスク・ベース・データ記憶デバイスに格納された前記複数のネットワーク・コード化ブロックが、各々、前記複数のネーティブ・データ・ブロックの線形組み合わせを含む、方法。
【請求項１３】
請求項１２記載の方法において、
前記複数のネーティブ・データ・ブロックに関連付けられ前記ディスク・ベース・データ記憶デバイスに格納された前記複数のネットワーク・コード化ブロックが、各々、前記対応する線形組み合わせを生成するために使用される係数のリストを含む、方法。
【請求項１４】
ディスク・ベース・データ記憶デバイスにデータを格納する方法であって、
前記ディスク・ベース・データ記憶デバイスに格納される複数のデータ・ブロックを識別するステップであって、前記複数のデータ・ブロックがＮ個のデータ・ブロックを有する、ステップと、
前記複数のデータ・ブロックを使用して、ある数のネットワーク・コード化ブロックを生成するステップであって、各ネットワーク・コード化ブロックが、他のネットワーク・コード化ブロックとは異なる１組のランダム係数を使用して生成される、前記複数のデータ・ブロックの線形組み合わせを含む、ステップと、
対応するランダム係数と共に、前記ディスク・ベース・データ記憶デバイス内の個々のブロック位置に前記ネットワーク・コード化ブロックを書き込むステップと、
を含む、方法。
【請求項１５】
請求項１４記載の方法において、
前記ディスク・ベース・データ記憶デバイスに格納される複数のデータ・ブロックを識別するステップが、
前記ディスク・ベース・データ記憶デバイスに格納されるファイルを取得するステップと、
前記ファイルを、各々Ｎ個のデータ・ブロックを含む複数の等しいサイズのブロック・ウィンドウに分割するステップと、
前記複数の等しいサイズのブロック・ウィンドウから１つの選択するステップと、
を含む、方法。
【請求項１６】
請求項１５記載の方法であって、
生成するステップおよび格納するステップを、前記複数の等しいサイズのブロック・ウィンドウにおけるブロック・ウィンドウ毎に繰り返すステップを含む、方法。
【請求項１７】
ディスク・ドライブであって、
ドライブ・コントローラと、
前記ドライブ・コントローラの制御下で、ディジタル・データを格納する少なくとも１つのプラッタと、
を含み、
前記ドライブ・コントローラが、
複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの前記少なくとも１つのプラッタからの引き出しを要求するリード要求を受け、
前記リード要求に応答して、前記少なくとも１つのプラッタに格納された前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの内、前記ディスク・ドライブのリード変換器の現在位置に最も近いものを識別し、
前記識別した革新的コード化ブロックを前記少なくとも１つのプラッタから読み出すように構成される、ディスク・ドライブ。
【請求項１８】
請求項１７記載のディスク・ドライブにおいて、
前記少なくとも１つのプラッタから読み出された前記識別された前記革新的コード化ブロックが、前記複数のネーティブ・データ・ブロックの線形組み合わせと、前記線形組み合わせを生成するために使用された係数のリストとを含む、ディスク・ドライブ。
【請求項１９】
請求項１７記載のディスク・ドライブにおいて、
前記少なくとも１つのプラッタが、該プラッタ上に格納され、前記複数のネーティブ・データ・ブロックに関連した少なくともＮ個の線形独立コード化ブロックを有し、Ｎが、前記複数のネーティブ・データ・ブロック内にあるネーティブ・データ・ブロックの数である、ディスク・ドライブ。
【請求項２０】
システムであって、
プロセッサと、
前記プロセッサによるアクセスのためにディジタル・データを格納するディスク・ドライブと、
を含み、前記プロセッサが、ネーティブ・データ・パケットのグループに関連する革新的コード化ブロックの引き出しを要求するリード要求を、前記ディスク・ドライブに送るように構成される、システム。
【請求項２１】
請求項２０記載のシステムにおいて、
前記プロセッサが、デコーディングを可能にするのに十分な革新的コード化ブロックが引き出され終えるまで、前記ネーティブ・データ・パケットのグループに関連する革新的コード化ブロックの引き出しを要求するリード要求を前記ディスク・ドライブに送り続けるように構成される、システム。
【請求項２２】
請求項２０記載のシステムにおいて、前記ディスク・ドライブが、
ドライブ・コントローラを含み、
前記ドライブ・コントローラが、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求する前記リード要求を受け、前記リード要求に応答して、前記ディスク・ドライブに格納された前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの内、前記ディスク・ドライブのリード変換器の現在位置に最も近いものを識別し、前記リード変換器を使用して、前記識別した革新的コード化ブロックを読み出すように構成される、システム。
【請求項２３】
請求項２２記載のシステムにおいて、
前記ドライブ・コントローラが、格納されたコード化ブロックの内、アクセスするために最小量の時間を要するものを選択することによって、前記リード変換器の現在位置に最も近い前記革新的コード化ブロックを識別するように構成される、システム。
【請求項２４】
請求項２２記載のシステムにおいて、
前記ドライブ・コントローラが、格納されたコード化ブロックの内、前記リード変換器に物理的に最も近いものを選択することによって、前記リード変換器の現在位置に最も近い前記革新的コード化ブロックを識別するように構成される、システム。
【請求項２５】
請求項２２記載のシステムにおいて、
前記ドライブ・コントローラが、前記リード変換器の現在位置に最も近い革新的コード化ブロックを識別するとき、最後に引き出された前記複数のネーティブ・データ・ブロックに関連するコード化ブロックを無視するように構成される、システム。
【請求項２６】
請求項２０記載のシステムにおいて、前記ディスク・ドライブが、ドライブ・コントローラを含み、
前記ドライブ・コントローラが、前記ディスク・ドライブに格納される複数のデータ・ブロックを取得し、前記複数のデータ・ブロックがＮ個のデータ・ブロックを有し、前記複数のデータ・ブロックを使用してある数のネットワーク・コード化ブロックを生成し、各ネットワーク・コード化ブロックが、前記他のネットワーク・コード化ブロックとは異なる１組のランダム係数を使用して生成された前記複数のデータ・ブロックの線形組み合わせを含み、前記生成したネットワーク・コード化ブロックを、対応するランダム係数と共に、前記ディスク・ドライブの１つ以上のプラッタにおける個々のブロック位置に書き込むように構成される、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  本明細書において開示する主題は、一般には、データ格納に関し、更に特定すれば、コーディングを使用してデータ記憶デバイスにおけるデータ・アクセス速度を高める技法およびシステムに関する。
【背景技術】
【０００２】
[0002]  ハード・ディスク・ドライブは、あるときにはデータ・ストレージ・ネットワークの重要商品であった。過去２０年において、ハード・ディスク・ドライブのコストは着実に減少する一方で、これらのドライブに格納されるデータの密度は、著しく上昇し、より安価で容量が多い記憶デバイスが生産された。また、ソリッド・ステート記憶デバイスも、特に、携帯用デバイスにおいて、ある種の性能上の利点のために、増々普及しつつある。例えば、ソリッド・ステート・ドライブにおいて動く部品がないことのため、データ読み取り時間がデバイスにわたって比較的一定となることが可能になる。加えて、ソリッド・ステート・ドライブには物理的なリード・ヘッド隘路がない。逆に、ハード・ディスク・ドライブにおけるアクチュエータ、リード／ライト・ヘッド、およびプラッタの物理的な動きにより、多くの場合、１つのデータ・ブロックのアクセス時間が、数ミリ秒から数十ミリ秒程度になる可能性がある。したがって、ハード・ディスク・ドライブは、最近の入力／出力（Ｉ／Ｏ）システムにおいて、隘路を作る可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0003]  ハード・ディスク・ドライブに関連する隘路は、このようなデバイスのための数多くのＩ／Ｏレイテンシ低減アルゴリズムの開発を動機付けた。これらのアルゴリズムは、例えば、リード・アヘッド・アルゴリズム(read-ahead algorithm)、およびこれよりも複雑なその異形を含む。通例、これらのアルゴリズムは、共通のアクセス・パターンを予測し調査するスケジューリング方式に頼る。しかしながら、このようなアルゴリズムは、Ｉ／Ｏアクセス速度上昇に対する、増えつつある要求に追いつくことができない。
【０００４】
[0004]  ハード・ディスク・ドライブ、および動く機械的部品を有する他のデータ記憶デバイスにおいて平均アクセス時間を短縮することができる技法が、一般に求められている。
【課題を解決するための手段】
【０００５】
[0005]  本明細書において説明する種々の実施形態において、動く機械的部品を有するデータ記憶デバイス（例えば、ハード・ディスク・ドライブおよび他のディスク・ベース・データ記憶デバイス）において平均アクセス時間を短縮するためにコーディングを使用する技法およびシステムを提供する。少なくとも１つの実施形態では、平均ブロック・リード時間を短縮するためにドライブ・ブロックに跨がってコーディングを使用するディスク・ベース・データ記憶デバイスおよびシステムのために、単純な内部コーディング方式を提供する。次いで、データ記憶デバイスからデータを迅速かつ効率的に読み出すために、コード化シーキング(coded seeking)を採用することができる。
【０００６】
[0006]  従来のディスク・ドライブでは、ドライブ・コントローラが、通例、リード要求（例えば、ディスクにおける特定のセクタに格納されたデータ・ブロック）に応答して、ディスクまたはプラッタから個々のデータ・ブロックをシークして引き出す。
【０００７】
[0007]  本明細書において説明するようにコード化シーキングを使用すると、コントローラは、代わりに、リード要求に応答して、リード・ヘッドの位置に最も近い革新的コード化ブロック(innovative coded block)を識別して引き出すことができる。即ち、ディスク・コントローラに到達する要求毎に、コントローラは、平均物理ドライブ移動を減らすように、有用な情報を含む多くのコード化データ・ブロックから、現在のリード・ヘッド位置に最も近いものをシークすることができる。このように、個々のデータ・ブロックの平均シーク時間を短縮することができる。
【０００８】
[0008]  本明細書において説明する概念、システム、回路、および技法の一形態によれば、ドライブ・コントローラは、（ｉ）ディジタル・データを格納するための少なくとも１つのプラッタからの、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求するリード要求を受け、（ｉｉ）リード要求に応答して、少なくとも１つのプラッタに格納された複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの内、ディスク・ドライブのリード変換器の現在位置に最も近いものを識別し、（ｉｉｉ）識別した革新的コード化ブロックを少なくとも１つのプラッタから読み出すように構成される。
【０００９】
[009]  一実施形態では、ドライブ・コントローラは、以下の特徴の１つ以上を含む、または以下の機能の１つ以上を実行することもできる。ドライブ・コントローラは、格納されたコード化ブロックの内、アクセスするために最小量の時間を要するものを選択することによって、リード変換器の現在位置に最も近い革新的コード化ブロックを識別するように構成されてもよい。ドライブ・コントローラは、格納されたコード化ブロックの内、リード変換器に物理的に最も近いものを選択することによって、リード変換器の現在位置に最も近い革新的コード化ブロックを識別するように構成されてもよい。および／またはドライブ・コントローラは、リード変換器の現在位置に最も近い革新的コード化ブロックを識別するとき、最後に引き出された複数のネーティブ・データ・ブロックに関連するコード化ブロックを無視するように構成されてもよい。
【００１０】
[0010]  本明細書において説明する概念、システム、回路、および技法の他の形態によれば、革新的コード化ブロックが、複数のネーティブ・データ・ブロックの線形組み合わせと、線形組み合わせを生成するために使用された係数のリストとを含む。このようなコード化ブロックは、少なくとも１つのプラッタから読み出されるとよい。
【００１１】
[0011]  一実施形態では、少なくともＮ個の線形独立コード化ブロックを１つ以上のプラッタに格納することができ、Ｎ個の線形独立コード化ブロックの内１つ以上が、複数のネーティブ・データ・ブロックに関連に関連付けられ、Ｎは、複数のネーティブ・データ・ブロック内におけるネーティブ・ブロックの数である。
【００１２】
[00012]  本明細書において説明する概念、システム、回路、および技法の更に他の形態によれば、複数のネーティブ・データ・ブロックに関連する複数のネットワーク・コード化・ブロックが格納されているディスク・ベース・データ記憶デバイスからデータを引き出すときに使用する方法を提供する。更に特定すれば、この方法は、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求するリード要求を受けるステップと、リード要求に応答して、ディスク・ベース・データ記憶デバイスに格納されている革新的コード化ブロックの内、ディスク・ベース・データ記憶デバイスのリード変換器の現在位置に最も近いものを識別するステップと、識別した革新的コード化ブロックを読み出すステップとを含む。
【００１３】
[00013]  一実施形態では、複数のネーティブ・データ・ブロックに関連し、ディスク・ベース・データ記憶デバイスに格納された複数のネットワーク・コード化ブロックは、各々、複数のネーティブ・データ・ブロックの線形組み合わせを含む。
【００１４】
[0014]  一実施形態では、ディスク・ベース・データ記憶デバイスに格納され、複数のネーティブ・データ・ブロックに関連する複数のネットワーク・コード化ブロックは、各々、対応する線形組み合わせを生成するために使用される係数のリストを含む。
【００１５】
[0015]  一実施形態では、革新的コード化ブロックの引き出しを要求するリード要求を受けるステップは、複数のネーティブ・データ・ブロックに関連する、以前に引き出されたコード化ブロックをデコードするときに有用である追加の自由度を提供するコード化ブロックの引き出しを要求するリード要求を受けるステップを含む。
【００１６】
[0016]  一実施形態では、受けるステップ、識別するステップ、および読み出すステップは、ディスク・ベース・データ記憶デバイスに関連するコントローラによって実行される。
【００１７】
[0017]  一実施形態では、ディスク・ベース・データ記憶デバイスは、少なくともＮ個の線形独立コード化ブロックをその内部に格納しており、Ｎが、複数のネーティブ・データ・ブロック内におけるネーティブ・ブロックの数である。
【００１８】
[0018]  一実施形態では、ディスク・ベース・データ記憶デバイスは磁気ディスク・ドライブである。
[0019]  本明細書において説明する概念、システム、回路、および技法の他の形態によれば、複数のネーティブ・データ・ブロックに関連付けられた複数のネットワーク・コード化ブロックが格納されているディスク・ベース・データ記憶デバイスからデータを引き出すときに使用する方法を提供する。更に特定すれば、この方法は、複数のネーティブ・データ・ブロックが、ディスク・ベース・データ記憶デバイスから引き出される必要があると判定するステップと、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求するリード要求をディスク・ベース・データ記憶デバイスに送るステップとを含む。
【００１９】
[0020]  一実施形態では、この方法は、更に、リード要求に応答して、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックを受けるステップと、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックを、メモリに一時的に格納するステップと、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックが、複数のネーティブ・データ・ブロックを抽出するためのデコーディングを可能にする十分な数だけ、ディスク・ベース・データ記憶デバイスから引き出されたか否か判定するステップと、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックが、デコーディングを可能にする十分な数だけディスク・ベース・データ記憶デバイスから引き出されていない場合、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求する他のリード要求をディスク・ベース・データ記憶デバイスに送るステップとを含む。
【００２０】
[0021]  一実施形態では、この方法は、更に、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックが、デコーディングを可能にする十分な数だけディスク・ベース・データ記憶デバイスから引き出されるまで、受けるステップ、一時的に格納するステップ、判定するステップ、および他のリード要求を送るステップを繰り返すステップを含む。
【００２１】
[0022]  一実施形態では、この方法は、更に、十分な数の革新的コード化ブロックがディスク・ベース・データ記憶デバイスから引き出された後、ネーティブ・データ・ブロックを抽出するために革新的コード化ブロックをデコードするステップを含む。
【００２２】
[0023]  一実施形態では、 複数のネーティブ・データ・ブロックに関連付けられ、ディスク・ベース・データ記憶デバイスに格納されている複数のネットワーク・コード化ブロックは、各々、複数のネーティブ・データ・ブロックの線形組み合わせを含む。
【００２３】
[0024]  一実施形態では、複数のネーティブ・データ・ブロックに関連付けられ、ディスク・ベース・データ記憶デバイスに格納されている複数のネットワーク・コード化ブロックは、各々、対応する線形組み合わせを生成するために使用される係数のリストを含む。
【００２４】
[0025]  本明細書において説明する概念、システム、回路、および技法の他の形態によれば、ディスク・ベース・データ記憶デバイスにデータを格納する方法を提供する。更に特定すれば、この方法は、ディスク・ベース・データ記憶デバイスに格納される複数のデータ・ブロックを識別するステップであって、複数のデータ・ブロックがＮ個のデータ・ブロックを有する、ステップと、複数のデータ・ブロックを使用して、複数のネットワーク・コード化ブロックを生成するステップであって、各ネットワーク・コード化ブロックが、他のネットワーク・コード化ブロックからの異なる１組のランダム係数を使用して生成される、複数のデータ・ブロックの線形組み合わせを含む、ステップと、対応するランダム係数と共に、ディスク・ベース・データ記憶デバイス内の個々のブロック位置にネットワーク・コード化ブロックを書き込むステップとを含む。
【００２５】
[0026]  一実施形態では、ディスク・ベース・データ記憶デバイスに格納される複数のデータ・ブロックを識別するステップは、ディスク・ベース・データ記憶デバイスに格納されるファイルを取得するステップと、ファイルを、各々Ｎ個のデータ・ブロックを含む複数の等しいサイズのブロック・ウィンドウに分割するステップと、複数の等しいサイズのブロック・ウィンドウから１つの選択するステップとを含む。
【００２６】
[0027]  一実施形態では、この方法は、更に、生成するステップおよび格納するステップを、複数の等しいサイズのブロック・ウィンドウにおけるブロック・ウィンドウ毎に繰り返すステップを含む。
【００２７】
[0028]  本明細書において説明する概念、システム、回路、および技法の更に他の形態によれば、ディスク・ドライブは、ドライバ・コントローラと、このドライブ・コントローラの制御下で、ディジタル・データを格納する少なくとも１つのプラッタとを含み。
ドライブ・コントローラは、（ｉ）複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの少なくとも１つのプラッタからの引き出しを要求するリード要求を受け、（ｉｉ）リード要求に応答して、少なくとも１つのプラッタに格納された複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの内、ディスク・ドライブのリード変換器の現在位置に最も近いものを識別し、（ｉｉｉ）識別した革新的コード化ブロックを少なくとも１つのプラッタから読み出すように構成される。
【００２８】
[0029]  一実施形態では、少なくとも１つのプラッタから読み出され特定された革新的コード化ブロックは、複数のネーティブ・データ・ブロックの線形組み合わせと、線形組み合わせを生成するために使用された係数のリストとを含む。
【００２９】
[0030]  一実施形態では、少なくとも１つのプラッタは、当該プラッタ上に格納され、複数のネーティブ・データ・ブロックに関連付けられた少なくともＮ個の線形独立コード化ブロックを有し、Ｎは複数のネーティブ・データ・ブロック内部にあるネーティブ・データ・ブロックの数である。
【００３０】
[0031]  本明細書において説明する概念、システム、回路、および技法の更にまた他の形態によれば、システムは、プロセッサと、このプロセッサによるアクセスのためにディジタル・データを格納するディスク・ドライブとを含む。このプロセッサは、ネーティブ・データ・パケットのグループに関連する革新的コード化ブロックの引き出しを要求するリード要求を、ディスク・ドライブに送るように構成される。
【００３１】
[0032]  一実施形態では、プロセッサは、デコーディングを可能にする十分な革新的コード化ブロックが引き出され終えるまで、ネーティブ・データ・パケットのグループに関連する革新的コード化ブロックの引き出しを要求するリード要求をディスク・ドライブに送り続けるように構成される。
【００３２】
[0033]  一実施形態では、ディスク・ドライブはドライブ・コントローラを含み、このドライブ・コントローラが、（ｉ）複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求するリード要求を受け、（ｉｉ）リード要求に応答して、ディスク・ドライブに格納された複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの内、ディスク・ドライブのリード変換器の現在位置に最も近いものを識別し、（ｉｉｉ）リード変換器を使用して、識別した革新的コード化ブロックを読み出すように構成される。
【００３３】
[0034]  一実施形態では、ドライブ・コントローラは、格納されたコード化ブロックの内、アクセスするために最小量の時間を要するものを選択することによって、リード変換器の現在位置に最も近い革新的コード化ブロックを識別するように構成される。
【００３４】
[0035]  一実施形態では、ドライブ・コントローラは、格納されたコード化ブロックの内、リード変換器に物理的に最も近いものを選択することによって、リード変換器の現在位置に最も近い革新的コード化ブロックを識別するように構成される。
【００３５】
[0036]  一実施形態では、ドライブ・コントローラは、リード変換器の現在位置に最も近い革新的コード化ブロックを識別するとき、最後に引き出された複数のネーティブ・データ・ブロックに関連するコード化ブロックを無視するように構成される。
【００３６】
[0037]  一実施形態では、ディスク・ドライブはドライブ・コントローラを含む。このドライブ・コントローラは、（ｉ）ディスク・ドライブに格納される複数のデータ・ブロックを取得し、複数のデータ・ブロックがＮ個のデータ・ブロックを有し、（ｉｉ）複数のデータ・ブロックを使用してある数のネットワーク・コード化ブロックを生成し、各ネットワーク・コード化ブロックが、他のネットワーク・コード化ブロックとは異なる１組のランダム係数を使用して生成された複数のデータ・ブロックの線形組み合わせを含み、（ｉｉｉ）生成したネットワーク・コード化ブロックを、対応するランダム係数と共に、ディスク・ドライブの１つ以上のプラッタにおける個々のブロック位置に書き込むように構成される。
【００３７】
[00038]  本明細書において説明する概念、システム、回路、および技法の更にまた他の形態によれば、ドライブ・コントローラは、（ｉ）ディジタル・データを格納するための少なくとも１つのプラッタからの、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求するリード要求を受け、（ｉｉ）リード要求に応答して、少なくとも１つのプラッタに格納された複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの内、ディスク・ドライブのリード変換器の現在位置に最も近いものを識別し、（ｉｉｉ）識別した革新的コード化ブロックを少なくとも１つのプラッタから読み出すように構成される。
【００３８】
[0039]  一実施形態では、ドライブ・コントローラは、以下の特徴の１つ以上を含む、または以下の機能の１つ以上を実行することもできる。ドライブ・コントローラは、格納されたコード化ブロックの内、アクセスするために最小量の時間を要するものを選択することによって、リード変換器の現在位置に最も近い革新的コード化ブロックを識別するように構成されてもよい。ドライブ・コントローラは、格納されたコード化ブロックの内、リード変換器に物理的に最も近いものを選択することによって、リード変換器の現在位置に最も近い革新的コード化ブロックを識別するように構成されてもよい。および／またはドライブ・コントローラは、リード変換器の現在位置に最も近い革新的コード化ブロックを識別するとき、最後に引き出された複数のネーティブ・データ・ブロックに関連するコード化ブロックを無視するように構成されてもよい。
【００３９】
[0040]  本明細書において説明する概念、システム、回路、および技法の更に他の形態によれば、革新的コード・ブロックは、複数のネーティブ・データ・ブロックの線形組み合わせと、この線形組み合わせを生成するために使用された係数のリストとを含む。このようなコード化ブロックは、少なくとも１つのプラッタから読み出されるとよい。
【００４０】
[0041]  一実施形態では、少なくともＮ個の線形独立コード化ブロックを１つ以上のプラッタに格納することができ、Ｎ個の線形独立コード化ブロックの１つ以上が複数のネーティブ・データ・ブロックに関連付けられ、Ｎは、複数のネーティブ・データ・ブロック内部にあるネーティブ・データ・ブロックの数である。
【図面の簡単な説明】
【００４１】
[0042]  以上の特徴は、以下の図面の説明から一層深く理解することができよう。
【図１】図１は、本明細書において説明する特徴を組み込むことができる計算システム例を示すブロック図である。
【図２】図２は、本明細書において説明する特徴を組み込むことができるディスク・ドライブ例の上面図である。
【図３】図３は、実施形態にしたがって、コード化ブロックのデータ・アクセス時間｛Ｅ［Ｔ１］）の予想値が、どのようにｗの異なる値に対してコード化ブロックを生成するために使用されるネーティブ・データ・ブロックの数ｒと共に変化し得るかを示すプロット例である。
【図４】図４は、実施形態にしたがって、コード化シーキングを実現するディスク・ドライブがブロック・ウィンドウの自由度に沿って動くに連れて、どのように Ｅ［Ｔ］／ Ｅ［Ｔｎ］が変化し得るかを示すプロット例である。
【図５】図５は、実施形態にしたがってコード化シーキングをサポートするように、ネットワーク・コーディングを使用してディスク・ドライブにデータを格納する方法を示す流れ図である。
【図６】図６は、実施形態にしたがって、コーディング・シーキングを使用してディスク・ドライブからデータを引き出すときに使用する方法を示す流れ図である。
【図７】図７は、実施形態にしたがって、コーディング・シーキングをサポートするディスク・ドライブからデータを引き出すときに使用する方法を示す流れ図である。
【発明を実施するための形態】
【００４２】
[0050]  コーディングは、単一ブロック内における誤り訂正のためにハード・ディスク・ドライブにおいて長い間使用されてきた。例えば、リード−ソロモン・コード、低密度パリティ・チェック（ＬＤＰＣ）コード、およびその他というようなコードは、ディスク・ドライブにおいて最も広く使用されるものの中にある。しかしながら、コーディングは、ハード・ドライブにおいてＩ／Ｏレイテンシを短縮するためには使用されたことがない。本明細書では、コーディングを使用して、ハード・ディスク・ドライブおよび動く機械的部品を有する他のデータ記憶デバイスにおいて平均アクセス時間を短縮する技法およびシステムについて説明する。これらの技法およびシステムは、リード・アヘッド・アルゴリズムおよび他のＩ／Ｏレイテンシ短縮アルゴリズムに加えて、またはその代わりに使用することができる。
【００４３】
[0051]  図１は、本明細書において説明する特徴を組み込むことができる計算システム例１０を示すブロック図である。図示のように、計算システム１０は、例えば、ディジタル・プロセッサ１２、メモリ１４、およびディスク・ドライブ１６を含むことができる。ディジタル・プロセッサ１２は、ディスク・ドライブ１６を使用して、例えば、プログラム・ファイルおよびデータ・ファイルを不揮発性形態で格納することができる。ディジタル・プロセッサ１２は、メモリ１４を使用して、例えば、現在プロセッサ１２によって実行中であるプログラムを格納することができる。図示のように、ディジタル・プロセッサ１２は、システム１０の動作全体を制御するために、オペレーティング・システム１８を実行することができる。また、ディジタル・プロセッサ１２は１つ以上のアプリケーション・プログラム２０も実行することができる。ディジタル・プロセッサ１２は、コンピュータ命令を処理することができる任意のタイプのプロセッサを含むことができ、例えば、汎用マイクロプロセッサ、ディジタル信号プロセッサ（ＤＳＰ）、縮小命令セット・コンピュータ（ＲＩＳＣ）、マイクロコントローラ、および／または以上の組み合わせを含むその他を含む。
【００４４】
[0052]  図１に示すように、ディスク・ドライブ１６は、ドライブ・コントローラ２２、ドライブ・キャッシュ（またはバッファ）２４、および１つ以上のプラッタ２６を含むことができる。ドライブ・コントローラ２２は、ディスク・ドライブ１６の動作を制御する。したがって、ドライブ・コントローラ２２は１つ以上のディジタル処理デバイスを含む場合もある。プラッタ２６は、ディジタル・データがディスク・ドライブ１６内に格納される記憶媒体である。磁気ディスク・ドライブ（例えば、ハード・ディスク・ドライブ等）では、プラッタ２６の各々に磁性体を塗布することができ、ディジタル・データを磁気形態でその上に格納することを可能にする（例えば、磁極反転または何らかの他の磁気的指標）。データは、通例、プラッタ２６の表面上における同心円状トラック内に格納されるが、他の方式も存在する。データは、各プラッタ２６の一面または両面に格納することができる。ディスク・ドライブは１つのプラッタのみを含む場合もあるが、通例では、複数のプラッタが中央スピンドル上に互いに重ね合わされており、中央スピンドルが、ディスク・ドライブ動作の間プラッタ２６のために回転軸として役割を果たす。リードおよびライト・エレメントは、プラッタ２６のトラックからデータを読み出し、データを書き込むための変換器として使用することができる。
【００４５】
[0053]  ドライブ・キャッシュ２４は、リードおよびライト動作の間、プラッタ２６と外部デバイス（例えば、プロセッサ１２等）との間においてデータ・バッファとして使用することができる。つまり、ドライブ・キャッシュ２４は、とりわけ、プラッタ２６およびドライブ１６の入力／出力ポートに関連するリード／ライト・チャネル間のデータ・レートの差を補償するために、リードおよび／またはライト・データの一時的データ・ストレージを提供するように動作することができる。ドライブ・キャッシュ２４は、通例、任意の所与の時点において最大Ｃブロックを格納することができる。
【００４６】
[0054]  ディスク・ドライブ内部にある各アクティブ・プラッタ表面は、通例、１つのリード・エレメントおよび１つのライト・エレメントが関連付けられている。場合によっては、１つのエレメントが、プラッタ表面に対して読み出しおよび書き込みの双方を実行するために使用される場合もあるが、通例では、別個のリードおよびライト・エレメントが設けられる（しかし、これらは双方共同じリード／ライト・ヘッドの一部であってもよい）。リードおよびライト・エレメントは、通常、可動アクチュエータ・アームの端部に結合され、可動アクチュエータ・アームが、これらを対応するプラッタの表面に関して制御可能に位置付けることを可能にする。ドライブ・コントローラ２２の制御下でアクチュエータ・アームを動かすために、ボイス・コイル・モータまたは他のタイプのモータを使用することができる。データは、通常、プラッタ表面上の既知の位置にある、固定長ブロックのディスク・ドライブ・プラッタに格納される（即ち、対応するトラックの既知の地点）。また、対応するアクセス動作の間にリードまたはライト・エレメントを位置付けるときに使用するために、ディスク・プラッタの表面上に、サーボ情報が提供されてもよい。
【００４７】
[0055]  ディスク・ドライブ動作の間、プラッタ２６は所定の速度で中心軸の回りを回転させられる。通例、ドライブ・コントローラ２２は、リードまたはライト要求を外部ソースから（例えば、プロセッサ１２のオペレーティング・システム１８等から）受けて、そのドライブからデータのブロックを読み出す（リード要求に対して）またはデータのブロックをドライブに書き込む（ライト要求に対して）ことによって、要求を実行する。リードおよびライト要求双方に対して、ドライブ・コントローラ２２は最初に対応するリードまたはライト・エレメントに、該当するトラックをシークさせる。エレメントがトラックの中心に置かれた後、ドライブ・コントローラは、トラックの所望のブロック位置（またはセクタ）をリードまたはライト・エレメントの下に置くのに十分な量だけプラッタが回転するのを待ち、次いでデータをそのブロック位置から読み出させるかまたはそこに書き込ませる。
【００４８】
[0056]  ディスク・ドライブは、通例、ランダム・アクセス記憶デバイスである。即ち、任意の時点において、アクティブなプラッタ表面の内任意のものにおける任意のブロック位置またはセクタに対して、１つのデータ・ブロックを読み出すまたは書き込むことができる。 Advanced Format Standard（高度フォーマット規格）として知られる１つのディスク・ドライブ規格では、個々のデータ・ブロックはサイズが４０９６バイトである。他の規格では、他のサイズが使用される場合もある。一般的な書き込み技法では、ディスク・ドライブに格納されるデータ・ファイルは、複数のブロックに分割されてもよく、各ブロックは該当するブロック・サイズを有する。例えば、１つのファイルｆは、１組の｛ｆｉ｝Ｍｉ＝１データ・ブロックに分解されてもよい。次いで、ディスク・プラッタ上の利用可能なブロック位置に、個々のブロックを格納することができる。ディスク上のファイルに関連する種々のブロックの位置を追跡するレコードが維持される。多くの場合、プラッタ表面上で利用可能なブロック位置は、全てが一緒にグループ化されなくてもよい。つまり、ディスク表面上でブロックが格納される位置は、必ずしも互いに近いとは限らない。即ち、ファイルに関連するブロックは、場合によっては、１つ以上のプラッタの表面にわたって分散されることもある。
【００４９】
[0057]  一般的なリードのシナリオでは、ドライブ・コントローラ２２はその入力において、オペレーティング・システム１８からブロック要求を受ける。ブロックｆｉを求めるリード要求がコントローラ２２に到達したとき、コントローラ２２は最初にｆｉが現在ドライブ・キャッシュ２４内に配置されているか否かチェックすることができる。配置されている場合、コントローラ２２は要求に応答してブロックｆｉをキャッシュ２４からオペレーティング・システム１８に移させる。これは、典型的なディスク・リード動作と比較して、瞬時的な転送と見なすことができ、リード・プロセスを著しく高速化することができる。ブロックｆｉがキャッシュ２４内に配置されていない場合、ランダム・ブロック・アクセス時間Ｔでこのブロックをプラッタ２６から読み出す。ブロック・アクセス時間Ｔは、次のように表すことができる。
【００５０】
【数１】
2016519354.tif 000003
【００５１】
ここで、Ｒ１は、回転レイテンシであり、Ｒ２はシーク時間であり、ｗ∈Ｒ（白抜き）は、プラッタの角回転速度とヘッドの回転運動との間の比率であり、ｅはコントローラ処理およびブロック読み出し時間である。この手法を使用すると、リード・プロセスをＧＩ／Ｇ／１／Ｄキューとしてモデル化することができる。ここで、Ｄはキャッシュ・サイズの関数であり、平均サービス・レートは１／Ｅ［Ｔ］で与えられる。認めることができるように、ファイルに関連するブロックがディスク・ドライブのプラッタにわたってランダムに分散されている場合、ファイルに関連するブロックの全てをディスク・ドライブから個々に読み出すプロセスは、非常に時間を浪費する可能性がある。
【００５２】
[0058]  本明細書において説明する種々の実施形態では、リード動作を一層高速で、一層効率的に実行することを可能にするように、データをディスク・ドライブのプラッタに格納するためにネットワーク・コーディングが使用される。このリード技法をコード化シーキング(coded seeking)と呼ぶこともできる。プラッタ表面上の対応する位置にファイルｆに関連する生データ・ブロックｆｉを格納する代わりに、そのファイルに関連するデータのネットワーク・コード化ブロックを格納する。ネットワーク・コーディングとは、データ・エレメントの線形組み合わせを生成することによってデータをエンコードする技法である。これらの線形組み合わせは、後に、デコードされて、元のデータ・エレメントを抽出することができる。デコーディング・プロセスは、通例、線形技法を使用して元のデータ・エレメントについて解くために、十分な数の線形組み合わせ（および／または元のデータ・エレメント）が「自由度」として利用可能であることを必要とする。
【００５３】
[0059]  ネットワーク・コーディングの良く知られている形態の１つに、ランダム線形ネットワーク・コーディング（ＲＬＮＣ）として知られるものがある。ＲＬＮＣを使用すると、データ・エレメントは、ランダムに生成される係数を使用して、線形に組み合わせられる。同じデータ・エレメントの異なる線形組み合わせを生成するために、ランダムに生成された係数の異なる集合が使用される場合、結果的に得られる線形組み合わせは、通例互いに線形に独立であり（即ち、これらは革新的である(innovative)）、つまり、各々が、デコーディングにおいて使用することができる自由度を表す。
【００５４】
[0060]  コード化格納のために可能な１つの技法では、ファイルｆをＬ個の等しいサイズの「ブロック・ウィンドウ」またはジェネレーション(generation)に分離することができ、各々、ｒ個のデータ・ブロックを含む。このファイルのｌ番目のブロック・ウィンドウを、Ｂｌと呼んでもよい。ブロック・ウィンドウＢｌは、ファイルのブロック・インデックスの部分集合を含み、ファイルに関連する全ての他のブロック・ウィンドウからは素である(adjoint)ことができる。コード化ブロックｃｉは、以下のように、ブロック・ウィンドウＢｌに対して生成することができる。
【００５５】
【数２】
2016519354.tif 000004
【００５６】
ここで、αｋはランダム係数であり、ｆｋはブロック・ウィンドウＢｌに関連するデータ・ブロックである。ブロック・ウィンドウＢｌ毎に複数の異なるコード化ブロックｃｉを生成することができる。係数αｋは、ブロック・ウィンドウＢｌに関連する個々のコード化ブロックｃｉが、高い確率で、そして場合によっては確信をもって、互いに線形に独立となるように、サイズｑの有限フィールドＦｑ（白抜き）から引き出すことができる。各コード化ブロックｃｉは、つまり、対応するブロック・ウィンドウにおける全てのデータ・ブロックについて部分的な情報を提供する。ファイルｆの各ブロック・ウィンドウに関連するコード化ブロックは、ディスク・ドライブのプラッタに格納される。ブロック・ウィンドウ毎に生成され格納されるコード化ブロックｃｉの数は、少なくとも、ブロック・ウィンドウのデータ・ブロックの全てについて解くのに必要な数であるが、この数よりも多いことも可能である。各コード化ブロックを生成するために使用される係数αｋは、コード化ブロックと関連付けてディスク表面に格納することもできる（例えば、メタデータとして、または他の何らかの様態で）。
【００５７】
[0061]  オペレーティング・システム１８が最終的にディスク・ドライブ１６からファイルｆを読み出すことを望む場合、全てのブロック・ウィンドウが復元され終えるまで、ブロック・ウィンドウの各々をディスク・ドライブ１６から１つずつ読み出すことができる。ブロック・ウィンドウ毎に、オペレーティング・システム１８はリード要求をドライブ・コントローラ２２に送り、ブロック・ウィンドウに関連する革新的コード化ブロック（または自由度）を求める。リード要求毎に、ドライブ・コントローラ２２は、１つのコード化ブロックを、このコード化ブロックに関連する係数と共に引き出すことができる。オペレーティング・システム１８は、ブロック・ウィンドウのデータ・ブロックをデコードするのに十分な数の自由度が引き出され終えるまで、革新的コード化ブロックを求める要求を送り続けることができる。ネットワーク・コード化データ・ブロックをデコードするための任意の技法が、コード化ブロックをデコードするために使用されてもよい。少なくとも１つの実現例では、コード化ブロックが受け取られる毎にそれらをデコードするために、オペレーティング・システム１８によって、ガウス−ジョーダン排除または同様の技法というような、累進デコーディング技法(progressive decoding technique)が使用されてもよい。他の技法が代わりに使用されてもよい。更に詳しく説明するが、コード化ブロック（または自由度）を引き出すためにドライブ・コントローラ２２によって使用される技法は、ファイルｆの全体的な引き出しを著しく高速化することができる。
【００５８】
[0062]  ドライブ・コントローラ２２は、格納された各ファイルの各ブロック・ウィンドウに関連する全てのコード化ブロックのプラッタ上の位置のレコードを有することができる。特定のファイルの特定のブロック・ウィンドウに関連する革新的コード化ブロックを求めるリード要求を受けたとき、ドライブ・コントローラ２２は、プラッタに格納された対応するコード化ブロックの内どれが、ディスク・ドライブ１６のリード・ヘッドの現在位置に最も近いか判定することができる。次いで、ドライブ・コントローラ２２は、対応するプラッタ表面上の対応するトラックをシークし、そのコード化ブロックを読み出すことができる。同じファイルの同じブロック・ウィンドウに関連する革新的コード化ブロックを求める次のリード要求を受けたとき、ドライブ・コントローラ２２は、プラッタに格納された他の対応するコード化ブロックの内どれが、ディスク・ドライブ１６のリード・ヘッドの現在位置に最も近いか判定することができる。次いで、新たな要求毎に、同じ手順を繰り返すことができる。このように、ある実現例では、ドライブ・コントローラ２２は、同じファイル・リード動作中に所与のブロック・ウィンドウに関連する同じコード化ブロックをオペレーティング・システムに二度送らないように、最後に引き出されたデータを追跡し続けることができる（これは、２度目に読み出された同じコード化ブロックは、デコーディングにおいて使用するための新たな自由度を提供しないからである）。リード要求毎に「最も近い」コード化ブロックが使用されるので、ファイル・リード動作の間、大量のシークおよびレイテンシ時間を回避することができる。
【００５９】
[0063]  ある実現例では、ドライブ・コントローラ２２は、最初に、識別されたブロック・ウィンドウに関連する革新的コード化ブロックが現在ドライブ・キャッシュ２４内に格納されているか否か、コード化ブロックをプラッタから引き出す前に判定してもよい。ドライブ・キャッシュ２４内に、識別されたブロック・ウィンドウに関連コード化ブロックがあり、このコード化ブロックが未だ現在のファイル・リード動作中にオペレーティング・システム１８に送られていない場合、リード要求に応答して、このコード化ブロックをドライブ・キャッシュ２４からオペレーティング・システム１８に送ればよい。
【００６０】
[0064]  典型的なシナリオでは、オペレーティング・システム1８がブロック・ウィンドウＢｌについて自由度を求める要求を送った場合、対応するディスク・ドライブのリード・ヘッドおよびプラッタは、互いに関してランダムな物理的定位(random physical orientation)となる。図２は、このような状況を示すディスク・ドライブ３０の上面図である。図示のように、ドライブ３０は、方向３４に回転しているプラッタ３２、アクチュエータ・アーム３８の端部に結合されたリード・エレメント３６、およびディスク・コントローラの制御下で軸を中心にアクチュエータ・アーム３８を旋回させるボイス・コイル・モータ４０を含む。リード要求を受けたとき、リード・エレメント３６は、プラッタに格納された種々のコード化ブロックに関してランダムな位置にあってもよい。次いで、ドライブ・コントローラは、プラッタにおける種々のコード化ブロックの内どれが、リード・エレメント３６の現在位置に最も近いか判定することができる。異なる実施形態では、「最も近い」という用語は、物理的に最も近い（即ち、コード化ブロックとリード・エレメントとの間の最短距離）、または時間的に最も近い（即ち、リード・エレメントを最も早く移動させることができるブロック）ことのいずれかを意味することができる。最も近いブロックを発見する技法は、リストにおける各ブロックまで移動するのに必要とされる距離または時間を計算し、そのリストから最小エレメントを発見することを含むこともできる。この距離または時間の計算は、ヘッドの現在位置、および各ブロックの物理位置に基づく。ウィンドウにおける全てのブロックに最適にアクセスする順序を計算するために、周知の巡回セールスマン問題（ＴＳＰ）の解または近似解を求めても良い。更に具体的には、各ブロックを、無指向加重グラフにおけるエレメントと見なしてもよい。次いで、可能なヘッドおよびプラッタの動きをこのグラフにおける経路としてモデル化し、重みは移動する距離または時間の関数とする。
【００６１】
[0065]  最も近いコード化ブロックｃｎが識別された後、ドライブ・コントローラは、リード・エレメント３６がコード化ブロックの上方に位置付けられ、このコード化ブロックに関連するトラック４２を追従するまで、アクチュエータ・アーム３８を旋回させることができる（これは、シーク動作として知られる）。ドライブ・コントローラは、このプロセスの間リード・エレメント３６の現在位置を追跡するために、プラッタ３２の表面から読み出したサーボ情報を使用してもよい。一旦リード・エレメント３６が該当するトラック４２上に来たなら、ドライブ・コントローラは、リード・エレメント３６が所望のコード化ブロックｃｎの上方に来る地点にプラッタ３２が回転するまで待つ。トラック４２に到達するリード・エレメントと、リード・エレメント３６に到達する所望のコード化ブロックとの間の時間遅延は、回転レイテンシとして知られている。リード・エレメント３６がトラック４２上の所望のコード化ブロックに到達したとき、ドライブ・コントローラはプラッタ表面からコード化セクタ（および対応する係数情報）を読み出すことができる。次いで、読み取られる他のコード化ブロック毎に、このプロセスを繰り返すことができる。
【００６２】
[0066]  既に説明したように、多くの場合、ブロック・ウィンドウに関連するコード化ブロックは、１つ以上のプラッタ表面上にランダムに広げられることが可能である。リード要求を受ける毎に、ディスク・コントローラは、ドライブに格納されている次に「最も近い」革新的コード化ブロックを選択して引き出すことができる。先の式（１）と同じ形態を使用すると、ｎ番目のコード化ブロック（またはｎ番目の自由度）に対するランダム・アクセス時間Ｔｎは、以下のように表すことができる。
【００６３】
【数３】
2016519354.tif 000005
【００６４】
ここで、Ｒ１，ｎは、ｎ番目のコード化ブロックの回転レイテンシであり、Ｒ２，ｎはｎ番目のコード化ブロックのシーク時間である。
[0067]  既に説明したように、リード要求を受けると、ドライブ・コントローラは、どのコード化ブロックがリード・エレメントに最も近いか判定し、次いでそのコード化ブロックを読み出すことができる。リード・エレメントをこのブロックの先頭まで移動させるのに要する時間は、リード・エレメントをコード化ブロックのトラックと整列させるためにアクチュエータ・アームが回転しなければならない角度、およびリード・エレメントが次にこのトラックに沿って対象のコード化ブロックの先頭まで移動しなければならない距離の双方に線形に関係する。１つの可能な手法では、パラメータθ２，ｎ（図２参照）は、ｎ番目のコード化ブロックｃｎに該当するトラック４２の上方にリード・エレメントを位置付けるためにアクチュエータ・アーム３８が回転しなければならない最大運動範囲の割合として表現することができ、パラメータθ１，ｎは、該当するトラック４２においてｎ番目のコード・ブロックｃｎを１回読み出すためにプラッタ３２が回転しなければならない最大回転量の割合として表現することができる。
【００６５】
[0068]  Ｒ１およびＲ２が同じコード化ブロックを指すと仮定し、更にブロック毎の回転レイテンシおよびシーク時間が統計的に独立であるとすると、ブロック・ウィンドウＲ１，１およびＲ２，１に関連する最初のコード化ブロックについて、アクセス時間Ｔ1は、次のように計算することができる。
【００６６】
【数４】
2016519354.tif 000006
【００６７】
【数５】
2016519354.tif 000007
【００６８】
ここで、最小値が同じコード・ブロックに適用される。Ｒ１，１およびＲ２，１は双方共固定数の均一ランダム変数の最小値であるので、それらのＰＤＦは以下の共通形態を有する。
【００６９】
【数６】
2016519354.tif 000008
【００７０】
次いで、Ｔ１の予想値は、次のように与えられる。
【００７１】
【数７】
2016519354.tif 000009
【００７２】
したがって、ｒが増大すると、ランダム自由度にアクセスするときのディスク・ドライブの速度も上昇する。尚、ｒが無限大に向かうに連れて、Ｅ［Ｔ１］の値はＥ［ｅ］に向かうことは注記してしかるべきである。最近のハード・ディスク・ドライブでは、シーク時間および回転レイテンシは、全リード時間の内約２／３を占める可能性がある。したがって、実用的なシステムでは、以上で説明した技法を使用すると、著しい速度利得を達成できることが可能である。図３は、ｗの複数の異なる値について、Ｅ［Ｔ１］がどのようにｒと共に変化するかを示すプロットである。
【００７３】
[0069]  前述のように、ブロック・ウィンドウに関連するコード化ブロックは、ディスク・ドライブの１つのプラッタ表面、または複数のプラッタ表面に格納することができる。複数のプラッタ表面が使用される場合、リード・エレメントの現在位置に最も近いコード化ブロックを識別するために、同様の技法を使用すればよい。即ち、次のリード動作のためのアクセス時間を最小にするコード化ブロックを、この動作のために選択すればよい。
【００７４】
[0070]  コンテンツがｒ個のブロックに跨がってコード化された場合、対応するブロック・ウィンドウをデコードするためには、ｒ個のブロック全てにアクセスする必要がある。一般に、コード化−シーキング利得は、アクセスされた最初の自由度に対して最大となり、後続の自由度に対して減少する。最後の自由度に対して、コード化シーキング・システムのアクセス時間は、非コード化方式と同等になることもある。ｎと共に減少する高速利得を測るために、比率Ｅ［Ｔ］／Ｅ［Ｔｎ］をメトリックとして使用することができる。近似として、パラメータｒを上の式（７）におけるｒ−ｎ＋１と置き換えてもよい。図４は、ディスク・ドライブがブロック・ウィンドウの自由度に沿って動くに連れて、Ｅ［Ｔ］／Ｅ［Ｔｎ］がどのように変化し得るかを示すプロット例である。
【００７５】
[0071]  シーク時間の高速化には、ブロッキングの確率低減を含む、追加の利点を得ることができる。特に、ディスク・ドライブをＧＩ／Ｇ／１／Ｄキューとしてモデル化する場合、非コード化システムに対して、
【００７６】
【数８】
2016519354.tif 000010
【００７７】
に比例するブロッキング確率ＰＵｂを有する。
ここで、λｉおよびμｉは、それぞれ、到達およびサービス率(service rate)に対するｉ番目のモーメントである。第１自由度に対する等価なコード化シーキング・ブロッキング確率ブロッキング確率ＰＣｂは、
【００７８】
【数９】
2016519354.tif 000011
【００７９】
に比例する。
Ｅ［ｅ］が小さい場合、
【００８０】
【数１０】
2016519354.tif 000012
【００８１】
となる。
[0072]  ハード・ディスク・ドライブの高速化、およびブロッキング確率の低下は、コード化シーキングの使用によって可能とされ、ディスク・ドライブ内における物理的に動く部品に対する依存度を低下させる傾向がある。種々の実施形態では、この技法は、オペレーティング・システムに、複数のコード化ブロックを格納し、十分な自由度が読み取られたときにブロックをデコードすることを要求する場合がある。本質的に、ディスク・ドライブによって本来行われる作業は、オペレーティング・システムまたはドライブ・コントローラに移され、こうして高速ＲＡＭまたは高速キャッシュをそれぞれ使用して実行することができる。コード化シーキングの利点は、要求が均一にランダムであるときに最も明白になる。要求に対してより多くの構造がある場合、コード化シーキングの利点よりも、コード化書き込みを実行しなければならない欠点が上回るおそれがある。コード化シーキングを実行するために使用されるブロック・ウィンドウのサイズは、本技法の利点全体に影響を及ぼす可能性がある。例えば、ブロック・ウィンドウが小さすぎる場合、コード化シーキングの利点は減少する。ブロック・ウィンドウが大きすぎる場合、デコーディング遅延が増大するおそれがある。特定のシステムにおいて使用すべき最良のブロック・ウィンドウ・サイズは、記憶ユニットのサイズ、ファイル・サイズ、ならびにオペレーティング・システムのタイミングおよび遅延保証要件に関係する。
【００８２】
[0073]  図５、図６、および図７は、実施形態にしたがってディスク・ドライブにおいてコード化シーキングを実現するための種々のプロセス例を示す流れ図である。
[0074]  ここでは、流れ図における矩形エレメント（図５におけるエレメント５２によって代表される）は「処理ブロック」を示し、コンピュータ・ソフトウェア命令または命令のグループを表すことができる。尚、図５、図６、および図７の流れ図は、本明細書において説明した設計の一実施形態例を表し、概要を説明したプロセスに全体的に従うこのような図における変形(variations)は、本明細書において説明し特許請求する概念、システム、および技法の範囲内に該当すると見なすことは、注記してしかるべきである。
【００８３】
[0075]  あるいは、処理ブロックは、例えば、ディジタル信号プロセッサ回路、特定用途集積回路（ＡＳＩＣ）、またはフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）のような、機能的に等価な回路によって実行される動作を表すこともできる。この流れ図は、いずれの特定のプログラミング言語のシンタックスも示さない。むしろ、この流れ図は、当業者が回路を製作するためおよび／または対応する処理を実行するコンピュータ・ソフトウェアを生成するために必要とする機能的情報を示す。尚、ループおよび変数の初期化、ならびに一時的変数の使用というような、多くの決まり切ったプログラム・エレメントは示されない場合もあることは、注記してしかるべきである。本明細書において別段示されない限り、説明する特定のシーケンスは、例示に過ぎず、本明細書において説明および／または特許請求する概念の主旨から逸脱することなく変更できることは、当業者には認められよう。つまり、別段述べられない限り、以下で説明するプロセスは順不問であり、可能であれば、図５、図６、および図７に示すシーケンスを任意の便利な順序または望ましい順序で実行できることを意味する。
【００８４】
[0076]  図５は、実施形態にしたがってコード化シーキングをサポートするように、ネットワーク・コーディングを使用してディスク・ドライブにデータを格納する方法５０を示す流れ図である。方法５０は、例えば、オペレーティング・システム、ディスク・ドライブ・コントローラ、あるいはデータ記憶デバイス、システム、またはネットワークに関連する何らかの他のプロセッサまたはコントローラと関連付けて実現することができる。ある実施形態では、方法５０に関連するアクトは、一緒に動作する複数のプロセッサおよび／またはコントローラを使用して実行されてもよい。最初に、ディスク・ドライブに格納されるファイルを受けるまたは識別することができる（ブロック５２）。ファイルは、複数の等しい幅のブロック・ウィンドウ８に分割されてもよく、ブロック・ウィンドウ８は、各々、ｒ個のデータ・ブロックを有する（ブロック５４）。ブロック・ウィンドウの各々に対して、ネットワーク・コーディング技法を使用して、ある数の革新的コード化ブロックを生成することができる（ブロック５６、５８）。コード化ブロックの各々は、対応するｒ個のデータ・ブロックの線形組み合わせを含むことができる。ｒ個のデータ・ブロックは、コード化ブロックが互いに線形に独立するように、ランダム係数を使用して作られる。一般に、ｒ個以上のコード化ブロックが、ブロック・ウィンドウ毎に生成されればよい。次いで、ブロック・ウィンドウ毎に生成されたコード化ブロックは、ディスク・ドライブに格納することができる（ブロック６０）。このプロセスは、元のファイルのブロック・ウィンドウの全てが処理され格納され終えるまで繰り返すことができる（ブロック６２、６４）。コード化シーキングをサポートしてコード化データをディスク・ドライブに書き込むための他の技法または変更技法を代わりに使用してもよい。例えば、このような手法の１つでは、最初にブロック・ウィンドウを形成せずに、ファイルを単にｒ個のデータ・ブロックに分割してもよい。次いで、格納のためにコード化ブロックを生成するために、Ｒ個のデータ・ブロックを使用してもよい。
【００８５】
[0077]  図６は、実施形態にしたがって、コーディング・シーキングを使用してディスク・ドライブからデータを引き出すときに使用する方法７０を示す流れ図である。方法７０は、例えば、オペレーティング・システム、ディスク・ドライブ・コントローラ、あるいはデータ記憶デバイス、システム、またはネットワークに関連する何らかの他のプロセッサまたはコントローラと関連付けて実現することができる。ある実施形態では、方法５０に関連するアクトは、一緒に動作する複数のプロセッサおよび／またはコントローラを使用して実行されてもよい。複数のネーティブ・データ・ブロックに関連する革新的コード化データブロック（または自由度）を要求するリード要求を最初に受ける（ブロック７２）。複数のネーティブ・データ・ブロックは、例えば、データ・ファイルの特定のブロック・ウィンドウに関連する複数のブロック、またはネーティブ・データ・ブロックの何らかの他のグループを含むことができる。次に、複数のネーティブ・データ・ブロックに関連する革新的コード化データ・ブロックから、ディスク・ドライブのリード・ヘッドの現在位置に最も近いものを選択する（ブロック７４）。複数のネーティブ・データ・ブロックに関連することが分かっているこのようなコード化ブロックのグループから、革新的コード化データ・ブロックを選択すればよい。次いで、ディスク・ドライブは、リード・エレメントを、選択したコード化データ・ブロックの位置に移動させ、コード化ブロックを読み出させることができる（ブロック７６）。このプロセスは、複数のネーティブ・データ・ブロックに関連する革新的コード化データ・ブロックを求める新たなリード要求を受ける毎に、繰り返すことができる。ある実現例では、共通データ・リード・プロセスの間（例えば、特定のファイルのリード動作の間）に最後に読み出された複数のネーティブ・データ・ブロックに関連するコード化データ・ブロックは、選択プロセスの間無視され、現在のリード要求に応答してドライブから引き出されたコード化データ・ブロックが、以前に引き出されたコード化ブロックとは線形に独立であるようにする。
【００８６】
[0078]  図７は、実施形態にしたがって、コーディング・シーキングをサポートするディスク・ドライブからデータを引き出すときに使用する方法８０を示す流れ図である。方法８０は、例えば、データを不揮発性形態で格納するためにディスク・ドライブをしようする計算システムのオペレーティング・システム、あるいはディスク・ドライブに関連する何らかの他のプロセッサまたはコントローラと関連付けて実現されてもよい。最初に、ネーティブ・データ・ブロックのグループをディスク・ドライブから引き出す必要があると判定する（ブロック８２）。ある実現例では、ネーティブ・データ・ブロックのグループは、データ記憶デバイスに格納されたデータ・ファイルに関連するブロック・ウィンドウを表すこともできるが、他のデータ・ブロックのグループを代わりに使用してもよい。ある実施形態では、データ・ブロックのグループ内における１つのデータ・ブロックのみが対象になることもあるが、所望のブロックにアクセスするためには、ブロック全体を引き出してデコードする必要がある。次に、データ・ブロックのグループに関連する革新的コード化ブロック（または自由度）を読み出すことを要求するリード要求を、ディスク・ドライブに送ることができる（ブロック８４）。この要求に応答してディスク・ドライブから読み出されたコード化ブロックは、続いてディスク・ドライブから受け取られ、一時的にメモリに格納される（ブロック８６）。次に、コード化ブロックからネーティブ・データ・ブロックのグループを抽出するのに十分な革新的コード化ブロック（または自由度）がディスク・ドライブから引き出されたか否か判定を行うことができる（ブロック８８）。否定である場合（ブロック８８においてＮ)、データ・ブロックのグループに関連する革新的コード化ブロックを要求する他のリード要求をディスク・ドライブに送ることができ（ブロック８４）、このプロセスを繰り返す。このプロセスは、デコーディングを可能にするだけの十分な数の革新的コード化ブロックが引き出され終えるまで、継続することができる（ブロック８８においてＹ）。この時点において、革新的コード化ブロックをデコードすることができる（ブロック９０）。ある実現例では、これは、引き出されたコード化ブロックの全てを使用する全デコーディング動作を含んでもよい。累進デコーディングが使用される実現例では、これは、デコーディング・プロセスの最後のステップを実行することを含めばよい。
【００８７】
[0079]  以上では磁気ハード・ディスク・ドライブのコンテキストで説明したが、本明細書において説明した特徴の多くは、例えば、他のディスク・ベース記憶デバイス（例えば、ＣＤＲＯＭ、ＤＶＤ、ＢｌｕＲａｙ（登録商標）ディスク等）を含む、１つ以上の可動部品を含む他のデータ記憶デバイスと関連しても使用できることは認められてしかるべきである。
【００８８】
[0080]  以上、本発明の実施形態例について説明したが、それらの概念を組み込んだ他の実施形態が使用されてもよいことは、今や当業者には明白であろう。本明細書に含まれる実施形態は、開示された実施形態に限定されるのではなく、添付した請求項の主旨および範囲のみによって限定されてしかるべきである。本明細書内において引用した全ての刊行物および引例は、本明細書において引用したことによってその内容全体が明示的に本願にも含まれるものとする。
【図１】
2016519354.tif 000013
【図２】
2016519354.tif 000014
【図３】
2016519354.tif 000015
【図４】
2016519354.tif 000016
【図５】
2016519354.tif 000017
【図６】
2016519354.tif 000018
【図７】
2016519354.tif 000019
【手続補正書】
【提出日】平成27年11月13日(2015.11.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ディスク・ベース・データ記憶デバイスにデータを格納する方法であって、
前記格納されるデータの１つ以上のブロック・ウィンドウを生成するステップであって、各ブロック・ウィンドウが、前記ディスク・ベース・データ記憶デバイスに格納される複数のデータ・ブロックを含み、前記ブロック・ウィンドウが各々Ｎ個のデータ・ブロックを有する、ステップと、
前記ブロック・ウィンドウの内１つ以上を使用して、ある数のネットワーク・コード化ブロックを生成するステップであって、各ネットワーク・コード化ブロックが、他のネットワーク・コード化ブロックとは異なる１組のランダム係数を使用して生成される、前記複数のデータ・ブロックの線形組み合わせを含む、ステップと、
対応するランダム係数と共に、前記ディスク・ベース・データ記憶デバイス内の個々のブロック位置に前記ネットワーク・コード化ブロックを書き込むステップであって、同じブロック・ウィンドウに関連するネットワーク・コード化ブロックが前記ディスク・ベース・データ記憶デバイスの１つ以上の連続ブロック位置に格納されるように、前記ネットワーク・コード化ブロックおよびブロック・ウィンドウに基づいて、前記ディスク・ベース・データ記憶デバイスにおける前記個々のブロック位置が決定される、ステップと、
を含む、方法。
【請求項２】
請求項１記載の方法において、
前記ディスク・ベース・データ記憶デバイスが、磁気ディスク・ドライブ、混成磁気およびソリッド・ステート・ディスク・ドライブ、ならびに光ディスク・ドライブの内少なくとも１つを含む、方法。
【請求項３】
請求項１記載の方法において、
前記ディスク・ベース・データ記憶デバイスに格納される複数のデータ・ブロックを識別するステップが、
前記ディスク・ベース・データ記憶デバイスに格納されるファイルを取得するステップと、
前記ファイルを、各々Ｎ個のデータ・ブロックを含む複数の等しいサイズのブロック・ウィンドウに分割するステップと、
前記複数の等しいサイズのブロック・ウィンドウから１つの選択するステップと、
を含む、方法。
【請求項４】
請求項３記載の方法であって、
生成するステップおよび格納するステップを、前記複数の等しいサイズのブロック・ウィンドウにおけるブロック・ウィンドウ毎に繰り返すステップを含む、方法。
【請求項５】
ディスク・ドライブであって、
ドライブ・コントローラと、
前記ドライブ・コントローラの制御下で、ディジタル・データを格納する少なくとも１つのプラッタと、
を含み、
前記ドライブ・コントローラが、
前記ディスク・ドライブに格納されるデータの１つ以上のブロック・ウィンドウを生成し、各ブロック・ウィンドウが、前記ディスク・ドライブに格納される複数のデータ・ブロックを含み、前記ブロック・ウィンドウが各々Ｎ個のデータ・ブロックを有し、
各ブロック・ウィンドウを使用してある数のネットワーク・コード化ブロックを生成し、各ネットワーク・コード化ブロックが、前記他のネットワーク・コード化ブロックとは異なる１組のランダム係数を使用して生成された前記複数のデータ・ブロックの線形組み合わせを含み、
対応するランダム係数と共に、前記ネットワーク・コード化ブロックを前記ディスク・ドライブにおける個々のブロック位置に書き込み、同じブロック・ウィンドウに関連するネットワーク・コード化ブロックが前記ディスク・ドライブの１つ以上の連続ブロック位置に格納されるように、前記ネットワーク・コード化ブロックおよびブロック・ウィンドウに基づいて、前記ディスク・ドライブにおける前記個々のブロック位置が決定される、
ように構成される、ディスク・ドライブ。
【請求項６】
請求項５記載のディスク・ドライブにおいて、前記ディスク・コントローラが、更に、
複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの前記少なくとも１つのプラッタからの引き出しを要求するリード要求を受け、
前記リード要求に応答して、前記少なくとも１つのプラッタに格納された前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの内、前記ディスク・ドライブのリード変換器の現在位置に最も近いものを識別し、
前記識別した革新的コード化ブロックを前記少なくとも１つのプラッタから読み出すように構成され、
前記識別された前記革新的コード化ブロックが、前記複数のネーティブ・データ・ブロックの線形組み合わせと、前記線形組み合わせを生成するために使用された係数のリストとを含む、ディスク・ドライブ。
【請求項７】
請求項６記載のディスク・ドライブにおいて、
前記ドライブ・コントローラが、更に、複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの引き出しを要求する前記リード要求を受け、前記リード要求に応答して、前記ディスク・ドライブに格納された前記複数のネーティブ・データ・ブロックに関連する革新的コード化ブロックの内、前記ディスク・ドライブのリード変換器の現在位置に最も近いものを識別し、前記リード変換器を使用して、前記識別した革新的コード化ブロックを読み出すように構成される、ディスク・ドライブ。
【請求項８】
請求項７記載のディスク・ドライブにおいて、
前記ドライブ・コントローラが、格納されたコード化ブロックの内、アクセスするために最小量の時間を要するもの、および前記リード変換器に物理的に最も近いものの内少なくとも１つを選択することによって、前記リード変換器の現在位置に最も近い前記革新的コード化ブロックを識別するように構成される、ディスク・ドライブ。
【請求項９】
請求項７記載のディスク・ドライブ において、
前記ドライブ・コントローラが、格納されたコード化ブロックの内、前記リード変換器に物理的に最も近いものを選択することによって、前記リード変換器の現在位置に最も近い前記革新的コード化ブロックを識別するように構成される、ディスク・ドライブ。
【請求項１０】
請求項７記載のディスク・ドライブ において、
前記ドライブ・コントローラが、前記リード変換器の現在位置に最も近い革新的コード化ブロックを識別するとき、最後に引き出された前記複数のネーティブ・データ・ブロックに関連するコード化ブロックを無視するように構成される、ディスク・ドライブ。
【国際調査報告】
2016519354.tif 000020