(57)【要約】【課題】記憶装置の性能を向上させる。【解決手段】  実施形態の記憶装置は、データを記憶する複数のブロックから構成される不揮発性記憶媒体と、ホストから受信したコマンドが指定するアドレス範囲に応じて不揮発性記憶媒体へのデータのライトを制御するコントローラとを具備する。また、不揮発性記憶媒体に記憶されたデータはブロックごとに消去可能である。そして、コントローラは複数のコマンドがそれぞれ指定するアドレス範囲同士の間隔が第１の範囲以内であり、かつ、これら複数のコマンドがそれぞれ指定するアドレス範囲の合計が第２の範囲以上となるコマンド群に属するコマンドをホストから受信したことに応じ、ブロックの１つには同一のコマンド群に属するコマンドに応じてホストから受信するデータをライトする。【選択図】図１
2017224113.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する複数のブロックから構成される不揮発性記憶媒体と、
ホストから受信したコマンドが指定するアドレス範囲に応じて前記不揮発性記憶媒体への前記データのライトを制御するコントローラと、
を具備し、
前記データは前記ブロックごとに消去可能であり、
前記コントローラは、
複数のコマンドがそれぞれ指定する前記アドレス範囲同士の間隔が第１の範囲以内であり、かつ、
前記複数のコマンドがそれぞれ指定する前記アドレス範囲の合計が第２の範囲以上となるコマンド群に属するコマンドを前記ホストから受信したことに応じ、
前記ブロックの１つには同一の前記コマンド群に属するコマンドに応じて前記ホストから受信する前記データをライトする
記憶装置。
【請求項２】
データを記憶する不揮発性記憶媒体と、
ホストから受信したコマンドが指定するアドレス範囲に応じて前記不揮発性記憶媒体からの前記データのリードを制御するコントローラと、
前記ホストと前記不揮発性記憶媒体との間で前記データを一時的に格納するバッファと、
を具備し、
前記コントローラは、
複数のコマンドがそれぞれ指定する前記アドレス範囲同士の間隔が第１の範囲以内であり、かつ、
前記複数のコマンドがそれぞれ指定する前記アドレス範囲の合計が第２の範囲以上となるコマンド群に属する第１のコマンドを前記ホストから受信したことに応じ、
前記第１のコマンドが指定する前記アドレス範囲以外の所定のアドレス範囲に記憶されている前記データを、前記不揮発性記憶媒体からリードし前記バッファに格納する
記憶装置。
【請求項３】
データを記憶する複数のブロックから構成される不揮発性記憶媒体と、
ホストから受信したコマンドが指定するアドレス範囲に応じて前記不揮発性記憶媒体への前記データのライトを制御するコントローラと、
を具備し、
前記データは前記ブロックごとに消去可能であり、
前記コントローラは、
第１のコマンドが指定する前記アドレス範囲の最終アドレスと
第２のコマンドが指定する前記アドレス範囲の開始アドレスとの差分が１以上かつ第１の閾値以下である第１のコマンド群に属し、かつ、
前記第１のコマンド群に属する複数のコマンドのそれぞれが指定する前記アドレス範囲の合計数が第２の閾値以上となる第２のコマンド群に属するコマンドを前記ホストから受信したことに応じ、
前記ブロックの１つには同一の前記第２のコマンド群に属するコマンドに応じて前記ホストから受信する前記データをライトする
記憶装置。
【請求項４】
データを記憶する不揮発性記憶媒体と、
ホストから受信したコマンドが指定するアドレス範囲に応じて前記不揮発性記憶媒体からの前記データのリードを制御するコントローラと、
前記ホストと前記不揮発性記憶媒体との間で前記データを一時的に格納するバッファと、
を具備し、
前記コントローラは、
第１のコマンドが指定する前記アドレス範囲の最終アドレスと
第２のコマンドが指定する前記アドレス範囲の開始アドレスとの差分が１以上かつ第１の閾値以下である第１のコマンド群に属し、かつ、
前記第１のコマンド群に属する複数のコマンドのそれぞれが指定する前記アドレス範囲の合計数が第２の閾値以上となる第２のコマンド群に属する第３のコマンドを前記ホストから受信したことに応じ、
前記第３のコマンドが指定する前記アドレス範囲の最終アドレスより大きく、かつ、前記第３のコマンドが指定する前記アドレス範囲の最終アドレスとの差分が前記第１の閾値以下となるアドレスを先読み開始アドレスとし、
前記先読み開始アドレスから所定のアドレス範囲に記憶されている前記データを、前記不揮発性記憶媒体からリードし前記バッファに格納する
記憶装置。
【請求項５】
前記第１の閾値は１である
請求項３又は請求項４に記載の記憶装置。
【請求項６】
前記コントローラは、
複数のエントリーから構成される連続コマンド管理テーブルをさらに有し、
前記連続コマンド管理テーブルの１つのエントリーは、
前記第１のコマンド群に属するコマンドのうち最後に受信したコマンドが指定する前記アドレス範囲の最終アドレスと
前記第１のコマンド群に属する複数のコマンドのそれぞれが指定する前記アドレス範囲の合計数とを少なくとも含み、
前記コントローラは、
前記連続コマンド管理テーブルのそれぞれのエントリーによって、複数の前記第２のコマンド群のそれぞれを識別する
請求項３又は請求項４に記載の記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、記憶装置に関する。
【背景技術】
【０００２】
記憶装置においては、信頼性の向上と共にリードライト性能を向上させることができる技術を導入することが求められている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１４／０１８１３２７号明細書
【特許文献２】米国特許第８６７１２５８号明細書
【特許文献３】米国特許出願公開第２０１４／０２３７１７０号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、記憶装置の性能を向上させることにある。
【課題を解決するための手段】
【０００５】
上記課題を達成するために、実施形態の記憶装置は、データを記憶する複数のブロックから構成される不揮発性記憶媒体と、ホストから受信したコマンドが指定するアドレス範囲に応じて不揮発性記憶媒体へのデータのライトを制御するコントローラとを具備する。また、不揮発性記憶媒体に記憶されたデータはブロックごとに消去可能である。そして、コントローラは複数のコマンドがそれぞれ指定するアドレス範囲同士の間隔が第１の範囲以内であり、かつ、これら複数のコマンドがそれぞれ指定するアドレス範囲の合計が第２の範囲以上となるコマンド群に属するコマンドをホストから受信したことに応じ、ブロックの１つには同一のコマンド群に属するコマンドに応じてホストから受信するデータをライトする。
【図面の簡単な説明】
【０００６】
【図１】第１の実施形態の記憶装置の構成を説明するブロック図である。
【図２】第１の実施形態の記憶装置を用いたストレージシステムの構成を説明するブロック図である。
【図３】第１の実施形態の記憶装置が受信するコマンドを説明する図である。
【図４】第１の実施形態の記憶装置が受信するコマンドを説明する図である。
【図５】第１の実施形態の記憶装置が受信するコマンドを説明する図である。
【図６】第１の実施形態のシーケンシャルコマンド管理テーブルの構成を説明する図である。
【図７】第１の実施形態の記憶装置が受信するコマンドを説明する図である。
【図８】第１の実施形態のシーケンシャル判定部の動作を説明する図である。
【図９】第１の実施形態の記憶装置が同一ファイルコマンド群を判定した結果を説明するための図である。
【図１０】第１の実施形態のシーケンシャル判定部の動作を説明するフローチャートである。
【図１１】第１の実施形態のシーケンシャル判定部の詳細な構成を説明するブロック図である。
【図１２】第１の実施形態のコマンドテーブルの構成を説明する図である。
【図１３】第２の実施形態の記憶装置の構成を説明するブロック図である。
【図１４】第２の実施形態の物理ページ及び物理ブロックの構成を示す図である。
【図１５】第２の実施形態の論理ページの構成を説明する図である。
【図１６】第２の実施形態の論理ブロックの構成を説明する図である。
【図１７】第２の実施形態のデータパケットの構成を説明する図である。
【図１８】第２の実施形態の各論理ブロックに割り当てられるファイルＩＤを説明する図である。
【図１９】第２の実施形態の論理ブロック管理テーブルの構成を説明する図である。
【図２０】第２の実施形態のデータパケット生成部の動作を説明する図である。
【図２１】第３の実施形態の記憶装置の構成を説明するブロック図である。
【図２２】第３の実施形態の記憶装置が受信するコマンドを説明する図である。
【図２３】第３の実施形態の先読みの動作を説明する図である。
【図２４】第３の実施形態のＦＷの制御を説明するフローチャートである。
【発明を実施するための形態】
【０００７】
以下、実施形態の記憶装置を、図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。
【０００８】
［第１の実施形態］
図１は、第１の実施形態の記憶装置１の構成を説明するブロック図である。
【０００９】
記憶装置１は、記憶装置１全体を制御するコントローラ１０、データを記憶する不揮発性記憶媒体２０、ホスト２と不揮発性記憶媒体２０との間でデータを一時的に格納するバッファ３０などを含む。
【００１０】
本実施形態の説明では、ホスト２はＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）規格のインターフェースをサポートするコンピュータであるが、その他の規格、例えばＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）規格、ＮＶＭｅ（ＮＶＭ  Ｅｘｐｒｅｓｓ）（登録商標）規格のインターフェースをサポートするコンピュータであってもよい。
【００１１】
コントローラ１０は、例えばＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）として構成される半導体集積回路である。
【００１２】
不揮発性記憶媒体２０としては、例えばＮＡＮＤ型フラッシュメモリや磁気ディスクなどが用いられる。
【００１３】
本実施形態ではバッファ３０はＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）からなるメモリであるが、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）など他の種類のメモリを採用してもよい。また、バッファ３０は、コントローラ１０に内蔵されていてもよい。
【００１４】
コントローラ１０は、ホスト２との通信を行う通信インターフェース（ＩＦ）部１００、ＦＷ（Ｆｉｒｍｗａｒｅ）に基づき記憶装置１全体の制御を行うＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２００、ホスト２からの情報の受信を制御する受信制御部３００、ホスト２から受信したコマンドの実行を制御する実行制御部４００、ホスト２への情報の送信を制御する送信制御部５００などを含む。なお、ＣＰＵ２００はコントローラ１０に内蔵せず、別個の半導体集積回路としてもよい。
【００１５】
以下の説明において、ＦＷにより実行される機能の一部又は全部は、専用のＨＷ（Ｈａｒｄｗａｒｅ）によっても実行可能であり、ＨＷにより実行される機能の一部又は全部を、ＦＷによって実行することも可能である。
【００１６】
受信制御部３００は、ホスト２から受信したコマンド及びデータの振り分けを行う受信情報選択部３１０、受信したコマンドを保持しておくコマンドテーブル３２０、コマンドが指定するアドレスの連続性を判定するシーケンシャル判定部３３０などを含む。
【００１７】
受信情報選択部３１０は、ホスト２よりフレームの形で受信した情報９００を、フレームヘッダー中のフレーム種別フィールドに基づいて格納先を選択して格納する。すなわち、コマンド情報であるＣＯＭＭＡＮＤフレーム９１０はコマンドテーブルに、不揮発性記憶媒体２０に記憶されるデータであるＤＡＴＡフレーム９２０はバッファ３０に、それぞれ格納する。
【００１８】
コマンドテーブル３２０に格納されたＣＯＭＭＡＮＤフレーム９１０は、ＦＷに基づくＣＰＵ２００により取り出され、ＣＰＵ２００はコマンドのタイプ（すなわちライトコマンド、リードコマンド、ノンデータコマンドの種別）、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）、転送数などを解釈する。
【００１９】
シーケンシャル判定部３３０の動作の詳細については後述する。
【００２０】
実行制御部４００は、インターフェースに適合したプロトコルでコマンドの実行を行うプロトコルエンジン４１０などを含む。
【００２１】
送信制御部５００は、ホスト２へ送信するステータス情報及びデータの振り分けを行う送信情報選択部５１０などを含む。
【００２２】
送信情報選択部５１０は、実行制御部４００の指示のもと、不揮発性記憶媒体２０から読み出されバッファ３０に格納されたデータであるＤＡＴＡフレーム９４０と、記憶装置１の内部状態を示すステータス情報９５０とを選択し、通信インターフェース部１００に出力する。
【００２３】
ステータス情報９５０には、コマンドの実行が完了したことを報告するＲＥＳＰＯＮＳＥフレームと、ライトデータの受信が可能であることを報告するＸＦＥＲ＿ＲＤＹ（Ｔｒａｎｓｆｅｒ  Ｒｅａｄｙ）フレームがある。
【００２４】
次に、図２を参照して、本実施形態の記憶装置１を用いたストレージシステム４の構成を説明する。
【００２５】
ＳＡＳインターフェースにおいては、図２に示すように、エキスパンダー３と呼ばれる中継器を介して複数の記憶装置１と複数のホスト２とが通信することができる。各記憶装置１及び各ホスト２は、それぞれが固有に持つＷＷＮ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｎａｍｅ）という識別子によって区別される。
【００２６】
次に、図３ａ及び図３ｂを参照して、１つのファイルを構成するデータを複数のコマンドによってアクセスする場合のコマンド分割の一例を説明する。
【００２７】
図３ａに示すように、ＬＢＡ＝０ｘ０００１〜０ｘ５０００に記憶されるデータによって、１つのファイルが構成されている。また、ホスト２はこのファイルをアクセス（すなわちリード又はライト）するために、コマンド１〜コマンド５を用いる。
【００２８】
この時、図３ｂに示すように記憶装置１は、ＬＢＡ＝０ｘ０００１〜０ｘ１０００を指定するコマンド１、ＬＢＡ＝０ｘ１００１〜０ｘ２０００を指定するコマンド２、ＬＢＡ＝０ｘ２００１〜０ｘ３０００を指定するコマンド３、ＬＢＡ＝０ｘ３００１〜０ｘ４０００を指定するコマンド４、ＬＢＡ＝０ｘ４００１〜０ｘ５０００を指定するコマンド５、の５つのコマンドを受信する。これらのコマンドは、例えばコマンド１の最終ＬＢＡ（０ｘ１０００）とコマンド２の開始ＬＢＡ（０ｘ１００１）との差分が“１”である。記憶装置１はこれらのコマンドをシーケンシャル（連続）コマンドであると認識する。
【００２９】
なお、上記ではコマンドが開始ＬＢＡ及び最終ＬＢＡを指定するとしたが、開始ＬＢＡ及び転送数（例えば、セクター数）を指定するようにコマンドを発行してもよい。この場合の最終ＬＢＡは、最終ＬＢＡ＝開始ＬＢＡ＋転送数−１で計算される。
【００３０】
一方、ファイルを構成するデータの配置によっては、図４ａ及び図４ｂに示すようにギャップ領域を挟んだ複数のデータによって１つのファイルが構成される場合もある。図４ａ及び図４ｂでは、ＬＢＡ＝０ｘ０００１〜０ｘ４Ｆ００のうちの４つのギャップ領域（すなわちＬＢＡ＝０ｘ０Ｆ００〜０ｘ１００１、ＬＢＡ＝０ｘ１Ｆ００〜０ｘ２００１、ＬＢＡ＝０ｘ２Ｆ００〜０ｘ３００１、ＬＢＡ＝０ｘ３Ｆ００〜０ｘ４００１）を除いた領域に、当該ファイルを構成するデータが記憶される。記憶装置１は、これらのギャップ領域によって隔てられたＬＢＡ範囲を指定するコマンド１〜コマンド５を受信する。
【００３１】
また、図２のようなストレージシステム４を使用する場合には、図５ａ及び図５ｂに示すように、複数のホスト２が発行するコマンドによって１つのファイルを構成するデータがアクセスされる場合もある。
【００３２】
図５ａでは、ホスト＃０がコマンド１を、ホスト＃１がコマンド２を、ホスト＃２がコマンド３を、ホスト＃３がコマンド４を、ホスト＃４がコマンド５をそれぞれ発行する。この時、各ホスト２からのコマンドはエキスパンダー３を経由するため、記憶装置１が受信する順番は必ずしもコマンド１、コマンド２、コマンド３、コマンド４、コマンド５の順にならない。
【００３３】
例えば図５ｂに示すように、ＬＢＡ＝０ｘ０００１〜０ｘ１０００を指定するコマンド１（ホスト＃０）、ＬＢＡ＝０ｘ１００１〜０ｘ２０００を指定するコマンド２（ホスト＃１）、ＬＢＡ＝０ｘ３００１〜０ｘ４０００を指定するコマンド４（ホスト＃３）、ＬＢＡ＝０ｘ４００１〜０ｘ５０００を指定するコマンド５（ホスト＃４）、ＬＢＡ＝０ｘ２００１〜０ｘ３０００を指定するコマンド３（ホスト＃２）、の順にコマンドを受信する場合がある。
【００３４】
本実施形態の記憶装置１は、図３〜図５で説明したようなコマンドを受信した時に、これらのコマンドが、同一のファイルを構成するデータにアクセスするための一連のコマンド（以下、同一ファイルコマンド群と称する）に属していると判定するための手段を有する。
【００３５】
次に、図６を参照して、本実施形態のシーケンシャルコマンド管理テーブル３３２の構成を説明する。
【００３６】
シーケンシャルコマンド管理テーブル３３２は、シーケンシャル判定部３３０に実装される。シーケンシャルコマンド管理テーブル３３２は、（Ｎ＋１）個のエントリーから構成され、各エントリーは開始ＬＢＡ、最終ＬＢＡ、累積数、同一ファイル判定フラグを含む。シーケンシャルコマンド管理テーブル３３２を用いたシーケンシャル判定部３３０の動作については後述する。
【００３７】
なお、シーケンシャルコマンド管理テーブル３３２は、ライトコマンド用、リードコマンド用の２つが実装される。本実施形態の以下の説明においては、コマンドはすべてライトコマンドであるとして説明を行うが、リードコマンドの場合もシーケンシャル判定部３３０の動作は同じである。
【００３８】
また、シーケンシャル判定部３３０には、ギャップ判定閾値及び同一ファイル判定閾値を設定するためのレジスタが実装される。これらの閾値についてもライトコマンド用、リードコマンド用に分けてもよい。
【００３９】
ギャップ判定閾値は、あるコマンドの最終ＬＢＡと、別なコマンドの開始ＬＢＡとの差分が本閾値以下である場合には、これらのコマンドをシーケンシャルコマンドであると判定するための閾値である。本閾値を“１”とすれば、図３ａ及び図３ｂで説明したような最終ＬＢＡと開始ＬＢＡとの差分が“１”であるコマンドのみが、シーケンシャルコマンドであると判定される。
【００４０】
同一ファイル判定閾値は、シーケンシャルコマンドであると判定されるコマンドの転送数の累積数が本閾値以上である場合に、これらのシーケンシャルコマンドが同一ファイルコマンド群に属するコマンドであると判定するための閾値である。詳細については後述する。
【００４１】
次に、図７及び図８を参照して、シーケンシャルコマンド管理テーブル３３２を用いたシーケンシャル判定部３３０の動作を説明する。
【００４２】
図７は、記憶装置１が受信する一連のコマンドの例を説明する図である。
【００４３】
記憶装置１は、開始ＬＢＡ＝０ｘ１０００で転送数＝０ｘ２００セクターのコマンド０、開始ＬＢＡ＝０ｘ１２００で転送数＝０ｘ１００セクターのコマンド１、開始ＬＢＡ＝０ｘ２０００で転送数＝０ｘ２００セクターのコマンド２、開始ＬＢＡ＝０ｘ２２００で転送数＝０ｘ２００セクターのコマンド３、開始ＬＢＡ＝０ｘ１３８０で転送数＝０ｘ１００セクターのコマンド４、開始ＬＢＡ＝０ｘ１４８０で転送数＝０ｘ２００セクターのコマンド５、開始ＬＢＡ＝０ｘ２４００で転送数＝０ｘ２００セクターのコマンド６、開始ＬＢＡ＝０ｘ１６８０で転送数＝０ｘ１００セクターのコマンド７、開始ＬＢＡ＝０ｘ２６００で転送数＝０ｘ１００セクターのコマンド８、開始ＬＢＡ＝０ｘ２７００で転送数＝０ｘ２００セクターのコマンド９、をそれぞれ受信する。
【００４４】
図８ａ〜図８ｋは、図７で示されるコマンド０〜コマンド９を受信した時のシーケンシャルコマンド管理テーブル３３２の状態を説明する図である。ここではエントリー０とエントリー１の２つのみのエントリーを記載している。また、ギャップ判定閾値は０ｘ１００、同一ファイル判定閾値は０ｘ５００が設定されているものとする。
【００４５】
図８ａはコマンド受信前の状態である。開始ＬＢＡ、最終ＬＢＡ、累積数、同一ファイル判定フラグのいずれにも有効な値が登録されていない。
【００４６】
図８ｂはコマンド０を受信した後の状態である。エントリー０に、コマンド０の開始ＬＢＡ、最終ＬＢＡ＝開始ＬＢＡ＋転送数−１が登録される。また、累積数にはコマンド０の転送数（０ｘ２００）が登録される。
【００４７】
図８ｃはコマンド１を受信した後の状態である。コマンド１の開始ＬＢＡと、エントリー０に登録されている最終ＬＢＡとの差分（０ｘ１２００−０ｘ１１ＦＦ＝０ｘ０００１）は、ギャップ判定閾値以下である。従って、コマンド１はエントリー０にヒットしている、すなわちコマンド１はエントリー０に登録されているコマンドとシーケンシャルであると判定され、エントリー０にコマンド１の開始ＬＢＡ及び最終ＬＢＡが登録される。また、エントリー０の累積数は、コマンド１を受信する前の値（０ｘ２００）に、コマンド１の転送数（０ｘ１００）を加えた０ｘ３００となる。
【００４８】
図８ｄはコマンド２を受信した後の状態である。コマンド２の開始ＬＢＡと、エントリー０に登録されている最終ＬＢＡとの差分（０ｘ２０００−０ｘ１２ＦＦ＝０ｘ０Ｄ０１）は、ギャップ判定閾値より大きい。従って、コマンド２はエントリー０にヒットしていないと判定される。このため、コマンド２の開始ＬＢＡ及び最終ＬＢＡはエントリー１に登録される。また、エントリー１の累積数にはコマンド２の転送数（０ｘ２００）が登録される。
【００４９】
図８ｅはコマンド３を受信した後の状態である。コマンド３の開始ＬＢＡと、エントリー１に登録されている最終ＬＢＡとの差分（０ｘ２２００−０ｘ２１ＦＦ＝０ｘ０００１）は、ギャップ判定閾値以下である。従って、コマンド３はエントリー１にヒットしていると判定され、エントリー１にコマンド３の開始ＬＢＡ及び最終ＬＢＡが登録される。また、エントリー１の累積数は、コマンド３を受信する前の値（０ｘ２００）に、コマンド３の転送数（０ｘ２００）を加えた０ｘ４００となる。
【００５０】
図８ｆはコマンド４を受信した後の状態である。コマンド４の開始ＬＢＡと、エントリー０に登録されている最終ＬＢＡとの差分（０ｘ１３８０−０ｘ１２ＦＦ＝０ｘ００８１）は、ギャップ判定閾値以下である。従って、コマンド４はエントリー０にヒットしていると判定され、エントリー０にコマンド４の開始ＬＢＡ及び最終ＬＢＡが登録される。また、エントリー０の累積数は、コマンド４を受信する前の値（０ｘ３００）に、コマンド４の転送数（０ｘ１００）を加えた０ｘ４００となる。
【００５１】
図８ｇはコマンド５を受信した後の状態である。コマンド５の開始ＬＢＡと、エントリー０に登録されている最終ＬＢＡとの差分（０ｘ１４８０−０ｘ１４７Ｆ＝０ｘ０００１）は、ギャップ判定閾値以下である。従って、コマンド５はエントリー０にヒットしていると判定され、エントリー０にコマンド５の開始ＬＢＡ及び最終ＬＢＡが登録される。また、エントリー０の累積数は、コマンド５を受信する前の値（０ｘ４００）に、コマンド５の転送数（０ｘ２００）を加えた０ｘ６００となる。ここで、エントリー０の累積数が同一ファイル判定閾値以上となったため、エントリー０の同一ファイル判定フラグがセットされる。
【００５２】
図８ｈはコマンド６を受信した後の状態である。コマンド６の開始ＬＢＡと、エントリー１に登録されている最終ＬＢＡとの差分（０ｘ２４００−０ｘ２３ＦＦ＝０ｘ０００１）は、ギャップ判定閾値以下である。従って、コマンド６はエントリー１にヒットしていると判定され、エントリー１にコマンド６の開始ＬＢＡ及び最終ＬＢＡが登録される。また、エントリー１の累積数は、コマンド６を受信する前の値（０ｘ４００）に、コマンド６の転送数（０ｘ２００）を加えた０ｘ６００となる。ここで、エントリー１の累積数が同一ファイル判定閾値以上となったため、エントリー１の同一ファイル判定フラグがセットされる。
【００５３】
図８ｉはコマンド７を受信した後の状態である。コマンド７の開始ＬＢＡと、エントリー０に登録されている最終ＬＢＡとの差分（０ｘ１６８０−０ｘ１６７Ｆ＝０ｘ０００１）は、ギャップ判定閾値以下である。従って、コマンド７はエントリー０にヒットしていると判定され、エントリー０にコマンド７の開始ＬＢＡ及び最終ＬＢＡが登録される。また、エントリー０の累積数は、コマンド７を受信する前の値（０ｘ６００）に、コマンド７の転送数（０ｘ１００）を加えた０ｘ７００となる。
【００５４】
図８ｊはコマンド８を受信した後の状態である。コマンド８の開始ＬＢＡと、エントリー１に登録されている最終ＬＢＡとの差分（０ｘ２６００−０ｘ２５ＦＦ＝０ｘ０００１）は、ギャップ判定閾値以下である。従って、コマンド８はエントリー１にヒットしていると判定され、エントリー１にコマンド８の開始ＬＢＡ及び最終ＬＢＡが登録される。また、エントリー１の累積数は、コマンド８を受信する前の値（０ｘ６００）に、コマンド８の転送数（０ｘ１００）を加えた０ｘ７００となる。
【００５５】
図８ｋはコマンド９を受信した後の状態である。コマンド９の開始ＬＢＡと、エントリー１に登録されている最終ＬＢＡとの差分（０ｘ２７００−０ｘ２６ＦＦ＝０ｘ０００１）は、ギャップ判定閾値以下である。従って、コマンド９はエントリー１にヒットしていると判定され、エントリー１にコマンド９の開始ＬＢＡ及び最終ＬＢＡが登録される。また、エントリー１の累積数は、コマンド９を受信する前の値（０ｘ７００）に、コマンド９の転送数（０ｘ２００）を加えた０ｘ９００となる。
【００５６】
なお、エントリーにヒットしたコマンドの転送数を累積数に加え続けると、累積数を記録するカウンタが桁あふれ（オーバーフロー）する恐れがある。オーバーフローを防ぐためには、同一ファイル判定フラグがセットされているエントリーは、開始ＬＢＡ及び最終ＬＢＡのみを更新し、累積数は同じ値を保持するようにすればよい。
【００５７】
また、シーケンシャルコマンド管理テーブル３３２のすべてのエントリーに有効な値が登録されている時に、受信したコマンドがどのエントリーにもヒットしなかった場合には、累積数が最小であるエントリーに当該コマンドの情報を登録するようにすればよい。
【００５８】
図９は、上記のようにシーケンシャルコマンド管理テーブル３３２を用いて同一ファイルコマンド群を判定した結果を説明するための図である。
【００５９】
記憶装置１は、コマンド０、コマンド１、コマンド４、コマンド５、コマンド７はファイルＡを構成するデータにアクセスするための一連のコマンドであると判定し、コマンド２、コマンド３、コマンド６、コマンド８、コマンド９はファイルＢを構成するデータにアクセスするための一連のコマンドであると判定する。
【００６０】
次に、図１０を参照して、コマンド受信時のシーケンシャル判定部３３０の動作を説明する。
【００６１】
受信情報選択部３１０からコマンドを受信した旨の通知を受けると（Ｓ１００）、シーケンシャル判定部３３０は当該コマンドがシーケンシャルコマンド管理テーブル３３２のエントリーにヒットしたか、すなわち当該コマンドの開始ＬＢＡと、有効なエントリーの最終ＬＢＡとの差分がギャップ判定閾値以下であるかを判断する（Ｓ１０１）。ヒットしている場合（Ｓ１０１：Ｙｅｓ）、当該エントリーの累積数に当該コマンドの転送数が加算される（Ｓ１０２）。そして、累積数が同一ファイル判定閾値以上である場合（Ｓ１０３：Ｙｅｓ）、当該エントリーの同一ファイル判定フラグがセットされる（Ｓ１０４）。
【００６２】
一方、受信したコマンドがシーケンシャルコマンド管理テーブル３３２のエントリーにヒットしなかった場合（Ｓ１０１：Ｎｏ）は、シーケンシャル判定部３３０はシーケンシャルコマンド管理テーブル３３２のすべてのエントリーに有効な値がセットされているか、すなわちエントリーがフルであるかを判断する（Ｓ１０５）。フルである場合（Ｓ１０５：Ｙｅｓ）、累積数が最小であるエントリーに当該コマンドの情報が登録される（Ｓ１０６）。フルではない場合（Ｓ１０５：Ｎｏ）、有効な値がセットされていないエントリーに当該コマンドの情報が登録される（Ｓ１０７）。
【００６３】
次に、図１１を参照して、シーケンシャル判定部３３０の詳細な構成を説明する。
【００６４】
シーケンシャル判定部３３０は、ライトコマンド用のシーケンシャルコマンド管理テーブル３３２ａ、リードコマンド用のシーケンシャルコマンド管理テーブル３３２ｂ、アドレス比較部３３４、シーケンシャルコマンド登録制御部３３６などを含む。
【００６５】
アドレス比較部３３４は、受信情報選択部３１０から入力される受信コマンドの情報（リードコマンドとライトコマンドの種別、開始ＬＢＡ、転送数）及びギャップ判定閾値を基に、ライトコマンド用のシーケンシャルコマンド管理テーブル３３２ａ又はリードコマンド用のシーケンシャルコマンド管理テーブル３３２ｂのいずれかのエントリーに受信コマンドがヒットしたかどうかを判定する。
【００６６】
シーケンシャルコマンド登録制御部３３６は、アドレス比較部３３４が判定したヒット情報及び同一ファイル判定閾値を基に、ライトコマンド用のシーケンシャルコマンド管理テーブル３３２ａ又はリードコマンド用のシーケンシャルコマンド管理テーブル３３２ｂの適切なエントリーに受信コマンドの情報を登録する。また、コマンドテーブル３２０に対して同一ファイル判定フラグの値及び同一ファイル判定フラグがセットされているシーケンシャルコマンド管理テーブル３３２のエントリーの番号を出力する。
【００６７】
次に、図１２を参照して、本実施形態のコマンドテーブル３２０の構成を説明する。
【００６８】
コマンドテーブル３２０は１エントリーが４ＤＷ（Ｄｏｕｂｌｅ  Ｗｏｒｄ、１ＤＷは３２ビット）で構成され、キューイングすべきコマンドの数（例えば２５６）に応じたエントリー数で実装される。
【００６９】
各エントリーのＤＷ０及びＤＷ１には開始ＬＢＡが、ＤＷ２には転送数が格納される。また、ＤＷ３にはｔａｇ、コマンドのタイプ（ライトコマンド、リードコマンド、ノンデータコマンドの種別）、同一ファイル判定フラグその他の各種制御用フラグ、ファイルＩＤが格納される。
【００７０】
ｔａｇはキューイングして実行する各コマンドを識別するための識別子である。
【００７１】
ファイルＩＤは、同一ファイル判定フラグがセットされているコマンドが、どのファイルを構成するデータにアクセスするためのコマンドであるかを示すための識別子であり、シーケンシャル判定部３３０から出力されるシーケンシャルコマンド管理テーブル３３２のエントリーの番号が用いられる。
【００７２】
ＣＰＵ２００はコマンドテーブル３２０からＣＯＭＭＡＮＤフレームを取り出し、これらのフラグにより適切にコマンドの実行を制御する。特に同一ファイル判定フラグがセットされている場合には、同一のファイルを構成するデータにアクセスするコマンドであることを前提として、適切な制御を行うことができるようになる。
【００７３】
以上説明した第１の実施形態の記憶装置によれば、受信したコマンドのＬＢＡ範囲に応じて、同一ファイルを構成するデータにアクセスするコマンドであることを判定するので、コマンドの実行を適切に制御することができ、記憶装置の性能を向上させることができる。
【００７４】
［第２の実施形態］
第１の実施形態の記憶装置では、受信したコマンドのＬＢＡ範囲に応じて、コマンドが同一ファイルコマンド群に属しているか否かを判定した。本実施形態の記憶装置では、同一ファイルコマンド群に属するライトコマンドの実行制御を変更することで、記憶装置の性能を向上させる。
【００７５】
図１３は、第２の実施形態の記憶装置１の構成を説明するブロック図である。以下の説明においては不揮発性記憶媒体２０からのデータのリードに必要な機能ブロックの説明は省略してある。
【００７６】
本実施形態の不揮発性記憶媒体２０はＮＡＮＤ型フラッシュメモリ２２である。なお、ＮＯＲ型フラッシュメモリやＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）など他の種類の不揮発性半導体メモリでもよい。また、不揮発性記憶媒体２０は１８チャネル（Ｃｈ）のＮＡＮＤ型フラッシュメモリ２２を有し、以下ではそれぞれをＮＡＮＤ型フラッシュメモリＣｈ０〜Ｃｈ１７と表記する。なお、チャネルの数は１８より多くても少なくてもよい。
【００７７】
本実施形態のコントローラ１０は、第１の実施形態のコントローラ１０の構成に加え、バッファ３０に格納するデータをデータパケットの形に加工するデータパケット生成部６００、ＮＡＮＤ型フラッシュメモリ２２へのデータのライトを管理するＮＡＮＤ管理部７００を有する。
【００７８】
ＮＡＮＤ管理部７００は、ＮＡＮＤ型フラッシュメモリＣｈ０〜Ｃｈ１７のそれぞれに接続され、ＮＡＮＤ型フラッシュメモリ２２へのライト、リード、イレース等の動作を制御するＮＡＮＤコントローラ７１０（以下、ＮＡＮＤコントローラＣｈ０〜Ｃｈ１７と表記することがある）、バッファ３０から読み出したデータパケットを各ＮＡＮＤコントローラ７１０に転送するバッファ読み出し制御部７２０を有する。
【００７９】
次に、図１４ａ及び図１４ｂを参照して、本実施形態のＮＡＮＤ型フラッシュメモリ２２の物理ページ１０００及び物理ブロック１０１０の構成を説明する。
【００８０】
図１４ａに示すように、ＮＡＮＤ型フラッシュメモリ２２に対するデータのリード・ライトにおける最小管理単位はクラスタ１０２０と呼ばれる。本実施形態ではクラスタ１０２０の大きさは４ｋＢである。また、ＮＡＮＤ型フラッシュメモリ２２に一度にデータのリード・ライトが可能な最小の回路構成の単位は物理ページ１０００と呼ばれる。本実施形態では物理ページ１０００の大きさは１６クラスタ（４ｋＢ×１６クラスタ＝６４ｋＢ）である。
【００８１】
また、図１４ｂに示すように、ＮＡＮＤ型フラッシュメモリ２２のデータのイレースが可能な最小の回路構成の単位は物理ブロック１０１０と呼ばれる。本実施形態では物理ブロック１０１０の大きさは２５６クラスタ、すなわち１６物理ページ（６４ｋＢ×１６物理ページ＝１０２４ｋＢ）である。なお、これら各単位のサイズは一例であり、これらの値に限定されるものではない。また、ＮＡＮＤ型フラッシュメモリ２２の寿命を延ばすためには、イレース回数をできるだけ少なくすることが望ましい。
【００８２】
なお、１つの物理ページ１０００が２以上の物理ブロック１０１０にまたがることはない。すなわち、１つの物理ページ１０００にライトされたデータは一度にイレースされる。
【００８３】
次に、図１５を参照して、本実施形態のコントローラ１０が不揮発性記憶媒体２０のデータをリード・ライトする単位である論理ページ１０３０の構成を説明する。
【００８４】
図１５の１マスはクラスタ１０２０を示す。各クラスタ１０２０にはＭｅｄｉａ  Ｃｌｕｓｔｅｒ  Ｏｆｆｓｅｔと呼ばれる番号（以下、ＭＣＯと表記する）が割り当てられ、論理ページ１０３０内の各クラスタ１０２０はＭＣＯによりその位置が特定される。
【００８５】
また、各ＮＡＮＤ型フラッシュメモリ２２に対応する横方向の１行（１６クラスタ）は物理ページ１０００となる。すなわち、本実施形態では論理ページ１０３０の大きさは１８物理ページである。
【００８６】
次に、図１６ａ及び図１６ｂを参照して、本実施形態のコントローラ１０が不揮発性記憶媒体２０のデータをイレースする単位である論理ブロック１０４０の構成を説明する。
【００８７】
図１６ａに示すように、本実施形態では論理ブロック１０４０の大きさは２５６論理ページである。各ＮＡＮＤ型フラッシュメモリ２２の全クラスタは、論理ブロック番号、論理ページ番号、ＭＣＯにより一意に特定される。
【００８８】
また、図１６ｂに示すように、論理ブロック１０４０内の同一のＭＣＯを有するクラスタ１０２０の集合は物理ブロック１０１０となる。例えば、論理ページ＃０〜論理ページ＃２５５のＭＣＯ＝０の集合はＮＡＮＤ型フラッシュメモリＣｈ０の１つの物理ブロック１０１０を形成し、ＭＣＯ＝１８の集合はＮＡＮＤ型フラッシュメモリＣｈ０の別な物理ブロック１０１０を形成する。同様に、ＭＣＯ＝１の集合はＮＡＮＤ型フラッシュメモリＣｈ１の１つの物理ブロック１０１０を形成する。
【００８９】
すなわち、各論理ブロック１０４０には、ＮＡＮＤ型フラッシュメモリＣｈ０の１６物理ブロック〜ＮＡＮＤ型フラッシュメモリＣｈ１７の１６物理ブロックの、合計２８８物理ブロックが含まれる。コントローラ１０は、ＮＡＮＤ型フラッシュメモリ２２のデータのイレースの最小単位である物理ブロック１０１０ごとではなく、論理ブロック１０４０ごとにイレース処理を行う。
【００９０】
次に、図１７を参照して、本実施形態のデータパケット１０５０の構成を説明する。
【００９１】
データパケット生成部６００は、受信制御部３００から受信したデータを、１クラスタ毎にヘッダーを付加してデータパケット１０５０として生成し、バッファ３０に格納する。
【００９２】
ヘッダーにはＮＡＮＤ管理部７００による制御のための情報が格納されている。
【００９３】
ＬＢＡはライトコマンドが指定するセクター単位（例えば５１２Ｂ）の論理アドレスで、データパケット１０５０に格納されているデータの先頭セクターのＬＢＡを示す。
【００９４】
論理ブロック番号、論理ページ番号、ＭＣＯは上述のように、データパケット１０５０に格納されているデータがどのＮＡＮＤ型フラッシュメモリ２２のどのクラスタ１０２０にライトされるべきかを示す。
【００９５】
同一ファイル判定フラグ及びファイルＩＤは、データパケット１０５０に格納されているデータが、どの同一ファイルコマンド群に属するライトコマンドに応じてライトされるものであるかを示す。
【００９６】
次に、図１８を参照して、本実施形態の記憶装置１が、同一のファイルを構成するデータを不揮発性記憶媒体２０にライトする時の、各論理ブロック１０４０に割り当てられるファイルＩＤの一例を説明する。
【００９７】
上述したように、同一のファイルＩＤを有するデータは同一のファイルを構成するので、イレースされる時には一括してイレースされる可能性が高い。従って、本実施形態においては、コントローラ１０がデータをイレースする単位である論理ブロック１０４０内に、複数のファイルＩＤを有するデータがライトされないように制御する。すなわち、論理ブロック＃０〜＃６のそれぞれには、複数のファイルＩＤを割り当てないように制御する。
【００９８】
一方で、論理ブロック＃１、＃２にファイルＩＤ＝２が割り当てられているように、複数の論理ブロック１０４０に１つのファイルＩＤを割り当ててもよい。また、論理ブロック＃０、＃４のように、同一のファイルを構成するデータで論理ブロック１０４０のすべての領域がライトされない場合には、空きスペースにはゼロデータをライトする。
【００９９】
次に、図１９を参照して、本実施形態のデータパケット生成部６００に実装される論理ブロック管理テーブル６１０の構成の一例を説明する。
【０１００】
論理ブロック管理テーブル６１０は、論理ブロック１０４０ごとのファイルＩＤ及び当該ファイルＩＤに対応するコマンドのｔａｇを管理する。図１９は、図１８に例示する各論理ブロック１０４０とファイルＩＤに対応する。
【０１０１】
論理ブロック＃０には、ファイルＩＤ＝１が割り当てられており、これに対応するコマンドのｔａｇは０ｘ０００１である。
【０１０２】
論理ブロック＃１と論理ブロック＃２には、ファイルＩＤ＝２が割り当てられており、これにはｔａｇ＝０ｘ０００２とｔａｇ＝０ｘ０００３の２つのコマンドが対応する。
【０１０３】
論理ブロック＃３と論理ブロック＃４には、ファイルＩＤ＝３が割り当てられており、これにはｔａｇ＝０ｘ０００４とｔａｇ＝０ｘ０００５の２つのコマンドが対応する。
【０１０４】
論理ブロック＃５には、ファイルＩＤ＝４が割り当てられており、これにはｔａｇ＝０ｘ０００６とｔａｇ＝０ｘ０００７とｔａｇ＝０ｘ０００８の３つのコマンドが対応する。
【０１０５】
論理ブロック＃６には、ファイルＩＤ＝５が割り当てられており、これにはｔａｇ＝０ｘ０００９とｔａｇ＝０ｘ０００Ａの２つのコマンドが対応する。
【０１０６】
次に、図２０を参照して、本実施形態のデータパケット生成部６００の動作を説明する。
【０１０７】
ＣＰＵ２００はコマンドテーブル３２０からＣＯＭＭＡＮＤフレームを取り出し、論理ブロック管理テーブル６１０に、ファイルＩＤ及びｔａｇと、これらに対応させる論理ブロック番号を登録する。その後ホスト２からＤＡＴＡフレームが送信され、これを受信制御部３００から受け取ったデータパケット生成部６００は、ＤＡＴＡフレームのヘッダー中のｔａｇをインデックスにして論理ブロック管理テーブル６１０を検索し、論理ブロック番号及びファイルＩＤを取得する。また、ｔａｇをインデックスにしてコマンドテーブルを検索し、ＬＢＡを取得する。
【０１０８】
そして、データパケット生成部６００はＤＡＴＡフレームのデータをパケットサイズ（４ｋＢ）に分割すると共に、ＭＣＯカウンタ６２０、論理ページカウンタ６３０をインクリメントさせ、これらのカウンタによって当該パケットのＭＣＯ、論理ページ番号を把握する。データパケット生成部６００はこれらの情報を用いてデータパケット１０５０を生成し、バッファ３０に格納する。
【０１０９】
バッファ３０からデータパケット１０５０を読み出したＮＡＮＤ制御部７００は、データパケット１０５０のヘッダー情報により、ＮＡＮＤ型フラッシュメモリＣｈ０〜Ｃｈ１７の適切なクラスタ１０２０に、当該データパケット１０５０をライトすることができる。
【０１１０】
以上説明した第２の実施形態の記憶装置によれば、データを一度にイレースする単位である論理ブロックには、同一ファイルを構成すると判定されるデータのみをライトするので、イレースの回数を低減させ、記憶装置の性能を向上させることができる。
【０１１１】
［第３の実施形態］
第１の実施形態の記憶装置では、受信したコマンドのＬＢＡ範囲に応じて、コマンドが同一ファイルコマンド群に属しているか否かを判定した。本実施形態の記憶装置では、同一ファイルコマンド群に属するリードコマンドの実行制御を変更することで、記憶装置の性能を向上させる。
【０１１２】
図２１は、第３の実施形態の記憶装置１の構成を説明するブロック図である。以下の説明においては不揮発性記憶媒体２０へのデータのライトに必要な機能ブロックの説明は省略してある。
【０１１３】
本実施形態のコントローラ１０は、第１の実施形態のコントローラ１０の構成に加え、媒体リード制御部８００を有する。媒体リード制御部８００は、ＦＷに基づくＣＰＵ２００が指定したアドレス及び転送数に基づいて、不揮発性記憶媒体２０からリードしたデータをバッファ３０に格納する機能を有する。
【０１１４】
次に、図２２を参照して、１つのファイルを構成するデータを複数のコマンドによってリードする場合のコマンド分割の一例を説明する。
【０１１５】
図２２に示すように、ＬＢＡ＝０ｘ０００１〜０ｘ５０００に記憶されるデータによって、１つのファイルが構成されている。また、ホスト２はこのファイルをリードするために開始ＬＢＡ＝０ｘ０００１のコマンド１、開始ＬＢＡ＝０ｘ１００１のコマンド２、開始ＬＢＡ＝０ｘ２００１のコマンド３、開始ＬＢＡ＝０ｘ３００１のコマンド４、開始ＬＢＡ＝０ｘ４００１のコマンド５、の５つのコマンド（転送数はいずれも０ｘ１０００である）を発行する。
【０１１６】
この時、第１の実施形態で説明したように、コマンド３〜コマンド５については、シーケンシャル判定部３３０が同一ファイルコマンド群に属すると判定し、同一ファイル判定フラグを付加してコマンドテーブル３２０に格納している。
【０１１７】
コマンドテーブル３２０から各コマンドの情報を取り出したＣＰＵ２００は、媒体リード制御部８００に対して、以下のように不揮発性記憶媒体２０からのデータのリードを指示する。
【０１１８】
すなわち、図２３で説明するように、コマンド１〜コマンド２については、コマンドが指定する開始ＬＢＡからコマンドが指定する転送数分のデータを、不揮発性記憶媒体２０からリードしバッファ３０に格納する。バッファ３０に格納されたデータは、その後、ホスト２に送信される。
【０１１９】
一方で同一ファイル判定フラグが付加されていたコマンド３については、コマンドが指定する開始ＬＢＡからコマンドが指定する転送数分のデータ、すなわちＬＢＡ＝０ｘ２００１〜０ｘ３０００に記憶されているデータを、不揮発性記憶媒体２０からリードしバッファ３０に格納した後、上記ＬＢＡの範囲外のアドレスに記憶されているデータも不揮発性記憶媒体２０からリードしバッファ３０に格納する。このような、コマンドが指定するアドレスの範囲外のアドレスに記憶されているデータをリードしバッファ３０に格納する動作を、以下では先読みと称する。
【０１２０】
コマンド３の受信に伴って行う先読みの開始アドレスは、コマンド３が指定する最終ＬＢＡと連続であること、すなわち、ＬＢＡ＝０ｘ３００１とすることが望ましい。なぜなら、コマンド３には同一ファイル判定フラグが付加されており、同一ファイルをリードするためにＬＢＡ＝０ｘ３００１以降を対象とするコマンドを受信する可能性が高いからである。
【０１２１】
なお、コマンド３が指定する最終ＬＢＡと完全に連続するアドレスではなく、最終ＬＢＡからギャップ判定閾値以内にあるアドレスを開始アドレスとしてもよい。さらには、コマンド３が指定する開始ＬＢＡより小さいアドレス、すなわちＬＢＡ＝０ｘ２０００以下を開始アドレスとして先読みを行ってもよい。
【０１２２】
先読みでバッファ３０に格納するデータの量は、常に一定の量としてもよいし、先読み対象のコマンドが指定するデータの転送量（コマンド３の受信に伴って先読みを行う場合は０ｘ１０００セクター分）としてもよく、また、バッファ３０の空き容量に応じて変化させてもよい。
【０１２３】
図２３においてはコマンド３の受信に伴ってＬＢＡ＝０ｘ３００１〜０ｘ４０００に記憶されているデータを先読みし、バッファ３０に格納している。その後コマンド４を受信するが、コマンド４が対象とするデータはすでにバッファ３０に格納されているため、コマンド４の受信後、不揮発性記憶媒体２０からバッファ３０へのデータの格納を待つことなく、コマンド４が対象とするデータをホスト２に送信することができる。
【０１２４】
なお、コマンド４にも同一ファイル判定フラグが付加されているので、コマンド４が指定するアドレスの範囲外のアドレスに記憶されているデータについても先読みをすることができる。
【０１２５】
次に、図２４を参照して、本実施形態において、リードコマンドをコマンドテーブル３２０から取り出す時のＦＷの制御を説明する。
【０１２６】
リードコマンドを取り出したＣＰＵ２００は、コマンドが対象とするデータが既にバッファ３０に格納済みであるかを判断する（Ｓ２０１）。格納済みでない場合（Ｓ２０１：Ｎｏ）、ＣＰＵ２００は媒体リード制御部８００に指示をして、コマンド指定のアドレス範囲に記憶されているデータをバッファ３０に格納させる（Ｓ２０２）。
【０１２７】
次にＣＰＵ２００は同一ファイル判定フラグがセットされていたかを判断する（Ｓ２０３）。セットされていた場合（Ｓ２０３：Ｙｅｓ）、ＣＰＵ２００は媒体リード制御部８００に指示をして、コマンド指定のアドレスの範囲外に記憶されているデータを先読みしバッファ３０に格納させる（Ｓ２０４）。
【０１２８】
以上説明した第３の実施形態の記憶装置によれば、同一ファイルを構成すると判定されるデータの一部を、リードコマンド受信前にあらかじめバッファに格納しておくことができるので、記憶装置の性能を向上させることができる。
【０１２９】
以上説明した少なくとも１つの実施形態の記憶装置によれば、受信したコマンドのＬＢＡ範囲に応じて、同一ファイルを構成するデータにアクセスするコマンドであることを判定するので、コマンドの実行を適切に制御することができ、記憶装置の性能を向上させることができる。
【０１３０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３１】
１…記憶装置、２…ホスト、３…エキスパンダー、４…ストレージシステム、１０…コントローラ、２０…不揮発性記憶媒体、２２…ＮＡＮＤ型フラッシュメモリ、３０…バッファ、１００…通信インターフェース部、２００…ＣＰＵ、３００…受信制御部、３１０…受信情報選択部、３２０…コマンドテーブル、３３０…シーケンシャル判定部、３３２…シーケンシャルコマンド管理テーブル、３３４…アドレス比較部、３３６…シーケンシャルコマンド登録制御部、４００…実行制御部、４１０…プロトコルエンジン、５００…送信制御部、５１０…送信情報選択部、６００…データパケット生成部、６１０…論理ブロック管理テーブル、６２０…ＭＣＯカウンタ、６３０…論理ページカウンタ、７００…ＮＡＮＤ管理部、７１０…ＮＡＮＤコントローラ、７２０…バッファ読み出し制御部、８００…媒体リード制御部、９００…受信したフレーム、９１０…受信したＣＯＭＭＡＮＤフレーム、９２０…受信したＤＡＴＡフレーム、９３０…送信するフレーム、９４０…送信するＤＡＴＡフレーム、９５０…送信するステータス情報、１０００…物理ページ、１０１０…物理ブロック、１０２０…クラスタ、１０３０…論理ページ、１０４０…論理ブロック、１０５０…データパケット
【図１】
2017224113.tif 000003
【図２】
2017224113.tif 000004
【図３】
2017224113.tif 000005
【図４】
2017224113.tif 000006
【図５】
2017224113.tif 000007
【図６】
2017224113.tif 000008
【図７】
2017224113.tif 000009
【図８】
2017224113.tif 000010
【図９】
2017224113.tif 000011
【図１０】
2017224113.tif 000012
【図１１】
2017224113.tif 000013
【図１２】
2017224113.tif 000014
【図１３】
2017224113.tif 000015
【図１４】
2017224113.tif 000016
【図１５】
2017224113.tif 000017
【図１６】
2017224113.tif 000018
【図１７】
2017224113.tif 000019
【図１８】
2017224113.tif 000020
【図１９】
2017224113.tif 000021
【図２０】
2017224113.tif 000022
【図２１】
2017224113.tif 000023
【図２２】
2017224113.tif 000024
【図２３】
2017224113.tif 000025
【図２４】
2017224113.tif 000026