説明

データ記憶装置、メモリ制御装置及び方法

【課題】フラッシュメモリに書き込み要求のデータを書き込むための処理効率を向上できるデータ記憶装置を提供する。
【解決手段】書き込みデータ処理モジュール13は、ホスト装置23からの書き込みデータが所定サイズ未満の場合に、フラッシュメモリ22から書き込みデータと同一のアドレスで管理されている所定サイズのデータを読み出し、バッファメモリ内で書き込みデータを含む所定サイズのデータをセットするためのマージ処理を実行する。さらに、書き込みデータ処理モジュール13は、フラッシュメモリ22からのデータの読み出し時または読み出し完了時に、バッファメモリ内での旧書き込みデータと同一のアドレスで管理される新書き込みデータが存在した場合に、新書き込みデータをマージ対象データとしてバッファメモリ内でのマージ処理を実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを使用するデータ記憶装置、メモリ制御装置及び方法に関する。
【背景技術】
【0002】
従来から、データ記憶装置として、書き換え可能な不揮発性メモリであるNAND型フラッシュメモリ(以下、単にフラッシュメモリと表記する場合がある)を記憶媒体とするSSD(solid state drive)が開発されている。
【0003】
SSDでは、フラッシュメモリに対して、クラスタ(cluster)と呼ぶ論理的なアクセス単位でデータの書き込み、読み出し動作が実行される。即ち、クラスタは、フラッシュメモリに一度にアクセスできるデータサイズの単位である。通常では、1クラスタは、物理的なアクセス単位であるセクタを複数セクタ分まとめたものであり、例えば8セクタ分から構成される。以下、クラスタ単位のデータをクラスタデータと呼び、セクタ単位のデータをセクタデータと呼ぶことがある。
【0004】
一方、ホストからは、クラスタ未満サイズのデータが書き込み要求として転送されることがある。なお、ホストからはセクタ単位のデータが転送されて、SSDのバッファメモリに格納される。SSDは、セクタデータをクラスタデータにまとめてフラッシュメモリに書き込む。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2004−62328号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
ホストからの書き込み要求としてクラスタ未満サイズのデータがある場合に、当該データの論理アドレスが既存の記録データ(フラッシュメモリに書き込まれたデータ)と重複するような場合がある(WAW:Write After Write)。即ち、フラッシュメモリに書き込まれたクラスタデータの一部を書き換える動作である。この場合、いわゆるRMW(read modify write)動作と呼ぶ処理が必要となる。このため、フラッシュメモリからデータを読み出す処理、クラスタデータにまとめる処理、及びフラッシュメモリに書き込む処理などの一連の処理プロセスが発生し、フラッシュメモリに書き込み要求のデータを書き込むための処理効率の向上が課題である。
【0007】
本発明の目的は、フラッシュメモリに書き込み要求のデータを書き込むための処理効率を向上できるデータ記憶装置を提供することにある。
【課題を解決するための手段】
【0008】
実施形態によれば、データ記憶装置は、所定サイズのデータを書き込み単位とするフラッシュメモリと、バッファメモリと、コントローラと、書き込みデータ処理手段とを具備する。バッファメモリは、ホスト装置からの書き込みデータを順次格納する。コントローラは、前記バッファメモリに格納された前記所定サイズのデータを前記フラッシュメモリに書き込む。書き込みデータ処理手段は、ホスト装置からの書き込みデータが前記所定サイズ未満の場合に、前記フラッシュメモリから前記書き込みデータと同一のアドレスで管理されている前記所定サイズのデータを読み出し、前記バッファメモリ内で前記書き込みデータを含む前記所定サイズのデータをセットするためのマージ処理を実行する。さらに、書き込みデータ処理手段は、前記フラッシュメモリからのデータの読み出し時または読み出し完了時に、前記バッファメモリ内での旧書き込みデータと同一のアドレスで管理される新書き込みデータが存在した場合に、前記新書き込みデータをマージ対象データとして前記バッファメモリ内でのマージ処理を実行する。
【図面の簡単な説明】
【0009】
【図1】実施形態に関するデータ記憶装置の構成を説明するためのブロック図。
【図2】実施形態に関するライトデータ処理モジュールの構成を説明するためのブロック図。
【図3】実施形態に関するWBEバッファの格納情報を示す図。
【図4】実施形態に関するWBEコントローラによるプロセスを説明するための図。
【図5】実施形態に関する穴埋めリード用バッファにクラスタデータ転送中のマージ処理を説明するための図。
【図6】実施形態に関するクラスタデータの転送中のマージ処理を説明するためのフローチャート。
【図7】実施形態に関する穴埋めリード用バッファにクラスタデータ転送完了時のマージ処理を説明するための図。
【図8】図5の実施形態に関する穴埋めリード処理とマージ処理との第1の関連を説明するための図。
【図9】図5の実施形態に関する穴埋めリード処理とマージ処理との第2の関連を説明するための図。
【発明を実施するための形態】
【0010】
以下図面を参照して、実施形態を説明する。
【0011】
[データ記憶装置の構成]
図1は、実施形態のデータ記憶装置の要部を示すブロック図である。
【0012】
実施形態のデータ記憶装置は、NAND型フラッシュメモリ(フラッシュメモリ)を記憶媒体として使用するSSD(solid state drive)である。図1に示すように、SSDは大別して、フラッシュメモリコントローラ10と、マイクロプロセッサ(CPU)19と、メモリ(DRAM:dynamic random access memory)20と、ブート用ROM(read only memory)21と、フラッシュメモリ22とを有する。
【0013】
ブート用ROM21はSSDに対して外部のホストデバイス23からのアクセスを可能とするための起動用プログラムが格納されている。フラッシュメモリコントローラ10は、CPU19からの命令に応じて、フラッシュメモリ22とホストデバイス23間のデータ転送を制御する。システム電源の投入後に、ブート用ROM21からのプログラムがCPU19の内部メモリに転送されると、フラッシュメモリコントローラ10はソフトウエア(CPU19)からの制御が可能となる。
【0014】
フラッシュメモリコントローラ10は、コントロールバス11と、ホストインターフェースコントローラ(ホストI/Fコントローラ)12と、ライトデータ処理モジュール13と、リードデータ処理モジュール14と、アドレス管理モジュール15と、ECC処理及びログ生成モジュール16と、NANDコントローラ(以下単にコントローラ)17と、データバス18とを有する。
【0015】
ホストI/Fコントローラ12は、ホストデバイス23との間でデータ又はコマンドの転送を制御する。ホストデバイス23は、例えばパーソナルコンピュータとSSDとを接続するインターフェース(例えば、SATA(Serial ATA)規格のインターフェース)である。ライトデータ処理モジュール13は、後述するように、ホストI/Fコントローラ12から転送されるデータ(ライトデータ)をフラッシュメモリ22に書き込むための処理を実行する。リードデータ処理モジュール14は、フラッシュメモリ22から読み出されるデータ(リードデータ)をホストI/Fコントローラ12に転送するための処理を実行する。
【0016】
アドレス管理モジュール15は、論理アドレスと物理アドレス間を変換するアドレス変換テーブル(またはLUT:look up table)を有し、フラッシュメモリ22に対する物理的な書き込み先(アドレス)を管理している。ECC処理及びログ生成モジュール16は、フラッシュメモリ22からの読み出し時には、データのエラー検出訂正(ECC:error checking and correcting)処理を実行する。また、ECC処理及びログ生成モジュール16は、フラッシュメモリ22への書き込み時には、エラー訂正符号をクラスタデータに付加する。また、モジュール16は、クラスタデータに付加する属性情報などのログを生成する。コントローラ17は、フラッシュメモリ22に対してクラスタデータの書き込み、または読み出しを実行する。
【0017】
図2は、ライトデータ処理モジュール13の要部を示すブロック図である。
【0018】
図2に示すように、ライトデータ処理モジュール13は、ライトバッファメモリ(ライトバッファと表記する場合がある)30と、WBE管理情報バッファメモリ(WBEバッファと表記する場合がある)31と、WBEステート遷移コントローラ(WBEコントローラと表記する場合がある)32と、キュー(Queue)管理モジュール33と、穴埋めリード完了待ちキュー(Queue)モジュール34と、穴埋めリード用バッファメモリ(穴埋めリード用バッファと表記する場合がある)35とを有する。
【0019】
ライトバッファ30は、ホストI/Fコントローラ12で受信したデータ(セクタ単位)を格納する。WBEバッファ31は、CPU19の指定により、そのデータの格納先アドレス(WBA)をWBE(write buffer entry)管理情報(以下、単にWBEと表記する場合がある)で管理する。WBEコントローラ32は、後述するように、WBEのステート遷移を制御する。
【0020】
キュー(Queue)管理モジュール33、穴埋めリード完了待ちキュー(Queue)モジュール34、及び穴埋めリード用バッファ35はそれぞれ、後述するように、セクタ単位のデータをクラスタ単位のデータ(クラスタデータ)にまとめる併合処理(マージ処理)を行なうための構成である。
【0021】
[データ書き込み処理]
以下、本実施形態のフラッシュメモリコントローラ10において、主としてライトデータ処理モジュール13の動作によるデータ書き込み処理を説明する。
【0022】
まず、ホストデバイス23から転送される書き込み要求のデータ(ライトデータ)は、ホストI/Fコントローラ12で受信されて、ライトデータ処理モジュール13に送られる。ホストデバイス23は、論理ブロックアドレス(LBA)によりアクセスし、セクタ単位のライトデータを転送する。なお、1クラスタを8セクタ構成とした場合に、LBAを8で割った商がLCAとなる。
【0023】
ライトデータ処理モジュール13は、要するに、当該セクタ単位のライトデータを他のセクタ単位のデータと併合(マージ)して、クラスタ単位のデータ(クラスタデータ)にセットし(まとめ直し)、ECC処理及びログ生成モジュール16及びコントローラ17に転送する。コントローラ17は、フラッシュメモリ22に対して、1回のアクセスでクラスタデータを書き込む制御を実行する。
【0024】
ここで、アドレス管理モジュール15は、論理と物理のアドレス変換テーブル(LUT)を有し、フラッシュメモリ22に対する物理的な書き込み先(物理アドレス)を管理している。書き込み対象のクラスタデータは、論理アドレスとしては、論理クラスタアドレス(LCA:Logical Cluster Address)により管理されている。ライトデータ処理モジュール13は、受信したセクタデータ(ライトデータ)のLCAを認識した時点で、アドレス管理モジュール15に対してアドレス解決処理を要求する。
【0025】
アドレス解決処理とは、クラスタデータにまとめる(セットする)ためのマージ元データ(併合元データ)の位置(アドレス)を求める処理である。具体的には、アドレス管理モジュール15は、当該ライトデータに対応するLCAの最新位置(端的には1世代前のクラスタデータ)がフラッシュメモリ22上に存在する場合に、その最新位置(物理アドレス)をライトデータ処理モジュール13に返信する(解決処理結果1)。この最新位置は、図3に示すWBEバッファ31に最新位置情報42としてセットされる。また、アドレス管理モジュール15は、当該ライトデータに対応するLCAと同一のLCAを有する別のエントリを示すWBEが示された場合、後述するように、WBE内でライトバッファ30のアドレス(WBA)のアドレス付け替え処理を行う(解決処理結果2)。なお、アドレス付け替え後に、未書き込み部が残った場合には、ライトデータ処理モジュール13は、後述する解決処理結果3に応じた処理を行う。
【0026】
ここで、ライトデータ処理モジュール13は、書き込み要求のライトデータが未書き込みLCAに対応する場合には、それを示すコードをアドレス管理モジュール15から受信する(解決処理結果3)。この場合には、クラスタデータにまとめるためのマージ元データは存在しない。このため、ライトデータ処理モジュール13は、ユーザ定義のデータ(ダミーデータ、例えばオール0)をマージ元データとして使用し、クラスタ単位の空き領域を埋める処理を行なう。また、ホストデバイス23は、書き戻し処理により、当該ダミーデータを埋める処理を行なう方法でもよい。なお、本実施形態では、書き込み要求のライトデータが未書き込みLCAに対応する場合の説明は省略する。
【0027】
以下、図3と図4を参照して、本実施形態のライトデータ処理モジュール13の処理を説明する。
【0028】
ホストデバイス23から転送される書き込み要求のライトデータが、クラスタサイズ未満の場合には、ライトデータ処理モジュール13は、前述したように、アドレス管理モジュール15からのアドレス解決処理結果に応じて、マージ処理を実行してクラスタデータにセットするための処理を行う。即ち、ライトデータ処理モジュール13は、当該ライトデータに対応するLCAの1世代前のクラスタデータがフラッシュメモリ22上に存在する場合に、フラッシュメモリ22から当該クラスタデータを読み出す。ライトデータ処理モジュール13は、読み出したクラスタデータをライトバッファ30に格納する。
【0029】
ライトバッファ30での格納先アドレス(WBA:Write Buffer Address)は、WBEバッファ31で管理される。図3は、WBEバッファ31の格納情報を示す。図3に示すように、WBEバッファ31は、WBE番号(WBE#X、WBE#Y)毎に、LCA領域40、セクタ情報領域41、最新位置情報42、セクタバリッドフラグ(SECT-VF)とWBEステータス(WBE-Status)の領域43、セクタ管理情報領域44、予備管理領域(Fw管理)45を有する。
【0030】
LCA領域40は、LCA(LBAの48ビットを右に3ビットシフトした下位32ビットで示す)を格納する。セクタ情報領域41は、セクタデータのWBAを示す。SECT-VFは、8セクタの中で有効なセクタデータのWBAを示す。即ち、ホストデバイス23から転送されるライトデータは、最終セクタアドレスによりセクタ数が認識される。このセクタ数に対応する有効なWBAは、セクタバリッドフラグ(SECT-VF)により指示される。WBE-Statusは、図4で示す状態50〜55示す。セクタ管理情報領域44は、リードコマンドやライトコマンドの種類を示す。
【0031】
図4は、WBEコントローラ32によるデータ処理のステート遷移の様子を示す。
【0032】
図4に示すように、ホストI/Fコントローラ12により、ホストデバイス23からのデータ受信処理が開始されると、WBEコントローラ32は、キュー管理モジュール33のWBE invalid Queueから新規のWBEを選択する。WBEコントローラ32は、新規のWBEにあるライトバッファ30の格納先アドレスに格納していく。WBEコントローラ32は並行して、invalidのステートにあった状態を、データ受信中のエントリ状態50(current)に遷移させる。WBEコントローラ32は、エントリ状態50(current)に遷移したWBEを、キュー管理モジュール33のWBE Valid Queueにセットする。WBEコントローラ32は、前述したように、アドレス管理モジュール15に対してアドレス解決処理を要求し、当該アドレス解決処理結果(3は除く1、2)を受け付ける。
【0033】
WBEコントローラ32は、LCAが変化するまで、エントリ状態50(current)に滞留し、LCAが変化したときにデータ受信完了後のエントリ状態51(fresh)に遷移する。WBEコントローラ32は、エントリ状態51(fresh)に遷移した時点で、そのWBEのセクタデータの受信状態を、WBEバッファ31のセクタバリッドフラグ(SECT-VF)で確認する。
【0034】
WBEコントローラ32は、セクタデータ(ライトデータ)の受信状態に応じて、ライトバッファ30に格納されたデータがクラスタサイズに満たない場合には、エントリ状態53(read)に遷移する。WBEコントローラ32は、エントリ状態53(read)に遷移するとき、穴埋め処理(マージ処理)のためのクラスタデータのリードコマンド(穴埋めリードコマンド)を発行する。これにより、穴埋めリード用バッファ35に格納されたデータをマージする。
【0035】
一方、セクタデータの受信状態がクラスタサイズの場合には、クラスタデータがセットされた状態54(ready)に遷移する。この状態54(ready)のWBEのクラスタデータは、ECC処理及びログ生成モジュール16及びコントローラ17に転送される。コントローラ17は、フラッシュメモリ22に対して、1回のアクセスで当該クラスタデータを書き込む。
【0036】
フラッシュメモリ22にクラスタデータが書き込まれた後に、当該WBEの無効化が可能になると、アドレス管理モジュール15からライトデータ処理モジュール13に通知される。これにより、当該WBEは、キュー管理モジュール33のWBE invalid Queueにセットされて(状態55)、新たなWBEとして再利用される。
【0037】
次に、図5から図9を参照して、エントリ状態53(read)において、バッファメモリ30内でのマージ処理(併合処理)を説明する。ここで、マージ元エントリ(古いエントリ)をWBE#Xとし、マージ対象エントリ(新しいエントリ)をWBE#Yとする。
【0038】
本実施形態は、同一LCAの1世代前のクラスタデータの穴埋めリード処理を実行しているときに、当該ライトデータに対応するLCAと同一のLCAを有する新たなエントリを示すWBEが示された場合のマージ処理を実行する。この場合、バッファメモリ30内において、古いエントリWBE#Xを新しいエントリWBE#Yに更新し、アドレス(WBA)のアドレス付け替え処理を行う。
【0039】
ライトバッファ30内でのマージ処理は、マージ対象エントリ(新しいエントリ)の有効でないセクタデータについて、マージ元エントリ(古いエントリ)のセクタデータのバッファアドレス(WBA)の付け替えを行うことで、エントリ(WBE)に関連付けされたデータを論理的に入れ替える処理である。
【0040】
図8及び図9は、図2に示す穴埋めリード完了待ちキュー(Queue)34と、図5に示すマージ処理との関連を示す。
【0041】
図8及び図9に示すように、穴埋めリード処理は、フラッシュメモリ22からクラスタ単位のデータ(クラスタデータ)を穴埋めリード用バッファ35に格納し、アドレスの付け替え処理によりライトバッファ30のエントリ(WBE)に関連付けることで完了する。
【0042】
図8に示すように、アドレスの付け替え処理を実行する場合、WBEコントローラ32は、マージ元のエントリ(古いエントリWBE#15とする)に対して穴埋めリード処理によりクラスタデータの転送が終了しているか否かをチェックする(処理901)。ここでは、同じLCA(100)のマージ対象エントリ(新しいエントリ)をWBE#20として、古いエントリWBE#15に対するアドレスの付け替え処理(処理902)を実行する場合である。即ち、処理902は、LCA(100)を重複して受け取り、WBE#20はWBE#15がマージ元であることを認識していることを意味します。
【0043】
WBEコントローラ32は、穴埋めリード完了待ちキュー34を参照して、穴埋めリードコマンドの発行または完了のチェックを実行する。この場合、当該穴埋めリードTagIDおよびそれに対応するWBE#を消去する。穴埋めリード完了待ちキュー34は、穴埋めリードコマンドの発行順に、穴埋めリード処理の完了を待つエントリ番号(WBE#)を記録する。WBEコントローラ32は、クラスタデータの転送が完了したら、穴埋めリード完了待ちキュー34の当該穴埋めリードコマンドを消去する。
【0044】
図8に示すように、WBEコントローラ32は、古いエントリWBE#15に対するクラスタデータの転送が未終了であるため、先行してライトバッファ30内でのマージ処理を実行する。但し、新しいエントリWBE#20の有効でないセクタデータについて、古いエントリWBE#15のセクタデータのバッファアドレス(WBA)の付け替えを行うアドレスの付け替え処理(処理902)は、穴埋めリード用バッファ35と古いエントリWBE#15間でのアドレス付け替え処理を同時には実行できない。
【0045】
次に、図9に示すように、WBEコントローラ32は、穴埋めリード完了待ちキュー34の古いエントリWBE#15を、新しいエントリWBE#20に更新し、エントリ状態53(read)に遷移する。即ち、WBEコントローラ32は、穴埋めリードコマンドを発行し、新しいエントリWBE#20に対するライトバッファ30内でのマージ処理を実行する(処理904)。一方、WBEコントローラ32は、古いエントリWBE#15をキュー管理モジュール33のWBE invalid Queueにセットし、新たなWBEとして再利用する(処理903)。
【0046】
さらに図5から図7を参照して、穴埋めリード処理によるクラスタデータの転送中と転送完了時とに分けて、ライトバッファ30内でのマージ処理を説明する。
【0047】
図5と図6は、穴埋めリード処理によりクラスタデータの転送中でのマージ処理を示す図である。ここで、図5は、図6に示すブロック104〜111の処理に対応します。
【0048】
まず、WBEコントローラ32は、古いエントリWBE#Xのデータ受信状態がクラスタサイズの場合には、図4に示すように、クラスタデータがセットされた状態(ready)に遷移する(ブロック101のNO)。この場合、コントローラ17は、フラッシュメモリ22に対して1回のアクセスで当該クラスタデータを書き込む。
【0049】
WBEコントローラ32は、クラスタサイズに満たない場合には、穴埋め処理(マージ処理)のための穴埋めリードコマンドを発行し、図5に示すread状態60に遷移する(ブロック102)。ここで、古いエントリWBE#X及び新しいエントリWBE#Yは、同一のLCA(X0)である。コントローラ17は、フラッシュメモリ22からLCA(X0)のクラスタデータを読み出し(状態61)、穴埋めリード用バッファ35に格納する。
【0050】
WBEコントローラ32は、穴埋めリード完了待ちキュー34を参照し、マージ元のエントリ番号WBE#Xのリードコマンドが存在すれば、当該クラスタデータが転送中と判定する(ブロック103のNO)。この時点で、同一のLCA(X0)の新しいエントリWBE#Yのデータを受信すると(状態70)、WBEコントローラ32は、穴埋めリード完了待ちキュー34を参照し、古いエントリWBE#Xの存在を確認する(ブロック104のYES)。
【0051】
WBEコントローラ32は、古いエントリWBE#X及び新しいエントリWBE#Yのアドレス付け替え処理を実行する(ブロック105)。これにより、穴埋めリード完了待ちキュー34の古いエントリWBE#Xは、新しいエントリWBE#Yに更新される(ブロック106)。即ち、ライトバッファ30内では、新しいエントリWBE#Yに対するライトバッファ30内でのマージ処理が実行される(状態63)。但し、この間,クラスタデータの転送が完了しても、穴埋め完了処理を実行しない。
【0052】
WBEコントローラ32は、マージ処理完了後に、新しいエントリWBE#Yをエントリ状態63(read)に遷移し、古いエントリWBE#Xをキュー管理モジュール33のWBE invalid Queueにセットする(ブロック107、状態64)。
【0053】
次に、WBEコントローラ32は、穴埋めリード完了待ちキュー34を参照し、エントリ番号WBE#Yのクラスタデータが転送完了であるか否かを判定する(ブロック108)。クラスタデータの転送完了後であれば、WBEコントローラ32は、穴埋めリード完了待ちキュー34を更新し、WBE#Yを消去する(ブロック109)。
【0054】
WBEコントローラ32は、古いエントリWBE#Xの穴埋め処理を完了し、アドレス付け替え処理を実行する(ブロック110)。WBEコントローラ32は、マージ処理完了後に、新しいエントリWBE#Yをクラスタデータがセットされた状態(ready)に遷移する(ブロック111)。
【0055】
次に、図6と図7を参照して、穴埋めリード処理によるクラスタデータの転送完了時でのマージ処理を説明する。ここで、図7は、図6に示すブロック112〜116の処理に対応します。なお、処理117はWAW処理が発生しない場合である。
【0056】
WBEコントローラ32は、クラスタデータ転送完了を待って、穴埋めリード完了待ちキュー34を更新し、エントリWBE#Xを消去する(ブロック112)。WBEコントローラ32は、エントリWBE#Xの穴埋め処理を完了し、アドレス付け替え処理を実行する(ブロック113)。この時点で、同一のLCA(X0)の新しいエントリWBE#Yのデータを受信すると(状態70)、WBEコントローラ32は、古いエントリWBE#X及び新しいエントリWBE#Yのアドレス付け替え処理を実行する(ブロック114のYES,115)。
【0057】
WBEコントローラ32は、マージ処理完了後に、新しいエントリWBE#Yをクラスタデータがセットされた状態(ready)に遷移し、古いエントリWBE#Xをキュー管理モジュール33のWBE invalid Queueにセットする(ブロック116)。また、WBEコントローラ32は、エントリWBE#Yのデータを受信しない場合、エントリWBE#Xをクラスタデータがセットされた状態(ready)に遷移する(ブロック117)。
【0058】
以上のように本実施形態によれば、ホストデバイス23から転送される書き込み要求のライトデータがクラスタサイズ未満の場合には、ライトデータ処理モジュール13は穴埋めリード処理により、クラスタ単位のデータにセットする。このため、フラッシュメモリ22に対して1回のアクセスで書き込むことが可能である。ここで、ホストデバイス23からLCAが重複する古いエントリWBE#Xと新しいエントリWBE#Yのライトデータが転送された場合でも、穴埋めリード処理とフラッシュメモリ22に対する書き込み処理をそれぞれ1回で行なうことができる。従って、必要最小限のフラッシュメモリ22に対するアクセスでクラスタデータをセットし、効率的なフラッシュメモリに対する書き込み動作を実現できる。
【0059】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0060】
10…フラッシュメモリコントローラ、
12…ホストインターフェースコントローラ(ホストI/Fコントローラ)、
13…ライトデータ処理モジュール、14…リードデータ処理モジュール、
15…アドレス管理モジュール、16…ECC処理及びログ生成モジュール、
17…NANDコントローラ、19…マイクロプロセッサ(CPU)、
22…フラッシュメモリ、30…ライトバッファメモリ、
31…WBE管理情報バッファメモリ、32…WBEステート遷移コントローラ、
33…キュー(Queue)管理モジュール、
34…穴埋めリード完了待ちキュー(Queue)モジュール、
35…穴埋めリード用バッファメモリ。

【特許請求の範囲】
【請求項1】
所定サイズのデータを書き込み単位とするフラッシュメモリと、
ホスト装置からの書き込みデータを順次格納するバッファメモリと、
前記バッファメモリに格納された前記所定サイズのデータを前記フラッシュメモリに書き込むコントローラと、
ホスト装置からの書き込みデータが前記所定サイズ未満の場合に、前記フラッシュメモリから前記書き込みデータと同一のアドレスで管理されている前記所定サイズのデータを読み出し、前記バッファメモリ内で前記書き込みデータを含む前記所定サイズのデータをセットするためのマージ処理を実行する書き込みデータ処理手段とを有し、
前記書き込みデータ処理手段は、
前記フラッシュメモリからのデータの読み出し時または読み出し完了時に、前記バッファメモリ内での旧書き込みデータと同一のアドレスで管理される新書き込みデータが存在した場合に、前記新書き込みデータをマージ対象データとして前記バッファメモリ内でのマージ処理を実行するデータ記憶装置。
【請求項2】
前記書き込みデータ処理手段は、
前記フラッシュメモリから前記所定サイズのデータを穴埋め用データとして読み出す穴埋めリード処理手段と、
前記穴埋めリード処理手段の穴埋めリード処理の完了を判定する手段と、
前記穴埋めリード処理の完了前に、前記新書き込みデータ前記バッファメモリ内に格納された場合に、前記穴埋め用データを前記バッファメモリに転送する前に前記バッファメモリ内でのマージ処理を先行して実行する手段と
を含む請求項1に記載のデータ記憶装置。
【請求項3】
前記書き込みデータ処理手段は、
前記フラッシュメモリから前記所定サイズのデータを穴埋め用データとして読み出す穴埋めリード処理手段と、
前記穴埋めリード処理手段の穴埋めリード処理の完了を判定する手段と、
前記穴埋めリード処理の完了後に、前記新書き込みデータが前記バッファメモリ内に格納された場合に、前記穴埋め用データを前記バッファメモリに転送した後に前記バッファメモリ内でのマージ処理を実行する手段と
を含む請求項1に記載のデータ記憶装置。
【請求項4】
前記書き込みデータ処理手段は、
前記ホスト装置からの書き込みデータが前記所定サイズとしてクラスタサイズのクラスタデータであるか否かを判定し、
前記書き込みデータが前記クラスタサイズ未満の場合に、前記フラッシュメモリから前記旧書き込みデータと同一のアドレスで管理されている前記クラスタデータを読み出し、前記バッファメモリに前記穴埋め用データを転送する請求項1に記載のデータ記憶装置。
【請求項5】
前記書き込みデータ処理手段は、
前記書き込みデータを順次格納するバッファメモリのアドレスをエントリ番号で管理するバッファエントリ管理手段を含み、
前記新書き込みデータと前記旧書き込みデータのアドレス付け替え処理を実行して前記バッファメモリ内でのマージ処理を実行する請求項1から請求項4のいずれか1項に記載のデータ記憶装置。
【請求項6】
所定サイズのデータを書き込み単位とするフラッシュメモリを有するデータ記憶装置のメモリ制御装置において、
ホスト装置からの書き込みデータを順次格納するバッファメモリと、
前記バッファメモリに格納された前記所定サイズのデータを前記フラッシュメモリに書き込むコントローラと、
ホスト装置からの書き込みデータが前記所定サイズ未満の場合に、前記フラッシュメモリから前記書き込みデータと同一のアドレスで管理されている前記所定サイズのデータを読み出し、前記バッファメモリ内で前記書き込みデータを含む前記所定サイズのデータをセットするためのマージ処理を実行する書き込みデータ処理手段とを有し、
前記書き込みデータ処理手段は、
前記フラッシュメモリからのデータの読み出し時または読み出し完了時に、前記バッファメモリ内での旧書き込みデータと同一のアドレスで管理される新書き込みデータが存在した場合に、前記新書き込みデータをマージ対象データとして前記バッファメモリ内でのマージ処理を実行するメモリ制御装置。
【請求項7】
前記書き込みデータ処理手段は、
前記フラッシュメモリから前記所定サイズのデータを穴埋め用データとして読み出す穴埋めリード処理手段と、
前記穴埋めリード処理手段の穴埋めリード処理の完了を判定する手段と、
前記穴埋めリード処理の完了前に、前記新書き込みデータ前記バッファメモリ内に格納された場合に、前記穴埋め用データを前記バッファメモリに転送する前に前記バッファメモリ内でのマージ処理を先行して実行する手段と
を含む請求項6に記載のメモリ制御装置。
【請求項8】
前記書き込みデータ処理手段は、
前記フラッシュメモリから前記所定サイズのデータを穴埋め用データとして読み出す穴埋めリード処理手段と、
前記穴埋めリード処理手段の穴埋めリード処理の完了を判定する手段と、
前記穴埋めリード処理の完了後に、前記新書き込みデータ前記バッファメモリ内に格納された場合に、前記穴埋め用データを前記バッファメモリに転送した後に前記バッファメモリ内でのマージ処理を実行する手段と
を含む請求項6に記載のメモリ制御装置。
【請求項9】
前記書き込みデータ処理手段は、
前記書き込みデータを順次格納するバッファメモリのアドレスをエントリ番号で管理するバッファエントリ管理手段を含み、
前記新書き込みデータと前記旧書き込みデータのアドレス付け替え処理を実行して前記バッファメモリ内でのマージ処理を実行する請求項6から請求項8のいずれか1項に記載のメモリ制御装置。
【請求項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

【図9】
image rotate