説明

記憶装置、コントローラ、およびリードコマンド実行方法

【課題】少ないバッファ容量でのリード転送効率を向上した記憶装置を提供する。
【解決手段】実施形態の記憶装置は、メモリと、制御部7と、リードコマンドに基づいて、識別子、論理アドレス、データ長を保持するテーブルを管理するテーブル保持部5と、識別子ごとの論理アドレスおよびデータ長を制御部に発行する発行部6と、制御部から指示された識別子ごとの論理アドレスに対応する物理アドレスおよびデータ長に基づいてメモリから受信したデータを識別子と共に保持するバッファ11と、バッファに同一識別子の論理アドレスのデータが受信された場合にデータ長に比例した個数の識別子を受け付ける識別子キュー9を備える。実施形態の記憶装置は、識別子キューの先頭の識別子から順に識別子がテーブルにおいて読み出しが未完了であるとして保持されている場合に、バッファに受信されている識別子に対応するデータを外部に転送する転送部を具備する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、記憶装置、コントローラ、およびリードコマンド実行方法に関する。
【背景技術】
【0002】
NANDフラッシュメモリを備えたSSD(Solid State Drive)などをターゲットとしてリードコマンドを発行するイニシエータ(ホスト)の高速化に伴い、データ転送速度の速いメモリをリードバッファに使用することがある。このようなメモリとしてはSRAMが適しているが、SRAMはDRAMに比べて記憶容量が小さい。このため、記憶容量が小さいリードバッファを備えたSSDなどの記憶装置からの読み出しデータの転送効率の向上が求められている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2001−249770号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、リードバッファの規模が大きい場合における従来のリードコマンド処理技術においてはイニシエータから受信した複数のリードコマンドを実行すると、リードバッファに読み出しデータがランダムに格納されていく為、各リードコマンドに対する読み出しデータがリードバッファ上に揃うまではイニシエータへの転送を開始することが出来なかった。その為ファームウェア(F/W)は常にNANDフラッシュメモリとリードバッファ間の転送状況を監視する必要があり、このことによりMPUが占有され、他の処理に影響を与えてしまって転送効率の向上が図れないという問題点があった。
【0005】
本発明は、上記に鑑みてなされたものであって、NANDフラッシュメモリからリードバッファへの転送の監視が不要で、一度リードコマンドを登録すると読み出しデータの転送が完了するまでMPUが関与することなく自動的にリードコマンドの実行が可能となる。また、複数のリードコマンドを投入することが出来る為転送効率が向上する。さらに、複数のリードコマンドに対する読み出しデータを格納可能なリードバッファ領域を必要としない為、比較的少ないリードバッファ容量での実装が可能となる。
【課題を解決するための手段】
【0006】
実施形態の記憶装置は、不揮発性メモリと、メモリ制御部と、リードコマンドに基づいて、当該リードコマンドの識別が可能な識別子、当該識別子に対応する読み出しデータの論理アドレス、および当該識別子に対応する読み出しデータ長を保持するテーブルを管理するテーブル保持部と、前記識別子ごとの前記論理アドレスおよび前記データ長を前記メモリ制御部に発行するリード発行部と、前記メモリ制御部から指示された前記識別子ごとの前記論理アドレスに対応する物理アドレスおよび前記データ長に基づいて前記不揮発性メモリから受信したデータを前記識別子と共に保持するリードバッファと、前記リードバッファに、同一の識別子について前記論理アドレスのデータが受信された場合に、当該データのデータ長に比例した個数の当該識別子を受け付ける識別子キューと、を具備する。実施形態の記憶装置は、前記識別子キューの先頭の識別子から順に、当該識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合に、前記リードバッファに受信されている当該識別子に対応する前記データを外部に転送する転送部を、さらに具備する。
【図面の簡単な説明】
【0007】
【図1】図1は、第1の実施形態にかかる記憶装置の構成を示すブロック図である。
【図2】図2は、第1の実施形態にかかる機能ブロック間の動作関係を概観するための機能ブロック図である。
【図3】図3は、第1の実施形態にかかる予約エクスチェンジテーブル保持部、リードバッファコマンド発行部、およびエクスチェンジ実行部の詳細な構成を示す図である。
【図4】図4は、第1の実施形態におけるイニシエータから受け取ったリードコマンドの処理の流れを説明するフローチャートである。
【図5】図5は、第1の実施形態におけるNAND側のデータ転送処理の流れを説明するフローチャートである。
【図6】図6は、第1の実施形態におけるイニシエータ側のコマンド実行処理の流れを説明するフローチャートである。
【図7】図7は、第1の実施形態におけるリードデータ転送の様子を示すタイミング図である。
【図8】図8は、第2の実施形態にかかる記憶装置の構成を示すブロック図である。
【発明を実施するための形態】
【0008】
(第1の実施形態)
図1は、第1の実施形態にかかる記憶装置100の構成を示すブロック図である。記憶装置100は、例えばSSDである。記憶装置100にはイニシエータ1が接続されている。イニシエータ1は、例えばSCSI規格により接続された機器にコマンドを発行する装置である。イニシエータ1は、SATA(Serial Advanced Technology Attachment)規格におけるホストに相当する。イニシエータ1は接続された例えばSSDなどのストレージ機器(ターゲット)に対してデータの読み出しなどのコマンドを出す役割を持っている。
【0009】
記憶装置100は、MPU2、EEPROMなどからなるROM3、イニシエータ1からのコマンドを受け付けるコマンドI/F(インタフェース)4、後で詳述する予約エクスチェンジテーブル保持部5、読み出しデータのイニシエータ1への転送制御および予約エクスチェンジテーブル保持部5が保持する予約エクスチェンジテーブル50(図2、図3)の書き換えを実行するエクスチェンジ実行部8、イニシエータ1への読み出しデータの転送を行うデータフレーム生成部10、NANDコマンド発行部(リード発行部)6、NANDフラッシュメモリ制御部(メモリ制御部)7、複数個が並列に搭載されたNANDフラッシュメモリ(不揮発性メモリ)70、71、・・・7n、リードバッファコマンド発行部(識別子キュー)9、およびリードバッファ11を備える。リードバッファ11を備えることによりNANDフラッシュメモリ70、71、・・・7nからイニシエータ1への読み出しデータの転送を効率よく行うことが出来るようになっている。
【0010】
ROM3に保持されMPU2によって実行されるファームウエア(F/W)20(図2を参照)は、コマンドI/F4からのコマンド情報に基づいて、予約エクスチェンジテーブル保持部5およびNANDコマンド発行部6を設定する。ファームウエア20の動作に基づく本実施形態の記憶装置100の動作を説明するために、ファームウエア20を含んだ機能ブロック間の動作関係を概観するための機能ブロック図を図2に示す。図2に示した予約エクスチェンジテーブル保持部5、リードバッファコマンド発行部9、およびエクスチェンジ実行部8の詳細な構成を図3に示す。
【0011】
以下、図1、図2、および図4〜図6に示したフローチャートを用いて、記憶装置100におけるイニシエータ1から受け取ったリードコマンドの処理の流れを説明する。
【0012】
イニシエータ1から記憶装置100に対して発行されたリードコマンドは、コマンドI/F4にて受信されると、コマンドI/F4が管理するイニシエータコマンドテーブル40に一旦格納される(図4:ステップS101)。ファームウエア20はイニシエータコマンドテーブル40に格納されているリードコマンドを解析する(ステップS102)。リードコマンドは、読み出しデータの先頭の論理アドレスとそこからのセクタ単位でのデータ長(転送長)を含んでいる。論理アドレスとは、イニシエータ1(ホスト)が使用するアドレスであり、例えばLBA(Logical Block Addressing)であり、セクタ(サイズ:例えば512B)に対して0からの通し番号をつけたものである。読み出しデータの先頭の論理アドレスを以下では「先頭LBA」と呼ぶ。
【0013】
ファームウエア20は、イニシエータ1からコマンドI/F4を介して受け取ったリードコマンドに対して、少なくとも予約エクスチェンジテーブル50に同時にエントリされるリードコマンド間では異なる識別子となるTAG(タグ)を付与する。即ち、イニシエータ1からのリードコマンドに対してタグは一意的に決定される。ファームウエア20は、各リードコマンドに対して、TAG、先頭LBA、転送長、コマンド情報を把握(解析)する。コマンド情報とは、例えば、どのイニシエータ(からのコマンド)かを識別するSAS(Serial Attached SCSI)アドレス等である。記憶装置100にエキスパンダー(ハブ)を介して複数のイニシエータが接続されている場合、SASアドレスによりどのイニシエータからのコマンドかを識別することができる。
【0014】
上記解析結果に基づいて、ファームウエア20は予約エクスチェンジテーブル保持部5の予約エクスチェンジテーブル50にリードコマンドをエントリする。具体的には、予約エクスチェンジテーブル50に実行する各リードコマンドのTAG、先頭LBA、転送長、コマンド情報をそれぞれのTAG毎に格納(ステップS103)する。予約エクスチェンジテーブル50は、記憶装置100の中のイニシエータ1に近い側(以下、イニシエータ側と呼ぶ)にある機能ブロックにおけるリードコマンド処理を司る。図3に示すように、予約エクスチェンジテーブル50は、予約エクスチェンジ格納部51および予約エクスチェンジステータス52を備える。予約エクスチェンジ格納部51は、各TAGおよびTAG毎の(未転送)先頭LBA、(未)転送長、コマンド情報を管理する。予約エクスチェンジステータス52は予約エクスチェンジ格納部51が管理する各TAGについてTAG毎の予約フラグ、正常終了フラグ、エラー終了フラグを管理する。予約エクスチェンジテーブル50にリードコマンドがエントリされた時点では、ファームウエア20によりTAG、先頭LBA、転送長、コマンド情報が予約エクスチェンジ格納部51に書き込まれると共に当該TAGに対する予約エクスチェンジステータス52の予約フラグがアサートされる。この時点では当該TAGに対する正常終了フラグ、エラー終了フラグは共にアサートされていない。
【0015】
並行してファームウエア20は、NANDコマンド発行部6にも上記と同じリードコマンドを送る。具体的には、上記各リードコマンドのTAG、先頭LBA、転送長を格納する(ステップS104)。NANDコマンド発行部6は、NANDフラッシュメモリ制御部7およびNANDフラッシュメモリ70、71、・・・7nの側(以下、NAND側と呼ぶ)の読み出しデータ転送処理を司る。
【0016】
ステップS103およびステップS104はイニシエータコマンドテーブル40内の全てのリードコマンドに対して実行される。以後の動作にファームウエア20は関与しない。ステップS103の後は、イニシエータ側のコマンド実行処理(ステップS105)が実行され、ステップS104の後は、NAND側のデータ転送処理(ステップS106)が実行される。イニシエータ側のコマンド実行処理(ステップS105)とNAND側のデータ転送処理(ステップS106)は、それぞれハードウエアでの処理である。
【0017】
図5のフローチャートに基づいて、NAND側のデータ転送処理の流れを説明する。NANDコマンド発行部6は、格納した複数のTAGに対する転送要求をNANDフラッシュメモリ制御部7に行う。NANDフラッシュメモリ制御部7において、NANDコマンド発行部6に格納された先頭LBAはNANDフラッシュメモリ70、71、・・・7nにおける物理アドレスに変換され、転送長と共にNANDコマンド(リードコマンド)として、NANDフラッシュメモリ制御部7からNANDフラッシュメモリ70、71、・・・7nへ順次発行される。NANDフラッシュメモリ70、71、・・・7nは指定された読み出しデータをリードバッファ11に格納してゆく(ステップS201)。このときリードバッファ11に格納される読み出しデータは、リードコマンドの発行順序、LBAの順序とは関係なく非同期に格納される。これは、データの書き込み時にはNANDフラッシュメモリ70、71、・・・7nの各チャネルに対して書き込みが並列に行われることにより、データのシーケンシャル(連続)性が失われてしまうためである。またこのことは、NANDフラッシュメモリ70、71、・・・7nそれぞれのリードアクセス時間の個体差にも起因する。
【0018】
リードバッファ11は、TAG毎に先頭LBAからどの程度読み出しデータをNANDフラッシュメモリ70、71、・・・7nから受信したかについてセクタ単位で把握している。そのために必要なTAG毎のデータ長(セクタ数)などの管理情報は例えばファームウエア20などから事前に与えられている。
【0019】
リードバッファ11は、あるTAGについての先頭LBAからLBA上連続したセクタ数のデータをNANDフラッシュメモリ70、71、・・・7nから受け取ると、そのセクタ数のTAGをリードバッファコマンド発行部9に順次格納する。例えば、TAG=「A」の読み出しが全体でLBA=0〜15の場合にLBA=0〜3のセクタ数(4セクタ)のデータをNANDフラッシュメモリ70・・・7nから受信し、その後、TAG=「B」の読み出しデータをNAND70・・・7nから受信した場合は、まず、4つのTAG=「A」をリードバッファコマンド発行部9に順次格納し、その後、TAG=「B」を連続受信セクタ数分リードバッファコマンド発行部9に格納する。その後、TAG=「A」のLBA=4以降の読み出しデータを連続してNAND70・・・7nから受信した場合はTAG=「A」を連続受信セクタ数分リードバッファコマンド発行部9に格納する。TAG=「A」の先頭LBAのデータを1セクタ分受信し、次にTAG=「B」の先頭LBAのデータを1セクタ分受信し、その次にTAG=「A」の先頭LBAから1セクタ後のLBAのデータ(先に受信したTAG=「A」のデータに連続するデータ)を1セクタ分受信した場合は、リードバッファコマンド発行部9には、TAG=「A」、「B」、「A」の順にTAGが格納される。
【0020】
一般には、あるTAGについての先頭LBAから連続したデータの受信がNANDフラッシュメモリ70、71、・・・7nからの読み出しデータの最小単位である1クラスタ分(例えば8セクタ分)完了すると、リードバッファ11は受信した1個のクラスタのセクタの個数(例えば8個)と同一のTAGをリードバッファコマンド発行部9に順次格納する。例えば、リードバッファ11にTAG=「A」の読み出しデータがLBA上連続して8セクタ分格納されている場合は、「A」というTAGが8個リードバッファコマンド発行部9に順次格納される。
【0021】
リードバッファ11は、あるTAGについての先頭LBAからLBA上連続したセクタ数のデータをNANDフラッシュメモリ70、71、・・・7nから受け取る毎に、連続して受け取ったデータのセクタ数に対応する個数のTAGをリードバッファコマンド発行部9に順次格納する。当該TAGについて、LBA順に連続した読み出しデータのNANDからの受信が中断した場合は、当該TAGの未転送の読み出しデータの先頭LBAの読み出しデータをNANDから受信するまで当該TAGをリードバッファコマンド発行部9に格納しない。従って、後述する機構に従えば、同一TAG間のLBA順の読み出しデータはLBAの順序が守られたままイニシエータ1にリード転送されることになる。
【0022】
リードバッファコマンド発行部9は、例えば図3に示すようなFIFO形式のバッファ(タグキュー)であり、先に格納されたTAGから順にTAG毎に予約エクスチェンジテーブル保持部5に本登録要求してゆく(ステップS202)。即ち本登録要求(リードバッファコマンド)はセクタ単位で要求される。そして、NANDフラッシュメモリ制御部7から発行された全てのNANDコマンドに対するNANDフラッシュメモリ70、71、・・・7nからのデータ読み出しが完了すれば(ステップS203:Yes)、NAND側のデータ転送処理は終了となり図4のステップS106が終了する。ステップS203でNANDフラッシュメモリ70、71、・・・7nからのデータ読み出しが完了していない場合(ステップS203:No)は、ステップS201に戻る。以上がNAND側のデータ転送動作である。
【0023】
次に、図6のフローチャートに基づいて、イニシエータ側のコマンド実行処理の流れを説明する。まず、予約エクスチェンジテーブル保持部5の予約エクスチェンジステータス52において、予約フラグがアサートされ且つ正常終了フラグ、エラー終了フラグが共にアサートされていないTAG(未完了のTAG)が存在するか否かが判断される(図6、ステップS301)。存在しない場合(ステップS301:No)はコマンド実行処理終了である。存在する場合(ステップS301:Yes)は、上述したようにリードバッファコマンド発行部9により本登録要求(図5、ステップS202)が来るまで待ち続ける(ステップS302:No)。リードバッファコマンド発行部9により予約エクスチェンジテーブル保持部5へ本登録要求がある(ステップS302:Yes)と、すでにエクスチェンジ実行部8が動作中(エクスチェンジ実行中)か否かが判断される(ステップS303)。
【0024】
エクスチェンジ実行部8が動作していない場合(ステップS303:No)は、コンペア部53が本登録要求されたTAGを予約エクスチェンジテーブル50から検索する。具体的には、コンペア部53は、本登録要求されたTAGが予約エクスチェンジ格納部51にエントリされており、且つ当該TAGの予約エクスチェンジステータス52の正常終了フラグ、エラー終了フラグが共にアサートされていないものを検索する。コンペア部53は、検索されたTAGのコマンド情報をエクスチェンジ実行部8に設定する(ステップS306)。エクスチェンジ実行部8は当該TAGの読み出しデータをリードバッファ11からデータフレーム作成部10に転送させ、設定されたコマンド情報をデータフレーム作成部10に送る。データフレーム作成部10は、リードバッファ11から送られて来た読み出しデータおよびエクスチェンジ実行部8からのコマンド情報に基づいてデータフレームを作成して、イニシエータ1へ転送(リードデータ転送)する(エクスチェンジ実行:ステップS307)。
【0025】
エクスチェンジ実行部8が動作している場合(ステップS303:Yes)は、コンペア部53は、本登録要求のTAGがエクスチェンジ実行中のTAGと同一か否かを判定する(ステップS304)。同一の場合(ステップS304:Yes)は、実行中のコマンド情報に基づいて同一のTAGのリードデータ転送を引き続き行う(ステップS307)。本登録要求のTAGがエクスチェンジ実行中のTAGと異なる場合(ステップS304:No)は、エクスチェンジ実行中のTAGの予約エクスチェンジ格納部51における先頭LBA及び転送長を更新する。具体的には、それまでに転送済みのセクタを除いた未転送のセクタの先頭のLBAに「先頭LBA」を書き換え、未転送のセクタ数に「転送長」を書き換える。即ち、実行中のTAGに対するエクスチェンジの中断に伴い予約エクスチェンジテーブル50の書き換え(フィードバック)を行う(ステップS305)。ステップS305の後は、コンペア部53が、本登録要求のTAGのコマンド情報を予約エクスチェンジ格納部51から検索してエクスチェンジ実行部8に設定し(ステップS306)。当該TAGの読み出しデータをデータフレームとしてイニシエータ1へ転送(ステップS307)する。
【0026】
ステップS307で各TAGの読み出しデータをセクタ単位でイニシエータ1へ転送するごとに当該TAGの読み出しデータの最終セクタの転送が完了しているか否かが判断され(ステップS308)、まだ完了していない場合(ステップS308:No)は、次の本登録要求が来るのを待つ(ステップS302)。ステップS308で読み出しデータをイニシエータ1へ転送したTAGの最終セクタの転送が完了した場合、即ち当該TAGの未転送セクタの転送長が0となった場合(ステップS308:Yes)は、実行中のエクスチェンジを完了し、予約エクスチェンジテーブル50にフィードバックする(ステップS309)。具体的には、予約エクスチェンジステータス52の当該TAGの正常終了フラグをアサートする。或いは、予約エクスチェンジテーブル50から当該TAGのエントリを削除してもよい。また、上記手順のいずれかの過程でエラーが発生した場合、例えば、NANDフラッシュメモリ70、71、・・・7nからのデータ読み出しに失敗した場合やイニシエータ1と記憶装置100の接続が切断されるなどした場合には、当該TAGの予約エクスチェンジステータス52のエラー終了フラグをアサートする。
【0027】
従来のリードコマンド処理技術においては、図2においてイニシエータ1から受信したTAG=「A」、「B」、「C」で識別される複数のリードコマンドを実行すると、例えばNANDフラッシュメモリ70(CH0)およびNANDフラッシュメモリ71(CH1)の2チャンネルからリードバッファ11に読み出しデータがランダムに格納されていく場合、各リードコマンド(各TAG)に対する読み出しデータがリードバッファ11上に全て揃うまではイニシエータ1への転送を開始することが出来なかった。即ち、各TAGの最後の読み出しデータがリードバッファ11に揃うまでイニシエータ1への転送を開始することが出来なかった。
【0028】
それに対して、本実施形態にかかる記憶装置100のリードコマンド実行方法によると、図7のタイミング図に示すようなイニシエータ1へのリードデータ転送が可能である。即ち、NANDフラッシュメモリ70(CH0)およびNANDフラッシュメモリ71(CH1)の2チャンネルからの3種類のTAGのデータ転送が実施されているときに、リードバッファ11からイニシエータ1への送信をTAG=「A」の先頭LBAから読み出しデータがリードバッファ11に揃った時点で行うことが出来る。これにより各リードコマンドに対する読み出しデータが全て揃うまでリードバッファ11にバッファリングさせる必要がなくなるので、規模の小さなリードバッファ11にて効率的な読み出しデータの転送が可能となる。即ち、本実施形態にかかる記憶装置100のリードコマンド実行方法によると、最初にファームウエア20がリードコマンドに基づいて予約エクスチェンジテーブル50およびNANDコマンド発行部6を設定することにより、それ以降はハードウエアの動作のみによりリードバッファ11からイニシエータ1への効率的な読み出しデータの転送を実行することが可能である。即ち、予約エクスチェンジテーブル50およびNANDコマンド発行部6への設定後、ファームウエア20がNANDフラッシュメモリ70、71、・・・7nとリードバッファ11の間の転送状況を監視することなしに効率的なリードデータ転送が可能となる。
【0029】
(第2の実施形態)
図8は、第2の実施形態にかかる記憶装置200の構成を示すブロック図である。記憶装置200は複数のポートを備えているので、複数のポートに複数のイニシエータ31、32、・・・3nを接続することが可能である。本実施形態の記憶装置200は、第1の実施形態と同様に複数のイニシエータ31、32、・・・3nそれぞれからのリードコマンドの効率的な実行が可能である。記憶装置200の構成は、各イニシエータ31、32、・・・3nそれぞれに対応したエクスチェンジ実行部81、82、・・・8n、データフレーム生成部61、62、・・・6nを備えているが、それ以外の構成は図1の記憶装置100と同様である。
【0030】
本実施形態においては、予約エクスチェンジテーブル50の予約エクスチェンジ格納部51のコマンド情報であるSASアドレスによりどのイニシエータ31、32、・・・3nからのリードコマンドであるかを識別することができるので第1の実施形態と同様に効率的なリードデータ転送が可能となる。即ち、それぞれのポート(イニシエータ)へのリードコマンドに応じた読み出しデータの転送分配が可能となる。
【0031】
ただし、例えば、いずれかのポートとイニシエータとの接続が中断した場合には、当該ポートに接続されたイニシエータからのリードコマンドに対応するリードバッファコマンド発行部9からの本登録要求(リードバッファコマンド)に対して、予約エクスチェンジテーブル保持部5は当該本登録要求(TAG)に対応するコマンド情報(SASアドレス)に基づいて、当該本登録要求の受付を一時的に停止することで、当該ポート以外のイニシエータからのリードコマンドの処理を問題なく実行することが可能となる。
【0032】
以上説明したとおり、第1および第2の実施形態によれば、ファームウエアがNANDフラッシュメモリとリードバッファの間の転送状況を監視することなしに規模の小さなリードバッファにて効率的な読み出しデータの転送を可能とすることができる。
【0033】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0034】
1 イニシエータ、2 MPU、3 ROM、4 コマンドI/F(インタフェース)、5 予約エクスチェンジテーブル保持部、6 NANDコマンド発行部、7 NANDフラッシュメモリ制御部、8 エクスチェンジ実行部、9 リードバッファコマンド発行部、10 データフレーム生成部、11 リードバッファ、100 記憶装置。

