(57)【要約】      （修正有）【課題】不揮発性半導体記憶素子内のブロックの消去回数を減少させるとともに、書き込み効率の向上を実現する。【解決手段】コントローラ１０は、複数のデータを第一の単位で第一の記憶領域１１に記憶する第一の処理と、第一の管理単位で第四の記憶領域１４に記憶する第二の処理と、第一の記憶領域１１から出力されるデータを、第二の管理単位で第三の記憶領域１３に記憶する第三の処理と、第四の記憶領域１４内の第三の単位の領域を選択し、選択された領域を第二の記憶領域１２に移動する第四の処理と、第四の記憶領域１４内のデータを選択して第二の単位の空き領域を持つ第三の単位の領域にコピーし、第三の単位の領域を第二の記憶領域１２に割り当てる第五の処理と、第二の記憶領域１２内のデータを選択し、選択されたデータを第二の記憶領域１２において第二の単位の空き領域を持つ第三の単位の領域にコピーする第六の処理と、を実行する。【選択図】図３７
2010250846.tif 000002
【特許請求の範囲】
【請求項１】
半導体記憶装置に対するアクセス単位である第一の単位以下でデータの書き込みを行う半導体記憶素子内に設定される第一の記憶領域と、
第二の単位でデータの書き込みを行い、前記第二の単位の二以上の自然数倍である第三の単位でデータの消去を行う不揮発性半導体記憶素子内に設定される第二、第三、及び第四の記憶領域と、
複数のデータを前記第一の単位で前記第一の記憶領域に記憶する第一の処理と、
前記第一の記憶領域から出力されるデータを、前記第一の単位の二以上の自然数倍かつ前記第三の単位よりも小さい第一の管理単位で前記第四の記憶領域に記憶する第二の処理と、
前記第一の記憶領域から出力されるデータを、前記第一の管理単位の二以上の自然数倍である第二の管理単位で前記第三の記憶領域に記憶する第三の処理と、
前記第四の記憶領域内の前記第三の単位の領域を選択し、前記選択された領域を前記第二の記憶領域に移動する第四の処理と、
前記第四の記憶領域内のデータを選択して前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーし、前記第三の単位の前記領域を前記第二の記憶領域に割り当てる第五の処理と、
前記第二の記憶領域内のデータを選択し、前記選択されたデータを前記第二の記憶領域において前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーする第六の処理と、
を実行するコントローラと、
を具備することを特徴とする半導体記憶装置。
【請求項２】
前記コントローラは、前記第二の処理において、
前記第一の管理単位のデータを構成し、かつ、前記第一の記憶領域内に記憶されていないデータを前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出し、
前記第一の記憶領域内に記憶されているデータと、前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出されたデータとを、前記第一の管理単位のデータへと統合する、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
前記コントローラは、前記第三の処理において、
前記第二の管理単位のデータを構成し、かつ、前記第一の記憶領域内に記憶されていないデータを前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出し、
前記第一の記憶領域内に記憶されているデータと、前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出されたデータとを、前記第二の管理単位のデータへと統合する、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項４】
前記コントローラは、前記不揮発性半導体記憶素子を構成する前記第三の単位の複数の領域を、前記第二、第三、及び第四の記憶領域それぞれに割り当てることを特徴とする請求項１に記載の半導体記憶装置。
【請求項５】
前記コントローラは、前記第一の記憶領域に空き領域が存在しないと判断した場合に、前記第二及び第三の処理の少なくとも一方を実行することを特徴とする請求項１に記載の半導体記憶装置。
【請求項６】
前記コントローラは、前記第一の処理において、
前記第一の単位のデータの論理アドレスを前記第一の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲に対応するエントリが前記第一の記憶領域内に存在するか否かを判断し、
前記エントリが存在すると判断した場合に、前記第一の単位のデータを前記第一の記憶領域内の前記エントリに対応する領域に記憶する、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項７】
前記コントローラは、
前記第一の処理において、前記エントリが存在しないと判断した場合に、未使用のエントリが前記第一の記憶領域内に存在するか否かを判断し、
前記未使用のエントリが前記第一の記憶領域内に存在しないと判断した場合に、前記第二及び第三の処理の少なくとも一方を実行する、ことを特徴とする請求項６に記載の半導体記憶装置。
【請求項８】
前記コントローラは、
前記第一の記憶領域から出力されるべきデータの論理アドレスを前記第二の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲内に含まれ、かつ、前記第一の記憶領域内に記憶されている前記第一の管理単位のデータを計数し、
計数された前記第一の管理単位のデータの合計が所定の閾値未満である場合に、前記第二の処理を実行し、
計数された前記第一の管理単位のデータの合計が所定の閾値以上である場合に、前記第三の処理を実行する、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項９】
前記コントローラは、前記第四の記憶領域における割り当て順序を、前記第三の単位のＦＩＦＯ構造で管理することを特徴とする請求項１に記載の半導体記憶装置。
【請求項１０】
前記コントローラは、
前記第四の記憶領域内の複数の有効及び無効データによって占有される前記第三の単位の領域の合計が許容範囲を超える場合に、前記第四及び第五の処理の少なくとも一方を実行する、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項１１】
前記コントローラは、前記第四の処理において、
有効データの合計が所定の閾値以上である前記第三の単位の領域を選択し、
前記第三の単位の前記選択された領域を、前記第四の記憶領域から、前記第二の記憶領域に割り当てる、
ことを特徴とする請求項１０に記載の半導体記憶装置。
【請求項１２】
前記コントローラは、前記第五の処理において、
前記第四の処理を実行した後、最も古い割り当て順序を持つ前記第三の単位の領域から順番に、前記第四の記憶領域内の有効データを連続して選択する、
ことを特徴とする請求項１１に記載の半導体記憶装置。
【請求項１３】
前記コントローラは、
前記第二の記憶領域から出力されるべき前記第一の管理単位の有効データを選択し、前記選択された有効データを含むデータを、前記第二の管理単位で前記第三の記憶領域に記憶する第七の処理を、更に実行することを特徴とする請求項１に記載の半導体記憶装置。
【請求項１４】
前記コントローラは、前記第七の処理において、
前記選択されたデータの論理アドレスを前記第二の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲に含まれるデータを前記第一、第二、第三、及び第四の記憶領域の少なくとも一つから読み出し、
前記選択されたデータと、前記第一、第二、第三、及び第四の記憶領域の少なくとも一つから読み出されたデータとを、前記第二の管理単位のデータへと統合する、
ことを特徴とする請求項１３に記載の半導体記憶装置。
【請求項１５】
前記コントローラは、
前記第二の記憶領域内の複数の有効及び無効データによって占有される前記第三の単位の領域の合計が許容範囲を超える場合に、前記第六及び第七の処理の少なくとも一方を実行する、
ことを特徴とする請求項１３に記載の半導体記憶装置。
【請求項１６】
前記コントローラは、
前記第二の記憶領域内において、前記第三の単位の複数の領域を含む窓の範囲内で前記第一の管理単位の有効データを計数し、
前記窓内の有効データの合計が所定の閾値を超える場合は、前記第二の記憶領域において古い割り当て順序側から新しい割り当て順序側へ窓をシフトし、
前記窓内の有効データの合計が所定の閾値以下である場合は、前記窓内の有効データに対して、前記第六及び第七の処理の少なくとも一方を実行する、
ことを特徴とする請求項１５に記載の半導体記憶装置。
【請求項１７】
前記所定の閾値は、前記窓内の前記第三の単位の領域より一つ少ない前記第三の単位の領域内に記憶可能なデータの合計に等しいことを特徴とする請求項１６に記載の半導体記憶装置。
【請求項１８】
前記コントローラは、前記第七の処理において、
前記窓内の有効データの論理アドレスを前記第二の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲内に含まれ、かつ、前記第二及び第四の記憶領域内に記憶されている有効データの合計を計数し、
計数された有効データの合計が所定の閾値以上の場合に、前記第七の処理の対象として有効データを選択する、
ことを特徴とする請求項１６に記載の半導体記憶装置。
【請求項１９】
前記コントローラは、前記第六の処理において、
前記第七の処理を実行した後、前記窓内の前記第三の単位の複数の領域から前記第二の記憶領域内において新しい割り当て順序側へと順番に、連続して有効データを選択する、
ことを特徴とする請求項１６に記載の半導体記憶装置。
【請求項２０】
前記コントローラは、前記第六の処理において、
有効データによって書き込まれた前記第三の単位の領域を、前記窓よりも古い割り当て順序側に挿入する、
ことを特徴とする請求項１９に記載の半導体記憶装置。
【請求項２１】
前記コントローラは、前記窓が前記第二の記憶領域において最も新しい割り当て順序側に到達する場合に、
最も古い割り当て順序を持つ前記第三の単位の領域内の前記第一の管理単位の全ての有効データを選択し、
前記選択された有効データを含むデータを、前記第二の管理単位で前記第三の記憶領域に記憶する、
ことを特徴とする請求項２０に記載の半導体記憶装置。
【請求項２２】
前記コントローラは、前記第二の記憶領域に割り当てられた前記第三の単位の領域の内で、前記第一の管理単位のデータが全て無効化された前記第三の単位の領域を解放することを特徴とする請求項４に記載の半導体記憶装置。
【請求項２３】
前記コントローラは、前記第四の記憶領域に割り当てられた前記第三の単位の領域の内で、前記第一の管理単位のデータが全て無効化された前記第三の単位の領域を解放することを特徴とする請求項４に記載の半導体記憶装置。
【請求項２４】
前記コントローラは、前記第三の記憶領域に割り当てられた前記第三の単位の領域の内で、前記第二の管理単位のデータが全て無効化された前記第三の単位の領域を解放することを特徴とする請求項４に記載の半導体記憶装置。
【請求項２５】
前記第二の単位のサイズは、前記第一の管理単位のサイズの二以上の自然数倍であることを特徴とする請求項１に記載の半導体記憶装置。
【請求項２６】
前記第一の管理単位のサイズは、前記第二の単位のサイズの二以上の自然数倍であり、かつ、前記第三の単位のサイズは、前記第一の管理単位のサイズの二以上の自然数倍であることを特徴とする請求項１に記載の半導体記憶装置。
【請求項２７】
前記第二の管理単位のサイズは、前記第三の単位のサイズの二以上の自然数倍であることを特徴とする請求項１に記載の半導体記憶装置。
【請求項２８】
前記第二の管理単位のサイズは、前記第二の単位のサイズの二以上の自然数倍であり、かつ、前記第三の単位のサイズは、前記第二の管理単位のサイズの二以上の自然数倍であることを特徴とする請求項１に記載の半導体記憶装置。
【請求項２９】
前記第一の管理単位のサイズは、前記第二の単位のサイズに等しいことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３０】
前記第二の管理単位のサイズは、前記第三の単位のサイズに等しいことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３１】
前記揮発性半導体記憶素子はＤＲＡＭであり、前記不揮発性半導体記憶素子はＮＡＮＤ型フラッシュメモリであることを特徴とする請求項１に記載の半導体記憶装置。
【請求項３２】
前記不揮発性半導体記憶素子は、一つのメモリセルに複数ビットのデータをプログラム可能な前記第三の単位の複数のＭＬＣ（Multi Level Cell）領域を含むことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３３】
前記不揮発性半導体記憶素子は、一つのメモリセルに複数ビットのデータをプログラム可能な前記第三の単位の複数のＭＬＣ（Multi Level Cell）領域と、一つのメモリセルに単一ビットのデータをプログラム可能な複数のＳＬＣ（Single Level Cell）領域と、を含み、
前記コントローラは、前記複数のＳＬＣ領域を前記第四の記憶領域に割り当て、前記複数のＭＬＣ領域を前記第三の記憶領域に割り当てる、
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３４】
前記コントローラは、
前記第四の処理において、前記第一の管理単位の有効データを記憶している前記ＳＬＣ領域を、前記第四の記憶領域から前記第二の記憶領域に移動し、
前記第二の記憶領域内において、前記複数のＳＬＣ領域に記憶されている前記第一の管理単位の有効データを選択し、
前記選択された有効データを、前記第二の記憶領域において前記第二の単位の複数の空き領域を持つ前記ＭＬＣ領域にコピーする、
ことを特徴とする請求項３３に記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体メモリを備えた半導体記憶装置に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリのように、不揮発性半導体メモリには、データを記憶させる場合に、ブロックと呼ばれる単位で一度データを消去してからその後に書き込みを行うものがあったり、ページと呼ばれる単位で読み出し／書き込みを行うものがあったり、消去／読み出し／書き込みの単位が固定されていたりするものがある。
【０００３】
一方、パーソナルコンピュータ等のホスト機器がハードディスクをはじめとする二次記憶装置に対してデータの読み出し／書き込みを行う単位は、セクタと呼ばれる。セクタは、不揮発性半導体メモリの消去／読み出し／書き込みの単位とは独立に定められる。
【０００４】
例えば、不揮発性半導体メモリのブロックの大きさ(ブロックサイズ)は、５１２キロバイト、ページの大きさ(ページサイズ)は、４キロバイトであるのに対して、ホスト機器のセクタの大きさ(セクタサイズ)は、５１２バイトのように定められる。
【０００５】
このように、不揮発性半導体メモリの消去／読み出し／書き込みの単位は、ホスト機器の読み出し／書き込みの単位よりも大きい場合がある。
【０００６】
ここで、このような不揮発性半導体メモリを用いてハードディスクのようなパーソナルコンピュータの二次記憶装置を構成する場合、ホスト機器としてのパーソナルコンピュータからのセクタサイズのデータは、不揮発性半導体メモリのブロックサイズ、ページサイズに適合させてそれに書き込む必要がある。
【０００７】
また、ＮＡＮＤ型フラッシュメモリ等のフラッシュメモリは、データの書き込みに先立って行うブロックの消去回数の増加に応じてメモリセルの劣化が進行していく性質を有するため、不揮発性半導体メモリの全てのメモリセルの消去回数が概ね等しくなるように、データ更新箇所を不揮発性半導体メモリ内で均等に分散させるウェアレベリングと呼ばれる処理が行われる。
【０００８】
例えば、ホスト機器から指定される二次記憶装置の論理アドレスを、データ更新箇所を示す不揮発性半導体メモリの物理アドレスにアドレス変換することでデータ更新箇所を均等に分散させる。
【０００９】
一方で、大容量の二次記憶装置において上記アドレス変換を行う場合、データ管理の単位が小さいサイズ(例えば、ページサイズ)であると、論理アドレスと物理アドレスとの対応表(アドレス変換テーブル、管理テーブル)が大きくなってしまい、二次記憶装置のコントローラの主記憶メモリに納まらなくなり、アドレス変換が高速にできなくなるという問題がある。そのため、二次記憶装置内のデータ管理の単位は、例えば、ブロックサイズ等、ページサイズよりも大きな単位とする必要がある。
【００１０】
このような問題を改善するために、データを保存したブロック(データブロック)にログブロックと呼ばれる別のブロックを対応付けて設ける技術が知られている（例えば、特許文献１を参照）。
【００１１】
この技術は、データの書き込みをログブロックの空きページに対して行い、ログブロックの空きページがなくなった時またはログブロックエリアが足りなくなった時に、ログブロックに記憶されたデータをデータブロックに反映し、書き込み効率の向上を図るものである。
【００１２】
しかし、この技術の問題点は、データブロックとログブロックとが一対一の対応となるために、同時に更新可能なブロック数がログブロック数に限定されることにある。
【００１３】
即ち、小さなサイズのデータ書き込みが多数のブロックに対して行われると、ログブロックに空きページが多数ある状況でデータブロックに反映することになり、結果として、書き込み効率が向上しなくなる。
【００１４】
また、ブロックの消去回数を抑制するために、ブロックサイズよりも小さな単位であるページサイズ等でデータを管理し、更新されたページサイズのデータを別の消去済みのブロックに追記していく（追加的に書き込んでいく）、といった方式が取られることがある。
【００１５】
この場合、更新されたページサイズのデータは、別のブロックに書き込まれるため、元々記憶されていた領域のデータは無効データとなるが、その無効データを含むブロック内に有効データが存在する場合にはそのブロック内のデータを消去して再利用することができない。
【００１６】
なぜなら、消去はブロック単位で行う必要があるため、同一のブロック内に有効データが記憶されている場合には、その有効データの消去を防止するため、その有効データを他のブロックに書き直すまではブロック内のデータの消去を行えないからである。
【００１７】
このような無効データの存在により、有効データの量よりも多くの不揮発性半導体メモリの記憶領域が必要となる。
【００１８】
しかしながら、二次記憶装置内のデータの更新が進むと、無効データの量が増加するため、無効データ及び有効データを含めたデータ容量が大きくなり、これら全てを不揮発性半導体メモリの記憶領域に記憶しきれなくなる場合がある。
【００１９】
そこで、無効データを削除する目的で、複数のブロック内の有効データを集めて未使用のブロックに書き直す処理（コンパクション）が行われる（例えば、特許文献２を参照）。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】特開２００２−３６６４２３号公報
【特許文献２】特開２００５−２２２５５０号公報
【発明の概要】
【００２１】
本発明の例に係わる半導体記憶装置は、半導体記憶装置に対するアクセス単位である第一の単位以下でデータの書き込みを行う半導体記憶素子内に設定される第一の記憶領域と、第二の単位でデータの書き込みを行い、前記第二の単位の二以上の自然数倍である第三の単位でデータの消去を行う不揮発性半導体記憶素子内に設定される第二、第三、及び第四の記憶領域と、複数のデータを前記第一の単位で前記第一の記憶領域に記憶する第一の処理と、前記第一の記憶領域から出力されるデータを、前記第一の単位の二以上の自然数倍かつ前記第三の単位よりも小さい第一の管理単位で前記第四の記憶領域に記憶する第二の処理と、前記第一の記憶領域から出力されるデータを、前記第一の管理単位の二以上の自然数倍である第二の管理単位で前記第三の記憶領域に記憶する第三の処理と、前記第四の記憶領域内の前記第三の単位の領域を選択し、前記選択された領域を前記第二の記憶領域に移動する第四の処理と、前記第四の記憶領域内のデータを選択して前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーし、前記第三の単位の前記領域を前記第二の記憶領域に割り当てる第五の処理と、前記第二の記憶領域内のデータを選択し、前記選択されたデータを前記第二の記憶領域において前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーする第六の処理と、を実行するコントローラとを備える。
【図面の簡単な説明】
【００２２】
【図１】第一の基本構成を示す図である。
【図２】第二の基本構成を示す図である。
【図３】キャッシュ管理テーブルを示す図である。
【図４】ページ管理テーブルを示す図である。
【図５】ページ管理テーブルを示す図である。
【図６】ブロック管理テーブルを示す図である。
【図７】物理ブロック管理テーブルを示す図である。
【図８】物理ブロック管理テーブルを示す図である。
【図９】第一の記憶部へのデータ蓄積処理を示すフローチャートである。
【図１０】第一の記憶部からのデータ出力処理を示すフローチャートである。
【図１１】第一の記憶部からのデータ出力処理を示すフローチャートである。
【図１２】第一の記憶部から第二の記憶部へのデータ転送の様子を示す図である。
【図１３】第一の記憶部から第三の記憶部へのデータ転送を示す図である。
【図１４】第一の記憶部から第三の記憶部へのデータ転送を示す図である。
【図１５】第二の記憶部から第三の記憶部へのデータ転送を示すフローチャートである。
【図１６】第二の記憶部から第三の記憶部へのデータ転送の条件を示す図である。
【図１７】システム例を示す図である。
【図１８】システム例を示す図である。
【図１９】コンパクションの例を示す図である。
【図２０】第一の実施形態の構成を示す図である。
【図２１】キャッシュ管理テーブルを示す図である。
【図２２】ページ管理テーブルを示す図である。
【図２３】ブロック管理テーブルを示す図である。
【図２４】ページＦＩＦＯ管理テーブルを示す図である。
【図２５】物理ブロック管理テーブルを示す図である。
【図２６】第四の記憶部でのＦＩＦＯ処理を示すフローチャートである。
【図２７】処理Ｐ１を示すフローチャートである。
【図２８】コンパクションの処理例１を示すフローチャートである。
【図２９】コンパクションの処理例２を示すフローチャートである。
【図３０】第二の実施形態の構成を示す図である。
【図３１】トラック管理テーブルを示す図である。
【図３２】トラックＦＩＦＯ管理テーブルを示す図である。
【図３３】物理ブロック管理テーブルを示す図である。
【図３４】第五の記憶部でのＦＩＦＯ処理を示すフローチャートである。
【図３５】コンパクションの処理例１を示すフローチャートである。
【図３６】コンパクションの処理例２を示すフローチャートである。
【図３７】第三の実施形態の構成を示す図である。
【図３８】第四の記憶部でのＦＩＦＯ処理を示すフローチャートである。
【図３９】処理Ｐ１を示すフローチャートである。
【図４０】第四の記憶部の状態を示す図である。
【図４１】第二の記憶部から第三の記憶部へのデータ転送処理及びコンパクション処理の例を示すフローチャートである。
【図４２】第二の記憶部の状態を示す図である。
【図４３】第二の記憶部の状態を示す図である。
【図４４】第二の記憶部の状態を示す図である。
【図４５】第二の記憶部の状態を示す図である。
【図４６】第二の記憶部の状態を示す図である。
【図４７】データの管理単位の一例を説明するための図である。
【図４８】クラスタ管理テーブルを示す図である。
【図４９】第四の記憶部でのＦＩＦＯ処理を示すフローチャートである。
【図５０】ＳＳＤの例を示す図である。
【図５１】ブロックの構成例を示す図である。
【図５２】メモリセルトランジスタの閾値分布を示す図である。
【図５３】ドライブ制御回路の構成例を示す図である。
【図５４】プロセッサの構成例を示す図である。
【図５５】ポータブルコンピュータの例を示す図である。
【図５６】ポータブルコンピュータのシステム構成例を示す図である。
【発明を実施するための形態】
【００２３】
以下、図面を参照しながら、本発明を実施するための最良の形態について説明する。
【００２４】
［Ｉ．書き込み効率の向上を実現する半導体記憶装置］  
１．  概要  
本発明の実施形態に係る半導体記憶装置は、ホスト機器からのセクタ単位の入力データを第一の記憶部に書き込み、ここで、そのデータが「小さな単位（第一の管理単位）」として管理すべきデータか、または、「大きな単位（第二の管理単位）」として管理すべきデータかを識別し、「小さな単位」として管理すべきデータを第二の記憶部に、「大きな単位」として管理すべきデータを第三の記憶部に書き込むことを特徴とする。
【００２５】
また、本発明の実施形態に係る半導体記憶装置は、第二の記憶部に書き込まれた「小さな単位」のデータを統合して、一つの「大きな単位」のデータにし、これを第三の記憶部に書き込むことを特徴とする。
【００２６】
「大きな単位」は、「小さな単位」の自然数倍の大きさとする。それぞれの「小さな単位」のデータにおいては、複数のセクタ単位のデータが論理アドレス順に連続して配列されている。同様に、それぞれの「大きな単位」のデータにおいては、複数のセクタ単位のデータが論理アドレス順に連続して配列されている。
【００２７】
即ち、本実施形態に係る半導体記憶装置は、狭い論理アドレス範囲に属する複数のセクタ単位のデータ（細粒度データ）を「小さな単位」のデータとして第二の記憶部に記憶し、広い論理アドレス範囲に属する複数のセクタ単位のデータ（粗粒度データ）を「大きな単位」のデータとして第三の記憶部に記憶する。
【００２８】
また、第二の記憶部に一定量の「小さな単位」のデータが蓄積された時点で、本実施形態に係る半導体記憶装置は、そのデータを「大きな単位」のデータに統合し、この「大きな単位」のデータを第三の記憶部に記憶する（デフラグメンテーション）。
【００２９】
例えば、「小さな単位」、「大きな単位」の大きさが、ＮＡＮＤ型フラッシュメモリのページサイズ、ブロックサイズとそれぞれ等しい場合を考える。即ち、第一の記憶部にセクタ単位（第一の単位）のデータを書き込み、第二の記憶部にページ単位（第二の単位）のデータを書き込み、第三の記憶部にブロック単位（第三の単位）のデータを書き込む場合を考える。
【００３０】
この場合、ホスト機器から半導体記憶装置に入力されるセクタサイズのデータは、最初に、第一の記憶部に書き込まれる。第一の記憶部に書き込まれたデータは、そのデータ数またはデータ量に基づいて、第二の記憶部に書き込むか、または、第三の記憶部に書き込むかが決定される。
【００３１】
即ち、第一の記憶部に書き込まれたデータが第一の条件を満たす場合は、そのデータは「大きな単位」として管理され、第三の記憶部の各ブロックにブロック単位のデータとして記憶する。この場合、書き込みに伴ってブロック単位のデータを消去しても書き込み効率は悪くならない。
【００３２】
一方、第一の記憶部に書き込まれたデータが第一の条件を満たさない場合は、そのデータは「小さな単位」として管理され、第二の記憶部の各ページにページ単位のデータとして記憶する。この場合、ページ単位のデータの追記を行うことで、ブロック単位のデータの消去を減らすことができる。
【００３３】
第二の記憶部に書き込まれたページ単位に等しい「小さな単位」のデータは、更に、第二の条件に基づいて選択され、第二の条件に基づいて選択されたデータを含む複数のデータを統合して「大きな単位」のデータとし、これを第三の記憶部の各ブロックにブロック単位のデータとして記憶する。
【００３４】
第一の条件は、例えば、データ数により規定される。
【００３５】
即ち、第一の記憶部に蓄積されたデータの数が所定の閾値に達する場合にはそのデータを第三の記憶部に転送し、第一の記憶部に蓄積されたデータの数が所定の閾値に達しない場合にはそのデータを第二の記憶部に転送する。
【００３６】
また、これに代えて、第一及び第二の記憶部に蓄積されたデータの合計数が所定の閾値に達するか否かを判定してもよい。即ち、その合計数が所定の閾値に達する場合にはそのデータを第三の記憶部に転送し、その合計数が所定の閾値に達しない場合にはそのデータを第二の記憶部に転送する。
【００３７】
第二の条件は、例えば、書き込み順序または有効データ数により規定される。
【００３８】
前者の場合、第二の記憶部に割り当てられた各ブロックから検出された、書き込み順序が最も古いブロック内のデータから順次選択し、選択されたデータを第三の記憶部に転送する。
【００３９】
後者の場合、第二の記憶部に割り当てられた各ブロックについて、ブロック内の有効なページ単位のデータの論理アドレスをブロック単位のサイズにアラインした論理アドレス範囲内に、いくつのページ単位の有効データが第二の記憶部に記憶されているかを合計し、その合計値が最大であるブロック内の有効データを第三の記憶部に転送する。
【００４０】
尚、「論理アドレスを所定サイズ（ページ単位のサイズ、ブロック単位のサイズ等）にアラインする」とは、論理アドレスを所定サイズで割り算した時の剰余が０になるアドレスに切り下げることを意味する。例えば論理アドレスＡをサイズＳにアラインしたアドレスは、（Ａ−（ＡをＳで割った余り））となる。同様に、「所定サイズにアラインされた論理アドレス範囲」とは、論理アドレスを所定サイズにアラインしたアドレスから所定サイズ分の範囲を意味する。
【００４１】
本実施形態に係る半導体記憶装置によれば、ホスト機器からのデータサイズまたはデータ量にかかわらず、書き込み効率の向上を図り、性能劣化及び寿命短縮を防止することができる。
【００４２】
特に、本実施形態の効果は、消去／読み出し／書き込みの単位が固定される不揮発性半導体記憶素子（例えば、ＮＡＮＤ型フラッシュメモリ）で半導体記憶装置を構成し、パーソナルコンピュータ等の二次記憶装置（ＳＳＤ: Solid State Drive）として使用した場合に最も顕著に表われる。
【００４３】
このような半導体記憶装置は、大容量化の傾向にあり、また、大容量化が複数ビットを一つのメモリセルに記憶させるＭＬＣ（Multi Level Cell）技術により実現されるような場合には、実効的な書き込み速度を維持するために、消去／読み出し／書き込みの単位が大きくなる傾向があるからである。
【００４４】
また、パーソナルコンピュータ等は「小さな単位」で二次記憶装置上のデータを更新する場合が多く、これをブロック等の「大きな単位」のみで管理すると、更新データ量に対するデータ消去量が大きくなり、書き込み効率が低下し、メモリセルの劣化が早まるからである。
【００４５】
本実施形態のように、ホスト機器からの入力データを「小さな単位」と「大きな単位」とに分けて、それぞれを異なる記憶部に書き込めば、そのような問題が発生する可能性を低減させることが可能となる。
【００４６】
即ち、半導体記憶装置内部で「小さな単位」と「大きな単位」という二つの管理単位を併用することで、ホスト機器からの書き込みデータ量に対して不揮発性半導体記憶素子のデータ消去量を最適化し、書き込み効率の向上を実現する。
【００４７】
２．  実施形態  
本発明の実施形態について説明する。
【００４８】
まず、本実施形態に関連する概念として書き込み効率について述べる。
【００４９】
ＮＡＮＤ型フラッシュメモリ等のフラッシュメモリのメモリセルの劣化に関しては、ホスト機器側からの書き込みデータ量に対して必要なフラッシュメモリのブロック単位のデータの消去量が重要なファクターとなる。
【００５０】
本実施形態では、このデータ消去量のことを「書き込み効率の値」と呼ぶことにする。
【００５１】
書き込みデータ量に対するブロック単位のデータの消去量が小さければ、書き込み効率の値が小さくなり相対的にメモリセルの劣化の進行が遅くなる。これを、書き込み効率が良くなるとする。逆に、ブロック単位のデータの消去量が大きければ、書き込み効率の値が大きくなる。これを、書き込み効率が悪くなるとする。
【００５２】
つまり、フラッシュメモリのメモリセルの劣化を防ぐためには、ブロック単位のデータの消去量を小さくし、書き込み効率を良くすることが重要になる。
【００５３】
フラッシュメモリを用いた半導体記憶装置において書き込み効率が悪くなる例を示す。
【００５４】
この例では、フラッシュメモリのブロック単位のサイズを５１２キロバイト、ページ単位のサイズを４キロバイト、ホスト機器のセクタ単位のサイズを５１２バイト、データ管理の単位をブロック単位と同じ５１２キロバイトと仮定する。
【００５５】
ここで、ブロック単位と同じ大きさのデータＸがフラッシュメモリに記憶されている状態で、論理アドレスがデータＸの論理アドレスの範囲に含まれる１セクタの大きさのデータＹが更新された時の処理を考える。
【００５６】
データＸは、フラッシュメモリのブロックＢ１内の全体に記憶されているとする。
【００５７】
まず、ブロックＢ１からデータＸを一時保存エリアに読み出し、データＸの一部についてホスト機器からのデータＹの更新を行い、最新データを作成する。そして、ブロックＢ１とは異なるブロックＢ２のデータを消去し、ブロックＢ２内に最新データを書き込む。
【００５８】
この処理では、上述のように、５１２バイトのデータＹを書き込むために、５１２キロバイトのデータＸをブロックＢ１から読み出し、更に、最新データをブロックＢ２に書き込むために、ブロックＢ２内の５１２キロバイトのデータを消去する必要がある。
【００５９】
従って、ホスト機器からの書き込みデータ量に対して、フラッシュメモリ内での消去量が大きく、書き込み効率が非常に悪い。
【００６０】
この例での書き込み効率の値は、５１２キロバイト／５１２バイト＝１０２４となる。
【００６１】
通常、ＮＡＮＤ型フラッシュメモリでは、ブロックの消去処理及び書き込み処理に多くの時間を費やすため、書き込み効率が悪いということは、ホスト機器からのデータ書き込み量に対して、ブロック単位のデータの消去や、データを消去したブロックへの書き込みが多いことを表し、フラッシュメモリの速度性能を悪くすることを同時に意味する。
【００６２】
（１）  基本構成  
図１は、本実施形態に係る半導体記憶装置の第一の基本構成を示している。
【００６３】
第一の記憶部１１は、ホスト機器からのデータを一時的に記憶しておくもので、そのデータは、セクタ単位（第一の単位）ごとに第一の記憶部１１に書き込まれる。第一の記憶部１１は、例えば、ＤＲＡＭ(Dynamic Random Access Memory)等の揮発性半導体記憶素子から構成される。
【００６４】
第一の記憶部１１を構成する揮発性半導体記憶素子内における読出し／書き込みの物理的な単位は、セクタ単位以下であるとする。ホスト機器は、セクタ単位の論理アドレスを用いて半導体記憶装置に対するアクセスを行う（ＬＢＡ：Logical Block Addressing）ため、第一の記憶部１１は、セクタ単位で入力データの管理を行う。
【００６５】
第二の記憶部１２は、例えば、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体記憶素子の複数のブロックから構成される。第三の記憶部１３は、例えば、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体記憶素子の複数のブロックから構成される。
【００６６】
第二及び第三の記憶部１２，１３は、それぞれ別々の不揮発性半導体記憶素子（メモリチップ）から構成される。それぞれのメモリチップは互いに異なる性能を備えていても良く、例えば、互いに異なる書き込み速度、互いに異なる記憶容量を備えていても良い。例えば、第二の記憶部１２がＳＬＣ（Single Level Cell）技術を用いたＮＡＮＤ型フラッシュメモリから構成され、第三の記憶部１３がＭＬＣ（Multi Level Cell）技術を用いたＮＡＮＤ型フラッシュメモリから構成されていても良い。
【００６７】
不揮発性半導体記憶素子内において、一括して読出し／書き込みの行われる単位がページ（第二の単位）であり、一括して消去の行われる単位がブロック（第三の単位）である。
【００６８】
一つのブロックは、複数のページから構成されている。また、本実施形態に係る不揮発性半導体記憶素子は、同一のページに対する再書き込みは、そのページを含むブロック全体を消去した後でなければ不可能であるという性質を有している。
【００６９】
従って、更新データ（新データ）がホスト装置から入力された場合、ブロック内に元々記憶されていた、新データと同一の論理アドレスを有する旧データは、無効データとして取り扱われる。新データは、旧データに対して優先度が高い有効データとして取り扱われ、旧データは、新データを参照することにより無視される無効データとして取り扱われる。
【００７０】
以下、簡略化のため、半導体記憶装置内部でのデータの管理単位である「小さな単位（第一の管理単位）」の大きさがページ単位のサイズ（１ページに記憶可能なデータ量）と等しく、「大きな単位（第二の管理単位）」の大きさがブロック単位のサイズ（１ブロックに記憶可能なデータ量）と等しい場合について説明する。「小さな単位」はセクタの自然数倍の大きさの単位とする。
【００７１】
尚、データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ（ＥＣＣ：Error Checking/Correcting Code、内部制御用フラグ等）が含まれないものとする。
【００７２】
通常、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体記憶素子を含むシステムでは、主データに対して冗長データが付加された状態で読み出し、書き込みが行われるが、簡略化のため、上述のように定義する。
【００７３】
第二の記憶部１２は、第一の記憶部１１から転送されるデータを、ページ単位に等しい「小さな単位」ごとに記憶する。第三の記憶部１３は、第一の記憶部１１または第二の記憶部１２から転送されるデータを、ブロック単位に等しい「大きな単位」ごとに記憶する。
【００７４】
第二の記憶部１２の容量は、一部の「小さな単位」で更新されたデータのみを管理すればよいため、第三の記憶部１３の容量よりも小さくて構わない。
【００７５】
以下の説明では、一つのブロック単位のデータは、一つのブロック内の全体に記憶されるものとし、一つのページ単位のデータは、一つのページ内の全体に記憶されるものとする。それぞれのブロックは複数のページによって構成され、複数のページ単位のデータが１つのブロックに記憶されるものとする。
【００７６】
コントローラ１０は、ＣＰＵと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。尚、本実施形態においてコントローラ１０が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、またはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれるものである。
【００７７】
コントローラ１０は、論理アドレスでアクセスされるデータが第一乃至第三の記憶部１１，１２，１３の何処に記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル及び物理ブロック管理テーブルを主記憶メモリ内に備える。
【００７８】
コントローラ１０の主記憶メモリが、ＤＲＡＭ等の揮発性半導体記憶素子で構成される場合は、第一の記憶部１１を、コントローラ１０の主記憶メモリ内に配置しても良い。
【００７９】
図２は、本実施形態に係る半導体記憶装置の第二の基本構成を示している。
【００８０】
第二の基本構成は、図１の第一の基本構成と比べると、以下の点が相違している。
【００８１】
第二及び第三の記憶部１２，１３は、不揮発性半導体記憶素子２２内に配置される。第一の記憶部１１を構成する揮発性半導体記憶素子は、例えばＤＲＡＭとし、第二及び第三の記憶部１２，１３を構成する不揮発性半導体記憶素子２２は、例えばＮＡＮＤ型フラッシュメモリとする。
【００８２】
第二及び第三の記憶部１２，１３は、不揮発性半導体記憶素子２２内の記憶領域を共有して形成され、コントローラ１０が不揮発性半導体記憶素子２２内のブロックを第二の記憶部１２、または、第三の記憶部１３に割り当てる。第二及び第三の記憶部１２，１３に対するブロックの割り当ては固定的ではなく、コントローラ１０の制御下で動的に変更される。第二及び第三の記憶部１２，１３は、複数の不揮発性半導体記憶素子（メモリチップ）に亘って形成されていても良い。コントローラ１０は、複数の不揮発性半導体記憶素子内の全ブロックを抽象的に１つの記憶領域として取り扱っても良い。
【００８３】
コントローラ１０は、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、及び物理ブロック管理テーブルを主記憶メモリ内に備える。
【００８４】
図１及び図２において、半導体記憶装置への電源供給がない状態では、これらの管理テーブルは不揮発性半導体記憶素子内に保持されている。コントローラ１０は、電源供給時に各管理テーブルを主記憶メモリに展開し、ホスト機器から指定される論理アドレス空間と、不揮発性半導体記憶素子上での物理的なデータ記憶位置とを対応させるためのアドレス変換を行う。
【００８５】
・  キャッシュ管理テーブル  
図３は、キャッシュ管理テーブルの構成例を示している。
【００８６】
キャッシュ管理テーブルは、図１及び図２の第一の記憶部１１に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。また、有効データの管理は、セクタ単位で実行される。
【００８７】
第一の記憶部１１の１ページ単位の領域一つに対して１エントリとする。
【００８８】
エントリ数は、第一の記憶部１１に収まるページ単位のデータ数、即ち、（第一の記憶部１１の全容量）／（ページ単位のサイズ）以下とする。
【００８９】
各エントリには、ページ単位のデータの論理アドレス、第一の記憶部１１の物理アドレス、及び、対応するページ単位の領域内の有効データの位置を表すセクタフラグが関連付けられている。
【００９０】
各エントリに対応付けて、データを一時的に記憶するためのページ単位の領域を第一の記憶部１１内に用意し、その領域の物理アドレスを各エントリに格納する。ページ単位の領域が連続的に配置されている等、エントリに対応する領域の物理アドレスが固定的であれば、物理アドレスをエントリ内に格納する必要はない。
【００９１】
キャッシュ管理テーブルにおいて、第一の記憶部１１の各ページ単位の領域は、更にセクタ単位の領域に分割され、各セクタ単位の領域内のデータの状態を、セクタフラグの値を「有」または「無」にすることで示す。
【００９２】
セクタフラグが「有」の領域には、ホスト機器からの有効データが記憶されている。これに対し、セクタフラグが「無」の領域には、ホストから書き込まれた最新のデータが記憶されておらず、無効な領域となる。また、エントリ内の全てのセクタフラグが「無」のエントリは、未使用のエントリとみなす。
【００９３】
尚、上記キャッシュ管理テーブルの構成は、各エントリに論理アドレスを割り当てるフルアソシアティブと呼ばれる管理方法を元にしているが、ｎ−ｗａｙセットアソシアティブ等の方法で、第一の記憶部１１における論理アドレスと物理アドレスの対応を管理してもよい。
【００９４】
・  ページ管理テーブル  
図４は、ページ管理テーブルの構成例を示している。
【００９５】
ページ管理テーブルは、図１及び図２の第二の記憶部１２に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【００９６】
第二の記憶部１２の１ページ単位の領域一つに対して１エントリとする。
【００９７】
エントリ数は、第二の記憶部１２に収まるページ単位のデータ数、即ち、（第二の記憶部１２の全容量）／（ページ単位のサイズ）以下とする。
【００９８】
各エントリには、ページ単位のデータの論理アドレスと第二の記憶部１２の物理アドレスとが関連付けられている。
【００９９】
例えば、論理アドレスＡの１ページ単位分のデータは、物理アドレスＡにより指定される第二の記憶部１２のブロック０の１番目のページに記憶され、論理アドレスＣの１ページ単位分のデータは、物理アドレスＣにより指定される第二の記憶部１２のブロック１の２番目のページに記憶される。無効なエントリは、エントリの有効・無効を示すフラグを用意する、無効な論理アドレスや物理アドレスをエントリに記憶する等の手段で表現する。
【０１００】
図５は、ページ管理テーブルの別の例を示している。図５におけるページ管理テーブルについては、後述する。
【０１０１】
・  ブロック管理テーブル  
図６は、ブロック管理テーブルの構成例を示している。
【０１０２】
ブロック管理テーブルは、図１及び図２の第三の記憶部１３に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。
【０１０３】
第三の記憶部１３の１ブロック単位の領域一つに対して１エントリとする。
【０１０４】
エントリ数は、第三の記憶部１３に収まるブロック単位のデータ数、即ち、（第三の記憶部１３の全容量）／（ブロック単位のサイズ）以下とする。
【０１０５】
各エントリは論理アドレス順に配列されている。ブロック単位のデータの論理アドレスに対応して、第三の記憶部１３内のブロックを指定する物理アドレスが、各エントリに関連付けられている。無効なエントリは、エントリの有効・無効を示すフラグを用意する、無効な物理アドレスをエントリに記憶する等の手段で表現する。
【０１０６】
・  物理ブロック管理テーブル  
図７及び図８は、物理ブロック管理テーブルの構成例を示している。
【０１０７】
図７の物理ブロック管理テーブルは、第一の基本構成に使用され、図１の第二の記憶部１２及び第三の記憶部１３のブロックの使用状況（使用／未使用）を管理する。第二の記憶部１２の物理ブロック管理テーブルには、図７（ａ）に示すように、空き状況へのポインタが記憶され、ブロック内のページの空き状況も管理する。
【０１０８】
また、図７（ｂ）に示すように、記憶領域の節約のため、第三の記憶部１３の物理ブロック管理テーブルについては、ページの空き状況を管理しない。
【０１０９】
図８の物理ブロック管理テーブルは、第二の基本構成に使用され、図２の不揮発性半導体記憶素子２２内の各々の記憶領域（ブロック）を、第二の記憶部１２として使用するか、第三の記憶部１３として使用するか、または、未使用（内部に有効データが存在しない）か、を管理する。記憶領域が第二の記憶部１２として使用される場合、物理ブロック管理テーブルは、ページの空き状況を関連付けて管理する。
【０１１０】
第二及び第三の記憶部１２，１３の１ブロック（物理ブロック）に対して１エントリとする。
【０１１１】
エントリ数は、データエリアとして使用可能なブロック数以下とする。
【０１１２】
各エントリには、物理アドレスと、それにより指定されるブロックの使用状況を記憶し、第二の記憶部１２に使用されるブロックについては、ページの空き状況を管理する。
【０１１３】
また、ページの空き状況として、各ページについて、「書き込み可能」（記憶領域が空いている）である状態と、「書き込み不可」（一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために記憶領域が無効となっている）である状態とを、それぞれ区別できるようにしておく。
【０１１４】
各々のページに対するデータ書き込み順序について、不揮発性半導体記憶素子が、ページへの書き込みを物理アドレス昇順での追記しか行えない場合には、ブロック内においてデータの追記が可能な空きページ位置を記憶することでページの空き状況を管理する。
【０１１５】
第二の記憶部１２としてのブロック内のページの空き状況としては、例えば、ブロック内の空きページを管理する、図４に示すデータ構造が採用され得る。
【０１１６】
本実施形態では、ページの空き状況を物理ブロック管理テーブルに記憶しているが、図５に示すように、ページ管理テーブルを、第二の記憶部１２で使用する物理ブロック単位に分割し、論理アドレスとページの空き状況を同時に記憶することによって、ブロック内のページの空き状況をページ管理テーブルに記憶してもよい。
【０１１７】
以上の説明では、簡略化のため、第二の記憶部１２におけるデータの記憶の単位（「小さな単位（第一の管理単位）」）をページ単位とし、第三の記憶部１３におけるデータの記憶の単位（「大きな単位（第二の管理単位）」）をブロック単位としているが、管理単位の設定はこれに限られない。
【０１１８】
重要な点は、ハードディスクドライブ（磁気ディスク装置）の代替品として二次記憶装置を構成するＮＡＮＤ型フラッシュメモリ等の不揮発性半導体記憶素子では、消去／読み出し／書き込みの単位が固定されている、ということにある。
【０１１９】
例えば、ページを分割して管理して、第二の記憶部１２で使用される「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【０１２０】
或いは、複数のページを合わせて管理して、第二の記憶部１２で使用される「小さな単位」がページ単位の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【０１２１】
同様に、ブロックを分割して管理して、第三の記憶部１３で使用される「大きな単位」が「小さな単位」の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「大きな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【０１２２】
或いは、複数のブロックを合わせて管理して、第三の記憶部１３で使用される「大きな単位」がブロック単位の二以上の自然数倍のサイズとなるようにしてもよい。
【０１２３】
第二及び第三の記憶部１２，１３における消去の単位は、同じ（例えば、ブロックサイズ）でもよいし、また、複数のブロックを同時に消去する等、異なっていてもよい。
【０１２４】
（２）  処理方法  
図１及び図２のコントローラ１０が行う処理について説明する。
【０１２５】
Ａ．  第一の記憶部へのデータ蓄積処理  
図９は、第一の記憶部１１へのデータ蓄積処理を示している。
【０１２６】
ホスト機器からの入力データは、最初に第一の記憶部１１に書き込まれ、かつ、そのデータは、第一の記憶部１１に一定期間蓄積される。この時、図３のキャッシュ管理テーブルが更新される。
【０１２７】
１．  コントローラ１０は、入力データの論理アドレスを、ページ単位に等しい「小さな単位」のサイズでアラインする（ステップＳＴ１）。
【０１２８】
２．  コントローラ１０は、ページ単位のサイズでアラインされた論理アドレス範囲に対応するエントリを、キャッシュ管理テーブルから検索する（ステップＳＴ２）。
【０１２９】
３．  コントローラ１０は、第一の記憶部１１内に対応するエントリが存在するか否かを判断する（ステップＳＴ３）。第一の記憶部１１内に対応するエントリが存在する場合、コントローラ１０はこのエントリを選択し、処理はステップＳＴ８に進む。第一の記憶部１１内に対応するエントリが存在しない場合、処理はステップＳＴ４に進む。
【０１３０】
４．  コントローラ１０は、キャッシュ管理テーブル内を検索し、未使用のエントリが存在するか否かを判断する（ステップＳＴ４）。未使用のエントリが検出された場合、処理はステップＳＴ６に進む。未使用のエントリが検出されない場合、処理はステップＳＴ５に進む。
【０１３１】
５．  コントローラ１０は、次に説明する「第一の記憶部からのデータ出力処理」を実行する。これにより、データは第一の記憶部１１から第二の記憶部１２及び第三の記憶部１３に出力される。（ステップＳＴ５）。
【０１３２】
その結果、出力されたデータに対応するキャッシュ管理テーブル内のエントリは未使用として設定される。同時に、このエントリ内のセクタフラグは、全て「無」として設定される。これらの設定を終えた後、処理はステップＳＴ４に戻る。
【０１３３】
６．  コントローラ１０は、ホスト機器からの入力データのために、未使用のエントリを選択する（ステップＳＴ６）。
【０１３４】
７．  コントローラ１０は、入力データの論理アドレスをページ単位のサイズにアラインすることで得られた論理アドレスを、選択されたエントリに設定する（ステップＳＴ７）。即ち、コントローラ１０は、選択されたエントリを、入力データに対応するエントリとする。
【０１３５】
８．  コントローラ１０は、入力データの論理アドレスと、選択したエントリの論理アドレス及び物理アドレスから、データを書き込むための物理アドレスを決定する。コントローラ１０は、その物理アドレスが指定する記憶領域に入力データを書き込む指示を、第一の記憶部１１を含む不揮発性半導体記憶素子に対して与える（ステップＳＴ８）。
【０１３６】
更に、コントローラ１０は、ページ単位の領域内でデータが書き込まれた位置に対応するセクタフラグを、「有」として設定する。
【０１３７】
ホスト機器からの入力データがページサイズよりも大きい等の理由で、キャッシュ管理テーブルの複数のエントリを必要とする場合もあるが、その場合、コントローラ１０は、上記処理の繰り返しによって複数のエントリを更新する。
【０１３８】
Ｂ．  第一の記憶部からのデータ出力処理  
図１０及び図１１を参照しつつ第一の記憶部１１からのデータ出力処理について説明する。
【０１３９】
コントローラ１０は、第一の記憶部１１からの出力候補となるページ単位のデータを選択し、第一の条件に従って、そのデータを第二の記憶部１２または第三の記憶部１３に転送する。第一の条件は、例えば、データ数により規定される。
【０１４０】
具体的には、コントローラ１０が下記の処理ａ．または処理ｂ．を実行する。
【０１４１】
ａ．  コントローラ１０は、第一の記憶部１１内のデータを数え、そのデータをブロック単位に等しい「大きな単位」で管理するか、または、ページ単位に等しい「小さな単位」で管理するかを決定する。
【０１４２】
１．  コントローラ１０は、出力候補となるページ単位（「小さな単位」）のデータの論理アドレスＬＡを、ブロック単位（「大きな単位」）のサイズでアラインする（ステップＳＴ１）。
【０１４３】
２．  コントローラ１０は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれるエントリ数を、図３のキャッシュ管理テーブルを検索することによって数え上げる（ステップＳＴ２）。
【０１４４】
例えば、図１２の例によれば、ブロック単位のサイズでアラインされた論理アドレス範囲Ｘ内に含まれるエントリ数は、ＬＡ１，ＬＡ４，ＬＡ６の３つとなる。
【０１４５】
３．  コントローラ１０は、エントリ数が所定の閾値以上であるか否かを判断する。所定の閾値は、例えば、一つのブロック単位（「大きな単位」）の領域内に収まるページ単位（「小さな単位」）のデータ総数の５０％として設定しても良い（ステップＳＴ３）。
【０１４６】
エントリ数が所定の閾値未満である場合、コントローラ１０は、その論理アドレス範囲内に含まれる個々のデータを、ページ単位に等しい「小さな単位」のデータとして、第二の記憶部１２に転送する。
【０１４７】
エントリ数が所定の閾値以上である場合、コントローラ１０は、その論理アドレス範囲内に含まれる複数のデータを、ブロック単位に等しい「大きな単位」のデータとして、第三の記憶部１３に転送する。
【０１４８】
・「小さな単位」の場合（図１０のフローチャート及び図１２を参照）  
コントローラ１０は、第一の記憶部１１からの出力候補となるデータを選択し、選択されたデータを、第二の記憶部１２にページ単位のデータとして転送する。図１０のステップＳＴ４以降を参照する。
【０１４９】
ここでは、第一の記憶部１１から一つのページ単位のデータが転送される場合の処理について説明する。複数のページ単位のデータが転送される場合は、下記の処理が繰り返される。
【０１５０】
４．  コントローラ１０は、図４のページ管理テーブルを検索し、第一の記憶部１１から転送されてくる書き込みデータと同じ論理アドレスＬＡを持つエントリが存在するか否かを判断する（ステップＳＴ４）。
【０１５１】
そのようなエントリが検出された場合、コントローラ１０はこのエントリを選択し、処理はステップＳＴ９に進む。そのようなエントリが検出されなかった場合、処理はステップＳＴ５に進む。
【０１５２】
５．  コントローラ１０は、ページ管理テーブルに未使用のエントリが存在するか否かを判断する（ステップＳＴ５）。
【０１５３】
未使用のエントリが検出された場合、処理はステップＳＴ７に進む。未使用のエントリが検出されなかった場合、処理はステップＳＴ６に進む。
【０１５４】
６．  コントローラ１０は、「第二の記憶部から第三の記憶部へのデータ転送処理」を実行する（ステップＳＴ６）。その結果、出力されたデータに対応するエントリは、未使用として設定される。コントローラ１０は、利用可能な未使用のエントリを確保し、処理はステップＳＴ５に戻る。
【０１５５】
７．  コントローラ１０は、未使用のエントリを、書き込みデータの行き先として選択する（ステップＳＴ７）。
【０１５６】
８．  コントローラ１０は、選択されたエントリに、ページ単位の書き込みデータの論理アドレスを設定する（ステップＳＴ８）。選択されたエントリは、書き込みデータに対応するエントリとして取り扱われることになる。
【０１５７】
９．  コントローラ１０は、選択されたエントリ内における書き込み位置を決定する（ステップＳＴ９）。書き込み位置の決定について、以下詳細に説明する。
【０１５８】
９−１．  コントローラ１０は、図７または図８の物理ブロック管理テーブルを検索し、第二の記憶部１２内で使用されている、書き込み可能な状態の空きページを有するブロックを選択する。そのようなブロックが検出された場合、コントローラ１０は、書き込みデータの行き先として、そのブロック内の空きページを選択する（ステップＳＴ９−１）。
【０１５９】
ページ単位でのデータの書き込みにおいて、第二の記憶部１２を構成する不揮発性半導体記憶素子が、ページへの書き込みを物理アドレス昇順での追記しか行えない場合、コントローラ１０は、データの追記が可能な空きページを選択する。
【０１６０】
第二の記憶部１２内で使用されているブロック中に空きページが検出された場合、処理はステップＳＴ１０に進む。第二の記憶部１２内で使用されているブロック中に空きページが検出されなかった場合、処理はステップＳＴ９−２に進む。
【０１６１】
９−２．  コントローラ１０は、図７または図８の物理ブロック管理テーブルを検索し、未使用のブロックが存在するか否かを判断する（ステップＳＴ９−２）。未使用のブロックが検出された場合、処理はステップＳＴ９−４に進む。未使用のブロックが検出されなかった場合、処理はステップＳＴ９−３に進む。
【０１６２】
９−３．  コントローラ１０は、「第二の記憶部から第三の記憶部へのデータ転送処理」を行い、未使用のブロックを生成する（ステップＳＴ９−３）。未使用のブロックを生成した後、処理はステップＳＴ９−２に戻る。
【０１６３】
９−４．  コントローラ１０は、第二の記憶部１２用に未使用のブロックを取得する（ステップＳＴ９−４）。
【０１６４】
９−５．  コントローラ１０は、取得した未使用のブロックに対応する図７または図８の物理ブロック管理テーブルのエントリを、「第二の記憶部１２(使用)」に更新する。第二の基本構成(図８)の場合、コントローラ１０は、ページの空き状況を記憶する領域を確保し、その領域をエントリに関連付ける（ステップＳＴ９−５）。
【０１６５】
９−６．  コントローラ１０は、取得した未使用のブロック内のデータを消去する指示を不揮発性半導体記憶素子に対して与え、ページの空き状況をすべて「書き込み可能」な状態に更新する。コントローラ１０は、ブロック内の空きページの一つを、書き込みデータの行き先として選択する（ステップＳＴ９−６）。
【０１６６】
以上により、書き込み位置の決定処理を完了する。
【０１６７】
１０．  コントローラ１０は、ページ単位のデータを構成するセクタ単位のデータ全てが、第一の記憶部１１に存在するか否かを判断する（ステップＳＴ１０）。
【０１６８】
コントローラ１０は、図３のキャッシュ管理テーブル中の、書き込みデータに対応するエントリのセクタフラグを走査する。セクタフラグが全て「有」の場合、処理はステップＳＴ１２に進む。セクタフラグに一つでも「無」がある場合、処理はステップＳＴ１１に進む。
【０１６９】
１１．  セクタフラグに一つでも「無」がある場合、セクタ単位のデータが第一の記憶部１１に揃っていないことを表す。コントローラ１０は、セクタフラグ「無」のセクタ位置に対応する不足データを、第二の記憶部１２及び第三の記憶部１３の少なくとも一方から読み出す（ステップＳＴ１１）。
【０１７０】
コントローラ１０は、第二の記憶部１２からの不足データの読み出しを試みる。
【０１７１】
コントローラ１０は、セクタ単位のデータの論理アドレスをページ単位のサイズでアラインし、アラインされた論理アドレスをもってページ管理テーブルを検索する。
【０１７２】
エントリが検出された場合、コントローラ１０は、エントリに記録されている物理アドレスに対応するページ単位のデータに含まれる不足データを読み出す。エントリが検出されなかった場合、コントローラ１０は、第三の記憶部１３からの不足データの読み出しを試みる。
【０１７３】
コントローラ１０は、セクタ単位のデータの論理アドレスをブロック単位のサイズでアラインし、アラインされた論理アドレスをもってブロック管理テーブルを検索する。
【０１７４】
エントリが検出された場合、コントローラ１０は、エントリに記録されている物理アドレスに対応するブロック単位のデータに含まれる不足データを読み出す。
【０１７５】
第二の記憶部１２、または、第三の記憶部１３から読み出された不足データは、第一の記憶部１１の作業領域、または、コントローラ１０の主記憶メモリ等に一時的に記憶されるが、特にこれに限定されることはない。
【０１７６】
１２．  ページ単位のデータを構成する全てのセクタ単位のデータを揃えた後、コントローラ１０は、そのページ単位のデータを第二の記憶部１２内で書き込みデータの行き先として選択された空きページに書き込む指示を、不揮発性半導体記憶素子に与える。コントローラ１０は、物理ブロック管理テーブルの対応するページの空き状況を、「書き込み済み」（記憶領域が有効データで満たされている）である状態に更新する（ステップＳＴ１２）。
【０１７７】
ページ単位のデータを書き込んだ後、コントローラ１０は、ページ管理テーブルの選択されたエントリに、書き込みデータの論理アドレスと、書き込みデータの行き先であるページの物理アドレスとを登録する。
【０１７８】
新たな物理アドレスを登録するよりも以前に、選択されたエントリに物理アドレスが既に登録されていた場合、コントローラ１０は、その物理アドレスを上書きする。古い物理アドレスが指し示すページに記憶されていた旧データは、無効データとなる。
【０１７９】
１３．  コントローラ１０は、図３のキャッシュ管理テーブルを更新する。書き込みデータに対応するエントリは無効化され、ホスト機器からの入力データのために解放される（ステップＳＴ１３）。
【０１８０】
続いて、コントローラ１０は、図７または図８の物理ブロック管理テーブルと、図４のページ管理テーブルとを走査し、内部の全てのページ単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定するための、解放処理を実行する。
【０１８１】
具体的には、物理ブロック管理テーブルで「使用」と設定されているにもかかわらず、ページ管理テーブルではそのブロック内のページを指し示す物理アドレスが存在しないブロックに対応するエントリが、「未使用」として設定される。図８の構成の場合は、ページの空き状況を記憶する領域が解放される。
【０１８２】
・「大きな単位」の場合（図１１のフローチャート、図１３、及び図１４を参照）
コントローラ１０は、第一の記憶部１１からの出力候補となるデータを選択し、選択されたデータを、第三の記憶部１３にブロック単位のデータとして転送する。図１１のステップＳＴ４’以降を参照する。
【０１８３】
４’  コントローラ１０は、図７または図８の物理ブロック管理テーブルを検索し、未使用のブロックを取得する。コントローラ１０は、確保された未使用のブロックを、第三の記憶部１３に割り当てる（ステップＳＴ４’）。
【０１８４】
コントローラ１０は、物理ブロック管理テーブルの確保された未使用のブロックに対応するエントリを「第三の記憶部１３(使用)」に更新し、確保された未使用のブロック内のデータを消去する指示を、不揮発性半導体記憶素子に与える。
【０１８５】
「大きな単位」のサイズがブロック単位のサイズ未満である場合、コントローラ１０は、第三の記憶部１３内で使用されており、「書き込み可能」な状態の「大きな単位」の空き領域を有するブロックを、「小さな単位」の場合と同様に選択しても良い。
【０１８６】
５’  コントローラ１０は、ブロック単位のデータを構成するセクタ単位のデータ全てが、第一の記憶部１１に存在するか否かを判断する（ステップＳＴ５’）。
【０１８７】
具体的には、コントローラ１０は、図３のキャッシュ管理テーブルが、ブロック単位のサイズの論理アドレス範囲内に含まれるページ単位のデータに対応する全てのエントリを含むか否かを判断し、同時に、これらのエントリのセクタフラグが全て「有」であるか否かを判断する。
【０１８８】
ブロック単位のデータを構成するセクタ単位のデータが全て第一の記憶領域１１に揃っている場合、処理はステップＳＴ７’に進む。論理アドレス範囲内に含まれるページ単位のデータに対応するエントリが一つでも検出されない場合、及び、セクタフラグが一つでも「無」である場合の少なくとも一方が成立するならば、処理はステップＳＴ６’に進む。
【０１８９】
６’  コントローラ１０は、キャッシュ管理テーブルに含まれないページ位置、及びセクタフラグが「無」であるセクタ位置に対応する不足データを、第二の記憶部１２及び第三の記憶部１３の少なくとも一方から読み出す（ステップＳＴ６’）。
【０１９０】
コントローラ１０は、図１３に示すように、第二の記憶部１２からの不足データの読み出しを試みる。
【０１９１】
コントローラ１０は、セクタ単位のデータの論理アドレスをページ単位のサイズでアラインし、アラインされた論理アドレスをもってページ管理テーブルを検索する。
【０１９２】
エントリが検出された場合、コントローラ１０は、エントリに記録されている物理アドレスに対応するページ単位のデータに含まれる不足データを読み出す。
【０１９３】
エントリが検出されなかった場合、コントローラ１０は、図１４に示すように、第三の記憶部１３からの不足データの読み出しを試みる。
【０１９４】
コントローラ１０は、セクタ単位のデータの論理アドレスをブロック単位のサイズでアラインし、アラインされた論理アドレスをもってブロック管理テーブルを検索する。コントローラ１０は、エントリに記録されている物理アドレスに対応するブロック単位のデータに含まれる不足データを読み出す。
【０１９５】
第二の記憶部１２、または、第三の記憶部１３から読み出された不足データは、第一の記憶部１１の作業領域、または、コントローラ１０の主記憶メモリ等に一時的に記憶されるが、これらに特に限定されることはない。
【０１９６】
７’  ブロック単位のデータを構成する全てのセクタ単位のデータを揃えた後、コントローラ１０は、そのブロック単位のデータを第三の記憶部１３内で書き込みデータの行き先として選択された空きブロックに書き込む指示を、不揮発性半導体記憶素子に与える（ステップＳＴ７’）。
【０１９７】
ブロック単位のデータを書き込んだ後、コントローラ１０は、そのブロック単位のデータの論理アドレス範囲に対応するブロック管理テーブルのエントリに、書き込みデータの行き先であるブロックの物理アドレスを登録する。
【０１９８】
新たな物理アドレスを登録するよりも以前に、選択されたエントリに物理アドレスが既に登録されていた場合、コントローラ１０は、その物理アドレスに対して上書きする。古い物理アドレスが指し示すブロックに記憶されていた旧データは、無効データとなる。
【０１９９】
８’  コントローラ１０は、図３のキャッシュ管理テーブルを更新する。書き込みデータに対応するエントリは無効化され、ホスト機器からの入力データのために解放される（ステップＳＴ８’）。
【０２００】
続いて、コントローラ１０は、図７または図８の物理ブロック管理テーブルと図６のブロック管理テーブルとを走査し、内部のブロック単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定するための、解放処理を実行する。
【０２０１】
具体的には、物理ブロック管理テーブルで「使用」と設定されているにもかかわらず、ブロック管理テーブルではそのブロックを指し示す物理アドレスが存在しないブロックに対応する物理ブロック管理テーブルのエントリが、「未使用」として設定される。
【０２０２】
同様に、ブロック単位のサイズを有する書き込みデータの論理アドレス範囲に含まれる論理アドレスに対応するエントリが、図４または図５のページ管理テーブルに存在する場合、そのエントリが無効化される。これは、第二の記憶部１２に記憶されていたデータの第三の記憶部１３への転送に基づいて、第二の記憶部１２に記憶されていたデータが参照されないように無効化する処理である。
【０２０３】
更に、第二の記憶部１２について、コントローラ１０は、内部の全てのページ単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定する。図８の構成の場合は、ページの空き状況を記憶する領域が解放される。
【０２０４】
ｂ．  コントローラ１０は、第一及び第二の記憶部１１，１２内のデータを数え、そのデータをブロック単位に等しい「大きな単位」で管理するか、または、ページ単位に等しい「小さな単位」で管理するかを決定する。
【０２０５】
この場合、コントローラ１０は、図３のキャッシュ管理テーブル、及び、図４または図５のページ管理テーブルを検索し、出力候補となるデータの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲に含まれるエントリ数を、第一及び第二の記憶部１１，１２について数え上げ合計する。
【０２０６】
エントリ数の合計が所定の閾値、例えば、一つのブロック単位（「大きな単位」）の領域内に収まるページ単位（「小さな単位」）のデータ総数の５０％以上である場合、出力候補のデータは「大きな単位」で管理され、エントリ数の合計が所定の閾値未満である場合、出力候補のデータは「小さな単位」で管理される（ステップＳＴ１→ステップＳＴ２→ステップＳＴ３）。
【０２０７】
・「小さな単位」の場合（図１０のフローチャート参照）  
コントローラ１０は、第一の記憶部１１から出力されたデータを、上述のａ．の場合と同様に、ページ単位のデータとして第二の記憶部１２に記憶する。第一の記憶部１１から出力されたデータを第二の記憶部１２に書き込んだ後、上述のａ．の場合と同様に、図３のキャッシュ管理テーブルを更新し、書き込みデータに対応するエントリを無効化する。更に、図４または図５のページ管理テーブル、及び、図７または図８の物理ブロック管理テーブルを更新する（ステップＳＴ４〜ステップＳＴ１３）。
【０２０８】
・「大きな単位」の場合（図１１のフローチャート参照）  
コントローラ１０は、第一の記憶部１１から出力されたデータを、上述のａ．の場合と同様に、ブロック単位のデータとして第三の記憶部１３に記憶する。第一の記憶部１１から出力されたデータを第三の記憶部１３に書き込んだ後、上述のａ．の場合と同様に、図３のキャッシュ管理テーブルを更新し、書き込みデータに対応するエントリを無効化する。更に、図４または図５のページ管理テーブル、図６のブロック管理テーブル、及び、図７または図８の物理ブロック管理テーブルを更新する（ステップＳＴ４’〜ステップＳＴ８’）。
【０２０９】
尚、図１１のフローチャートにおいて、ステップＳＴ４’は、ステップＳＴ７’の直前に配置されていても良い。この場合、コントローラ１０は、第三の記憶部１３に書き込むべきデータを決定した後に、「未使用」のブロックを第三の記憶部１３に割り当てることとしても良い。
【０２１０】
Ｃ．  第二の記憶部から第三の記憶部へのデータ転送処理  
図１５を参照しつつ、第二の記憶部１２から第三の記憶部１３へのデータ転送処理について説明する。
【０２１１】
第二の記憶部１２の容量は第三の記憶部１３の容量よりも小さく設定されることが多いため、第二の記憶部１２に所定量のデータが蓄積されたら（ページ単位に等しい「小さな単位」のデータによって占有されるブロック数が、第二の記憶部１２の容量として定められた許容範囲を超えたら）、コントローラ１０は、第二の条件の下で、第二の記憶部１２からの追い出しブロックを選択する。
【０２１２】
コントローラ１０は、追い出しブロック内に記憶されているページ単位に等しい「小さな単位」の各データを、ブロック単位に等しい「大きな単位」のデータとして、第三の記憶部１３に転送する。
【０２１３】
換言すれば、コントローラ１０は、ページ単位に等しい「小さな単位」から、ブロック単位に等しい「大きな単位」へと、データ管理単位を切り替える。この処理の際、「大きな単位」のサイズの論理アドレス範囲内に含まれる、断片化された複数の「小さな単位」のデータが第一、第二、及び第三の記憶部１１，１２，１３から集められ、ブロック単位のデータへの統合が行われる（デフラグメンテーション）。
【０２１４】
第二の条件は、書き込み順序または有効データ数により規定される。具体的には、コントローラ１０が下記の処理ａ．または処理ｂ．を実行する。
【０２１５】
ａ．  コントローラ１０は、第二の記憶部１２に割り当てられているブロックの内、最も古くに書き込みが行われたブロックを選択する。選択されたブロック内に含まれるページ単位の各データは、ブロック単位のデータへと統合され、第三の記憶部１３に書き込まれることになる。この場合、コントローラ１０は、第二の記憶部１２内のブロックの書き込み順序を管理する。書き込み順序に関する情報は、例えば、コントローラ１０の内部、不揮発性半導体記憶素子の内部、または他の記憶部の内部に記憶される。
【０２１６】
ｂ．  コントローラ１０は、第二の記憶部１２内の各ブロックに関して、ブロック内のページ単位（「小さな単位」）の有効データの論理アドレスをブロック単位（「大きな単位」）のサイズでアラインすることによって得られた論理アドレス範囲内において、第二の記憶部１２に記憶されているページ単位のデータ数を合計する。コントローラ１０は、合計値が最大であるブロックを選択する。選択されたブロック内の各有効データは、ブロック単位のデータへと統合され、第三の記憶部１３に書き込まれる（ステップＳＴ１〜ステップＳＴ８）。
【０２１７】
以下では、ｂ．の場合について説明する。
【０２１８】
１．  例えば、図１６に示すように、コントローラ１０は、第二の記憶部１２に割り当てられている各ブロックについて、ページ単位の有効データに関連付けられた論理アドレスＬＡを、ブロック単位のサイズでアラインする（ステップＳＴ１）。
【０２１９】
２．  コントローラ１０は、ブロック単位のサイズでアラインされた論理アドレス範囲毎に、第二の記憶部１２に記憶されている有効データを数える（ステップＳＴ２）。ブロック単位のサイズの論理アドレス範囲Ｘ１，Ｘ２，Ｘ３内の有効データ数は、それぞれ、３個、２個、１個となる。
【０２２０】
３．  コントローラ１０は、第二の記憶部１２の各ブロックについて、ステップＳＴ２で数えた有効データ数の合計を計算する（ステップＳＴ３）。コントローラ１０は、論理アドレスが重複する有効データについて二重にカウントを実行することはしない。
【０２２１】
第二の記憶部１２のブロックＹ１に関して、ブロックＹ１内の有効データはａ１，ａ４である。有効データａ１は、ブロック単位のサイズの論理アドレス範囲Ｘ１に含まれる。論理アドレス範囲Ｘ１において、第二の記憶部１２に記憶されている有効データはａ１，ａ２，ａ３の３個となる。
【０２２２】
有効データａ４は、ブロック単位のサイズの論理アドレス範囲Ｘ２に含まれる。論理アドレス範囲Ｘ２において、第二の記憶部１２に記憶されている有効データはａ４，ａ６の２個となる。
【０２２３】
結果として、第二の記憶部１２のブロックＹ１に関して、物理アドレス範囲Ｙ１内の有効データａ１，ａ４を含む論理アドレス範囲Ｘ１，Ｘ２内の有効データ数の合計は、５個となる。
【０２２４】
ブロックＹ２に関して、物理アドレス範囲Ｙ２内の有効データａ２，ａ３を含む論理アドレス範囲Ｘ１内の有効データ数の合計は、３個となる。
【０２２５】
ブロックＹ３に関して、物理アドレス範囲Ｙ３内の有効データａ６，ａ９を含む論理アドレス範囲Ｘ２，Ｘ３内の有効データ数の合計は、３個となる。
【０２２６】
４．  コントローラ１０は、ステップＳＴ３で計算した合計が最大であるブロック内に記憶されている有効データを含む、ブロック単位のサイズの論理アドレス範囲内の有効データを選択する（ステップＳＴ４）。
【０２２７】
図１６の場合、合計が最大である物理アドレス範囲Ｙ１内の有効データを含む、ブロック単位のサイズの論理アドレス範囲Ｘ１，Ｘ２内の有効データａ１，ａ２，ａ３，ａ４，ａ６が、第三の記憶部１３に書き込まれることになる。
【０２２８】
以下の説明では、選択されたブロック内のページ単位のデータを一つのブロック単位のデータへと統合し、そのブロック単位のデータを第三の記憶部１３に書き込む処理を示す。以下の処理は、選択されたブロック内のページ単位の全てのデータが第三の記憶部１３に書き込まれるまで、繰り返される。
【０２２９】
５．  コントローラ１０は、図７または図８の物理ブロック管理テーブルを検索し、書き込みデータの行き先として「未使用」のブロックを取得する。この「未使用」のブロックは、第三の記憶部１３に割り当てられる。コントローラ１０は、図７または図８の物理ブロック管理テーブルにおいて、確保された「未使用」のブロックに対応するエントリを、「第三の記憶部１３（使用）」に更新し、確保された「未使用」のブロック内のデータを消去する指示を、不揮発性半導体記憶素子に与える（ステップＳＴ５）。
【０２３０】
６．  コントローラ１０は、ページ単位のデータを統合してブロック単位のデータとする。具体的には、コントローラ１０は、ページ単位のデータの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲内に含まれる有効データを、第一、第二、及び第三の記憶部１１，１２，１３から集める（ステップＳＴ６）。
【０２３１】
コントローラ１０は、図３のキャッシュ管理テーブルを検索する。ブロック単位のサイズでアラインされた論理アドレス範囲に含まれるページ単位のデータの論理アドレスに対応するエントリが検出された場合、コントローラ１０は、そのエントリにおいてセクタフラグ「有」であるセクタ単位のデータを全て、第一の記憶部１１から読み出す。
【０２３２】
第一の記憶部１１から読み出されなかった有効データを含む論理アドレス範囲に関して、コントローラ１０は、図４または図５のページ管理テーブルを検索する。論理アドレス範囲に関連付けられたページ単位のデータの論理アドレスに対応するエントリが検出された場合、コントローラ１０は、そのエントリに記録された物理アドレスに対応するページ単位のデータに含まれており、第一の記憶部１１から読み出されなかった有効データを、第二の記憶部１２から読み出す。
【０２３３】
第一及び第二の記憶部１１，１２から読み出されなかった有効データを含む論理アドレス範囲のデータに関して、コントローラ１０は、図６のブロック管理テーブルを検索する。ブロック単位のサイズでアラインされた論理アドレスに対応するエントリを検出した後、コントローラ１０は、そのエントリに記録された物理アドレスに対応するブロック単位のデータに含まれており、第一及び第二の記憶部１１，１２から読み出されなかった有効データを、第三の記憶部１３から読み出す。
【０２３４】
第一、第二、及び第三の記憶部１１，１２，１３の少なくとも１つから読み出された有効データの一時的な行き先は、第一の記憶部１１の作業領域、または、コントローラ１０の主記憶メモリ等とするが、特にこれに限定されることはない。
【０２３５】
７．  ブロック単位のデータを構成するセクタ単位のデータを全て揃えた後、コントローラ１０は、そのブロック単位のデータを、書き込みデータの行き先として選択された空きブロックに書き込む指示を、不揮発性半導体記憶素子に与える（ステップＳＴ７）。
【０２３６】
図１５のフローチャートにおいて、ステップＳＴ５は、ステップＳＴ７の直前に配置されていても良い。この場合、コントローラ１０は、第三の記憶部１３に書き込むべきデータを決定した後に、「未使用」のブロックを第三の記憶部１３に割り当てることとしても良い。
【０２３７】
ブロック単位のデータを書き込んだ後、コントローラ１０は、そのブロック単位のデータの論理アドレス範囲に対応するブロック管理テーブルのエントリに、書き込みデータの行き先であるブロックの物理アドレスを登録する。
【０２３８】
新たな物理アドレスを登録するよりも以前に、選択されたエントリに物理アドレスが既に登録されていた場合、コントローラ１０は、その物理アドレスに対して上書きする。古い物理アドレスが指し示すブロックに記憶されていた旧データは、無効データとなる。
【０２３９】
８．  コントローラ１０は、第一、第二、及び第三の記憶部１１，１２，１３から集められた書き込みデータに対応するエントリを、無効化する（ステップＳＴ８）。
【０２４０】
コントローラ１０は、図３のキャッシュ管理テーブルを更新する。書き込みデータに対応するエントリは無効化され、ホスト機器からの入力データのために解放される。
【０２４１】
続いて、コントローラ１０は、図７または図８の物理ブロック管理テーブルと図６のブロック管理テーブルとを走査し、内部のブロック単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定するための、解放処理を実行する。
【０２４２】
具体的には、物理ブロック管理テーブルで「使用」と設定されているにもかかわらず、ブロック管理テーブルではそのブロックを指し示す物理アドレスが存在しないブロックに対応する物理ブロック管理テーブルのエントリが、「未使用」として設定される。
【０２４３】
同様に、ブロック単位のサイズを有する書き込みデータの論理アドレス範囲に含まれる論理アドレスに対応するエントリが、図４または図５のページ管理テーブルに存在する場合には、そのエントリが無効化される。これは、第二の記憶部１２に記憶されていたデータの第三の記憶部１３への転送に基づいて、第二の記憶部１２に記憶されていたデータが参照されないように無効化にする処理である。
【０２４４】
更に、第二の記憶部１２について、コントローラ１０は、内部の全てのページ単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定する。図８の構成の場合は、ページの空き状況を記憶する領域が解放される。
【０２４５】
Ｄ．  その他
第一の記憶部１１から第二及び第三の記憶部１２，１３の少なくとも一方へのデータ転送処理、及び、第二の記憶部１２から第三の記憶部１３へのデータ転送処理は、上述の説明の場合の他、ホスト機器から指示された所定時期に行うことも可能である。
【０２４６】
例えば、半導体記憶装置がキャッシュフラッシュコマンドを受信した場合、コントローラ１０は、第一の条件に従い、第一の記憶部１１から第二及び第三の記憶部１２，１３の少なくとも一方へのデータ転送処理を実行する。
【０２４７】
（３）  システム例  
図１７は、第二の基本構成に対応するシステム例を示している。
【０２４８】
ホスト機器３１は、本実施形態に係る半導体記憶装置３２との間で、データ転送を実行する。ホスト機器３１は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータである。半導体記憶装置３２は、例えば、ホスト機器３１に搭載される、二次記憶装置としてのＳＳＤである。
【０２４９】
半導体記憶装置３２は、第一、第二、及び第三の記憶部１１，１２，１３と、これらの記憶部を制御するコントローラ１０とを備える。第一の記憶部１１は、ＤＲＡＭ等の揮発性半導体記憶素子２１内に配置され、第二及び第三の記憶部１２，１３は、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体記憶素子２２内に配置される。
【０２５０】
コントローラ１０は、ＣＰＵと主記憶メモリ(プログラム、管理情報、及び作業領域を格納する)とを有する。コントローラ１０は、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、及び物理ブロック管理テーブルに基づいて、論理アドレスを物理アドレスに変換し、第一、第二、及び第三の記憶部１１，１２，１３におけるデータの記憶位置を管理する。
【０２５１】
ホスト機器３１からのデータは、ホストＩ／Ｆ（インターフェース）２３を介して、半導体記憶装置３２に入力される。ホスト機器３１は、セクタ単位で半導体記憶装置３２へのアクセスを実行する。
【０２５２】
図１８は、ホスト機器３１からのデータの流れを示している。
【０２５３】
上述の処理方法で説明したように、ホスト機器３１からのデータは、第一の記憶部１１に記憶され、その後、第一の条件に従い、第二の記憶部１２、または、第三の記憶部１３に転送されることとなる。更に、第二の記憶部１２に記憶されたデータは、第二の条件に従い、第三の記憶部１３に転送される。
【０２５４】
第二の記憶部１２のブロックと第三の記憶部１３のブロックとは、一対一の対応関係を有している訳ではない。物理ブロック管理テーブルに基づいて、不揮発性半導体記憶素子２２内の複数のブロックの一部は第二の記憶部１２として使用され、他の一部は、第三の記憶部１３として使用される。
【０２５５】
（４）  動作例  
本実施形態に係る動作例を、図１８を参照しつつ、書き込み効率を比較することによって説明する。同時に、管理テーブルのサイズに関する考察を行う。
【０２５６】
Ａ．  書き込み効率の比較  
以下の説明では、揮発性半導体記憶素子２１がＤＲＡＭであり、不揮発性半導体記憶素子２２がＮＡＮＤ型フラッシュメモリであると想定する。ＮＡＮＤ型フラッシュメモリのブロック単位のサイズは５１２キロバイトであり、ページ単位のサイズは４キロバイトであり、ホスト機器のセクタ単位のサイズは５１２バイトであると想定する。第一の条件で規定される所定の閾値（「データ数」または「データ量」）は、ＮＡＮＤ型フラッシュメモリのブロック単位のサイズの５０%(２５６キロバイト)であると想定とする。
【０２５７】
ブロック単位のデータＸが第三の記憶部１３に記憶されている状態で、ブロック単位のデータＸの論理アドレス範囲内に含まれる１セクタ単位のデータＹが更新され、その後、データＹが第二の記憶部１２、または、第三の記憶部１３に書き込まれ、不揮発のデータとされる処理を考える。
【０２５８】
データＹが第二の記憶部１２、または、第三の記憶部１３に記憶された時点で、ホスト機器３１から見て、ブロック単位のデータＸの論理アドレス範囲に含まれる１セクタ単位のデータＹが、更新された状態となる。
【０２５９】
ａ．  動作例１  
第一の記憶部１１にデータが全く存在しない初期状態において、データＹが第一の記憶部１１に書き込まれると、結果として、データＹを含むブロック単位のサイズの論理アドレス範囲（データＸの論理アドレス範囲と等しい）において、セクタ単位のデータＹ(５１２バイト)のみが第一の記憶部１１に存在することになる。コントローラ１０は、キャッシュ管理テーブルを検索することによって、データ量を検出することができる。
【０２６０】
この５１２バイトの大きさは、第一の条件で規定される所定の閾値である２５６キロバイトよりも小さい。
【０２６１】
コントローラ１０は、第一の記憶部１１に記憶されているデータＹを、データＹの論理アドレスをページ単位のサイズでアラインすることによって得られた論理アドレス範囲に亘るページ単位のデータ（以下、データＰとして参照される）として、第二の記憶部１２に転送する。
【０２６２】
セクタ単位のデータＹのサイズは、ページ単位のサイズよりも小さいので、ページ単位のデータＰを揃えるためには、不足データを、例えば、第三の記憶部１３から読み出す必要がある。
【０２６３】
コントローラ１０は、データＰの論理アドレスをブロック単位のサイズでアラインし、アラインされた論理アドレス（データＸの論理アドレスと等しい）をもって、ブロック管理テーブルを検索する。
【０２６４】
論理アドレスに対応するエントリが検出された場合、コントローラ１０は、データＸが記憶されている物理アドレスを調べる。
【０２６５】
コントローラ１０は、第三の記憶部１３のデータＸから、データＰの論理アドレス範囲に対応するページ単位のデータを揮発性半導体記憶素子２１上に読み出し、そこにデータＹを上書きすることによって、データＰのイメージを生成する。
【０２６６】
コントローラ１０は、セクタ単位のデータＹを含むページ単位のデータＰを、第二の記憶部１２の空きページに書き込み、キャッシュ管理テーブル、ページ管理テーブル、及びブロック管理テーブルを更新する。第二の記憶部１２に書き込まれたデータＹは、不揮発のデータとなる。
【０２６７】
データＹと同じサイズのデータが連続して書き込まれる場合、１ブロックは１２８ページで構成されるから、半導体記憶装置３２は、１２８セクタのデータ更新（１２８ページの書き込み）に対して、１ブロックのデータ消去を行うことになる。
【０２６８】
この場合、書き込み効率は、５１２キロバイト／(５１２バイト×１２８)＝８となり、本実施形態を用いない場合(５１２キロバイト／５１２バイト＝１０２４)より向上する。この例では、１セクタ単位のデータ更新であるが、１ページ単位のデータ更新にすれば、更に書き込み効率が向上する。
【０２６９】
既述された特許文献の技術では、データブロックとログブロックとが一対一に対応するため、例えば、それぞれ異なるブロックに属する１２８セクタのデータ更新が行われると、１２８ブロックのデータ消去が必要になる。
【０２７０】
これに対し、本実施形態では、第二の記憶部１２のブロックと第三の記憶部１３のブロックとは、一対一の対応関係を有している訳ではない。従って、異なるブロックに記憶された複数のセクタ単位のデータが更新される場合であっても、更新データを第二の記憶部１２の同じブロック内に記憶させることが可能であり、この場合のデータ消去量は、１ブロック単位のサイズとなる。
【０２７１】
ｂ．  動作例２  
データＹの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲（データＸの論理アドレス範囲と等しい）内に含まれるデータとして、３８４キロバイトの更新データが、既に第一の記憶部１１に書き込まれている初期状態を想定する。
【０２７２】
この初期状態において、データＸの論理アドレス範囲内に含まれており、かつ、第一の記憶部１１には記憶されていないセクタ単位のデータＹが、第一の記憶部１１に書き込まれると、データＸの論理アドレス範囲にはデータＹを含む（３８４キロバイト＋５１２バイト）のデータが存在することになる。コントローラ１０は、キャッシュ管理テーブルを検索することによって、データ量を検出することができる。
【０２７３】
この（３８４キロバイト＋５１２バイト）の大きさは、第一の条件で規定される所定の閾値である２５６キロバイト以上である。
【０２７４】
コントローラ１０は、第一の記憶部１１に記憶されている、データＹを含む（３８４キロバイト＋５１２バイト）のデータを、データＹの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲に亘るブロック単位のデータ（以下、データＢとして参照される）として、第三の記憶部１３に転送する。
【０２７５】
セクタ単位のデータＹのサイズは、ブロック単位のサイズよりも小さいので、ブロック単位のデータＢを揃えるためには、不足データを、例えば、第三の記憶部１３から読み出す必要がある。
【０２７６】
コントローラ１０は、データＢの論理アドレス（データＸの論理アドレスと等しい）をもってブロック管理テーブルを検索し、データＸが記憶されている物理アドレスを検出する。コントローラ１０は、第三の記憶部１３からデータＸを揮発性半導体記憶素子２１上に読み出し、そこにデータＹを上書きすることによって、データＢのイメージを生成する。
【０２７７】
コントローラ１０は、「未使用」のブロックのデータを消去し、その消去された「未使用」のブロックを第三の記憶部１３に割り当てる。セクタ単位のデータＹを含むブロック単位のデータＢは、このブロックに書き込まれる。キャッシュ管理テーブル及びブロック管理テーブルが更新される。これにより、第三の記憶部１３に書き込まれたセクタ単位のデータＹは、不揮発のデータとなる。
【０２７８】
この場合、半導体記憶装置３２は、約３８４キロバイト（３８４キロバイト＋５１２バイト）のデータ更新に対して、１ブロックのデータ消去を行うことになる。
【０２７９】
従って、書き込み効率は、５１２キロバイト／３８４キロバイト＝１．３３となり、約３８４キロバイトのデータをセクタごとに更新する場合(５１２キロバイト／５１２バイト＝１０２４)より向上する。
【０２８０】
この例では、約３８４キロバイトのデータ更新であるが、これを１ブロック単位のサイズである５１２キロバイトに近付ければ、更に書き込み効率が向上する。
【０２８１】
Ｂ．  管理テーブルのサイズ  
不揮発性半導体記憶素子を「小さな単位」で管理すれば、コントローラ１０は、ホスト機器３１からのデータサイズまたはデータ量によらずデータ書き込み位置の詳細な制御を実行でき、書き込み効率は向上すると考えられる。しかしながら、アドレス変換の実行に必要な管理データが大きくなり、コントローラ１０の処理効率が悪くなる可能性がある。
【０２８２】
一方、本実施形態では「小さな単位」と「大きな単位」という２つの管理単位が採用されている。これらのデータ管理分解能に応じた管理テーブルによって、コントローラ１０は、「小さな単位」で管理されるデータ個数の増大を抑制する。従って、本実施形態に係る半導体記憶装置３２は、管理テーブルのサイズの増大を抑制し、かつ、高い書き込み効率を実現することが可能である。
【０２８３】
（５）  その他  
第二及び第三の記憶部１２，１３に関して、本実施形態の処理に加えて、以下の処理を行っても良い。
【０２８４】
Ａ．  第二の記憶部のコンパクション  
第二の記憶部１２の無効データ数が増え、「書き込み可能」な状態のページが無いブロックが増えた場合、図１９に示すように、コントローラ１０は、有効データのみを集めて、これらの有効データを「未使用」のブロックにコピーしても良い。
【０２８５】
結果として、元々有効データが記憶されていたブロックを解放することが可能となり、第二の記憶部１２内の無効データ数が減少し、「未使用」のブロック数が増加する。有効データを集めて「未使用」のブロック（コンパクションブロック）にコピーすることに由来し、この処理を第二の記憶部１２のコンパクションと呼ぶ。
【０２８６】
コンパクションによって、更に書き込み効率を向上させることが可能な場合がある。しかしながら、本実施形態では同様の場合に、第二の記憶部１２から第三の記憶部１３へのデータ転送処理によってコンパクションの代用が可能であるため、コンパクションは補助的な処理となる。
【０２８７】
例えば、コントローラ１０は、第二の記憶部１２についてブロックごとに「小さな単位」の無効データ数を計算する。コントローラ１０は、無効データ数が多いブロックを降順で連続的に選択し、選択されたブロック内の有効データを、消去された「未使用」のブロックにコピーする。有効データで満たされたブロックは、第二の記憶部１２に割り当てられる。
【０２８８】
コンパクションは、例えば、第二の記憶部１２に含まれる無効データの合計が、所定の閾値よりも大きくなった場合に実行される。
【０２８９】
Ｂ．  第三の記憶部のコンパクション  
第三の記憶部１３のコンパクションは、第三の記憶部１３におけるデータ管理単位(「大きな単位」)のサイズが、ブロック単位のサイズ未満である場合に適用可能になる。
【０２９０】
第三の記憶部１３の無効データ数が増え、「書き込み可能」な状態のページが無いブロックが増えた場合、図１９に示すように、コントローラ１０は、有効データのみを集めて、これらの有効データを「未使用」のブロックにコピーしても良い。
【０２９１】
結果として、元々データが記憶されていたブロックを解放することが可能となり、第三の記憶部１３内の無効データ数が減少し、「未使用」のブロック数が増加する。有効データを集めて「未使用」のブロック（コンパクションブロック）にコピーすることに由来し、この処理を第三の記憶部１３のコンパクションと呼ぶ。
【０２９２】
例えば、コントローラ１０は、第三の記憶部１３についてブロックごとに「大きな単位」の無効データ数を計算する。コントローラ１０は、無効データ数が多いブロックを降順で連続的に選択し、選択されたブロック内の有効データを、消去された「未使用」のブロックにコピーする。有効データで満たされたブロックは、第三の記憶部１３に割り当てられる。
【０２９３】
コンパクションは、例えば、第三の記憶部１３に含まれる無効データの合計が、所定の閾値よりも大きくなった場合に実行される。
【０２９４】
３．  まとめ  
本実施形態によれば、以下の構成により、ホスト機器からのデータサイズまたはデータ量にかかわらず、書き込み効率の向上を図り、性能劣化及び寿命短縮を防止できる。
【０２９５】
・  記憶場所の振り分け  
半導体記憶装置は、第一の単位以下で書き込みを行う揮発性半導体記憶素子に形成された第一の記憶部と、第二の単位で書き込みを行い、第三の単位で消去を行う不揮発性半導体記憶素子に形成された第二及び第三の記憶部と、以下の処理を実行するコントローラとを有する。第一の単位は半導体記憶装置に対するアクセス単位であり、第三の単位は第二の単位の二以上の自然数倍の大きさである。
【０２９６】
コントローラは、複数のデータを第一の単位で第一の記憶部に記憶する第一の処理と、第一の記憶部から出力されたデータを第一の管理単位で第二の記憶部に記憶する第二の処理と、第一の記憶部から出力されたデータを第二の管理単位で第三の記憶部に記憶する第三の処理とを実行する。第一の管理単位は第一の単位の二以上の自然数倍の大きさであり、かつ、第三の単位よりも小さく、第二の管理単位は第一の管理単位の二以上の自然数倍の大きさである。
【０２９７】
・  第二の記憶部から第三の記憶部へのデータ転送（デフラグメンテーション）  
コントローラは、更に、第二の記憶部から出力される第一の管理単位のデータを選択する第四の処理と、選択されたデータを含むデータを第二の管理単位で第三の記憶部に記憶する第五の処理とを実行する。
【０２９８】
・  メモリの共有  
第二の記憶部と第三の記憶部は、同一の不揮発性半導体記憶素子を共有し、コントローラは、第三の単位の領域を、第二及び第三の記憶部の各々に割り当てる。
【０２９９】
・  振り分け条件１（第一の記憶部内のデータ数）  
コントローラは、第一の記憶部から出力されるデータの論理アドレスを第二の管理単位にアラインすることで論理アドレス範囲を計算し、論理アドレス範囲内に含まれ、かつ、第一の記憶部に記憶されているデータを数え、データ数が所定の閾値未満である場合は第二の処理を実行し、データ数が所定の閾値以上である場合は第三の処理を実行する。
【０３００】
・  振り分け条件２（第一及び第二の記憶部内のデータ数）  
コントローラは、第一の記憶部から出力されるデータの論理アドレスを第二の管理単位にアラインすることで論理アドレス範囲を計算し、論理アドレス範囲内に含まれ、かつ、第一及び第二の記憶部に記憶されているデータを数え、データ数が所定の閾値未満である場合は第二の処理を実行し、データ数が所定の閾値以上である場合は第三の処理を実行する。
【０３０１】
・  デフラグメンテーション発動条件  
コントローラは、第二の記憶部に記憶されている複数の有効データ及び無効データによって占有される第三の単位の領域の数が許容範囲を超えた場合に、第四及び第五の処理を実行する。
【０３０２】
・  デフラグメンテーション条件１（古いデータ）  
第四の処理において、コントローラは、第二の記憶部内で書き込まれた順序が最も古い第三の単位の領域を検出し、その第三の単位の領域に記憶されている第一の管理単位の各有効データを選択する。
【０３０３】
・  デフラグメンテーション条件２（有効データ）  
第四の処理において、コントローラは、第二の記憶部における第三の単位の領域それぞれについて、有効データの論理アドレスを第二の管理単位にアラインすることで論理アドレス範囲を計算し、論理アドレス範囲内に含まれ、かつ、第二の記憶部に記憶されている有効データを数え、第二の記憶部における第三の単位の領域それぞれについてその有効データ数を合計し、合計が最も大きい第三の単位の領域を検出し、その第三の単位の領域に記憶されている第一の管理単位の各有効データを選択する。
【０３０４】
・  デフラグメンテーション条件３（無効データ）  
第四の処理において、コントローラは、第二の記憶部における第三の単位の各領域について無効データを数え、無効データ数が最も小さい第三の単位の領域を検出し、その第三の単位の領域に記憶されている第一の管理単位の各有効データを選択する。
【０３０５】
・  第二の記憶部のデータ管理単位：小  
第二の単位は、第一の管理単位の二以上の自然数倍の大きさである。
【０３０６】
・  第二の記憶部のデータ管理単位：大  
第一の管理単位は、第二の単位の二以上の自然数倍の大きさであり、かつ、第三の単位は、第一の管理単位の二以上の自然数倍の大きさである。
【０３０７】
・  第三の記憶部のデータ管理単位：小  
第三の単位は、第二の管理単位の二以上の自然数倍の大きさである。
【０３０８】
・  第三の記憶部のデータ管理単位：大  
第二の管理単位は、第三の単位の二以上の自然数倍の大きさである。
【０３０９】
・  第二の記憶部の無効化  
第二の処理において、コントローラは、第二の記憶部における第二の単位の空き領域に第一の管理単位の新データを書き込み、新データの論理アドレスが旧データの論理アドレスに対応する場合、第二の記憶部に記憶されていた旧データを無効化し、新データを、旧データに対して優先度が高い有効データとして取り扱い、旧データを、新データを参照することにより無視される無効データとして取り扱う。
【０３１０】
・  第二の記憶部のコンパクション  
コントローラは、第二の記憶部における無効データ数が許容値を超えたか否かを判断し、第二の記憶部における第三の単位の各領域について無効データを数え、無効データ数が大きい第三の単位の領域から順次有効データを選択し、選択された有効データを、第三の単位の空いている第一の領域に書き直し、選択された有効データを書き込んだ後に第１の領域を第二の記憶部に割り当て、選択された有効データを第一の領域に書き直すことによって有効データを持たなくなった第三の単位の第二の領域を、第二の記憶部から解放する。
【０３１１】
・  第三の記憶部の無効化  
第三の処理において、コントローラは、第三の記憶部における第三の単位の空き領域に第二の管理単位の新データを書き込み、新データの論理アドレスが旧データの論理アドレスに対応する場合、第三の記憶部に記憶されていた旧データを無効化し、新データを、旧データに対して優先度が高い有効データとして取り扱い、旧データを、新データを参照することにより無視される無効データとして取り扱う。
【０３１２】
・  第三の記憶部のコンパクション  
コントローラは、第三の記憶部における無効データ数が所定の閾値を超えたか否かを判断し、第三の記憶部における第三の単位の各領域について第二の管理単位の無効データを数え、無効データ数が大きい第三の単位の領域から順次有効データを選択し、選択された第二の管理単位の有効データを、第三の記憶部における第三の単位の空き領域に書き直し、第三の単位の領域を解放する。第二の管理単位は第三の単位よりも小さいとする。
【０３１３】
４．  適用例  
本実施形態に係る半導体記憶装置は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータの二次記憶装置として使用されるＳＳＤに適用可能である。その場合の具体例については、後述する。
【０３１４】
５．  むすび  
本実施形態によれば、消去／読み出し／書き込みの単位が固定される不揮発性半導体記憶素子を使用する半導体記憶装置において、ホスト機器からのデータサイズまたはデータ量にかかわらず、書き込み効率の向上を図り、性能劣化及び寿命短縮を防止することができる。
【０３１５】
本発明は、上述の実施形態に限定されるものではなく、その要旨を逸脱しない範囲で、各構成要素を変形して具体化できる。また、上述の実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成できる。例えば、上述の実施形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施形態の構成要素を適宜組み合わせてもよい。
【０３１６】
［ＩＩ．消去回数の増加を抑制する半導体記憶装置］  
１．  概要  
第Ｉ節で述べたコンパクションは、無効データの消去に基づく記憶領域の有効活用に優れている。しかしながら、コンパクションは、同一のデータを他のブロックに書き直むというコピー動作を必要とするため、コンパクションの対象となった有効データに対して直ちに更新が行われると、ブロックの消去回数が増加するという副作用が生じる。
【０３１７】
コンパクションにより新たに使用中となるブロック内には有効データが詰まった状態となっているが、コンパクションの対象となったデータが更新されると、そのデータは無効データとなる。また、ブロック内の無効データが増えれば、再び、そのブロック内の有効データがコンパクションの対象となるため、結果として、ブロックの消去回数が増加することがある。
【０３１８】
以上の構成によれば、コンパクションの対象とするデータは、更新頻度の低いデータとすることが望ましく、データを選別する手段が必要となる。
【０３１９】
このような知見に基づいて、各実施形態では、更新頻度の高いデータと更新頻度の低いデータとを区別する手段を設け、更新頻度の低いデータをコンパクションの対象とすることで、コンパクションの対象となったデータに対して直ちに更新が行われることを防止する。この構成によれば、ブロックの消去回数が減少し、メモリセルの劣化が防止される。
【０３２０】
具体的構成としては、以下の記憶部が規定される。  
・  第一の単位以下でデータの読み出し／書き込みが可能な揮発性半導体記憶素子内の第一の記憶部
・  第二の単位でデータの読み出し／書き込みを行い、第三の単位でデータの消去を行う不揮発性半導体記憶素子内の複数の第三の単位の領域から構成され、第一の単位の自然数倍の大きさである「小さな単位（第一の管理単位）」でデータを管理する第二の記憶部
・  第二の単位でデータの読み出し／書き込みを行い、第三の単位でデータの消去を行う不揮発性半導体記憶素子内の複数の第三の単位の領域から構成され、「小さな単位」の二以上の自然数倍、かつ、第三の単位の自然数倍の大きさである「大きな単位（第二の管理単位）」でデータを記憶する第三の記憶部
・  第二の単位でデータの読み出し／書き込みを行い、第三の単位でデータの消去を行う不揮発性半導体記憶素子内の複数の第三の単位の領域から構成され、第一の単位の自然数倍の大きさである「小さな単位」でデータを管理する第四の記憶部
第四の記憶部は、更新頻度の高いデータと更新頻度の低いデータとを区別する手段として使用される。概略的には、第Ｉ節で述べた基本構成に加え、更新頻度の高いデータと更新頻度の低いデータとを区別するための第四の記憶部が設けられた構成となる。
【０３２１】
第一の単位の複数のデータは、第一の記憶部に書き込まれ、その後、第三または第四の記憶部に書き込まれる。第四の記憶部は、ＦＩＦＯ(First-In First-Out)構造を有する。第四の記憶部内の「使用中」の第三の単位の領域の数が許容範囲よりも大きくなった場合に、第二の記憶部で最も古い割り当て順序を備える第三の単位の領域内に記憶されており、かつ、第三の条件を満たす有効データは、「大きな単位」で第四の記憶部に転送される。
【０３２２】
また、第三の条件を満たさない有効データが残った第二の記憶部内で最も古い割り当て順序を備える第三の単位の領域は、第二の記憶部に移動される。第二の記憶部内の「使用中」の第三の単位の領域の数が許容範囲よりも大きくなり第四の条件が満たされた場合には、第二の記憶部内の有効データを選択し、第三の単位の空き領域にコピーする。有効データの詰まった第三の単位の領域は、第二の記憶領域に割り当てられる（コンパクション）。
【０３２３】
ここで、第二の記憶部におけるコンパクションの対象が更新頻度の低いデータとなる原理は、以下の通りである。
【０３２４】
第四の記憶部は、第三の単位のＦＩＦＯの構造を有するため、第四の記憶部に入力されたデータは、一定期間、第四の記憶部内に留まることになる。このため、更新頻度の高いデータは、第四の記憶部内で更新される。データが更新されると、旧データは無効データとなり、更新データが新たに第四の記憶部に入力されるため、更新頻度の高いデータは第四の記憶部内に留まり、第四の記憶部から出力されることはない。
【０３２５】
第二の記憶部内の有効データをコンパクションの対象とし、第四の記憶部内の有効データをコンパクションの対象としないことで、更新頻度の低いデータをコンパクションの対象とすることができ、結果として、コンパクションの副作用であるブロックの消去回数増加を抑制できる。
【０３２６】
２．  実施形態  
（１）  第一の実施形態  
図２０は、第一の実施形態に係る半導体記憶装置を示している。
【０３２７】
第一の記憶部１１は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部１１内部において、セクタ単位（第一の単位）以下で読み出し及び書き込みがされる。第一の記憶部１１は、例えば、ＤＲＡＭ等の揮発性半導体記憶素子から構成される。
【０３２８】
第二の記憶部１２は、不揮発性半導体記憶素子２２の複数のブロックから構成される。不揮発性半導体記憶素子２２内部において、一括して読み出し／書き込みの行われる単位がページ（第二の単位）であり、一括して消去の行われる単位がブロック（第三の単位）である。ブロック単位は、ページ単位の自然数倍のサイズである。第二の記憶部１２は、ページ単位に等しい「小さな単位」でデータを記憶する。
【０３２９】
第三の記憶部１３は、不揮発性半導体記憶素子２２の複数のブロックから構成され、ブロック単位に等しい「大きな単位」でデータを記憶する。
【０３３０】
第四の記憶部１４は、不揮発性半導体記憶素子２２の複数のブロックから構成され、ページ単位に等しい「小さな単位」でデータを記憶する。
【０３３１】
第一の記憶部１１の記憶容量は、不揮発性半導体記憶素子２２の１ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子２２の記憶容量は、半導体記憶装置（例えば、ＳＳＤ）の製品仕様としての記憶容量よりも大きいと想定する。
【０３３２】
不揮発性半導体記憶素子２２の記憶容量は、以下の通りに、第二、第三、及び第四の記憶部１２，１３，１４へと割り当てられる。
【０３３３】
第三の記憶部１３には、半導体記憶装置の製品仕様としての記憶容量と同じ、または、それを超える記憶容量が割り当てられる。
【０３３４】
第二及び第四の記憶部１２，１４には、不揮発性半導体記憶素子２２の記憶容量から第三の記憶部１３の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部１２，１４それぞれの記憶容量、及び、それらの割合に制限はない。
【０３３５】
第二、第三、及び第四の記憶部１２，１３，１４は、例えば、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体記憶素子２２の一以上のブロックから構成される。
【０３３６】
データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ（ＥＣＣ、内部制御用フラグ等）が含まれないものとする。
【０３３７】
通常、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体記憶素子を含むシステムでは、主データに対して冗長データが付加された状態で読み出し、書き込みが行われるが、簡略化のため、上述のように定義する。
【０３３８】
コントローラ１０は、ＣＰＵと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。尚、本実施形態においてコントローラ１０が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【０３３９】
コントローラ１０の主記憶メモリが、ＤＲＡＭ等の揮発性半導体記憶素子で構成される場合は、第一の記憶部１１を、コントローラ１０の主記憶メモリ内に配置しても良い。
【０３４０】
コントローラ１０は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、及び第四の記憶部１１，１２，１３，１４のどこに記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、ページＦＩＦＯ管理テーブル、及び物理ブロック管理テーブルを備える。これらの管理テーブルは、半導体記憶装置の動作中にコントローラ１０の主記憶メモリ内に展開される。
【０３４１】
・  キャッシュ管理テーブル  
図２１は、キャッシュ管理テーブルの構成例を示している。
【０３４２】
キャッシュ管理テーブルは、図２０の第一の記憶部１１に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。また、有効データの管理は、セクタ単位で実行される。
【０３４３】
第一の記憶部１１の１ページ単位の領域一つに対して１エントリとする。
【０３４４】
エントリ数は、第一の記憶部１１に収まるページ単位のデータ数、即ち、（第一の記憶部１１の全容量）／（ページ単位のサイズ）以下とする。
【０３４５】
各エントリには、ページ単位のデータの論理アドレス、第一の記憶部１１の物理アドレス、及び、対応するページ単位の領域内の有効データの位置を表すセクタフラグが関連付けられている。
【０３４６】
各エントリに対応付けて、データを一時的に記憶するためのページ単位の領域を第一の記憶部１１内に用意し、その領域の物理アドレスを各エントリに格納する。ページ単位の領域が連続的に配置されている等、エントリに対応する領域の物理アドレスが固定的であれば、物理アドレスをエントリ内に格納する必要はない。
【０３４７】
キャッシュ管理テーブルにおいて、第一の記憶部１１の各ページ単位の領域は、更にセクタ単位の領域に分割され、各セクタ単位の領域内のデータの状態を、セクタフラグの値を「有」または「無」にすることで示す。
【０３４８】
セクタフラグが「有」の領域には、ホスト機器からの有効データが記憶されている。これに対し、セクタフラグが「無」の領域には、ホスト機器から書き込まれた最新のデータが記憶されておらず、無効な領域となる。また、エントリ内の全てのセクタフラグが「無」のエントリは、未使用のエントリとみなす。
【０３４９】
尚、上記キャッシュ管理テーブルの構成は、各エントリに論理アドレスを割り当てるフルアソシアティブと呼ばれる管理方法を元にしているが、ｎ−ｗａｙセットアソシアティブ等の方法で、第一の記憶部１１における論理アドレスと物理アドレスとの対応を管理してもよい。
【０３５０】
・  ページ管理テーブル  
図２２は、ページ管理テーブルの構成例を示している。
【０３５１】
ページ管理テーブルは、図２０の第二及び第四の記憶部１２，１４に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【０３５２】
第二及び第四の記憶部１２，１４の１ブロックに対して１エントリとする。
【０３５３】
エントリ数は、第二及び第四の記憶部１２，１４に収まるブロック数に対して、更に処理の中間状態のブロックを登録できるだけの余裕を持たせた数、即ち、［（第二及び第四の記憶部１２，１４の全容量）／（ブロック単位のサイズ）］に余裕を持たせた数とする。
【０３５４】
各エントリには、第二の記憶部１２または第四の記憶部１４に割り当てられたブロックの物理アドレスが関連付けられている。また、各エントリには、ブロック内のページ単位のデータの論理アドレスが記録されている。
【０３５５】
また、ページの空き状況として、各ページについて、「書き込み可能」（記憶領域が空いている）である状態と、「書き込み不可」（一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために記憶領域が無効となっている）である状態とを、それぞれ区別できるようにしておく。
【０３５６】
・  ブロック管理テーブル  
図２３は、ブロック管理テーブルの構成例を示している。
【０３５７】
ブロック管理テーブルは、図２０の第三の記憶部１３に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。
【０３５８】
第三の記憶部１３の１ブロック単位の領域一つに対して１エントリとする。
【０３５９】
エントリ数は、第三の記憶部１３に収まるブロック単位のデータ数、即ち、（第三の記憶部１３の全容量）／（ブロック単位のサイズ）以下とする。
【０３６０】
各エントリは論理アドレス順に配列されている。ブロック単位のデータの論理アドレスに対応して、第三の記憶部１３内のブロックを指定する物理アドレスが、各エントリに関連付けられている。
【０３６１】
・  ページＦＩＦＯ管理テーブル  
図２４は、ページＦＩＦＯ管理テーブルの構成例を示している。
【０３６２】
ページＦＩＦＯ管理テーブルは、図２０の第四の記憶部１４に割り当てられたブロック内のデータを管理する。
【０３６３】
第四の記憶部１４の１ブロックに対して１エントリとする。
【０３６４】
エントリ数は、第四の記憶部１４に収まるブロック数、即ち、（第四の記憶部１４の全容量）／（ブロック単位のサイズ）とする。
【０３６５】
第四の記憶部１４は、ページＦＩＦＯ管理テーブルを使用することで、ブロック単位のＦＩＦＯ(First-In First-Out)構造を伴って管理される。
【０３６６】
新たに第四の記憶部１４に割り当てられた（入力された）ブロックに対応するエントリは、ページＦＩＦＯ管理テーブルの先頭（入口側）に追加され、元々ページＦＩＦＯ管理テーブルに登録されていたエントリは、一つずつ後方にシフトする。
【０３６７】
エントリ数が許容範囲を超えた場合、ページＦＩＦＯ管理テーブルの末端（出口側）のエントリに関連付けられている最も古い割り当て順序を有するブロックは、第四の記憶部１４から出力される。
【０３６８】
・  物理ブロック管理テーブル  
図２５は、物理ブロック管理テーブルの構成例を示している。
【０３６９】
物理ブロック管理テーブルは、不揮発性半導体記憶素子２２のブロックの使用状況を管理する。
【０３７０】
第二、第三、及び第四の記憶部１２，１３，１４の１ブロック（物理ブロック）に対して１エントリとする。エントリ数は、データエリアとして使用可能なブロック数とする。
【０３７１】
各エントリは、ブロックの物理アドレスと関連付けられており、また、ブロックの使用状況（記憶領域（ブロック）が第二、第三、及び第四の記憶部として使用されている（使用）か、または、使用されていない（未使用）か）を記憶する。
【０３７２】
図２０のコントローラ１０によって実行される処理フローについて説明する。
【０３７３】
コントローラ１０は、ホスト機器からのセクタ単位（第一の単位）のデータを、最初に第一の記憶部１１に書き込み、そのデータを一定期間蓄積する。このデータ蓄積処理については、例えば、第Ｉ節で述べた「Ａ．第一の記憶部へのデータ蓄積処理」を適用することができる。
【０３７４】
コントローラ１０は、第一の記憶部１１に蓄積されたデータを、所定の条件に従い、「小さな単位（第一の管理単位）」で管理すべきか、または、「大きな単位（第二の管理単位）」で管理すべきか、を判断する。所定の条件は、第Ｉ節で述べた「Ｂ．第一の記憶部からのデータ出力処理」における第一の条件と実質的に同じであっても良い。
【０３７５】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【０３７６】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、かつ、ブロック単位の自然数倍のサイズである。
【０３７７】
本実施形態では、説明の簡略化のため、管理テーブルで使用される各単位を、下記の通りであると想定する。
【０３７８】
即ち、第二及び第四の記憶部１２，１４のデータ管理単位である「小さな単位」のサイズは、ページ単位（第二の単位）のサイズと等しく、第三の記憶部１３のデータ管理単位である「大きな単位」のサイズは、ブロック単位（第三の単位）のサイズと等しい。
【０３７９】
しかしながら、ページを分割して管理して、「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【０３８０】
或いは、複数のページを合わせて管理して、「小さな単位」がページ単位の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【０３８１】
同様に、ブロックを分割して管理して、第三の記憶部１３で使用される「大きな単位」が「小さな単位」の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「大きな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【０３８２】
或いは、複数のブロックを合わせて管理して、「大きな単位」がブロック単位の二以上の自然数倍のサイズとなるようにしてもよい。
【０３８３】
上記単位間の関係は、例えば、セクタ単位（第一の単位）＜「小さな単位」＜ページ単位（第二の単位）＜ブロック単位（第三の単位）≦「大きな単位」と設定することが可能である。
【０３８４】
第一の記憶部１１に蓄積されたデータを「小さな単位」で管理する場合には、ページ単位のデータを第四の記憶部１４に転送する。第一の記憶部１１に蓄積されたデータを「大きな単位」で管理する場合には、ブロック単位のデータを第三の記憶部１３に転送する。
【０３８５】
このデータ出力処理については、第Ｉ節で述べた「Ｂ．第一の記憶部からのデータ出力処理」と実質的に同様である。ただし、第Ｉ節とは異なり、「小さな単位」のデータの行き先は、第四の記憶部１４となる。
【０３８６】
Ａ．  第四の記憶部のＦＩＦＯ処理  
第四の記憶部１４は、既に述べたように、ブロック単位のＦＩＦＯ構造を有する。図２６は、第四の記憶部１４でのＦＩＦＯ処理を示している。
【０３８７】
１．  コントローラ１０は、追記的にデータを書き込むために準備されたブロック（以下、ページ追記用物理ブロックと称する）に対応するページ管理テーブルのエントリを参照する。コントローラ１０は、第一の記憶部１１から出力されたデータを、ページ単位に等しい「小さな単位」のデータとして、ページ追記用物理ブロック内の書き込み可能なページに記憶する（ステップＳＴ１）。
【０３８８】
コントローラ１０は、キャッシュ管理テーブルを検索し、出力対象に決まったページ単位のデータを構成するセクタ単位のデータが、第一の記憶部１１内に全て存在するか否かを判断する。
【０３８９】
第一の記憶部１１内に全てのセクタ単位のデータが存在しない場合、コントローラ１０は、第二、第三、及び第四の記憶部１２，１３，１４から、不足データを集める。
【０３９０】
ページ単位のデータを構成する全てのセクタ単位のデータが揃った後、コントローラ１０は、そのページ単位のデータを書き込む指示を、不揮発性半導体記憶素子２２に与える。
【０３９１】
２．  コントローラ１０は、ページ管理テーブルにおいて、内部にページ単位のデータが書き込まれたページに対応するエントリに記録された論理アドレスを更新する（ステップＳＴ２）。第二及び第四の記憶部１２，１４内に既に書き込まれていた、同一論理アドレス範囲に含まれる旧データは、無効データとなる。
【０３９２】
３．  コントローラ１０は、ページ追記用物理ブロック内に空きページが存在するか否かを判断する（ステップＳＴ３）。空きページが検出されなかった場合、処理はステップＳＴ４に進む。空きページが検出された場合、処理はステップＳＴ１に戻る。
【０３９３】
４．  コントローラ１０は、ページＦＩＦＯ管理テーブルのエントリを一つずつ後方にシフトし、ページ追記用物理ブロックの物理アドレスを、ページＦＩＦＯ管理テーブルの先頭のエントリに加える（ステップＳＴ４）。結果として、ページ追記用ブロックは、第四の記憶部１４に割り当てられる。
【０３９４】
５．  コントローラ１０は、ページＦＩＦＯ管理テーブルの末端のエントリに関連付けられており、ページＦＩＦＯ管理テーブルから溢れている最も古い割り当て順序を備えたブロックに対して、以下の処理Ｐ１を実行する（ステップＳＴ５）。
【０３９５】
Ｂ．  処理Ｐ１  
図２７は、処理Ｐ１のフローチャートを示している。
【０３９６】
１．  コントローラ１０は、図２２のページ管理テーブルを検索し、第四の記憶部１４から溢れたブロックの物理アドレスが記録されているエントリを検出する（ステップＳＴ１）。
【０３９７】
２．  コントローラ１０は、エントリに記録されているページ単位のデータの論理アドレスを特定する（ステップＳＴ２）。各々の論理アドレスに対して、以下の処理が適用される。
【０３９８】
３．  コントローラ１０は、ページ単位のデータの論理アドレスを、ブロック単位に等しい「大きな単位」のサイズでアラインし、ページ管理テーブル内について、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる論理アドレスを数える（ステップＳＴ３）。
【０３９９】
ここで、「論理アドレスを所定サイズ（ページサイズ、ブロックサイズ等）にアラインする」とは、論理アドレスを所定サイズで割り算した時の剰余が０になるアドレスに切り下げることを意味する。例えば論理アドレスＡをサイズＳにアラインしたアドレスは、（Ａ−（ＡをＳで割った余り））となる。「所定サイズにアラインされた論理アドレス範囲」とは、論理アドレスを所定サイズにアラインしたアドレスから所定サイズ分の範囲を意味する。
【０４００】
コントローラ１０が、ページＦＩＦＯ管理テーブルに含まれる物理アドレスを備えたエントリ内の論理アドレスだけを限定して数える場合、第四の記憶部１４内に記憶されているページ単位のデータ数が取得されることになる。一方、コントローラ１０がエントリを限定しない場合、第二及び第四の記憶部１２，１４内に記憶されているページ単位のデータ数が取得されることになる。コントローラ１０は、いずれの条件も選択可能である。
【０４０１】
４．  コントローラ１０は、ステップＳＴ３で数えた論理アドレス数が、所定の閾値以上であるか否かを判断する（第三の条件）。所定の閾値は、例えば、一つのブロック単位（「大きな単位」）の領域内に収まるページ単位（「小さな単位」）のデータ総数の５０％に設定されていても良い（ステップＳＴ４）。
【０４０２】
ステップＳＴ３で数えた論理アドレス数が、所定の閾値未満である場合、処理はステップＳＴ５に進む。ステップＳＴ３で数えた論理アドレス数が、所定の閾値以上である場合、処理はステップＳＴ６に進む。
【０４０３】
５．  コントローラ１０は、ページ単位のデータに対して、何も実行しない。即ち、ページ単位のデータは、第四の記憶部１４から溢れたブロック内に留まる（ステップＳＴ５）。
【０４０４】
６．  コントローラ１０は、ページ単位のデータを、ブロック単位に等しい「大きな単位」のデータとして、第三の記憶部１３に転送する（ステップＳＴ６）。
【０４０５】
コントローラ１０は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる有効データを、第一、第二、第三、及び第四の記憶部１１，１２，１３，１４から集めることによって、ページ単位のデータをブロック単位のデータへと統合する（デフラグメンテーション）。
【０４０６】
ブロック単位のデータを構成する有効データが揃った後、コントローラ１０は、そのブロック単位のデータを第三の記憶部１３の空きブロックに書き込む指示を、不揮発性半導体記憶素子２２に与える。
【０４０７】
７．  コントローラ１０は、第一、第二、第三、及び第四の記憶部１１，１２，１３，１４について、書き込みデータの論理アドレス範囲内に含まれるデータを、無効化する（ステップＳＴ７）。
【０４０８】
ブロック内の全てのデータが無効データになった場合、コントローラ１０はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する。
【０４０９】
８．  コントローラ１０は、エントリ内の全ての論理アドレスが処理されたか否かを判断する（ステップＳＴ８）。エントリ内の全ての論理アドレスが処理された場合、この処理は終了する。エントリ内の全ての論理アドレスが処理されていない場合、処理はステップＳＴ３に戻る。
【０４１０】
処理Ｐ１を終了した後にあっても、第四の記憶部１４から溢れたブロック内に有効データが残っている場合、コントローラ１０は、物理ブロック管理テーブルにおいてそのブロックに対応するエントリを、「第二の記憶部１２（使用）」に設定する。
【０４１１】
第四の記憶部１４から第二の記憶部１２へのデータ転送に際して、コントローラ１０はページＦＩＦＯ管理テーブル及び物理ブロック管理テーブルを更新するのみであり、不揮発性半導体素子２２に対するデータの読み出し／書き込み指示を要しない（移動処理）。
【０４１２】
ページ追記用物理ブロック内に空きページがなくなると、コントローラ１０は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、そのブロックが新たにページ追記用物理ブロックとして割り当てられる。コントローラ１０はページ管理テーブルの未使用のエントリを検索する。ページ追記用物理ブロックに対応する物理アドレスは、その未使用のエントリに記録される。
【０４１３】
第四の記憶部１４からのブロックの移動に伴って、第二の記憶部１２内のページ単位で管理されるブロックの数が増加する。第二の記憶部１２のブロック数が許容範囲、即ち、第二の記憶部１２の容量として定められた所定のブロック数を超える場合、コントローラ１０は、以下の手順で、コンパクション、または、第二の記憶部１２から第三の記憶部１３へのデータ転送処理を実行する。
【０４１４】
Ｃ．処理例１  
図２８は、処理例１のフローチャートを示している。
【０４１５】
１．  コントローラ１０は、ページ管理テーブルを走査し、第二の記憶部１２内においてページ単位に等しい「小さな単位」で記憶されているデータ数（論理アドレス数）を数える（ステップＳＴ１）。
【０４１６】
ステップＳＴ１では、ページＦＩＦＯ管理テーブルに物理アドレスが含まれるエントリと、ページ追記用物理ブロックに対応するエントリとに関しては、走査の対象としない。即ち、コントローラ１０は、第二の記憶部１２のみを走査する。
【０４１７】
２．  コントローラ１０は、第二の記憶部１２に記憶されているページ単位の有効データの総数が、所定の閾値以下であるか否かを判断する（第四の条件）。所定の閾値は、例えば、第二の記憶部１２に収まるページ単位のデータ数とすれば良い（ステップＳＴ２）。
【０４１８】
有効データの総数が所定の閾値よりも大きい場合には、コンパクションを行っても第二の記憶部１２のブロック数を許容範囲にまで減らすことはできないので、処理はステップＳＴ３に進む。有効データの総数が所定の閾値以下である場合には、処理はステップＳＴ６に進む。
【０４１９】
３．  コントローラ１０は、所定の条件に基づいて、第二の記憶部１２内の有効データを選択し、選択されたデータをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部１３へ転送する（ステップＳＴ３）。所定の条件は、例えば、第Ｉ節で述べた「Ｃ．第二の記憶部から第三の記憶部へのデータ転送処理」の第二の条件と実質的に同じであっても良い。
【０４２０】
コントローラ１０は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる有効データを、第一、第二、第三、及び第四の記憶部１１，１２，１３，１４から集めることで、ページ単位の有効データをブロック単位のデータへと統合する（デフラグメンテーション）。
【０４２１】
ブロック単位のデータを構成する有効データを揃えた後、コントローラ１０は、そのブロック単位のデータを第三の記憶部１３の空きブロックに書き込む指示を、不揮発性半導体記憶素子２２に与える。
【０４２２】
４．  コントローラ１０は、書き込みデータの論理アドレス範囲内に含まれる、第一、第二、第三、及び第四の記憶部１１，１２，１３，１４に記憶されていたデータを、無効化する。ブロック内の全てのデータが無効になった場合、コントローラ１０は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する（ステップＳＴ４）。
【０４２３】
５．  コントローラ１０は、第二の記憶部１２内のブロック数が、第二の記憶部１２の容量として定められた所定のブロック数以下であるか否かを判断する（ステップＳＴ５）。
【０４２４】
第二の記憶部１２内のブロック数が第二の記憶部１２の容量として定められた所定のブロック数以下である場合には、処理は終了する。第二の記憶部１２内のブロック数が第二の記憶部１２の容量として定められた所定のブロック数よりも大きい場合には、処理はステップＳＴ１に戻る。
【０４２５】
６．  コントローラ１０は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ１０は、ページ管理テーブルから未使用のエントリを検索する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる（ステップＳＴ６）。
【０４２６】
７．  コントローラ１０は、第二の記憶部１２において、有効データ数が小さいブロックから順番に、ページ単位の有効データを選択する（ステップＳＴ７）。選択された有効データはコンパクションブロックにコピーされ、ページ管理テーブルのコンパクションブロックに対応するエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される。
【０４２７】
コントローラ１０は、物理ブロック管理テーブルのエントリを「第二の記憶部１２（使用）」に更新することで、有効データが詰まったコンパクションブロックを、第二の記憶部１２に割り当てる。
【０４２８】
ステップＳＴ７（コンパクション）に際して、コピーされるデータの論理アドレス範囲内に含まれる最新の有効データを第一の記憶部１１から読み出し、コピーされるデータを最新データで上書きしても良い。コピーされるデータに取り込まれた第一の記憶部１１内のセクタ単位のデータは、無効化される。
【０４２９】
８．  コントローラ１０は、第二の記憶部１２において、コピーされたデータと同じ論理アドレスを有するデータを無効化する。ブロック内の全てのデータが無効データになった場合、コントローラ１０はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する（ステップＳＴ８）。
【０４３０】
９．  コントローラ１０は、第二の記憶部１２内のブロック数が、第二の記憶部１２の容量として定められた所定のブロック数以下であるか否かを判断する（ステップＳＴ９）。
【０４３１】
第二の記憶部１２内のブロック数が第二の記憶部１２の容量として定められた所定のブロック数以下である場合には、処理を終了する。第二の記憶部１２内のブロック数が第二の記憶部１２の容量として定められた所定のブロック数よりも大きい場合には、処理はステップＳＴ６に戻る。
【０４３２】
Ｄ．処理例２  
図２９は、処理例２のフローチャートを示している。
【０４３３】
１．  コントローラ１０は、ページ管理テーブルを走査し、ページ単位に等しい「小さな単位」で記憶されている有効データ数（論理アドレス数）が少ない方から順番に、二つのブロックを選択する（ステップＳＴ１）。
【０４３４】
ステップＳＴ１では、ページＦＩＦＯ管理テーブルに物理アドレスが含まれるエントリと、ページ追記用物理ブロックに対応するエントリとに関しては、走査の対象としない。即ち、コントローラ１０は、第二の記憶部１２のみを走査する。
【０４３５】
２．  コントローラ１０は、ページ単位の有効データの総数が、所定の閾値（例えば、第三の単位に格納される第二の単位の数）以下であるか否かを判断する（第四の条件）（ステップＳＴ２）。
【０４３６】
有効データの総数が所定の閾値よりも大きい場合には、コンパクションを行っても第二の記憶部１２のブロック数を許容範囲にまで減らすことはできないので、処理はステップＳＴ３に進む。有効データの総数が所定の閾値以下である場合には、処理はステップＳＴ６に進む。
【０４３７】
３．  コントローラ１０は、所定の条件に基づいて、第二の記憶部１２内の有効データを選択し、選択されたデータをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部１３へ転送する（ステップＳＴ３）。所定の条件は、例えば、第Ｉ節で述べた「Ｃ．第二の記憶部から第三の記憶部へのデータ転送処理」の第二の条件と実質的に同じであっても良い。
【０４３８】
コントローラ１０は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる有効データを、第一、第二、第三、及び第四の記憶部１１，１２，１３，１４から集めることによって、ページ単位の有効データをブロック単位のデータへと統合する（デフラグメンテーション）。
【０４３９】
ブロック単位のデータを構成する有効データを揃えた後、コントローラ１０は、そのブロック単位のデータを第三の記憶部１３の空きブロックに書き込む指示を、不揮発性半導体記憶素子２２に与える。
【０４４０】
４．  コントローラ１０は、書き込みデータの論理アドレス範囲内に含まれる第一、第二、第三、及び第四の記憶部１１，１２，１３，１４に記憶されていたデータを、無効化する。ブロック内の全てのデータが無効になった場合、コントローラ１０は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する（ステップＳＴ４）。
【０４４１】
５．  コントローラ１０は、第二の記憶部１２内のブロックの数が、第二の記憶部１２の容量として定められた所定のブロック数以下であるか否かを判断する（ステップＳＴ５）。
【０４４２】
第二の記憶部１２内のブロック数が第二の記憶部１２の容量として定められた所定のブロック数以下である場合には、処理は終了する。第二の記憶部１２内のブロック数が第二の記憶部１２の容量として定められた所定のブロック数よりも大きい場合には、処理はステップＳＴ１に戻る。
【０４４３】
６．  コントローラ１０は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ１０は、ページ管理テーブルから未使用のエントリを確保する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる（ステップＳＴ６）。
【０４４４】
７．  コントローラ１０は、第二の記憶部１２において、有効データ数が小さいブロックから順番に、ページ単位の有効データを選択する（ステップＳＴ７）。選択された有効データはコンパクションブロックにコピーされ、ページ管理テーブルのコンパクションブロックに対応するエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される。
【０４４５】
コントローラ１０は、物理ブロック管理テーブルのエントリを「第二の記憶部１２（使用）」に更新することで、有効データが詰まったコンパクションブロックを、第二の記憶部１２に割り当てる。
【０４４６】
ステップＳＴ７（コンパクション）に際して、コピーされるデータの論理アドレス範囲内に含まれる最新の有効データを、第一の記憶部１１からも読み出し、コピーされるデータを最新データで上書きしても良い。コピーされるデータに取り込まれた第一の記憶部１１内のセクタ単位のデータは、無効化される。
【０４４７】
８．  コントローラ１０は、第二の記憶部１２において、コピーされたデータと同じ論理アドレスを有するデータを無効化する。ブロック内の全てのデータが無効データになった場合、コントローラ１０はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する（ステップＳＴ８）。
【０４４８】
９．  コントローラ１０は、第二の記憶部１２内のブロック数が、第二の記憶部１２の容量として定められた所定のブロック数以下であるか否かを判断する（ステップＳＴ９）。
【０４４９】
第二の記憶部１２内のブロック数が第二の記憶部１２の容量として定められた所定のブロック数以下である場合には、処理を終了する。第二の記憶部１２内のブロック数が第二の記憶部１２の容量として定められた所定のブロック数よりも大きい場合には、処理はステップＳＴ６に戻る。
【０４５０】
処理例２のステップＳＴ１では、有効データ数が少ない方から順番に二つのブロックが選択されているが、この数は二つに限定されず、二つ以上のブロックが選択されても良い。また、処理例２のステップＳＴ２における「所定の閾値」は、選択されたブロック数よりも一つ少ないブロックに収まるページ単位のデータ数以下であれば良い。
【０４５１】
（２）  第二の実施形態  
図３０は、第二の実施形態に係る半導体記憶装置を示している。
【０４５２】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【０４５３】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、かつ、ブロック単位は、「大きな単位」の二以上の自然数倍のサイズである。
【０４５４】
しかしながら、ページを分割して管理して、「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【０４５５】
上記単位間の関係は、例えば、セクタ単位（第一の単位）＜「小さな単位」＜ページ単位（第二の単位）＜「大きな単位」＜ブロック単位（第三の単位）と設定することが可能である。
【０４５６】
第二の実施形態では、「大きな単位」としてトラック単位が使用される。トラック単位はページ単位の二以上の自然数倍のサイズであり、かつ、ブロック単位はトラック単位の二以上の自然数倍のサイズである。
【０４５７】
トラック単位の使用に伴って、ブロック管理テーブルの代わりに、トラック管理テーブル及びトラックＦＩＦＯ管理テーブルを用いたデータ管理が行われる。
【０４５８】
また、第一の実施形態と同様、説明の簡略化のため、「小さな単位」としてページ単位を使用する。しかしながら、「小さな単位」としてクラスタ単位を使用しても良い。クラスタ単位はセクタ単位の二以上の自然数倍のサイズであり、かつ、ページ単位はクラスタ単位の二以上の自然数倍のサイズである。クラスタ単位を使用するデータ管理については後述する。
【０４５９】
第一の記憶部１１は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部１１内部において、セクタ単位（第一の単位）以下で書き込みされる。第一の記憶部１１は、例えば、ＤＲＡＭ等の揮発性半導体記憶素子に含まれる。
【０４６０】
第二の記憶部１２は、不揮発性半導体記憶素子２２の複数のブロックから構成される。不揮発性半導体記憶素子２２において、一括して読み出し／書き込みの行われる単位がページ（第二の単位）であり、一括して消去の行われる単位がブロック（第三の単位）である。ブロック単位は、ページ単位の自然数倍の大きさである。第二の記憶部１２は、ページ単位に等しい「小さな単位」でデータを記憶する。
【０４６１】
第三の記憶部１３は、不揮発性半導体記憶素子２２の複数のブロックから構成され、トラック単位に等しい「大きな単位」でデータを記憶する。
【０４６２】
第四の記憶部１４は、不揮発性半導体記憶素子２２の複数のブロックから構成され、ページ単位に等しい「小さな単位」でデータを記憶する。
【０４６３】
第五の記憶部１５は、不揮発性半導体記憶素子２２の複数のブロックから構成され、トラック単位に等しい「大きな単位」でデータを記憶する。
【０４６４】
第一の記憶部１１の記憶容量は、不揮発性半導体記憶素子２２の１ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子２２の記憶容量は、半導体記憶装置（例えば、ＳＳＤ）の製品仕様としての記憶容量よりも大きいと想定する。
【０４６５】
不揮発性半導体記憶素子２２の記憶容量は、以下の通りに、第二、第三、第四、及び第五の記憶部１２，１３，１４，１５へと割り当てられる。
【０４６６】
第三及び第五の記憶部１３，１５には、第三及び第五の記憶部１３，１５の記憶容量の合計が、半導体記憶装置の製品仕様としての記憶容量よりも大きくなるような記憶容量（例えば、半導体記憶装置の製品仕様としての記憶容量よりも１〜５％程度大きい容量）が割り当てられる。
【０４６７】
第三及び第五の記憶部１３，１５の間で容量の割合に制約はないが、例えば、第三の記憶部１３の記憶容量は半導体記憶装置の製品仕様としての記憶容量と同じとし、第五の記憶部１５の記憶容量は第三の記憶部１３の記憶容量の１〜５％程度となるように設定される。
【０４６８】
第二及び第四の記憶部１２，１４には、不揮発性半導体記憶素子２２の記憶容量から第三及び第五の記憶部１３，１５の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部１２，１４それぞれの記憶容量、及び、それらの割合に制限はない。
【０４６９】
第二、第三、第四、及び第五の記憶部１２，１３，１４，１５は、例えば、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体記憶素子２２の一以上のブロックから構成される。
【０４７０】
第二の実施形態では、第一の実施形態で述べた第一、第二、第三、及び第四の記憶部１１，１２，１３，１４に加え、更に、第五の記憶部１５として一以上のブロックが割り当てられた構成となっている。
【０４７１】
第一の実施形態と同様に、データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ（ＥＣＣ、内部制御用フラグ等）が含まれないものとする。
【０４７２】
コントローラ１０は、データ管理を行うためのプログラムを動作させる。コントローラ１０が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【０４７３】
コントローラ１０の主記憶メモリが、ＤＲＡＭ等の揮発性半導体記憶素子で構成される場合は、第一の記憶部１１を、コントローラ１０の主記憶メモリ内に配置しても良い。
【０４７４】
コントローラ１０は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、第四、及び第五の記憶部１１，１２，１３，１４，１５のどこに記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、トラック管理テーブル、ページＦＩＦＯ管理テーブル、トラックＦＩＦＯ管理テーブル、及び物理ブロック管理テーブルを備える。
【０４７５】
・  キャッシュ管理テーブル  
図３０のキャッシュ管理テーブルは、第一の記憶部１１に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。また、有効データの管理は、セクタ単位で実行される。
【０４７６】
キャッシュ管理テーブルの構成は、第一の実施形態と同様であり、図２１に示す通りである。キャッシュ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【０４７７】
・  ページ管理テーブル  
図３０のページ管理テーブルは、第二及び第四の記憶部１２，１４に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【０４７８】
ページ管理テーブルの構成は、第一の実施形態と同様であり、図２２に示す通りである。ページ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【０４７９】
・  トラック管理テーブル  
図３１は、トラック管理テーブルの構成例を示している。
【０４８０】
トラック管理テーブルは、図３０の第三及び第五の記憶部１３，１５に記憶されるデータを、トラック単位に等しい「大きな単位」で管理する。
【０４８１】
第三及び第五の記憶部１３，１５の１ブロックに対して１エントリとする。
【０４８２】
エントリ数は、第三及び第五の記憶部１３，１５に収まるブロック数に対して、更に処理の中間状態のブロックを登録できるだけのだけの余裕を持たせた数、即ち、［（第三及び第五の記憶部１３，１５の全容量）／（ブロック単位のサイズ）］に余裕を持たせた数とする。
【０４８３】
各エントリには、第三及び第五の記憶部１３，１５に割り当てられたブロックの物理アドレスが関連付けられている。また、各エントリには、ブロック内のトラック単位のデータの論理アドレスが記憶されている。
【０４８４】
また、トラック単位の領域内のページの空き状態として、各ページについて、「書き込み可能」（記憶領域が空いている）である状態と、「書き込み不可」（一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために、無効となっている）である状態とを、それぞれ区別できるようにしておく。
【０４８５】
この例では、ブロック単位でエントリが構成されているが、データの論理アドレスからブロックの物理アドレスの検索を高速に行うために、トラック管理テーブルのエントリは、論理アドレス順に配列されたトラック単位で構成されていても良い。
【０４８６】
・  ページＦＩＦＯ管理テーブル  
図３０のページＦＩＦＯ管理テーブルは、第四の記憶部１４に割り当てられたブロック内のデータを管理する。
【０４８７】
ページＦＩＦＯ管理テーブルの構成は、第一の実施形態と同様であり、図２４に示す通りである。ページＦＩＦＯ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【０４８８】
・  トラックＦＩＦＯ管理テーブル  
図３２は、トラックＦＩＦＯ管理テーブルの構成例を示している。
【０４８９】
トラックＦＩＦＯ管理テーブルは、第五の記憶部１５に割り当てられたブロック内のデータを管理する。
【０４９０】
第五の記憶部１５の１ブロックに対して１エントリとする。エントリ数は、第五の記憶部１５に収まるブロック数、即ち、（第五の記憶部の全容量）／（ブロック単位のサイズ）とする。
【０４９１】
第五の記憶部１５は、トラックＦＩＦＯ管理テーブルを使用することで、ブロック単位のＦＩＦＯ(First-In First-Out)構造を伴って管理される。
【０４９２】
新たに第五の記憶部１５に割り当てられた（入力された）ブロックに対応するエントリは、トラックＦＩＦＯ管理テーブルの先頭（入口側）に追加され、元々トラックＦＩＦＯ管理テーブルに登録されていたエントリは、一つずつ後方にシフトする。
【０４９３】
エントリ数が許容範囲を超えた場合、トラックＦＩＦＯ管理テーブルの末端（出口側）のエントリに関連付けられている最も古い割り当て順序を有するブロックは、第五の記憶部１５から出力される。
【０４９４】
・  物理ブロック管理テーブル  
図３３は、物理ブロック管理テーブルの構成例を示している。
【０４９５】
物理ブロック管理テーブルは、不揮発性半導体記憶素子２２のブロックの使用状況を管理する。
【０４９６】
１ブロック（物理ブロック）に対して１エントリとする。エントリ数は、データエリアとして使用可能なブロック数とする。各エントリは、ブロックの物理アドレスと関連付けられており、また、ブロックの使用状況（記憶領域（ブロック）が第二、第三、第四、及び第五の記憶部として使用されている（使用）か、または、使用されていない（未使用）か）を記憶する。
【０４９７】
図３０のコントローラ１０によって実行される処理フローについて説明する。
【０４９８】
第一の記憶部１１に記憶されているデータは「小さな単位」と「大きな単位」とに分類され、「小さな単位」のデータは第四の記憶部１４に出力される。第四の記憶部１４のＦＩＦＯ処理に関する動作は、第一の実施形態と同じである。
【０４９９】
即ち、第四の記憶部１４でのＦＩＦＯ処理に関しては、図２６のフローチャートと同じである。第四の記憶部１４から溢れたブロックに適用される処理に関しては、図２７のフローチャートと実質的に同じである（ただし、「大きな単位」のデータの行き先は第五の記憶部１５である）。
【０５００】
この構成により、図２８または図２９のフローチャートに示すように、第二の記憶部１２におけるコンパクションの対象は第四の記憶部１４から出力された更新頻度の低いデータのみとなり、消去回数が減少することでメモリセルの劣化が防止される。
【０５０１】
ただし、第二の実施形態では、第一の記憶部１１から「大きな単位」として出力されると決まったデータ、及び、第二及び第四の記憶部１２，１４から「大きな単位」として出力されると決まったデータについても、更新頻度の高いデータと更新頻度の低いデータとに分割される。原則として、更新頻度の低いデータのみをコンパクションの対象とする技術について、説明する。
【０５０２】
本実施形態では、「大きな単位」として、ブロック単位よりも小さいサイズのトラック単位が使用される。第三及び第五の記憶部１３，１５におけるデータ管理は、トラック単位で行われる。即ち、第三及び第五の記憶部１３，１５内のデータ管理単位はブロック単位（最小消去単位）よりも小さいサイズであるため、ブロック内に無効データが生成され、これによりコンパクション処理を行う必要が生じる。
【０５０３】
ここで、更新頻度の高いデータと更新頻度の低いデータとは互いに区別され、コンパクションの効率を向上させるために、第三の記憶部１３の前段に、ブロック単位のＦＩＦＯ構造を有する第五の記憶部１５が配置される。
【０５０４】
第一の記憶部１１から「大きな単位」として出力されると決まったデータ、及び、第二及び第四の記憶部１２，１４から「大きな単位」として出力されると決まったデータが、第五の記憶部１５におけるＦＩＦＯ処理の対象とされる場合の動作について説明する。
【０５０５】
Ａ．  第五の記憶部１５のＦＩＦＯ処理  
図３４は、第五の記憶部１５でのＦＩＦＯ処理を示している。説明を簡略化するため、第一の記憶部１１から「大きな単位」として出力されると決まったデータについて、詳細に検討する。
【０５０６】
１．  コントローラ１０は、追記的にデータを書き込むために準備されたブロック（以下、トラック追記用物理ブロックと称する）に対応するトラック管理テーブルのエントリを参照する。コントローラ１０は、第一の記憶部１１から出力されたデータを、トラック単位に等しい「大きな単位」のデータとして、トラック追記用物理ブロック内の書き込み可能なトラック単位の領域に記憶する（ステップＳＴ１）。
【０５０７】
コントローラ１０は、キャッシュ管理テーブルを検索し、出力対象に決まったトラック単位のデータを構成するセクタ単位のデータが、第一の記憶部１１内に全て存在するか否かを判断する。
【０５０８】
第一の記憶部１１内に全てのセクタ単位のデータが存在しない場合、コントローラ１０は、第二、第三、第四、及び第五の記憶部１２，１３，１４，１５から、不足データを集める。
【０５０９】
トラック単位のデータを構成する全てのセクタ単位のデータが揃った後、コントローラ１０は、そのトラック単位のデータをトラック追記用物理ブロックに書き込む指示を、不揮発性半導体記憶素子２２に与える。
【０５１０】
２．  コントローラ１０は、トラック管理テーブルにおいて、内部にトラック単位のデータが書き込まれたトラック単位の領域（複数のページ）に対応するエントリに記録された論理アドレスを更新する（ステップＳＴ２）。第二、第三、第四、及び第五の記憶部１２，１３，１４，１５内に既に書き込まれていた、同一論理アドレス範囲内に含まれる旧データは無効データとなる。
【０５１１】
３．  コントローラ１０は、トラック追記用物理ブロック内にトラック単位の空き領域（複数の空きページ）が存在するか否かを判断する（ステップＳＴ３）。複数の空きページが検出されなかった場合、処理はステップＳＴ４に進む。複数の空きページが検出された場合、処理はステップＳＴ１に戻る。
【０５１２】
４．  コントローラ１０は、トラックＦＩＦＯ管理テーブルのエントリを一つずつ後方にシフトし、トラック追記用物理ブロックの物理アドレスを、トラックＦＩＦＯ管理テーブルの先頭のエントリに加える（ステップＳＴ４）。結果として、トラック追記用物理ブロックは、第四の記憶部１４に割り当てられる。
【０５１３】
５．コントローラ１０は、物理ブロック管理テーブルにおいて、ブロックに対応するエントリを「第三の記憶部１３（使用）」に更新する。（ステップＳＴ５）。
【０５１４】
第五の記憶部１５から第三の記憶部１３へのデータ転送に際して、コントローラ１０は、トラックＦＩＦＯ管理テーブル及び物理ブロック管理テーブルを更新するのみであり、不揮発性半導体素子２２に対するデータの読み出し／書き込み指示を要しない（移動処理）。
【０５１５】
Ｂ．  処理例１  
図３５は、処理例１のフローチャートを示している。
【０５１６】
１．  コントローラ１０は、物理ブロック管理テーブルを検索することによって、未使用のブロックを取得する。未使用のブロック内のデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ１０は、トラック管理テーブルから未使用のエントリを検索する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる（ステップＳＴ１）。
【０５１７】
２．  コントローラ１０は、トラック管理テーブルを走査することで、有効データ数が小さいブロックから順番に、トラック単位の有効データを選択する。選択された有効データはコンパクションブロックにコピーされ、トラック管理テーブルのコンパクションブロックに関連付けられたエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される（ステップＳＴ２）。
【０５１８】
トラック管理テーブルの走査に際して、トラックＦＩＦＯ管理テーブルに物理アドレスが含まれるエントリと、トラック追記用物理ブロックに対応するエントリに関しては走査の対象とされない。即ち、第三の記憶部１３は走査の対象とされ、第五の記憶部１５については走査の対象とされない。
【０５１９】
ステップＳＴ２（コンパクション）に際して、コピーされるデータの論理アドレス範囲内に含まれる有効データが、第一、第二、及び第四の記憶部１１，１２，１４から読み出され、コピーされるデータが有効データで上書きされても良い。コンパクションに巻き込まれた第一、第二、及び第四の記憶部１１，１２，１４内の有効データは、無効化される。
【０５２０】
３．  ブロック内の全てのデータが無効になった場合、コントローラ１０は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する（ステップＳＴ３）。
【０５２１】
４．  コントローラ１０は、第三の記憶部１３内のブロック数が、第三の記憶部１３の記憶容量として定められた所定のブロック数以下であるか否かを判断する（ステップＳＴ４）。
【０５２２】
第三の記憶部１３内のブロックの数が第三の記憶部１３の記憶容量として定められた所定のブロック数以下である場合には、処理を終了する。第三の記憶部１３内のブロックの数が第三の記憶部１３の記憶容量として定められた所定のブロック数よりも大きい場合には、処理はステップＳＴ１に戻る。
【０５２３】
Ｃ．  処理例２  
第三の記憶部１３内のブロックを単純に使用するだけでは、コンパクションが行えない場合がある。具体的には、半導体記憶装置の製品仕様としての記憶容量が、第三の記憶部１３の記憶容量よりも大きく、第三及び第五の記憶部１３，１５の合計の記憶容量よりも小さい場合に、コンパクションが行えない場合がある。
【０５２４】
このような状況は、製品仕様としての記憶容量を、半導体記憶装置内部のＮＡＮＤ型フラッシュメモリの全容量にできるだけ近付けたいという要求から生じることがある。
【０５２５】
この場合に、第三の記憶部１３内に存在する無効データの合計サイズ（記憶容量）がブロック単位のサイズに達しない時は、第三の記憶部１３内で何度コンパクションを行っても、新たに空きブロックを生成することはできない。
【０５２６】
従って、このような状態になった時は例外的に、第三の記憶部１３と第五の記憶部１５との双方を対象としてコンパクションを行う（第五の条件）。
【０５２７】
図３６は、処理例２のフローチャートを示している。
【０５２８】
１．  コントローラ１０は、物理ブロック管理テーブルを検索することによって、未使用のブロックを取得する。未使用のブロック内のデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ１０は、トラック管理テーブルから未使用のエントリを検索する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる（ステップＳＴ１）。
【０５２９】
２．  コントローラ１０は、トラック管理テーブルを走査することで、有効データ数が小さいブロックから順番に、トラック単位の有効データを選択する。選択された有効データはコンパクションブロックにコピーされ、トラック管理テーブルのコンパクションブロックに関連付けられたエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される（ステップＳＴ２）。
【０５３０】
トラック管理テーブルの走査に際して、トラックＦＩＦＯ管理テーブルに物理アドレスが含まれるエントリに関しても走査の対象とされる。即ち、第三及び第五の記憶部１３，１５が走査の対象とされる。
【０５３１】
ステップＳＴ２（コンパクション）に際しては、コピーされるデータの論理アドレス範囲内に含まれる有効データが、第一、第二及び第四の記憶部１１，１２，１４から読み出され、コピーされるデータが有効データで上書きされても良い。コンパクションに巻き込まれた第一、第二、及び第四の記憶部１１，１２，１４内のデータは、無効化される。
【０５３２】
３．  ブロック内の全てのデータが無効になった場合、コントローラ１０は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する（ステップＳＴ３）。
【０５３３】
４．  コントローラ１０は、コンパクションブロックをトラックＦＩＦＯ管理テーブルの先頭に追加する（ステップＳＴ４）。これは、第五の記憶部１５内の無効データを減らすことが必要なためである。
【０５３４】
第五の記憶部１５内の無効データが減れば、第三の記憶部１３内の無効データが増加する。従って、上述の処理例１に示した通り、第三の記憶部１３のみを対象としたコンパクションが適用され、これにより第三の記憶部１３内の有効データが集められ、第三の記憶部１３内に空きのブロックを生成することができる。
【０５３５】
５．  コントローラ１０は、第三及び第五の記憶部１３，１５内のブロック数が、第三及び第五の記憶部１３，１５の容量として定められた所定のブロック数以下であるか否かを判断する（ステップＳＴ５）。
【０５３６】
第三及び第五の記憶部１３，１５内のブロック数が第三及び第五の記憶部１３，１５の容量として定められた所定のブロック数以下である場合には、処理を終了する。第三及び第五の記憶部１３，１５内のブロック数が第三及び第五の記憶部１３，１５の容量として定められた所定のブロック数よりも大きい場合には、処理はステップＳＴ１に戻る。
【０５３７】
処理例１及び２の各ステップＳＴ１において、第一の実施形態の処理例２（図２９）と同様に、トラック単位の有効データ数が最も少ない二つ以上のブロックが選択され、この有効データがコンパクションブロックにコピーされても良い。
【０５３８】
第二の実施形態では、コントローラ１０が、第二の記憶部１２、第三の記憶部１３、第四の記憶部１４、及び第五の記憶部１５に記憶領域（複数のブロック）を割り当てることにより、不揮発性半導体記憶素子内部のデータ管理が行われるが、これに限定されるものではない。
【０５３９】
例えば、第四の記憶部１４を設定することなく、第二の記憶部１２、第三の記憶部１３、及び第五の記憶部１５によるデータ管理を行うこととしても良い。別の方法では、第二の記憶部１２、第四の記憶部１４を設定することなく、第三の記憶部１３、及び第五の記憶部１５によるデータ管理を行うこととしても良い。
【０５４０】
（３）  第三の実施形態  
第三の実施形態は、実装コスト及び検証コストを下げることを目的とした、第二及び第四の記憶部１２，１４におけるデータ管理設定に関連する。
【０５４１】
図３７は、第三の実施形態に係る半導体記憶装置を示している。
【０５４２】
第一の記憶部１１は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部１１内部において、セクタ単位（第一の単位）以下で書き込みがされる。第一の記憶部１１は、ＤＲＡＭ等の揮発性半導体記憶素子に含まれる。
【０５４３】
第二の記憶部１２は、不揮発性半導体記憶素子２２の複数のブロックから構成される。不揮発性半導体記憶素子２２内部において、一括して読み出し／書き込みの行われる単位がページ（第二の単位）であり、一括して消去の行われる単位がブロック（第三の単位）である。ブロック単位は、ページ単位の自然数倍のサイズである。第二の記憶部１２は、ページ単位に等しい「小さな単位」でデータを記憶する。
【０５４４】
第三の記憶部１３は、不揮発性半導体記憶素子２２の複数のブロックから構成され、ブロック単位に等しい「大きな単位」でデータを記憶する。
【０５４５】
第四の記憶部１４は、不揮発性半導体記憶素子２２の複数のブロックから構成され、ページ単位に等しい「小さな単位」でデータを記憶する。
【０５４６】
第一の記憶部１１の記憶容量は、不揮発性半導体記憶素子２２の１ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子２２の記憶容量は、半導体記憶装置（例えば、ＳＳＤ）の製品仕様としての記憶容量よりも大きいと想定する。
【０５４７】
不揮発性半導体記憶素子２２の記憶容量は、以下の通りに、第二、第三、及び第四の記憶部１２，１３，１４へと割り当てられる。
【０５４８】
第三の記憶部１３には、半導体記憶装置の製品仕様としての記憶容量と同じ、または、それを超える記憶容量が割り当てられる。
【０５４９】
第二及び第四の記憶部１２，１４には、不揮発性半導体記憶素子２２の記憶容量から第三の記憶部１３の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部１２，１４それぞれの記憶容量、及び、それらの割合に制限はない。
【０５５０】
第二、第三、及び第四の記憶部１２，１３，１４は、例えば、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体記憶素子２２の一以上のブロックから構成される。
【０５５１】
データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ（ＥＣＣ、内部制御用フラグ等）が含まれないものとする。
【０５５２】
コントローラ１０は、ＣＰＵと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。尚、本実施形態において、コントローラ１０が実現する各機能は、ハードウェア、及びソフトウェア、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【０５５３】
コントローラ１０の主記憶メモリが、ＤＲＡＭ等の揮発性半導体記憶素子で構成される場合は、第一の記憶部１１を、コントローラ１０の主記憶メモリ内に配置しても良い。
【０５５４】
コントローラ１０は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、及び第四の記憶部１１，１２，１３，１４のどこに記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、ページＦＩＦＯ管理テーブル、及び物理ブロック管理テーブルを備える。これらの管理テーブルは、半導体記憶装置の動作中にコントローラ１０の主記憶メモリ内に展開される。
【０５５５】
・  キャッシュ管理テーブル  
図３７のキャッシュ管理テーブルは、第一の記憶部１１に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。有効データの管理は、セクタ単位で実行される。
【０５５６】
キャッシュ管理テーブルの構成は、第一の実施形態と同様であり、図２１に示す通りである。キャッシュ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【０５５７】
・  ページ管理テーブル  
図３７のページ管理テーブルは、第二及び第四の記憶部１２，１４に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【０５５８】
ページ管理テーブルの構成は、第一の実施形態と同様であり、図２２に示す通りである。ページ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【０５５９】
・  ブロック管理テーブル  
図３７のブロック管理テーブルは、第三の記憶部１３に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。
【０５６０】
ブロック管理テーブルの構成は、第一の実施形態と同様であり、図２３に示す通りである。ブロック管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【０５６１】
・  ページＦＩＦＯ管理テーブル  
図３７のページＦＩＦＯ管理テーブルは、第四の記憶部１４に割り当てられたブロック内のデータを管理する。
【０５６２】
ページＦＩＦＯ管理テーブルの構成は、第一の実施形態と同様であり、図２４に示す通りである。ページＦＩＦＯ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【０５６３】
・  物理ブロック管理テーブル  
図３７の物理ブロック管理テーブルは、不揮発性半導体記憶素子２２のブロックの使用状況を管理する。
【０５６４】
物理ブロック管理テーブルの構成は、第一の実施形態と同様であり、図２５に示す通りである。物理ブロック管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【０５６５】
図３７のコントローラ１０によって実行される処理フローについて説明する。
【０５６６】
コントローラ１０は、ホスト機器からのセクタ単位（第一の単位）のデータを、最初に第一の記憶部１１に書き込み、そのデータを一定期間蓄積する。このデータ蓄積処理については、例えば、第Ｉ節で述べた「Ａ．第一の記憶部へのデータ蓄積処理」を適用することができる。
【０５６７】
コントローラ１０は、第一の記憶部１１に蓄積されたデータを、所定の条件に従い、「小さな単位（第一の管理単位）」で管理すべきか、または、「大きな単位（第二の管理単位）」で管理すべきか、を判断する。所定の条件は、第Ｉ節で述べた「Ｂ．第一の記憶部からのデータ出力処理」における第一の条件と実質的に同じであっても良い。
【０５６８】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【０５６９】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、同時に、ブロック単位の自然数倍のサイズである。
【０５７０】
本実施形態では、説明の簡略化のため、管理テーブルで使用される各単位を、下記の通りであると想定する。
【０５７１】
即ち、第二及び第四の記憶部１２，１４のデータ管理単位である「小さな単位」のサイズは、ページ単位（第二の単位）のサイズと等しく、第三の記憶部１３のデータ管理単位である「大きな単位」のサイズは、をブロック単位（第三の単位）のサイズと等しい。
【０５７２】
しかしながら、ページを分割して管理して、「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【０５７３】
或いは、複数のページを合わせて管理して、「小さな単位」がページ単位の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【０５７４】
同様に、ブロックを分割して管理して、「大きな単位」が「小さな単位」の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「大きな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【０５７５】
或いは、複数のブロックを合わせて管理して、「大きな単位」がブロック単位の二以上の自然数倍のサイズとなるようにしても良い。
【０５７６】
上記単位間の関係は、例えば、セクタ単位（第一の単位）＜「小さな単位」＜ページ単位（第二の単位）＜ブロック単位（第三の単位）≦「大きな単位」と設定することが可能である。
【０５７７】
第一の記憶部１１に蓄積されたデータを「小さな単位」で管理する場合には、ページ単位のデータを第四の記憶部１４に転送する。第一の記憶部１１に蓄積されたデータを「大きな単位」で管理する場合には、ブロック単位のデータを第三の記憶部１３に転送する。
【０５７８】
このデータ出力処理については、例えば、第Ｉ節で述べた「Ｂ．第一の記憶部からのデータ出力処理」と実質的に同様である。ただし、第Ｉ節とは異なり、「小さな単位」のデータの行き先は、第四の記憶部１４となる。
【０５７９】
Ａ．  第四の記憶部のＦＩＦＯ処理  
第四の記憶部１４は、既に述べたように、ブロック単位のＦＩＦＯ構造を有する。図３８は、第四の記憶部１４でのＦＩＦＯ処理を示している。
【０５８０】
１．  コントローラ１０は、追記的にデータを書き込むために準備されたブロック（以下、ページ追記用物理ブロックと称する）に対応するページ管理テーブルのエントリを参照する。コントローラ１０は、第一の記憶部１１から出力されたデータを、ページ単位に等しい「小さな単位」のデータとして、ページ追記用物理ブロック内の書き込み可能なページに記憶する（ステップＳＴ１）。
【０５８１】
２．  コントローラ１０は、ページ管理テーブルにおいて、内部にページ単位のデータが書き込まれたページに対応するエントリに記録された論理アドレスを更新する（ステップＳＴ２）。第二及び第四の記憶部１２，１４内に既に書き込まれていた、同一論理アドレス範囲に含まれる旧データは、無効データとなる。
【０５８２】
３．  コントローラ１０は、ページ追記用物理ブロック内に空きページが存在するか否かを判断する（ステップＳＴ３）。空きページが検出されなかった場合、処理はステップＳＴ４に進む。空きページが検出された場合、処理はステップＳＴ１に戻る。
【０５８３】
４．  コントローラ１０は、ページＦＩＦＯ管理テーブルのエントリを一つずつ後方にシフトし、ページ追記用物理ブロックの物理アドレスを、ページＦＩＦＯ管理テーブルの先頭のエントリに加える（ステップＳＴ４）。結果として、ページ追記用物理ブロックは、第四の記憶部１４に割り当てられる。
【０５８４】
５．  コントローラ１０は、物理アドレスがページＦＩＦＯ管理テーブルに記録されている、第四の記憶部１４の全てのブロックに対して、以下の処理Ｐ１を行う（ステップＳＴ５）。
【０５８５】
処理Ｐ１は、コンパクションを採用している点で第一及び第二の実施形態と異なる。これは、第四の記憶部１４においてブロックの使用効率が悪い場合について有効である。書き込み動作の増加を抑制するため、有効データの多いブロックについてはコンパクションの対象から除外される。
【０５８６】
Ｂ．  処理Ｐ１  
図３９は、処理Ｐ１のフローチャートを示している。図４０は、処理Ｐ１を実行中の第四の記憶部１４内のブロックの状態を示している。各ブロックは、複数のページから構成されている。各ページは、ページ管理テーブル中のページ利用状況を参照することにより、「有効」、「無効」、「空き」を含む三つの状態のいずれか一つに設定されている。
【０５８７】
１．  コントローラ１０は、ページＦＩＦＯ管理テーブルに記録されている物理アドレスをもってページ管理テーブルを検索することで、第四の記憶部１４内の全てのブロックについて、各ブロックに記憶されている有効データを数える（ステップＳＴ１）。
【０５８８】
２．  コントローラ１０は、ステップＳＴ１で数えた有効データ数が、所定の閾値以上であるブロックが存在するか否かを判断する。所定の閾値は、例えば、一つのブロック単位（「大きな単位」）の領域に記憶可能なページ単位（「小さな単位」）のデータ総数の５０％に設定しても良い（ステップＳＴ２）。
【０５８９】
有効データ数が、所定の閾値以上のブロックが検出された場合、処理はステップＳＴ３に進む。そのようなブロックが検出されなかった場合、処理はステップＳＴ４に進む。
【０５９０】
３．  コントローラ１０は、有効データ数が所定の閾値以上のブロックを、第二の記憶部１２へ移動する（ステップＳＴ３）。即ち、そのブロックの物理アドレスに関して、コントローラ１０は、ページＦＩＦＯ管理テーブルのエントリを無効化し、物理ブロック管理テーブルのエントリを「第二の記憶部１２（使用）」に更新する。
【０５９１】
第四の記憶部１４から第二の記憶部１２へのデータ転送に際して、コントローラ１０は、ページＦＩＦＯ管理テーブル及び物理ブロック管理テーブルを更新するのみであり、不揮発性半導体記憶素子２２に対するデータの読み出し／書き込み指示を要しない（移動処理）。
【０５９２】
４．  コントローラ１０は、第四の記憶部１４において、古い割り当て順序を持つブロックから順番に有効データを選択する。選択された有効データは、消去された未使用ブロック（コンパクションブロック）にコピーされる。コントローラ１０は、有効データで満たされたコンパクションブロックを、第二の記憶部１２に割り当てる。（ステップＳＴ４）。
【０５９３】
５．  コントローラ１０は、第四の記憶部１４において、コピーされたデータと同じ論理アドレス範囲を持つデータを無効化する。ブロック内の全てのデータが無効になった場合、コントローラ１０はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する（ステップＳＴ５）。
【０５９４】
ページ追記用物理ブロック内に空きページがなくなると、コントローラ１０は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、そのブロックが新たにページ追記用物理ブロックとして割り当てられる。コントローラ１０は、ページ管理テーブルの未使用のエントリを検索する。ページ追記用物理ブロックに対応する物理アドレスは、その未使用のエントリに記録される。
【０５９５】
第四の記憶部１４からのブロックの移動に伴って、第二の記憶部１２内のページ単位で管理されるブロックの数が増加する。第二の記憶部１２のブロック数が許容範囲、即ち、第二の記憶部１２の容量として定められた所定のブロック数を超える場合、コントローラ１０は、以下の手順で、コンパクション、または、第二の記憶部１２から第三の記憶部１３へのデータ転送処理を実行する。
【０５９６】
尚、第一の実施形態と異なり、処理Ｐ１は第三の記憶部１３へのデータ転送処理（デフラグメンテーション）を含まない。これは、第四の記憶部１４から第二の記憶部１２へのデータ転送処理を簡略化する。
【０５９７】
Ｃ．処理例  
図４１は、処理例のフローチャートを示している。図４２乃至図４６は、図４１の処理を実行中の第二の記憶部１２内のブロックの状態を示している。図４２乃至図４６に示されている通り、第二の記憶部１２におけるブロックの割り当て順序が、コントローラ１０によって管理されている。
【０５９８】
各ブロックは、複数のページから構成されている。各ページは、ページ管理テーブル中のページ利用状況を参照することにより、「有効」、「無効」、「空き」を含む三つの状態のいずれか一つに設定されている。
【０５９９】
１．  上記処理Ｐ１に従い、コントローラ１０は、第四の記憶部１４から第二の記憶部１２へデータを転送する（ステップＳＴ１）。
【０６００】
２．  コントローラ１０は、第二の記憶部内１２のブロック数が、許容範囲を超えているか否かを判断する。許容範囲は、第二の記憶部１２の容量として定められた所定のブロック数としても良い（ステップＳＴ２）。
【０６０１】
ブロック数が許容範囲を超えていない場合には、処理を終了する。ブロック数が許容範囲を超えている場合には、処理はステップＳＴ３に進む。
【０６０２】
３．  コントローラ１０は、特定範囲内の複数のブロックに記憶されている有効データ数（論理アドレス数）を、ページ管理テーブルを参照することにより数え、その特定範囲内に記憶されている有効データの総数が所定の閾値よりも大きいか否かを判断する（ステップＳＴ３）。
【０６０３】
特定範囲は、例えば、第二の記憶部１２において隣接する２つのブロックを含んでいる。「隣接するブロック」とは、割り当て順序が連続する複数のブロックを意味する。図４２の「窓」は、この特定範囲内のブロックを示している。「窓」の開始位置は、割り当て順序が最も古いブロックを含むように設定される。
【０６０４】
ステップＳＴ３における所定の閾値は、特定範囲内に含まれる複数のブロックの半数のブロックに記憶可能なページ単位のデータ総数としても良い。図４２は、特定範囲内に含まれる二つのブロックを示しており、所定の閾値は、二つのブロックの半分である一つのブロックに記憶可能なページ単位のデータ総数に設定されている。
【０６０５】
有効データ数が所定の閾値よりも大きい場合には、処理はステップＳＴ４に進む。有効データ数が所定の閾値以下である場合には、処理はステップＳＴ７に進み、コントローラ１０は、現在の「窓」に対してデフラグメンテーション及びコンパクションを実行する（図４３及び図４４）。
【０６０６】
４．  コントローラ１０は、より古い側からより新しい側へ、「窓」をシフトさせる（ステップＳＴ４）。具体的には、コントローラ１０は、第二の記憶部１２において、最も古い割り当て順序を持つブロック側から、最も新しい割り当て順序を持つブロック側へ、「窓」を一つずつシフトさせる。
【０６０７】
５．  コントローラ１０は、「窓」が第二の記憶部１２において最も新しい割り当て順序を持つブロックを越えたか否かを判断する（ステップＳＴ５）。「窓」が最も新しい割り当て順序を持つブロックを越えた場合には、処理はステップＳＴ６に進む。「窓」が最も新しい割り当て順序を持つブロックを越えていない場合には、処理はステップＳＴ３に戻る。
【０６０８】
６．  コントローラ１０は、最も古い割り当て順序を持つブロック内の全ての有効データを選択し、選択された有効データをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部１３に転送する（デフラグメンテーション）（ステップＳＴ６）。ステップＳＴ６は、コントローラ１０が第二の記憶部１２内部でコンパクション対象を検出できなかった場合に実行される。
【０６０９】
図４５に示される通り、最も古い割り当て順序を持つブロックに記憶されている有効データの論理アドレスをブロック単位（「大きな単位」）のサイズでアラインすることによって得られた論理アドレス範囲内に含まれる有効データが、第一、第二、第三、及び第四の記憶部１１，１２，１３，１４から集められる。
【０６１０】
コントローラ１０は、ブロック単位のデータを第三の記憶部１３に書き込む指示を、不揮発性半導体記憶素子２２に与える。ブロック単位のデータを書き込んだ後、コントローラ１０は最も古い割り当て順序を持つブロックを解放し、処理はステップＳＴ２に戻る。「窓」の位置は開始位置に初期化される。
【０６１１】
７．  コントローラ１０は、物理ブロック管理テーブルを検索し、未使用のブロック（コンパクションブロック）を取得する（ステップＳＴ７）。この未使用のブロックはコンパクション用に供される。ステップＳＴ７で要求される未使用のブロック数は、特定範囲に含まれるブロックの半数である。図４４では、一つの未使用のブロックがコンパクション用に供される。コントローラ１０は、未使用のブロック内のデータを消去する指示を、不揮発性半導体記憶素子２２に与える。
【０６１２】
８．  コントローラ１０は、「窓」内に記憶されている有効データを順次選択する。「窓」内に記憶されている全ての有効データが処理されてしまった場合、「窓」よりも新しい側に位置するブロックに記憶されている有効データが、割り当て順序の順番で更に選択される（ステップＳＴ８)。
【０６１３】
９．  コントローラ１０は、選択された有効データの論理アドレスをブロック単位（「大きな単位」）のサイズでアラインすることによって得られた論理アドレス範囲内に含まれる有効データ数が、第二及び第四の記憶部１２，１４において所定の閾値以上である否かを判断する（ステップＳＴ９）。ステップＳＴ９における所定の閾値は、一つのブロック単位（「大きな単位」）の領域内に記憶可能なページ単位（「小さな単位」）のデータ総数の５０％に設定されていても良い。
【０６１４】
有効データの総数が所定の閾値未満の場合には、処理はステップＳＴ１０に進む。有効データの総数が所定の閾値以上の場合には、処理はステップ１１に進む。
【０６１５】
１０．  コントローラ１０は、図４４に示される通り、選択された有効データを、コンパクションブロックにコピーする（書き直す）（ステップＳＴ１０）。コピーされた有効データの論理アドレスは、ページ管理テーブルにおいてコンパクションブロックに関連付けられたエントリに新たに登録される。第二の記憶部１２に割り当てられたブロックに関連付けられたエントリに元々登録されていた、コピーされた有効データの論理アドレスは、ページ管理テーブルにおいて無効化される。
【０６１６】
１１．  コントローラ１０は、図４３に示す通り、ブロック単位（「大きな単位」）のサイズでアラインされた論理アドレス範囲に含まれる有効データを、第一、第二、第三、及び第四の記憶部１１，１２，１３，１４から集め、選択された有効データをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部１３に転送する（デフラグメンテーション）（ステップＳＴ１１）。
【０６１７】
１２．  コントローラ１０は、ステップＳＴ１０でのコンパクション、または、ステップＳＴ１１でのデフラグメンテーションによって、内部の全てのデータが無効になったブロックを解放する（ステップＳＴ１２）。コントローラ１０は、図４６に示される通り、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する。
【０６１８】
１３．  コントローラ１０は、コンパクションブロックがページ単位の有効データで満たされたか否かを判断する（ステップＳＴ１３）。コンパクションブロックが有効データで満たされていない場合には、処理はステップＳＴ８に戻る。コンパクションブロックが有効データで満たされている場合には、処理はステップＳＴ１４に進む。
【０６１９】
ただし、ステップＳＴ８で全ての有効データが選択されてもコンパクションブロックを有効データで満たすことができない場合には、処理はステップＳＴ１４に進む。この場合、空きページを持つコンパクションブロックが第二の記憶部１２に割り当てられることがある。
【０６２０】
１４．  コントローラ１０は、図４４に示される通り、第二の記憶部１２内の「窓」の直前にコンパクションブロックを挿入する（ステップＳＴ１４）。即ち、コンパクションブロックは「窓」よりも古い側に挿入され、これにより、第二の記憶部１２に新たに割り当てられたブロックが再びコンパクションの対象とされることを防ぐことができる。
【０６２１】
ページ管理テーブル及び物理ブロック管理テーブルを更新した後、処理はステップＳＴ２に戻る。処理がステップＳＴ２に戻り、新たなコンパクション処理が発動する時、図４６に示される通り、「窓」の位置は現在の位置に保持される。
【０６２２】
本処理例では、コントローラ１０は、特定範囲（「窓」）に対してのみ、コンパクションが適用可能であるか否かを判断することによって、コンパクション対象を検出するための検索処理が簡略化され、かつ、実装コスト及び検証コストの低減が可能となる。
【０６２３】
特定範囲に含まれるブロックの数は２つに限定されない。コントローラ１０は、３つ以上のブロックを特定範囲として定義しても良い。コントローラ１０は、特定範囲の有効データ数が、特定範囲に含まれるブロックの数から１を減じたブロックに記憶可能なページ単位のデータ数よりも多いか否かを判断しても良い。
【０６２４】
３．  適用例  
上記実施形態に係る半導体記憶装置は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータの二次記憶装置として使用されるＳＳＤ（Solid State Drive）に適用可能である。その場合の具体例については、後述する。
【０６２５】
４．  むすび  
第一、第二、及び第三の実施形態に係る半導体記憶装置は、更新頻度の低いデータをコンパクション処理の対象とし、これにより不揮発性半導体記憶素子内のブロックの消去回数を減少させる。更に第Ｉ節で述べたように、半導体記憶装置は、「大きな単位」と「小さな単位」という二つの管理単位を併用することにより、書き込み効率の向上を実現する。
【０６２６】
本発明は、上述の実施形態に限定されるものではなく、その要旨を逸脱しない範囲で、各構成要素を変形して具体化できる。また、上述の実施の形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成できる。例えば、上述の実施の形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施の形態の構成要素を適宜組み合わせてもよい。
【０６２７】
［ＩＩＩ．データ管理単位と読み出し／書き込み／消去単位との関係］
１．  概要  
以上、第Ｉ節及び第ＩＩ節に係る半導体記憶装置についてそれぞれ説明がなされた。本節では、上述の説明で使用された第一、第二、及び第三の単位、並びに、「小さな単位」及び「大きな単位」について、具体的に説明する。
【０６２８】
第一の単位は、第一の記憶部１１を含む揮発性または不揮発性半導体記憶素子に関してのデータ入力及び出力単位の少なくとも一方として規定される。第一の記憶部１１は、第一の単位以下でデータの読み出し／書き込みを行う。第一の単位は、例えば、セクタ単位であって良い。パーソナルコンピュータ等のホスト機器は、セクタ単位で半導体記憶装置へのアクセスを実行する。
【０６２９】
第二の単位は、第二、第三、第四、及び第五の記憶部１２，１３，１４，１５を含む不揮発性半導体記憶素子内における、最小のデータ読み出し及び書き込み単位の少なくとも一方として規定される。
【０６３０】
第三の単位は、第二、第三、第四または第五の記憶部１２，１３，１４，１５を含む不揮発性半導体記憶素子内における、最小のデータ消去単位として規定される。
【０６３１】
第二、第三、第四及び第五の記憶部１２，１３，１４，１５がＮＡＮＤ型フラッシュメモリ内に設定される場合、第二の単位はページ単位であり、第三の単位はブロック単位である。
【０６３２】
第二及び第三の単位は、不揮発性半導体記憶素子内に設定される第二、第三、第四、及び第五の記憶部１２，１３，１４，１５に対する読み出し／書き込み／消去単位として物理的に規定される。
【０６３３】
一方、半導体記憶装置におけるデータ管理単位（「小さな単位」及び「大きな単位」）は、不揮発性半導体記憶素子における物理的な読み出し／書き込み／消去単位に一致していても良いし、異なっていても良い。
【０６３４】
以下の実施形態では、第二及び第四の記憶部１２，１４に対するデータ管理単位である「小さな単位」は、クラスタ単位である。クラスタ単位はセクタサイズの自然数倍のサイズであり、かつ、ページ単位はクラスタ単位の二以上の自然数倍のサイズである。クラスタ単位は、ホスト機器のフィルシステムで使用されるファイル管理単位と等しいサイズであっても良い。
【０６３５】
２．  実施形態  
本発明の実施形態について説明する。
【０６３６】
図４７は、本実施形態に係る半導体記憶装置を示している。
【０６３７】
第一の記憶部１１は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部１１内部において、セクタ単位（第一の単位）以下で書き込みがされる。第一の記憶部１１は、例えば、ＤＲＡＭ等の揮発性半導体記憶素子内部に設定される。
【０６３８】
第二の記憶部１２は、不揮発性半導体記憶素子２２の複数のブロックから構成される。不揮発性半導体記憶素子２２内部において、一括して読み出し／書き込みの行われる単位がページ（第二の単位）であり、一括して消去の行われる単位がブロック（第三の単位）である。ブロック単位は、ページ単位の自然数倍のサイズである。第二の記憶部１２は、クラスタ単位に等しい「小さな単位」でデータを記憶する。
【０６３９】
第三の記憶部１３は、不揮発性半導体記憶素子２２の複数のブロックから構成され、ブロック単位に等しい「大きな単位」でデータを記憶する。
【０６４０】
第四の記憶部１４は、不揮発性半導体記憶素子２２の複数のブロックから構成され、クラスタ単位に等しい「小さな単位」でデータを記憶する。
【０６４１】
第一の記憶部１１の記憶容量は、不揮発性半導体記憶素子２２の１ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子２２の記憶容量は、半導体記憶装置（例えば、ＳＳＤ）の製品仕様としての記憶容量よりも大きいと想定する。
【０６４２】
不揮発性半導体記憶素子２２の記憶容量は、以下の通りに、第二、第三、及び第四の記憶部１２，１３，１４へと割り当てられる。
【０６４３】
第三の記憶部１３には、半導体記憶装置の製品仕様としての記憶容量と同じ、または、それを超える記憶容量が割り当てられる。
【０６４４】
第二及び第四の記憶部１２，１４には、不揮発性半導体記憶素子２２の記憶容量から第三の記憶部１３の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部１２，１４それぞれの記憶容量、及び、それらの割合に制限はない。
【０６４５】
コントローラ１０は、ＣＰＵと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。本実施形態において、コントローラ１０が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、または、ソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【０６４６】
コントローラ１０の主記憶メモリが、ＤＲＡＭ等の揮発性半導体記憶素子で構成される場合は、第一の記憶部１１を、コントローラ１０の主記憶メモリ内に配置しても良い。
【０６４７】
コントローラ１０は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、及び第四の記憶部１１，１２，１３，１４のどこに記憶されているかを管理するために、キャッシュ管理テーブル、クラスタ管理テーブル、ブロック管理テーブル、クラスタＦＩＦＯ管理テーブル、及び物理ブロック管理テーブルを備える。これらの管理テーブルは、半導体記憶装置の動作中にコントローラ１０の主記憶メモリ内に展開される。
【０６４８】
・  キャッシュ管理テーブル  
図４７のキャッシュ管理テーブルは、第一の記憶部１１に記憶されるデータを、クラスタ単位に等しい「小さな単位」で管理する。有効データの管理は、セクタ単位で実行される。
【０６４９】
キャッシュ管理テーブルの構成は、第ＩＩ節の第一の実施形態で図２１として示される通りである。ただし、本実施形態では、第一の記憶部１１の１クラスタ単位の領域一つに対して１エントリとする。
【０６５０】
エントリ数は、第一の記憶部１１に収まるクラスタ単位のデータ数、即ち、（第一の記憶部１１の全容量）／（クラスタ単位のサイズ）以下とする。
【０６５１】
各エントリには、クラスタ単位のデータの論理アドレス、第一の記憶部１１の物理アドレス、及び、対応するクラスタ単位の領域内の有効データの位置を表すセクタフラグが関連付けられている。
【０６５２】
・  クラスタ管理テーブル  
図４７のクラスタ管理テーブルは、第二の記憶部１２及び第四の記憶部１４に記憶されるデータを、クラスタ単位に等しい「小さな単位」で管理する。クラスタ単位は、セクタ単位の自然数倍のサイズであり、かつ、ページ単位は、クラスタ単位の二以上の自然数倍のサイズである。
【０６５３】
図４８は、クラスタ管理テーブルの構成例を示している。
【０６５４】
第二及び第四の記憶部１２，１４の１ブロックに対して１エントリが割り当てられる。
【０６５５】
エントリ数は、第二及び第四の記憶部１２，１４に収まるブロック数に対して、更に処理の中間状態のブロックを登録できるだけの余裕を持たせた数、即ち、［（第二及び第四の記憶部１２，１４の全容量）／（ブロック単位のサイズ）］に余裕を持たせた数とする。
【０６５６】
各エントリには、第二の記憶部１２または第四の記憶部１４に割り当てられたブロックの物理アドレスが関連付けられている。また、各エントリには、ブロック内のクラスタ単位のデータの論理アドレスが記憶されている。
【０６５７】
図４８では、ページ単位がクラスタ単位の二倍のサイズであると想定している。クラスタの空き状況として、各クラスタについて、「書き込み可能」（記憶領域が空いている）である状態と、「書き込み不可」（一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために記憶領域が無効となっている）である状態とを、それぞれ区別できるようにしておく。
【０６５８】
尚、ページ境界を満たさないクラスタ単位のデータが第四の記憶部１４に書き込まれる場合、同一ページ内のクラスタ単位の残りの領域に対応するクラスタの空き状況は、「書き込み不可」である状態に設定される。クラスタ単位の残りの領域が有効データを記憶していなくても、データ書き込み単位はページ単位であり不揮発性半導体記憶素子２２はその残りの領域を使用することはできないため、コントローラ１０は、残りの領域を無効データとして取り扱う。
【０６５９】
・  ブロック管理テーブル  
図４７のブロック管理テーブルは、第三の記憶部１３に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。ブロック管理テーブルの構成については、第ＩＩ節の第一の実施形態で図２３として示される通りである。
【０６６０】
・  クラスタＦＩＦＯ管理テーブル  
図４７のクラスタＦＩＦＯ管理テーブルは、第四の記憶部１４に割り当てられたブロック内のデータを管理する。クラスタＦＩＦＯ管理テーブルの構成については、第ＩＩ節の第一の実施形態で図２４として示される通りである。
【０６６１】
・  物理ブロック管理テーブル  
図４７の物理ブロック管理テーブルは、不揮発性半導体記憶素子２２のブロックの使用状況を管理する。物理ブロック管理テーブルの構成については、第ＩＩ節の第一の実施形態で図２５として示される通りである。
【０６６２】
図４７のコントローラ１０によって実行される処理フローについて説明する。
【０６６３】
コントローラ１０は、ホスト機器からのセクタ単位（第一の単位）のデータを、最初に第一の記憶部１１に書き込み、そのデータを一定期間蓄積する。このデータ蓄積処理については、例えば、第Ｉ節で述べた「Ａ．第一の記憶部へのデータ蓄積処理」を適用することができる。
【０６６４】
コントローラ１０は、第一の記憶部１１に蓄積されたデータを、所定の条件に従い、「小さな単位（第一の管理単位）」で管理すべきか、または、「大きな単位（第二の管理単位）」で管理すべきか、を判断する。所定の条件は、第Ｉ節で述べた「Ｂ．第一の記憶部からのデータ出力処理」における第一の条件と実質的に同じであっても良い。
【０６６５】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【０６６６】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、同時に、ブロック単位の自然数倍のサイズである。
【０６６７】
本実施形態では、第二及び第四の記憶部１２，１４のデータ管理単位である「小さな単位」は、セクタ単位の二以上の自然数倍のサイズであり、かつ、ページ単位は、「小さな単位」の二以上の自然数倍のサイズである。この関係を満たす「小さな単位」をクラスタ単位と称する。説明の簡略化のため、第三の記憶部１３のデータ管理単位である「大きな単位」は、ブロック単位のサイズと等しいとする。
【０６６８】
上記単位間の関係は、例えば、セクタ単位（第一の単位）＜クラスタ単位（「小さな単位」）＜ページ単位（第二の単位）＜ブロック単位（第三の単位）≦「大きな単位」と設定することが可能である。
【０６６９】
第一の記憶部１１に蓄積されたデータを「小さな単位」で管理する場合には、クラスタ単位のデータを第四の記憶部１４に転送する。第一の記憶部１１に蓄積されたデータを「大きな単位」で管理する場合には、ブロック単位のデータを第三の記憶部１３に転送する。
【０６７０】
このデータ出力処理については、第Ｉ節で述べた「Ｂ．第一の記憶部からのデータ出力処理」と実質的に同様である。ただし、第Ｉ節とは異なり、「小さな単位」のデータの行き先は、第四の記憶部１４となる。クラスタ単位のサイズはページ単位のサイズよりも小さいため、複数のクラスタ単位のデータが巻き込まれて第四の記憶部１４へ転送されても良い。
【０６７１】
Ａ．  第四の記憶部のＦＩＦＯ処理  
第四の記憶部１４は、既に述べたように、ブロック単位のＦＩＦＯ構造を有する。図４９は、第四の記憶部１４でのＦＩＦＯ処理を示している。
【０６７２】
１．  コントローラ１０は、追記的にデータを書き込むために準備されたブロック（以下、クラスタ追記用物理ブロックと称する）に対応するクラスタ管理テーブルのエントリを参照する。コントローラ１０は、第一の記憶部１１から出力されたデータを、クラスタ単位に等しい「小さな単位」のデータとして、クラスタ追記用物理ブロック内の書き込み可能なクラスタ単位の領域に書き込む（ステップＳＴ１）。
【０６７３】
コントローラ１０は、キャッシュ管理テーブルを検索し、出力対象に決まったクラスタ単位のデータを構成するセクタ単位のデータが、第一の記憶部１１内に全て存在するか否かを判断する。
【０６７４】
第一の記憶部１１内に全てのセクタ単位のデータが存在しない場合、コントローラ１０は、第二、第三、及び第四の記憶部１２，１３，１４から、不足データを集める。
【０６７５】
ページ単位のデータを構成する全てのセクタ単位のデータが揃った後、コントローラ１０は、そのクラスタ単位のデータを書き込む指示を、不揮発性半導体記憶素子２２に与える。ステップＳＴ１での書き込み処理において、同一ページに記憶可能な複数のクラスタ単位のデータは共に書き込まれることが望ましい。
【０６７６】
２．  コントローラ１０は、クラスタ管理テーブルにおいて、内部にクラスタ単位のデータが書き込まれたページに対応するエントリに記録された論理アドレスを更新する（ステップＳＴ２）。第二及び第四の記憶部１２，１４内に既に書き込まれていた、同一論理アドレス範囲に含まれる旧データは、無効データとなる。
【０６７７】
３．  コントローラ１０は、クラスタ追記用物理ブロック内に、クラスタ単位の空き領域が存在するか否かを判断する（ステップＳＴ３）。クラスタ単位の空き領域が検出されなかった場合、処理はステップＳＴ４に進む。クラスタ単位の空き領域が検出された場合、処理はステップＳＴ１に戻る。
【０６７８】
４．  コントローラ１０は、クラスタＦＩＦＯ管理テーブルのエントリを一つずつ後方にシフトし、クラスタ追記用物理ブロックの物理アドレスを、クラスタＦＩＦＯ管理テーブルの先頭のエントリに加える（ステップＳＴ４）。結果として、クラスタ追記用物理ブロックは、第四の記憶部１４に割り当てられる。
【０６７９】
５．  コントローラ１０は、クラスタＦＩＦＯ管理テーブルに物理アドレスが記録されている、第四の記憶部１４内の全てのブロックに対して、処理Ｐ１を実行する（ステップＳＴ５）。
【０６８０】
処理Ｐ１は、第ＩＩ節で述べた図３９の「Ｂ．処理Ｐ１」と実質的に同じであっても良い。ただし、有効データはクラスタ単位で管理される。
【０６８１】
３．  むすび  
半導体記憶装置におけるデータ管理単位（「小さな単位」及び「大きな単位」）は、不揮発性半導体記憶素子における物理的な読み出し／書き込み／消去単位に一致していても良いし、異なっていても良い。
【０６８２】
半導体記憶装置は、以下のデータ管理単位を採用しても良い。二つのデータ管理単位は、「大きな単位」のサイズが「小さな単位」のサイズの二以上の自然数倍であるという関係を満たすものとする。
【０６８３】
（１）  「小さな単位」のサイズはページ単位のサイズに等しく、「大きな単位」のサイズはブロック単位のサイズに等しい。
【０６８４】
（２）  「小さな単位」のサイズはページ単位のサイズに等しく、「大きな単位」のサイズはブロック単位よりも小さいトラック単位に等しい。
【０６８５】
（３）  「小さな単位」のサイズはページ単位よりも小さいクラスタ単位に等しく、「大きな単位」のサイズはブロック単位に等しい。
【０６８６】
（４）  「小さな単位」のサイズはページ単位よりも小さいクラスタ単位に等しく、「大きな単位」のサイズはブロック単位よりも小さいトラック単位に等しい。
【０６８７】
当然ながら、半導体記憶装置は、例えば、不揮発性半導体記憶素子の仕様（ページ単位のサイズ、または、ブロック単位のサイズ）、または、ホスト機器のファイル管理単位に基づき、上記複数の実施形態で説明された一定の関係を満たす他のデータ管理単位を採用しても良い。
【０６８８】
［ＩＶ．適用例］
上記複数の実施形態に示された半導体記憶装置に係る適用例について説明する。
【０６８９】
これら半導体記憶装置は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータの二次記憶装置として使用されるＳＳＤに適用される。
【０６９０】
図５０は、ＳＳＤの構成例を示している。
【０６９１】
ＳＳＤ１００は、データ保存用の複数のＮＡＮＤ型フラッシュメモリ（ＮＡＮＤメモリ）１０、データキャッシュ用または作業領域用のＤＲＡＭ１０１、フラッシュメモリ１０及びＤＲＡＭ１０１を制御するドライブ制御回路１０２、及び電源回路１０３を備えている。
【０６９２】
上記実施形態の第一の記憶部１１は、ＤＲＡＭ１０１内に設定されていても良い。ＤＲＡＭ１０１内に設定される第一の記憶部１１は、ＮＡＮＤメモリ１０に対するライトキャッシュとして機能する。ドライブ制御回路１０２は、上記実施形態のコントローラ１０を構成していても良い。
【０６９３】
ドライブ制御回路１０２は、ＳＳＤ１００の外部に設けられる状態表示用ＬＥＤを制御するための制御信号を出力する。ＤＲＡＭ２１の代わりに、ＦｅＲＡＭ（Ferro electric Random Access Memory）、ＭＲＡＭ（Magnetic Random Access Memory）、ＮＯＲ型フラッシュメモリを使用しても良い。即ち、第一の記憶領域１１は、ＮＡＮＤメモリ１０よりも高い書き込み速度を持つ不揮発性ランダムアクセスメモリ内に設定されていても良い。
【０６９４】
ＳＳＤ１００は、ＡＴＡインターフェース（ＡＴＡ  Ｉ／Ｆ）を介して、パーソナルコンピュータ等のホスト機器との間でデータを送受信する。ＳＳＤ１００は、ＲＳ２３２Ｃインターフェース（ＲＳ２３２Ｃ  Ｉ／Ｆ）を介して、デバッグ用機器との間でデータを送受信する。
【０６９５】
電源回路１０４は、外部電源を受け、この外部電源を用いて複数の内部電源を生成する。これらの内部電源は、ＳＳＤ１００内の各部に供給される。電源回路１０３は、外部電源の立ち上がりを検知して、パワーオンリセット信号を生成する。パワーオンリセット信号は、ドライブ制御回路１０２に送られる。
【０６９６】
ＮＡＮＤメモリ１０は、複数のブロックから構成されている。それぞれのブロックは、データ消去の最小単位である。図５１は、ＮＡＮＤメモリ１０内の一つのブロックの構成例を示している。
【０６９７】
各ブロックは、Ｘ方向に沿って順に配列された（ｍ＋１）個のＮＡＮＤストリングを備えている（ｍは、０以上の整数）。（ｍ＋１）個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴ１は、ドレインがビット線ＢＬ０〜ＢＬｍに接続され、ゲートが選択ゲート線ＳＧＤに共通接続されている。選択トランジスタＳＴ２は、ソースがソース線ＳＬに共通接続され、ゲートが選択ゲート線ＳＧＳに共通接続されている。
【０６９８】
各メモリセルトランジスタＭＴは、半導体基板上に形成された積層ゲート構造を備えたＭＯＳＦＥＴ（Metal Oxide Semiconductor Field Effect Transistor）から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層（浮遊ゲート電極）、及び電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタＭＴは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。
【０６９９】
メモリセルトランジスタＭＴは、１ビットを記憶するように構成されていても良い（ＳＬＣ：Single Level Cell）し、２ビット以上のデータを記憶するように構成されていても良い（ＭＬＣ：Multi Level Cell）。
【０７００】
各ＮＡＮＤストリングにおいて、（ｎ＋１）個のメモリセルトランジスタＭＴは、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。即ち、複数のメモリセルトランジスタＭＴは、隣接するもの同士で拡散領域（ソース領域若しくはドレイン領域）を共有するような形でＹ方向に直列接続される。
【０７０１】
最もドレイン側に位置するメモリセルトランジスタＭＴから順に、制御ゲート電極がワード線ＷＬ０〜ＷＬｎにそれぞれ接続されている。従って、ワード線ＷＬ０に接続されたメモリセルトランジスタＭＴのドレインは選択トランジスタＳＴ１のソースに接続され、ワード線ＷＬｎに接続されたメモリセルトランジスタＭＴのソースは選択トランジスタＳＴ２のドレインに接続されている。
【０７０２】
ワード線ＷＬ０〜ＷＬｎは、第三の単位内のＮＡＮＤストリング間で、メモリセルトランジスタＭＴの制御ゲート電極を共通に接続している。つまり、第三の単位内において同一行にあるメモリセルトランジスタＭＴの制御ゲート電極は、同一のワード線ＷＬに接続される。この同一のワード線ＷＬに接続される（ｍ＋１）個のメモリセルトランジスタＭＴはページとして取り扱われ、このページごとに読み出し／書き込みが行われる。
【０７０３】
ビット線ＢＬ０〜ＢＬｍは、第三の単位間で、選択トランジスタＳＴ１のドレインを共通に接続している。つまり、複数の第三の単位間内において同一列にあるＮＡＮＤストリングは、同一のビット線ＢＬに接続される。
【０７０４】
上記各実施形態における第二、第三、第四、及び第五の記憶部１２，１３，１４，１５は、（複数の）ＮＡＮＤメモリ１０内に設定されている。複数の記憶部の各々は、複数のＮＡＮＤメモリ１０に亘って設定されていても良い。別な場合では、複数の記憶部の各々は、別々のＮＡＮＤメモリ１０内に設定されていても良い。更に、それぞれのＮＡＮＤメモリ１０は異なる性能を有していても良い。例えば、第四の記憶部１４がＳＬＣ型ＮＡＮＤメモリ内に設定され、他の記憶部がＭＬＣ型ＮＡＮＤメモリ内に設定される等しても良い。
【０７０５】
複数のＮＡＮＤメモリ１０は、ドライブ制御回路１０２に並列接続されている。並列接続されるＮＡＮＤメモリ１０のブロックは同時に消去されても良く、ＳＳＤ１００における最小の消去単位である拡張ブロック単位を構成していても良い。並列接続されるＮＡＮＤメモリ１０の複数のページは同時に書き込み及び読み出しされても良く、ＳＳＤ１００における最小の書き込み／読み出し単位である拡張ページ単位を構成していても良い。
【０７０６】
メモリセルトランジスタＭＴは、浮遊ゲート電極を有する構造に限らず、ＭＯＮＯＳ（Metal-Oxide-Nitride-Oxide-Silicon）型等、電荷蓄積層としての窒化膜界面に電子をトラップさせることで閾値調整可能な構造であっても良い。ＭＯＮＯＳ構造のメモリセルトランジスタＭＴについても同様に、１ビットを記憶するように構成されていても良いし、２ビット以上のデータを記憶するように構成されていても良い。
【０７０７】
図５２は、１個のメモリセルトランジスタに２ビットの記憶を行う４値データ記憶方式での閾値分布の例を示している。
【０７０８】
４値データ記憶方式では、上位ページデータ“ｘ”と下位ページデータ“ｙ”で定義される４値データ“ｘｙ”の何れか一つをメモリセルに保持可能である。４値データは、“１１”、“０１”、“００”、及び“１０”である。データ“１１”（消去状態）は、メモリセルトランジスタＭＴの閾値電圧が負の状態である。
【０７０９】
下位ページデータの書き込み動作においては、下位ページデータ“ｙ”の書き込みによって、データ“１１”が選択的にデータ“１０”にプログラムされる。上位ページデータの書き込み前において、データ“１０”の閾値分布は、データ“０１”とデータ“００”の閾値分布の中間程度に位置しており、上位ページデータの書き込み後の閾値分布よりブロードであっても良い。
【０７１０】
上位ページデータの書き込み動作においては、上位ページデータ“ｘ”の書き込みによって、データ“１１”が選択的にデータ“０１”にプログラムされ、データ“１０”が選択的にデータ“００”にプログラムされる。
【０７１１】
多値データ記憶法式を適用する場合、メモリセルトランジスタＭＴの閾値分布を細かく制御する必要があり、メモリセルトランジスタＭＴの劣化の影響を受け易い。従って、半導体記憶装置内の不揮発性半導体記憶素子が多値データ記憶法式を採用する場合、書き込み効率を向上させ、消去回数の増加を抑制することは特に有効である。
【０７１２】
また、図５２に示すように、下位ページデータのみ書き込まれた状態の閾値分布と上位ページデータまで書き込み済みの状態の閾値分布とが異なる場合、上位ページのプログラム実行途中に電源断等が発生すると、既に書き込み済みの下位ページのデータが破壊される可能性がある。
【０７１３】
この問題に対応するため、「小さな単位」のデータが追記的に書き込まれる第四の記憶部１４については、擬似ＳＬＣブロックによって構成されていても良い。擬似ＳＬＣブロックは、下位ページのみをデータ書き込みに使用するブロックのことである。この設定は下位ページデータの破壊を防止する。更に、下位ページのプログラムは細かい制御を必要としないため、書き込み速度が向上する。
【０７１４】
第四の記憶部１４が擬似ＳＬＣブロックによって構成される場合、第二の記憶部１２において、擬似ＳＬＣブロックと通常ブロック（ＭＬＣブロック）とが互いに混在することになる。擬似ＳＬＣブロックの記憶容量は、ＭＬＣブロックの記憶容量の半分である。従って、第二の記憶部１２のコンパクション処理では、擬似ＳＬＣブロック内の有効データがＭＬＣブロックにコピーされる。
【０７１５】
図５３は、ドライブ制御回路の構成例を示している。
【０７１６】
ドライブ制御回路１０２は、データアクセス用バス１０４、第１の回路制御用バス１０５、及び第２の回路制御用バス１０６を備えている。
【０７１７】
第１の回路制御用バス１０５には、ドライブ制御回路１０２全体を制御するプロセッサ１０７が接続されている。また、第１の回路制御用バス１０５には、各管理プログラム（ＦＷ：firmware）のブート用プログラムが格納されたブートＲＯＭ１０８がＲＯＭコントローラ１０９を介して接続されている。また、第１の回路制御用バス１０５には、電源回路１０３からのパワーオンリセット信号を受けて、リセット信号及びクロック信号を各部に供給するクロックコントローラ１１０が接続されている。
【０７１８】
第２の回路制御用バス１０６は、第１の回路制御用バス１０５に接続されている。第２の回路制御用バス１０６には、状態表示用ＬＥＤにステータス表示用信号を供給するパラレルＩＯ（ＰＩＯ）回路１１１、ＲＳ２３２Ｃインターフェースを制御するシリアルＩＯ（ＳＩＯ）回路１１２が接続されている。
【０７１９】
ＡＴＡインターフェースコントローラ（ＡＴＡコントローラ）１１３、第１のＥＣＣ（Error Check and Correct）回路１１４、ＮＡＮＤコントローラ１１５、及びＤＲＡＭコントローラ１１９は、データアクセス用バス１０４と第１の回路制御用バス１０５との両方に接続されている。ＡＴＡコントローラ１１３は、ＡＴＡインターフェースを介してホスト装置との間でデータを送受信する。データアクセス用バス１０４には、データ作業領域として使用されるＳＲＡＭ１２０がＳＲＡＭコントローラ１２１を介して接続されている。
【０７２０】
ＮＡＮＤコントローラ１１５は、４つのＮＡＮＤメモリ１０とのインターフェース処理を行うＮＡＮＤ  Ｉ／Ｆ１１８、第２のＥＣＣ回路１１７、及びＮＡＮＤメモリ−ＤＲＡＭ間のアクセス制御を行うＤＭＡ転送制御用ＤＭＡコントローラ１１６を備えている。
【０７２１】
図５４は、プロセッサの構成例を示している。
【０７２２】
プロセッサ１０７は、データ管理部１２２、ＡＴＡコマンド処理部１２３、セキュリティ管理部１２４、ブートローダ１２５、初期化管理部１２６、デバッグサポート部１２７を備えている。
【０７２３】
データ管理部１２２は、ＮＡＮＤコントローラ１１５、第１のＥＣＣ回路１１４を介して、ＮＡＮＤメモリ−ＤＲＡＭ間のデータ転送、ＮＡＮＤチップに関する各種機能を制御する。
【０７２４】
ＡＴＡコマンド処理部１２３は、ＡＴＡコントローラ１１３、及びＤＲＡＭコントローラ１１９を介して、データ管理部１２２と協動してデータ転送処理を行う。セキュリティ管理部１２４は、データ管理部１２２及びＡＴＡコマンド処理部１２３と協動して各種のセキュリティ情報を管理する。ブートローダ１２５は、パワーオン時、各管理プログラム（ＦＷ）をＮＡＮＤメモリ１０からＳＲＡＭ１２０にロードする。
【０７２５】
初期化管理部１２６は、ドライブ制御回路１０２内の各コントローラ及び回路の初期化を行う。デバッグサポート部１２７は、外部からＲＳ２３２Ｃインターフェースを介して供給されたデバッグ用データを処理する。
【０７２６】
図５５は、ＳＳＤを搭載したポータブルコンピュータの例を示している。
【０７２７】
ポータブルコンピュータ２００は、本体２０１と、表示ユニット２０２とを備えている。表示ユニット２０２は、ディスプレイハウジング２０３と、このディスプレイハウジング２０３に収容された表示装置２０４とを備えている。
【０７２８】
本体２０１は、筐体２０５と、キーボード２０６と、ポインティングデバイスであるタッチパッド２０７とを備えている。筐体２０５内部には、メイン回路基板、ＯＤＤ（Optical Disk Device）ユニット、カードスロット、ＳＳＤ１００等が収容されている。
【０７２９】
カードスロットは、筐体２０５の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部２０８が設けられている。ユーザは、この開口部２０８を通じて筐体２０５の外部から追加デバイスをカードスロットに挿抜することが可能である。
【０７３０】
ＳＳＤ１００は、従来のＨＤＤの置き換えとして、ポータブルコンピュータ２００内部に実装された状態として使用しても良いし、ポータブルコンピュータ２００が備えるカードスロットに挿入した状態で、追加デバイスとして使用しても良い。
【０７３１】
図５６は、ＳＳＤを搭載したポータブルコンピュータのシステム構成例を示している。
【０７３２】
ポータブルコンピュータ２００は、ＣＰＵ３０１、ノースブリッジ３０２、主記憶メモリ３０３、ビデオコントローラ３０４、オーディオコントローラ３０５、サウスブリッジ３０９、ＢＩＯＳ−ＲＯＭ３１０、ＳＳＤ１００、ＯＤＤユニット３１１、エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）３１１、及びネットワークコントローラ３１２等を備えている。
【０７３３】
ＣＰＵ３０１は、ポータブルコンピュータ２００の動作を制御するために設けられたプロセッサであり、ＳＳＤ１００から主記憶メモリ３０３にロードされるオペレーティングシステム（ＯＳ）を実行する。ＯＤＤユニット３１１が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも一つの処理の実行を可能にした場合に、ＣＰＵ３０１は、それらの処理の実行をする。
【０７３４】
ＣＰＵ３０１は、ＢＩＯＳ−ＲＯＭ３１０に格納されたシステムＢＩＯＳ（Basic Input Output System）を実行する。システムＢＩＯＳは、ポータブルコンピュータ２００内のハードウェア制御のためのプログラムである。
【０７３５】
ノースブリッジ３０２は、ＣＰＵ３０１のローカルバスとサウスブリッジ３０９との間を接続するブリッジデバイスである。ノースブリッジ３０２には、主記憶メモリ３０３をアクセス制御するメモリコントローラも内蔵されている。
【０７３６】
ノースブリッジ３０２は、ＡＧＰ（Accelerated Graphics Port）バス等を介してビデオコントローラ３０４との通信、及びオーディオコントローラ３０５との通信を実行する機能を有している。
【０７３７】
主記憶メモリ３０３は、プログラムやデータを一時的に記憶し、ＣＰＵ３０１の作業領域として機能する。主記憶メモリ３０３は、例えば、ＤＲＡＭから構成される。
【０７３８】
ビデオコントローラ３０４は、ポータブルコンピュータ２００のディスプレイモニタ（ＬＣＤ）３１７として使用される表示ユニットを制御するビデオ再生コントローラである。
【０７３９】
オーディオコントローラ３０５は、ポータブルコンピュータ２００のスピーカ３１９を制御するオーディオ再生コントローラである。
【０７４０】
サウスブリッジ３０９は、ＬＰＣ（Low Pin Count）バス上の各デバイス、及びＰＣＩ（Peripheral Component Interconnect）バス上の各デバイスを制御する。サウスブリッジ３０９は、各種ソフトウェア及びデータを格納する記憶装置であるＳＳＤ１００を、ＡＴＡインターフェースを介して制御する。
【０７４１】
ポータブルコンピュータ２００は、セクタ単位でＳＳＤ１００へのアクセスを行う。ＡＴＡインターフェースを介して、書き込みコマンド、読出しコマンド、フラッシュコマンド等がＳＳＤ１００に入力される。
【０７４２】
サウスブリッジ３０９は、ＢＩＯＳ−ＲＯＭ３１０、及びＯＤＤユニット３１１をアクセス制御するための機能も有している。
【０７４３】
ＥＣ／ＫＢＣ３１１は、電力管理のためのエンベデッドコントローラと、キーボード（ＫＢ）３１４及びタッチパッド２０７を制御するためのキーボードコントローラとが集積された１チップマイクロコンピュータである。
【０７４４】
ＥＣ／ＫＢＣ３１１は、ユーザによるパワーボタンの操作に応じてポータブルコンピュータ２００の電源をＯＮ／ＯＦＦする機能を有している。ネットワークコントローラ３１２は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【０７４５】
上記実施形態の半導体記憶装置は、ＳＳＤに限らず、例えば、ＳＤ（登録商標）カードに代表されるメモリカードとして構成することも可能である。半導体記憶装置をメモリカードとして構成する場合、ポータブルコンピュータに限らず、携帯電話、ＰＤＡ（Personal Digital Assistant）、デジタルスチルカメラ、デジタルビデオカメラ等、各種電子機器に対して適用可能である。
【産業上の利用可能性】
【０７４６】
本発明の半導体記憶装置は、ＳＳＤ等のパーソナルコンピュータの二次記憶装置及びＳＤ（登録商標）カード等のメモリカードに有効である。
【図１】
2010250846.tif 000003
【図２】
2010250846.tif 000004
【図３】
2010250846.tif 000005
【図４】
2010250846.tif 000006
【図５】
2010250846.tif 000007
【図６】
2010250846.tif 000008
【図７】
2010250846.tif 000009
【図８】
2010250846.tif 000010
【図９】
2010250846.tif 000011
【図１０】
2010250846.tif 000012
【図１１】
2010250846.tif 000013
【図１２】
2010250846.tif 000014
【図１３】
2010250846.tif 000015
【図１４】
2010250846.tif 000016
【図１５】
2010250846.tif 000017
【図１６】
2010250846.tif 000018
【図１７】
2010250846.tif 000019
【図１８】
2010250846.tif 000020
【図１９】
2010250846.tif 000021
【図２０】
2010250846.tif 000022
【図２１】
2010250846.tif 000023
【図２２】
2010250846.tif 000024
【図２３】
2010250846.tif 000025
【図２４】
2010250846.tif 000026
【図２５】
2010250846.tif 000027
【図２６】
2010250846.tif 000028
【図２７】
2010250846.tif 000029
【図２８】
2010250846.tif 000030
【図２９】
2010250846.tif 000031
【図３０】
2010250846.tif 000032
【図３１】
2010250846.tif 000033
【図３２】
2010250846.tif 000034
【図３３】
2010250846.tif 000035
【図３４】
2010250846.tif 000036
【図３５】
2010250846.tif 000037
【図３６】
2010250846.tif 000038
【図３７】
2010250846.tif 000039
【図３８】
2010250846.tif 000040
【図３９】
2010250846.tif 000041
【図４０】
2010250846.tif 000042
【図４１】
2010250846.tif 000043
【図４２】
2010250846.tif 000044
【図４３】
2010250846.tif 000045
【図４４】
2010250846.tif 000046
【図４５】
2010250846.tif 000047
【図４６】
2010250846.tif 000048
【図４７】
2010250846.tif 000049
【図４８】
2010250846.tif 000050
【図４９】
2010250846.tif 000051
【図５０】
2010250846.tif 000052
【図５１】
2010250846.tif 000053
【図５２】
2010250846.tif 000054
【図５３】
2010250846.tif 000055
【図５４】
2010250846.tif 000056
【図５５】
2010250846.tif 000057
【図５６】
2010250846.tif 000058