(57)【特許請求の範囲】
【請求項１】
複数のデータを記憶し、予め定められた大きさの記憶領域であるページを単位としてデータが書き込みおよび読み出しされ、複数の前記ページを含むブロックを単位としてデータが消去される半導体記憶チップと、
前記半導体記憶チップに論理アドレスを指定して前記データが書き込まれた後、複数の前記データのうち少なくとも同一の論理アドレスに対して最後に書き込まれた前記データである有効データの一部を破棄する破棄部と、
第１ブロックに記憶された前記有効データのうち、前記破棄部によって破棄されたデータを除く有効データを第２ブロックに書き込み、前記第１ブロックを消去するコンパクション部と、
破棄された前記データの読み出し要求に対して、前記データを読み出せないことを示す応答を出力する制御部と、を備え、
前記破棄部は、さらに、ブロックに含まれるすべての有効データを破棄する場合に、該ブロックを消去し、
前記有効データには、破棄可能な第１データと破棄不可能な第２データが含まれており、
前記制御部は、前記論理アドレスの範囲のうち、予め定められた第１範囲に前記第１データを記憶し、予め定められた第２範囲に前記第２データを記憶し、
前記破棄部は、複数の前記第１データのうち少なくとも一部の前記第１データを破棄する、
ことを特徴とする半導体記憶装置。
【請求項２】
前記第２範囲は、前記半導体記憶チップの物理アドレスの範囲以下である、
請求項１に記載の半導体記憶装置。
【請求項３】
前記論理アドレスの範囲は、前記半導体記憶チップの物理アドレスの範囲より大きい、
請求項１に記載の半導体記憶装置。
【請求項４】
前記制御部は、破棄可能なデータとして書き込みが要求されたデータを前記第１データとして前記半導体記憶チップに記憶する、
請求項１に記載の半導体記憶装置。
【請求項５】
前記ページごとに、前記ページに記憶される前記データが前記第１データおよび前記第２データのいずれであるかを示す判別情報を記憶する記憶部をさらに備える、
請求項１に記載の半導体記憶装置。
【請求項６】
前記ブロックごとに、前記ブロックに記憶される前記データが前記第１データおよび前記第２データのいずれであるかを示す判別情報を記憶する記憶部をさらに備える、
請求項１に記載の半導体記憶装置。
【請求項７】
前記破棄部は、前記第１ブロックに記憶された前記有効データの個数が予め定められた第１閾値より大きい場合に、前記第１ブロックに記憶された前記有効データの少なくとも一部を破棄する、
請求項１に記載の半導体記憶装置。
【請求項８】
前記破棄部は、前記有効データのうち、当該有効データに対するアクセス数が予め定められた第２閾値以下の前記有効データを破棄し、
前記コンパクション部は、前記有効データのうち、当該有効データに対するアクセス数が予め定められた第２閾値より大きい前記有効データを前記第２ブロックに書き込む、
請求項１に記載の半導体記憶装置。
【請求項９】
前記制御部は、破棄可能な前記データを表す第１データと、破棄不可能な前記データを表す第２データとを区別して前記ブロックに記憶し、
前記破棄部は、データが書き込まれていない前記ブロックを表す未使用ブロックの個数が予め定められた第３閾値より小さい場合に、前記未使用ブロック以外の前記ブロックのうち、前記第１データのみが記憶されている前記ブロックに記憶されている前記第１データを破棄し、
前記制御部は、前記第１データが破棄された前記ブロックと、前記未使用ブロックとのうちいずれかを、書き込みが要求されたデータの書き込み先のブロックとして割り当てる、
請求項１に記載の半導体記憶装置。
【請求項１０】
複数のデータを記憶し、予め定められた大きさの記憶領域であるページを単位としてデータが書き込みおよび読み出しされ、複数の前記ページを含むブロックを単位としてデータが消去される半導体記憶チップを備える半導体記憶装置を、
前記半導体記憶チップに論理アドレスを指定して前記データが書き込まれた後、複数の前記データのうち少なくとも同一の論理アドレスに対して最後に書き込まれた前記データである有効データの一部を破棄する破棄部と、
第１ブロックに記憶された前記有効データのうち、前記破棄部によって破棄されたデータを除く有効データを第２ブロックに書き込み、前記第１ブロックを消去するコンパクション部と、
破棄された前記データの読み出し要求に対して、前記データを読み出せないことを示す応答を出力する制御部、として機能させるためのプログラムであって、
前記破棄部は、さらに、ブロックに含まれるすべての有効データを破棄する場合に、該ブロックを消去し、
前記有効データには、破棄可能な第１データと破棄不可能な第２データが含まれており、
前記制御部は、前記論理アドレスの範囲のうち、予め定められた第１範囲に前記第１データを記憶し、予め定められた第２範囲に前記第２データを記憶し、
前記破棄部は、複数の前記第１データのうち少なくとも一部の前記第１データを破棄する、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体記憶装置およびプログラムに関する。
【背景技術】
【０００２】
ＳＳＤ（Solid  State  Drive）をファイルシステムのキャッシュとして使用する技術が知られている。ＳＳＤでは、例えばＮＡＮＤ型の半導体記憶素子（ＮＡＮＤメモリ）などが用いられる。ＮＡＮＤメモリのような半導体記憶媒体を用いて記憶装置を構成する場合、転記処理（コンパクション、ガーベージコレクション）が行われる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Brendan  Gregg、"ZFS  L2ARC"、  [online]、retrieved  from  the  Internet:  <URL:  https://blogs.oracle.com/brendan/entry/test>
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えばＮＡＮＤメモリを用いたＳＳＤをＨＤＤ（ハードディスクドライブ）のキャッシュとして使用することにより、キャッシュを用いない場合より高速化が実現できる。しかし、ＮＡＮＤメモリでは、上記のように一般に処理負荷の大きい転記処理（コンパクション、ガーベージコレクション）が必要になるため、高速化の妨げになりうる。
【課題を解決するための手段】
【０００５】
実施形態の半導体記憶装置は、半導体記憶チップと、破棄部と、制御部と、を備える。半導体記憶チップは、複数のデータを記憶する。破棄部は、半導体記憶チップにデータが書き込まれた後、予め定められた条件が満たされた場合に、複数のデータのうち少なくとも一部のデータを破棄する。制御部は、破棄されたデータの読み出し要求に対して、データを読み出せないことを示す応答を出力する。
【図面の簡単な説明】
【０００６】
【図１】本実施形態にかかる半導体記憶装置のハードウェア構成図。
【図２】本実施形態にかかる半導体記憶装置の機能ブロック図。
【図３】本実施形態にかかるＬＢＡテーブルのデータ構成例を示す図。
【図４】本実施形態にかかる論理アドレスと物理アドレスとの対応を示す図。
【図５】本実施形態にかかるビットベクタテーブルの構成例を示す図。
【図６】本実施形態におけるデータ破棄処理のフローチャート。
【図７】本実施形態の変形例のビットベクタテーブルの構成例を示す図。
【図８】本実施形態の変形例におけるデータ破棄処理のフローチャート。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、この発明にかかる半導体記憶装置の好適な実施形態を詳細に説明する。
【０００８】
本実施形態にかかる半導体記憶装置は、予め定められた条件が満たされた場合に、ＮＡＮＤメモリに記憶されたデータを破棄する。例えば、コンパクションコストが高いことなどを条件としてデータを破棄するかが判断される。破棄したデータが記憶されていた領域は書き込み可能となるため、コンパクションの処理量を抑制しつつ、書き込み可能な領域を確保することが可能となる。また、コンパクションを実行することなく、破棄処理によってのみ書き込み可能な領域を確保しても良い。なお、データを破棄するとは、例えばデータに対してアクセスが要求されても、当該データに対してアクセスできない状態にすることを意味する。
【０００９】
まず、本実施形態にかかる半導体記憶装置のハードウェア構成について図１を用いて説明する。半導体記憶装置５０は、プロセッサ５１と、ＢｏｏｔＲＯＭ（Reed  Only  Memory）５２と、ＳＡＴＡ／ＳＡＳインタフェース５５と、メモリコントローラ５３と、ＤＲＡＭ（Dynamic  Random  Access  Memory）５４と、ＮＡＮＤコントローラ５７Ａ〜５７Ｆと、半導体記憶素子であるＮＡＮＤ５８Ａ〜５８Ｆと、インタフェース５９と、これらを接続するバス５６とを備える。なお、ＮＡＮＤコントローラ５７Ａ〜５７Ｆを各々区別する必要がない場合、単に、ＮＡＮＤコントローラ５７と記載する場合がある。また、ＮＡＮＤ５８Ａ〜５８Ｆを各々区別する必要がない場合、単に、ＮＡＮＤ５８と記載する場合がある。
【００１０】
ＳＡＴＡ／ＳＡＳインタフェース５５は、プロセッサ５１の制御の下、半導体記憶装置５０の上位装置であるホスト１０との通信を制御する。インタフェース５９は、プロセッサ５１の制御の下、ＨＤＤ２０との通信を制御する。ＢｏｏｔＲＯＭ５２は、電源の投入時に実行されるプログラムを記憶する。各種システムプログラムは、ＮＡＮＤ５８に記憶されている。
【００１１】
プロセッサ５１は、電源の投入時にＢｏｏｔＲＯＭ５２からプログラムを読み出してこれを実行し、当該プログラムに従って、ＮＡＮＤ５８に記憶された各種システムプログラムをＤＲＡＭ５４に転送する。プロセッサ５１は、ＤＲＡＭ５４上のシステムプログラムを実行することにより、半導体記憶装置５０全体を制御して、各種機能を実現させる。具体的には、プロセッサ５１は、ＳＡＴＡ／ＳＡＳインタフェース５５を介して、ホスト１０から送信されたコマンドを解釈する。プロセッサ５１は、解釈したコマンドに応じて、ＮＡＮＤ５８へのデータの書き込みやＮＡＮＤ５８からのデータの読み出しを制御する。
【００１２】
メモリコントローラ５３は、ＤＲＡＭ５４の制御を行う。ＤＲＡＭ５４は、各種データや各種プログラムを記憶する。本実施形態では、ＤＲＡＭ５４は、後述する正引きテーブルと、ビットベクタテーブルとを記憶する。ＮＡＮＤコントローラ５７は、ＮＡＮＤ５８の制御を行う。ＮＡＮＤコントローラ５７は、誤り訂正回路を含んでもよい。
【００１３】
ＮＡＮＤ５８は、半導体記憶チップに相当し、例えば、ＮＡＮＤ型のフラッシュメモリで用いられる記憶素子である。このようなＮＡＮＤ５８は、ランダムな読み書きができず、ページと呼ばれる単位で読み書きが可能である。複数ページがまとまってブロックと呼ばれる単位の記憶領域を構成する。ここでは、１ページ４ＫＢ、６４ページで１ブロックとする。ページサイズおよびブロック内のページ数はこれに限られるものではない。
【００１４】
１つのＮＡＮＤ５８は、複数のブロックが集まって構成される。なお、本実施形態では、図１に示されるように、ＮＡＮＤ５８の数を６つとしている。ＮＡＮＤ５８の個数は６つに限られるものではない。各ＮＡＮＤ５８Ａ〜５８Ｆに対して各々１つのチャネル（ＣＨ０〜ＣＨ５）を割り当てる。なお、半導体記憶装置５０は、ホスト１０から書き込みが要求されたデータがページサイズより大きい場合にはこれを複数に分割し、分割したページ単位のデータ（分割データという）を各チャネルＣＨ０〜ＣＨ５に割り当てて、書き込みを行う。
【００１５】
次に、半導体記憶装置５０で実現される機能について図２を用いて説明する。半導体記憶装置５０は、ＮＡＮＤ５８と、ホストインタフェース部６０と、更新部６３と、ＮＡＮＤ制御部６２と、破棄部６５と、コンパクション部６４と、記憶部６１と、を備える。
【００１６】
ホストインタフェース部６０の機能は、例えば、プロセッサ５１がプログラムを実行することと、ＳＡＴＡ／ＳＡＳインタフェース５５の機能とにより実現される。更新部６３と、コンパクション部６４と、破棄部６５と、の各機能は、例えば、プロセッサ５１がプログラムを実行することにより実現される。ＮＡＮＤ制御部６２の機能は、プロセッサ５１がプログラムを実行することと、ＮＡＮＤコントローラ５７の機能とにより実現される。記憶部６１は、例えば、ＤＲＡＭ５４により実現される。
【００１７】
ホストインタフェース部６０は、ホスト１０と半導体記憶装置５０との通信を制御するインタフェースである。ホストインタフェース部６０は、ホスト１０から送信されたコマンドを受信する。
【００１８】
記憶部６１は、正引きテーブル（ＬＢＡテーブル）と、ビットベクタテーブルとを記憶する。ＬＢＡテーブルは、書き込み対象データ（書き込みが要求されたデータ）の論理アドレスと、物理アドレスとの対応関係を示すテーブルである。物理アドレスとは、書き込み対象データが書き込まれるＮＡＮＤ５８上の物理的な記憶位置を示す。このようなＬＢＡテーブルは、ホスト１０から指定された論理アドレスに対応する物理アドレスを特定する際に用いられる。
【００１９】
図３は、ＬＢＡテーブルのデータ構成を例示する図である。図３に示されるように、ＬＢＡテーブルは、インデックスに相当する論理アドレスに対応づけられる物理アドレスのエントリを含む。エントリは、ブロックを識別するブロック番号と、チャネル番号（ＣＨ）と、ページを識別するページ番号と、判別情報と、を含む。
【００２０】
書き込み対象データの論理アドレスは、ホスト１０からのデータの書き込みの要求で指定される論理アドレスに基づいて各々計算される。ブロック番号は、例えば、先頭から順にブロックに付与される。チャネル番号は、論理アドレスに対応するデータが記憶されているブロック（物理ブロック）の存在するＮＡＮＤ５８が、いずれのチャネルに接続されているかを示す。
【００２１】
ページ番号は、論理アドレスに対応するデータが、ブロック番号およびチャネル番号で特定されるブロックの中のいずれのページに記憶されているかを示す。なお、ページ番号は、例えば、物理アドレスの順に付与されてもよいし、ページの物理アドレス自体が付与されてもよい。このようなＬＢＡテーブルは、書き込み対象データがＮＡＮＤ５８に書き込まれるたびに更新される。
【００２２】
判別情報は、ページに記憶されたデータが、破棄可能なデータであるか、破棄不可能なデータであるかを示す情報である。例えば、判別情報が「１」であれば、そのページのデータが破棄可能であることを示し、「０」であれば、そのページのデータが破棄不可能であることを示す。
【００２３】
判別情報は、ホスト１０が書き込みを要求するときに指定するように構成してもよい。例えば、ホスト１０からのコマンドを識別するコマンド識別子によって、書き込むデータを破棄可能とするか否かを切り分けてもよい。また、ホスト１０からのコマンド内に、書き込むデータを破棄可能とするか否かを示す情報を含めるように構成してもよい。後述するように、論理アドレスの範囲で破棄可能か否かを区別する場合は、ホスト１０は、書き込み時に指定する論理アドレスによって、書き込むデータを破棄可能とするか否かを指定できる。
【００２４】
なお、ページに記憶されたデータが、破棄可能なデータであるか、破棄不可能なデータであるかを判別できれば、ＬＢＡテーブルに判別情報を記憶する方法以外の方法を用いてもよい。例えば、ＬＢＡテーブルとは異なるテーブルに、ページごとの判別情報を記憶するように構成してもよい。また、図４で説明するように、論理アドレスの範囲のうち一部の範囲（例えば読み出し領域）に含まれる論理アドレスに記憶されるデータを破棄可能なデータとする場合は、データの論理アドレスが、この一部の範囲に含まれるか否かを判断してもよい。
【００２５】
図４は、論理アドレスと物理アドレスとの対応の一例を示す図である。図４に示すように、論理アドレス（ＬＢＡ）は、例えば書き込み領域４０１と読み出し領域４０２とを含む。書き込み領域４０１は、データの書き込みおよび読み出しが可能な論理アドレスの範囲を表す。読み出し領域４０２は、データの読み出しのみが可能な論理アドレスの範囲を表す。
【００２６】
例えば、書き込み領域４０１に含まれる論理アドレスに記憶されるデータを破棄不可能なデータとし、読み出し領域４０２に含まれる論理アドレスに記憶されるデータを破棄可能なデータとするように構成してもよい。ＮＡＮＤメモリを用いたＳＳＤをＨＤＤのキャッシュとして使用する場合、読み出し領域４０２に記憶したデータは、破棄したとしてもＨＤＤ内のデータとの不整合は生じない。ホスト１０は、破棄の結果、データを読み出せなかったとしても、再度ＨＤＤから必要なデータを読み出せばよいためである。
【００２７】
なお、論理アドレスの全範囲が読み出し領域４０２となるように構成してもよい。この場合は、すべてのデータを破棄可能なデータとし、ＬＢＡテーブルに判別情報を記憶しなくてもよい。
【００２８】
図４では、論理アドレスの範囲（書き込み領域４０１＋読み出し領域４０２）が、物理アドレス（ＰＢＡ）の範囲（物理領域４１１）より大きい例が示されている。このような構成では、仮に新たに書き込むデータのための物理領域４１１が空いていない場合は、読み出し領域４０２の論理アドレスに対応するいずれかのデータを破棄して物理領域４１１を確保すればよい。一方、書き込み領域４０１のデータを保証するためには、物理領域４１１の大きさは、書き込み領域４０１の大きさ以上とする必要がある。
【００２９】
次に、ビットベクタテーブルの構成例について図５を用いて説明する。ビットベクタテーブルは、各チャネルの各ブロックについて、当該ブロックに含まれるページのうち有効なデータ（有効データ）が書き込まれているページ（有効ページという）がどのページかを２値でページ順に示すテーブルである。ページ毎に２値を示すものをビットベクタという。ビットベクタの値が「１」であれば、そのページが有効ページであることを示し、「０」であれば、そのページが有効ページではないページ（無効ページ）であることを示す。
【００３０】
初期状態では、ビットベクタの値は全て「０」である。本実施形態では、１ブロック当たり６４ページとしたとき、対応するビットベクタは、１つのブロック当たり６４個となる。図５に示されるように、ビットベクタテーブルは、インデックスに相当するブロック番号と、当該ブロック番号の付与されたブロックに各々含まれる各ページに対するビットベクタと、カウンタとを含む。
【００３１】
カウンタは、値が「１」であるビットベクタの総数を示す。ビットベクタの値が「１」であるページは有効ページである。従って、カウンタは、ブロック内の有効ページの数を示す（以降、有効ページ数カウンタと呼ぶ）。このような構成で、ビットベクタテーブルは、ホスト１０からのデータの書き込みの要求があるたびに更新される。
【００３２】
図２に戻り、ＮＡＮＤ制御部６２は、ＮＡＮＤ５８に対するデータの書き込みおよび読み出しを制御する。ＮＡＮＤ制御部６２は、例えば、ホスト１０から送信されたコマンドを受け取り、当該コマンドに従って、対応するＮＡＮＤ５８にアクセスする。具体的には、データの書き込みが要求されている場合、ＮＡＮＤ制御部６２は、書き込み対象データをＮＡＮＤ５８に書き込む。
【００３３】
この書き込みで、ＮＡＮＤ制御部６２は、対応するＮＡＮＤ５８の消去済みのブロックのうち書き込みがまだ行われていないページ毎に書き込みの位置を順次示すよう追記ポインタを設定する。ブロックの消去とは、例えばブロックを構成する全てのビットの値を「１」にすることである。ＮＡＮＤ制御部６２は、追記ポインタによって示される位置のページに書き込み対象データを書き込む。その後、ＮＡＮＤ制御部６２は、新たなページの位置を示すよう追記ポインタを更新する。従って、追記ポインタは順次次の書き込み位置を示すようにその値が変化する。例えば、追記ポインタは、各チャネルで１５ビットの物理アドレスによりブロックが識別され、１ブロックに６４ページが含まれる場合、合計１５＋６＝２１ビットで構成される。
【００３４】
ここで、書き込み対象データのデータ構成の一例について説明する。ＮＡＮＤ制御部６２は、書き込み対象データ自体の誤りを検出して訂正するための誤り訂正符号（ページＥＣＣという）およびｗｒｉｔｅコマンド（論理アドレスが指定されたデータの書き込みを要求するコマンド）によって指定された論理アドレスを、当該書き込み対象データに付加する。なお、ページＥＣＣには、データの誤りを検出するＣＲＣ符号等の符号と、データの誤りを訂正するＥＣＣ符号等の符号とが含まれるものとする。ページＥＣＣにＣＲＣ符号も含む理由は、ＥＣＣ符号によりデータの誤りを訂正できない場合は誤訂正の可能性もあるからである。
【００３５】
ＮＡＮＤ制御部６２は、ページＥＣＣおよび論理アドレスを付加した書き込み対象データを、追記ポインタにより示されるＮＡＮＤ５８内のページに書き込む。なお、書き込み対象データはページ単位の大きさであるが、ＮＡＮＤ５８のページサイズは、書き込み対象データにページＥＣＣおよび論理アドレスが付加された全体の大きさに相当するものとする。また、各分割データの論理アドレスは、ｗｒｉｔｅコマンドによって指定された論理アドレスに基づいてＮＡＮＤ制御部６２が各々計算する。
【００３６】
また、ＮＡＮＤ制御部６２は、物理アドレスが指定された有効ページのデータ（有効データ）の読み出しが要求されている場合、当該物理アドレスを用いてＮＡＮＤ５８内の当該物理アドレスに対応するページに書き込まれたデータを読み出す。
【００３７】
ＮＡＮＤ制御部６２は、破棄可能なデータと、破棄不可能なデータとを区別してＮＡＮＤ５８に記憶する。例えば、ＮＡＮＤ制御部６２は、コマンド識別子等により破棄可能なデータであることが指定されたデータに対して、破棄可能であることを示す判別情報を含むＬＢＡテーブルのエントリを記憶する。また例えば、ＮＡＮＤ制御部６２は、コマンド識別子等により破棄可能なデータであることが指定されたデータを、読み出し領域４０２に含まれる論理アドレスに記憶する。
【００３８】
また、ＮＡＮＤ制御部６２は、破棄部６５によってデータが破棄された後、破棄されたデータの読み出しが要求された場合、要求されたデータを読み出せないことを示す応答を、ホストインタフェース部６０を介して要求元（ホスト１０）に出力する。
【００３９】
更新部６３は、データの書き込み等に応じてＬＢＡテーブルおよびビットベクタテーブルを更新する。例えば、更新部６３は、ｗｒｉｔｅコマンドがホスト１０から受信された場合、ＬＢＡテーブルを参照すると共に、ビットベクタテーブルを更新し、さらに、ＬＢＡテーブルを更新する。
【００４０】
具体的には、更新部６３は、まず、ＬＢＡテーブルを参照して、当該論理アドレスに対応する物理アドレス、すなわち、当該論理アドレスに対応するデータがどのブロックのページに書き込まれているかを検索する。当該論理アドレスに対応する物理アドレスがＬＢＡテーブルに記憶されていない場合は、当該論理アドレスに対応するデータの書き込みは今回まで行われていないことになる。この場合、更新部６３は、当該論理アドレスに対応するデータを書き込む対象のページに対するビットベクタの値を「１」にする。データを書き込む対象のページは、追記ポインタにより示される。また、更新部６３は、当該ページの含まれるブロックに対応する有効ページ数カウンタの値を１インクリメントする。
【００４１】
一方、更新部６３がＬＢＡテーブルを参照したときに当該論理アドレスに対応する物理アドレスがＬＢＡテーブルに記憶されている場合、当該論理アドレスに対応するデータの書き込みが以前に行われていることになる。この場合、今回のｗｒｉｔｅコマンドにより、以前に書き込みが行われたデータを無効にする必要がある。このため、更新部６３は、ｗｒｉｔｅコマンドにより指定された論理アドレスで参照したＬＢＡテーブルのエントリに記憶されている物理アドレスのページに対応するビットベクタの値を「０」にする。更新部６３は、当該ページの存在するブロックの有効ページ数カウンタの値を１デクリメントする。また、更新部６３は、書き込み対象データを書き込むページに対応するビットベクタの値を「１」にし、当該ページの存在するブロックの有効ページ数カウンタの値を１インクリメントする。
【００４２】
このようにデータの書き込みが行われる度に更新することで、ビットベクタテーブルと有効ページ数カウンタとは有効ページの位置およびその数を常に示している。最後に更新部６３は、当該論理アドレスに対応するＬＢＡテーブルのエントリに、書き込み対象データを書き込む先の物理アドレスを記録する。また、コンパクションが行われた場合には、更新部６３は、ＬＢＡテーブルの物理アドレスを、有効データを移動した先のページの物理アドレスに更新する。
【００４３】
コンパクション部６４は、コンパクションを実行する。コンパクションは、例えば、無効データ（無効ページ）を含むブロック内の有効データを集めて新たにフリーブロック（未使用ブロック）に書き直すことにより有効データを移動させるとともに、当該ブロックに対してデータの消去を行い、新たなフリーブロックを生成する処理である。フリーブロックとは、書き込みが可能な新規の消去済みのブロックである。有効データが破棄されている場合は、コンパクション部６４は、有効データのうち、破棄されたデータを除く有効データを移動させてもよい。
【００４４】
コンパクションを行うことにより、書き込みが不能になったブロックが新たに書き込み可能になり、フリーブロックを確保することが可能になる。また、移動により有効データが書き込まれたブロックでも、書き込みがまだ行われていないページが含まれていれば、そのページに新たに書き込みが可能となる。
【００４５】
コンパクションは、例えばホスト１０からｗｒｉｔｅコマンドを受信したが、データを書き込むブロックが不足しているときに実行される。コンパクションが実行されるタイミングはこれに限られるものではない。例えば、ホスト１０から要求がなくアイドル状態となっているときにコンパクションが実行されるように構成してもよい。
【００４６】
コンパクションの実行対象とするブロックは、従来から用いられている任意の方法で選択できる。例えば、無効ページ数が多いブロックを優先して選択する方法、データ書き込み後の経過時間が大きいブロックを優先して選択する方法、および、ランダムに選択する方法などを適用できる。
【００４７】
なお、後述するように、破棄部６５が無効データまたは破棄されたデータのみを含むブロックを消去する機能を備えていれば、コンパクションは不要となる。すなわち、半導体記憶装置５０はコンパクション部６４を備えなくてもよい。
【００４８】
破棄部６５が、データに対するアクセス数（読み出しアクセス数）が予め定められた閾値（第２閾値）以下のデータを対象として破棄を実行し、コンパクション部６４が、第２閾値より大きいデータを対象としてコンパクションを実行するように構成してもよい。この場合、データごとにアクセス数を計測する計測部をさらに備えてもよい。このようにすることで、データに対するアクセス数（読み出しアクセス数）が多いデータを残すことができるため、キャッシュの効果を高めることができる。
【００４９】
破棄部６５は、ＮＡＮＤ５８にデータが書き込まれた後、予め定められた条件が満たされた場合に、書き込まれたデータのうち、破棄可能なデータの少なくとも一部を破棄する。破棄部６５は、破棄可能なデータであるか否かを、例えばＬＢＡテーブルの判別情報で判断することができる。
【００５０】
条件は任意であるが、例えば、フリーブロックの個数が少なくなったこと、および、コンパクションを実行するコストが大きくなること、などの条件が適用できる。
【００５１】
破棄部６５は、破棄処理の結果、無効データ、または、破棄されたデータのみを含むブロックが得られた場合、該ブロックを消去するように構成されてもよい。言い換えると、ブロックに含まれる有効データがすべて破棄可能なデータであり、かつ、破棄可能なデータをすべて破棄する場合に、該ブロックを消去するように構成されてもよい。これにより、コンパクションを実行しなくても書き込み可能な領域を確保することができる。
【００５２】
例えば破棄部６５は、フリーブロックの個数が予め定められた閾値（第３閾値）より小さい場合に、フリーブロック以外のブロックのうち、破棄可能なデータのみが記憶されているブロックに記憶されているデータを破棄する。また、破棄部６５は、データを破棄したブロックに対して消去処理を実行する。破棄部６５は、例えばコンパクションと同様に、ブロックを構成する全てのビットの値を「１」にすることで消去処理を実行する。
【００５３】
また、破棄部６５は、コンパクションの実行対象となるブロック（無効データを含むブロック）に記憶された有効データの個数が、予め定められた閾値（第１閾値）より大きい場合に、当該ブロックに記憶された有効データの全部または一部を破棄する。これにより、コンパクションで移動すべき有効データの個数を減らし、コンパクションの負荷を軽減できる。
【００５４】
また、破棄部６５は、要求されたデータを読み出したときにエラーが発生した場合に、エラーが発生したデータを破棄する。これにより、例えば、エラー発生時の誤り訂正処理の実行頻度を低減することができる。
【００５５】
このように、本実施形態の半導体記憶装置５０は、ホスト１０からの指示に従うのではなく、自身の判断によって記憶されたデータを破棄する。このとき、半導体記憶装置５０は、データを破棄したことをホスト１０に通知する必要はない。従って、ホスト１０は、データが破棄されたことを知らずに、当該データの読み出しを要求する場合がありうる。破棄されたデータの読み出しが要求された場合、ＮＡＮＤ制御部６２が、要求されたデータを読み出せないことを示す応答をホスト１０に出力するため、ホスト１０は、データが破棄されたことを知ることができる。なお、要求されたデータを読み出せないことを示す応答は、通常の読み出しエラーとしてもよいし、読み出しエラーとは区別できる情報として送信してもよい。読み出しエラーとは区別できる情報として送信される場合は、ホスト１０は、リトライを回避するなどの処理が可能となる。
【００５６】
次に、このように構成された本実施形態にかかる半導体記憶装置５０によるデータ破棄処理について図６を用いて説明する。図６は、本実施形態におけるデータ破棄処理の全体の流れを示すフローチャートである。
【００５７】
データ破棄処理は、破棄部６５によって実行される。データ破棄処理は、どのようなタイミングで実行されてもよいが、例えば、コンパクション部６４によりコンパクションの実行が必要となったときに実行される。
【００５８】
破棄部６５は、破棄するか否かの判断対象とするブロックを選択する（ステップＳ１０１）。例えば、コンパクションの実行時にデータ破棄処理が実行される場合は、破棄部６５は、コンパクションの実行対象として選択されたブロックを、破棄するかの判断対象として選択する。
【００５９】
破棄部６５は、選択したブロックに含まれる未処理のページを選択する（ステップＳ１０２）。ページの選択方法は任意である。例えば、破棄部６５は、ブロックの先頭から順にページを選択する。破棄部６５は、選択したページが有効ページであるか否かを判断する（ステップＳ１０３）。有効ページである場合（ステップＳ１０３：Ｙｅｓ）、破棄部６５は、当該有効ページが破棄可能なページであるか否かを判断する（ステップＳ１０４）。破棄部６５は、例えば図３に示すようなＬＢＡテーブルを参照し、選択したページのページ番号に対応する判別情報を用いて、破棄可能か否かを判断する。
【００６０】
破棄可能な場合（ステップＳ１０４：Ｙｅｓ）、破棄部６５は、当該有効ページのデータを実際に破棄するか否かを判断する（ステップＳ１０５）。例えば、破棄部６５は、ブロック内で破棄したデータ数が予め定められた規定数を超えた場合に、データは破棄しないと判断する。なお、判断基準はこれに限られるものではない。また、本ステップを実行せずに、破棄可能なページ（データ）をすべて破棄するように構成してもよい。
【００６１】
有効ページを破棄すると判断された場合（ステップＳ１０５：Ｙｅｓ）、破棄部６５は、当該有効ページを破棄する（ステップＳ１０６）。例えば、破棄部６５は、当該有効ページの論理アドレスに対応するＬＢＡテーブルのエントリを、破棄されたことを示す情報に更新する。例えば、破棄部６５は、当該有効ページの論理アドレスに対応するブロック番号を、破棄されたことを示す予め定められた値に更新する。これにより、例えば破棄されたデータの読み出しがホスト１０から要求された場合、ＮＡＮＤ制御部６２は、要求されたデータの論理アドレスに対応するブロック番号を参照することにより、当該データが破棄されたことを判断できる。そして、ＮＡＮＤ制御部６２は、要求されたデータを読み出せないことを示す応答を、ホストインタフェース部６０を介して要求元（ホスト１０）に出力することができる。
【００６２】
有効ページを破棄しないと判断された場合（ステップＳ１０５：Ｎｏ）、および、有効ページが破棄可能でない場合（ステップＳ１０４：Ｎｏ）、コンパクション部６４は、当該有効ページを、フリーブロックに移動させる（ステップＳ１０７）。更新部６３は、ＬＢＡテーブルの物理アドレスを、有効データを移動した先のページの物理アドレスに更新する（ステップＳ１０８）。
【００６３】
ステップＳ１０３で有効ページでないと判断された場合（ステップＳ１０３：Ｎｏ）、ステップＳ１０６、および、ステップＳ１０８の後、破棄部６５は、選択したブロック内のすべてのページを処理したか否かを判断する（ステップＳ１０９）。処理していない場合（ステップＳ１０９：Ｎｏ）、ステップＳ１０２に戻り処理を繰り返す。すべてのページを処理した場合（ステップＳ１０９：Ｙｅｓ）、データ破棄処理を終了する。
【００６４】
（変形例）
上記実施形態では、破棄可能なデータ（ページ）と、破棄不可能なデータ（ページ）とを同一のブロック内に混在できる例を説明した。変形例では、破棄可能なデータ（ページ）と、破棄不可能なデータ（ページ）とを同一のブロック内に混在できないように構成する。
【００６５】
図７は、変形例のビットベクタテーブルの構成例を示す図である。変形例のビットベクタテーブルは、ブロック番号およびビットベクタに対して、判別情報を対応づけて記憶する。このように、本変形例では、判別情報をページ単位ではなく、ブロック単位で記憶する。なお、変形例では、ＬＢＡテーブル内の判別情報は不要となる。
【００６６】
ブロックに記憶されたデータが、破棄可能なデータであるか、破棄不可能なデータであるかを判別できれば、ビットベクタテーブルに判別情報を記憶する方法以外の方法を用いてもよい。例えば、ビットベクタテーブルとは異なるテーブルに、ブロックごとの判別情報を記憶するように構成してもよい。
【００６７】
次に、本変形例でのデータ破棄処理について図８を用いて説明する。図８は、本変形例におけるデータ破棄処理の全体の流れを示すフローチャートである。
【００６８】
破棄部６５は、破棄するか否かの判断対象とするブロックを選択する（ステップＳ２０１）。破棄部６５は、選択したブロックが破棄可能なブロックであるか否かを判断する（ステップＳ２０２）。破棄部６５は、例えば図７に示すようなビットベクタテーブルを参照し、選択したブロックのブロック番号に対応する判別情報を用いて、破棄可能か否かを判断する。
【００６９】
破棄可能な場合（ステップＳ２０２：Ｙｅｓ）、破棄部６５は、当該ブロックのデータを実際に破棄するか否かを判断する（ステップＳ２０３）。本ステップを実行せずに、破棄可能なブロック（データ）をすべて破棄するように構成してもよい。
【００７０】
ブロックを破棄すると判断された場合（ステップＳ２０３：Ｙｅｓ）、破棄部６５は、当該ブロックを破棄する（ステップＳ２０４）。例えば、破棄部６５は、当該ブロック内の各データの論理アドレスに対応するＬＢＡテーブルのエントリを、破棄されたことを示す情報に更新する。
【００７１】
ブロックを破棄しないと判断された場合（ステップＳ２０３：Ｎｏ）、および、ブロックが破棄可能でない場合（ステップＳ２０２：Ｎｏ）、コンパクション部６４は、当該ブロック内の有効ページを、フリーブロックに移動させる（ステップＳ２０５）。更新部６３は、ＬＢＡテーブルの物理アドレスを、有効データを移動した先のページの物理アドレスに更新し（ステップＳ２０６）、データ破棄処理を終了する。
【００７２】
以上説明したとおり、本実施形態によれば、上位（ホスト）からの指示に拠らずに自身の判断でデータを破棄することができる。これにより、コンパクションや誤り訂正処理などの負荷を低減し、処理の高速化が可能となる。
【００７３】
本実施形態にかかる半導体記憶装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact  Disk  Recordable）、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供される。
【００７４】
また、本実施形態にかかる半導体記憶装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかる半導体記憶装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【００７５】
また、本実施形態のプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【００７６】
本実施形態にかかる半導体記憶装置で実行されるプログラムは、上述した各部を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ５１（プロセッサ）が上記記憶媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
【００７７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７８】
１０  ホスト
５０  半導体記憶装置
５１  プロセッサ
５３  メモリコントローラ
５４  ＤＲＡＭ
５５  ＳＡＴＡ／ＳＡＳインタフェース
５６  バス
５７Ａ〜５７Ｆ  ＮＡＮＤコントローラ
５８Ａ〜５８Ｆ  ＮＡＮＤ
５９  インタフェース
６０  ホストインタフェース部
６１  記憶部
６２  ＮＡＮＤ制御部
６３  更新部
６４  コンパクション部
６５  破棄部
【図１】
0005687648.tif 000002
【図２】
0005687648.tif 000003
【図３】
0005687648.tif 000004
【図４】
0005687648.tif 000005
【図５】
0005687648.tif 000006
【図６】
0005687648.tif 000007
【図７】
0005687648.tif 000008
【図８】
0005687648.tif 000009