不揮発性メモリのコマンドをキューイングするキューイングバッファと、前記不揮発性メモリのリードコマンドを発行するリード手段と、前記リード手段により前記不揮発性メモリから読み出されたデータをユーザデータと管理データとに分離する分離手段と、前記不揮発性メモリのライトアドレスを管理するライトポインタ情報により示されるアドレスを前記分離手段により得られた管理データに対して加えてライトコマンドを発行し、前記キューイングバッファへ自動的にキューイングするライトコマンド発行手段と、前記ライトコマンド発行手段により発行されたライトコマンドを前記不揮発性メモリに与え、データを前記不揮発性メモリに書き込むライト手段と、を具備する半導体記憶装置。前記ライト手段による書き込み処理の開始時に、前記リード手段により前記不揮発性メモリから読み出されたデータが有効か無効かを判定する判定手段をさらに具備し、前記ライト手段は、前記判定手段が読み出されたデータが無効であると判定すると、無効なデータを前記不揮発性メモリに書き込む請求項1記載の半導体記憶装置。前記ライト手段による書き込み処理の開始時に、前記リード手段により前記不揮発性メモリから読み出されたデータが有効か無効かを判定する判定手段をさらに具備し、前記ライト手段は、前記判定手段が読み出されたデータが無効であることを判定すると、書き込み処理を中止する請求項1記載の半導体記憶装置。前記ライト手段による書き込み処理後、正引きテーブルを更新する手段をさらに具備する請求項1記載の半導体記憶装置。前記不揮発性メモリは所定のバイト毎に1ページを構成し、所定のページが1ブロックを構成し、ページ単位でアクセスされ、データは全てのページが無効であるフリーブロックの先頭ページから書き込まれ、前記ライトポインタ情報は1ページの書き込みに応じてインクリメントされる請求項1記載の半導体記憶装置。不揮発性メモリを含む半導体記憶装置の制御方法であって、前記不揮発性メモリのリードコマンドを発行することと、前記リードコマンドに応じて前記不揮発性メモリから読み出されたデータをユーザデータと管理データとに分離することと、前記不揮発性メモリのライトアドレスを管理するライトポインタ情報により示されるアドレスを前記分離することにより得られた管理データに対して加えてライトコマンドを発行することと、前記ライトコマンドを前記不揮発性メモリに与え、データを前記不揮発性メモリに書き込むことと、を具備する制御方法。前記書き込み処理の開始時に、前記不揮発性メモリから読み出されたデータが有効か無効かを判定することをさらに具備し、前記書き込むことは、前記不揮発性メモリから読み出されたデータが無効であることを判定すると、無効なデータを前記不揮発性メモリに書き込む請求項6記載の制御方法。前記書き込み処理の開始時に、前記不揮発性メモリから読み出されたデータが有効か無効かを判定することをさらに具備し、前記不揮発性メモリから読み出されたデータが無効であることを判定すると、前記書き込むことは中止される請求項6記載の制御方法。前記書き込み処理後、正引きテーブルを更新することをさらに具備する請求項6記載の制御方法。前記書き込み処理後、前記不揮発性メモリのページ毎のデータの有効、無効を示すデータを示す有効ページ管理テーブルを更新することをさらに具備する請求項6記載の制御方法。このように特許文献1記載の装置は、回復処理と、それを実行するか否かの判定、及び回復対象ブロックの選択をひとまとまりの回復シーケンスとして記憶装置に実装しておき、システムからの回復処理実行コマンドに応じて回復シーケンスを実行するようにしている。フラッシュメモリにおける無効ページの回復作業によってフラッシュメモリの使用効率を向上させることができる。しかしながら、この装置では回復シーケンスはCPUのソフトウェアとして実行されている為、1つの回復シーケンスを実行するにもCPUは複数の処理を行う必要がある。回復処理の実行中にソフトウェアの介入が複数はいることによりCPUの処理性能が劣化し、システム全体でのパフォーマンス低下が生じるという課題がある。本発明の一態様による半導体記憶装置は、不揮発性メモリのコマンドをキューイングするキューイングバッファと、前記不揮発性メモリのリードコマンドを発行するリード手段と、前記リード手段により前記不揮発性メモリから読み出されたデータをユーザデータと管理データとに分離する分離手段と、前記不揮発性メモリのライトアドレスを管理するライトポインタ情報により示されるアドレスを前記分離手段により得られた管理データに対して加えてライトコマンドを発行するライトコマンド発行手段と、前記ライトコマンド発行手段により発行し、キューイングバッファへ自動でキューイングし、キューから取り出されたライトコマンドを前記不揮発性メモリに与え、データを前記不揮発性メモリに書き込むライト手段と、を具備する。本発明の一態様によれば、CPUからの1コマンドでコンパクション動作が実行されるので、CPUの処理負荷の低減が可能になるとともに、途中でソフトウェア処理が介入せず、システム全体の処理能力が高くなる。以下、図面を参照して本発明の実施の形態について詳細に説明する。図1は一実施形態の構成を示すブロック図である。本実施形態は複数の不揮発性メモリ、例えばNAND型フラッシュメモリ81、82、...8nを含む。NAND型フラッシュメモリ81、82、...8nは例えば半導体ドライブの記憶部を構成する。NAND型フラッシュメモリ81、82...8nの各々は例えば2~16個のメモリチップからなる。NAND型フラッシュメモリ81、82、...8nはフラッシュメモリコントローラ1に接続される。フラッシュメモリコントローラ1は内部バス2bに接続されたCPU2と、メインメモリ3と、フラッシュメモリ制御部及びNANDフラッシュメモリI/F部6と、データフロー制御回路7と、ホストI/F4とを具備する。フラッシュメモリ制御部及びNANDフラッシュメモリI/F部6はNAND型フラッシュメモリ81、82、...8nに接続され、NAND型フラッシュメモリ81、82、...8nへのアクセスを制御する。具体的には、フラッシュメモリ制御部及びNANDフラッシュメモリI/F部6はNAND型フラッシュメモリ81、82、...8nに対してアドレスやデータ制御を行う。フラッシュメモリ制御部及びNANDフラッシュメモリI/F部6はCPU2からのコマンドを受理し、NAND型フラッシュメモリ81、82、...8nとメインメモリ3間のデータ転送を実施する。フラッシュメモリ制御部及びNANDフラッシュメモリI/F部6は内部で論理ブロックアドレスLogicalBlockAddressLBA情報や各種属性フラグ情報を保持する。ホストI/F4はプロトコルSASやSATAによりホストシステム10に接続され、データフロー制御回路7を介して、ホストNAND型フラッシュメモリ間でやりとりされるデータのフロー制御を行う。ホストI/F4はホストシステム10からはLBAでアクセスされる。メインメモリ3は例えばDRAMが使用され、退避データや正引きテーブル、論物変換テーブルを格納する。フラッシュメモリコントローラ1の内部バス2bには外付けのブートROM9も接続される。ブートROM9は一例としてフラッシュメモリが使用され、ファームウェアを含む。ファームウェアはCPU2を使用し、フラッシュメモリ制御部及びNANDフラッシュメモリI/F部6内部へのI/OコマンドアクセスによりNAND型フラッシュメモリ81、82、...8nへのリードコマンド、ライトコマンドの発行を行う。ファームウェアはROM9にプログラムされた内容が、システム電源起動時に、CPU2内部の一時記憶部もしくはメインメモリ3に転送されて動作するものとする。図2はフラッシュメモリ制御部及びNANDフラッシュメモリI/F部6、データフロー制御回路7の詳細なブロック図である。フラッシュメモリ制御部及びNANDフラッシュメモリI/F部6はI/Oバッファ24を介してNAND型フラッシュメモリ8へアクセスする。内部バス2bからのライトデータはデータバッファ38、データ処理回路32を介してI/Oバッファ24に供給され、I/Oバッファ24からのリードデータはデータ処理回路32、データバッファ38を介して内部バス2bに供給される。CPU2からのリードコマンド、ライトコマンドは内部バス2bを介してコマンドキュー26に書き込まれるコマンド投入。ここでのコマンドフォーマットはフラッシュメモリ制御部及びNANDフラッシュメモリI/F部6が処理しやすいフォーマットであればよく、ハードウェア実装に依存している。本特許の要ではないためここでは特に言及しないコマンドキュー26にコマンドが投入されると、コマンド処理回路28はエントリされたコマンドをコマンドキュー26から取り出し、コマンドシーケンサ30にコマンドを発行して起動をかける。CPU2からコンパクションコマンドが発行されると、コマンドキュー26にはリードコマンドとして投入される。コマンド処理回路28はコマンドキュー26からリードコマンドを取り出して、コマンドシーケンサ30にコマンド発行をして起動をかけ、その後、I/Oバッファ24を介して、NANDフラッシュメモリ8の該当ブロックからデータをリードする。NANDフラッシュメモリ8内の各ブロックの各ページのデータが有効であるか無効であるかはメインメモリ3内の有効ページ管理テーブル後述により管理されており、CPU2は有効なデータを含むページに対してのみリードアドレスを与え、有効なデータのみリードする。コマンドシーケンサ30は複数のNAND型フラッシュメモリからいずれかの選択と、NAND型フラッシュメモリ8へのアクセスコマンド発行を行う。コマンドシーケンサ30はNAND型フラッシュメモリ8のアクセスの際、データ処理回路32に対してメインメモリ3へのデータ転送リクエストLBA/属性を伴う場合と、伴わない場合があるを実施し、データ処理回路32はデータ転送が完了するとコマンドシーケンサ30に終了レスポンスLBA/属性を伴うを返す。コマンドシーケンサ30は終了コマンドをコマンド処理回路28に通知すると、コマンド処理回路28はテーブル更新回路34に対して終了コマンドを送付する。この時、データ処理回路32はNAND型フラッシュメモリ8からリードした有効なページのデータをユーザデータとLBA情報、その他後続のライトコマンドキュー26内のリードコマンドに後続するライトコマンドを行うために必要な属性データとに分離し、LBA/属性データをコマンド処理回路28に終了レスポンスと共に渡す。属性データの一例としては、データにエラー訂正符号化ECCによるデータのチェックを行うか否かを示す情報やデータ長、暗号の有無などがある。コマンドキュー26内の全てのリードコマンド終了後に、コマンドキュー26内のライト処理へ移る。この詳細は図3を参照して後述する。コマンド処理回路28はコマンドキュー26内のライトコマンドを取り出して、コマンドシーケンサ30にコマンド発行をして起動をかける。その後、コマンド処理回路28はI/Oバッファ24を介してNANDフラッシュメモリ8へのデータのライトを行う。この時、コマンドシーケンサ30は、データ処理回路32に対してメインメモリ3からのデータ転送要求を実施し、LBA/属性データ、ライトアドレスを用いて、データライト処理を行う。ライトアドレスはフラッシュメモリコントローラ1内で生成する。具体的には、ホスト10から供給されたLBAに基づいて後述の論物変換テーブルから物理アドレスが計算される。ここでは、ライトアドレスは追記型アルゴリズムに従い生成される。追記型アルゴリズムは、1回のライト時に順次ポインタを順次進める制御をするため、ライトアドレスは容易に生成できる。データ処理回路32はデータ転送が完了すると、コマンドシーケンサ30に終了レスポンスを返す。その後、コマンド処理回路28は終了通知と正引きテーブル更新に必要な情報をテーブル更新回路34へ渡し、メインメモリ3上のデータを更新する。テーブル更新回路34は終了したコマンドに係るメインメモリ3上のテーブル更新を実施するモジュールであり、ライト終了時の有効ページ管理ビットマップテーブルの更新処理及び、その他の管理テーブルの更新処理を実施する。更新処理の詳細は後述する。テーブル更新回路34はすべての処理を終了後、レスポンスキュー36に終了コマンドとステータスを送信してハードウェアとしてのコマンド処理が完了する。CPU2はレスポンスキュー36をリードすることによってコマンド実行結果を確認することができる。図3はこのように構成されたフラッシュメモリコントローラ1特に、フラッシュメモリ制御部及びNANDフラッシュメモリI/F部6とデータフロー制御回路7によるコンパクション動作の際のデータの流れの概要を示す図であり、図4は図3の動作を実現するためのフラッシュメモリコントローラ1のフローチャートである。図4は左側の2つのブロックブロック10、20がCPU10の処理であり、残りのブロックブロック102~118がフラッシュメモリコントローラ1ハードウェアの処理である。NAND型フラッシュメモリ81、82、...8nは所定のバイト、例えば2112バイト毎に1ページを構成し、所定のページ、例えば64ページが1ブロックを構成する。各ブロックには有効なページと無効なページが混在する。有効なページとは、当該ページ内に書き込まれたデータが存在し、そのデータは有効であることを示している。無効なページとは、当該ページ内に何も書き込まれていないか、もしくは当該ページ内に以前書き込まれていたデータが無効になった場合を示している。このNAND型フラッシュメモリ81、82、...8nの各ページが有効Validか無効Invalidかを示すための有効ページ管理テーブル52がメインメモリ3内に設けられる。このテーブル52は図5に示すようにブロック毎の各ページの有効/無効を示すビットマップテーブルである。NAND型フラッシュメモリ81、82、...8nへの書き込みが正常に終了し、コマンドステータスをCPUに返す前に、有効ページ管理テーブル52の有効/無効状態が更新される。メインメモリ3には論理アドレスと物理アドレスの変換のための論物テーブル54、論理アドレスの順に有効ブロックの物理アドレスを並べた正引きテーブル56が設けられる。先ず、CPU2からNAND型フラッシュメモリ8の物理アドレスを指定してコンパクションコマンドを発行する図4のブロック10。この後、CPU10はコンパクション処理が終了するまで、待機状態となる。実際の実施例として、コンパクション処理中にホストからのデータアクセスが発生することが想定されるため、コンパクションの処理は割り込みによる検知を行っている。また、コンパクション処理の最中にコンパクション対象領域のデータが無効になるケースも存在し、その場合の処理を考慮している。メモリコントローラ1はNAND型フラッシュメモリ8の指定された物理アドレスのブロックの有効ページからデータを読み出すブロック102。読み出されたデータはデータ処理回路32によりユーザデータと管理データLBA/属性データとに分離されるブロック104。ユーザデータはメインメモリ3のユーザデータ領域に転送されるブロック108。一方、追記ポインタ58図2のコマンドシーケンサ30に含まれるによりライトアドレスが算出されるブロック106。コマンド処理回路28はライトアドレスとLBA/属性データとからライトコマンドを生成しブロック110、ライトコマンドをコマンドキュー26に投入するブロック112。コマンドキュー26から読み出されたライトコマンドにより、メインメモリ3から転送されたユーザデータがNAND型フラッシュメモリ8の指定されたアドレスにライトされるブロック114。ブロック114のように、ブロック102で実行したリードコマンドに後続してコマンドキュー26に配置されているライトコマンドの実行後続のライト時には、読み出したリードデータが、ライトを行う直前の時点で有効か無効かを再度判断する必要がある。これは、リード時は有効であったデータがコンパクション処理中に無効に変化する可能性があり、それに対応するためである。例えば、ホスト10によりユーザデータを上書きした場合は、NANDフラッシュメモリ8上では以前にユーザデータが書かれていた物理アドレスとは別の物理アドレスにデータが書き込みされ、以前にユーザデータが書かれていたNANDフラッシュメモリ8の物理アドレスにそれまでに存在していたデータリードデータは無効となる。このため、読み出したリードデータが無効になっている時は、無効なデータが書き込まれる0パディング。これは、今回の書き込みは無効であるので、書き込み動作自体を中止しても良いが、コマンドキュー26からライトコマンドが取り出された後に中止するのはハードウェア的に困難な場合があるので、書き込むデータを意味の無いものにして実質的に書き込みを中止し、ハードウェアの処理を簡単にするためである。ブロック116でテーブル更新回路34はメインメモリ3内の正引きテーブル56を更新する。その後、ブロック118でテーブル更新回路34はレスポンスキュー36に終了コマンドとステータスを送信してハードウェアとしてのコマンド処理が完了する。CPU2はレスポンスキュー36をリードすることによってコマンド実行ステータスを確認するブロック20。図6は追記ポインタ58の動作と正引きテーブル56の更新の様子を示す図である。ある時刻において、NANDフラッシュメモリ8の有効/無効ページの状態と正引きテーブル56の状態は図6の左側の状態更新前であるとする。追記ポインタ58の指す位置はブロック5のページ3とする。この状態において、コンパクション対象としてブロック0が選ばれたとする。コンパクション対象は有効ページ管理テーブル52の情報に基づいて、有効ページを含み最も数が小さいブロックが選ばれる。有効ページ管理テーブル52は2次元のビットマップ状に配置されているので、コンパクション対象候補のブロックの列挙を容易に行える。ブロック0の有効ページはページ1のみである。コンパクションのためには、最初にフリーブロック全てのページが無効6を取得して、そのブロックの先頭ページから順番に有効ページのデータをコピーする。ブロック0のページ1のデータをブロック6のページ0にコピーした状態を図6の右側に示す。次に、コピーしたデータブロック0のページ1のLBAの位置がコピー先の位置ブロック6のページ0を示すように正引きテーブル56を更新する。さらに、有効ページがなくなったブロック0をフリーブロック扱いにするために有効ページ管理テーブル52を更新ブロック0のページ1を無効化する。ブロック0のページ1のデータをブロック6のページ0にコピーしたことにより、追記ポインタ58はブロック6のページ1に移る。このように、ブロック5のページ3が無効から有効に変わったのは、コンパクション処理と平行して動作したユーザーWrite処理によるものである。本特許の本質でない為、詳細は割愛するが、追記ポインタの1加算、それまで追記ポインタが指していた位置へのデータ書き込み、正引きテーブルの更新された様子も示されている。図では、かつLBA重複があったため、そのLBAが無効にされた様子も示されている。以上説明したように、第1の実施の形態によれば、NANDフラッシュメモリ8のコンパクション処理を行う場合、CPU2は物理ブロックアドレスを指定してコンパクションコマンドを発生するだけでよい。フラッシュメモリコントローラ1はこのコマンドを受けると、当該ブロックから有効ページのデータをリードし、リードデータから分離した管理データLBA/属性データに対して追記ポインタにより発生したライトアドレスを追加してライトコマンドを発生する。このライトコマンドに対してメインメモリからのユーザデータを付加結合してNANDフラッシュメモリ8の指定アドレスへページ単位で書き込む。書き込み後、データがリードされたブロックが無効化され、正引きテーブルが更新される。これにより、CPU2からの1コマンドでコンパクション動作リード処理、後続のライト処理、正引きテーブルの更新処理を行うことができCPU処理負荷の低減が可能となるとともに、途中でソフトウェ処理が入らないため、システム全体の処理能力が速くなる。書き込みの直前にリードデータが無効となっているか否かを確認し、無効となっているときは、書き込みを中止する、あるいは無効なデータを書き込むことにより、コンパクションの最中にリードデータが無効になった場合にも対処できる。なお、この発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。例えば、本発明はホスト10により制御される半導体ドライブを例に説明したが、これに限らず、シリコンオーディオ機器、メモリメディアカードなどに適用することもできる。また、本発明は、コンピュータに所定の手段を実行させるため、コンピュータを所定の手段として機能させるため、コンピュータに所定の機能を実現させるため、あるいはプログラムを記録したコンピュータ読取り可能な記録媒体としても実施することもできる。また、コンパクションに限らず、不揮発性メモリの特性である一定期間毎のデータ移動への応用や、RMWへの応用も可能である。