JP2014026388A - 記憶装置、コントローラ、および書き込み制御方法 - Google Patents
記憶装置、コントローラ、および書き込み制御方法 Download PDFInfo
- Publication number
- JP2014026388A JP2014026388A JP2012164953A JP2012164953A JP2014026388A JP 2014026388 A JP2014026388 A JP 2014026388A JP 2012164953 A JP2012164953 A JP 2012164953A JP 2012164953 A JP2012164953 A JP 2012164953A JP 2014026388 A JP2014026388 A JP 2014026388A
- Authority
- JP
- Japan
- Prior art keywords
- data
- pointer
- buffer
- bank
- host
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
Abstract
【課題】バッファから不揮発性メモリの複数のバンクに同時にデータを書き込む場合に、効率的な書き込み制御を行うこと。
【解決手段】実施形態によれば、記憶装置は、ホストから送信されたデータを順にバッファ内の複数のバッファ領域に書き込む第1の書き込み制御手段と、不揮発性メモリ内の複数のバンクにそれぞれ対応する複数のバンク書き込み手段を有する第2の書き込み制御手段とを具備し、複数のバンク書き込み手段の内の一つのバンク書き込み手段が複数のバッファ領域の内の一つのバッファ領域に書き込まれているデータを読み出した場合、第1の書き込み制御手段は、データが読み出されたバッファ領域にホストから送信されたデータを書き込み、各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に複数のバッファの内の第1のバッファ領域からデータを読み出し、読み出されたデータを対応するバンクに書き込む。
【選択図】 図3
【解決手段】実施形態によれば、記憶装置は、ホストから送信されたデータを順にバッファ内の複数のバッファ領域に書き込む第1の書き込み制御手段と、不揮発性メモリ内の複数のバンクにそれぞれ対応する複数のバンク書き込み手段を有する第2の書き込み制御手段とを具備し、複数のバンク書き込み手段の内の一つのバンク書き込み手段が複数のバッファ領域の内の一つのバッファ領域に書き込まれているデータを読み出した場合、第1の書き込み制御手段は、データが読み出されたバッファ領域にホストから送信されたデータを書き込み、各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に複数のバッファの内の第1のバッファ領域からデータを読み出し、読み出されたデータを対応するバンクに書き込む。
【選択図】 図3
Description
本発明の実施形態は、バッファメモリを用いて不揮発性メモリにデータを書き込む記憶装置、コントローラ、および書き込み制御方法に関する。
DRAMでは、データの転送速度を高速にするために、複数のバンクに同時にアクセスするメモリインターリーブが行われている。
一方、不揮発性メモリでは、バンク毎にデータの書き込み処理時間が大きく異なる場合がある。そのため、バッファメモリから不揮発性メモリの複数のバンクへのデータの転送で、データの書き込みが遅いバンクがあるために、データの書き込みが早いバンクへの書き込み処理ができず、効率的な書き込み制御ができない事がある。
本発明の目的は、バッファメモリから不揮発性メモリの複数のバンクに並列的にデータを書き込む場合に、効率的な書き込み制御を行うことが可能な記憶装置、半導体チップ、および書き込み制御方法を提供することにある。
実施形態によれば、複数のデータバッファ領域が設定されるバッファメモリと、ホストから送信されたデータを順に前記複数のデータバッファ領域に書き込む第1の書き込み制御手段と、複数のバンクが設定される不揮発性メモリと、前記複数のバンクにそれぞれ対応する複数のバンク書き込み手段を有し、各前記バンク書き込み手段は前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出し、読み出したデータを前記不揮発性メモリの対応するバンクに書き込む第2の書き込み制御手段と具備し、前記複数のバンク書き込み手段の内の一つのバンク書き込み手段が前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれている第1のデータを読み出した場合、前記第1の書き込み制御手段は、前記第1のデータが読み出されたデータバッファ領域に前記ホストから送信されたデータを書き込み、各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に、前記複数のバッファメモリの内の第1のデータバッファ領域から第2のデータを読み出し、前記第2のデータを対応するバンクに書き込む。
以下、実施の形態について図面を参照して説明する。
記憶装置は、ハイブリッド−ハードディスクドライブ(H−HDD:Hybrid Hard Disk Drive)として実現され得る。
図1は、記憶装置の構成を示すブロック図である。
この記憶装置は、例えば、ATA(AT Attachment Controller)規格に準拠したストレージデバイス12として実現されている。このストレージデバイス12は、例えば、ハイブリッドハードディスクドライブ(ハイブリッドHDD)として機能する。ハイブリッドHDDは、ハードディスク(ディスク記憶媒体)と、このディスク記憶媒体のキャッシュとして機能する不揮発性メモリとを含むディスクドライブである。不揮発性メモリには、例えばNANDフラッシュメモリが用いられる。
このストレージデバイス12は、サーバ、パーソナルコンピュータといった情報処理装置1の外部記憶装置として機能するドライブ装置である。情報処理装置1の情報処理装置本体内には、ホスト装置11とストレージデバイス12とが設けられる。ホスト装置11は、情報処理装置1のコアユニットであり、各種プログラムを実行するCPU、およびメモリ等から構成される。ストレージデバイス12は、シリアルATAのようなATAインタフェースを介してホスト装置11に接続される。
ストレージデバイス12は、制御部201、揮発性メモリ202、NANDフラッシュメモリ203、ハードディスクコントローラ(HDC)205、ハードディスク206等を有している。制御部201は、ストレージデバイス12内の各部を制御するマイクロプロセッサである。制御部201は、ATAインタフェース介してホスト装置11との通信を実行するホストインタフェースであるATAコントローラを含む。HDC205は、ハードディスク206を制御するコントローラである。
揮発性メモリ202は例えばDRAMから構成されている。
ハードディスク206はディスク記憶媒体である。具体的には、ハードディスク206は、ディスク記憶媒体207、スピンドルモータ(SPM)208、ヘッド209、アクチュエータ210、ボイスコイルモータ(VCM)211等を備える。SPM208はディスク記憶媒体207を回転させ、アクチュエータ210及びVCM211はヘッド209をディスク記憶媒体207の半径方向に移動させるヘッド駆動機構である。
揮発性メモリ202はホスト装置11からのライトデータまたはホスト装置11に読み出すべきリードデータを一時的に格納するためのデータバッファとして機能する。以下では、揮発性メモリ202をバッファメモリ202と記すこともある。NANDフラッシュメモリ203は、ハードディスク(ディスク記憶媒体)206のキャッシュとして機能するキャッシュメモリ(不揮発性キャッシュメモリ)である。NANDフラッシュメモリ203は、ハードディスク206からリードされたデータを格納する。また、NANDフラッシュメモリ203は、ホスト装置11に対して高速に転送すべき特定のデータのセットを恒常的に格納することもできる。すなわち、通常は、ソフトウェア(オペレーティングシステム内のカーネル、デバイスドライバ、アプリケーションプログラム、等)及びユーザデータの全てがハードディスク206にのみ格納されるが、本実施形態においては、それらソフトウェアの一部のコピー、またはハードディスク206に格納されたユーザデータの一部のコピー等を、NANDフラッシュメモリ203に、ホスト装置11に対して高速にリードすべきデータとして恒常的に格納しておくことができる。NANDフラッシュメモリ203に恒常的に保持されるデータは、pinnedデータと称されることもある。
NANDフラッシュメモリ203にハードディスク206内のどのデータを格納すべきであるかは、ホスト装置11が指定することができる。制御部201は、ホスト装置11によって指定された各論理ブロックアドレス(LBA)に対応するデータをハードディスク206からNANDフラッシュメモリ203にロードする。ロードされたデータは、NANDフラッシュメモリ203上に恒常的に保持され得る。また、オペレーティングシステムのブートアップの開始から完了までのような所定の期間中にホスト装置11から発行される各リードコマンドに応じてハードディスク206からリードされるデータを、NANDフラッシュメモリ203上にpinnedデータとして格納してもよい。
NANDフラッシュメモリ203はハードディスク206よりもデータの読み出し速度が速いので、NANDフラッシュメモリ203をハードディスク206のキャッシュとして機能させることにより、本ストレージデバイス12のレスポンス性能を向上させることができる。
次に、図2を参照して、制御部201の構成を説明する。図2は制御部201の構成を示すブロック図である。
制御部201は、ATAコントローラ(ATAC)301、ホスト側バッファコントローラ302、フラッシュメモリ側バッファコントローラ(FM側バッファコントローラ)303、およびキャッシュ制御部304等を備えている。この制御部201のATAC301、ホスト側バッファコントローラ302、FM側バッファコントローラ303、およびキャッシュ制御部304等の各機能は一つの半導体チップ上に集積され、制御部201はSoC(System-on-a-Chip)によって実現されている。
ATAC301は、ATAインタフェース介してホスト装置11との通信を実行するホストインタフェースである。ホスト側バッファコントローラ302は、例えばホストのライトアクセスデータをバッファメモリ202内に設定された複数のデータバッファ領域にシーケンシャルに格納する。FM側バッファコントローラ303は、バンク0制御部3030、バンク1制御部3031、バンク2制御部3032、およびバンク3制御部3033等を備えている。バンク0制御部3030、バンク1制御部3031、バンク2制御部3032、およびバンク3制御部3033は、NANDフラッシュメモリ203に設定された4つのバンクに対して並列にデータを書き込み、または4つのバンクから並列にデータを読み込む。
例えば、ホストからデータD0〜D23を含むデータのライトアクセスがあった場合を説明する。バンク0制御部3030は、データD0、データD4、データD8、データD12、データD16、データD20をバンク0に順に書き込む。バンク1制御部3031は、データD1、データD5、データD9、データD13、データD17、データD21のデータをバンク1に順に書き込む。バンク2制御部3032は、データD2、データD6、データD10、データD14、データD18、データD22をバンク2に順に書き込む。バンク3制御部3033は、データD3、データD7、データD11、データD15、データD19、データD23をバンク3に順に書き込む。
キャッシュ制御部304は、ホスト装置11からのメディアアクセスコマンド(例えば、データリードコマンド、データライトコマンド)によって指定されたデータがNANDフラッシュメモリ203に格納されているか否かを判定し、この判定結果に応じて、NANDフラッシュメモリ203およびハードディスク206を選択的にアクセスする。
メディアアクセスコマンドに含まれるLBAに対応するデータがNANDフラッシュメモリ203に存在する場合(キャッシュヒット)、キャッシュ制御部304は、NANDフラッシュメモリ203に対するアクセス(リードアクセスまたはライトアクセス)を実行し、ハードディスク206に対するアクセスは実行しない。
一方、メディアアクセスコマンドに含まれるLBAに対応するデータがNANDフラッシュメモリ203に存在しない場合(キャッシュミス)、キャッシュ制御部304は、ハードディスク206に対するアクセスを実行する。メディアアクセスコマンドがリードコマンドであれば、ハードディスク206からデータがリードされる。リードデータはNANDフラッシュメモリ203に格納されるとともに、ホスト装置11に送出される。
また、キャッシュ制御部304は、ハードディスク206に格納されている所定のデータのセットを、NANDフラッシュメモリ203にpinnedデータとして格納する処理も実行する。例えば、キャッシュ制御部304は、ある特定のLBA範囲内に属するデータのセット、使用頻度の高いデータのセット、ブート期間中にハードディスク206からリードされたデータのセット等を、NANDフラッシュメモリ203にpinnedデータとして格納することができる。
図3はホスト側バッファコントローラ302、およびFM側バッファコントローラ303の構成を示す図である。図3を参照してホスト側バッファコントローラ302、およびFM側バッファコントローラ303の動作を説明する。
ホスト側バッファコントローラ302は、ライトポインタPWを格納するための記憶部302Aを備えている。FM側バッファコントローラ303は、データバッファ登録先頭ポインタPTを格納するための記憶部303Aを備えている。バンク0制御部3030は、リードポインタPR0を格納するための記憶部3030Aを備えている。バンク1制御部3031は、リードポインタPR1を格納するための記憶部3031Aを備えている。バンク2制御部3032は、リードポインタPR2を格納するための記憶部3032Aを備えている。バンク3制御部3033は、リードポインタPR3を格納するための記憶部3033Aを備えている。
バッファメモリ202には、ホスト側インデックス格納領域IndexHが設定されている。ホスト側インデックス格納領域IndexH内には、ホスト側インデックス番号NH0〜NH15が格納されている。
ホスト側インデックス格納領域IndexHに格納されているホスト側インデックスの数は、バンク数の整数倍である。本実施形態の場合、ホスト側インデックス格納領域IndexHにバンク数の4倍の16個のホスト側インデックスが格納される。
バッファメモリ202には、フラッシュメモリ側インデックス格納領域IndexFMが設定されている。フラッシュメモリ側インデックス格納領域IndexFM内には、フラッシュメモリ(FM)側インデックス番号NB0-0、NB1-0、NB2-0、NB3-0、NB0-1、NB1-1、NB2-1、NB3-1、NB0-2、NB1-2、NB2-2、NB3-2、NB0-3、NB1-3、NB2-3、およびNB3-3が格納されている。
FM側インデックス番号NB0-0、NB1-0、NB2-0、NB3-0、NB0-1、NB1-1、NB2-1、NB3-1、NB0-2、NB1-2、NB2-2、NB3-2、NB0-3、NB1-3、NB2-3、およびNB3-3は、ブロックB0、B1、B2、B3に分割して格納されている。
各ブロックには、バンク0制御部3030に対応するFM側インデックス番号NB0-M(M=0,1,2,3)、バンク1制御部3031に対応するFM側インデックス番号NB1-M(M=0,1,2,3)、バンク2制御部3032に対応するFM側インデックス番号NB2-M(M=0,1,2,3)、および、バンク3制御部3033に対応するFM側インデックス番号NB3-M(M=0,1,2,3)が格納されている。
ライトポインタPW=H0およびデータバッファ登録先頭ポインタPT=H0は、ホスト側インデックス番号NH0を指し示す。ライトポインタPW=H1およびデータバッファ登録先頭ポインタPT=H1は、ホスト側インデックス番号NH1を指し示す。ライトポインタPW=H2およびデータバッファ登録先頭ポインタPT=H2は、ホスト側インデックス番号NH2を指し示す。ライトポインタPW=H3およびデータバッファ登録先頭ポインタPT=H3は、ホスト側インデックス番号NH3を指し示す。
ライトポインタPW=H4およびデータバッファ登録先頭ポインタPT=H4は、ホスト側インデックス番号NH4を指し示す。ライトポインタPW=H5およびデータバッファ登録先頭ポインタPT=H5は、ホスト側インデックス番号NH5を指し示す。ライトポインタPW=H6およびデータバッファ登録先頭ポインタPT=H6は、ホスト側インデックス番号NH6を指し示す。ライトポインタPW=H7およびデータバッファ登録先頭ポインタPT=H7は、ホスト側インデックス番号NH7を指し示す。
ライトポインタPW=H8およびデータバッファ登録先頭ポインタPT=H8は、ホスト側インデックス番号NH8を指し示す。ライトポインタPW=H9およびデータバッファ登録先頭ポインタPT=H9は、ホスト側インデックス番号NH9を指し示す。ライトポインタPW=H10およびデータバッファ登録先頭ポインタPT=H10は、ホスト側インデックス番号NH10を指し示す。ライトポインタPW=H11およびデータバッファ登録先頭ポインタPT=H11は、ホスト側インデックス番号NH11を指し示す。
ライトポインタPW=H12およびデータバッファ登録先頭ポインタPT=H12は、ホスト側インデックス番号NH12を指し示す。ライトポインタPW=H13およびデータバッファ登録先頭ポインタPT=H13は、ホスト側インデックス番号NH13を指し示す。ライトポインタPW=H14およびデータバッファ登録先頭ポインタPT=H14は、ホスト側インデックス番号NH14を指し示す。ライトポインタPW=H15およびデータバッファ登録先頭ポインタPT=H15は、ホスト側インデックス番号NH15を指し示す。
リードポインタPR0=B0−0は、フラッシュメモリ側インデックス番号NB0-0を指し示す。リードポインタPR0=B0−1は、フラッシュメモリ側インデックス番号NB0-1を指し示す。リードポインタPR0=B0−2は、フラッシュメモリ側インデックス番号NB0-2を指し示す。リードポインタPR0=B0−3は、フラッシュメモリ側インデックス番号NB0-3を指し示す。
リードポインタPR1=B1−0は、フラッシュメモリ側インデックス番号NB1-0を指し示す。リードポインタPR1=B1−1は、フラッシュメモリ側インデックス番号NB1-1を指し示す。リードポインタPR1=B1−2は、フラッシュメモリ側インデックス番号NB1-2を指し示す。リードポインタPR1=B1−3は、フラッシュメモリ側インデックス番号NB1-3を指し示す。
リードポインタPR2=B2−0は、フラッシュメモリ側インデックス番号NB2-0を指し示す。リードポインタPR2=B2−1は、フラッシュメモリ側インデックス番号NB2-1を指し示す。リードポインタPR2=B2−2は、フラッシュメモリ側インデックス番号NB2-2を指し示す。リードポインタPR2=B2−3は、フラッシュメモリ側インデックス番号NB2-3を指し示す。
リードポインタPR3=B3−0は、フラッシュメモリ側インデックス番号NB3-0を指し示す。リードポインタPR3=B3−1は、フラッシュメモリ側インデックス番号NB3-1を指し示す。リードポインタPR3=B3−2は、フラッシュメモリ側インデックス番号NB3-2を指し示す。リードポインタPR3=B3−3は、フラッシュメモリ側インデックス番号NB3-3を指し示す。
バッファメモリ202には、バッファポインタ領域PBが設定されている。バッファポインタ領域PB内には、バッファポインタ格納領域PB(0)〜PB(15)が設定されている。バッファポインタ格納領域PB(0)〜PB(15)の一部には、データバッファ領域に対応するデータバッファ番号を格納することができる。
バッファメモリ202には、フリーポインタ・ポインタ領域PFPが設定されている。フリーポインタ・ポインタ領域PFP内には、フリーポインタ・ポインタ格納領域PFP(0)〜PFP(15)が設定されている。バッファメモリ202には、フリーポインタ領域PFが設定されている。フリーポインタ領域PF内には、フリーポインタ格納領域PF(0)、PF(1)が設定されている。フリーポインタ・ポインタ格納領域PFP(0)〜PFP(15)には、フリーポインタ格納領域を指し示すフリーポインタ番号を格納することが可能である。フリーポインタ格納領域には、データバッファ領域に対応するデータバッファ番号を格納することができる。
ホスト側インデックス番号NH0およびFM側インデックス番号NB0-0が、バッファポインタ格納領域PB(0)に関連付けられている。バッファポインタ格納領域PB(0)は、フリーポインタ・ポインタ格納領域PFP(0)に関連付けられている。ホスト側インデックス番号NH1およびFM側インデックス番号NB1-0が、バッファポインタ格納領域PB(1)に関連付けられている。バッファポインタ格納領域PB(1)は、フリーポインタ・ポインタ格納領域PFP(1)に関連付けられている。ホスト側インデックス番号NH2およびFM側インデックス番号NB2-0が、バッファポインタ格納領域PB(2)に関連付けられている。バッファポインタ格納領域PB(2)は、フリーポインタ・ポインタ格納領域PFP(2)に関連付けられている。ホスト側インデックス番号NH3およびFM側インデックス番号NB3-0が、バッファポインタ格納領域PB(3)に関連付けられている。バッファポインタ格納領域PB(3)は、フリーポインタ・ポインタ格納領域PFP(3)に関連付けられている。
ホスト側インデックス番号NH4およびFM側インデックス番号NB0-1が、バッファポインタ格納領域PB(4)に関連付けられている。バッファポインタ格納領域PB(4)は、フリーポインタ・ポインタ格納領域PFP(4)に関連付けられている。ホスト側インデックス番号NH5およびFM側インデックス番号NB1-1が、バッファポインタ格納領域PB(5)に関連付けられている。バッファポインタ格納領域PB(5)は、フリーポインタ・ポインタ格納領域PFP(5)に関連付けられている。ホスト側インデックス番号NH6およびFM側インデックス番号NB2-1が、バッファポインタ格納領域PB(6)に関連付けられている。バッファポインタ格納領域PB(6)は、フリーポインタ・ポインタ格納領域PFP(6)に関連付けられている。ホスト側インデックス番号NH7およびFM側インデックス番号NB3-1が、バッファポインタ格納領域PB(7)に関連付けられている。バッファポインタ格納領域PB(7)は、フリーポインタ・ポインタ格納領域PFP(7)に関連付けられている。
ホスト側インデックス番号NH8およびFM側インデックス番号NB0-2が、バッファポインタ格納領域PB(8)に関連付けられている。バッファポインタ格納領域PB(8)は、フリーポインタ・ポインタ格納領域PFP(8)に関連付けられている。ホスト側インデックス番号NH9およびFM側インデックス番号NB1-2が、バッファポインタ格納領域PB(9)に関連付けられている。バッファポインタ格納領域PB(9)は、フリーポインタ・ポインタ格納領域PFP(9)に関連付けられている。ホスト側インデックス番号NH10およびFM側インデックス番号NB2-2が、バッファポインタ格納領域PB(10)に関連付けられている。バッファポインタ格納領域PB(10)は、フリーポインタ・ポインタ格納領域PFP(10)に関連付けられている。ホスト側インデックス番号NH11およびFM側インデックス番号NB3-2が、バッファポインタ格納領域PB(11)に関連付けられている。バッファポインタ格納領域PB(11)は、フリーポインタ・ポインタ格納領域PFP(11)に関連付けられている。
ホスト側インデックス番号NH12およびFM側インデックス番号NB0-3が、バッファポインタ格納領域PB(12)に関連付けられている。バッファポインタ格納領域PB(12)は、フリーポインタ・ポインタ格納領域PFP(12)に関連付けられている。ホスト側インデックス番号NH13およびFM側インデックス番号NB1-3が、バッファポインタ格納領域PB(13)に関連付けられている。バッファポインタ格納領域PB(13)は、フリーポインタ・ポインタ格納領域PFP(13)に関連付けられている。ホスト側インデックス番号NH14およびFM側インデックス番号NB2-3が、バッファポインタ格納領域PB(14)に関連付けられている。バッファポインタ格納領域PB(14)は、フリーポインタ・ポインタ格納領域PFP(14)に関連付けられている。ホスト側インデックス番号NH15およびFM側インデックス番号NB3-3が、バッファポインタ格納領域PB(15)に関連付けられている。バッファポインタ格納領域PB(15)は、フリーポインタ・ポインタ格納領域PFP(15)に関連付けられている。
ホスト側バッファコントローラ302は、ライトポインタPWが指し示すホスト側インデックス番号に関連付けられているバッファポインタ格納領域PB(A)(A=0〜15)を参照し、そのバッファポインタ格納領域PB(A)に格納されているデータバッファ番号を得る。ホスト側バッファコントローラ302は、得られたデータバッファ番号に対応するデータバッファ領域にライトデータを書き込む。
FM側バッファコントローラ303内の各バンクN制御部(N=0,1,2,3)は、リードポインタPRが指し示すFM側インデックス番号NBN-M(M=0,1,2,3)に関連付けられているバッファポインタ格納領域PB(C)(C=0〜15)を参照し、バッファポインタ格納領域PB(C)に格納されているデータバッファ番号を読み出す。各バンクN制御部(N=0,1,2,3)は、データバッファ番号に対応するデータバッファ領域からデータを読み出し、NANDフラッシュメモリ内の対応するバンクに書き込む。書き込みが終了したら、各バンクN制御部(N=0,1,2,3)は、使い終わったデータバッファを次の転送に使用するため、バッファポインタへのデータバッファ登録先頭ポインタPTが示す場所に、データバッファ番号を登録する。同時に、使用していたバッファポインタを“空き”に変更する。
図4は、書込み処理時のホスト側バッファコントローラ302の動作を説明するためのフローチャートである。
ホスト側バッファコントローラ302は、ライトポインタに対応するバッファポインタ格納領域に関連付けられているフリーポインタ・ポインタ格納領域にフリーポインタ・ポインタが格納されているかを判定する(ステップB11)。格納されていないと判定した場合、ホスト側バッファコントローラ302は、ライトポインタに対応するバッファポインタ格納領域に格納されているデータバッファ番号を取得する(ステップB12)。格納されていると判定した場合、ホスト側バッファコントローラ302は、フリーポインタ・ポインタが指し示すフリーポインタ格納領域に格納されているデータバッファ番号を取得する(ステップB13)。ホスト側バッファコントローラ302は、取得したデータバッファ番号に対応するデータバッファ領域にライトデータを格納する(ステップB14)。ホスト側バッファコントローラ302は、ライトポインタの値を1インクリメントし、ライトポインタが次のホスト側インデックス番号を指し示すようにする。なお、ホスト側バッファコントローラ302は、ライトポインタが15であった場合、ライトポインタを0にする(ステップB15)。ホスト側バッファコントローラ302は、データバッファ登録先頭ポインタの値がライトポインタの値より先を示しているかを判定する(ステップB16)。先を示していないと判定した場合(ステップB16のNo)、ホスト側バッファコントローラ302は、定期的にステップB17の処理を行う。先を示していると判定した場合(ステップB16のYes)、ホスト側バッファコントローラ302は、ステップB11からの処理を順次実行する。
ホスト側バッファコントローラ302は、ライトポインタに対応するバッファポインタ格納領域に関連付けられているフリーポインタ・ポインタ格納領域にフリーポインタ・ポインタが格納されているかを判定する(ステップB11)。格納されていないと判定した場合、ホスト側バッファコントローラ302は、ライトポインタに対応するバッファポインタ格納領域に格納されているデータバッファ番号を取得する(ステップB12)。格納されていると判定した場合、ホスト側バッファコントローラ302は、フリーポインタ・ポインタが指し示すフリーポインタ格納領域に格納されているデータバッファ番号を取得する(ステップB13)。ホスト側バッファコントローラ302は、取得したデータバッファ番号に対応するデータバッファ領域にライトデータを格納する(ステップB14)。ホスト側バッファコントローラ302は、ライトポインタの値を1インクリメントし、ライトポインタが次のホスト側インデックス番号を指し示すようにする。なお、ホスト側バッファコントローラ302は、ライトポインタが15であった場合、ライトポインタを0にする(ステップB15)。ホスト側バッファコントローラ302は、データバッファ登録先頭ポインタの値がライトポインタの値より先を示しているかを判定する(ステップB16)。先を示していないと判定した場合(ステップB16のNo)、ホスト側バッファコントローラ302は、定期的にステップB17の処理を行う。先を示していると判定した場合(ステップB16のYes)、ホスト側バッファコントローラ302は、ステップB11からの処理を順次実行する。
図5は、書込み処理時のバンクN制御部の動作を示すフローチャートである。
バンクN制御部303Nは、リードポインタに対応するバッファポインタ格納領域に格納されているデータバッファ番号を取得する(ステップB21)。バンクN制御部303Nは、取得したデータバッファ番号に対応するデータバッファ領域からデータを取得し、取得したデータをNANDフラッシュメモリ203の対応するバンクNに書き込む(ステップB22)。バンクN制御部303Nは、データバッファ登録先頭ポインタに対応するバッファポインタ格納領域が空きになっているかを判定する(ステップB23)。空きになっていると判定した場合(ステップB23のYes)、バンクN制御部303Nは、ステップB22において取得されたデータが格納されていたデータバッファ領域に対応するデータバッファ番号をバッファポインタ格納領域に書き込む(ステップB24)。空きになっていないと判定した場合(ステップB23のNo)、バンクN制御部303Nは、まだ空いていないバッファポインタ格納領域にフリーポインタ・ポインタを書き込み、ステップB22において取得されたデータが格納されていたデータバッファ領域に対応するデータバッファ番号をフリーポインタ格納領域に書き込む(ステップB25)。バンクN制御部303Nは、先頭ポインタを1インクリメントする(ステップB26)。バンクN制御部303Nは、使用していたバッファポインタ格納領域にフリーポインタ・ポインタが格納されているかを判定する(ステップB27)。格納されてないと判定した場合(ステップB27のNo)、バンクN制御部303Nは、使用していたバッファポインタ格納領域を空きにする(ステップB28)。格納されていると判定した場合(ステップB27のYes)、バンクN制御部303Nは、フリーポインタ格納領域に格納されているデータバッファ番号を使用していたバッファポインタ格納領域に移動し、フリーポインタ格納領域を空きにする(ステップB29)。バンクN制御部303Nは、フリーポインタ・ポインタ格納領域を空きにする。バンクN制御部303Nは、リードポインタの値をインクリメントすることによって、新たなリードポインタの値が次のブロックの対応するFM側インデックスを指し示すようにする(ステップB30)。ここで、リードポインタの値をインクリメントする事について説明する。バンクN制御部(N=0,1,2,3)は、BX−Y(Y=0,1,2,3)のYの値を+1インクリメントする。なお、Yの値が3の場合、バンクX制御部(X=0,1,2,3)は、Yの値を0にする。
バンクN制御部303Nは、リードポインタに対応するバッファポインタ格納領域に格納されているデータバッファ番号を取得する(ステップB21)。バンクN制御部303Nは、取得したデータバッファ番号に対応するデータバッファ領域からデータを取得し、取得したデータをNANDフラッシュメモリ203の対応するバンクNに書き込む(ステップB22)。バンクN制御部303Nは、データバッファ登録先頭ポインタに対応するバッファポインタ格納領域が空きになっているかを判定する(ステップB23)。空きになっていると判定した場合(ステップB23のYes)、バンクN制御部303Nは、ステップB22において取得されたデータが格納されていたデータバッファ領域に対応するデータバッファ番号をバッファポインタ格納領域に書き込む(ステップB24)。空きになっていないと判定した場合(ステップB23のNo)、バンクN制御部303Nは、まだ空いていないバッファポインタ格納領域にフリーポインタ・ポインタを書き込み、ステップB22において取得されたデータが格納されていたデータバッファ領域に対応するデータバッファ番号をフリーポインタ格納領域に書き込む(ステップB25)。バンクN制御部303Nは、先頭ポインタを1インクリメントする(ステップB26)。バンクN制御部303Nは、使用していたバッファポインタ格納領域にフリーポインタ・ポインタが格納されているかを判定する(ステップB27)。格納されてないと判定した場合(ステップB27のNo)、バンクN制御部303Nは、使用していたバッファポインタ格納領域を空きにする(ステップB28)。格納されていると判定した場合(ステップB27のYes)、バンクN制御部303Nは、フリーポインタ格納領域に格納されているデータバッファ番号を使用していたバッファポインタ格納領域に移動し、フリーポインタ格納領域を空きにする(ステップB29)。バンクN制御部303Nは、フリーポインタ・ポインタ格納領域を空きにする。バンクN制御部303Nは、リードポインタの値をインクリメントすることによって、新たなリードポインタの値が次のブロックの対応するFM側インデックスを指し示すようにする(ステップB30)。ここで、リードポインタの値をインクリメントする事について説明する。バンクN制御部(N=0,1,2,3)は、BX−Y(Y=0,1,2,3)のYの値を+1インクリメントする。なお、Yの値が3の場合、バンクX制御部(X=0,1,2,3)は、Yの値を0にする。
次に、実際の書き込みの手順を説明する。
図6は、書き込みの初期状態におけるホスト側バッファコントローラ302、フラッシュメモリ側バッファコントローラ303、バッファメモリ202、およびNANDフラッシュメモリ203を示す図である。
図6は、書き込みの初期状態におけるホスト側バッファコントローラ302、フラッシュメモリ側バッファコントローラ303、バッファメモリ202、およびNANDフラッシュメモリ203を示す図である。
ライトポインタPWは、ホスト側インデックス番号NH8を指し示している。データバッファ登録先頭ポインタPT(H8)は、ホスト側インデックス番号NH8を指し示している。
リードポインタPR0は、FM側インデックス番号NB0-0を指し示している。リードポインタPR1は、FM側インデックス番号NB1-0を指し示している。リードポインタPR2は、FM側インデックス番号NB2-0を指し示している。リードポインタPR3は、FM側インデックス番号NB3-0を指し示している。
バッファポインタ格納領域PB(0)にデータバッファ番号NDB0が格納されている。バッファポインタ格納領域PB(1)にデータバッファ番号NDB1が格納されている。バッファポインタ格納領域PB(2)にデータバッファ番号NDB2が格納されている。バッファポインタ格納領域PB(3)にデータバッファ番号NDB3が格納されている。バッファポインタ格納領域PB(4)にデータバッファ番号NDB4が格納されている。バッファポインタ格納領域PB(5)にデータバッファ番号NDB5が格納されている。バッファポインタ格納領域PB(6)にデータバッファ番号NDB6が格納されている。バッファポインタ格納領域PB(7)にデータバッファ番号NDB7が格納されている。バッファポインタ格納領域PB(8)〜PB(15)は、空きである。
フリーポインタ・ポインタ格納領域PFP(0)〜PFP(15)は空きである。
フリーポインタ格納領域PF(0)およびフリーポインタPF(1)は空きである。
データバッファ領域DB0にデータD0が格納されている。データバッファ領域DB1にデータD1が格納されている。データバッファ領域DB2にデータD2が格納されている。データバッファ領域DB3にデータD3が格納されている。データバッファ領域DB4にデータD4が格納されている。データバッファ領域DB5にデータD5が格納されている。データバッファ領域DB6にデータD6が格納されている。データバッファ領域DB7にデータD7が格納されている。
フリーポインタ・ポインタ格納領域PFP(0)〜PFP(15)は空きである。
フリーポインタ格納領域PF(0)およびフリーポインタPF(1)は空きである。
データバッファ領域DB0にデータD0が格納されている。データバッファ領域DB1にデータD1が格納されている。データバッファ領域DB2にデータD2が格納されている。データバッファ領域DB3にデータD3が格納されている。データバッファ領域DB4にデータD4が格納されている。データバッファ領域DB5にデータD5が格納されている。データバッファ領域DB6にデータD6が格納されている。データバッファ領域DB7にデータD7が格納されている。
バンク0制御部3030が、データバッファ領域DB0からデータD0を読み出し、読み出したデータD0をNANDフラッシュメモリ203のバンク0に書き込んでいる。バンク1制御部3031が、データバッファ領域DB1からデータD1を読み出し、読み出したデータD1をNANDフラッシュメモリ203のバンク1に書き込んでいる。
バンク2制御部3032が、データバッファ領域DB2からデータD2を読み出し、読み出したデータD2をNANDフラッシュメモリ203のバンク2に書き込んでいる。バンク3制御部3033が、データバッファ領域DB3からデータD3を読み出し、読み出したデータD3をNANDフラッシュメモリ203のバンク3に書き込んでいる。
図7〜図10は、バンク1の先頭ブロックへのデータD1の書き込みが終わった後の処理の手順を説明するための図である。
バンク1制御部3031は、FM側バッファコントローラ303の記憶部303Aに格納されているデータバッファ登録先頭ポインタPT(H8)が指し示すホスト側インデックス番号NH8に関連付けられているバッファポインタ格納領域PB(8)が空きであるかを判定する。
バンク1制御部3031は、FM側バッファコントローラ303の記憶部303Aに格納されているデータバッファ登録先頭ポインタPT(H8)が指し示すホスト側インデックス番号NH8に関連付けられているバッファポインタ格納領域PB(8)が空きであるかを判定する。
バッファポインタ格納領域PB(8)が空なので、図7に示すように、バンク1制御部3031は、ホスト側インデックス番号NH8に関連付けられているバッファポインタ格納領域PB(8)に、リードデータD1が格納されていたデータバッファ領域DB1を示すデータバッファ番号NDB1を格納する。
バンク1制御部3031は、使用していたバッファポインタ格納領域PB(1)に関連付けられているフリーポインタ・ポインタ格納領域PFP(8)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されてないので、バンク1制御部は、使用していたバッファポインタ格納領域PB(1)を空きにする。
図8に示すように、バンク1制御部3031は、データバッファ登録先頭ポインタPTの値を1インクリメントすることによって、データバッファ登録先頭ポインタPTをH9にする。バンク1制御部3031は、リードポインタPR1の値を1インクリメントし、リードポインタPR1をB1−1にする。
バンク1制御部3031は、リードポインタPR1の値であるB1−1が指し示すフラッシュメモリ側インデックス番号に関連付けられているバッファポインタ格納領域PB(5)からデータバッファ番号NDB5を読み出す。バンク1制御部3031は、データバッファ番号NDB5が示すデータバッファ領域DB2からデータを読み出す。バンク1制御部3031は、読み出したデータのバンク1の2番目のブロックに書き込みを始める。
ホスト側バッファコントローラ302は、ライトポインタPW(H8)が指し示すホスト側インデックス番号NH8に関連付けられているバッファポインタ格納領域PB(8)に関連付けられているフリーポインタ・ポインタ格納領域PPF(8)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されていないので、ホスト側バッファコントローラ302は、ライトポインタPW(H8)が示すホスト側インデックス番号NH8に関連付けられているバッファポインタ格納領域PB(8)内のデータバッファ番号NDB1を取得する。図9に示すように、ホスト側バッファコントローラ302は、データバッファ番号NDB1が示すデータバッファ領域DB1にデータD8を格納する。図10に示すように、ホスト側バッファコントローラは、ライトポインタPWの値をインクリメントし、ライトポインタPWを9にする図。
ホスト側バッファコントローラ302は、データバッファ登録先頭ポインタPTの値がライトポインタPWの値より先を示しているかを判定する。データバッファ登録先頭ポインタPTの値がライトポインタPWの値より先を示していないので、ホスト側バッファコントローラ302は、定期的にデータバッファ登録先頭ポインタPTの値がライトポインタPWの値より先を示しているかを判定する。
続いて、バンク3の先頭ブロックへのデータD3、バンク2の先頭ブロックへのデータD2、バンク1の2番目のブロックへのデータD5、バンク3の2番目のブロックへのデータD7、バンク1の3番目のブロックへのデータD9、バンク2の2番目のブロックへのデータD6、バンク3の3番目のブロックへのデータD11の順に書き込みが終了する。データD3、D2、D5、D7、D9、D6の書き込みが終わった後の処理の説明は省略する。
図11は、バンク3の3番目のブロックへのデータD11の書き込みが終了した状態を示す図である。図11に示すようにライトポインタPWはH15である。データバッファ登録先頭ポインタPTはH15である。リードポインタPROはB0−0である。リードポインタPR1はB1−3である。リードポインタPR2はB2−2である。リードポインタPR3はB3−2である。
バッファポインタ格納領域PB(0)にデータバッファ番号NDB0が格納されている。バッファポインタ格納領域PB(4)にデータバッファ番号NDB4が格納されている。バッファポインタ格納領域PB(8)にデータバッファ番号NDB1が格納されている。バッファポインタ格納領域PB(10)にデータバッファ番号NDB2が格納されている。バッファポインタ格納領域PB(11)にデータバッファ番号NDB5が格納されている。バッファポインタ格納領域PB(12)にデータバッファ番号NDB7が格納されている。バッファポインタ格納領域PB(13)にデータバッファ番号NDB3が格納されている。バッファポインタ格納領域PB(14)にデータバッファ番号NDB6が格納されている。
バッファポインタ格納領域PB(1)、バッファポインタ格納領域PB(2)、バッファポインタ格納領域PB(3)、バッファポインタ格納領域PB(5)、バッファポインタ格納領域PB(6)、バッファポインタ格納領域PB(7)、バッファポインタ格納領域PB(9)、およびバッファポインタ格納領域PB(15)は空きである。
フリーポインタ・ポインタ格納領域PFP(0)〜PFP(15)は空きである。フリーポインタ格納領域PF(0)〜PF(1)は空きである。
データバッファ領域DB0にデータD0が格納されている。データバッファ領域DB1にデータD8が格納されている。データバッファ領域DB2にデータD10が格納されている。データバッファ領域DB3にデータD13が格納されている。データバッファ領域DB4にデータD4が格納されている。データバッファ領域DB5にデータD11が格納されている。データバッファ領域DB6にデータD14が格納されている。データバッファ領域DB7にデータD12が格納されている。
図12〜図16は、バンク3の3番目のブロックへのデータD11の書き込みが終わった後の処理の手順を説明するための図である。
バンク3制御部3033は、FM側バッファコントローラ303の記憶部303Aに格納されているデータバッファ登録先頭ポインタPT(H15)が指し示すホスト側インデックス番号NH15に関連付けられているバッファポインタ格納領域PB(15)が空きであるかを判定する。バッファポインタ格納領域PB(15)が空きなので、図12に示すように、バンク3制御部3033は、ホスト側インデックス番号NH15に関連付けられているバッファポインタPB(15)に、リードデータD11が格納されていたデータバッファ領域DB5を示すデータバッファ番号NDB5を格納する。
図13に示すように、バンク3制御部3033は、データバッファ登録先頭ポインタPTの値をインクリメントすることによって、データバッファ登録先頭ポインタPTをH0にする。
データバッファ登録先頭ポインタPTがライトポインタPWを示すようになったので、ホスト側バッファコントローラ302は、ライトポインタPW(H15)が指し示すホスト側インデックス番号NH15に関連付けられているバッファポインタ格納領域PB(15)に関連付けられているフリーポインタ・ポインタ格納領域PFP(15)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されていないので、ホスト側バッファコントローラ302は、ライトポインタPW(H15)が示すホスト側インデックス番号NH15に関連付けられているバッファポインタPB(15)内のデータバッファ番号NDB5を取得する。ホスト側バッファコントローラ302は、図14に示すように、データバッファ番号NDB5が示すデータバッファ領域DB5にデータD15を格納する。図15に示すように、ホスト側バッファコントローラは、ライトポインタPWの値をインクリメントし、ライトポインタPWを0にする。
バンク3制御部3033は、使用していたバッファポインタ格納領域PB(11)に関連付けられているフリーポインタ・ポインタ格納領域PFP(11)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されてないので、バンク3制御部3033は、使用していたバッファポインタ格納領域PB(11)を空きにする。
図16に示すように、バンク3制御部3033は、リードポインタPR3の値をインクリメントし、リードポインタPR3をB3−3にする。バンク3制御部3033は、リードポインタPR3の値B3−3が示すフラッシュメモリ側インデックスに関連付けられているバッファポインタPB(15)からデータバッファ番号NDB5を読み出す。バンク3制御部3033は、データバッファ番号NDB5が示すデータバッファ領域DB5からデータD15を読み出し、読み出したデータD15をバンク3の3番目のブロックに書き込む。
図17〜図21は、バンク2の3番目のブロックへのデータD10の書き込みが終わった後の処理の手順を説明するための図である。
バンク2制御部3032は、FM側バッファコントローラ303の記憶部303Aに格納されているデータバッファ登録先頭ポインタPT(H0)が指し示すホスト側インデックス番号NH0に関連付けられているバッファポインタ格納領域PB(0)が空きであるかを判定する。バッファポインタPB(0)が空きではないので、図17に示すように、バンク2制御部3032は、バッファポインタ格納領域PB(0)に関連付けられているフリーポインタ・ポインタ格納領域PFP(0)に、フリーポインタPF(0)を格納する。バンク2制御部3032は、フリーポインタPF(0)にリードデータD10が格納されていたデータバッファ領域DB10を示すデータバッファ番号NDB2を格納する。
図18に示すように、バンク2制御部3032は、データバッファ登録先頭ポインタPTの値をインクリメントすることによって、データバッファ登録先頭ポインタPTをH1にする。
データバッファ登録先頭ポインタPTがライトポインタPWの先を示すようになったので、ホスト側バッファコントローラ302は、ライトポインタPW(H0)が示すホスト側インデックス番号NH0に関連付けられているバッファポインタ格納領域PB(0)に関連付けられているフリーポインタ・ポインタ格納領域PFP(0)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されているので、ホスト側バッファコントローラ3−2は、フリーポインタ・ポインタ格納領域PFP(0)に格納されているフリーポインタ・ポインタが指し示すフリーポインタPF(0)内のデータバッファ番号NDB2を取得する。ホスト側バッファコントローラ302は、図19に示すように、データバッファ番号NDB2が示すデータバッファ領域DB2にデータD16を格納する。図20に示すように、ホスト側バッファコントローラは、ライトポインタPWの値を1インクリメントし、ライトポインタPWをH1にする。
バンク2制御部3032は、使用していたバッファポインタ格納領域PB(0)に関連付けられているフリーポインタ・ポインタ格納領域PFP(0)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されてないので、バンク2制御部3032は、使用していたバッファポインタ格納領域PB(0)を空きにする。
図21に示すように、バンク2制御部3032は、リードポインタPR2の値を1インクリメントし、リードポインタPR2をB2−3にする。バンク2制御部3032は、リードポインタPR2の値B2−3が示すフラッシュメモリ側インデックスに関連付けられているバッファポインタPB(14)からデータバッファ番号NDB6を読み出す。バンク2制御部3032は、データバッファ番号NDB6が示すデータバッファ領域DB6からデータD14を読み出し、読み出したデータD14をバンク2の3番目のブロックに書き込む。
図22〜図26は、バンク1の4番目のブロックへのデータD13の書き込みが終わった後の処理の手順を説明するための図である。
バンク1制御部3031は、FM側バッファコントローラ303の記憶部303Aに格納されているデータバッファ登録先頭ポインタPT(H1)が指し示すホスト側インデックス番号NH1に関連付けられているバッファポインタ格納領域PB(1)が空きであるかを判定する。バッファポインタ格納領域PB(1)が空きなので、図22に示すように、バンク1制御部3031は、ホスト側インデックス番号NH1に関連付けられているバッファポインタPB(1)に、リードデータD13が格納されていたデータバッファ領域DB13を示すデータバッファ番号NDB3を格納する。
図23に示すように、バンク1制御部3031は、データバッファ登録先頭ポインタPTの値を1インクリメントすることによって、データバッファ登録先頭ポインタPTをH2にする。
データバッファ登録先頭ポインタPTがライトポインタPWの先を示すようになったので、ホスト側バッファコントローラ302は、ライトポインタPW(H1)が指し示すホスト側インデックス番号NH1に関連付けられているバッファポインタPB(1)に関連付けられているフリーポインタ・ポインタ格納領域PFP(1)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されていないので、ホスト側バッファコントローラ302は、ライトポインタPW(H1)が指し示すホスト側インデックス番号NH1に関連付けられているバッファポインタ格納領域PB(1)内のデータバッファ番号NDB3を取得する。ホスト側バッファコントローラ302は、図24に示すように、データバッファ番号NDB3が示すデータバッファ領域DB3にデータD17を格納する。図25に示すように、ホスト側バッファコントローラ302は、ライトポインタPWの値を1インクリメントし、ライトポインタPWをH2にする。
バンク1制御部3031は、使用していたバッファポインタ格納領域PB(13)に関連付けられているフリーポインタ・ポインタ格納領域PFP(13)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されてないので、バンク1制御部3031は、使用していたバッファポインタPB(13)を空きにする。
図26に示すように、バンク1制御部3031は、リードポインタPR1の値をインクリメントし、リードポインタPR1をB1−0にする。バンク1制御部3031は、リードポインタPR1(B1−0)が示すFM側インデックス番号NB1-0に関連付けられているバッファポインタPB(1)からデータバッファ番号NDB3を読み出す。バンク1制御部3031は、データバッファ番号NDB3が示すデータバッファ領域DB3からデータD17を読み出し、読み出したデータD17をバンク1の5番目のブロックに書き込む。
図27〜図32は、バンク0の1番目のブロックへのデータD0の書き込みが終わった後の処理の手順を説明するための図である。
バンク0制御部3030は、FM側バッファコントローラ303の記憶部303Aに格納されているデータバッファ登録先頭ポインタPT(H2)が指し示すホスト側インデックス番号NH2に関連付けられているバッファポインタが空きであるかを判定する。バッファポインタが空きなので、図27に示すように、バンク0制御部3030は、ホスト側インデックス番号NH2に関連付けられているバッファポインタPB(2)に、リードデータD0が格納されていたデータバッファ領域DB0を示すデータバッファ番号NDB0を格納する。
図28に示すように、バンク0制御部3030は、データバッファ登録先頭ポインタPTの値をインクリメントすることによって、データバッファ登録先頭ポインタPTをH3にする。
データバッファ登録先頭ポインタPTがライトポインタPWの先を示すようになったので、ホスト側バッファコントローラは、ライトポインタPW(H2)が示すホスト側インデックス番号NH2に関連付けられているバッファポインタ格納領域PB(2)に関連付けられているフリーポインタ・ポインタ格納領域PFP(2)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタが格納されていないので、ホスト側バッファコントローラ302は、ライトポインタPW(H1)が示すホスト側インデックス番号NH1に関連付けられているバッファポインタ格納領域PB(2)内のデータバッファ番号NDB0を取得する。ホスト側バッファコントローラは、図29に示すように、データバッファ番号NDB0が示すデータバッファ領域DB3にデータD18を格納する。図30に示すように、ホスト側バッファコントローラは、ライトポインタPWの値をインクリメントし、ライトポインタPWをH3にする。
バンク0制御部3030は、使用していたバッファポインタ格納領域PB(0)に関連付けられているフリーポインタ・ポインタ格納領域PFP(0)にフリーポインタ・ポインタが格納されているかを判定する。フリーポインタ・ポインタPFP(0)が格納されているので、図31に示すように、バンク0制御部3030は、フリーポインタ格納領域PF(0)に格納されているデータバッファ番号ND16をバッファポインタ格納領域PB(0)内に移動する。バンク0制御部3030は、フリーポインタ・ポインタ格納領域PFP(0)を空きにする。
図32に示すように、バンク0制御部3030は、リードポインタPR0の値をインクリメントし、リードポインタPR0をB0−1にする。バンク0制御部3030は、リードポインタPR0の値B0−1が示すフラッシュメモリ側インデックスに関連付けられているバッファポインタPB(4)からデータバッファ番号NDB4を読み出す。バンク0制御部3030は、データバッファ番号NDB4が示すデータバッファ領域DB4からデータD4を読み出し、読み出したデータD4をバンク0の2番目のブロックに書き込む。
バンク0制御部3030、バンク1制御部3031、バンク2制御部3032、およびバンク3制御部3033は、バンク毎に独立に動作するため、先行する制御部と遅れる制御部とがある。上記のように先行した制御部が使用していたデータバッファ番号を次の転送用のバッファポインタ格納領域に格納することで、先行する制御部が遅い制御部を待つことなく処理を進め、バッファメモリを有効に使用し、効率的な書き込み制御を行うことが可能になる。ある一単位の転送でみると、早い制御部と遅い制御部があるが、繰り返し転送することで、制御部間の速度差が平均化され、遅い制御部に律足される場合に比べて短い時間で終了することができる。
フリーポインタがないと、遅い制御部により、その他の制御部を先に進めることができなくなる。これを防ぐために、データバッファを大きくする方法があるが、この場合、全バンク数分追加する必要がある。フリーポインタを用意することで、遅れたバンクだけがフリーバンクを使用でき効率が高くなる。
上記実施形態は、記憶装置がH−HDDとして実現されていたが、記憶装置がSSD(Solid State Drive)として実現されていても良い。
NANDフラッシュメモリ203にライトする場合を示しているが、逆方向にすることでリードアクセスも実現できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
11…ホスト装置、12…ストレージデバイス(記憶装置)、201…制御部(コントローラ)、202…揮発性メモリ(バッファメモリ)、203…NANDフラッシュメモリ(不揮発性メモリ)、206…ハードディスク、302…ホスト側バッファコントローラ、303…フラッシュメモリ側バッファコントローラ、3030…バンク0制御部、3031…バンク1制御部、3032…バンク2制御部、3033…バンク3制御部。
Claims (6)
- 複数のデータバッファ領域が設定されるバッファメモリと、
ホストから送信されたデータを順に前記複数のデータバッファ領域に書き込む第1の書き込み制御手段と、
複数のバンクが設定される不揮発性メモリと、
前記複数のバンクにそれぞれ対応する複数のバンク書き込み手段を有し、各前記バンク書き込み手段は前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出し、読み出したデータを前記不揮発性メモリの対応するバンクに書き込む第2の書き込み制御手段と
を具備し、
前記複数のバンク書き込み手段の内の一つのバンク書き込み手段が前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれている第1のデータを読み出した場合、前記第1の書き込み制御手段は、前記第1のデータが読み出されたデータバッファ領域に前記ホストから送信されたデータを書き込み、
各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に、前記複数のバッファメモリの内の第1のデータバッファ領域から第2のデータを読み出し、前記第2のデータを対応するバンクに書き込む
記憶装置。 - 前記バッファメモリに第1の数の複数の第1のホスト側インデックス番号が格納され、前記第1の数は前記複数のバンクの数である第2の数の倍であり、
前記バッファメモリに前記第1の数の複数の第1の不揮発性メモリ側インデックス番号が格納され、前記複数の第1の不揮発性メモリ側インデックス番号は前記第2の数の複数のブロックに分割して格納され、各ブロックに格納されている複数の第2の不揮発性メモリ側インデックス番号は前記複数のバンク書き込み手段のそれぞれに対応し、
前記バッファメモリに、前記第1の数の複数のバッファポインタ格納領域が設定され、前記複数のバッファポインタ格納領域の内の一部のバッファポインタ格納領域には、前記複数のデータバッファ領域の内の一つのデータバッファ領域を指し示すデータバッファ番号が格納され、各第1のホスト側インデックス番号および各第1の不揮発性メモリ側インデックス番号は、それぞれバッファポインタ格納領域に関連付けられ、
前記第1の書き込み制御手段は、前記複数の第1のホスト側インデックス番号の内の第2のホスト側インデックス番号を指し示すための第1のライトポインタが格納される第1の記憶部を有し、
前記第1の書き込み制御手段は、前記第1のライトポインタに基づいて、前記第2のホスト側インデックス番号に関連付けられているバッファポインタ格納領域に格納されているデータバッファ番号が指し示すデータバッファ領域に第3のデータを書き込み、前記第3のデータを書き込んだ後に、前記第1のライトポインタの値を前記第2のホスト側インデックス番号の次のホスト側インデックス番号を示す値にし、
前記第2の書き込み制御手段は、前記第2のホスト側インデックス番号を指し示すための第1の登録ポインタが格納される第2の記憶部を有し、
各バンク書き込み手段は、前記複数のブロックの内の第1のブロック内の対応する第3の不揮発性メモリ側インデックス番号を指し示すための第1のリードポインタが格納される第3の記憶部を有し、
各バンク書き込み手段は、前記第1のリードポインタによって指し示される第3の不揮発性メモリ側インデックス番号が指し示す第1のバッファポインタ格納領域に格納されているデータバッファ番号が指し示すデータバッファ領域から第4のデータを読み込み、前記第4のデータを対応するバンクに書き込み、前記第4のデータが格納されていたデータバッファ領域に対応するデータバッファ番号を前記第1のバッファポインタ格納領域に格納し、前記第1の登録ポインタの値を前記第2のホスト側インデックス番号の次のホスト側インデックス番号を指し示す値にし、前記第1のバッファポインタ格納領域を空きにし、前記第1のリードポインタの値を前記第1のブロックの次のブロック内の対応する不揮発性メモリ側インデックス番号を指し示す値にする
請求項1に記載の記憶装置。 - 各バッファポインタ格納領域には、フリーポインタ・ポインタ格納領域がそれぞれ関連付けられ、各フリーポインタ・ポインタ格納領域にはフリーポインタ・ポインタを格納することが可能であり、前記フリーポインタ・ポインタはフリーポインタ格納領域を指し示し、前記フリーポインタ格納領域には、データバッファ番号を格納することが可能であり、
各バンク書き込み手段は、前記バッファポインタ格納領域にデータバッファ番号が格納されている場合、前記バッファポインタ格納領域に関連付けられている前記フリーポインタ・ポインタ格納領域に前記フリーポインタ・ポインタを格納し、
前記第1の書き込み制御手段は、前記第1のライトポインタが指し示すバッファポインタ格納領域に関連付けられているフリーポインタ・ポインタ格納領域に前記フリーポインタ・ポインタが格納されている場合、前記フリーポインタ・ポインタが指し示すフリーポインタ格納領域に格納されているデータバッファ番号が指し示すデータバッファ領域に第3のデータを書き込み、
各バンク書き込み手段は、前記バッファポインタ格納領域に関連付けられているフリーポインタ・ポインタ格納領域に前記フリーポインタ・ポインタが格納されている場合に、前記第1のフリーポインタ格納領域に格納されているデータバッファ番号を前記第1のバッファポインタ格納領域に格納し、前記フリーポインタ格納領域を空きにする
請求項2に記載の記憶装置。 - ディスク記憶媒体と、
前記不揮発性メモリを前記ディスク記憶媒体のキャッシュとして利用するキャッシュ制御手段と
を更に具備する請求項1に記載の記憶装置。 - バッファメモリと、不揮発性メモリとが接続されるコントローラであって、
ホストから送信されたデータを順に前記バッファメモリに設定される複数のデータバッファ領域に書き込む第1の書き込み制御手段と、
前記不揮発性メモリに設定される複数のバンクにそれぞれ対応する複数のバンク書き込み手段を有し、各前記バンク書き込み手段は前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出し、読み出したデータを前記不揮発性メモリの対応するバンクに書き込む第2の書き込み制御手段と
を具備し、
前記複数のバンク書き込み手段の内の一つのバンク書き込み手段が前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出した場合、前記第1の書き込み制御手段は、前記データが読み出されたデータバッファ領域に前記ホストから送信されたデータを書き込み、
各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に前記複数のバッファメモリの内の第1のデータバッファ領域からデータを読み出し、前記読み出されたデータを対応するバンクに書き込む
コントローラ。 - バッファメモリと、不揮発性メモリとが接続される記憶装置のデータ書き込み方法であって、
第1の書き込み制御手段によってホストから送信されたデータを順に前記バッファメモリに設定される複数のデータバッファ領域に書き込み、
第2の書き込み制御手段に設けられた複数のバンク書き込み手段によって前記複数のデータバッファ領域に格納されているデータを前記不揮発性メモリに設定される複数のバンクにそれぞれ書き込み、
前記複数のバンク書き込み手段の内の一つのバンク書き込み手段が前記複数のデータバッファ領域の内の一つのデータバッファ領域に書き込まれているデータを読み出した場合、前記第1の書き込み制御手段によって前記データが読み出されたデータバッファ領域に前記ホストから送信されたデータを書き込み、
各バンク書き込み手段は、他のバンク書き込み手段によるデータの書き込みの処理状況とは独立に前記複数のバッファメモリの内の第1のデータバッファ領域からデータを読み出し、前記読み出されたデータを対応するバンクに書き込む
データ書き込み制御方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012164953A JP2014026388A (ja) | 2012-07-25 | 2012-07-25 | 記憶装置、コントローラ、および書き込み制御方法 |
US13/777,992 US20140029369A1 (en) | 2012-07-25 | 2013-02-26 | Memory device, controller, and write control method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012164953A JP2014026388A (ja) | 2012-07-25 | 2012-07-25 | 記憶装置、コントローラ、および書き込み制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014026388A true JP2014026388A (ja) | 2014-02-06 |
Family
ID=49994782
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012164953A Pending JP2014026388A (ja) | 2012-07-25 | 2012-07-25 | 記憶装置、コントローラ、および書き込み制御方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20140029369A1 (ja) |
JP (1) | JP2014026388A (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9342402B1 (en) * | 2014-01-28 | 2016-05-17 | Altera Corporation | Memory interface with hybrid error detection circuitry for modular designs |
WO2015174285A1 (ja) * | 2014-05-16 | 2015-11-19 | ソニー株式会社 | 情報処理装置、情報処理方法、および電子機器 |
US10613763B2 (en) * | 2016-04-21 | 2020-04-07 | Adesto Technologies Corporation | Memory device having multiple read buffers for read latency reduction |
US11481134B1 (en) * | 2021-05-24 | 2022-10-25 | Sap Se | Adaptive caching for hybrid columnar databases with heterogeneous page sizes |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4916605A (en) * | 1984-03-27 | 1990-04-10 | International Business Machines Corporation | Fast write operations |
US4949301A (en) * | 1986-03-06 | 1990-08-14 | Advanced Micro Devices, Inc. | Improved pointer FIFO controller for converting a standard RAM into a simulated dual FIFO by controlling the RAM's address inputs |
US8296337B2 (en) * | 2006-12-06 | 2012-10-23 | Fusion-Io, Inc. | Apparatus, system, and method for managing data from a requesting device with an empty data token directive |
-
2012
- 2012-07-25 JP JP2012164953A patent/JP2014026388A/ja active Pending
-
2013
- 2013-02-26 US US13/777,992 patent/US20140029369A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20140029369A1 (en) | 2014-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10761777B2 (en) | Tiered storage using storage class memory | |
US9720627B2 (en) | Data management for a data storage device | |
US10908847B2 (en) | Volatility management for non-volatile memory device | |
US8769232B2 (en) | Non-volatile semiconductor memory module enabling out of order host command chunk media access | |
CN101334708B (zh) | 具有写屏障敏感命令和写屏障不敏感命令的存储设备 | |
CN111033477A (zh) | 逻辑到物理映射 | |
US20180275921A1 (en) | Storage device | |
US20140095767A1 (en) | Storage device trimming | |
US9348747B2 (en) | Solid state memory command queue in hybrid device | |
US11119701B2 (en) | Memory system and method of controlling nonvolatile memory by controlling the writing of data to and reading of data from a plurality of blocks in the nonvalatile memory | |
US20120151125A1 (en) | Data processing method for nonvolatile memory system | |
KR102585883B1 (ko) | 메모리 시스템의 동작 방법 및 메모리 시스템 | |
TW201007735A (en) | Block management method for flash memory and storage system and controller using the same | |
CN109117085B (zh) | 具有nand缓冲器的nand闪速存储设备 | |
US20150074336A1 (en) | Memory system, controller and method of controlling memory system | |
WO2019182824A1 (en) | Hybrid memory system | |
US11334272B2 (en) | Memory system and operating method thereof | |
EP3769201A1 (en) | Hybrid memory system | |
US10528285B2 (en) | Data storage device and method for operating non-volatile memory | |
JP2014026388A (ja) | 記憶装置、コントローラ、および書き込み制御方法 | |
US10303368B2 (en) | Storage device that determines data attributes based on continuity of address ranges | |
EP3769202B1 (en) | Hybrid memory system | |
US11269559B2 (en) | Data processing device | |
US11556276B2 (en) | Memory system and operating method thereof | |
WO2015066234A1 (en) | Data storage device startup |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD07 | Notification of extinguishment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7427 Effective date: 20140319 |