【特許請求の範囲】
【請求項1】
不揮発性メモリと、
メモリ制御部と、
リードコマンドに基づいて、当該リードコマンドの識別が可能な識別子、当該識別子に対応する読み出しデータの論理アドレス、および当該識別子に対応する読み出しデータ長を保持するテーブルを管理するテーブル保持部と、
前記識別子ごとの前記論理アドレスおよび前記データ長を前記メモリ制御部に発行するリード発行部と、
前記メモリ制御部から指示された前記識別子ごとの前記論理アドレスに対応する物理アドレスおよび前記データ長に基づいて前記不揮発性メモリから受信したデータを前記識別子と共に保持するリードバッファと、
前記リードバッファに、同一の識別子について前記論理アドレスのデータが受信された場合に、当該データのデータ長に比例した個数の当該識別子を受け付ける識別子キューと、
前記識別子キューの先頭の識別子から順に、当該識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合に、前記リードバッファに受信されている当該識別子に対応する前記データを外部に転送する転送部と、
を具備する記憶装置。
【請求項2】
前記テーブル保持部は、前記外部に転送した前記データに対応する識別子である転送中識別子と異なる識別子が前記識別子キューの先頭に存在する場合は、前記テーブルが保持する前記転送中識別子に対応する前記論理アドレスおよび前記データ長を書き換える
請求項1に記載の記憶装置。
【請求項3】
前記テーブル保持部は、前記転送中識別子に対応する前記論理アドレスを未転送の読み出しデータの先頭の論理アドレスに書き換え、前記転送中識別子に対応する前記データ長を未転送の読み出しデータのデータ長に書き換える
請求項2に記載の記憶装置。
【請求項4】
前記テーブルは、前記識別子毎に対応する読み出しが完了したか否かを示すフラグを保持する
請求項1乃至3のいずれか1項に記載の記憶装置。
【請求項5】
前記識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合とは、当該識別子に対応する前記フラグが読み出し未完了になっている場合である
請求項4に記載の記憶装置。
【請求項6】
前記テーブル保持部は、前記識別子に対応する前記読み出しデータの前記イニシエータへの転送が完了した場合には、前記テーブルから当該識別子及び当該識別子に対応するデータを削除する
請求項1乃至3のいずれか1項に記載の記憶装置。
【請求項7】
前記テーブルは、複数のイニシエータからのリードコマンドを識別可能なコマンド情報を前記識別子ごとにさらに保持する
請求項1乃至6のいずれか1項に記載の記憶装置。
【請求項8】
前記データのデータ長に比例した個数はクラスタ数である
請求項1乃至7のいずれか1項に記載の記憶装置。
【請求項9】
リードコマンドに基づいて、当該リードコマンドの識別が可能な識別子、当該識別子に対応する読み出しデータの論理アドレス、および当該識別子に対応する読み出しデータ長を保持するテーブルを管理するテーブル保持部と、
前記識別子ごとの前記論理アドレスに対応する物理アドレスおよび前記データ長に基づいて不揮発性メモリから受信したデータを前記識別子と共に保持するリードバッファと、
前記リードバッファに、同一の識別子について前記論理アドレスのデータが受信された場合に、当該データのデータ長に比例した個数の当該識別子を受け付ける識別子キューと、
前記識別子キューの先頭の識別子から順に、当該識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合に、前記リードバッファに受信されている当該識別子に対応する前記データを外部に転送する転送部と、
を具備するコントローラ。
【請求項10】
不揮発性メモリと、メモリ制御部と、を備えた記憶装置のリードコマンド実行方法であって、
リードコマンドに基づいて、当該リードコマンドの識別が可能な識別子、当該識別子に対応する読み出しデータの論理アドレス、および当該識別子に対応する読み出しデータ長をテーブルに保持する工程と、
前記識別子ごとの前記論理アドレスに対応する前記不揮発性メモリの物理アドレスからリードバッファにデータを読み出す工程と、
前記リードバッファに、同一の識別子について前記論理アドレスのデータが受信され当該識別子が前記テーブルにおいて読み出しが未完了であるとして保持されている場合に、前記リードバッファに受信されている当該識別子に対応する当該データを外部に転送する工程と、
を具備するリードコマンド実行方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate