(57)【要約】【課題】少ないバッファ容量でのリード転送効率を向上した記憶装置を提供する。【解決手段】実施形態の記憶装置は、メモリと、制御部７と、リードコマンドに基づいて、識別子、論理アドレス、データ長を保持するテーブルを管理するテーブル保持部５と、識別子ごとの論理アドレスおよびデータ長を制御部に発行する発行部６と、制御部から指示された識別子ごとの論理アドレスに対応する物理アドレスおよびデータ長に基づいてメモリから受信したデータを識別子と共に保持するバッファ１１と、バッファに同一識別子の論理アドレスのデータが受信された場合にデータ長に比例した個数の識別子を受け付ける識別子キュー９を備える。実施形態の記憶装置は、識別子キューの先頭の識別子から順に識別子がテーブルにおいて読み出しが未完了であるとして保持されている場合に、バッファに受信されている識別子に対応するデータを外部に転送する転送部を具備する。【選択図】図１
2013061795.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
メモリ制御部と、
リードコマンドに基づいて、当該リードコマンドの識別が可能な識別子、当該識別子に対応する読み出しデータの論理アドレス、および当該識別子に対応する読み出しデータ長を保持するテーブルを管理するテーブル保持部と、
前記識別子ごとの前記論理アドレスおよび前記データ長を前記メモリ制御部に発行するリード発行部と、
前記メモリ制御部から指示された前記識別子ごとの前記論理アドレスに対応する物理アドレスおよび前記データ長に基づいて前記不揮発性メモリから受信したデータを前記識別子と共に保持するリードバッファと、
前記リードバッファに、同一の識別子について前記論理アドレスのデータが受信された場合に、当該データのデータ長に比例した個数の当該識別子を受け付ける識別子キューと、
前記識別子キューの先頭の識別子から順に、当該識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合に、前記リードバッファに受信されている当該識別子に対応する前記データを外部に転送する転送部と、
を具備する記憶装置。
【請求項２】
前記テーブル保持部は、前記外部に転送した前記データに対応する識別子である転送中識別子と異なる識別子が前記識別子キューの先頭に存在する場合は、前記テーブルが保持する前記転送中識別子に対応する前記論理アドレスおよび前記データ長を書き換える
請求項１に記載の記憶装置。
【請求項３】
前記テーブル保持部は、前記転送中識別子に対応する前記論理アドレスを未転送の読み出しデータの先頭の論理アドレスに書き換え、前記転送中識別子に対応する前記データ長を未転送の読み出しデータのデータ長に書き換える
請求項２に記載の記憶装置。
【請求項４】
前記テーブルは、前記識別子毎に対応する読み出しが完了したか否かを示すフラグを保持する
請求項１乃至３のいずれか１項に記載の記憶装置。
【請求項５】
前記識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合とは、当該識別子に対応する前記フラグが読み出し未完了になっている場合である
請求項４に記載の記憶装置。
【請求項６】
前記テーブル保持部は、前記識別子に対応する前記読み出しデータの前記イニシエータへの転送が完了した場合には、前記テーブルから当該識別子及び当該識別子に対応するデータを削除する
請求項１乃至３のいずれか１項に記載の記憶装置。
【請求項７】
前記テーブルは、複数のイニシエータからのリードコマンドを識別可能なコマンド情報を前記識別子ごとにさらに保持する
請求項１乃至６のいずれか１項に記載の記憶装置。
【請求項８】
前記データのデータ長に比例した個数はクラスタ数である
請求項１乃至７のいずれか１項に記載の記憶装置。
【請求項９】
リードコマンドに基づいて、当該リードコマンドの識別が可能な識別子、当該識別子に対応する読み出しデータの論理アドレス、および当該識別子に対応する読み出しデータ長を保持するテーブルを管理するテーブル保持部と、
前記識別子ごとの前記論理アドレスに対応する物理アドレスおよび前記データ長に基づいて不揮発性メモリから受信したデータを前記識別子と共に保持するリードバッファと、
前記リードバッファに、同一の識別子について前記論理アドレスのデータが受信された場合に、当該データのデータ長に比例した個数の当該識別子を受け付ける識別子キューと、
前記識別子キューの先頭の識別子から順に、当該識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合に、前記リードバッファに受信されている当該識別子に対応する前記データを外部に転送する転送部と、
を具備するコントローラ。
【請求項１０】
不揮発性メモリと、メモリ制御部と、を備えた記憶装置のリードコマンド実行方法であって、
リードコマンドに基づいて、当該リードコマンドの識別が可能な識別子、当該識別子に対応する読み出しデータの論理アドレス、および当該識別子に対応する読み出しデータ長をテーブルに保持する工程と、
前記識別子ごとの前記論理アドレスに対応する前記不揮発性メモリの物理アドレスからリードバッファにデータを読み出す工程と、
前記リードバッファに、同一の識別子について前記論理アドレスのデータが受信され当該識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合に、前記リードバッファに受信されている当該識別子に対応する当該データを外部に転送する工程と、
を具備するリードコマンド実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、記憶装置、コントローラ、およびリードコマンド実行方法に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリを備えたＳＳＤ（Solid State Drive）などをターゲットとしてリードコマンドを発行するイニシエータ（ホスト）の高速化に伴い、データ転送速度の速いメモリをリードバッファに使用することがある。このようなメモリとしてはＳＲＡＭが適しているが、ＳＲＡＭはＤＲＡＭに比べて記憶容量が小さい。このため、記憶容量が小さいリードバッファを備えたＳＳＤなどの記憶装置からの読み出しデータの転送効率の向上が求められている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−２４９７７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、リードバッファの規模が大きい場合における従来のリードコマンド処理技術においてはイニシエータから受信した複数のリードコマンドを実行すると、リードバッファに読み出しデータがランダムに格納されていく為、各リードコマンドに対する読み出しデータがリードバッファ上に揃うまではイニシエータへの転送を開始することが出来なかった。その為ファームウェア（Ｆ／Ｗ）は常にＮＡＮＤフラッシュメモリとリードバッファ間の転送状況を監視する必要があり、このことによりＭＰＵが占有され、他の処理に影響を与えてしまって転送効率の向上が図れないという問題点があった。
【０００５】
本発明は、上記に鑑みてなされたものであって、ＮＡＮＤフラッシュメモリからリードバッファへの転送の監視が不要で、一度リードコマンドを登録すると読み出しデータの転送が完了するまでＭＰＵが関与することなく自動的にリードコマンドの実行が可能となる。また、複数のリードコマンドを投入することが出来る為転送効率が向上する。さらに、複数のリードコマンドに対する読み出しデータを格納可能なリードバッファ領域を必要としない為、比較的少ないリードバッファ容量での実装が可能となる。
【課題を解決するための手段】
【０００６】
実施形態の記憶装置は、不揮発性メモリと、メモリ制御部と、リードコマンドに基づいて、当該リードコマンドの識別が可能な識別子、当該識別子に対応する読み出しデータの論理アドレス、および当該識別子に対応する読み出しデータ長を保持するテーブルを管理するテーブル保持部と、前記識別子ごとの前記論理アドレスおよび前記データ長を前記メモリ制御部に発行するリード発行部と、前記メモリ制御部から指示された前記識別子ごとの前記論理アドレスに対応する物理アドレスおよび前記データ長に基づいて前記不揮発性メモリから受信したデータを前記識別子と共に保持するリードバッファと、前記リードバッファに、同一の識別子について前記論理アドレスのデータが受信された場合に、当該データのデータ長に比例した個数の当該識別子を受け付ける識別子キューと、を具備する。実施形態の記憶装置は、前記識別子キューの先頭の識別子から順に、当該識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合に、前記リードバッファに受信されている当該識別子に対応する前記データを外部に転送する転送部を、さらに具備する。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態にかかる記憶装置の構成を示すブロック図である。
【図２】図２は、第１の実施形態にかかる機能ブロック間の動作関係を概観するための機能ブロック図である。
【図３】図３は、第１の実施形態にかかる予約エクスチェンジテーブル保持部、リードバッファコマンド発行部、およびエクスチェンジ実行部の詳細な構成を示す図である。
【図４】図４は、第１の実施形態におけるイニシエータから受け取ったリードコマンドの処理の流れを説明するフローチャートである。
【図５】図５は、第１の実施形態におけるＮＡＮＤ側のデータ転送処理の流れを説明するフローチャートである。
【図６】図６は、第１の実施形態におけるイニシエータ側のコマンド実行処理の流れを説明するフローチャートである。
【図７】図７は、第１の実施形態におけるリードデータ転送の様子を示すタイミング図である。
【図８】図８は、第２の実施形態にかかる記憶装置の構成を示すブロック図である。
【発明を実施するための形態】
【０００８】
（第１の実施形態）
図１は、第１の実施形態にかかる記憶装置１００の構成を示すブロック図である。記憶装置１００は、例えばＳＳＤである。記憶装置１００にはイニシエータ１が接続されている。イニシエータ１は、例えばＳＣＳＩ規格により接続された機器にコマンドを発行する装置である。イニシエータ１は、ＳＡＴＡ(Serial Advanced Technology Attachment)規格におけるホストに相当する。イニシエータ１は接続された例えばＳＳＤなどのストレージ機器（ターゲット）に対してデータの読み出しなどのコマンドを出す役割を持っている。
【０００９】
記憶装置１００は、ＭＰＵ２、ＥＥＰＲＯＭなどからなるＲＯＭ３、イニシエータ１からのコマンドを受け付けるコマンドＩ／Ｆ（インタフェース）４、後で詳述する予約エクスチェンジテーブル保持部５、読み出しデータのイニシエータ１への転送制御および予約エクスチェンジテーブル保持部５が保持する予約エクスチェンジテーブル５０（図２、図３）の書き換えを実行するエクスチェンジ実行部８、イニシエータ１への読み出しデータの転送を行うデータフレーム生成部１０、ＮＡＮＤコマンド発行部（リード発行部）６、ＮＡＮＤフラッシュメモリ制御部（メモリ制御部）７、複数個が並列に搭載されたＮＡＮＤフラッシュメモリ（不揮発性メモリ）７０、７１、・・・７ｎ、リードバッファコマンド発行部（識別子キュー）９、およびリードバッファ１１を備える。リードバッファ１１を備えることによりＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎからイニシエータ１への読み出しデータの転送を効率よく行うことが出来るようになっている。
【００１０】
ＲＯＭ３に保持されＭＰＵ２によって実行されるファームウエア（Ｆ／Ｗ）２０（図２を参照）は、コマンドＩ／Ｆ４からのコマンド情報に基づいて、予約エクスチェンジテーブル保持部５およびＮＡＮＤコマンド発行部６を設定する。ファームウエア２０の動作に基づく本実施形態の記憶装置１００の動作を説明するために、ファームウエア２０を含んだ機能ブロック間の動作関係を概観するための機能ブロック図を図２に示す。図２に示した予約エクスチェンジテーブル保持部５、リードバッファコマンド発行部９、およびエクスチェンジ実行部８の詳細な構成を図３に示す。
【００１１】
以下、図１、図２、および図４〜図６に示したフローチャートを用いて、記憶装置１００におけるイニシエータ１から受け取ったリードコマンドの処理の流れを説明する。
【００１２】
イニシエータ１から記憶装置１００に対して発行されたリードコマンドは、コマンドＩ／Ｆ４にて受信されると、コマンドＩ／Ｆ４が管理するイニシエータコマンドテーブル４０に一旦格納される（図４：ステップＳ１０１）。ファームウエア２０はイニシエータコマンドテーブル４０に格納されているリードコマンドを解析する（ステップＳ１０２）。リードコマンドは、読み出しデータの先頭の論理アドレスとそこからのセクタ単位でのデータ長（転送長）を含んでいる。論理アドレスとは、イニシエータ１（ホスト）が使用するアドレスであり、例えばＬＢＡ（Logical Block Addressing）であり、セクタ（サイズ：例えば５１２Ｂ）に対して０からの通し番号をつけたものである。読み出しデータの先頭の論理アドレスを以下では「先頭ＬＢＡ」と呼ぶ。
【００１３】
ファームウエア２０は、イニシエータ１からコマンドＩ／Ｆ４を介して受け取ったリードコマンドに対して、少なくとも予約エクスチェンジテーブル５０に同時にエントリされるリードコマンド間では異なる識別子となるＴＡＧ（タグ）を付与する。即ち、イニシエータ１からのリードコマンドに対してタグは一意的に決定される。ファームウエア２０は、各リードコマンドに対して、ＴＡＧ、先頭ＬＢＡ、転送長、コマンド情報を把握（解析）する。コマンド情報とは、例えば、どのイニシエータ（からのコマンド）かを識別するＳＡＳ（Serial Attached SCSI）アドレス等である。記憶装置１００にエキスパンダー（ハブ）を介して複数のイニシエータが接続されている場合、ＳＡＳアドレスによりどのイニシエータからのコマンドかを識別することができる。
【００１４】
上記解析結果に基づいて、ファームウエア２０は予約エクスチェンジテーブル保持部５の予約エクスチェンジテーブル５０にリードコマンドをエントリする。具体的には、予約エクスチェンジテーブル５０に実行する各リードコマンドのＴＡＧ、先頭ＬＢＡ、転送長、コマンド情報をそれぞれのＴＡＧ毎に格納（ステップＳ１０３）する。予約エクスチェンジテーブル５０は、記憶装置１００の中のイニシエータ１に近い側（以下、イニシエータ側と呼ぶ）にある機能ブロックにおけるリードコマンド処理を司る。図３に示すように、予約エクスチェンジテーブル５０は、予約エクスチェンジ格納部５１および予約エクスチェンジステータス５２を備える。予約エクスチェンジ格納部５１は、各ＴＡＧおよびＴＡＧ毎の（未転送）先頭ＬＢＡ、（未）転送長、コマンド情報を管理する。予約エクスチェンジステータス５２は予約エクスチェンジ格納部５１が管理する各ＴＡＧについてＴＡＧ毎の予約フラグ、正常終了フラグ、エラー終了フラグを管理する。予約エクスチェンジテーブル５０にリードコマンドがエントリされた時点では、ファームウエア２０によりＴＡＧ、先頭ＬＢＡ、転送長、コマンド情報が予約エクスチェンジ格納部５１に書き込まれると共に当該ＴＡＧに対する予約エクスチェンジステータス５２の予約フラグがアサートされる。この時点では当該ＴＡＧに対する正常終了フラグ、エラー終了フラグは共にアサートされていない。
【００１５】
並行してファームウエア２０は、ＮＡＮＤコマンド発行部６にも上記と同じリードコマンドを送る。具体的には、上記各リードコマンドのＴＡＧ、先頭ＬＢＡ、転送長を格納する（ステップＳ１０４）。ＮＡＮＤコマンド発行部６は、ＮＡＮＤフラッシュメモリ制御部７およびＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎの側（以下、ＮＡＮＤ側と呼ぶ）の読み出しデータ転送処理を司る。
【００１６】
ステップＳ１０３およびステップＳ１０４はイニシエータコマンドテーブル４０内の全てのリードコマンドに対して実行される。以後の動作にファームウエア２０は関与しない。ステップＳ１０３の後は、イニシエータ側のコマンド実行処理（ステップＳ１０５）が実行され、ステップＳ１０４の後は、ＮＡＮＤ側のデータ転送処理（ステップＳ１０６）が実行される。イニシエータ側のコマンド実行処理（ステップＳ１０５）とＮＡＮＤ側のデータ転送処理（ステップＳ１０６）は、それぞれハードウエアでの処理である。
【００１７】
図５のフローチャートに基づいて、ＮＡＮＤ側のデータ転送処理の流れを説明する。ＮＡＮＤコマンド発行部６は、格納した複数のＴＡＧに対する転送要求をＮＡＮＤフラッシュメモリ制御部７に行う。ＮＡＮＤフラッシュメモリ制御部７において、ＮＡＮＤコマンド発行部６に格納された先頭ＬＢＡはＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎにおける物理アドレスに変換され、転送長と共にＮＡＮＤコマンド（リードコマンド）として、ＮＡＮＤフラッシュメモリ制御部７からＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎへ順次発行される。ＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎは指定された読み出しデータをリードバッファ１１に格納してゆく（ステップＳ２０１）。このときリードバッファ１１に格納される読み出しデータは、リードコマンドの発行順序、ＬＢＡの順序とは関係なく非同期に格納される。これは、データの書き込み時にはＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎの各チャネルに対して書き込みが並列に行われることにより、データのシーケンシャル（連続）性が失われてしまうためである。またこのことは、ＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎそれぞれのリードアクセス時間の個体差にも起因する。
【００１８】
リードバッファ１１は、ＴＡＧ毎に先頭ＬＢＡからどの程度読み出しデータをＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎから受信したかについてセクタ単位で把握している。そのために必要なＴＡＧ毎のデータ長（セクタ数）などの管理情報は例えばファームウエア２０などから事前に与えられている。
【００１９】
リードバッファ１１は、あるＴＡＧについての先頭ＬＢＡからＬＢＡ上連続したセクタ数のデータをＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎから受け取ると、そのセクタ数のＴＡＧをリードバッファコマンド発行部９に順次格納する。例えば、ＴＡＧ＝「Ａ」の読み出しが全体でＬＢＡ＝０〜１５の場合にＬＢＡ＝０〜３のセクタ数（４セクタ）のデータをＮＡＮＤフラッシュメモリ７０・・・７ｎから受信し、その後、ＴＡＧ＝「Ｂ」の読み出しデータをＮＡＮＤ７０・・・７ｎから受信した場合は、まず、４つのＴＡＧ＝「Ａ」をリードバッファコマンド発行部９に順次格納し、その後、ＴＡＧ＝「Ｂ」を連続受信セクタ数分リードバッファコマンド発行部９に格納する。その後、ＴＡＧ＝「Ａ」のＬＢＡ＝４以降の読み出しデータを連続してＮＡＮＤ７０・・・７ｎから受信した場合はＴＡＧ＝「Ａ」を連続受信セクタ数分リードバッファコマンド発行部９に格納する。ＴＡＧ＝「Ａ」の先頭ＬＢＡのデータを１セクタ分受信し、次にＴＡＧ＝「Ｂ」の先頭ＬＢＡのデータを１セクタ分受信し、その次にＴＡＧ＝「Ａ」の先頭ＬＢＡから１セクタ後のＬＢＡのデータ（先に受信したＴＡＧ＝「Ａ」のデータに連続するデータ）を１セクタ分受信した場合は、リードバッファコマンド発行部９には、ＴＡＧ＝「Ａ」、「Ｂ」、「Ａ」の順にＴＡＧが格納される。
【００２０】
一般には、あるＴＡＧについての先頭ＬＢＡから連続したデータの受信がＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎからの読み出しデータの最小単位である１クラスタ分（例えば８セクタ分）完了すると、リードバッファ１１は受信した１個のクラスタのセクタの個数（例えば８個）と同一のＴＡＧをリードバッファコマンド発行部９に順次格納する。例えば、リードバッファ１１にＴＡＧ＝「Ａ」の読み出しデータがＬＢＡ上連続して８セクタ分格納されている場合は、「Ａ」というＴＡＧが８個リードバッファコマンド発行部９に順次格納される。
【００２１】
リードバッファ１１は、あるＴＡＧについての先頭ＬＢＡからＬＢＡ上連続したセクタ数のデータをＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎから受け取る毎に、連続して受け取ったデータのセクタ数に対応する個数のＴＡＧをリードバッファコマンド発行部９に順次格納する。当該ＴＡＧについて、ＬＢＡ順に連続した読み出しデータのＮＡＮＤからの受信が中断した場合は、当該ＴＡＧの未転送の読み出しデータの先頭ＬＢＡの読み出しデータをＮＡＮＤから受信するまで当該ＴＡＧをリードバッファコマンド発行部９に格納しない。従って、後述する機構に従えば、同一ＴＡＧ間のＬＢＡ順の読み出しデータはＬＢＡの順序が守られたままイニシエータ１にリード転送されることになる。
【００２２】
リードバッファコマンド発行部９は、例えば図３に示すようなＦＩＦＯ形式のバッファ（タグキュー）であり、先に格納されたＴＡＧから順にＴＡＧ毎に予約エクスチェンジテーブル保持部５に本登録要求してゆく（ステップＳ２０２）。即ち本登録要求（リードバッファコマンド）はセクタ単位で要求される。そして、ＮＡＮＤフラッシュメモリ制御部７から発行された全てのＮＡＮＤコマンドに対するＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎからのデータ読み出しが完了すれば（ステップＳ２０３：Ｙｅｓ）、ＮＡＮＤ側のデータ転送処理は終了となり図４のステップＳ１０６が終了する。ステップＳ２０３でＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎからのデータ読み出しが完了していない場合（ステップＳ２０３：Ｎｏ）は、ステップＳ２０１に戻る。以上がＮＡＮＤ側のデータ転送動作である。
【００２３】
次に、図６のフローチャートに基づいて、イニシエータ側のコマンド実行処理の流れを説明する。まず、予約エクスチェンジテーブル保持部５の予約エクスチェンジステータス５２において、予約フラグがアサートされ且つ正常終了フラグ、エラー終了フラグが共にアサートされていないＴＡＧ（未完了のＴＡＧ）が存在するか否かが判断される（図６、ステップＳ３０１）。存在しない場合（ステップＳ３０１：Ｎｏ）はコマンド実行処理終了である。存在する場合（ステップＳ３０１：Ｙｅｓ）は、上述したようにリードバッファコマンド発行部９により本登録要求（図５、ステップＳ２０２）が来るまで待ち続ける（ステップＳ３０２：Ｎｏ）。リードバッファコマンド発行部９により予約エクスチェンジテーブル保持部５へ本登録要求がある（ステップＳ３０２：Ｙｅｓ）と、すでにエクスチェンジ実行部８が動作中（エクスチェンジ実行中）か否かが判断される（ステップＳ３０３）。
【００２４】
エクスチェンジ実行部８が動作していない場合（ステップＳ３０３：Ｎｏ）は、コンペア部５３が本登録要求されたＴＡＧを予約エクスチェンジテーブル５０から検索する。具体的には、コンペア部５３は、本登録要求されたＴＡＧが予約エクスチェンジ格納部５１にエントリされており、且つ当該ＴＡＧの予約エクスチェンジステータス５２の正常終了フラグ、エラー終了フラグが共にアサートされていないものを検索する。コンペア部５３は、検索されたＴＡＧのコマンド情報をエクスチェンジ実行部８に設定する（ステップＳ３０６）。エクスチェンジ実行部８は当該ＴＡＧの読み出しデータをリードバッファ１１からデータフレーム作成部１０に転送させ、設定されたコマンド情報をデータフレーム作成部１０に送る。データフレーム作成部１０は、リードバッファ１１から送られて来た読み出しデータおよびエクスチェンジ実行部８からのコマンド情報に基づいてデータフレームを作成して、イニシエータ１へ転送（リードデータ転送）する（エクスチェンジ実行：ステップＳ３０７）。
【００２５】
エクスチェンジ実行部８が動作している場合（ステップＳ３０３：Ｙｅｓ）は、コンペア部５３は、本登録要求のＴＡＧがエクスチェンジ実行中のＴＡＧと同一か否かを判定する（ステップＳ３０４）。同一の場合（ステップＳ３０４：Ｙｅｓ）は、実行中のコマンド情報に基づいて同一のＴＡＧのリードデータ転送を引き続き行う（ステップＳ３０７）。本登録要求のＴＡＧがエクスチェンジ実行中のＴＡＧと異なる場合（ステップＳ３０４：Ｎｏ）は、エクスチェンジ実行中のＴＡＧの予約エクスチェンジ格納部５１における先頭ＬＢＡ及び転送長を更新する。具体的には、それまでに転送済みのセクタを除いた未転送のセクタの先頭のＬＢＡに「先頭ＬＢＡ」を書き換え、未転送のセクタ数に「転送長」を書き換える。即ち、実行中のＴＡＧに対するエクスチェンジの中断に伴い予約エクスチェンジテーブル５０の書き換え（フィードバック）を行う（ステップＳ３０５）。ステップＳ３０５の後は、コンペア部５３が、本登録要求のＴＡＧのコマンド情報を予約エクスチェンジ格納部５１から検索してエクスチェンジ実行部８に設定し（ステップＳ３０６）。当該ＴＡＧの読み出しデータをデータフレームとしてイニシエータ１へ転送（ステップＳ３０７）する。
【００２６】
ステップＳ３０７で各ＴＡＧの読み出しデータをセクタ単位でイニシエータ１へ転送するごとに当該ＴＡＧの読み出しデータの最終セクタの転送が完了しているか否かが判断され（ステップＳ３０８）、まだ完了していない場合（ステップＳ３０８：Ｎｏ）は、次の本登録要求が来るのを待つ（ステップＳ３０２）。ステップＳ３０８で読み出しデータをイニシエータ１へ転送したＴＡＧの最終セクタの転送が完了した場合、即ち当該ＴＡＧの未転送セクタの転送長が０となった場合（ステップＳ３０８：Ｙｅｓ）は、実行中のエクスチェンジを完了し、予約エクスチェンジテーブル５０にフィードバックする（ステップＳ３０９）。具体的には、予約エクスチェンジステータス５２の当該ＴＡＧの正常終了フラグをアサートする。或いは、予約エクスチェンジテーブル５０から当該ＴＡＧのエントリを削除してもよい。また、上記手順のいずれかの過程でエラーが発生した場合、例えば、ＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎからのデータ読み出しに失敗した場合やイニシエータ１と記憶装置１００の接続が切断されるなどした場合には、当該ＴＡＧの予約エクスチェンジステータス５２のエラー終了フラグをアサートする。
【００２７】
従来のリードコマンド処理技術においては、図２においてイニシエータ１から受信したＴＡＧ＝「Ａ」、「Ｂ」、「Ｃ」で識別される複数のリードコマンドを実行すると、例えばＮＡＮＤフラッシュメモリ７０（ＣＨ０）およびＮＡＮＤフラッシュメモリ７１（ＣＨ１）の２チャンネルからリードバッファ１１に読み出しデータがランダムに格納されていく場合、各リードコマンド（各ＴＡＧ）に対する読み出しデータがリードバッファ１１上に全て揃うまではイニシエータ１への転送を開始することが出来なかった。即ち、各ＴＡＧの最後の読み出しデータがリードバッファ１１に揃うまでイニシエータ１への転送を開始することが出来なかった。
【００２８】
それに対して、本実施形態にかかる記憶装置１００のリードコマンド実行方法によると、図７のタイミング図に示すようなイニシエータ１へのリードデータ転送が可能である。即ち、ＮＡＮＤフラッシュメモリ７０（ＣＨ０）およびＮＡＮＤフラッシュメモリ７１（ＣＨ１）の２チャンネルからの３種類のＴＡＧのデータ転送が実施されているときに、リードバッファ１１からイニシエータ１への送信をＴＡＧ＝「Ａ」の先頭ＬＢＡから読み出しデータがリードバッファ１１に揃った時点で行うことが出来る。これにより各リードコマンドに対する読み出しデータが全て揃うまでリードバッファ１１にバッファリングさせる必要がなくなるので、規模の小さなリードバッファ１１にて効率的な読み出しデータの転送が可能となる。即ち、本実施形態にかかる記憶装置１００のリードコマンド実行方法によると、最初にファームウエア２０がリードコマンドに基づいて予約エクスチェンジテーブル５０およびＮＡＮＤコマンド発行部６を設定することにより、それ以降はハードウエアの動作のみによりリードバッファ１１からイニシエータ１への効率的な読み出しデータの転送を実行することが可能である。即ち、予約エクスチェンジテーブル５０およびＮＡＮＤコマンド発行部６への設定後、ファームウエア２０がＮＡＮＤフラッシュメモリ７０、７１、・・・７ｎとリードバッファ１１の間の転送状況を監視することなしに効率的なリードデータ転送が可能となる。
【００２９】
（第２の実施形態）
図８は、第２の実施形態にかかる記憶装置２００の構成を示すブロック図である。記憶装置２００は複数のポートを備えているので、複数のポートに複数のイニシエータ３１、３２、・・・３ｎを接続することが可能である。本実施形態の記憶装置２００は、第１の実施形態と同様に複数のイニシエータ３１、３２、・・・３ｎそれぞれからのリードコマンドの効率的な実行が可能である。記憶装置２００の構成は、各イニシエータ３１、３２、・・・３ｎそれぞれに対応したエクスチェンジ実行部８１、８２、・・・８ｎ、データフレーム生成部６１、６２、・・・６ｎを備えているが、それ以外の構成は図１の記憶装置１００と同様である。
【００３０】
本実施形態においては、予約エクスチェンジテーブル５０の予約エクスチェンジ格納部５１のコマンド情報であるＳＡＳアドレスによりどのイニシエータ３１、３２、・・・３ｎからのリードコマンドであるかを識別することができるので第１の実施形態と同様に効率的なリードデータ転送が可能となる。即ち、それぞれのポート（イニシエータ）へのリードコマンドに応じた読み出しデータの転送分配が可能となる。
【００３１】
ただし、例えば、いずれかのポートとイニシエータとの接続が中断した場合には、当該ポートに接続されたイニシエータからのリードコマンドに対応するリードバッファコマンド発行部９からの本登録要求（リードバッファコマンド）に対して、予約エクスチェンジテーブル保持部５は当該本登録要求（ＴＡＧ）に対応するコマンド情報（ＳＡＳアドレス）に基づいて、当該本登録要求の受付を一時的に停止することで、当該ポート以外のイニシエータからのリードコマンドの処理を問題なく実行することが可能となる。
【００３２】
以上説明したとおり、第１および第２の実施形態によれば、ファームウエアがＮＡＮＤフラッシュメモリとリードバッファの間の転送状況を監視することなしに規模の小さなリードバッファにて効率的な読み出しデータの転送を可能とすることができる。
【００３３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００３４】
１  イニシエータ、２  ＭＰＵ、３  ＲＯＭ、４  コマンドＩ／Ｆ（インタフェース）、５  予約エクスチェンジテーブル保持部、６  ＮＡＮＤコマンド発行部、７  ＮＡＮＤフラッシュメモリ制御部、８  エクスチェンジ実行部、９  リードバッファコマンド発行部、１０  データフレーム生成部、１１  リードバッファ、１００  記憶装置。
【図１】
2013061795.tif 000003
【図２】
2013061795.tif 000004
【図３】
2013061795.tif 000005
【図４】
2013061795.tif 000006
【図５】
2013061795.tif 000007
【図６】
2013061795.tif 000008
【図７】
2013061795.tif 000009
【図８】
2013061795.tif 000010