半導体記憶部とメモリコントローラを有する半導体記憶装置であって、前記メモリコントローラは、ホストインターフェース部と、前記ホストインターフェース部から出力される書込みデータを格納する第1バッファ領域と、前記半導体記憶部から読み出した読出しデータを格納する第2バッファ領域と、を有するバッファ部と、前記第1バッファ領域および前記第2バッファ領域の容量を制御するバッファ制御部と、前記第1バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込むように制御する書き込み/読み出し制御部と、前記書き込み/読み出し制御部を制御して、前記半導体記憶部に格納された有効データを前記第2バッファ領域に読み出し、前記第2バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込むコンパクション処理を実行するコンパクション制御部と、を有し、前記書き込み/読み出し制御部が前記第1バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込んだ後、前記バッファ制御部は前記第1バッファ領域の少なくとも一部を前記第2バッファ領域に割り当てる割り当て処理を実行し、当該割り当て処理の後に、前記コンパクション制御部はコンパクション処理を行うことを特徴とする半導体記憶装置。前記割り当て処理の前において、前記第1バッファ領域の容量は前記第2バッファ領域の容量より大きいことを特徴とする請求項1に記載の半導体記憶装置。前記コンパクション処理部が前記コンパクション処理を複数回実行した後、前記書き込み/読出し制御部が、前記割り当てを変更せずに、前記第1バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込むことを特徴とする請求項1または2に記載の半導体記憶装置。前記書き込み/読出し制御部は、前記第1バッファ領域に格納された前記書込みデータを第1のデータサイズ単位で前記半導体記憶部に書き込み、前記第1バッファ領域の容量は第1のデータサイズの2倍以上であることを特徴とする請求項1乃至3いずれか1項に記載の半導体記憶装置。前記コンパクション制御部は、前記第2バッファ領域に読み出された前記有効データを第2のデータサイズ単位で前記半導体記憶部に書き込み、第2のデータサイズは第1のデータサイズの2倍であることを特徴とする請求項4に記載の半導体記憶装置。前記メモリコントローラは、前記コンパクション処理において、前記第2バッファ領域に読み出された前記有効データと共に前記第1バッファ領域に格納された前記書込みデータも前記半導体記憶部に書き込むことを特徴とする請求項1に記載の半導体記憶装置。前記バッファ制御部は、前記コンパクション処理の終了後に、前記第2バッファ領域を全て前記第1バッファ領域に割り当てることを特徴とする請求項1乃至6のいずれか1項に記載の半導体記憶装置。半導体記憶部と、ホストインターフェース部と、前記ホストインターフェース部から出力される書込みデータを格納する第1バッファ領域と、前記半導体記憶部から読み出した読み出しデータを格納する第2バッファ領域と、を有するバッファ部と、前記第1バッファ領域および前記第2バッファ領域の容量を制御するバッファ制御部と、を備える半導体記憶装置の制御方法であって、前記書込みデータを前記半導体記憶部に書き込み、前記書き込みの後に、前記第1バッファ領域の少なくとも一部を前記第2バッファ領域に割り当て、前記割り当ての後に、前記半導体記憶部に格納された有効データを前記第2バッファ領域に読み出し、前記第2バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込むコンパクション処理を行う、ことを特徴とする半導体記憶装置の制御方法。前記割り当ての前において、前記第1バッファ領域の容量は前記第2バッファ領域の容量より大きいことを特徴とする請求項8に記載の半導体記憶装置の制御方法。前記コンパクション処理を複数回実行した後、前記割り当てを変更せずに前記第1バッファ領域に格納された前記書き込みデータを前記半導体記憶部に書き込むことを特徴とする請求項8または9に記載の半導体記憶装置の制御方法。前記第1バッファ領域の容量の半分以下の第1のデータサイズ単位で、前記書込みデータを前記半導体記憶部に書き込む、ことを特徴とする請求項8乃至10のいずれか1項に記載の半導体記憶装置の制御方法。第1のデータサイズ単位の2倍の第2のデータサイズ単位で、前記第2バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込む、ことを特徴とする請求項11に記載の半導体記憶装置の制御方法。前記コンパクション処理において、前記第2バッファ領域に読み出された前記有効データと共に前記第1バッファ領域に格納された前記書き込みデータも前記半導体記憶部に書き込むことを特徴とする請求項8に記載の半導体記憶装置の制御方法。前記コンパクション処理の終了後に、前記第2バッファ領域を全て前記第1バッファ領域に割り当てることを特徴とする請求項8乃至13のいずれか1項に記載の半導体記憶装置の制御方法。半導体記憶部に接続され、前記半導体記憶を制御するメモリコントローラであって、ホストインターフェース部と、前記ホストインターフェース部から出力される書込みデータを格納する第1バッファ領域と、前記半導体記憶部から読み出した読出しデータを格納する第2バッファ領域と、を有するバッファ部と、前記第1バッファ領域および前記第2バッファ領域の容量を制御するバッファ制御部と、前記第1バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込むように制御する書き込み/読み出し制御部と、前記書き込み/読み出し制御部を制御して、前記半導体記憶部に格納された有効データを前記第2バッファ領域に読み出し、前記第2バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込むコンパクション処理を実行するコンパクション制御部と、を有し、前記書き込み/読み出し制御部が前記第1バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込んだ後、前記バッファ制御部は前記第1バッファ領域の少なくとも一部を前記第2バッファ領域に割り当てる割り当て処理を実行し、当該割り当て処理の後に、前記コンパクション制御部はコンパクション処理を行うことを特徴とするメモリコントローラ。このコンパクション処理において、不揮発性メモリのブロック間のデータ移動の際には、データを不揮発性メモリから一旦読み出し、不揮発性メモリの別のブロックへ書き込むまでデータを保持しておくためのコンパクション用バッファが必要である。しかしながら、コンパクション用バッファ領域、ユーザデータ書き込み用バッファ領域を、性能を出すのに必要なだけ独立に備えているとバッファの総容量が大きくなってしまい、装置のコストを押し上げる要因となってしまう。本発明の一つの実施形態は、書き込み性能を劣化させることなく、バッファの総容量を減らすことが出来る半導体記憶装置、半導体記憶装置の制御方法、およびメモリコントローラを提供することを目的とする。本発明の一つの実施形態の半導体記憶装置は、半導体記憶部とメモリコントローラを有する半導体記憶装置であって、前記メモリコントローラは、ホストインターフェース部と、前記ホストインターフェース部から出力される書込みデータを格納する第1バッファ領域と、前記半導体記憶部から読み出した読出しデータを格納する第2バッファ領域と、を有するバッファ部と、前記第1バッファ領域および前記第2バッファ領域の容量を制御するバッファ制御部と、前記第1バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込むように制御する書き込み/読み出し制御部と、前記書き込み/読み出し制御部を制御して、前記半導体記憶部に格納された有効データを前記第2バッファ領域に読み出し、前記第2バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込むコンパクション処理を実行するコンパクション制御部と、を有する。実施形態の半導体記憶装置は、前記書き込み/読み出し制御部が前記第1バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込んだ後、前記バッファ制御部は前記第1バッファ領域の少なくとも一部を前記第2バッファ領域に割り当てる割り当て処理を実行し、当該割り当て処理の後に、前記コンパクション制御部はコンパクション処理を行う。高速なホストインターフェースを備えるSSDでは、複数の不揮発性メモリに並列に書き込みを行うことで、スループットを高めている。そのため、ホストから転送されるユーザデータは一旦バッファに格納され、複数の不揮発性メモリへの並列書き込みに十分な量のデータが溜まってから、不揮発性メモリへの書き込みを行っている。不揮発性メモリへの書き込みが完了すると、書き込み用バッファは解放され、新たにホストから転送されるユーザデータを格納することができるようになる。不揮発性メモリへの書き込み中にバッファが枯渇すると、ホストからのユーザデータ転送を止めざるを得なくなりスループットが低下してしまう。そのため、ユーザデータ書き込み用バッファは、ホストからのデータ転送のスループットを維持するのに十分な容量を持っている必要がある。ここで、コンパクション処理をする場合には、さらにコンパクション用バッファが必要となる。しかしながら、コンパクション用バッファ領域、ユーザデータ書き込み用バッファ領域を、性能を出すのに必要なだけ独立に備えているとバッファの総容量が大きくなってしまい、装置のコストを押し上げる要因となってしまう。以下に添付図面を参照して、実施形態にかかる半導体記憶装置、半導体記憶装置の制御方法、およびメモリコントローラを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。第1の実施形態図1は、実施形態における書き込み処理およびコンパクション処理にかかるSSD1の構成を示す図である。SSD1は、ホストインターフェース部2、データバッファ3、制御部4、NANDコントローラ50~57チャネル制御部、NANDフラッシュメモリ100~131不揮発性メモリを備える。データバッファ3は、書き込みバッファWB領域31およびコンパクションバッファCB領域32を備える。制御部4は、書き込み/読み出しコントローラ41、バッファコントローラ42、コンパクションコントローラ43を備える。NANDコントローラ50~57のそれぞれにはチャネル0Ch.0~チャネル7Ch.7が接続されている。各チャネルには異なるバンク例えば4つのバンク、バンク0Bank0~バンク3Bank3に所属するNANDフラッシュメモリが接続されている。たとえば、チャネル0Ch.0にはNANDフラッシュメモリ100NAND0、NANDフラッシュメモリ108NAND8、NANDフラッシュメモリ115NAND15、NANDフラッシュメモリ122NAND22が接続されている。チャネル1Ch.1~チャネル7Ch.7も同様である。バンク0Bank0には、チャネル0Ch.0からチャネル7Ch.7に接続されたNANDフラッシュメモリ100NAND0、NANDフラッシュメモリ101NAND1、、NANDフラッシュメモリ107NAND7の8つのNANDフラッシュメモリが所属している。バンク1Bank1~バンク3Bank3も同様である。各NANDフラッシュメモリ100~131はそれぞれNANDチップに対応している場合もあるが、同一チャネルに接続された隣接するバンクに所属するNANDフラッシュメモリ、例えばNANDフラッシュメモリ100NAND0およびNANDフラッシュメモリ108NAND8とで1つのNANDチップを構成している場合もある。また上記ではチャネル数8、チャネル毎のバンク数4の例を示したが、チャネル数およびバンク数はこれに限定されるものではない。図1において、SSD1がホストから書き込みコマンドを受領すると、ホストインターフェース部2は、データバッファ3の空き容量を確認し、ユーザデータをデータバッファ3内の書き込みバッファWB領域31に転送する。NANDコントローラ50~57は、書き込み/読み出しコントローラ41の指示に従い、書き込みバッファWB領域31からユーザデータを複数のチャネルおよびバンクに分散して書き込む。バッファコントローラ42は、ホストから受け取ったユーザデータの論理アドレスと、データバッファ3上でユーザデータを格納したアドレスとを対応付けて管理する。図2は、バッファコントローラ42におけるユーザデータの論理アドレスとデータバッファ3上でユーザデータを格納したアドレスとを対応付ける管理の様子の一例を示した図である。図2に示すように、連続した論理セクタアドレスに対応する幾つかのセクタ分例えば8セクタ分のデータを一つのクラスタデータとし、セクタを格納したバッファアドレスをクラスタサイズ分だけ並べたリスト図2のSector_Addr0~Sector_Addr7とクラスタ単位の論理クラスタアドレスLCAXX、LCAYYを一つのエントリとして管理する。バッファアドレスとは、データバッファ3上のデータのアドレスである。バッファコントローラ42は、少なくともクラスタ単位の論理アドレスLCAXX、LCAYYのリストの先頭を示すポインタ図2のWBE0、WBE1を保持していれば、データバッファ3の書き込みバッファWB領域31の管理が可能である。バッファコントローラ42は、コンパクションバッファCB領域32の管理も同様にポインタで行う。すなわち、バッファコントローラ42は、ホストインターフェース部2にポインタを渡すことにより、書き込みバッファWB領域31の容量を制御することができる。同様に、バッファコントローラ42は、NANDコントローラ50~57にポインタを渡すことにより、コンパクションバッファCB領域32の容量を制御することができる。従って、バッファコントローラ42は、データバッファ3に直接アクセスする必要がない。また、クラスタという単位は、書き込み/読み出しコントローラ41で、ホストが扱う論理アドレスと、NANDフラッシュメモリ100~131の物理アドレスとを対応付ける最小単位であるとする。また、書き込み/読み出しコントローラ41の機能としては上記論理アドレスと物理アドレスとの変換処理を含むものとする。なお、データバッファ3はリングバッファで実装してもよい。即ち、データバッファ3内のデータ管理構造において、ユーザデータの書き込みバッファWB領域31に該当する基本単位クラスタ単位の集合を一つのリングバッファ構造で管理し、コンパクションバッファCB領域32に該当する基本単位クラスタ単位の集合も一つのリングバッファ構造で管理する。ユーザデータが書き込まれた領域は、ホストからデータを受け取った順に書き込み/読み出しコントローラ41にデータバッファ3上のアドレス提示し、書き込みが完了して無効化された順に再利用する。コンパクションバッファCB領域32もまた、コンパクションコントローラ43から読み出し要求が出された順に書き込み/読み出しコントローラ41にデータバッファ3上のアドレスを提示し、書き込みが完了して無効化された順に再利用する。割り当ての切り替えは、リングバッファの論理的な接続切り替えによって行う。これにより領域割り当て処理が容易になる。バッファコントローラ42は、クラスタサイズ分例えば8セクタ分溜まったエントリを、書き込み/読み出しコントローラ41に通知する。これは、書き込み/読み出しコントローラ41に、NANDフラッシュメモリ100~131に書き込んでも良いユーザデータのデータバッファ3上での位置を通知したことに相当する。書き込み/読み出しコントローラ41は、NANDフラッシュメモリ100~131に書き込んでも良いユーザデータの量が、メディアNANDフラッシュメモリ100~131にとって都合の良い量に達したときに、NANDコントローラ50~57に対して、データバッファ3上にあるデータのNANDフラッシュメモリ100~131への書き込みを指示する。書き込みアルゴリズムは追記型とし、同一の論理アドレスへの上書きがあったとしても、物理的な消去をするのではなく、新しい領域を割り当てて、論理アドレスと物理アドレスの対応関係を更新していく。ここでのメディアにとって都合の良い量とは、単一のNANDフラッシュメモリにとっては、ページサイズであり、メディア書き込みを、複数チャネル並列に行う場合は、ページサイズの自然数倍になる。ここでは、図1に示した全チャネル数8の半分のチャネル数である4チャネル例えば、チャネル0Ch.0~チャネル3Ch.3、或いはチャネル4Ch.4~チャネル7Ch.7を1回の並列書き込みに使用するとする。1回の並列書き込みにおいて1つのチャネルに対して32クラスタ分のデータが書き込めるとすると、4チャネル分の書き込みに要するクラスタ数Xは128となるX=128。1論理ページは256=2Xクラスタであるので、1回の並列書き込みで1/2論理ページを書き込むとする。以下、書き込みバッファWB領域31上にあるデータのNANDフラッシュメモリ100~131への1回の並列書き込みによる書き込みデータ量を128=Xクラスタとして説明するが、1回の並列書き込みが可能なデータ量はこれに限定されるわけではない。チャネル0Ch.0~チャネル3Ch.3、或いはチャネル4Ch.4~チャネル7Ch.7にそれぞれ接続されたNANDフラッシュメモリへの128クラスタ分のデータの書き込みが完了するまでの期間、書き込みバッファWB領域31のユーザデータが格納されている領域は解放することが出来ない。そのため、ホストからのデータ転送速度を維持するためには、NANDフラッシュメモリへの128=Xクラスタ分のデータ書き込みが完了し、書き込みバッファWB領域31の当該領域が再利用できるようになるまでの期間に、ホストインターフェース部2を介してホストから受け取るデータ量を格納できるだけの書き込みバッファWB領域31がさらに必要である。書き込みバッファWB領域31に溜まった128=Xクラスタ分のデータをNANDフラッシュメモリに書き込む時間がホストから128=Xクラスタ分のデータを受ける時間より短い場合、ホストからのデータ転送速度を維持しつつ、NANDフラッシュメモリに書き込みを続けるには256=2Xクラスタ分の書き込みバッファWB領域31を備えていれば十分である。即ち、後で詳述するダブルバッファリングを実行して書き込みを行うことなどを考慮すると、書き込みバッファWB領域31の容量は、書き込みバッファWB領域31からNANDフラッシュメモリに1回で書き込む書き込みデータのデータ単位の2倍以上の容量があればよい。このような書き込み処理を続けていくとNANDフラッシュメモリ100~131上で無効なデータを保持している領域が増えてしまう。これを回避するために無効なデータを含むブロックから別のブロックへ有効なデータのみコピーして集め、コピー元のブロックを消去し、新たなユーザデータ書き込みに再利用できるようにする処理を行う。この処理をコンパクション処理と呼ぶ。ユーザデータ書き込み先と、コンパクションデータ書き込み先が別のブロックであり、同一ページに混ざらないようなコンパクションアルゴリズムの概要は以下のようになる。書き込みバッファWB領域31とコンパクションバッファCB領域32を合わせたバッファ容量の総量としては384=3Xクラスタ分の容量を用意する。図3は、データ書き込み処理実行時とコンパクション処理実行時におけるデータバッファ3の容量配分の一例を示す図である。図3に示すように、コンパクション処理を行っていないユーザデータのデータ書き込み処理実行時は、2X=256クラスタ分のバッファ容量をユーザデータの書き込みバッファWB領域31として用いる。NANDフラッシュメモリ100~131への1回の並列書き込みで書き込まれるユーザデータ量は128=Xクラスタなので、ホストからのユーザデータの書き込みバッファWB領域31への転送、および書き込みバッファWB領域31からNANDフラッシュメモリ100~131への書き込みプログラムは以下に説明するダブルバッファリングで実行することができる。図4は、実施形態の書き込みバッファWB領域におけるダブルバッファリングの手順を示した図である。図4の上には、ホストホストインターフェース部2から書き込みバッファWB領域31へのユーザデータの転送、および書き込みバッファWB領域31からNANDフラッシュメモリ100~131への書き込みプログラムのタイムチャートが示されており、図4のa、b、c、およびdは時系列に沿った書き込みバッファWB領域31の状態を示す。まず、ホストホストインターフェース部2から書き込みバッファWB領域31へXクラスタ分のデータAが転送される。このときの書き込みバッファWB領域31の状態がaであり、2X=256クラスタ分のバッファ容量を有する書き込みバッファWB領域31の半分にデータAが保持される。次のタイミングで、ホストホストインターフェース部2から書き込みバッファWB領域31へXクラスタ分のデータBが転送される。このときの書き込みバッファWB領域31の状態がbであり、書き込みバッファWB領域31の残りの半分のXクラスタ分の領域にデータBが保持される。そしてこのタイミングで、書き込みバッファWB領域31に保持されたデータAはNANDフラッシュメモリ100~131へ書き込まれるプログラム。これにより、書き込みバッファWB領域31のデータAを保持していた領域は解放されるc。さらに次のタイミングで、ホストホストインターフェース部2から書き込みバッファWB領域31のcで解放された領域へXクラスタ分のデータCが転送される。このときの書き込みバッファWB領域31の状態がdであり、このタイミングで、書き込みバッファWB領域31に保持されたデータBはNANDフラッシュメモリ100~131へ書き込まれるプログラム。コンパクション処理実行時は、バッファコントローラ42は、NANDフラッシュメモリ100~131への書き込みが完了し解放された書き込みバッファWB領域31のXクラスタ分を、新たなユーザデータの書き込み用バッファWB領域31としてではなく、コンパクションバッファCB領域32として割り当てる。図4を用いて説明すると、dのタイミングになる前にコンパクションの開始が決定されると、図4のcに下に記載したように、解放された書き込みバッファWB領域31のXクラスタ分がコンパクションバッファCB領域32として割り当てられることになる。この結果、コンパクション処理実行時は、書き込み用バッファWB領域31のバッファ容量はXクラスタ分、コンパクションバッファCB領域32のバッファ容量は2Xクラスタ分になる。コンパクション先ブロックはチャネルチャネル0Ch.0~チャネル7Ch.7毎に用意し、全チャネルのNANDコントローラ50~57への書き込み指示を出し、コンパクション元ブロックから読み出した有効データを2Xクラスタ分1論理ページ分並列に書き込むものとする図5。このとき、コンパクションバッファCB領域32として、256=2Xクラスタ分のデータ領域があれば、コンパクション元ブロックからの有効データを全てコンパクションバッファCB領域32上に読み出し、全てのチャネルチャネル0Ch.0~チャネル7Ch.7を介して1論理ページ分のデータを並列に書き込みを行うことができる。コンパクションの手順としては、コンパクションコントローラ43から通知される有効クラスタデータの論理アドレスを元に、書き込み/読み出しコントローラ41に対して、メディア上の有効なデータをコンパクションバッファCB領域32へ読み出すよう指示する。書き込み/読み出しコントローラ41から指示を受けたNANDコントローラ50~57はこの時点で有効なデータを選択するので無効なデータは読み出さない。コンパクションバッファCB領域32上でクラスタ単位のデータが溜まると、バッファコントローラ42は当該エントリを書き込み/読み出しコントローラ41に通知する。書き込み/読み出しコントローラ41は2Xクラスタ分1論理ページ分の有効データが溜まったら、NANDコントローラ50~57に対して、コンパクションバッファCB領域32上に溜まった有効データを全てのチャネルチャネル0Ch.0~チャネル7Ch.7を介してNANDフラッシュメモリ100~131へ書き込ませる。2Xクラスタ分の有効データのコンパクション処理が行われている間、ユーザデータ書き込み用として利用できる書き込みバッファWB領域31の容量はXクラスタ分である。チャネルチャネル0Ch.0~チャネル7Ch.7はコンパクションされた有効データの書き込みで占有されているため、書き込みバッファWB領域31からNANDフラッシュメモリ100~131への書き込みは行えないが、ホストからのデータ転送は残りXクラスタ分の書き込みバッファWB領域31にユーザデータが溜まりきるまで維持することができる。この間、書き込み可能になったクラスタ単位のデータは、書き込み/読み出しコントローラ41に通知しておくことができ、コンパクションされた2Xクラスタ分の有効データのNANDフラッシュメモリ100~131への書き込みが終わると、Xクラスタ分のユーザデータをNANDフラッシュメモリ100~131へ書き込むことができる。コンパクション処理中は、この2種類の書き込みを交互に繰り返す。コンパクション処理が完了すると、バッファコントローラ42は、コンパクションバッファCB領域32のうちXクラスタ分を解放し、新たなユーザデータの書き込みバッファWB領域31として割り当てる。すなわち、データ書き込み処理実行状態に戻り、ユーザデータの書き込みバッファWB領域31のバッファ容量は2Xクラスタ分に戻る。以上に述べた、ユーザデータ書き込み処理およびコンパクション処理の様子を図6のフローチャートを用いて詳細に説明する。ユーザデータ書き込み処理まず、ユーザデータ書き込み処理実行時には、ユーザデータの書き込みバッファWB領域31は2X=256クラスタ分、コンパクションバッファCB領域32はX=128クラスタ分のバッファ容量を確保する図6:ステップS101。なお、コンパクション処理に入る前の初期設定としては、書き込みバッファWB領域31のバッファ容量は少なくともコンパクションバッファCB領域32のバッファ容量より大きくなるように確保しておく。ステップS102にて、ホストから転送されたユーザデータが書き込みバッファWB領域31にX=128クラスタ分溜まったか否かステップS102:Noが判定され、X=128クラスタ分溜まったステップS102:Yes場合は、X=128クラスタ分のユーザデータをNANDフラッシュメモリ100~131へ書き込むプログラムステップS103。その後、書き込みバッファWB領域31の書き込みが済んだX=128クラスタ分の領域を解放するステップS104。なお、書き込みが済んだ領域は一旦全て解放し、次のステップS105の判定にかかわらずコンパクションバッファCB領域32に渡す必要がない領域がある場合は、書き込みバッファWB領域31として再利用してもよい。そして、ステップS105にて、コンパクション処理開始の要件が判定される。コンパクション処理開始の要件はNANDフラッシュメモリ100~131上のフリーブロックの数が足りない、即ち所定の数以下となっているかどうかであり、フリーブロックの数が所定の数以下の場合コンパクション処理が開始されるステップS105:Yes。要件を満たさない場合ステップS105:Noは、ステップS101に戻る。コンパクション処理ステップS105において、コンパクション処理開始の要件が満たされるステップS105:Yesと、書き込みバッファWB領域31のX=128クラスタ分がコンパクションバッファCB領域32として割り当てられるステップS106。なお、ステップS104で解放した書き込みバッファWB領域31の一部を書き込みバッファWB領域31として再利用する場合は、Xクラスタ分の領域から再利用する分を除いた領域をコンパクションバッファCB領域32として割り当てればよい。ここでは、説明を簡単にするため、書き込みバッファWB領域31のX=128クラスタ分がコンパクションバッファCB領域32として追加的に割り当てられたとして、以下説明する。従って、書き込みバッファWB領域31はX=128クラスタ分、コンパクションバッファCB領域32は2X=256クラスタ分のバッファ容量を確保することになるステップS106。そして、NANDフラッシュメモリ100~131のコンパクション元ブロックから有効データをコンパクションバッファCB領域32上に読み出しステップS107、コンパクションバッファCB領域32上で纏められて2Xクラスタ分1論理ページ分のデータ量に達した有効データは、再びNANDフラッシュメモリ100~131に書き込まれるプログラムステップS108。このコンパクション処理ステップS107およびS108をN回繰り返すまでステップS109:No実行し、N回実行するとステップS109:Yes、ステップS110にてコンパクション処理を終了するか否かが判定される。コンパクション処理の終了は、コンパクション処理によって十分な数のフリーブロックが得られたとき、即ち、予め定めた一定数のフリーブロックが得られた場合に判定される。従って、N回のコンパクション処理で一定数のフリーブロックが得られた場合はコンパクション処理を終了してステップS110:Yes、ステップS101に戻ってユーザデータ書き込み処理を再開する。一方、一定数のフリーブロックが得られなかった場合ステップS110:Noは、ステップS111に進む。ステップS111では、フリーブロックの有無が判定される。コンパクション処理によって十分な数のフリーブロックが得られはしなかったものの、フリーブロックが存在する場合ステップS111:Yesは、ステップS112に進んでユーザデータ書き込みを行う。これは、コンパクション処理実行時においてもユーザデータ書き込みが全くできない期間をなるべく作らないようにするためである。ステップS112にて、ホストから転送されたユーザデータが書き込みバッファWB領域31にX=128クラスタ分溜まったか否ステップS112:Noが判定され、X=128クラスタ分溜まったステップS112:Yes場合は、X=128クラスタ分のユーザデータをNANDフラッシュメモリ100~131へ書き込むプログラムステップS113。その後、書き込みバッファWB領域31の書き込みが済んだX=128クラスタ分の領域を解放しステップS114、再び、書き込みバッファWB領域31として128クラスタ分、コンパクションバッファCB領域32として256クラスタ分のバッファ容量がそれぞれ確保されるステップS106。このとき、書き込みバッファWB領域31は空になっていることをホストインターフェース部2は知ることになるので、その後ホストから転送されたユーザデータが書き込みバッファWB領域31に蓄えられることになる。さらにステップS107に進み、再びコンパクション処理を行う。一方、例外的なケースであるが、ステップS111において、フリーブロックが全く存在しない場合ステップS111:Noは、ステップS107に戻りフリーブロックを確保するまでコンパクション処理を繰り返す。以上で図6のフローチャートの説明を終わる。コンパクション処理実行時にも、ユーザデータのNANDフラッシュメモリ100~131への書き込みは、1回の並列書き込みによってXクラスタ分ずつしか行えない。すなわち、コンパクションにより2Xクラスタ分の有効データをコンパクションバッファCB領域32にコピーしているときであっても、ホストからのユーザデータのNANDフラッシュメモリ100~131への書き込みは1回の並列書き込みによってXクラスタ分ずつしか行えない。従って、本実施形態のデータバッファ3の構成におけるコンパクション処理実行時の書き込み性能は、書き込みバッファWB領域31およびコンパクションバッファCB領域32それぞれに2Xクラスタ分ずつのバッファ容量を常時固定的に割り当てた合計4Xクラスタ分のバッファ容量を使用した場合と遜色無い。すなわち、ユーザデータの書き込みバッファWB領域31とコンパクションバッファCB領域32とが一部のバッファ領域を共用する制御を行うことで、それぞれの処理を効率よく実施するのに必要なバッファ量を独立に確保した場合よりもデータバッファ3のトータルのバッファ容量を削減することができ、装置のコストを下げることができる。このことは、データバッファ3を、容量に余裕があるDRAMではなく容量に制限があるSRAMで構成した場合などに特に有利である。すなわち、SRAMの面積を節約することが可能となる。以上説明したように、不揮発性メモリを用いた半導体記憶装置において、ユーザデータ書き込み用バッファとコンパクション用バッファとがバッファの一部を共用する制御を行うことで、トータルのバッファ容量を削減することが可能である。コンパクション処理を行う必要があるときには、ユーザデータ書き込み用バッファの一部をコンパクション用バッファとして振り分け、コンパクション処理が終われば、コンパクション用に振り分けられていたリソースをユーザデータ書き込み用に戻す、という制御を行う。このようなバッファ制御を行うことで、コンパクションが起きていないときには、ユーザデータ書き込みを効率よく行うために必要なバッファ容量、即ち、フロントエンドとNANDフラッシュメモリの両方のスループットをそろえて最高性能を出すために必要なバッファ容量を確保することができる。また、コンパクションを行っているときには、コンパクションを効率よく行うために必要なバッファ容量を確保でき、かつユーザデータ書き込み性能の極端な低下を抑えることができる。第2の実施形態本実施形態においては、図1に示したSSD1の構成において、コンパクションデータ書き込み先と、ユーザデータ書き込み先が同一ページ、もしくは少なくとも同一ブロックに混在するような場合におけるコンパクション処理が行われる。書き込みバッファWB領域31とコンパクションバッファCB領域32を合わせたバッファ容量の総量としては256=2Xクラスタ分の容量を用意する。図7は、データ書き込み処理実行時とコンパクション処理実行時におけるデータバッファ3の容量配分の一例を示す図である。このとき例えば、図7に示すように、データ書き込み処理実行時には書き込みバッファWB領域31に最大2Xクラスタ、コンパクション処理実行時には書き込みバッファWB領域31にYクラスタ、コンパクションバッファCB領域32にZクラスタ割り当てる。YZ=2Xとして、バッファの総量が2Xクラスタになるようにデータバッファ3のバッファ領域を設定する。コンパクション処理実行時にはコンパクションバッファCB領域32に最大2Xクラスタを割り当てることができる。コンパクション処理が発生せず、ユーザデータの書き込みだけを行っているときには、書き込みバッファWB領域31に2X256クラスタを割り当てることができ、第1の実施形態と同じ構成で、同様にダブルバッファリングを行ってホストインターフェース部2からのデータ転送速度を維持した書き込み性能が出せる。コンパクション処理が発生すると、ユーザデータ書き込み完了によって解放された書き込みバッファWB領域31のXクラスタの全部または一部であるYクラスタ分をコンパクションバッファCB領域32として割り当てる。バッファコントローラ42は、コンパクションコントローラ43から通知される有効クラスタデータの論理アドレスを元に、書き込み/読み出しコントローラ41に対して、メディア上の有効なデータをコンパクションバッファCB領域32へ読み出すよう指示する。コンパクションバッファCB領域32上でクラスタ単位のデータが溜まると、バッファコントローラ42は当該クラスタデータに対応するエントリを書き込み/読み出しコントローラ41に通知する。書き込み/読み出しコントローラ41は、書き込みバッファWB領域31上のユーザデータと、コンパクションバッファCB領域32上のコンパクションデータ、合わせて2Xクラスタ分1論理ページ分のデータが溜まったら、NANDコントローラ50~57へ書き込みを行う図8。コンパクション処理を行う期間は、このように書き込みバッファWB領域31からとコンパクションバッファCB領域32からとの2種類の書き込みを、同時に混在させてもよい。コンパクション処理が完了すると、バッファコントローラ42は、コンパクションに用いていたZクラスタ分の領域を解放し、新たなユーザデータの書き込み用バッファ、即ち書き込みバッファWB領域31として再び割り当てる図7。以上に述べた、ユーザデータ書き込み処理およびコンパクション処理の様子を図9のフローチャートを用いて詳細に説明する。ユーザデータ書き込み処理まず、ユーザデータ書き込み処理実行時には、ユーザデータの書き込みバッファWB領域31は2X=256クラスタ分のみのバッファ容量を確保する図9:ステップS201。コンパクションバッファCB領域32は確保せずバッファ容量の合計は、2X=256クラスタ分である。ステップS202にて、ホストから転送されたユーザデータが書き込みバッファWB領域31にX=128クラスタ分溜まったか否かステップS202:Noが判定され、X=128クラスタ分溜まったステップS202:Yes場合は、X=128クラスタ分のユーザデータをNANDフラッシュメモリ100~131へ書き込むプログラムステップS203。その後、書き込みバッファWB領域31の書き込みが済んだX=128クラスタ分の領域を解放するステップS204。そして、ステップS205にて、コンパクション処理開始の要件が判定される。コンパクション処理開始の要件はNANDフラッシュメモリ100~131上のフリーブロックの数が足りない、即ち所定の数以下となっているかどうかであり、フリーブロックの数が所定の数以下の場合コンパクション処理が開始されるステップS205:Yes。要件を満たさない場合ステップS205:Noは、ステップS201に戻る。コンパクション処理ステップS205において、コンパクション処理開始の要件が満たされるステップS205:Yesと、書き込みバッファWB領域31のX=128クラスタ分がコンパクションバッファCB領域32として割り当てられるステップS206。すなわち、このときは図7のY=Z=X=128である。ステップS207にて、ホストから転送されたユーザデータが書き込みバッファWB領域31にX=128クラスタ分溜まったか否かステップS207:Noが判定され、Xクラスタ分溜まったステップS207:Yes場合は、Xクラスタ分のユーザデータをNANDフラッシュメモリ100~131へ書き込むプログラムステップS208。その後、書き込みバッファWB領域31の書き込みが済んだXクラスタ分の領域を解放するステップS209。さらに、ステップS210でフリーブロックの有無が判定される。ステップS210でフリーブロックが存在する場合ステップS210:Yesは、書き込みバッファWB領域31を例えば32クラスタ分残して、残りをコンパクションバッファCB領域32に割り当て、コンパクションバッファCB領域32には224クラスタ分の容量が確保されるステップS211。このときは図7のY=32、Z=224である。書き込みバッファWB領域31を32クラスタ分残すのは一例であり、コンパクションバッファCB領域32の容量が書き込みバッファWB領域31に残った容量より多ければよく、書き込みバッファWB領域31とコンパクションバッファCB領域32の容量比はこれに限定されない。そして、NANDフラッシュメモリ100~131のコンパクション元ブロックから有効データをコンパクションバッファCB領域32上にコンパクションバッファCB領域32の容量分読み出すステップS212。ステップS213にて、ホストから転送されたユーザデータが書き込みバッファWB領域31に32クラスタ分溜まったか否かステップS213:Noが判定される。書き込みバッファWB領域31に32クラスタ分溜まったステップS213:Yes場合は、図8に示すように、書き込みバッファWB領域31の32クラスタ分とコンパクションバッファCB領域32の224クラスタ分との合わせて2Xクラスタ分1論理ページ分のデータをNANDフラッシュメモリ100~131へ書き込むプログラムステップS214。その後、ステップS215にて、コンパクション処理を終了するか否かが判定される。コンパクション処理の終了は、コンパクション処理によって十分な数のフリーブロックが得られたとき、即ち、予め定めた一定数のフリーブロックが得られた場合に判定される。従って、上記コンパクション処理で一定数のフリーブロックが得られた場合はコンパクション処理を終了してステップS215:Yes、ステップS201に戻ってユーザデータ書き込み処理を再開する。一方、一定数のフリーブロックが得られなかった場合ステップS215:Noは、ステップS210に進んで、再度フリーブロックの有無が判定される。例外的なケースであるが、ステップS210においてフリーブロックが存在しない場合ステップS210:Noは、書き込みバッファWB領域31に割り当てていた容量を全てコンパクションバッファCB領域32に割り当てて、コンパクションバッファCB領域32の容量を2X=256クラスタ分としてステップS216、コンパクション処理のみを繰り返す。具体的には、NANDフラッシュメモリ100~131のコンパクション元ブロックから有効データをコンパクションバッファCB領域32上に読み出しステップS217、コンパクションバッファCB領域32上で纏められて2Xクラスタ分1論理ページ分のデータ量に達した有効データは、再びNANDフラッシュメモリ100~131に書き込まれるプログラムステップS218。ステップS218の後、ステップS215と同様にコンパクション処理を終了するか否かが判定されるステップS219。一定数のフリーブロックが得られた場合はコンパクション処理を終了してステップS219:Yes、ステップS201に戻ってユーザデータ書き込み処理を再開する。一方、一定数のフリーブロックが得られなかった場合ステップS219:Noは、ステップS216にもどってコンパクション処理を再度行う。以上説明したように、コンパクションデータ書き込み先と、ユーザデータ書き込み先が同一ページ、もしくは少なくとも同一ブロックに混在するような場合においても、不揮発性メモリを用いた半導体記憶装置において、ユーザデータ書き込み用バッファと、コンパクション用バッファの一部を共用し制御を行うことで、トータルのバッファ容量を削減することが可能である。このようなバッファ制御を行うことで、コンパクションが起きていないときには、ユーザデータ書き込みを効率よく行うために必要なバッファ容量、即ち、フロントエンドとNANDフラッシュメモリの両方のスループットをそろえて最高性能を出すために必要なバッファ容量を確保することができる。また、コンパクションを行っているときには、コンパクションを効率よく行うために必要なバッファ容量を確保でき、かつユーザデータ書き込み性能の極端な低下を抑えることができる。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。