(57)【要約】【課題】バッファから不揮発性メモリの複数のバンクに同時にデータを書き込む場合に、効率的な書き込み制御を行うこと。【解決手段】実施形態によれば、記憶装置は、ホストから送信されたデータを順にバッファ内の複数のバッファ領域に書き込む第１の書き込み制御手段と、不揮発性メモリ内の複数のバンクにそれぞれ対応する複数のバンク書き込み手段を有する第２の書き込み制御手段とを具備し、複数のバンク書き込み手段の内の一つのバンク書き込み手段が複数のバッファ領域の内の一つのバッファ領域に書き込まれているデータを読み出した場合、第１の書き込み制御手段は、データが読み出されたバッファ領域にホストから送信されたデータを書き込み、各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に複数のバッファの内の第１のバッファ領域からデータを読み出し、読み出されたデータを対応するバンクに書き込む。【選択図】    図３
2014026388.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータバッファ領域が設定されるバッファメモリと、
ホストから送信されたデータを順に前記複数のデータバッファ領域に書き込む第１の書き込み制御手段と、
複数のバンクが設定される不揮発性メモリと、
前記複数のバンクにそれぞれ対応する複数のバンク書き込み手段を有し、各前記バンク書き込み手段は前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出し、読み出したデータを前記不揮発性メモリの対応するバンクに書き込む第２の書き込み制御手段と
を具備し、
前記複数のバンク書き込み手段の内の一つのバンク書き込み手段が前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれている第１のデータを読み出した場合、前記第１の書き込み制御手段は、前記第１のデータが読み出されたデータバッファ領域に前記ホストから送信されたデータを書き込み、
各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に、前記複数のバッファメモリの内の第１のデータバッファ領域から第２のデータを読み出し、前記第２のデータを対応するバンクに書き込む
記憶装置。
【請求項２】
前記バッファメモリに第１の数の複数の第１のホスト側インデックス番号が格納され、前記第１の数は前記複数のバンクの数である第２の数の倍であり、
前記バッファメモリに前記第１の数の複数の第１の不揮発性メモリ側インデックス番号が格納され、前記複数の第１の不揮発性メモリ側インデックス番号は前記第２の数の複数のブロックに分割して格納され、各ブロックに格納されている複数の第２の不揮発性メモリ側インデックス番号は前記複数のバンク書き込み手段のそれぞれに対応し、
前記バッファメモリに、前記第１の数の複数のバッファポインタ格納領域が設定され、前記複数のバッファポインタ格納領域の内の一部のバッファポインタ格納領域には、前記複数のデータバッファ領域の内の一つのデータバッファ領域を指し示すデータバッファ番号が格納され、各第１のホスト側インデックス番号および各第１の不揮発性メモリ側インデックス番号は、それぞれバッファポインタ格納領域に関連付けられ、
前記第１の書き込み制御手段は、前記複数の第１のホスト側インデックス番号の内の第２のホスト側インデックス番号を指し示すための第１のライトポインタが格納される第１の記憶部を有し、
前記第１の書き込み制御手段は、前記第１のライトポインタに基づいて、前記第２のホスト側インデックス番号に関連付けられているバッファポインタ格納領域に格納されているデータバッファ番号が指し示すデータバッファ領域に第３のデータを書き込み、前記第３のデータを書き込んだ後に、前記第１のライトポインタの値を前記第２のホスト側インデックス番号の次のホスト側インデックス番号を示す値にし、
前記第２の書き込み制御手段は、前記第２のホスト側インデックス番号を指し示すための第１の登録ポインタが格納される第２の記憶部を有し、
各バンク書き込み手段は、前記複数のブロックの内の第１のブロック内の対応する第３の不揮発性メモリ側インデックス番号を指し示すための第１のリードポインタが格納される第３の記憶部を有し、
各バンク書き込み手段は、前記第１のリードポインタによって指し示される第３の不揮発性メモリ側インデックス番号が指し示す第１のバッファポインタ格納領域に格納されているデータバッファ番号が指し示すデータバッファ領域から第４のデータを読み込み、前記第４のデータを対応するバンクに書き込み、前記第４のデータが格納されていたデータバッファ領域に対応するデータバッファ番号を前記第１のバッファポインタ格納領域に格納し、前記第１の登録ポインタの値を前記第２のホスト側インデックス番号の次のホスト側インデックス番号を指し示す値にし、前記第１のバッファポインタ格納領域を空きにし、前記第１のリードポインタの値を前記第１のブロックの次のブロック内の対応する不揮発性メモリ側インデックス番号を指し示す値にする
請求項１に記載の記憶装置。
【請求項３】
各バッファポインタ格納領域には、フリーポインタ・ポインタ格納領域がそれぞれ関連付けられ、各フリーポインタ・ポインタ格納領域にはフリーポインタ・ポインタを格納することが可能であり、前記フリーポインタ・ポインタはフリーポインタ格納領域を指し示し、前記フリーポインタ格納領域には、データバッファ番号を格納することが可能であり、
各バンク書き込み手段は、前記バッファポインタ格納領域にデータバッファ番号が格納されている場合、前記バッファポインタ格納領域に関連付けられている前記フリーポインタ・ポインタ格納領域に前記フリーポインタ・ポインタを格納し、
前記第１の書き込み制御手段は、前記第１のライトポインタが指し示すバッファポインタ格納領域に関連付けられているフリーポインタ・ポインタ格納領域に前記フリーポインタ・ポインタが格納されている場合、前記フリーポインタ・ポインタが指し示すフリーポインタ格納領域に格納されているデータバッファ番号が指し示すデータバッファ領域に第３のデータを書き込み、
各バンク書き込み手段は、前記バッファポインタ格納領域に関連付けられているフリーポインタ・ポインタ格納領域に前記フリーポインタ・ポインタが格納されている場合に、前記第１のフリーポインタ格納領域に格納されているデータバッファ番号を前記第１のバッファポインタ格納領域に格納し、前記フリーポインタ格納領域を空きにする
請求項２に記載の記憶装置。
【請求項４】
ディスク記憶媒体と、
前記不揮発性メモリを前記ディスク記憶媒体のキャッシュとして利用するキャッシュ制御手段と
を更に具備する請求項１に記載の記憶装置。
【請求項５】
バッファメモリと、不揮発性メモリとが接続されるコントローラであって、
ホストから送信されたデータを順に前記バッファメモリに設定される複数のデータバッファ領域に書き込む第１の書き込み制御手段と、
前記不揮発性メモリに設定される複数のバンクにそれぞれ対応する複数のバンク書き込み手段を有し、各前記バンク書き込み手段は前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出し、読み出したデータを前記不揮発性メモリの対応するバンクに書き込む第２の書き込み制御手段と
を具備し、
前記複数のバンク書き込み手段の内の一つのバンク書き込み手段が前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出した場合、前記第１の書き込み制御手段は、前記データが読み出されたデータバッファ領域に前記ホストから送信されたデータを書き込み、
各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に前記複数のバッファメモリの内の第１のデータバッファ領域からデータを読み出し、前記読み出されたデータを対応するバンクに書き込む
コントローラ。
【請求項６】
バッファメモリと、不揮発性メモリとが接続される記憶装置のデータ書き込み方法であって、
第１の書き込み制御手段によってホストから送信されたデータを順に前記バッファメモリに設定される複数のデータバッファ領域に書き込み、
第２の書き込み制御手段に設けられた複数のバンク書き込み手段によって前記複数のデータバッファ領域に格納されているデータを前記不揮発性メモリに設定される複数のバンクにそれぞれ書き込み、
前記複数のバンク書き込み手段の内の一つのバンク書き込み手段が前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出した場合、前記第１の書き込み制御手段によって前記データが読み出されたデータバッファ領域に前記ホストから送信されたデータを書き込み、
各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に前記複数のバッファメモリの内の第１のデータバッファ領域からデータを読み出し、前記読み出されたデータを対応するバンクに書き込む
データ書き込み制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、バッファメモリを用いて不揮発性メモリにデータを書き込む記憶装置、コントローラ、および書き込み制御方法に関する。
【背景技術】
【０００２】
ＤＲＡＭでは、データの転送速度を高速にするために、複数のバンクに同時にアクセスするメモリインターリーブが行われている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−１４４４７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一方、不揮発性メモリでは、バンク毎にデータの書き込み処理時間が大きく異なる場合がある。そのため、バッファメモリから不揮発性メモリの複数のバンクへのデータの転送で、データの書き込みが遅いバンクがあるために、データの書き込みが早いバンクへの書き込み処理ができず、効率的な書き込み制御ができない事がある。
【０００５】
本発明の目的は、バッファメモリから不揮発性メモリの複数のバンクに並列的にデータを書き込む場合に、効率的な書き込み制御を行うことが可能な記憶装置、半導体チップ、および書き込み制御方法を提供することにある。
【課題を解決するための手段】
【０００６】
実施形態によれば、複数のデータバッファ領域が設定されるバッファメモリと、ホストから送信されたデータを順に前記複数のデータバッファ領域に書き込む第１の書き込み制御手段と、複数のバンクが設定される不揮発性メモリと、前記複数のバンクにそれぞれ対応する複数のバンク書き込み手段を有し、各前記バンク書き込み手段は前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出し、読み出したデータを前記不揮発性メモリの対応するバンクに書き込む第２の書き込み制御手段と具備し、前記複数のバンク書き込み手段の内の一つのバンク書き込み手段が前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれている第１のデータを読み出した場合、前記第１の書き込み制御手段は、前記第１のデータが読み出されたデータバッファ領域に前記ホストから送信されたデータを書き込み、各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に、前記複数のバッファメモリの内の第１のデータバッファ領域から第２のデータを読み出し、前記第２のデータを対応するバンクに書き込む。
【図面の簡単な説明】
【０００７】
【図１】実施形態の記憶装置の構成の一例を示すブロック図。
【図２】実施形態の制御部の構成の一例を示すブロック図。
【図３】実施形態のホスト側バッファコントローラ、およびフラッシュメモリ側バッファコントローラの構成の一例を示す図。
【図４】実施形態のホスト側バッファコントローラの動作の一例を説明するためのフローチャート。
【図５】実施形態のフラッシュメモリ側バッファコントローラの動作の一例を説明するための示すフローチャート。
【図６】書き込みの初期状態におけるホスト側バッファコントローラ、フラッシュメモリ側バッファコントローラ、バッファメモリ、およびＮＡＮＤフラッシュメモリの一例を示す図。
【図７】バンク１の先頭ブロックへのデータＤ１の書き込みが終わった後の処理の手順を説明するための図。
【図８】バンク１の先頭ブロックへのデータＤ１の書き込みが終わった後の処理の手順を説明するための図。
【図９】バンク１の先頭ブロックへのデータＤ１の書き込みが終わった後の処理の手順を説明するための図。
【図１０】バンク１の先頭ブロックへのデータＤ１の書き込みが終わった後の処理の手順を説明するための図。
【図１１】バンク３の３番目のブロックへのデータＤ１１の書き込みが終了した状態を示す図。
【図１２】バンク３の３番目のブロックへのデータＤ１１の書き込みが終わった後の処理の手順を説明するための図。
【図１３】バンク３の３番目のブロックへのデータＤ１１の書き込みが終わった後の処理の手順を説明するための図。
【図１４】バンク３の３番目のブロックへのデータＤ１１の書き込みが終わった後の処理の手順を説明するための図。
【図１５】バンク３の３番目のブロックへのデータＤ１１の書き込みが終わった後の処理の手順を説明するための図。
【図１６】バンク３の３番目のブロックへのデータＤ１１の書き込みが終わった後の処理の手順を説明するための図。
【図１７】バンク２の３番目のブロックへのデータＤ１０の書き込みが終わった後の処理の手順を説明するための図。
【図１８】バンク２の３番目のブロックへのデータＤ１０の書き込みが終わった後の処理の手順を説明するための図。
【図１９】バンク２の３番目のブロックへのデータＤ１０の書き込みが終わった後の処理の手順を説明するための図。
【図２０】バンク２の３番目のブロックへのデータＤ１０の書き込みが終わった後の処理の手順を説明するための図。
【図２１】バンク２の３番目のブロックへのデータＤ１０の書き込みが終わった後の処理の手順を説明するための図。
【図２２】バンク１の４番目のブロックへのデータＤ１３の書き込みが終わった後の処理の手順を説明するための図。
【図２３】バンク１の４番目のブロックへのデータＤ１３の書き込みが終わった後の処理の手順を説明するための図。
【図２４】バンク１の４番目のブロックへのデータＤ１３の書き込みが終わった後の処理の手順を説明するための図。
【図２５】バンク１の４番目のブロックへのデータＤ１３の書き込みが終わった後の処理の手順を説明するための図。
【図２６】バンク１の４番目のブロックへのデータＤ１３の書き込みが終わった後の処理の手順を説明するための図。
【図２７】バンク０の１番目のブロックへのデータＤ０の書き込みが終わった後の処理の手順を説明するための図。
【図２８】バンク０の１番目のブロックへのデータＤ０の書き込みが終わった後の処理の手順を説明するための図。
【図２９】バンク０の１番目のブロックへのデータＤ０の書き込みが終わった後の処理の手順を説明するための図。
【図３０】バンク０の１番目のブロックへのデータＤ０の書き込みが終わった後の処理の手順を説明するための図。
【図３１】バンク０の１番目のブロックへのデータＤ０の書き込みが終わった後の処理の手順を説明するための図。
【図３２】バンク０の１番目のブロックへのデータＤ０の書き込みが終わった後の処理の手順を説明するための図。
【発明を実施するための形態】
【０００８】
以下、実施の形態について図面を参照して説明する。
【０００９】
記憶装置は、ハイブリッド−ハードディスクドライブ（Ｈ−ＨＤＤ：Hybrid Hard Disk Drive）として実現され得る。
【００１０】
図１は、記憶装置の構成を示すブロック図である。
【００１１】
この記憶装置は、例えば、ＡＴＡ（AT Attachment Controller）規格に準拠したストレージデバイス１２として実現されている。このストレージデバイス１２は、例えば、ハイブリッドハードディスクドライブ（ハイブリッドＨＤＤ）として機能する。ハイブリッドＨＤＤは、ハードディスク（ディスク記憶媒体）と、このディスク記憶媒体のキャッシュとして機能する不揮発性メモリとを含むディスクドライブである。不揮発性メモリには、例えばＮＡＮＤフラッシュメモリが用いられる。
【００１２】
このストレージデバイス１２は、サーバ、パーソナルコンピュータといった情報処理装置１の外部記憶装置として機能するドライブ装置である。情報処理装置１の情報処理装置本体内には、ホスト装置１１とストレージデバイス１２とが設けられる。ホスト装置１１は、情報処理装置１のコアユニットであり、各種プログラムを実行するＣＰＵ、およびメモリ等から構成される。ストレージデバイス１２は、シリアルＡＴＡのようなＡＴＡインタフェースを介してホスト装置１１に接続される。
【００１３】
ストレージデバイス１２は、制御部２０１、揮発性メモリ２０２、ＮＡＮＤフラッシュメモリ２０３、ハードディスクコントローラ（ＨＤＣ）２０５、ハードディスク２０６等を有している。制御部２０１は、ストレージデバイス１２内の各部を制御するマイクロプロセッサである。制御部２０１は、ＡＴＡインタフェース介してホスト装置１１との通信を実行するホストインタフェースであるＡＴＡコントローラを含む。ＨＤＣ２０５は、ハードディスク２０６を制御するコントローラである。
【００１４】
揮発性メモリ２０２は例えばＤＲＡＭから構成されている。
【００１５】
ハードディスク２０６はディスク記憶媒体である。具体的には、ハードディスク２０６は、ディスク記憶媒体２０７、スピンドルモータ（ＳＰＭ）２０８、ヘッド２０９、アクチュエータ２１０、ボイスコイルモータ（ＶＣＭ）２１１等を備える。ＳＰＭ２０８はディスク記憶媒体２０７を回転させ、アクチュエータ２１０及びＶＣＭ２１１はヘッド２０９をディスク記憶媒体２０７の半径方向に移動させるヘッド駆動機構である。
【００１６】
揮発性メモリ２０２はホスト装置１１からのライトデータまたはホスト装置１１に読み出すべきリードデータを一時的に格納するためのデータバッファとして機能する。以下では、揮発性メモリ２０２をバッファメモリ２０２と記すこともある。ＮＡＮＤフラッシュメモリ２０３は、ハードディスク（ディスク記憶媒体）２０６のキャッシュとして機能するキャッシュメモリ（不揮発性キャッシュメモリ）である。ＮＡＮＤフラッシュメモリ２０３は、ハードディスク２０６からリードされたデータを格納する。また、ＮＡＮＤフラッシュメモリ２０３は、ホスト装置１１に対して高速に転送すべき特定のデータのセットを恒常的に格納することもできる。すなわち、通常は、ソフトウェア（オペレーティングシステム内のカーネル、デバイスドライバ、アプリケーションプログラム、等）及びユーザデータの全てがハードディスク２０６にのみ格納されるが、本実施形態においては、それらソフトウェアの一部のコピー、またはハードディスク２０６に格納されたユーザデータの一部のコピー等を、ＮＡＮＤフラッシュメモリ２０３に、ホスト装置１１に対して高速にリードすべきデータとして恒常的に格納しておくことができる。ＮＡＮＤフラッシュメモリ２０３に恒常的に保持されるデータは、pinnedデータと称されることもある。
【００１７】
ＮＡＮＤフラッシュメモリ２０３にハードディスク２０６内のどのデータを格納すべきであるかは、ホスト装置１１が指定することができる。制御部２０１は、ホスト装置１１によって指定された各論理ブロックアドレス（ＬＢＡ）に対応するデータをハードディスク２０６からＮＡＮＤフラッシュメモリ２０３にロードする。ロードされたデータは、ＮＡＮＤフラッシュメモリ２０３上に恒常的に保持され得る。また、オペレーティングシステムのブートアップの開始から完了までのような所定の期間中にホスト装置１１から発行される各リードコマンドに応じてハードディスク２０６からリードされるデータを、ＮＡＮＤフラッシュメモリ２０３上にpinnedデータとして格納してもよい。
【００１８】
ＮＡＮＤフラッシュメモリ２０３はハードディスク２０６よりもデータの読み出し速度が速いので、ＮＡＮＤフラッシュメモリ２０３をハードディスク２０６のキャッシュとして機能させることにより、本ストレージデバイス１２のレスポンス性能を向上させることができる。
【００１９】
次に、図２を参照して、制御部２０１の構成を説明する。図２は制御部２０１の構成を示すブロック図である。
【００２０】
制御部２０１は、ＡＴＡコントローラ（ＡＴＡＣ）３０１、ホスト側バッファコントローラ３０２、フラッシュメモリ側バッファコントローラ（ＦＭ側バッファコントローラ）３０３、およびキャッシュ制御部３０４等を備えている。この制御部２０１のＡＴＡＣ３０１、ホスト側バッファコントローラ３０２、ＦＭ側バッファコントローラ３０３、およびキャッシュ制御部３０４等の各機能は一つの半導体チップ上に集積され、制御部２０１はＳｏＣ（System-on-a-Chip)によって実現されている。
【００２１】
ＡＴＡＣ３０１は、ＡＴＡインタフェース介してホスト装置１１との通信を実行するホストインタフェースである。ホスト側バッファコントローラ３０２は、例えばホストのライトアクセスデータをバッファメモリ２０２内に設定された複数のデータバッファ領域にシーケンシャルに格納する。ＦＭ側バッファコントローラ３０３は、バンク０制御部３０３０、バンク１制御部３０３１、バンク２制御部３０３２、およびバンク３制御部３０３３等を備えている。バンク０制御部３０３０、バンク１制御部３０３１、バンク２制御部３０３２、およびバンク３制御部３０３３は、ＮＡＮＤフラッシュメモリ２０３に設定された４つのバンクに対して並列にデータを書き込み、または４つのバンクから並列にデータを読み込む。
【００２２】
例えば、ホストからデータＤ０〜Ｄ２３を含むデータのライトアクセスがあった場合を説明する。バンク０制御部３０３０は、データＤ０、データＤ４、データＤ８、データＤ１２、データＤ１６、データＤ２０をバンク０に順に書き込む。バンク１制御部３０３１は、データＤ１、データＤ５、データＤ９、データＤ１３、データＤ１７、データＤ２１のデータをバンク１に順に書き込む。バンク２制御部３０３２は、データＤ２、データＤ６、データＤ１０、データＤ１４、データＤ１８、データＤ２２をバンク２に順に書き込む。バンク３制御部３０３３は、データＤ３、データＤ７、データＤ１１、データＤ１５、データＤ１９、データＤ２３をバンク３に順に書き込む。
【００２３】
キャッシュ制御部３０４は、ホスト装置１１からのメディアアクセスコマンド（例えば、データリードコマンド、データライトコマンド）によって指定されたデータがＮＡＮＤフラッシュメモリ２０３に格納されているか否かを判定し、この判定結果に応じて、ＮＡＮＤフラッシュメモリ２０３およびハードディスク２０６を選択的にアクセスする。
【００２４】
メディアアクセスコマンドに含まれるＬＢＡに対応するデータがＮＡＮＤフラッシュメモリ２０３に存在する場合（キャッシュヒット）、キャッシュ制御部３０４は、ＮＡＮＤフラッシュメモリ２０３に対するアクセス（リードアクセスまたはライトアクセス）を実行し、ハードディスク２０６に対するアクセスは実行しない。
【００２５】
一方、メディアアクセスコマンドに含まれるＬＢＡに対応するデータがＮＡＮＤフラッシュメモリ２０３に存在しない場合（キャッシュミス）、キャッシュ制御部３０４は、ハードディスク２０６に対するアクセスを実行する。メディアアクセスコマンドがリードコマンドであれば、ハードディスク２０６からデータがリードされる。リードデータはＮＡＮＤフラッシュメモリ２０３に格納されるとともに、ホスト装置１１に送出される。
【００２６】
また、キャッシュ制御部３０４は、ハードディスク２０６に格納されている所定のデータのセットを、ＮＡＮＤフラッシュメモリ２０３にpinnedデータとして格納する処理も実行する。例えば、キャッシュ制御部３０４は、ある特定のＬＢＡ範囲内に属するデータのセット、使用頻度の高いデータのセット、ブート期間中にハードディスク２０６からリードされたデータのセット等を、ＮＡＮＤフラッシュメモリ２０３にpinnedデータとして格納することができる。
【００２７】
図３はホスト側バッファコントローラ３０２、およびＦＭ側バッファコントローラ３０３の構成を示す図である。図３を参照してホスト側バッファコントローラ３０２、およびＦＭ側バッファコントローラ３０３の動作を説明する。
【００２８】
ホスト側バッファコントローラ３０２は、ライトポインタＰWを格納するための記憶部３０２Ａを備えている。ＦＭ側バッファコントローラ３０３は、データバッファ登録先頭ポインタＰTを格納するための記憶部３０３Ａを備えている。バンク０制御部３０３０は、リードポインタＰR0を格納するための記憶部３０３０Ａを備えている。バンク１制御部３０３１は、リードポインタＰR1を格納するための記憶部３０３１Ａを備えている。バンク２制御部３０３２は、リードポインタＰR2を格納するための記憶部３０３２Ａを備えている。バンク３制御部３０３３は、リードポインタＰR3を格納するための記憶部３０３３Ａを備えている。
【００２９】
バッファメモリ２０２には、ホスト側インデックス格納領域ＩｎｄｅｘHが設定されている。ホスト側インデックス格納領域ＩｎｄｅｘH内には、ホスト側インデックス番号ＮH0〜ＮH15が格納されている。
【００３０】
ホスト側インデックス格納領域ＩｎｄｅｘＨに格納されているホスト側インデックスの数は、バンク数の整数倍である。本実施形態の場合、ホスト側インデックス格納領域ＩｎｄｅｘＨにバンク数の４倍の１６個のホスト側インデックスが格納される。
【００３１】
バッファメモリ２０２には、フラッシュメモリ側インデックス格納領域ＩｎｄｅｘFMが設定されている。フラッシュメモリ側インデックス格納領域ＩｎｄｅｘFM内には、フラッシュメモリ（ＦＭ）側インデックス番号ＮB0-0、ＮB1-0、ＮB2-0、ＮB3-0、ＮB0-1、ＮB1-1、ＮB2-1、ＮB3-1、ＮB0-2、ＮB1-2、ＮB2-2、ＮB3-2、ＮB0-3、ＮB1-3、ＮB2-3、およびＮB3-3が格納されている。
【００３２】
ＦＭ側インデックス番号ＮB0-0、ＮB1-0、ＮB2-0、ＮB3-0、ＮB0-1、ＮB1-1、ＮB2-1、ＮB3-1、ＮB0-2、ＮB1-2、ＮB2-2、ＮB3-2、ＮB0-3、ＮB1-3、ＮB2-3、およびＮB3-3は、ブロックＢ０、Ｂ１、Ｂ２、Ｂ３に分割して格納されている。
【００３３】
各ブロックには、バンク０制御部３０３０に対応するＦＭ側インデックス番号ＮB0-M（Ｍ＝０，１，２，３）、バンク１制御部３０３１に対応するＦＭ側インデックス番号ＮB1-M（Ｍ＝０，１，２，３）、バンク２制御部３０３２に対応するＦＭ側インデックス番号ＮB2-M（Ｍ＝０，１，２，３）、および、バンク３制御部３０３３に対応するＦＭ側インデックス番号ＮB3-M（Ｍ＝０，１，２，３）が格納されている。
【００３４】
ライトポインタＰW＝Ｈ０およびデータバッファ登録先頭ポインタＰT＝Ｈ０は、ホスト側インデックス番号ＮH0を指し示す。ライトポインタＰW＝Ｈ１およびデータバッファ登録先頭ポインタＰT＝Ｈ１は、ホスト側インデックス番号ＮH1を指し示す。ライトポインタＰW＝Ｈ２およびデータバッファ登録先頭ポインタＰT＝Ｈ２は、ホスト側インデックス番号ＮH2を指し示す。ライトポインタＰW＝Ｈ３およびデータバッファ登録先頭ポインタＰT＝Ｈ３は、ホスト側インデックス番号ＮH3を指し示す。
【００３５】
ライトポインタＰW＝Ｈ４およびデータバッファ登録先頭ポインタＰT＝Ｈ４は、ホスト側インデックス番号ＮH4を指し示す。ライトポインタＰW＝Ｈ５およびデータバッファ登録先頭ポインタＰT＝Ｈ５は、ホスト側インデックス番号ＮH5を指し示す。ライトポインタＰW＝Ｈ６およびデータバッファ登録先頭ポインタＰT＝Ｈ６は、ホスト側インデックス番号ＮH6を指し示す。ライトポインタＰW＝Ｈ７およびデータバッファ登録先頭ポインタＰT＝Ｈ７は、ホスト側インデックス番号ＮH7を指し示す。
【００３６】
ライトポインタＰW＝Ｈ８およびデータバッファ登録先頭ポインタＰT＝Ｈ８は、ホスト側インデックス番号ＮH8を指し示す。ライトポインタＰW＝Ｈ９およびデータバッファ登録先頭ポインタＰT＝Ｈ９は、ホスト側インデックス番号ＮH9を指し示す。ライトポインタＰW＝Ｈ１０およびデータバッファ登録先頭ポインタＰT＝Ｈ１０は、ホスト側インデックス番号ＮH10を指し示す。ライトポインタＰW＝Ｈ１１およびデータバッファ登録先頭ポインタＰT＝Ｈ１１は、ホスト側インデックス番号ＮH11を指し示す。
【００３７】
ライトポインタＰW＝Ｈ１２およびデータバッファ登録先頭ポインタＰT＝Ｈ１２は、ホスト側インデックス番号ＮH12を指し示す。ライトポインタＰW＝Ｈ１３およびデータバッファ登録先頭ポインタＰT＝Ｈ１３は、ホスト側インデックス番号ＮH13を指し示す。ライトポインタＰW＝Ｈ１４およびデータバッファ登録先頭ポインタＰT＝Ｈ１４は、ホスト側インデックス番号ＮH14を指し示す。ライトポインタＰW＝Ｈ１５およびデータバッファ登録先頭ポインタＰT＝Ｈ１５は、ホスト側インデックス番号ＮH15を指し示す。
【００３８】
リードポインタＰR0＝Ｂ０−０は、フラッシュメモリ側インデックス番号ＮB0-0を指し示す。リードポインタＰR0＝Ｂ０−１は、フラッシュメモリ側インデックス番号ＮB0-1を指し示す。リードポインタＰR0＝Ｂ０−２は、フラッシュメモリ側インデックス番号ＮB0-2を指し示す。リードポインタＰR0＝Ｂ０−３は、フラッシュメモリ側インデックス番号ＮB0-3を指し示す。
【００３９】
リードポインタＰR1＝Ｂ１−０は、フラッシュメモリ側インデックス番号ＮB1-0を指し示す。リードポインタＰR1＝Ｂ１−１は、フラッシュメモリ側インデックス番号ＮB1-1を指し示す。リードポインタＰR1＝Ｂ１−２は、フラッシュメモリ側インデックス番号ＮB1-2を指し示す。リードポインタＰR1＝Ｂ１−３は、フラッシュメモリ側インデックス番号ＮB1-3を指し示す。
【００４０】
リードポインタＰR2＝Ｂ２−０は、フラッシュメモリ側インデックス番号ＮB2-0を指し示す。リードポインタＰR2＝Ｂ２−１は、フラッシュメモリ側インデックス番号ＮB2-1を指し示す。リードポインタＰR2＝Ｂ２−２は、フラッシュメモリ側インデックス番号ＮB2-2を指し示す。リードポインタＰR2＝Ｂ２−３は、フラッシュメモリ側インデックス番号ＮB2-3を指し示す。
【００４１】
リードポインタＰR3＝Ｂ３−０は、フラッシュメモリ側インデックス番号ＮB3-0を指し示す。リードポインタＰR3＝Ｂ３−１は、フラッシュメモリ側インデックス番号ＮB3-1を指し示す。リードポインタＰR3＝Ｂ３−２は、フラッシュメモリ側インデックス番号ＮB3-2を指し示す。リードポインタＰR3＝Ｂ３−３は、フラッシュメモリ側インデックス番号ＮB3-3を指し示す。
【００４２】
バッファメモリ２０２には、バッファポインタ領域ＰBが設定されている。バッファポインタ領域ＰB内には、バッファポインタ格納領域ＰB（０）〜ＰB（１５）が設定されている。バッファポインタ格納領域ＰB（０）〜ＰB（１５）の一部には、データバッファ領域に対応するデータバッファ番号を格納することができる。
【００４３】
バッファメモリ２０２には、フリーポインタ・ポインタ領域ＰFPが設定されている。フリーポインタ・ポインタ領域ＰFP内には、フリーポインタ・ポインタ格納領域ＰFP（０）〜ＰFP（１５）が設定されている。バッファメモリ２０２には、フリーポインタ領域ＰFが設定されている。フリーポインタ領域ＰF内には、フリーポインタ格納領域ＰF（０）、ＰF（１）が設定されている。フリーポインタ・ポインタ格納領域ＰFP（０）〜ＰFP（１５）には、フリーポインタ格納領域を指し示すフリーポインタ番号を格納することが可能である。フリーポインタ格納領域には、データバッファ領域に対応するデータバッファ番号を格納することができる。
【００４４】
ホスト側インデックス番号ＮH0およびＦＭ側インデックス番号ＮB0-0が、バッファポインタ格納領域ＰB（０）に関連付けられている。バッファポインタ格納領域ＰB（０）は、フリーポインタ・ポインタ格納領域ＰFP（０）に関連付けられている。ホスト側インデックス番号ＮH1およびＦＭ側インデックス番号ＮB1-0が、バッファポインタ格納領域ＰB（１）に関連付けられている。バッファポインタ格納領域ＰB（１）は、フリーポインタ・ポインタ格納領域ＰFP（１）に関連付けられている。ホスト側インデックス番号ＮH2およびＦＭ側インデックス番号ＮB2-0が、バッファポインタ格納領域ＰB（２）に関連付けられている。バッファポインタ格納領域ＰB（２）は、フリーポインタ・ポインタ格納領域ＰFP（２）に関連付けられている。ホスト側インデックス番号ＮH3およびＦＭ側インデックス番号ＮB3-0が、バッファポインタ格納領域ＰB（３）に関連付けられている。バッファポインタ格納領域ＰB（３）は、フリーポインタ・ポインタ格納領域ＰFP（３）に関連付けられている。
【００４５】
ホスト側インデックス番号ＮH4およびＦＭ側インデックス番号ＮB0-1が、バッファポインタ格納領域ＰB（４）に関連付けられている。バッファポインタ格納領域ＰB（４）は、フリーポインタ・ポインタ格納領域ＰFP（４）に関連付けられている。ホスト側インデックス番号ＮH5およびＦＭ側インデックス番号ＮB1-1が、バッファポインタ格納領域ＰB（５）に関連付けられている。バッファポインタ格納領域ＰB（５）は、フリーポインタ・ポインタ格納領域ＰFP（５）に関連付けられている。ホスト側インデックス番号ＮH6およびＦＭ側インデックス番号ＮB2-1が、バッファポインタ格納領域ＰB（６）に関連付けられている。バッファポインタ格納領域ＰB（６）は、フリーポインタ・ポインタ格納領域ＰFP（６）に関連付けられている。ホスト側インデックス番号ＮH7およびＦＭ側インデックス番号ＮB3-1が、バッファポインタ格納領域ＰB（７）に関連付けられている。バッファポインタ格納領域ＰB（７）は、フリーポインタ・ポインタ格納領域ＰFP（７）に関連付けられている。
【００４６】
ホスト側インデックス番号ＮH8およびＦＭ側インデックス番号ＮB0-2が、バッファポインタ格納領域ＰB（８）に関連付けられている。バッファポインタ格納領域ＰB（８）は、フリーポインタ・ポインタ格納領域ＰFP（８）に関連付けられている。ホスト側インデックス番号ＮH9およびＦＭ側インデックス番号ＮB1-2が、バッファポインタ格納領域ＰB（９）に関連付けられている。バッファポインタ格納領域ＰB（９）は、フリーポインタ・ポインタ格納領域ＰFP（９）に関連付けられている。ホスト側インデックス番号ＮH10およびＦＭ側インデックス番号ＮB2-2が、バッファポインタ格納領域ＰB（１０）に関連付けられている。バッファポインタ格納領域ＰB（１０）は、フリーポインタ・ポインタ格納領域ＰFP（１０）に関連付けられている。ホスト側インデックス番号ＮH11およびＦＭ側インデックス番号ＮB3-2が、バッファポインタ格納領域ＰB（１１）に関連付けられている。バッファポインタ格納領域ＰB（１１）は、フリーポインタ・ポインタ格納領域ＰFP（１１）に関連付けられている。
【００４７】
ホスト側インデックス番号ＮH12およびＦＭ側インデックス番号ＮB0-3が、バッファポインタ格納領域ＰB（１２）に関連付けられている。バッファポインタ格納領域ＰB（１２）は、フリーポインタ・ポインタ格納領域ＰFP（１２）に関連付けられている。ホスト側インデックス番号ＮH13およびＦＭ側インデックス番号ＮB1-3が、バッファポインタ格納領域ＰB（１３）に関連付けられている。バッファポインタ格納領域ＰB（１３）は、フリーポインタ・ポインタ格納領域ＰFP（１３）に関連付けられている。ホスト側インデックス番号ＮH14およびＦＭ側インデックス番号ＮB2-3が、バッファポインタ格納領域ＰB（１４）に関連付けられている。バッファポインタ格納領域ＰB（１４）は、フリーポインタ・ポインタ格納領域ＰFP（１４）に関連付けられている。ホスト側インデックス番号ＮH15およびＦＭ側インデックス番号ＮB3-3が、バッファポインタ格納領域ＰB（１５）に関連付けられている。バッファポインタ格納領域ＰB（１５）は、フリーポインタ・ポインタ格納領域ＰFP（１５）に関連付けられている。
【００４８】
ホスト側バッファコントローラ３０２は、ライトポインタＰWが指し示すホスト側インデックス番号に関連付けられているバッファポインタ格納領域ＰB（Ａ）（Ａ＝０〜１５）を参照し、そのバッファポインタ格納領域ＰB（Ａ）に格納されているデータバッファ番号を得る。ホスト側バッファコントローラ３０２は、得られたデータバッファ番号に対応するデータバッファ領域にライトデータを書き込む。
【００４９】
ＦＭ側バッファコントローラ３０３内の各バンクＮ制御部（Ｎ＝０，１，２，３）は、リードポインタＰRが指し示すＦＭ側インデックス番号ＮBN-M（Ｍ＝０，１，２，３）に関連付けられているバッファポインタ格納領域ＰB（Ｃ）（Ｃ＝０〜１５）を参照し、バッファポインタ格納領域ＰB（Ｃ）に格納されているデータバッファ番号を読み出す。各バンクＮ制御部（Ｎ＝０，１，２，３）は、データバッファ番号に対応するデータバッファ領域からデータを読み出し、ＮＡＮＤフラッシュメモリ内の対応するバンクに書き込む。書き込みが終了したら、各バンクＮ制御部（Ｎ＝０，１，２，３）は、使い終わったデータバッファを次の転送に使用するため、バッファポインタへのデータバッファ登録先頭ポインタＰTが示す場所に、データバッファ番号を登録する。同時に、使用していたバッファポインタを“空き”に変更する。
【００５０】
図４は、書込み処理時のホスト側バッファコントローラ３０２の動作を説明するためのフローチャートである。  
ホスト側バッファコントローラ３０２は、ライトポインタに対応するバッファポインタ格納領域に関連付けられているフリーポインタ・ポインタ格納領域にフリーポインタ・ポインタが格納されているかを判定する（ステップＢ１１）。格納されていないと判定した場合、ホスト側バッファコントローラ３０２は、ライトポインタに対応するバッファポインタ格納領域に格納されているデータバッファ番号を取得する（ステップＢ１２）。格納されていると判定した場合、ホスト側バッファコントローラ３０２は、フリーポインタ・ポインタが指し示すフリーポインタ格納領域に格納されているデータバッファ番号を取得する（ステップＢ１３）。ホスト側バッファコントローラ３０２は、取得したデータバッファ番号に対応するデータバッファ領域にライトデータを格納する（ステップＢ１４）。ホスト側バッファコントローラ３０２は、ライトポインタの値を１インクリメントし、ライトポインタが次のホスト側インデックス番号を指し示すようにする。なお、ホスト側バッファコントローラ３０２は、ライトポインタが１５であった場合、ライトポインタを０にする（ステップＢ１５）。ホスト側バッファコントローラ３０２は、データバッファ登録先頭ポインタの値がライトポインタの値より先を示しているかを判定する（ステップＢ１６）。先を示していないと判定した場合（ステップＢ１６のＮｏ）、ホスト側バッファコントローラ３０２は、定期的にステップＢ１７の処理を行う。先を示していると判定した場合（ステップＢ１６のＹｅｓ）、ホスト側バッファコントローラ３０２は、ステップＢ１１からの処理を順次実行する。
【００５１】
図５は、書込み処理時のバンクＮ制御部の動作を示すフローチャートである。  
バンクＮ制御部３０３Ｎは、リードポインタに対応するバッファポインタ格納領域に格納されているデータバッファ番号を取得する（ステップＢ２１）。バンクＮ制御部３０３Ｎは、取得したデータバッファ番号に対応するデータバッファ領域からデータを取得し、取得したデータをＮＡＮＤフラッシュメモリ２０３の対応するバンクＮに書き込む（ステップＢ２２）。バンクＮ制御部３０３Ｎは、データバッファ登録先頭ポインタに対応するバッファポインタ格納領域が空きになっているかを判定する（ステップＢ２３）。空きになっていると判定した場合（ステップＢ２３のＹｅｓ）、バンクＮ制御部３０３Ｎは、ステップＢ２２において取得されたデータが格納されていたデータバッファ領域に対応するデータバッファ番号をバッファポインタ格納領域に書き込む（ステップＢ２４）。空きになっていないと判定した場合（ステップＢ２３のＮｏ）、バンクＮ制御部３０３Ｎは、まだ空いていないバッファポインタ格納領域にフリーポインタ・ポインタを書き込み、ステップＢ２２において取得されたデータが格納されていたデータバッファ領域に対応するデータバッファ番号をフリーポインタ格納領域に書き込む（ステップＢ２５）。バンクＮ制御部３０３Ｎは、先頭ポインタを１インクリメントする（ステップＢ２６）。バンクＮ制御部３０３Ｎは、使用していたバッファポインタ格納領域にフリーポインタ・ポインタが格納されているかを判定する（ステップＢ２７）。格納されてないと判定した場合（ステップＢ２７のＮｏ）、バンクＮ制御部３０３Ｎは、使用していたバッファポインタ格納領域を空きにする（ステップＢ２８）。格納されていると判定した場合（ステップＢ２７のＹｅｓ）、バンクＮ制御部３０３Ｎは、フリーポインタ格納領域に格納されているデータバッファ番号を使用していたバッファポインタ格納領域に移動し、フリーポインタ格納領域を空きにする（ステップＢ２９）。バンクＮ制御部３０３Ｎは、フリーポインタ・ポインタ格納領域を空きにする。バンクＮ制御部３０３Ｎは、リードポインタの値をインクリメントすることによって、新たなリードポインタの値が次のブロックの対応するＦＭ側インデックスを指し示すようにする（ステップＢ３０）。ここで、リードポインタの値をインクリメントする事について説明する。バンクＮ制御部（Ｎ＝０，１，２，３）は、ＢＸ−Ｙ（Ｙ＝０，１，２，３）のＹの値を＋１インクリメントする。なお、Ｙの値が３の場合、バンクＸ制御部（Ｘ＝０，１，２，３）は、Ｙの値を０にする。
【００５２】
次に、実際の書き込みの手順を説明する。  
図６は、書き込みの初期状態におけるホスト側バッファコントローラ３０２、フラッシュメモリ側バッファコントローラ３０３、バッファメモリ２０２、およびＮＡＮＤフラッシュメモリ２０３を示す図である。
【００５３】
ライトポインタＰWは、ホスト側インデックス番号ＮH8を指し示している。データバッファ登録先頭ポインタＰT（Ｈ８）は、ホスト側インデックス番号ＮH8を指し示している。
【００５４】
リードポインタＰR0は、ＦＭ側インデックス番号ＮB0-0を指し示している。リードポインタＰR1は、ＦＭ側インデックス番号ＮB1-0を指し示している。リードポインタＰR2は、ＦＭ側インデックス番号ＮB2-0を指し示している。リードポインタＰR3は、ＦＭ側インデックス番号ＮB3-0を指し示している。
【００５５】
バッファポインタ格納領域ＰB（０）にデータバッファ番号ＮDB0が格納されている。バッファポインタ格納領域ＰB（１）にデータバッファ番号ＮDB1が格納されている。バッファポインタ格納領域ＰB（２）にデータバッファ番号ＮDB2が格納されている。バッファポインタ格納領域ＰB（３）にデータバッファ番号ＮDB3が格納されている。バッファポインタ格納領域ＰB（４）にデータバッファ番号ＮDB4が格納されている。バッファポインタ格納領域ＰB（５）にデータバッファ番号ＮDB5が格納されている。バッファポインタ格納領域ＰB（６）にデータバッファ番号ＮDB6が格納されている。バッファポインタ格納領域ＰB（７）にデータバッファ番号ＮDB7が格納されている。バッファポインタ格納領域ＰB（８）〜ＰB（１５）は、空きである。  
フリーポインタ・ポインタ格納領域ＰFP（０）〜ＰFP（１５）は空きである。  
フリーポインタ格納領域ＰF（０）およびフリーポインタＰF（１）は空きである。  
データバッファ領域ＤＢ０にデータＤ０が格納されている。データバッファ領域ＤＢ１にデータＤ１が格納されている。データバッファ領域ＤＢ２にデータＤ２が格納されている。データバッファ領域ＤＢ３にデータＤ３が格納されている。データバッファ領域ＤＢ４にデータＤ４が格納されている。データバッファ領域ＤＢ５にデータＤ５が格納されている。データバッファ領域ＤＢ６にデータＤ６が格納されている。データバッファ領域ＤＢ７にデータＤ７が格納されている。
【００５６】
バンク０制御部３０３０が、データバッファ領域ＤＢ０からデータＤ０を読み出し、読み出したデータＤ０をＮＡＮＤフラッシュメモリ２０３のバンク０に書き込んでいる。バンク１制御部３０３１が、データバッファ領域ＤＢ１からデータＤ１を読み出し、読み出したデータＤ１をＮＡＮＤフラッシュメモリ２０３のバンク１に書き込んでいる。
【００５７】
バンク２制御部３０３２が、データバッファ領域ＤＢ２からデータＤ２を読み出し、読み出したデータＤ２をＮＡＮＤフラッシュメモリ２０３のバンク２に書き込んでいる。バンク３制御部３０３３が、データバッファ領域ＤＢ３からデータＤ３を読み出し、読み出したデータＤ３をＮＡＮＤフラッシュメモリ２０３のバンク３に書き込んでいる。
【００５８】
図７〜図１０は、バンク１の先頭ブロックへのデータＤ１の書き込みが終わった後の処理の手順を説明するための図である。  
バンク１制御部３０３１は、ＦＭ側バッファコントローラ３０３の記憶部３０３Ａに格納されているデータバッファ登録先頭ポインタＰT（Ｈ８）が指し示すホスト側インデックス番号ＮH8に関連付けられているバッファポインタ格納領域ＰB（８）が空きであるかを判定する。
【００５９】
バッファポインタ格納領域ＰB（８）が空なので、図７に示すように、バンク１制御部３０３１は、ホスト側インデックス番号ＮH8に関連付けられているバッファポインタ格納領域ＰB（８）に、リードデータＤ１が格納されていたデータバッファ領域ＤＢ１を示すデータバッファ番号ＮDB1を格納する。
【００６０】
バンク１制御部３０３１は、使用していたバッファポインタ格納領域ＰB（１）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（８）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されてないので、バンク１制御部は、使用していたバッファポインタ格納領域ＰB（１）を空きにする。
【００６１】
図８に示すように、バンク１制御部３０３１は、データバッファ登録先頭ポインタＰTの値を１インクリメントすることによって、データバッファ登録先頭ポインタＰTをＨ９にする。バンク１制御部３０３１は、リードポインタＰR1の値を１インクリメントし、リードポインタＰR1をＢ１−１にする。
【００６２】
バンク１制御部３０３１は、リードポインタＰR1の値であるＢ１−１が指し示すフラッシュメモリ側インデックス番号に関連付けられているバッファポインタ格納領域ＰB（５）からデータバッファ番号ＮDB5を読み出す。バンク１制御部３０３１は、データバッファ番号ＮDB5が示すデータバッファ領域ＤＢ２からデータを読み出す。バンク１制御部３０３１は、読み出したデータのバンク１の２番目のブロックに書き込みを始める。
【００６３】
ホスト側バッファコントローラ３０２は、ライトポインタＰW（Ｈ８）が指し示すホスト側インデックス番号ＮH8に関連付けられているバッファポインタ格納領域ＰB（８）に関連付けられているフリーポインタ・ポインタ格納領域ＰPF（８）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されていないので、ホスト側バッファコントローラ３０２は、ライトポインタＰW（Ｈ８）が示すホスト側インデックス番号ＮH8に関連付けられているバッファポインタ格納領域ＰB（８）内のデータバッファ番号ＮDB1を取得する。図９に示すように、ホスト側バッファコントローラ３０２は、データバッファ番号ＮDB1が示すデータバッファ領域ＤＢ１にデータＤ８を格納する。図１０に示すように、ホスト側バッファコントローラは、ライトポインタＰWの値をインクリメントし、ライトポインタＰWを９にする図。
【００６４】
ホスト側バッファコントローラ３０２は、データバッファ登録先頭ポインタＰTの値がライトポインタＰWの値より先を示しているかを判定する。データバッファ登録先頭ポインタＰTの値がライトポインタＰWの値より先を示していないので、ホスト側バッファコントローラ３０２は、定期的にデータバッファ登録先頭ポインタＰTの値がライトポインタＰWの値より先を示しているかを判定する。
【００６５】
続いて、バンク３の先頭ブロックへのデータＤ３、バンク２の先頭ブロックへのデータＤ２、バンク１の２番目のブロックへのデータＤ５、バンク３の２番目のブロックへのデータＤ７、バンク１の３番目のブロックへのデータＤ９、バンク２の２番目のブロックへのデータＤ６、バンク３の３番目のブロックへのデータＤ１１の順に書き込みが終了する。データＤ３、Ｄ２、Ｄ５、Ｄ７、Ｄ９、Ｄ６の書き込みが終わった後の処理の説明は省略する。
【００６６】
図１１は、バンク３の３番目のブロックへのデータＤ１１の書き込みが終了した状態を示す図である。図１１に示すようにライトポインタＰWはＨ１５である。データバッファ登録先頭ポインタＰTはＨ１５である。リードポインタＰROはＢ０−０である。リードポインタＰR1はＢ１−３である。リードポインタＰR2はＢ２−２である。リードポインタＰR3はＢ３−２である。
【００６７】
バッファポインタ格納領域ＰB（０）にデータバッファ番号ＮDB0が格納されている。バッファポインタ格納領域ＰB（４）にデータバッファ番号ＮDB4が格納されている。バッファポインタ格納領域ＰB（８）にデータバッファ番号ＮDB1が格納されている。バッファポインタ格納領域ＰB（１０）にデータバッファ番号ＮDB2が格納されている。バッファポインタ格納領域ＰB（１１）にデータバッファ番号ＮDB5が格納されている。バッファポインタ格納領域ＰB（１２）にデータバッファ番号ＮDB7が格納されている。バッファポインタ格納領域ＰB（１３）にデータバッファ番号ＮDB3が格納されている。バッファポインタ格納領域ＰB（１４）にデータバッファ番号ＮDB6が格納されている。
【００６８】
バッファポインタ格納領域ＰB（１）、バッファポインタ格納領域ＰB（２）、バッファポインタ格納領域ＰB（３）、バッファポインタ格納領域ＰB（５）、バッファポインタ格納領域ＰB（６）、バッファポインタ格納領域ＰB（７）、バッファポインタ格納領域ＰB（９）、およびバッファポインタ格納領域ＰB（１５）は空きである。
【００６９】
フリーポインタ・ポインタ格納領域ＰFP（０）〜ＰFP（１５）は空きである。フリーポインタ格納領域ＰF（０）〜ＰF（１）は空きである。
【００７０】
データバッファ領域ＤＢ０にデータＤ０が格納されている。データバッファ領域ＤＢ１にデータＤ８が格納されている。データバッファ領域ＤＢ２にデータＤ１０が格納されている。データバッファ領域ＤＢ３にデータＤ１３が格納されている。データバッファ領域ＤＢ４にデータＤ４が格納されている。データバッファ領域ＤＢ５にデータＤ１１が格納されている。データバッファ領域ＤＢ６にデータＤ１４が格納されている。データバッファ領域ＤＢ７にデータＤ１２が格納されている。
【００７１】
図１２〜図１６は、バンク３の３番目のブロックへのデータＤ１１の書き込みが終わった後の処理の手順を説明するための図である。
【００７２】
バンク３制御部３０３３は、ＦＭ側バッファコントローラ３０３の記憶部３０３Ａに格納されているデータバッファ登録先頭ポインタＰT（Ｈ１５）が指し示すホスト側インデックス番号ＮH15に関連付けられているバッファポインタ格納領域ＰB（１５）が空きであるかを判定する。バッファポインタ格納領域ＰB（１５）が空きなので、図１２に示すように、バンク３制御部３０３３は、ホスト側インデックス番号ＮH15に関連付けられているバッファポインタＰB（１５）に、リードデータＤ１１が格納されていたデータバッファ領域ＤＢ５を示すデータバッファ番号ＮDB5を格納する。
【００７３】
図１３に示すように、バンク３制御部３０３３は、データバッファ登録先頭ポインタＰTの値をインクリメントすることによって、データバッファ登録先頭ポインタＰTをＨ０にする。
【００７４】
データバッファ登録先頭ポインタＰTがライトポインタＰWを示すようになったので、ホスト側バッファコントローラ３０２は、ライトポインタＰW（Ｈ１５）が指し示すホスト側インデックス番号ＮH15に関連付けられているバッファポインタ格納領域ＰB（１５）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（１５）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されていないので、ホスト側バッファコントローラ３０２は、ライトポインタＰW（Ｈ１５）が示すホスト側インデックス番号ＮH15に関連付けられているバッファポインタＰB（１５）内のデータバッファ番号ＮDB5を取得する。ホスト側バッファコントローラ３０２は、図１４に示すように、データバッファ番号ＮDB5が示すデータバッファ領域ＤＢ５にデータＤ１５を格納する。図１５に示すように、ホスト側バッファコントローラは、ライトポインタＰWの値をインクリメントし、ライトポインタＰWを０にする。
【００７５】
バンク３制御部３０３３は、使用していたバッファポインタ格納領域ＰB（１１）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（１１）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されてないので、バンク３制御部３０３３は、使用していたバッファポインタ格納領域ＰB（１１）を空きにする。
【００７６】
図１６に示すように、バンク３制御部３０３３は、リードポインタＰR3の値をインクリメントし、リードポインタＰR3をＢ３−３にする。バンク３制御部３０３３は、リードポインタＰR3の値Ｂ３−３が示すフラッシュメモリ側インデックスに関連付けられているバッファポインタＰB（１５）からデータバッファ番号ＮDB5を読み出す。バンク３制御部３０３３は、データバッファ番号ＮDB5が示すデータバッファ領域ＤＢ５からデータＤ１５を読み出し、読み出したデータＤ１５をバンク３の３番目のブロックに書き込む。
【００７７】
図１７〜図２１は、バンク２の３番目のブロックへのデータＤ１０の書き込みが終わった後の処理の手順を説明するための図である。
【００７８】
バンク２制御部３０３２は、ＦＭ側バッファコントローラ３０３の記憶部３０３Ａに格納されているデータバッファ登録先頭ポインタＰT（Ｈ０）が指し示すホスト側インデックス番号ＮH0に関連付けられているバッファポインタ格納領域ＰB（０）が空きであるかを判定する。バッファポインタＰB（０）が空きではないので、図１７に示すように、バンク２制御部３０３２は、バッファポインタ格納領域ＰB（０）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（０）に、フリーポインタＰF（０）を格納する。バンク２制御部３０３２は、フリーポインタＰF（０）にリードデータＤ１０が格納されていたデータバッファ領域ＤＢ１０を示すデータバッファ番号ＮDB2を格納する。
【００７９】
図１８に示すように、バンク２制御部３０３２は、データバッファ登録先頭ポインタＰTの値をインクリメントすることによって、データバッファ登録先頭ポインタＰTをＨ１にする。
【００８０】
データバッファ登録先頭ポインタＰTがライトポインタＰWの先を示すようになったので、ホスト側バッファコントローラ３０２は、ライトポインタＰW（Ｈ０）が示すホスト側インデックス番号ＮH0に関連付けられているバッファポインタ格納領域ＰB（０）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（０）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されているので、ホスト側バッファコントローラ３−２は、フリーポインタ・ポインタ格納領域ＰFP（０）に格納されているフリーポインタ・ポインタが指し示すフリーポインタＰF（０）内のデータバッファ番号ＮDB2を取得する。ホスト側バッファコントローラ３０２は、図１９に示すように、データバッファ番号ＮDB2が示すデータバッファ領域ＤＢ２にデータＤ１６を格納する。図２０に示すように、ホスト側バッファコントローラは、ライトポインタＰWの値を１インクリメントし、ライトポインタＰWをＨ１にする。
【００８１】
バンク２制御部３０３２は、使用していたバッファポインタ格納領域ＰB（０）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（０）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されてないので、バンク２制御部３０３２は、使用していたバッファポインタ格納領域ＰB（０）を空きにする。
【００８２】
図２１に示すように、バンク２制御部３０３２は、リードポインタＰR2の値を１インクリメントし、リードポインタＰR2をＢ２−３にする。バンク２制御部３０３２は、リードポインタＰR2の値Ｂ２−３が示すフラッシュメモリ側インデックスに関連付けられているバッファポインタＰB（１４）からデータバッファ番号ＮDB6を読み出す。バンク２制御部３０３２は、データバッファ番号ＮDB6が示すデータバッファ領域ＤＢ６からデータＤ１４を読み出し、読み出したデータＤ１４をバンク２の３番目のブロックに書き込む。
【００８３】
図２２〜図２６は、バンク１の４番目のブロックへのデータＤ１３の書き込みが終わった後の処理の手順を説明するための図である。
【００８４】
バンク１制御部３０３１は、ＦＭ側バッファコントローラ３０３の記憶部３０３Ａに格納されているデータバッファ登録先頭ポインタＰT（Ｈ１）が指し示すホスト側インデックス番号ＮH1に関連付けられているバッファポインタ格納領域ＰB（１）が空きであるかを判定する。バッファポインタ格納領域ＰB（１）が空きなので、図２２に示すように、バンク１制御部３０３１は、ホスト側インデックス番号ＮH1に関連付けられているバッファポインタＰB（１）に、リードデータＤ１３が格納されていたデータバッファ領域ＤＢ１３を示すデータバッファ番号ＮDB3を格納する。
【００８５】
図２３に示すように、バンク１制御部３０３１は、データバッファ登録先頭ポインタＰTの値を１インクリメントすることによって、データバッファ登録先頭ポインタＰTをＨ２にする。
【００８６】
データバッファ登録先頭ポインタＰTがライトポインタＰWの先を示すようになったので、ホスト側バッファコントローラ３０２は、ライトポインタＰW（Ｈ１）が指し示すホスト側インデックス番号ＮH1に関連付けられているバッファポインタＰB（１）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（１）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されていないので、ホスト側バッファコントローラ３０２は、ライトポインタＰW（Ｈ１）が指し示すホスト側インデックス番号ＮH1に関連付けられているバッファポインタ格納領域ＰB（１）内のデータバッファ番号ＮDB3を取得する。ホスト側バッファコントローラ３０２は、図２４に示すように、データバッファ番号ＮDB3が示すデータバッファ領域ＤＢ３にデータＤ１７を格納する。図２５に示すように、ホスト側バッファコントローラ３０２は、ライトポインタＰWの値を１インクリメントし、ライトポインタＰWをＨ２にする。
【００８７】
バンク１制御部３０３１は、使用していたバッファポインタ格納領域ＰB（１３）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（１３）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されてないので、バンク１制御部３０３１は、使用していたバッファポインタＰB（１３）を空きにする。
【００８８】
図２６に示すように、バンク１制御部３０３１は、リードポインタＰR1の値をインクリメントし、リードポインタＰR1をＢ１−０にする。バンク１制御部３０３１は、リードポインタＰR1（Ｂ１−０）が示すＦＭ側インデックス番号ＮB1-0に関連付けられているバッファポインタＰB（１）からデータバッファ番号ＮDB3を読み出す。バンク１制御部３０３１は、データバッファ番号ＮDB3が示すデータバッファ領域ＤＢ３からデータＤ１７を読み出し、読み出したデータＤ１７をバンク１の５番目のブロックに書き込む。
【００８９】
図２７〜図３２は、バンク０の１番目のブロックへのデータＤ０の書き込みが終わった後の処理の手順を説明するための図である。
【００９０】
バンク０制御部３０３０は、ＦＭ側バッファコントローラ３０３の記憶部３０３Ａに格納されているデータバッファ登録先頭ポインタＰT（Ｈ２）が指し示すホスト側インデックス番号ＮH2に関連付けられているバッファポインタが空きであるかを判定する。バッファポインタが空きなので、図２７に示すように、バンク０制御部３０３０は、ホスト側インデックス番号ＮH2に関連付けられているバッファポインタＰB（２）に、リードデータＤ０が格納されていたデータバッファ領域ＤＢ０を示すデータバッファ番号ＮDB0を格納する。
【００９１】
図２８に示すように、バンク０制御部３０３０は、データバッファ登録先頭ポインタＰTの値をインクリメントすることによって、データバッファ登録先頭ポインタＰTをＨ３にする。
【００９２】
データバッファ登録先頭ポインタＰTがライトポインタＰWの先を示すようになったので、ホスト側バッファコントローラは、ライトポインタＰW（Ｈ２）が示すホスト側インデックス番号ＮH2に関連付けられているバッファポインタ格納領域ＰB（２）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（２）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されていないので、ホスト側バッファコントローラ３０２は、ライトポインタＰW（Ｈ１）が示すホスト側インデックス番号ＮH1に関連付けられているバッファポインタ格納領域ＰB（２）内のデータバッファ番号ＮDB0を取得する。ホスト側バッファコントローラは、図２９に示すように、データバッファ番号ＮDB0が示すデータバッファ領域ＤＢ３にデータＤ１８を格納する。図３０に示すように、ホスト側バッファコントローラは、ライトポインタＰWの値をインクリメントし、ライトポインタＰWをＨ３にする。
【００９３】
バンク０制御部３０３０は、使用していたバッファポインタ格納領域ＰB（０）に関連付けられているフリーポインタ・ポインタ格納領域ＰFP（０）にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタＰFP（０）が格納されているので、図３１に示すように、バンク０制御部３０３０は、フリーポインタ格納領域ＰF（０）に格納されているデータバッファ番号ＮD16をバッファポインタ格納領域ＰB（０）内に移動する。バンク０制御部３０３０は、フリーポインタ・ポインタ格納領域ＰFP（０）を空きにする。
【００９４】
図３２に示すように、バンク０制御部３０３０は、リードポインタＰR0の値をインクリメントし、リードポインタＰR0をＢ０−１にする。バンク０制御部３０３０は、リードポインタＰR0の値Ｂ０−１が示すフラッシュメモリ側インデックスに関連付けられているバッファポインタＰB（４）からデータバッファ番号ＮDB4を読み出す。バンク０制御部３０３０は、データバッファ番号ＮDB4が示すデータバッファ領域ＤＢ４からデータＤ４を読み出し、読み出したデータＤ４をバンク０の２番目のブロックに書き込む。
【００９５】
バンク０制御部３０３０、バンク１制御部３０３１、バンク２制御部３０３２、およびバンク３制御部３０３３は、バンク毎に独立に動作するため、先行する制御部と遅れる制御部とがある。上記のように先行した制御部が使用していたデータバッファ番号を次の転送用のバッファポインタ格納領域に格納することで、先行する制御部が遅い制御部を待つことなく処理を進め、バッファメモリを有効に使用し、効率的な書き込み制御を行うことが可能になる。ある一単位の転送でみると、早い制御部と遅い制御部があるが、繰り返し転送することで、制御部間の速度差が平均化され、遅い制御部に律足される場合に比べて短い時間で終了することができる。
【００９６】
フリーポインタがないと、遅い制御部により、その他の制御部を先に進めることができなくなる。これを防ぐために、データバッファを大きくする方法があるが、この場合、全バンク数分追加する必要がある。フリーポインタを用意することで、遅れたバンクだけがフリーバンクを使用でき効率が高くなる。
【００９７】
上記実施形態は、記憶装置がＨ−ＨＤＤとして実現されていたが、記憶装置がＳＳＤ（Solid State Drive）として実現されていても良い。
【００９８】
ＮＡＮＤフラッシュメモリ２０３にライトする場合を示しているが、逆方向にすることでリードアクセスも実現できる。
【００９９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１００】
１１…ホスト装置、１２…ストレージデバイス（記憶装置）、２０１…制御部（コントローラ）、２０２…揮発性メモリ（バッファメモリ）、２０３…ＮＡＮＤフラッシュメモリ（不揮発性メモリ）、２０６…ハードディスク、３０２…ホスト側バッファコントローラ、３０３…フラッシュメモリ側バッファコントローラ、３０３０…バンク０制御部、３０３１…バンク１制御部、３０３２…バンク２制御部、３０３３…バンク３制御部。
【図１】
2014026388.tif 000003
【図２】
2014026388.tif 000004
【図３】
2014026388.tif 000005
【図４】
2014026388.tif 000006
【図５】
2014026388.tif 000007
【図６】
2014026388.tif 000008
【図７】
2014026388.tif 000009
【図８】
2014026388.tif 000010
【図９】
2014026388.tif 000011
【図１０】
2014026388.tif 000012
【図１１】
2014026388.tif 000013
【図１２】
2014026388.tif 000014
【図１３】
2014026388.tif 000015
【図１４】
2014026388.tif 000016
【図１５】
2014026388.tif 000017
【図１６】
2014026388.tif 000018
【図１７】
2014026388.tif 000019
【図１８】
2014026388.tif 000020
【図１９】
2014026388.tif 000021
【図２０】
2014026388.tif 000022
【図２１】
2014026388.tif 000023
【図２２】
2014026388.tif 000024
【図２３】
2014026388.tif 000025
【図２４】
2014026388.tif 000026
【図２５】
2014026388.tif 000027
【図２６】
2014026388.tif 000028
【図２７】
2014026388.tif 000029
【図２８】
2014026388.tif 000030
【図２９】
2014026388.tif 000031
【図３０】
2014026388.tif 000032
【図３１】
2014026388.tif 000033
【図３２】
2014026388.tif 000034