(57)【要約】【課題】データの転送効率を向上させたストレージシステム、ストレージ装置及びストレージシステムの制御方法を提供する。【解決手段】ストレージ装置２は、命令に基づく処理を行う複数のＮＡＮＤデバイス２２Ａ〜２２Ｄと、ホスト１からの命令を、命令で指定されたＮＡＮＤデバイス２２Ａ〜２２Ｄに発行し、発行した命令の発行完了通知をホスト１へ送信する命令管理部２１２と、各ＮＡＮＤデバイス２２Ａ〜２２Ｄが所定の処理を行っているかを基づいて、各ＮＡＮＤデバイス２２Ａ〜２２Ｄが命令受入可能か否かをホスト１へ通知する状態通知部２１３とを備える。ホスト１は、命令管理部２１２からの発行完了通知を受信した場合、状態通知部２１３からの通知を基に、命令受入可能なＮＡＮＤデバイス２２Ａ〜２２Ｄを１つ選択し、選択したＮＡＮＤデバイス２２Ａ〜２２Ｄに処理を行わせるための命令を命令管理部２１２へ送信するＮＡＮＤ制御部１２を備える。【選択図】図３
2015007843.tif 000002
【特許請求の範囲】
【請求項１】
演算処理装置及び記憶装置を有するストレージシステムにおいて、
前記記憶装置は、
発行された命令に基づく処理をそれぞれ行う複数の記憶部と、
前記演算処理装置からの命令を、前記複数の記憶部のうち、前記命令で指定された記憶部に発行するとともに、発行した命令の発行完了通知を前記演算処理装置に送信する命令管理部と、
前記複数の記憶部の各々が所定の処理を行っているかに基づいて、各記憶部が発行した命令について受入可能かを示す受入可能通知を前記演算処理装置へ通知する通知部とを有し、
前記演算処理装置は、
前記命令管理部からの発行完了通知を受信した場合、前記通知部からの受入可能通知に基づき、前記複数の記憶部のうち、命令受入可能な記憶部を１つ選択し、選択した前記記憶部に処理を行わせるための命令を前記命令管理部へ送信するストレージ制御部とを有する
ことを特徴とするストレージシステム。
【請求項２】
前記記憶装置は、
命令が読み出し命令の場合、前記演算処理装置からのデータ転送開始要求を受けて、指定された記憶部から前記演算処理装置へのデータ転送を実行させ、データ転送が完了すると転送完了を前記演算処理装置へ通知するデータ転送管理部をさらに備え、
前記ストレージ制御部は、
前記データ転送管理部から前記転送完了の通知を受けて、前記通知部からの通知を基に、コマンド受入可能で且つデータ転送を実行していない記憶部に対するデータ転送開始要求を前記データ転送管理部へ送信する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記記憶装置は、
データを格納する複数の一時格納部と、
命令が読み出し命令の場合、前記演算処理装置からのデータ転送開始要求を受けて、指定された記憶部から前記演算処理装置により指定された一時格納部へのデータ転送を実行させ、前記一時格納部へのデータ転送が完了すると転送完了を前記演算処理装置へ通知し、前記一時格納部に格納されたデータを前記演算処理装置に転送するデータ転送管理部とをさらに備え、
前記ストレージ制御部は、
前記データ転送管理部から前記転送完了の通知を受けて、前記通知部からの通知を基に、コマンド受入可能で且つ前記一時格納部へのデータ転送を実行していない記憶部に対するデータ転送開始要求を、一時格納部の指定とともに前記データ転送管理部へ送信する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記ストレージ制御部は、前記通知部からの通知を基に、所定時間以上経過しても命令受入可能とならない前記記憶部を故障と判定することを特徴とする請求項１〜３のいずれか一つに記載のストレージシステム。
【請求項５】
前記演算処理装置は、書き込むデータが複数の前記記憶部に分散して格納可能なデータパターンを有するか否かを判定し、前記書き込むデータが複数の前記記憶部に分散して格納可能なデータパターンを有する場合に、前記ストレージ制御部にデータの書き込み命令を送信する判定部をさらに備えたことを特徴とする請求項１〜４のいずれか一つに記載のストレージシステム。
【請求項６】
発行された命令に基づく処理をそれぞれ行う複数の記憶部と、
命令の発行完了通知を受信した場合、前記複数の記憶部のうち、命令受入可能な記憶部を１つ選択し、選択した前記記憶部に処理を行わせるための命令を送信する演算処理装置から命令を、前記複数の記憶部のうち、前記命令で指定された記憶部に発行するとともに、発行した命令の発行完了通知を前記演算処理装置に送信する命令管理部と、
前記複数の記憶部の各々が所定の処理を行っているかに基づいて、各記憶部が発行した命令について受入可能かを示す受入可能通知を前記演算処理装置へ通知する通知部と
を有することを特徴とするストレージ装置。
【請求項７】
演算処理装置及び複数の記憶部を有する記憶装置を有するストレージシステムの制御方法であって、
前記記憶装置に、前記演算処理装置からの命令を、前記複数の記憶部のうち、前記命令で指定された記憶部に発行するとともに、発行した命令の発行完了通知を前記演算処理装置へ送信させ、
前記記憶装置に、前記複数の記憶部の各々が所定の処理を行っているかに基づいて、各記憶部が発行した命令について受入可能かを示す受入可能通知を前記演算処理装置へ通知させ、
前記演算処理装置に、前記記憶装置から発行完了通知を受信させ、前記記憶装置からの受入可能通知に基づき、前記複数の記憶部のうち、命令受入可能な記憶部を１つ選択させ、
前記演算処理装置に、選択した前記記憶部に処理を行わせるための命令を前記記憶装置へ送信させる
ことを特徴とするストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム、ストレージ装置及びストレージシステムの制御方法に関する。
【背景技術】
【０００２】
近年、サーバなどの情報処理装置において、ハードディスクよりも高速な記憶装置として、ＮＡＮＤ型フラッシュメモリデバイス（以下、「ＮＡＮＤデバイス」という。）のような不揮発性メモリを用いたメモリシステムやストレージシステムなどの記憶装置が広く用いられてきている。
【０００３】
ＮＡＮＤデバイスはＮＡＮＤコントローラで制御される。そして、ホストとＮＡＮＤコントローラは、ＰＣＩ（Peripheral  Component  Interconnect）ｅｘｐｒｅｓｓなどで接続される。他にも、例えば、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）、又はＳＡＳ  Ｉ／Ｆ（Serial  Attached  SCSI(Small  Computer  System  Interface)  Interface）なども接続に用いられる。
【０００４】
従来は、ＮＡＮＤコントローラとＮＡＮＤデバイスとの間の複数のチャネルのバスに対して並列アクセスを行うことでデータ転送の広帯域化を図っていた。
【０００５】
例えば、従来の１つのチャネルにおけるリード処理は、以下のような手順で行われる。すなわち、ＮＡＮＤコントローラがホストからのリードコマンドを解釈し、指定されたＮＡＮＤデバイスにリードコマンドを発行する。次に、ＮＡＮＤデバイスは、リードデータを出力し、ＮＡＮＤコントローラは自己が有するバッファに格納する。その後、ＮＡＮＤコントローラは、リードデータをバッファからホストに転送する。
【０００６】
なお、初期化処理時にデータ読み出し命令をオーバラップさせて読み出し時間を短縮する従来技術がある。また、メモリコントローラが、高温時にパラレル制御からインタリーブ制御に切替る従来技術がある。さらに、データバーストとしてデータを送信する場合に、データバーストの構成を変更することでデータ転送の処理性能を向上させる従来技術がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００５−２６６８８８号公報
【特許文献２】特開２０１２−１８６４８号公報
【特許文献３】特開２０１１−１０７９２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、ＮＡＮＤデバイスは、データ出力のためのビジー期間が長い。そして、従来のリード処理やライト処理では、ビジー期間に処理の実行を待機するため、１チャネル毎のバスの利用効率が悪く、データの転送効率が悪い。
【０００９】
また、初期化処理時にデータ読み出し命令をオーバラップさせる従来技術を用いても、初期化以外のリードやライトでは、ビジー期間に命令をオーバラップさせることができず、バスの利用効率を向上させることは困難である。また、高温時にパラレル制御からインタリーブ制御に切替る従来技術を用いても、コントローラでは、オーバラップさせることができるデータか否かの判定が困難なため、ビジー期間の適切な有効利用ができず、バスの利用効率を向上させることは困難である。さらに、データバーストの構成を変更する従来技術を用いても、ビジー期間にはデータ転送は行えないため、バスの利用効率を向上させることは困難である。すなわち、いずれの従来技術を用いても、データの転送効率を向上させることは困難である。
【００１０】
開示の技術は、上記に鑑みてなされたものであって、データの転送効率を向上させたストレージシステム、ストレージ装置及びストレージシステムの制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示するストレージシステム、ストレージ装置及びストレージシステムの制御方法は、一つの態様において、演算処理装置及び記憶装置を有する。前記記憶装置は、発行された命令に基づく処理をそれぞれ行う複数の記憶部と、前記演算処理装置からの命令を、前記複数の記憶部のうち、前記命令で指定された記憶部に発行するとともに、発行した命令の発行完了通知を前記演算処理装置に送信する命令管理部と、前記複数の記憶部の各々が所定の処理を行っているかに基づいて、各記憶部が発行した命令について受入可能かを示す受入可能通知を前記演算処理装置へ通知する通知部とを有する。前記演算処理装置は、前記命令管理部からの発行完了通知を受信した場合、前記通知部からの受入可能通知に基づき、前記複数の記憶部のうち、命令受入可能な記憶部を１つ選択し、選択した前記記憶部に処理を行わせるための命令を前記命令管理部へ送信するストレージ制御部とを有する。
【発明の効果】
【００１２】
本願の開示するストレージシステム、ストレージ装置及びストレージシステムの制御方法の一つの態様によれば、データの転送効率を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、ストレージシステムの概略構成図である。
【図２】図２は、ＮＡＮＤデバイスの内部を説明するための図である。
【図３】図３は、実施例１に係るストレージシステムの詳細を表すブロック図である。
【図４】図４は、実施例１に係るストレージシステムによるデータの読み出し処理のタイムチャートである。
【図５】図５は、実施例１に係るストレージシステムによるデータの書き込み処理のタイムチャートである。
【図６】図６は、実施例１に係るＮＡＮＤ制御部のデータ読み出し時の処理のフローチャートである。
【図７】図７は、実施例１に係るＮＡＮＤ制御部のデータ書き込み時の処理のフローチャートである。
【図８】図８は、実施例１に係る命令管理部のデータの書き込み時及び読み出し時の処理のフローチャートである。
【図９】図９は、実施例１に係る状態通知部による状態の通知処理のフローチャートである。
【図１０】図１０は、割り込みを行う場合の状態通知部による状態の通知処理のフローチャートである。
【図１１】図１１は、実施例１に係るデータ転送管理部のデータ転送処理のフローチャートである。
【図１２】図１２は、実施例２に係るストレージシステムのブロック図である。
【図１３】図１３は、実施例２に係るストレージシステムによるデータの読み出し処理のタイムチャートである。
【図１４】図１４は、実施例２に係るストレージシステムによるデータの書き込み処理のタイムチャートである。
【図１５】図１５は、実施例２に係るＮＡＮＤ制御部のデータ読み出し時の処理のフローチャートである。
【図１６】図１６は、実施例３に係るＮＡＮＤ制御部のデータ読み出し時の処理のフローチャートである。
【図１７】図１７は、ストレージシステムのハードウェア構成図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示するストレージシステム、ストレージ装置及びストレージシステムの制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するストレージシステム、ストレージ装置、及びストレージシステムの制御方法が限定されるものではない。
【実施例１】
【００１５】
図１は、ストレージシステムの概略構成図である。本実施例に係るストレージシステムは、演算処理装置であるホスト１及び記憶装置であるストレージ装置２を有する。
【００１６】
ストレージ装置２は、ＮＡＮＤコントローラ２１及びＮＡＮＤコントローラ２１とバス２３で接続されるＮＡＮＤデバイス２２を有する。そして、ＮＡＮＤコントローラ２１は、ＮＡＮＤデバイス２２を接続するバス２３を４チャネル有する。すなわち、ＮＡＮＤコントローラ２１は、４つの異なるチャネルのバス２３に接続されているＮＡＮＤデバイス２２に独立してアクセスする。
【００１７】
データの読み出し及び書き込みにおける、ストレージシステムの全体的な動作の概要を説明する。ホスト１は、アプリケーションなどが動作する。そして、ホスト１は、アプリケーションなどにより指定されたデータの読み書きをストレージ装置２に対して行う。例えば、ホスト１は、データの読み出しを行う場合、読み出しの命令（以下では、「Ｒｅａｄコマンド」という。）をストレージ装置２のＮＡＮＤコントローラ２１へ送信する。そして、ホスト１は、Ｒｅａｄコマンドで指定したデータをＮＡＮＤコントローラ２１から受信する。
【００１８】
また、例えば、データの書き込みを行う場合、ホスト１は、書込データ及び書込命令（以下では、「Ｗｒｉｔｅコマンド」という。）をストレージ装置２のＮＡＮＤコントローラ２１へ送信する。
【００１９】
ＮＡＮＤコントローラ２１は、Ｒｅａｄコマンドを受信すると、Ｒｅａｄコマンドで指定されたＮＡＮＤデバイス２２に対してＲｅａｄコマンドを送信する。その後、ＮＡＮＤコントローラ２１は、Ｒｅａｄコマンドで指定されたデータをＮＡＮＤデバイス２２から受信する。そして、ＮＡＮＤコントローラ２１は、受信したデータをホスト１へ送信する。
【００２０】
また、ＮＡＮＤコントローラ２１は、書込データ及びＷｒｉｔｅコマンドを受信すると、Ｗｒｉｔｅコマンドで指定されたＮＡＮＤデバイス２２に対してＷｒｉｔｅコマンドと共に書込データを送信する。
【００２１】
ＮＡＮＤデバイス２２は、図２に示すように内部にデータを格納するメモリセル２２１及びバッファであるページレジスタ２２２を有する。図２は、ＮＡＮＤデバイスの内部を説明するための図である。メモリセル２２１は、データの書き込み単位であるページに分かれている。そして、ページが複数集まって、データを消去する単位であるブロックが形成される。メモリセル２２１は、複数のブロックを有する。
【００２２】
ＮＡＮＤデバイス２２は、ＲｅａｄコマンドをＮＡＮＤコントローラ２１から受信すると、Ｒｅａｄコマンドで指定されたデータをメモリセル２２１からページレジスタ２２２へ読み出す。ＮＡＮＤデバイス２２は、データのセルからページレジスタ２２２への読み出し中は、Ｂｕｓｙ状態、すなわち、命令を受け付けない状態となる。そして、ＮＡＮＤデバイス２２は、ページレジスタ２２２に読み出したデータをＮＡＮＤコントローラ２１へ送信する。
【００２３】
また、ＮＡＮＤデバイス２２は、ＷｒｉｔｅコマンドをＮＡＮＤコントローラ２１から受信し、さらに、受信した書込データをページレジスタ２２２へ格納する。その後、ＮＡＮＤデバイス２２は、受信した書込データをページレジスタ２２２から読み出し、メモリセル２２１へ書込む。ＮＡＮＤデバイス２２は、データのページレジスタ２２２からメモリセル２２１への移動中は、Ｂｕｓｙ状態となる。
【００２４】
あるチャネルのＮＡＮＤデバイス２２がＢｕｓｙ状態となっている間、従来は、ＮＡＮＤコントローラ２１は、ＮＡＮＤデバイス２２がＲｅａｄｙ状態になるのを待った後、そのチャネル上のＮＡＮＤデバイス２２に対する他の処理を開始していた。従来は、この、Ｂｕｓｙ状態が解消されるまでの待機時間が無駄になっていた。そこで、本実施例に係るストレージシステムは、以下に説明するように、あるＮＡＮＤデバイス２２のＢｕｓｙ状態が解消される（すなわちＲｅａｄｙ状態になる）のを待たずに、同じチャネル上の他のＲｅａｄｙ状態のＮＡＮＤデバイス２２への処理を行うオーバラップ処理を実行する。そこで、次に、本実施例に係るストレージシステムの書き込み及び読み出しにおける処理を詳細に説明する。
【００２５】
図３は、実施例１に係るストレージシステムの詳細を表すブロック図である。以下の説明では、１チャネル上のＮＡＮＤデバイス２２に対する読み書きについて説明するので、図３ではバス２３として１チャネルのみを記載する。また、バス２３の１つのチャネルには、本実施例では、ＮＡＮＤデバイス２２Ａ〜２２Ｄという４つのＮＡＮＤデバイス２２が接続されている。以下の説明では、ＮＡＮＤデバイス２２Ａ〜２２Ｄを特に区別しない場合、単に「ＮＡＮＤデバイス２２」という。
【００２６】
図３に示すように、本実施例に係るホスト１は、アプリ実行部１１、ＮＡＮＤ制御部１２及びＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆ（interface）１３を有する。
【００２７】
アプリ実行部１１は、各種アプリケーションを実行する。そして、アプリ実行部１１は、アプリケーションで指定されたデータの書き込み及び読み出しをＮＡＮＤ制御部１２へ指示する。ここで、アプリ実行部１１は、ＮＡＮＤデバイス２２へ書き込むデータが、分散して異なるＮＡＮＤデバイス２２に書込み且つ書込んだデータのそれぞれを独立して各ＮＡＮＤデバイス２２から読み出すことができるデータパターンを有するか否かを判定する。書込むデータがそのようなデータパターンを有するデータの場合、アプリ実行部１１は、以下で説明するオーバラップ処理の実行をＮＡＮＤ制御部１２に指示する。そして、アプリ実行部１１は、オーバラップ処理を行って書き込んだデータを記憶しておき、読み出し時には、オーバラップ処理を行ってデータを読み出す。以下では、オーバラップ処理の実行をアプリ実行部１１が指示した場合を説明する。
【００２８】
ＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆ１３は、ＮＡＮＤコントローラ２１とＮＡＮＤ制御部１２とが通信を行うためのホスト１側のインタフェースである。ＮＡＮＤ制御部１２は、ＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆ１３を介してＮＡＮＤコントローラ２１と通信を行う。ここで、本実施例では、ＰＣＩ  ｅｘｐｒｅｓｓを用いて通信を行っているが、通信規格はこれに限らず、ＳＡＴＡやＳＡＳ  Ｉ／Ｆなどの他の通信規格を用いてもよい。実際には、ＮＡＮＤ制御部１２は、ＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆ１３を介してＮＡＮＤコントローラ２１と通信を行うが、以下の説明では、説明の便宜上、ＮＡＮＤ制御部１２とＮＡＮＤコントローラ２１とが通信を行っているように説明する場合がある。
【００２９】
データの読み出しの場合、ＮＡＮＤ制御部１２は、アプリ実行部１１からデータの読み出しのオーバラップ処理の指示を受ける。そして、ＮＡＮＤ制御部１２は、データの読出元のＮＡＮＤデバイス２２に対するＲｅａｄコマンドをＮＡＮＤコントローラ２１の命令管理部２１２へ送信する。以下では、ＮＡＮＤ制御部１２がデータの読出元のＮＡＮＤデバイス２２に対するＲｅａｄコマンドを命令管理部２１２へ送信することを、ＮＡＮＤ制御部１２によるＮＡＮＤデバイス２２へのＲｅａｄコマンドの発行という。
【００３０】
その後、ＮＡＮＤ制御部１２は、命令管理部２１２からＲｅａｄコマンド発行完了の通知を受ける。そして、同じチャネル上のＮＡＮＤデバイス２２に次に読み出すデータがある場合、ＮＡＮＤ制御部１２は、次のデータの読出元のＮＡＮＤデバイス２２へＲｅａｄコマンドを発行する。このように、ＮＡＮＤ制御部１２は、同じチャネル上にある次にデータを読み出すＮＡＮＤデバイス２２がなくなるまで、Ｒｅａｄコマンドの発行を繰り返す。すなわち、データの読み出しの場合、ＮＡＮＤ制御部１２は、読み出しが指定された１つのデータが分割されて格納されているＮＡＮＤデバイス２２の全てに対して順次Ｒｅａｄコマンドを発行する。例えば、１つのデータを分割したデータがＮＡＮＤデバイス２２Ａ〜２２Ｄの全てに格納されている場合、ＮＡＮＤ制御部１２は、ＮＡＮＤデバイス２２Ａ〜２２Ｄの全てに順次Ｒｅａｄコマンドを発行する。
【００３１】
その後、ＮＡＮＤ制御部１２は、各ＮＡＮＤデバイス２２がＢｕｓｙ状態かＲｅａｄｙ状態かを問い合わせる状態通知要求を状態通知部２１３へ定期的に送信して、状態通知要求のポーリングを行う。そして、状態通知要求に対する状態通知部２１３からの応答がＲｅａｄｙに変わると、ＮＡＮＤ制御部１２は、そのＮＡＮＤデバイス２２の状態がＢｕｓｙからＲｅａｄｙに遷移したと判定する。
【００３２】
分割されたデータが格納されている同じチャネル上にあるＮＡＮＤデバイス２２の全てへＲｅａｄコマンドを送信した後、ＮＡＮＤ制御部１２は、Ｂｕｓｙ状態からＲｅａｄｙ状態に遷移したＮＡＮＤデバイス２２があるか否かを判定する。Ｒｅａｄｙ状態に遷移したＮＡＮＤデバイス２２がある場合、ＮＡＮＤ制御部１２は、そのＮＡＮＤデバイス２２のページレジスタ２２２からＮＡＮＤコントローラ２１のバッファ２１５へのデータ転送開始をＮＡＮＤコントローラ２１のデータ転送管理部２１４へ指示する。例えば、ＮＡＮＤデバイス２２ＡがＢｕｓｙ状態からＲｅａｄｙ状態に遷移した場合、ＮＡＮＤ制御部１２は、ＮＡＮＤデバイス２２Ａのページレジスタ２２２からバッファ２１５へのデータ転送開始をデータ転送管理部２１４へ指示する。以下では、ＮＡＮＤ制御部１２がデータ転送開始をＮＡＮＤデバイス２２Ａへ指示した場合を例に説明する。
【００３３】
次に、ＮＡＮＤ制御部１２は、ＮＡＮＤデバイス２２Ａの他のページからデータを読み出すか否かを判定する。他のページからデータを読み出すと判定した場合、ＮＡＮＤ制御部１２は、ＮＡＮＤデバイス２２Ａからバッファ２１５へのデータ転送が完了するまで待機する。そして、データ転送が完了すると、ＮＡＮＤ制御部１２は、ＮＡＮＤデバイス２２ＡへＲｅａｄコマンドをさらに発行する。
【００３４】
その後、ＮＡＮＤ制御部１２は、ＮＡＮＤデバイス２２ＡへのＲｅａｄコマンドの発行完了の通知を命令管理部２１２から受信すると、ＮＡＮＤ制御部１２は、バッファ２１５からホスト１へのデータ転送をデータ転送管理部２１４へ指示する。
【００３５】
そして、ＮＡＮＤ制御部１２は、バッファ２１５から送信されてきたデータを受信する。
【００３６】
バッファ２１５からのデータ受信完了後、ＮＡＮＤ制御部１２は、上述した処理をデータの読み出しが完了するまで繰り返す。すなわち、ＮＡＮＤ制御部１２は、Ｒｅａｄｙ状態へ遷移したＮＡＮＤデバイス２２を検出し、検出したＮＡＮＤデバイス２２のページレジスタ２２２からバッファ２１５へのデータの転送を行う。さらに、ＮＡＮＤ制御部１２は、データ転送中のＮＡＮＤデバイス２２の他のページからのデータ読み出しの有無を判定し、Ｒｅａｄコマンドの送信を行う。その後、ＮＡＮＤ制御部１２は、バッファ２１５からホスト１へのデータ転送をデータ転送管理部２１４に行わせる。このような処理を、ＮＡＮＤ制御部１２は繰り返す。
【００３７】
次に、データ書き込みの場合について説明する。ＮＡＮＤ制御部１２は、アプリ実行部１１からデータの書き込みのオーバラップ処理の指示を受ける。そして、ＮＡＮＤ制御部１２は、ＮＡＮＤコントローラ２１のバッファ２１５へ書き込むデータを転送する。
【００３８】
次に、データの書込先のＮＡＮＤデバイス２２に対するＷｒｉｔｅコマンドをＮＡＮＤコントローラ２１の命令管理部２１２へ送信する。以下では、ＮＡＮＤ制御部１２がデータの書込先のＮＡＮＤデバイス２２に対するＷｒｉｔｅコマンドを命令管理部２１２へ送信することを、ＮＡＮＤ制御部１２によるＮＡＮＤデバイス２２へのＷｒｉｔｅコマンドの発行という。
【００３９】
その後、ＮＡＮＤ制御部１２は、命令管理部２１２からＷｒｉｔｅコマンド発行完了の通知を受ける。次に、ＮＡＮＤ制御部１２は、バッファ２１５からデータの書込先のＮＡＮＤデバイス２２へのデータの転送開始をデータ転送管理部２１４に指示する。
【００４０】
その後、ＮＡＮＤ制御部１２は、書込先のＮＡＮＤデバイス２２へのデータの転送の完了通知をデータ転送管理部２１４から受信する。そして、ＮＡＮＤ制御部１２は、同じチャネル上のＮＡＮＤデバイス２２に次に書き込むデータがある場合、次のデータの書込先のＮＡＮＤデバイス２２へＷｒｉｔｅコマンドを発行する。このように、ＮＡＮＤ制御部１２は、同じチャネル上にある次にデータを書き込むＮＡＮＤデバイス２２がなくなるまで、Ｗｒｉｔｅコマンドの発行を繰り返す。すなわち、データの書き込みの場合、ＮＡＮＤ制御部１２は、書き込みが指定された１つのデータが分割されて格納されるＮＡＮＤデバイス２２の全てに対して順次Ｗｒｉｔｅコマンドを発行する。例えば、１つのデータを分割したデータをＮＡＮＤデバイス２２Ａ〜２２Ｄの全てに格納する場合、ＮＡＮＤ制御部１２は、ＮＡＮＤデバイス２２Ａ〜２２Ｄの全てに順次Ｗｒｉｔｅコマンドを発行する。
【００４１】
分割されたデータを格納する同じチャネル上にあるＮＡＮＤデバイス２２の全てへＷｒｉｔｅコマンドを送信した後、ＮＡＮＤ制御部１２は、Ｂｕｓｙ状態からＲｅａｄｙ状態に遷移したＮＡＮＤデバイス２２があるか否かを判定する。Ｒｅａｄｙ状態に遷移したＮＡＮＤデバイス２２がある場合、ＮＡＮＤ制御部１２は、バッファ２１５からＮＡＮＤデバイス２２へのデータ転送が完了したか否かを判定する。バッファ２１５からのデータ転送が完了した場合、ＮＡＮＤ制御部１２は、バッファ２１５へ書き込むデータを転送し、書込先のＮＡＮＤデバイス２２へＷｒｉｔｅコマンドを発行する。そして、ＮＡＮＤ制御部１２は、バッファ２１５から書込先のＮＡＮＤデバイス２２へのデータ転送の開始をデータ転送管理部２１４に指示する。
【００４２】
ＮＡＮＤ制御部１２は、上述した処理をデータの書き込みが完了するまで繰り返す。すなわち、ＮＡＮＤ制御部１２は、Ｒｅａｄｙ状態へ遷移したＮＡＮＤデバイス２２を検出する。そして、ＮＡＮＤ制御部１２は、バッファ２１５へ書込データを転送する。次に、ＮＡＮＤ制御部１２は、検出したＮＡＮＤデバイス２２のページレジスタ２２２へバッファ２１５からデータを転送する。このような処理を、ＮＡＮＤ制御部１２は繰り返す。
【００４３】
次に、ＮＡＮＤコントローラ２１について説明する。ＮＡＮＤコントローラ２１は、図３に示すように、ＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆ２１１、命令管理部２１２、状態通知部２１３、データ転送管理部２１４、バッファ２１５、及びＮＡＮＤ  Ｉ／Ｆ２１６を有する。
【００４４】
ＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆ２１１は、ＮＡＮＤ制御部１２と通信を行うためのインタフェースである。以下に説明する命令管理部２１２、状態通知部２１３、データ転送管理部２１４、及びバッファ２１５は、実際にはＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆ２１１を介してＮＡＮＤ制御部１２と通信を行う。ただし、以下では説明の便宜上、命令管理部２１２、状態通知部２１３、データ転送管理部２１４、及びバッファ２１５がＮＡＮＤ制御部１２と直接通信を行っているように説明する場合がある。
【００４５】
ＮＡＮＤ  Ｉ／Ｆ２１６は、ＮＡＮＤコントローラ２１がＮＡＮＤデバイス２２と通信を行うためのインタフェースである。以下に説明する命令管理部２１２、状態通知部２１３、データ転送管理部２１４、及びバッファ２１５は、実際にはＮＡＮＤ  Ｉ／Ｆ２１６を介してＮＡＮＤデバイス２２と通信を行う。ただし、以下では説明の便宜上、命令管理部２１２、状態通知部２１３、データ転送管理部２１４、及びバッファ２１５がＮＡＮＤデバイス２２と直接通信を行っているように説明する場合がある。
【００４６】
命令管理部２１２は、データの読み出しの場合、ＲｅａｄコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、Ｒｅａｄコマンドで指定されているＮＡＮＤデバイス２２を特定する。その後、命令管理部２１２は、特定したＮＡＮＤデバイス２２へＲｅａｄコマンドを発行する。Ｒｅａｄコマンドの発行完了後、命令管理部２１２は、Ｒｅａｄコマンド発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００４７】
また、命令管理部２１２は、データの書き込みの場合、ＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、Ｗｒｉｔｅコマンドで指定されているＮＡＮＤデバイス２２を特定する。その後、命令管理部２１２は、特定したＮＡＮＤデバイス２２へＷｒｉｔｅコマンドを発行する。Ｗｒｉｔｅコマンドの発行完了後、命令管理部２１２は、Ｗｒｉｔｅコマンド発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００４８】
状態通知部２１３は、ＮＡＮＤデバイス２２がＢｕｓｙ状態であるかＲｅａｄｙ状態であるかを監視する。また、状態通知部２１３は、各ＮＡＮＤデバイス２２の状態通知要求を定期的にＮＡＮＤ制御部１２から受信する。そして、状態通知部２１３は、ＮＡＮＤ制御部１２から受信した状態通知要求で指定されているＮＡＮＤデバイス２２の状態をＮＡＮＤ制御部１２へ通知する。
【００４９】
ここで、本実施例では、状態通知部２１３は、ＮＡＮＤ制御部１２からの状態通知要求のポーリングを受けて、指定されたＮＡＮＤデバイス２２の状態を通知する。ただし、状態通知は他の方法でもよく、例えば、状態通知部２１３は、監視するＮＡＮＤデバイス２２がＢｕｓｙ状態からＲｅａｄｙ状態に遷移したタイミングで、ホスト１に対して割り込みを行い、ＮＡＮＤデバイス２２がＲｅａｄｙになったことを通知してもよい。
【００５０】
バッファ２１５は、データ読み出し時にホスト１へのデータ転送のサイズになるまでデータを蓄積する。また、バッファ２１５は、データ書き込み時にホスト１から送信されたデータを一時的、すなわちＮＡＮＤデバイス２２へ転送されるまでの間格納する。
【００５１】
データ転送管理部２１４は、データ読み出しの場合、ＮＡＮＤデバイス２２からバッファ２１５へのデータ転送の開始の指示をＮＡＮＤ制御部１２から受ける。そして、データ転送管理部２１４は、指定されたＮＡＮＤデバイス２２のページレジスタ２２２から指定されたデータを読み出し、バッファ２１５へ転送する。そして、バッファ２１５へのデータ転送が完了すると、データ転送管理部２１４は、データ転送完了をＮＡＮＤ制御部１２へ通知する。
【００５２】
その後、データ転送管理部２１４は、バッファ２１５からホスト１へのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５に格納されているデータをホスト１へ送信する。
【００５３】
データ書き込みの場合、データ転送管理部２１４は、ＮＡＮＤ制御部１２から送られてきた書込データをバッファ２１５へ格納する。次に、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２へのデータ転送の開始の指示をＮＡＮＤ制御部１２から受ける。そして、データ転送管理部２１４は、バッファ２１５からデータを読み出し、指定されたＮＡＮＤデバイス２２のページレジスタ２２２へ転送する。そして、ＮＡＮＤ２２へのデータ転送が完了すると、データ転送管理部２１４は、データ転送完了をＮＡＮＤ制御部１２へ通知する。
【００５４】
ＮＡＮＤデバイス２２は、メモリセル２２１とページレジスタ２２２とを有する（図２参照）。そして、ＮＡＮＤデバイス２２は、Ｒｅａｄコマンドを命令管理部２１２から受信すると、Ｒｅａｄコマンドで指定されたデータをメモリセル２２１から読み出し、ページレジスタ２２２へ格納する。このメモリセル２２１から読み出したデータをページレジスタ２２２へ格納する期間、ＮＡＮＤデバイス２２はＢｕｓｙになる。
【００５５】
また、データの書き込みの場合、ＮＡＮＤデバイス２２は、データ転送管理部２１４によりバッファ２１５から読み出されたデータをページレジスタ２２２へ格納する。次に、ＮＡＮＤデバイス２２は、Ｗｒｉｔｅコマンドを命令管理部２１２から受信すると、ページレジスタ２２２に格納したデータを読み出し、メモリセル２２１へ格納する。このページレジスタ２２２から読み出したデータをメモリセル２２１へ格納する期間、ＮＡＮＤデバイス２２はＢｕｓｙになる。
【００５６】
次に、図４を参照して、本実施例に係るストレージシステムによるデータの読み出し処理の全体的な流れについて説明する。図４は、実施例１に係るストレージシステムによるデータの読み出し処理のタイムチャートである。図４の各処理は、左端に記載された各処理に対応するＮＡＮＤデバイス２２Ａ〜２２Ｄのそれぞれに関する処理である。そして、図４の横軸は時間の経過を表す。ここでは、１チャネル上の４つのＮＡＮＤデバイス２２Ａ〜２２Ｄからデータを読み出す場合で説明する。また、図４では、処理の移行が分かり易くなるように一点鎖線矢印により処理の移行を示す場合がある。
【００５７】
命令管理部２１２は、ＮＡＮＤデバイス２２Ａに対するＲｅａｄコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ａへ発行する（ステップＳ１）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００５８】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ａは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＡはＢｕｓｙ状態になる（ステップＳ２）。
【００５９】
一方、ＮＡＮＤデバイス２２ＡがＢｕｓｙ状態になっている間に並行して、命令管理部２１２は、ＮＡＮＤデバイス２２Ｂに対するＲｅａｄコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ｂへ発行する（ステップＳ３）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００６０】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ｂは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＢはＢｕｓｙ状態になる（ステップＳ４）。
【００６１】
一方、ＮＡＮＤデバイス２２ＢがＢｕｓｙ状態になっている間に並行して、命令管理部２１２は、ＮＡＮＤデバイス２２Ｃに対するＲｅａｄコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ｃへ発行する（ステップＳ５）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００６２】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ｃは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＣはＢｕｓｙ状態になる（ステップＳ６）。
【００６３】
一方、ＮＡＮＤデバイス２２ＣがＢｕｓｙ状態になっている間に並行して、命令管理部２１２は、ＮＡＮＤデバイス２２Ｄに対するＲｅａｄコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ｄへ発行する（ステップＳ７）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００６４】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ｄは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＤはＢｕｓｙ状態になる（ステップＳ８）。
【００６５】
そして、ステップＳ２、Ｓ４，Ｓ６，Ｓ８が終わると、ＮＡＮＤデバイス２２Ａ〜２２ＤはそれぞれＢｕｓｙ状態からＲｅａｄｙ状態に遷移する。状態通知部２１３は、ステップＳ２、Ｓ４，Ｓ６，Ｓ８が終わると、ＮＡＮＤデバイス２２Ａ〜２２ＤがそれぞれＢｕｓｙ状態からＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。図４では、ＮＡＮＤデバイス２２Ａが最初にＢｕｓｙ状態からＲｅａｄｙ状態に遷移する。そこで、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ａのページレジスタ２２２からバッファ２１５へデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ａのページレジスタ２２２からバッファ２１５へのデータの転送を行う（ステップＳ９）。ただし、図４では、記載の都合上、「ＮＡＮＤからバッファへの転送」と記載している。そして、データの転送が完了すると、すなわち、ステップＳ９が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【００６６】
続いて、命令管理部２１２は、ＮＡＮＤ制御部１２からＮＡＮＤデバイス２２Ａに対するＲｅａｄコマンドを受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ａへ発行する（ステップＳ１０）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００６７】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ａは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＡはＢｕｓｙ状態になる（ステップＳ１１）。その後、ステップＳ１１が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＡがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【００６８】
一方、データ転送管理部２１４は、Ｒｅａｄコマンドの発行完了後、バッファ２１５に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２ＢがＢｕｓｙ状態になっている間に並行して、バッファ２１５からホスト１へのデータの転送を行う（ステップＳ１２）。
【００６９】
バッファ２１５からホスト１へのデータ転送が完了すると、すなわち、ステップＳ１２が終了すると、データ転送管理部２１４は、Ｒｅａｄｙ状態であるＮＡＮＤデバイス２２Ｂからバッファ２１５へのデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。ここで、ＮＡＮＤデバイス２２Ｂからのデータ転送とは、具体的には、ＮＡＮＤデバイス２２Ｂのページレジスタ２２２からのデータ転送である。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ｂのページレジスタ２２２からバッファ２１５へのデータの転送を行う（ステップＳ１３）。そして、データの転送が完了すると、すなわち、ステップＳ１３が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。ここでは、読み出すデータがこれ以上ない場合で説明する。
【００７０】
次に、データ転送管理部２１４は、バッファ２１５に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５からホスト１へのデータの転送を行う（ステップＳ１４）。
【００７１】
バッファ２１５からホスト１へのデータ転送が完了すると、すなわち、ステップＳ１４が終了すると、データ転送管理部２１４は、Ｒｅａｄｙ状態であるＮＡＮＤデバイス２２Ｃからバッファ２１５へのデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。ここで、ＮＡＮＤデバイス２２Ｃからのデータ転送とは、具体的には、ＮＡＮＤデバイス２２Ｃのページレジスタ２２２からのデータ転送である。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ｃのページレジスタ２２２からバッファ２１５へのデータの転送を行う（ステップＳ１５）。そして、データの転送が完了すると、すなわち、ステップＳ１５が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【００７２】
次に、データ転送管理部２１４は、バッファ２１５に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５からホスト１へのデータの転送を行う（ステップＳ１６）。
【００７３】
バッファ２１５からホスト１へのデータ転送が完了すると、すなわち、ステップＳ１６が終了すると、データ転送管理部２１４は、Ｒｅａｄｙ状態であるＮＡＮＤデバイス２２Ｄからバッファ２１５へデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。ここで、ＮＡＮＤデバイス２２Ｄからのデータ転送とは、具体的には、ＮＡＮＤデバイス２２Ｄのページレジスタ２２２からのデータ転送である。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ｄのページレジスタ２２２からバッファ２１５へのデータの転送を行う（ステップＳ１７）。そして、データの転送が完了すると、すなわち、ステップＳ１７が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【００７４】
次に、データ転送管理部２１４は、バッファ２１５に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５からホスト１へのデータの転送を行う（ステップＳ１８）。
【００７５】
さらに、バッファ２１５からホスト１へのデータ転送が完了すると、すなわち、ステップＳ１８が終了すると、データ転送管理部２１４は、Ｒｅａｄｙ状態であるＮＡＮＤデバイス２２Ａからバッファ２１５へのデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。ここで、ＮＡＮＤデバイス２２Ａからのデータ転送とは、具体的には、ＮＡＮＤデバイス２２Ａのページレジスタ２２２からのデータ転送である。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ａのページレジスタ２２２からバッファ２１５へのデータの転送を行う（ステップＳ１９）。そして、データの転送が完了すると、すなわち、ステップＳ１９が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【００７６】
次に、データ転送管理部２１４は、バッファ２１５に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５からホスト１へのデータの転送を行う（ステップＳ２０）。
【００７７】
ここで、図４における、タイミングＴ１以降では、Ｂｕｓｙ状態の期間が他の処理を実行する期間とオーバラップする。これにより、タイミングＴ１以降は、従来技術に比べてバス２３の利用効率が向上する。
【００７８】
次に、図５を参照して、本実施例に係るストレージシステムによるデータの書き込み処理の全体的な流れについて説明する。図５は、実施例１に係るストレージシステムによるデータの書き込み処理のタイムチャートである。図５の各処理は、左端に記載された各処理に対応するＮＡＮＤデバイス２２Ａ〜２２Ｄのそれぞれに関する処理である。そして、図５の横軸は時間の経過を表す。ここでは、１チャネル上の４つのＮＡＮＤデバイス２２Ａ〜２２Ｄに対してデータを書き込む場合で説明する。また、図５では、処理の移行が分かり易くなるように一点鎖線矢印により処理の移行を示す場合がある。
【００７９】
データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１５に転送する（ステップＳ２１）。
【００８０】
その後、命令管理部２１２は、ＮＡＮＤデバイス２２Ａに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ａへ発行する（ステップＳ２２）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００８１】
その後、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ａへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ａのページレジスタ２２２へデータを転送する（ステップＳ２３）。データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ａへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【００８２】
ＮＡＮＤデバイス２２Ａは、ページレジスタ２２２へ格納されたデータをメモリセル２２１へ転送する。この間、ＮＡＮＤデバイス２２ＡはＢｕｓｙ状態になる（ステップＳ２４）。その後、ステップＳ２４が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＡがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【００８３】
一方、ＮＡＮＤデバイス２２ＡがＢｕｓｙ状態になっている間に並行して、データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１５に転送する（ステップＳ２５）。
【００８４】
その後、命令管理部２１２は、ＮＡＮＤデバイス２２Ｂに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ｂへ発行する（ステップＳ２６）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００８５】
その後、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ｂへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ｂのページレジスタ２２２へデータを転送する（ステップＳ２７）。データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ｂへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【００８６】
ＮＡＮＤデバイス２２Ｂは、ページレジスタ２２２へ格納されたデータをメモリセル２２１へ転送する。この間、ＮＡＮＤデバイス２２ＢはＢｕｓｙ状態になる（ステップＳ２８）。その後、ステップＳ２８が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＢがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【００８７】
一方、ＮＡＮＤデバイス２２ＢがＢｕｓｙ状態になっている間に並行して、データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１５に転送する（ステップＳ２９）。
【００８８】
その後、命令管理部２１２は、ＮＡＮＤデバイス２２Ｃに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ｃへ発行する（ステップＳ３０）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００８９】
その後、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ｃへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ｃのページレジスタ２２２へデータを転送する（ステップＳ３１）。データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ｃへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【００９０】
ＮＡＮＤデバイス２２Ｃは、ページレジスタ２２２へ格納されたデータをメモリセル２２１へ転送する。この間、ＮＡＮＤデバイス２２ＣはＢｕｓｙ状態になる（ステップＳ３２）。その後、ステップＳ３２が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＣがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【００９１】
一方、ＮＡＮＤデバイス２２ＣがＢｕｓｙ状態になっている間に並行して、データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１５に転送する（ステップＳ３３）。
【００９２】
その後、命令管理部２１２は、ＮＡＮＤデバイス２２Ｄに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ｄへ発行する（ステップＳ３４）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００９３】
その後、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ｄへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ｄのページレジスタ２２２へデータを転送する（ステップＳ３５）。データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ｄへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【００９４】
ＮＡＮＤデバイス２２Ｄは、ページレジスタ２２２へ格納されたデータをメモリセル２２１へ転送する。この間、ＮＡＮＤデバイス２２ＤはＢｕｓｙ状態になる（ステップＳ３６）。その後、ステップＳ３６が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＤがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【００９５】
一方、ＮＡＮＤデバイス２２ＤがＢｕｓｙ状態になっている間に並行して、データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１５に転送する（ステップＳ３７）。
【００９６】
その後、命令管理部２１２は、ＮＡＮＤデバイス２２Ａに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ａへ発行する（ステップＳ３８）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【００９７】
その後、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ａへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ａのページレジスタ２２２へデータを転送する（ステップＳ３９）。データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２Ａへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【００９８】
ＮＡＮＤデバイス２２Ａは、ページレジスタ２２２へ格納されたデータをセルへ転送する。この間、ＮＡＮＤデバイス２２ＡはＢｕｓｙ状態になる（ステップＳ４０）。その後、ステップＳ４０が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＡがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【００９９】
次に、図６を参照して、本実施例に係るＮＡＮＤ制御部１２のデータ読み出し時の処理について説明する。図６は、実施例１に係るＮＡＮＤ制御部のデータ読み出し時の処理のフローチャートである。
【０１００】
ＮＡＮＤ制御部１２は、データ読出先のＮＡＮＤデバイス２２にＲｅａｄコマンドを発行する（ステップＳ１０１）。
【０１０１】
そして、ＮＡＮＤ制御部１２は、コマンド発行完了の通知を命令管理部２１２から受信したか否かによりコマンド発行が完了したか否かを判定する（ステップＳ１０２）。コマンド発行が完了していない場合（ステップＳ１０２：否定）、ＮＡＮＤ制御部１２は、コマンド発行が完了するまで待機する。
【０１０２】
これに対して、コマンド発行が完了した場合（ステップＳ１０２：肯定）、ＮＡＮＤ制御部１２は、データを読み出すＮＡＮＤデバイス２２が他にあるか否かを判定する（ステップＳ１０３）。データを読み出すＮＡＮＤデバイス２２が他にある場合（ステップＳ１０３：肯定）、ＮＡＮＤ制御部１２は、ステップＳ１０１へ戻る。
【０１０３】
これに対して、データを読み出すＮＡＮＤデバイス２２が他にない場合（ステップＳ１０３：否定）、ＮＡＮＤ制御部１２は、状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２があるか否かを判定する（ステップＳ１０４）。
【０１０４】
状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２がある場合（ステップＳ１０４：肯定）、ＮＡＮＤ制御部１２は、状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２からバッファ２１５へのデータ転送を開始するようにデータ転送管理部２１４に指示する（ステップＳ１０５）。
【０１０５】
ＮＡＮＤ制御部１２は、データ転送管理部２１４からデータ転送完了の通知を受けたか否かにより、データ転送が完了したか否かを判定する（ステップＳ１０６）。データ転送が完了していない場合（ステップＳ１０６：否定）、ＮＡＮＤ制御部１２は、データ転送が完了するまで待機する。
【０１０６】
これに対して、データ転送が完了した場合（ステップＳ１０６：肯定）、ＮＡＮＤ制御部１２は、データ転送を行ったＮＡＮＤデバイス２２において他のページからのデータ読み出しがあるか否かを判定する（ステップＳ１０７）。他のページからの読み出しがない場合（ステップＳ１０７：否定）、ＮＡＮＤ制御部１２は、ステップＳ１１０へ進む。
【０１０７】
一方、他のページからの読み出しがある場合（ステップＳ１０７：肯定）、ＮＡＮＤ制御部１２は、データ転送を行ったＮＡＮＤデバイス２２へＲｅａｄコマンドを発行する（ステップＳ１０８）。
【０１０８】
そして、ＮＡＮＤ制御部１２は、コマンド発行完了の通知が命令管理部２１２から受信したか否かによりコマンド発行が完了したか否かを判定する（ステップＳ１０９）。コマンド発行が完了していない場合（ステップＳ１０９：否定）、ＮＡＮＤ制御部１２は、コマンド発行が完了するまで待機する。
【０１０９】
これに対して、コマンド発行が完了した場合（ステップＳ１０９：肯定）、ＮＡＮＤ制御部１２は、バッファ２１５からホスト１へのデータ転送をデータ転送管理部２１４へ指示する（ステップＳ１１０）。その後、ＮＡＮＤ制御部１２は、ステップＳ１０４へ戻る。
【０１１０】
一方、状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２がない場合（ステップＳ１０４：否定）、ＮＡＮＤ制御部１２は、読み出すデータが格納されている全てのＮＡＮＤデバイス２２がＲｅａｄｙ状態になっているか否かを判定する（ステップＳ１１１）。
【０１１１】
読み出すデータが格納されている全てのＮＡＮＤデバイス２２がＲｅａｄｙ状態になっていない場合（ステップＳ１１１：否定）、ＮＡＮＤ制御部１２は、ステップＳ１０４へ戻る。
【０１１２】
これに対して、読み出すデータが格納されている全てのＮＡＮＤデバイス２２がＲｅａｄｙ状態になっている場合（ステップＳ１１１：肯定）、ＮＡＮＤ制御部１２は、データの読み出し処理を終了する。
【０１１３】
次に、図７を参照して、本実施例に係るＮＡＮＤ制御部１２のデータ書き込み時の処理について説明する。図７は、実施例１に係るＮＡＮＤ制御部のデータ書き込み時の処理のフローチャートである。
【０１１４】
ＮＡＮＤ制御部１２は、状態通知部２１３からの通知により、Ｒｅａｄｙ状態のＮＡＮＤデバイス２２があるか否かを判定する（ステップＳ２０１）。Ｒｅａｄｙ状態のＮＡＮＤデバイス２２がない場合（ステップＳ２０１：否定）、ＮＡＮＤ制御部１２は、いずれかのＮＡＮＤデバイス２２がＲｅａｄｙ状態になるまで待機する。
【０１１５】
これに対して、Ｒｅａｄｙ状態のＮＡＮＤデバイス２２がある場合（ステップＳ２０１：肯定）、ＮＡＮＤ制御部１２は、書き込むデータをバッファ２１５へ転送する（ステップＳ２０２）。
【０１１６】
次に、ＮＡＮＤ制御部１２は、Ｗｒｉｔｅコマンドを書込先のＮＡＮＤデバイス２２へ発行する（ステップＳ２０３）。
【０１１７】
次に、ＮＡＮＤ制御部１２は、バッファ２１５からデータ書込先のＮＡＮＤデバイス２２へのデータ転送の開始をデータ転送管理部２１４に指示する（ステップＳ２０４）。
【０１１８】
その後、ＮＡＮＤ制御部１２は、次に書き込むデータがあるか否かを判定する（ステップＳ２０５）。次に書き込むデータがある場合（ステップＳ２０５：肯定）、ＮＡＮＤ制御部１２は、ステップＳ２０１へ戻る。これに対して、次に書き込むデータがない場合（ステップＳ２０５：否定）、ＮＡＮＤ制御部１２は、データの書き込み処理を終了する。
【０１１９】
次に、図８を参照して、本実施例に係る命令管理部２１２のデータの書き込み時及び読み出し時の処理について説明する。図８は、実施例１に係る命令管理部のデータの書き込み時及び読み出し時の処理のフローチャートである。
【０１２０】
命令管理部２１２は、Ｒｅａｄコマンド又はＷｒｉｔｅコマンドを受信したか否かを判定する（ステップＳ３０１）。コマンドを受信していない場合（ステップＳ３０１：否定）、命令管理部２１２は、コマンドを受信するまで待機する。
【０１２１】
これに対して、コマンドを受信した場合（ステップＳ３０１：肯定）、命令管理部２１２は、受信したコマンドで指定されたＮＡＮＤデバイス２２にコマンドを発行する（ステップＳ３０２）。
【０１２２】
そして、命令管理部２１２は、コマンドを発行し終わると、コマンド発行完了をＮＡＮＤ制御部１２へ通知する（ステップＳ３０３）。
【０１２３】
次に、図９を参照して、本実施例に係る状態通知部２１３による状態の通知処理について説明する。図９は、実施例１に係る状態通知部による状態の通知処理のフローチャートである。
【０１２４】
状態通知部２１３は、ＮＡＮＤ制御部１２からＮＡＮＤデバイス２２の状態の通知要求を受信したか否かを判定する（ステップＳ４０１）。ＮＡＮＤ制御部１２は、状態通知部２１３に対して各ＮＡＮＤデバイス２２の状態の通知要求のポーリングを行う。ＮＡＮＤデバイス２２の状態の通知要求を受信していない場合（ステップＳ４０１：否定）、状態通知部２１３は、ＮＡＮＤデバイス２２の状態の通知要求を受信するまで待機する。
【０１２５】
これに対して、ＮＡＮＤデバイス２２の状態の通知要求を受信した場合（ステップＳ４０１：肯定）、状態通知部２１３は、状態通知要求で指定されたＮＡＮＤデバイス２２の状態をＮＡＮＤ制御部１２へ通知する（ステップＳ４０２）。
【０１２６】
また、上述したように、状態通知部２１３は、ＮＡＮＤ制御部１２へ割り込みを行って状態を通知することもできる。そこで、図１０を参照して、割り込みを行う場合の状態の通知処理について説明する。図１０は、割り込みを行う場合の状態通知部による状態の通知処理のフローチャートである。
【０１２７】
状態通知部２１３は、各ＮＡＮＤデバイス２２の状態がＢｕｓｙからＲｅａｄｙに遷移したか否かを判定する（ステップＳ４１１）。ＢｕｓｙからＲｅａｄｙに状態遷移が発生していない場合（ステップＳ４１１：否定）、状態通知部２１３は、いずれかのＮＡＮＤデバイス２２にＢｕｓｙからＲｅａｄｙへの状態遷移が発生するまで待機する。
【０１２８】
これに対して、ＢｕｓｙからＲｅａｄｙに状態遷移が発生した場合（ステップＳ４１１：肯定）、状態通知部２１３は、ＮＡＮＤ制御部１２へ割り込みを行い、ＢｕｓｙからＲｅａｄｙに状態が遷移したＮＡＮＤデバイス２２がＲｅａｄｙ状態となったことをＮＡＮＤ制御部１２へ通知する（ステップＳ４１２）。
【０１２９】
次に、図１１を参照して、本実施例に係るデータ転送管理部２１４のデータ転送処理について説明する。図１１は、実施例１に係るデータ転送管理部のデータ転送処理のフローチャートである。
【０１３０】
データ転送管理部２１４は、データの読み出しにおけるデータ転送開始要求をＮＡＮＤ制御部１２から受信したか否かを判定する（ステップＳ５０１）。
【０１３１】
データの読み出しにおけるデータ転送開始要求を受信した場合（ステップＳ５０１：肯定）、データ転送管理部２１４は、データ転送開始要求で指定されたＮＡＮＤデバイス２２からバッファ２１５へのデータ転送を開始する（ステップＳ５０２）。
【０１３２】
そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２からバッファ２１５へのデータ転送が完了したか否かを判定する（ステップＳ５０３）。データ転送が完了していない場合（ステップＳ５０３：否定）、データ転送管理部２１４は、データ転送が完了するまで待機する。
【０１３３】
これに対して、データ転送が完了した場合（ステップＳ５０３：肯定）、データ転送管理部２１４は、データ転送完了をＮＡＮＤ制御部１２へ通知する（ステップＳ５０４）。
【０１３４】
一方、データの読み出しにおけるデータ転送の開始要求を受信していない場合（ステップＳ５０１：否定）、データ転送管理部２１４は、データの書込みにおけるデータ転送開始要求をＮＡＮＤ制御部１２から受信したか否かを判定する（ステップＳ５０５）。データの書込みにおけるデータ転送開始要求を受信していない場合（ステップＳ５０５：否定）、データ転送管理部２１４は、ステップＳ５０１へ戻る。
【０１３５】
これに対して、データの書込みにおけるデータ転送の開始要求を受信した場合（ステップＳ５０５：肯定）、データ転送管理部２１４は、データ転送開始要求で指定されたＮＡＮＤデバイス２２へのバッファ２１５からのデータ転送を開始する（ステップＳ５０６）。
【０１３６】
そして、データ転送管理部２１４は、バッファ２１５からＮＡＮＤデバイス２２へのデータ転送が完了したか否かを判定する（ステップＳ５０７）。データ転送が完了していない場合（ステップＳ５０７：否定）、データ転送管理部２１４は、データ転送が完了するまで待機する。
【０１３７】
これに対して、データ転送が完了した場合（ステップＳ５０７：肯定）、データ転送管理部２１４は、データ転送完了をＮＡＮＤ制御部１２へ通知する（ステップＳ５０４）。
【０１３８】
以上に説明したように、本実施例に係るストレージシステムは、ＮＡＮＤデバイスのコマンド開始及びデータ転送開始のタイミングをホストが制御する。そして、ＮＡＮＤデバイスがＢｕｓｙ状態のときに、そのＮＡＮＤデバイスがＲｅａｄｙ状態になるのを待つことなく、Ｂｕｓｙ状態にオーバラップさせて他の処理を実行する。これにより、ＮＡＮＤコントローラのバッファとＮＡＮＤデバイスとの間、及びＮＡＮＤコントローラのバッファとホストとの間のバスの利用効率を向上させることができ、データ転送レートの高速化を図ることができる。
【０１３９】
また、本実施例にかかるストレージシステムは、ホストがＮＡＮＤデバイスのデータの読み書きの動作を制御する。このため、ホストで動作するアプリケーションが複数のＮＡＮＤデバイスに分散して配置できるデータパターンを用いているかの判定結果を基に、処理をオーバラップさせたデータの書き込み及び読み込みが行われる。そのため、適切に処理をオーバラップさせたデータの書き込み及び読み込みを行うことができ、バスの利用効率を確実に向上させることができる。
【実施例２】
【０１４０】
図１２は、実施例２に係るストレージシステムのブロック図である。本実施例に係るストレージシステムは、ＮＡＮＤコントローラのバッファとしてダブルバッファを用いていることが実施例１と異なるものである。以下の説明では、実施例１と同じ機能を有する各部については説明を省略する。
【０１４１】
ＮＡＮＤ制御部１２は、データ読み出しにおいて、Ｒｅａｄコマンドの発行後、ＢｕｓｙからＲｅａｄｙに状態が遷移したＮＡＮＤデバイス２２がある場合、バッファ２１７又は２１８にデータがあるか否かを判定する。ここで、ＮＡＮＤ制御部１２は、バッファ２１７又は２１８へのデータ転送の開始を指示するときに、いずれのバッファにデータを転送したかを記憶する。そして、ＮＡＮＤ制御部１２は、記憶した情報を用いて各バッファにおけるデータの有無を判定する。
【０１４２】
バッファ２１７及び２１８のいずれにもデータがない場合、ＮＡＮＤ制御部１２は、いずれかのバッファを選択する。本実施例では、ＮＡＮＤ制御部１２は、バッファ２１７及び２１８のいずれにもデータがない場合、バッファ２１７を選択するものとする。
【０１４３】
そして、ＮＡＮＤ制御部１２は、Ｒｅａｄｙに状態が遷移したＮＡＮＤデバイス２２から選択したバッファへのデータ転送の開始をデータ転送管理部２１４へ指示する。
【０１４４】
バッファ２１７にデータがある場合、ＮＡＮＤ制御部１２は、Ｒｅａｄｙに状態が遷移したＮＡＮＤデバイス２２からバッファ２１８へのデータ転送の開始をデータ転送管理部２１４へ指示する。
【０１４５】
さらに、ＮＡＮＤ制御部１２は、バッファ２１８へのデータ転送と並行して、バッファ２１７からホストへのデータ転送をデータ転送管理部２１４へ指示する。
【０１４６】
バッファ２１８にデータがある場合、ＮＡＮＤ制御部１２は、Ｒｅａｄｙに状態が遷移したＮＡＮＤデバイス２２からバッファ２１７へのデータ転送の開始をデータ転送管理部２１４へ指示する。
【０１４７】
さらに、ＮＡＮＤ制御部１２は、バッファ２１７へのデータ転送と並行して、バッファ２１８からホストへのデータ転送をデータ転送管理部２１４へ指示する。
【０１４８】
バッファ２１７及び２１８の双方にデータがある場合、並びに、片方にデータがある場合のいずれにおいても、ＮＡＮＤ制御部１２は、次の動作を行う。すなわち、ＮＡＮＤ制御部１２は、データ転送完了の通知をデータ転送管理部２１４から受信すると、データ転送を行ったＮＡＮＤデバイス２２の他のページから読み出すデータがあるか否かを判定する。他のページからデータを読み出す場合、ＮＡＮＤ制御部１２は、ＲｅａｄコマンドをそのＮＡＮＤデバイス２２へ発行する。
【０１４９】
次に、データ書き込みの場合について説明する。ＮＡＮＤ制御部１２は、Ｗｒｉｔｅコマンドの発行が完了すると、ＢｕｓｙからＲｅａｄｙに状態が遷移したＮＡＮＤデバイス２２があるか否かを判定する。ＢｕｓｙからＲｅａｄｙに状態が遷移したＮＡＮＤデバイス２２がある場合、ＮＡＮＤ制御部１２は、バッファ２１７又は２１８にデータがあるか否かを判定する。
【０１５０】
バッファ２１７にデータがある場合、ＮＡＮＤ制御部１２は、バッファ２１７からＮＡＮＤデバイス２２へのデータ転送を指示するとともに、ホスト１からバッファ２１８へのデータ転送の開始をデータ転送管理部２１４へ指示する。
【０１５１】
バッファ２１８にデータがある場合、ＮＡＮＤ制御部１２は、バッファ２１８からＮＡＮＤデバイス２２へのデータ転送を指示するとともに、ホスト１からバッファ２１７へのデータ転送の開始をデータ転送管理部２１４へ指示する。
【０１５２】
バッファ２１７及び２１８の双方にデータがある場合、ＮＡＮＤ制御部１２は、いずれかのバッファからＮＡＮＤデバイス２２へのデータ転送をデータ転送管理部２１４へ指示する。
【０１５３】
バッファ２１７及び２１８の双方にデータがある場合、並びに、片方にデータがある場合のいずれにおいても、ＮＡＮＤ制御部１２は、次の動作を行う。すなわち、ＮＡＮＤ制御部１２は、データ転送完了の通知をデータ転送管理部２１４から受信すると、書き込むデータがバッファ２１７又は２１８のいずれかに格納されているＮＡＮＤデバイス２２に対してＷｒｉｔｅコマンドを発行する。そして、Ｗｒｉｔｅコマンドの発行完了後、ＮＡＮＤ制御部１２は、ＢｕｓｙからＲｅａｄｙに状態が遷移したＮＡＮＤデバイス２２があるか否かの判定以降の処理を繰り返す。
【０１５４】
本実施例のように、ダブルバッファの場合、ホスト１と一方のバッファとの間でデータ転送を行っている間に、ＮＡＮＤデバイス２２と他方のバッファとの間でデータ転送を行うことができる。すなわち、ＮＡＮＤコントローラ２１を境界として、データ転送を別々に行いオーバラップさせることができるので、バスの利用効率をより向上させることができる。
【０１５５】
次に、図１３を参照して、本実施例に係るストレージシステムによるデータの読み出し処理の全体的な流れについて説明する。図１３は、実施例２に係るストレージシステムによるデータの読み出し処理のタイムチャートである。図１３の各処理は、左端に記載された各処理に対応するＮＡＮＤデバイス２２Ａ〜２２Ｄのそれぞれに関する処理である。そして、図１３の横軸は時間の経過を表す。ここでは、１チャネル上の４つのＮＡＮＤデバイス２２Ａ〜２２Ｄからデータを読み出す場合で説明する。また、図１３では、処理の移行が分かり易くなるように一点鎖線矢印により処理の移行を示す場合がある。
【０１５６】
命令管理部２１２は、ＮＡＮＤデバイス２２Ａに対するＲｅａｄコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ａへ発行する（ステップＳ４１）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１５７】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ａは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＡはＢｕｓｙ状態になる（ステップＳ４２）。
【０１５８】
一方、ＮＡＮＤデバイス２２ＡがＢｕｓｙ状態になっている間に並行して、命令管理部２１２は、ＮＡＮＤデバイス２２Ｂに対するＲｅａｄコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ｂへ発行する（ステップＳ４３）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１５９】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ｂは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＢはＢｕｓｙ状態になる（ステップＳ４４）。
【０１６０】
一方、ＮＡＮＤデバイス２２ＢがＢｕｓｙ状態になっている間に並行して、命令管理部２１２は、ＮＡＮＤデバイス２２Ｃに対するＲｅａｄコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ｃへ発行する（ステップＳ４５）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１６１】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ｃは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＣはＢｕｓｙ状態になる（ステップＳ４６）。
【０１６２】
一方、ＮＡＮＤデバイス２２ＣがＢｕｓｙ状態になっている間に並行して、命令管理部２１２は、ＮＡＮＤデバイス２２Ｄに対するＲｅａｄコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ｄへ発行する（ステップＳ４７）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１６３】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ｄは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＤはＢｕｓｙ状態になる（ステップＳ４８）。
【０１６４】
そして、ステップＳ４２、Ｓ４４，Ｓ４６，Ｓ４８が終わると、ＮＡＮＤデバイス２２Ａ〜２２ＤはそれぞれＢｕｓｙ状態からＲｅａｄｙ状態に遷移する。状態通知部２１３は、ステップＳ４２、Ｓ４４，Ｓ４６，Ｓ４８が終わると、ＮＡＮＤデバイス２２Ａ〜２２ＤがそれぞれＢｕｓｙ状態からＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。図１３では、ＮＡＮＤデバイス２２Ａが最初にＢｕｓｙ状態からＲｅａｄｙ状態に遷移する。そこで、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ａのページレジスタ２２２からバッファ２１７へデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ａのページレジスタ２２２からバッファ２１７へのデータの転送を行う（ステップＳ４９）。そして、データの転送が完了すると、すなわち、ステップＳ４９が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【０１６５】
続いて、命令管理部２１２は、ＮＡＮＤ制御部１２からＮＡＮＤデバイス２２Ａに対するＲｅａｄコマンドを受信する。そして、命令管理部２１２は、ＲｅａｄコマンドをＮＡＮＤデバイス２２Ａへ発行する（ステップＳ５０）。命令管理部２１２は、Ｒｅａｄコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１６６】
Ｒｅａｄコマンドの発行を受けると、ＮＡＮＤデバイス２２Ａは、セルからページレジスタ２２２へ指定されたデータを転送する。この間、ＮＡＮＤデバイス２２ＡはＢｕｓｙ状態になる（ステップＳ５２）。その後、ステップＳ５２が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＡがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【０１６７】
一方、データ転送管理部２１４は、Ｒｅａｄコマンドの発行完了後、バッファ２１７に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２ＢがＢｕｓｙ状態になっている間に並行して、バッファ２１７からホスト１へのデータの転送を行う（ステップＳ５１）。
【０１６８】
さらに、データ転送管理部２１４は、Ｒｅａｄｙ状態であるＮＡＮＤデバイス２２Ｂのページレジスタ２２２からバッファ２１８へデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。そして、データ転送管理部２１４は、バッファ２１７からホスト１へのデータの転送に並行して、ＮＡＮＤデバイス２２Ｂのページレジスタ２２２からバッファ２１８へのデータの転送を行う（ステップＳ５３）。そして、データの転送が完了すると、すなわち、ステップＳ５３が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。ここでは、読み出すデータがこれ以上ない場合で説明する。
【０１６９】
次に、データ転送管理部２１４は、バッファ２１８に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１８からホスト１へのデータの転送を行う（ステップＳ５４）。
【０１７０】
バッファ２１７からホスト１へのデータ転送が完了すると、すなわち、ステップＳ５１が終了すると、データ転送管理部２１４は、Ｒｅａｄｙ状態であるＮＡＮＤデバイス２２Ｃのページレジスタ２２２からバッファ２１７へデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ｃのページレジスタ２２２からバッファ２１７へのデータの転送を行う（ステップＳ５５）。そして、データの転送が完了すると、すなわち、ステップＳ５５が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【０１７１】
次に、データ転送管理部２１４は、バッファ２１７に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１７からホスト１へのデータの転送を行う（ステップＳ５６）。
【０１７２】
バッファ２１８からホスト１へのデータ転送が完了すると、すなわち、ステップＳ５４が終了すると、データ転送管理部２１４は、Ｒｅａｄｙ状態であるＮＡＮＤデバイス２２Ｄのページレジスタ２２２からバッファ２１８へデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ｄのページレジスタ２２２からバッファ２１８へのデータの転送を行う（ステップＳ５７）。そして、データの転送が完了すると、すなわち、ステップＳ５７が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【０１７３】
次に、データ転送管理部２１４は、バッファ２１８に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１８からホスト１へのデータの転送を行う（ステップＳ５８）。
【０１７４】
さらに、バッファ２１７からホスト１へのデータ転送が完了すると、すなわち、ステップＳ５６が終了すると、データ転送管理部２１４は、Ｒｅａｄｙ状態であるＮＡＮＤデバイス２２Ａのページレジスタ２２２からバッファ２１７へデータの転送開始の指示をＮＡＮＤ制御部１２から受ける。そして、データ転送管理部２１４は、ＮＡＮＤデバイス２２Ａのページレジスタ２２２からバッファ２１７へのデータの転送を行う（ステップＳ５９）。そして、データの転送が完了すると、すなわち、ステップＳ５９が完了すると、データ転送管理部２１４は、データの転送完了をＮＡＮＤ制御部１２へ通知する。
【０１７５】
次に、データ転送管理部２１４は、バッファ２１７に格納されているデータのホスト１への送信の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１７からホスト１へのデータの転送を行う（ステップＳ６０）。
【０１７６】
ここで、図１３における、タイミングＴ２以降では、Ｂｕｓｙ状態の期間が他の処理を実行する期間とオーバラップする。これにより、タイミングＴ２以降は、バス２３の利用効率がほぼ１００％となる。
【０１７７】
次に、図１４を参照して、本実施例に係るストレージシステムによるデータの書き込み処理の全体的な流れについて説明する。図１４は、実施例２に係るストレージシステムによるデータの書き込み処理のタイムチャートである。図１４の各処理は、左端に記載された各処理に対応するＮＡＮＤデバイス２２Ａ〜２２Ｄのそれぞれに関する処理である。そして、図１４の横軸は時間の経過を表す。ここでは、１チャネル上の４つのＮＡＮＤデバイス２２Ａ〜２２Ｄに対してデータを書き込む場合で説明する。また、図１４では、処理の移行が分かり易くなるように一点鎖線矢印により処理の移行を示す場合がある。
【０１７８】
データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１７に転送する（ステップＳ６１）。
【０１７９】
その後、命令管理部２１２は、ＮＡＮＤデバイス２２Ａに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ａへ発行する（ステップＳ６２）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１８０】
その後、データ転送管理部２１４は、バッファ２１７からＮＡＮＤデバイス２２Ａへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１７からＮＡＮＤデバイス２２Ａのページレジスタ２２２へデータを転送する（ステップＳ６３）。
【０１８１】
一方、バッファ２１７からＮＡＮＤデバイス２２Ａへのデータ転送に並行して、データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１８に転送する（ステップＳ６４）。
【０１８２】
データ転送管理部２１４は、バッファ２１７からＮＡＮＤデバイス２２Ａへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。データ転送完了後、ＮＡＮＤデバイス２２Ａは、ページレジスタ２２２へ格納されたデータをセルへ転送する。この間、ＮＡＮＤデバイス２２ＡはＢｕｓｙ状態になる（ステップＳ６５）。その後、ステップＳ６５が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＡがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【０１８３】
一方、バッファ２１７からＮＡＮＤデバイス２２Ａへのデータの転送が完了後、命令管理部２１２は、ＮＡＮＤデバイス２２Ｂに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ｂへ発行する（ステップＳ６６）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１８４】
その後、データ転送管理部２１４は、バッファ２１８からＮＡＮＤデバイス２２Ｂへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１８からＮＡＮＤデバイス２２Ｂのページレジスタ２２２へデータを転送する（ステップＳ６７）。
【０１８５】
一方、バッファ２１８からＮＡＮＤデバイス２２Ｂへのデータ転送に並行して、データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１７に転送する（ステップＳ６８）。
【０１８６】
データ転送管理部２１４は、バッファ２１８からＮＡＮＤデバイス２２Ｂへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。データ転送完了後、ＮＡＮＤデバイス２２Ｂは、ページレジスタ２２２へ格納されたデータをセルへ転送する。この間、ＮＡＮＤデバイス２２ＢはＢｕｓｙ状態になる（ステップＳ６９）。その後、ステップＳ６９が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＢがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【０１８７】
一方、バッファ２１８からＮＡＮＤデバイス２２Ｂへのデータの転送が完了後、命令管理部２１２は、ＮＡＮＤデバイス２２Ｃに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ｃへ発行する（ステップＳ７０）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１８８】
その後、データ転送管理部２１４は、バッファ２１７からＮＡＮＤデバイス２２Ｃへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１７からＮＡＮＤデバイス２２Ｃのページレジスタ２２２へデータを転送する（ステップＳ７１）。
【０１８９】
一方、バッファ２１７からＮＡＮＤデバイス２２Ｃへのデータ転送に並行して、データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１８に転送する（ステップＳ７２）。
【０１９０】
データ転送管理部２１４は、バッファ２１７からＮＡＮＤデバイス２２Ｃへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。データ転送完了後、ＮＡＮＤデバイス２２Ｃは、ページレジスタ２２２へ格納されたデータをセルへ転送する。この間、ＮＡＮＤデバイス２２ＣはＢｕｓｙ状態になる（ステップＳ７３）。その後、ステップＳ７３が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＣがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【０１９１】
一方、バッファ２１７からＮＡＮＤデバイス２２Ｃへのデータの転送が完了後、命令管理部２１２は、ＮＡＮＤデバイス２２Ｄに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ｄへ発行する（ステップＳ７４）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１９２】
その後、データ転送管理部２１４は、バッファ２１８からＮＡＮＤデバイス２２Ｄへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１８からＮＡＮＤデバイス２２Ｄのページレジスタ２２２へデータを転送する（ステップＳ７５）。
【０１９３】
一方、バッファ２１８からＮＡＮＤデバイス２２Ｄへのデータ転送に並行して、データ転送管理部２１４は、ホスト１から送られてきたデータをバッファ２１７に転送する（ステップＳ７６）。
【０１９４】
データ転送管理部２１４は、バッファ２１８からＮＡＮＤデバイス２２Ｄへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。データ転送完了後、ＮＡＮＤデバイス２２Ｄは、ページレジスタ２２２へ格納されたデータをセルへ転送する。この間、ＮＡＮＤデバイス２２ＤはＢｕｓｙ状態になる（ステップＳ７７）。その後、ステップＳ７３が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＤがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【０１９５】
一方、バッファ２１８からＮＡＮＤデバイス２２Ｄへのデータの転送が完了後、命令管理部２１２は、ＮＡＮＤデバイス２２Ａに対するＷｒｉｔｅコマンドをＮＡＮＤ制御部１２から受信する。そして、命令管理部２１２は、ＷｒｉｔｅコマンドをＮＡＮＤデバイス２２Ａへ発行する（ステップＳ７８）。命令管理部２１２は、Ｗｒｉｔｅコマンドの発行完了の通知をＮＡＮＤ制御部１２へ送信する。
【０１９６】
その後、データ転送管理部２１４は、バッファ２１７からＮＡＮＤデバイス２２Ａへのデータ転送の指示をＮＡＮＤ制御部１２から受信する。そして、データ転送管理部２１４は、バッファ２１７からＮＡＮＤデバイス２２Ａのページレジスタ２２２へデータを転送する（ステップＳ７９）。
【０１９７】
データ転送管理部２１４は、バッファ２１７からＮＡＮＤデバイス２２Ａへのデータの転送が完了すると、データの転送完了をＮＡＮＤ制御部１２へ通知する。データ転送完了後、ＮＡＮＤデバイス２２Ａは、ページレジスタ２２２へ格納されたデータをセルへ転送する。この間、ＮＡＮＤデバイス２２ＡはＢｕｓｙ状態になる（ステップＳ８０）。その後、ステップＳ８０が完了すると、状態通知部２１３は、ＮＡＮＤデバイス２２ＡがＲｅａｄｙ状態に遷移したことをＮＡＮＤ制御部１２へ通知する。
【０１９８】
次に、図１５を参照して、本実施例に係るＮＡＮＤ制御部１２のデータ読み出し時の処理について説明する。図１５は、実施例２に係るＮＡＮＤ制御部のデータ読み出し時の処理のフローチャートである。
【０１９９】
ＮＡＮＤ制御部１２は、データ読出先のＮＡＮＤデバイス２２にＲｅａｄコマンドを発行する（ステップＳ６０１）。
【０２００】
そして、ＮＡＮＤ制御部１２は、コマンド発行完了の通知を命令管理部２１２から受信したか否かによりコマンド発行が完了したか否かを判定する（ステップＳ６０２）。コマンド発行が完了していない場合（ステップＳ６０２：否定）、ＮＡＮＤ制御部１２は、コマンド発行が完了するまで待機する。
【０２０１】
これに対して、コマンド発行が完了した場合（ステップＳ６０２：肯定）、ＮＡＮＤ制御部１２は、データを読み出すＮＡＮＤデバイス２２が他にあるか否かを判定する（ステップＳ６０３）。データを読み出すＮＡＮＤデバイス２２が他にある場合（ステップＳ６０３：肯定）、ＮＡＮＤ制御部１２は、ステップＳ６０１へ戻る。
【０２０２】
これに対して、データを読み出すＮＡＮＤデバイス２２が他にない場合（ステップＳ６０３：否定）、ＮＡＮＤ制御部１２は、状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２があるか否かを判定する（ステップＳ６０４）。
【０２０３】
状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２がある場合（ステップＳ６０４：肯定）、ＮＡＮＤ制御部１２は、バッファ２１７にデータがあるか否かを判定する（ステップＳ６０５）。
【０２０４】
バッファ２１７にデータがある場合（ステップＳ６０５：肯定）、ＮＡＮＤ制御部１２は、状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２からバッファ２１８へのデータ転送を開始するようにデータ転送管理部２１４に指示する（ステップＳ６０６）。
【０２０５】
また、ＮＡＮＤ制御部１２は、バッファ２１７からホスト１へのデータ転送をデータ転送管理部２１４へ指示する（ステップＳ６０７）。
【０２０６】
一方、バッファ２１７にデータがない場合（ステップＳ６０５：否定）、ＮＡＮＤ制御部１２は、バッファ２１８にデータがあるか否かを判定する（ステップＳ６０８）。
【０２０７】
バッファ２１８にデータがある場合（ステップＳ６０８：肯定）、ＮＡＮＤ制御部１２は、状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２からバッファ２１７へのデータ転送を開始するようにデータ転送管理部２１４に指示する（ステップＳ６０９）。
【０２０８】
また、ＮＡＮＤ制御部１２は、バッファ２１８からホスト１へのデータ転送をデータ転送管理部２１４へ指示する（ステップＳ６１０）。
【０２０９】
一方、バッファ２１８にデータがない場合（ステップＳ６０８：否定）、ＮＡＮＤ制御部１２は、状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２からバッファ２１７へのデータ転送を開始するようにデータ転送管理部２１４に指示する（ステップＳ６１１）。
【０２１０】
ＮＡＮＤ制御部１２は、データ転送管理部２１４からデータ転送完了の通知を受けたか否かにより、データ転送が完了したか否かを判定する（ステップＳ６１２）。データ転送が完了していない場合（ステップＳ６１２：否定）、ＮＡＮＤ制御部１２は、データ転送が完了するまで待機する。
【０２１１】
これに対して、データ転送が完了した場合（ステップＳ６１２：肯定）、ＮＡＮＤ制御部１２は、データ転送を行ったＮＡＮＤデバイス２２において他のページからのデータ読み出しがあるか否かを判定する（ステップＳ６１３）。他のページからの読み出しがない場合（ステップＳ６１３：否定）、ＮＡＮＤ制御部１２は、ステップＳ６０４へ戻る。
【０２１２】
一方、他のページからの読み出しがある場合（ステップＳ６１３：肯定）、ＮＡＮＤ制御部１２は、データ転送を行ったＮＡＮＤデバイス２２へＲｅａｄコマンドを発行する（ステップＳ６１４）。
【０２１３】
そして、ＮＡＮＤ制御部１２は、コマンド発行完了の通知が命令管理部２１２から受信したか否かによりコマンド発行が完了したか否かを判定する（ステップＳ６１５）。コマンド発行が完了していない場合（ステップＳ６１５：否定）、ＮＡＮＤ制御部１２は、コマンド発行が完了するまで待機する。
【０２１４】
これに対して、コマンド発行が完了した場合（ステップＳ６１５：肯定）、ＮＡＮＤ制御部１２は、ステップＳ６０４へ戻る。
【０２１５】
一方、状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２がない場合（ステップＳ６０４：否定）、ＮＡＮＤ制御部１２は、読み出すデータが格納されている全てのＮＡＮＤデバイス２２がＲｅａｄｙ状態になっているか否かを判定する（ステップＳ６１６）。
【０２１６】
読み出すデータが格納されている全てのＮＡＮＤデバイス２２がＲｅａｄｙ状態になっていない場合（ステップＳ６１６：否定）、ＮＡＮＤ制御部１２は、ステップＳ６０４へ戻る。
【０２１７】
これに対して、読み出すデータが格納されている全てのＮＡＮＤデバイス２２がＲｅａｄｙ状態になっている場合（ステップＳ６１６：肯定）、ＮＡＮＤ制御部１２は、データの読み出し処理を終了する。
【０２１８】
以上に説明したように、本実施例に係るストレージシステムは、ダブルバッファを用いて処理をオーバラップさせながらデータの読み書きを行う。これにより、バスの利用効率をより向上させることができ、データ転送効率をより向上させることができる。
【実施例３】
【０２１９】
次に、実施例３に係るストレージシステムについて説明する。本実施例に係るストレージシステムは、ＮＡＮＤデバイスのエラー検出を行うことが実施例１と異なるものである。本実施例に係るストレージシステムのブロック図も図３で表される。以下の説明では、実施例１と同じ機能を有する各部については説明を省略する。
【０２２０】
ＮＡＮＤ制御部１２は、自己の内部にタイマを有する。そして、ＮＡＮＤ制御部１２は、ＮＡＮＤデバイス２２がＢｕｓｙ状態に遷移してからの時間を計測する。
【０２２１】
そして、ＮＡＮＤ制御部１２は、ＢｕｓｙからＲｅａｄｙに状態が遷移したＮＡＮＤデバイス２２の有無を判断し、そのようなＮＡＮＤデバイス２２がない場合に、Ｂｕｓｙ状態にある各ＮＡＮＤデバイス２２のＢｕｓｙ状態になってからの経過時間を取得する。そして、ＮＡＮＤ制御部１２は、Ｂｕｓｙ状態になってから一定時間を経過したＮＡＮＤデバイス２２があるか否かを判定する。そして、Ｂｕｓｙ状態になってから一定時間経過したＮＡＮＤデバイス２２があれば、そのＮＡＮＤデバイス２２におけるエラーを検出する。ここで、一定時間は、ストレージシステムの性能や運用状態に応じて設定することが好ましい。例えば、Ｂｕｓｙ状態が最大で１００μｓ継続するとして設計されているストレージシステムであれば、動作の余裕を考慮して一定時間を２００μｓなどとすることが考えられる。
【０２２２】
ＮＡＮＤ制御部１２は、全てのデバイスがＲｅａｄｙ状態になるまでエラーの検出を繰り返す。
【０２２３】
エラーを検出した場合、ＮＡＮＤ制御部１２は、エラーを検出したＮＡＮＤデバイス２２をリセットして、処理をリトライする。また、ＮＡＮＤ制御部１２は、ホスト１で動作するＯＳ（Operating  System）やアプリケーションへエラーを通知する。
【０２２４】
ただし、ＮＡＮＤ制御部１２が実施するエラー処理は、これに限らず、他のエラー処理を行ってもよい。
【０２２５】
次に、図１６を参照して、本実施例に係るＮＡＮＤ制御部１２のデータ読み出し時の処理について説明する。図１６は、実施例３に係るＮＡＮＤ制御部のデータ読み出し時の処理のフローチャートである。
【０２２６】
図１６におけるステップＳ７０１〜Ｓ７１０の処理は実施例１における図６で示したステップＳ１０１〜Ｓ１１０の処理と同じであるので説明を省略する。
【０２２７】
状態がＢｕｓｙからＲｅａｄｙに遷移したＮＡＮＤデバイス２２がない場合（ステップＳ７０４：否定）、ＮＡＮＤ制御部１２は、Ｂｕｓｙ状態になってから一定時間が経過したＮＡＮＤデバイス２２があるか否かを判定する（ステップＳ７１１）。一定時間が経過したＮＡＮＤデバイス２２がない場合（ステップＳ７１１：否定）、ＮＡＮＤ制御部１２は、読み出すデータが格納されている全てのＮＡＮＤデバイス２２がＲｅａｄｙ状態になっているか否かを判定する（ステップＳ７１２）。
【０２２８】
読み出すデータが格納されている全てのＮＡＮＤデバイス２２がＲｅａｄｙ状態になっていない場合（ステップＳ７１２：否定）、ＮＡＮＤ制御部１２は、ステップＳ７０４へ戻る。
【０２２９】
これに対して、読み出すデータが格納されている全てのＮＡＮＤデバイス２２がＲｅａｄｙ状態になっている場合（ステップＳ７１２：肯定）、ＮＡＮＤ制御部１２は、データの読み出し処理を終了する。
【０２３０】
一方、一定時間が経過したＮＡＮＤデバイス２２がある場合（ステップＳ７１１：肯定）、ＮＡＮＤ制御部１２は、一定時間が経過したＮＡＮＤデバイス２２のエラーを検出し、エラー処理を実施する（ステップＳ７１３）。
【０２３１】
以上に説明したように、本実施例に係るストレージシステムは、Ｒｅａｄｙ状態に遷移しないＮＡＮＤデバイスのエラーを検出する。これにより、エラーが発生したＮＡＮＤデバイスがＲｅａｄｙ状態になることを待つ無駄な時間を削減でき、エラーによるデータ転送の遅滞を軽減でき、バスの利用効率も向上する。
【０２３２】
ここで、以上の各実施例では、ＮＡＮＤコントローラ２１とＮＡＮＤデバイス２２とを接続するバスを１チャネルとして説明したが、バスは複数チャネルでもよく、複数チャネルの場合、各チャネルにおいて各実施例で説明した処理が行われる。
【０２３３】
（ハードウェア構成）
次に、図１７を参照して、以上に説明した各実施例に係るストレージシステムのハードウェア構成について説明する。図１７は、ストレージシステムのハードウェア構成図である。
【０２３４】
図１７に示すように、ホスト１は、ＣＰＵ（Central  Processing  Unit）９０１、メモリ９０２、Ｉ／Ｏコントローラ９０３、ＮＩＣ（Network  Interface  Card）９０４及びＨＤＤ（Hard  Disk  Drive）９０５を有する。
【０２３５】
メモリ９０２、Ｉ／Ｏコントローラ９０３はＣＰＵ９０１とバスで接続する。また、ＮＩＣ９０４及びＨＤＤ９０５は、Ｉ／Ｏコントローラ９０３を介してＣＰＵ９０１と接続する。
【０２３６】
ＮＩＣ９０４は、ネットワークに接続し外部の装置と通信を行うためのインタフェースである。
【０２３７】
ＨＤＤ９０５は、図３及び図１２に例示したアプリ実行部１１やＮＡＮＤ制御部１２の機能を実現するためのプログラム等の各種プログラムを格納する。
【０２３８】
ＣＰＵ９０１、メモリ９０２、Ｉ／Ｏコントローラ９０３及びＨＤＤ９０５は、図３及び図１２に例示したアプリ実行部１１やＮＡＮＤ制御部１２の機能を実現する。
【０２３９】
例えば、ＣＰＵ９０１は、ＨＤＤ９０５から各種プログラムを読み出し、メモリ９０２上にアプリ実行部１１やＮＡＮＤ制御部１２の機能を実現するプロセスを展開する。そして、ＣＰＵ９０１は、メモリ９０２やＩ／Ｏコントローラ９０３などを用いてメモリ９０２上のプロセスを実行することで、アプリ実行部１１やＮＡＮＤ制御部１２などの各種機能を実現する。
【０２４０】
ストレージ装置２は、ＮＡＮＤコントローラ９１１及びＮＡＮＤフラッシュ９１２を有する。
【０２４１】
ＮＡＮＤコントローラ９１１とＮＡＮＤフラッシュ９１２はバスで接続されている。
【０２４２】
ＮＡＮＤフラッシュ９１２は、ＮＡＮＤデバイス２２の機能を実現する。
【０２４３】
ＮＡＮＤコントローラ９１１は、ＦＰＧＡ（Field  Programmable  Gate  Array）を用いて製造されている。ＮＡＮＤコントローラ９１１は、命令管理部２１２、状態通知部２１３、データ転送管理部２１４、及びバッファ２１５〜２１７の機能を実現する。
【符号の説明】
【０２４４】
１  ホスト
２  ストレージ装置
１１  アプリ実行部
１２  ＮＡＮＤ制御部
１３  ＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆ
２１  ＮＡＮＤコントローラ
２２，２２Ａ〜２２Ｄ  ＮＡＮＤデバイス
２３  バス
２１１  ＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆ
２１２  命令管理部
２１３  状態通知部
２１４  データ転送管理部
２１５  バッファ
２１６  ＮＡＮＤ  Ｉ／Ｆ
２２１  メモリセル
２２２  ページレジスタ
【図１】
2015007843.tif 000003
【図２】
2015007843.tif 000004
【図３】
2015007843.tif 000005
【図４】
2015007843.tif 000006
【図５】
2015007843.tif 000007
【図６】
2015007843.tif 000008
【図７】
2015007843.tif 000009
【図８】
2015007843.tif 000010
【図９】
2015007843.tif 000011
【図１０】
2015007843.tif 000012
【図１１】
2015007843.tif 000013
【図１２】
2015007843.tif 000014
【図１３】
2015007843.tif 000015
【図１４】
2015007843.tif 000016
【図１５】
2015007843.tif 000017
【図１６】
2015007843.tif 000018
【図１７】
2015007843.tif 000019