(57)【要約】【課題】テンポラリデータ格納ブロックとして使用するブロック数を効率的に拡張することにより、レイテンシ及びライフタイムを改善することが可能な、半導体記憶装置を得る。【解決手段】記憶部３は、複数の浮遊ブロック１３を含む浮遊領域Ｒ３を有する。制御部２は、後発不良ブロックが発生した場合に当該後発不良ブロックと代替するための代替ブロックとして浮遊ブロック１３を使用し、また、全ての浮遊ブロックのうちその時点で代替ブロックとして使用されていない残余の浮遊ブロック１３を、ユーザデータを一時的に格納するためのテンポラリデータ格納ブロックとして使用する。【選択図】図２
2014106718.tif 000002
【特許請求の範囲】
【請求項１】
それぞれに複数のページを含む複数のブロックを有する記憶部と、
前記記憶部を制御する制御部と、
を備え、
前記記憶部は、
ユーザデータが格納されるブロックである複数のユーザデータ格納ブロックを含むユーザデータ領域と、
前記記憶部を管理するための管理情報が格納されるブロックである複数の管理情報格納ブロックを含む管理領域と、
ユーザデータ格納ブロック及び管理情報格納ブロック以外のブロックである複数の浮遊ブロックを含む浮遊領域と、
を有し、
前記制御部は、後発不良ブロックが発生した場合に当該後発不良ブロックと代替するための代替ブロックとして浮遊ブロックを使用し、また、全ての浮遊ブロックのうちその時点で代替ブロックとして使用されていない残余の浮遊ブロックを、ユーザデータを一時的に格納するためのテンポラリデータ格納ブロックとして使用する、半導体記憶装置。
【請求項２】
前記制御部は、テンポラリデータ格納ブロックを、ページ単位での論理−物理アドレス変換によってデータを管理する領域として使用する、請求項１に記載の半導体記憶装置。
【請求項３】
データの書き込み要求を受領した場合、前記制御部は、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックに、当該データを書き込む、請求項１又は２に記載の半導体記憶装置。
【請求項４】
データの書き込み要求を受領した場合、前記制御部は、当該データに対して割り当てられているテンポラリデータ格納ブロックの空きページに、当該データを書き込む、請求項１〜３のいずれか一つに記載の半導体記憶装置。
【請求項５】
後発不良ブロックが発生した場合、前記制御部は、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックを、当該後発不良ブロックの代替ブロックとして使用する、請求項１〜４のいずれか一つに記載の半導体記憶装置。
【請求項６】
全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックの数が所定の閾値以下となった場合、前記制御部は、前記浮遊領域内で空きブロックを生成することにより、新たな浮遊ブロックを確保する、請求項１〜５のいずれか一つに記載の半導体記憶装置。
【請求項７】
全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックの数が所定の閾値以下となった場合、前記制御部は、全てのユーザデータ格納ブロックのうち使用されていないユーザデータ格納ブロックを、浮遊ブロックとして使用する、請求項１〜６のいずれか一つに記載の半導体記憶装置。
【請求項８】
全てのユーザデータ格納ブロックのうち使用されていないユーザデータ格納ブロックが存在しない場合、前記制御部は、前記ユーザデータ領域内で空きブロックを生成することにより、新たな浮遊ブロックを確保する、請求項７に記載の半導体記憶装置。
【請求項９】
浮遊ブロックとして使用されているユーザデータ格納ブロックに対するデータの書き込み要求を受領した場合、前記制御部は、二つの浮遊ブロックを確保し、一方の浮遊ブロックを当該データに対するユーザデータ格納ブロックとして割り当て、他方の浮遊ブロックを当該データに対するテンポラリデータ格納ブロックとして割り当てる、請求項７又は８に記載の半導体記憶装置。
【請求項１０】
浮遊ブロックとして使用されているユーザデータ格納ブロックに対するデータの読み出し要求を受領した場合、前記制御部は、予め定められた所定値を読み出しデータとして出力する、請求項７〜９のいずれか一つに記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体記憶装置に関する。
【背景技術】
【０００２】
一般的に、ＮＡＮＤ型フラッシュメモリの記憶領域は複数のブロックに分割されており、各ブロックには複数のページが含まれている。ＮＡＮＤ型フラッシュメモリにおいて、データの書き込み及び読み出しの最小単位はページであり、データの消去の最小単位はブロックである。
【０００３】
ＮＡＮＤ型フラッシュメモリの記憶領域は、ユーザデータ領域、管理領域、テンポラリデータ格納領域、及び代替領域に区分される。ユーザデータ領域には、ユーザデータが格納されるブロックである複数のユーザデータ格納ブロックが含まれる。管理領域には、記憶部を管理するための管理情報が格納されるブロックである複数の管理情報格納ブロックが含まれる。テンポラリデータ格納領域には、ユーザデータを一時的に格納するための複数のテンポラリデータ格納ブロックが含まれる。代替領域には、初期不良ブロック及び後発不良ブロックと代替するための複数の代替ブロックが含まれる。
【０００４】
ＮＡＮＤ型フラッシュメモリに書き込まれたデータをページ単位で管理する場合には、ブロック単位で論理−物理アドレス変換を行うためのテーブル（以下「ブロック論物変換テーブル」と称す）とは別に、アクセスされたブロックに対してページ単位で論理−物理アドレス変換を行うためのテーブル（以下「ページ論物変換テーブル」と称す）が必要である。ブロック論物変換テーブル及びページ論物変換テーブルは、管理領域に格納される。また、テンポラリデータ格納領域は、ページ単位での論物変換によってデータを管理するための領域（以下「ページ論物領域」と称す）として使用することができる。
【０００５】
なお、下記特許文献１には、ブロック管理システムを伴うフラッシュメモリ等の不揮発性メモリにおいて、データを記録するために開放されている更新ブロックを置換するためのブロック置換手法が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２０１０−５０３９２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述した背景技術に係るＮＡＮＤ型フラッシュメモリにおいて、テンポラリデータ格納領域のブロック数は、ユーザデータ領域、管理領域、及び代替領域の各ブロック数に応じて、上限値が定められている。つまり、ページ論物領域のブロック数が一定の上限値に固定されている。従って、ページ論物領域の上限値を超えるブロックにアクセスが行われた場合には、書き込まれたデータはページ単位ではなくブロック単位で管理されることとなるため、無駄なブロック消去が発生してレイテンシ及びライフタイムの観点から非効率である。
【０００８】
本発明はかかる事情に鑑みて成されたものであり、テンポラリデータ格納ブロックとして使用するブロック数を効率的に拡張することにより、レイテンシ及びライフタイムを改善することが可能な、半導体記憶装置を得ることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の第１の態様に係る半導体記憶装置は、それぞれに複数のページを含む複数のブロックを有する記憶部と、前記記憶部を制御する制御部と、を備え、前記記憶部は、ユーザデータが格納されるブロックである複数のユーザデータ格納ブロックを含むユーザデータ領域と、前記記憶部を管理するための管理情報が格納されるブロックである複数の管理情報格納ブロックを含む管理領域と、ユーザデータ格納ブロック及び管理情報格納ブロック以外のブロックである複数の浮遊ブロックを含む浮遊領域と、を有し、前記制御部は、後発不良ブロックが発生した場合に当該後発不良ブロックと代替するための代替ブロックとして浮遊ブロックを使用し、また、全ての浮遊ブロックのうちその時点で代替ブロックとして使用されていない残余の浮遊ブロックを、ユーザデータを一時的に格納するためのテンポラリデータ格納ブロックとして使用することを特徴とするものである。
【００１０】
第１の態様に係る半導体記憶装置によれば、記憶部は、複数の浮遊ブロックを含む浮遊領域を有する。そして、制御部は、後発不良ブロックが発生した場合に当該後発不良ブロックと代替するための代替ブロックとして浮遊ブロックを使用し、また、全ての浮遊ブロックのうちその時点で代替ブロックとして使用されていない残余の浮遊ブロックを、ユーザデータを一時的に格納するためのテンポラリデータ格納ブロックとして使用する。従って、後発不良ブロックの数が少ない時点では、残余の浮遊ブロック数が多いため、テンポラリデータ格納ブロックとして使用するブロック数を多く確保することができる。その結果、テンポラリデータ格納ブロックとして使用するブロック数を効率的に拡張できるため、レイテンシ及びライフタイムを改善することが可能となる。
【００１１】
本発明の第２の態様に係る半導体記憶装置は、第１の態様に係る半導体記憶装置において特に、前記制御部は、テンポラリデータ格納ブロックを、ページ単位での論理−物理アドレス変換によってデータを管理する領域として使用することを特徴とするものである。
【００１２】
第２の態様に係る半導体記憶装置によれば、制御部は、テンポラリデータ格納ブロックを、ページ単位での論理−物理アドレス変換によってデータを管理する領域（ページ論物領域）として使用する。ページ論物領域が効率的に拡張されることにより、無駄なブロック消去の発生を抑制できるため、レイテンシ及びライフタイムを改善することが可能となる。
【００１３】
本発明の第３の態様に係る半導体記憶装置は、第１又は第２の態様に係る半導体記憶装置において特に、データの書き込み要求を受領した場合、前記制御部は、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックに、当該データを書き込むことを特徴とするものである。
【００１４】
第３の態様に係る半導体記憶装置によれば、データの書き込み要求を受領した場合、制御部は、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックに、当該データを書き込む。代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックが残存している場合には、当該浮遊ブロックを新たなテンポラリデータ格納ブロックとして割り当てて当該ブロックにデータを書き込むことにより、テンポラリデータ格納ブロックへのデータの書き込みを簡易に行うことが可能となる。
【００１５】
本発明の第４の態様に係る半導体記憶装置は、第１〜第３のいずれか一つの態様に係る半導体記憶装置において特に、データの書き込み要求を受領した場合、前記制御部は、当該データに対して割り当てられているテンポラリデータ格納ブロックの空きページに、当該データを書き込むことを特徴とするものである。
【００１６】
第４の態様に係る半導体記憶装置によれば、データの書き込み要求を受領した場合、制御部は、当該データに対して割り当てられているテンポラリデータ格納ブロックの空きページに、当該データを書き込む。書き込み要求のあったデータに対して既にテンポラリデータ格納ブロックが割り当てられており、当該テンポラリデータ格納ブロックに空きページが存在している場合には、当該空きページにデータを書き込むことにより、テンポラリデータ格納ブロックへのデータの書き込みを簡易に行うことが可能となる。
【００１７】
本発明の第５の態様に係る半導体記憶装置は、第１〜第４のいずれか一つの態様に係る半導体記憶装置において特に、後発不良ブロックが発生した場合、前記制御部は、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックを、当該後発不良ブロックの代替ブロックとして使用することを特徴とするものである。
【００１８】
第５の態様に係る半導体記憶装置によれば、後発不良ブロックが発生した場合、制御部は、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックを、当該後発不良ブロックの代替ブロックとして使用する。代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックが残存している場合には、当該浮遊ブロックを代替ブロックとして使用することにより、後発不良ブロックの代替処理を簡易に行うことが可能となる。
【００１９】
本発明の第６の態様に係る半導体記憶装置は、第１〜第５のいずれか一つの態様に係る半導体記憶装置において特に、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックの数が所定の閾値以下となった場合、前記制御部は、前記浮遊領域内で空きブロックを生成することにより、新たな浮遊ブロックを確保することを特徴とするものである。
【００２０】
第６の態様に係る半導体記憶装置によれば、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックの数が所定の閾値以下となった場合、制御部は、浮遊領域内で空きブロックを生成することにより、新たな浮遊ブロックを確保する。浮遊領域内に確保した新たな浮遊ブロックを代替ブロック又はテンポラリデータ格納ブロックとして使用することにより、レイテンシ及びライフタイムをさらに改善することが可能となる。
【００２１】
本発明の第７の態様に係る半導体記憶装置は、第１〜第６のいずれか一つの態様に係る半導体記憶装置において特に、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックの数が所定の閾値以下となった場合、前記制御部は、全てのユーザデータ格納ブロックのうち使用されていないユーザデータ格納ブロックを、浮遊ブロックとして使用することを特徴とするものである。
【００２２】
第７の態様に係る半導体記憶装置によれば、全ての浮遊ブロックのうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロックの数が所定の閾値以下となった場合、制御部は、全てのユーザデータ格納ブロックのうち使用されていないユーザデータ格納ブロックを、浮遊ブロックとして使用する。ユーザデータ領域内の未使用のユーザデータ格納ブロックを浮遊ブロックとして確保し、当該浮遊ブロックを代替ブロック又はテンポラリデータ格納ブロックとして使用することにより、レイテンシ及びライフタイムをさらに改善することが可能となる。
【００２３】
本発明の第８の態様に係る半導体記憶装置は、第７の態様に係る半導体記憶装置において特に、全てのユーザデータ格納ブロックのうち使用されていないユーザデータ格納ブロックが存在しない場合、前記制御部は、前記ユーザデータ領域内で空きブロックを生成することにより、新たな浮遊ブロックを確保することを特徴とするものである。
【００２４】
第８の態様に係る半導体記憶装置によれば、全てのユーザデータ格納ブロックのうち使用されていないユーザデータ格納ブロックが存在しない場合、制御部は、ユーザデータ領域内で空きブロックを生成することにより、新たな浮遊ブロックを確保する。ユーザデータ領域内に確保した新たな浮遊ブロックを代替ブロック又はテンポラリデータ格納ブロックとして使用することにより、レイテンシ及びライフタイムをさらに改善することが可能となる。
【００２５】
本発明の第９の態様に係る半導体記憶装置は、第７又は第８の態様に係る半導体記憶装置において特に、浮遊ブロックとして使用されているユーザデータ格納ブロックに対するデータの書き込み要求を受領した場合、前記制御部は、二つの浮遊ブロックを確保し、一方の浮遊ブロックを当該データに対するユーザデータ格納ブロックとして割り当て、他方の浮遊ブロックを当該データに対するテンポラリデータ格納ブロックとして割り当てることを特徴とするものである。
【００２６】
第９の態様に係る半導体記憶装置によれば、浮遊ブロックとして使用されているユーザデータ格納ブロックに対するデータの書き込み要求を受領した場合、制御部は、二つの浮遊ブロックを確保し、一方の浮遊ブロックを当該データに対するユーザデータ格納ブロックとして割り当て、他方の浮遊ブロックを当該データに対するテンポラリデータ格納ブロックとして割り当てる。これにより、浮遊ブロックとして使用されているユーザデータ格納ブロックに対するデータの書き込み要求を受領した場合であっても、当該データを、割り当てられたユーザデータ格納ブロック及びテンポラリデータ格納ブロックへ書き込むことが可能となる。
【００２７】
本発明の第１０の態様に係る半導体記憶装置は、第７〜第９のいずれか一つの態様に係る半導体記憶装置において特に、浮遊ブロックとして使用されているユーザデータ格納ブロックに対するデータの読み出し要求を受領した場合、前記制御部は、予め定められた所定値を読み出しデータとして出力することを特徴とするものである。
【００２８】
第１０の態様に係る半導体記憶装置によれば、浮遊ブロックとして使用されているユーザデータ格納ブロックに対するデータの読み出し要求を受領した場合、制御部は、予め定められた所定値を読み出しデータとして出力する。これにより、浮遊ブロックとして使用されているユーザデータ格納ブロックに対するデータの読み出し要求を受領した場合であっても、読み出しデータを簡易に出力することが可能となる。
【発明の効果】
【００２９】
本発明によれば、テンポラリデータ格納ブロックとして使用するブロック数を効率的に拡張することにより、レイテンシ及びライフタイムを改善することが可能な、半導体記憶装置を得ることができる。
【図面の簡単な説明】
【００３０】
【図１】本発明の実施の形態に係る半導体記憶装置のシステム構成を簡略化して示す図である。
【図２】記憶部のメモリマップを簡略化して示す図である。
【図３】制御部の構成を簡略化して示す図である。
【図４】データの書き込み要求を受領した場合にメモリコントローラが実行する処理の流れを示すフローチャートである。
【図５】テンポラリデータ格納ブロックの割り当て処理の第１の例を示す図である。
【図６】テンポラリデータ格納ブロックの割り当て処理の第２の例を示す図である。
【図７】後発不良ブロックが発生した場合にメモリコントローラが実行する処理の流れを示すフローチャートである。
【図８】代替ブロックの割り当て処理の第１の例を示す図である。
【図９】代替ブロックの割り当て処理の第２の例を示す図である。
【図１０】制御部の構成を簡略化して示す図である。
【図１１】データの書き込み要求を受領した場合にメモリコントローラが実行する処理の流れを示すフローチャートである。
【図１２】後発不良ブロックが発生した場合にメモリコントローラが実行する処理の流れを示すフローチャートである。
【図１３】貸付ブロックの開放処理の流れを示すフローチャートである。
【図１４】貸付ブロックを対象とする読み出し要求を受領した場合にメモリコントローラが実行する処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００３１】
以下、本発明の実施の形態について、図面を用いて詳細に説明する。なお、異なる図面において同一の符号を付した要素は、同一又は相応する要素を示すものとする。
【００３２】
図１は、本発明の実施の形態に係る半導体記憶装置１のシステム構成を簡略化して示す図である。図１に示すように半導体記憶装置１は、制御部２と、制御部２によって制御される記憶部３とを備えている。記憶部３は、例えばＮＡＮＤ型のフラッシュメモリによって構成されている。記憶部３は複数のブロックに分割されており、各ブロックには複数のページが含まれている。ＮＡＮＤ型フラッシュメモリにおいて、ページはデータの書き込み及び読み出しの最小単位であり、ブロックはデータの消去の最小単位である。
【００３３】
図２は、記憶部３のメモリマップを簡略化して示す図である。図２に示すように記憶部３は、ユーザデータ領域Ｒ１、管理領域Ｒ２、浮遊領域Ｒ３、及び初期不良ブロック領域Ｒ４に区分される。ユーザデータ領域Ｒ１には、ユーザデータが格納されるブロックである複数のユーザデータ格納ブロック１１が含まれる。管理領域Ｒ２には、記憶部３を管理するための管理情報が格納されるブロックである複数の管理情報格納ブロック１２が含まれる。初期不良ブロック領域Ｒ４には、製造時に発生した初期不良ブロック１４が含まれる。
【００３４】
浮遊領域Ｒ３には、複数の浮遊ブロック１３が含まれる。浮遊ブロック１３は、テンポラリデータ格納ブロック又は代替ブロックとして使用される。具体的に制御部２は、使用時に後発不良ブロックが発生した場合に、当該後発不良ブロックと代替するための代替ブロックとして浮遊ブロック１３を使用する。また、制御部２は、全ての浮遊ブロック１３のうちその時点で代替ブロックとして使用されていない残余の浮遊ブロック１３を、ユーザデータを一時的に格納するためのテンポラリデータ格納ブロックとして使用する。テンポラリデータ格納ブロックは、ページ単位での論物変換（論理−物理アドレス変換）によってデータを管理するためのページ論物領域として使用することができる。なお、後発不良には、データを完全に消去できない消去エラー、データの書き込み時にビットエラーが発生する書き込みエラー、及び、データの読み出し時に閾値以上のビットエラーが発生する読み出しエラーが含まれる。
【００３５】
図３は、制御部２の構成を簡略化して示す図である。図３に示すように制御部２は、ＳＲＡＭ２１及びメモリコントローラ２２を備えて構成されている。ＳＲＡＭ２１内には、ブロック論物変換テーブル３１、ページ論物変換テーブル３２、及び浮遊ブロック管理情報３３が格納されている。
【００３６】
ブロック論物変換テーブル３１は、ブロック単位で論物変換を行うためのテーブルである。ページ論物変換テーブル３２は、ページ単位で論物変換を行うためのテーブルである。
【００３７】
浮遊ブロック管理情報３３は、浮遊ブロック１３の物理ブロックアドレスが格納される待ち行列である。待ち行列としては、例えばＦＩＦＯ（First In First Out）方式のキューを使用することができる。ＦＩＦＯ方式のキューを使用することによって、浮遊ブロック１３の使用頻度が分散され、その結果、ライフタイムの向上を図ることができる。浮遊ブロック管理情報３３には、全ての浮遊ブロック１３のうち、代替ブロックとしてもテンポラリデータ格納ブロックとしても使用されていない未使用の浮遊ブロック１３の物理ブロックアドレスが格納される。
【００３８】
未使用の浮遊ブロック１３が代替ブロック又はテンポラリデータ格納ブロックとして使用されると、浮遊ブロック管理情報３３に格納されている当該浮遊ブロック１３の物理ブロックアドレスが、浮遊ブロック管理情報３３から削除される。また、テンポラリデータ格納ブロックとして使用されている浮遊ブロック１３のデータが消去されることにより当該浮遊ブロック１３が空きブロックとなった場合には、当該浮遊ブロック１３の物理ブロックアドレスが浮遊ブロック管理情報３３に追加される。また、後述するガベージコレクション（garbage collection）によって浮遊領域Ｒ３内に新たな空きブロックが生成された場合には、当該空きブロックの物理ブロックアドレスが浮遊ブロック管理情報３３に追加される。
【００３９】
ブロック論物変換テーブル３１、ページ論物変換テーブル３２、及び浮遊ブロック管理情報３３は、記憶部３の管理領域Ｒ２に格納されており、半導体記憶装置１の電源を投入した直後に実行される起動処理において、メモリコントローラ２２によって管理領域Ｒ２からＳＲＡＭ２１に読み出される。なお、ブロック論物変換テーブル３１、ページ論物変換テーブル３２、及び浮遊ブロック管理情報３３は、必ずしも記憶部３に格納されている必要はなく、記憶部３とは別の再書き込み可能な不揮発性の記憶媒体（フラッシュメモリ等）に格納されていても良い。
【００４０】
図４は、外部のホストコンピュータ等からデータの書き込み要求を受領した場合にメモリコントローラ２２が実行する処理の流れを示すフローチャートである。
【００４１】
まずステップＳＰ１０１においてメモリコントローラ２２は、書き込み要求があったデータ（以下「書き込み対象データ」と称す）の論理ブロックアドレスに対して、テンポラリデータ格納ブロックが既に割り当てられているか否かを判定する。
【００４２】
テンポラリデータ格納ブロックが既に割り当てられている場合（つまりステップＳＰ１０１の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ１０２においてメモリコントローラ２２は、当該テンポラリデータ格納ブロック内に、書き込み対象データを格納し得る空きページ（消去済みページ）が存在しているか否かを判定する。
【００４３】
空きページが存在している場合（つまりステップＳＰ１０２の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ１０６においてメモリコントローラ２２は、書き込み対象データを当該空きページに書き込む。
【００４４】
テンポラリデータ格納ブロックが割り当てられていない場合（つまりステップＳＰ１０１の判定結果が「ＮＯ」である場合）、又は、空きページが存在していない場合（つまりステップＳＰ１０２の判定結果が「ＮＯ」である場合）には、次にステップＳＰ１０３においてメモリコントローラ２２は、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を確認することによって、未使用の浮遊ブロック数が所定の閾値ＴＨ１（例えば「２ブロック」）以下であるか否かを判定する。なお、閾値ＴＨ１は「３ブロック」以上に設定しても良い。
【００４５】
未使用の浮遊ブロック数が閾値ＴＨ１より多い場合（つまりステップＳＰ１０３の判定結果が「ＮＯ」である場合）には、次にステップＳＰ１０５においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から選択した一つの浮遊ブロック１３を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新するとともに、管理領域Ｒ２内の浮遊ブロック管理情報３３も同様に更新する。
【００４６】
図５は、テンポラリデータ格納ブロックの割り当て処理の第１の例を示す図である。説明の簡単化のため、浮遊領域Ｒ３にブロックＢ０１〜Ｂ１２が含まれる例を示している。この例において、ブロックＢ０１〜Ｂ０４は既にテンポラリデータ格納ブロックとして使用されており、ブロックＢ１１，Ｂ１２は既に代替ブロックとして使用されている。従って、ブロックＢ０５〜Ｂ１０は未使用の浮遊ブロックであり、未使用の浮遊ブロック数は閾値ＴＨ１より多い。メモリコントローラ２２は、未使用の浮遊ブロックＢ０５〜Ｂ１０の中から選択した一つの浮遊ブロックＢ０５を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。
【００４７】
一方、未使用の浮遊ブロック数が閾値ＴＨ１以下である場合（つまりステップＳＰ１０３の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ１０４においてメモリコントローラ２２は、浮遊領域Ｒ３を対象とするガベージコレクションを行うことによって、浮遊領域Ｒ３内に空きブロックを生成する。ガベージコレクションによる空きブロックの生成アルゴリズムとしては、任意のものを使用することができる。例えば、不連続の空きページを１ブロックサイズ以上連続させることによって、新たな空きブロックを生成する。その後、メモリコントローラ２２は、空きブロックの生成によって確保された新たな浮遊ブロック１３の物理ブロックアドレスを、浮遊ブロック管理情報３３に追加する。
【００４８】
次にステップＳＰ１０５においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から選択した一つの浮遊ブロック１３を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新するとともに、管理領域Ｒ２内の浮遊ブロック管理情報３３も同様に更新する。
【００４９】
図６は、テンポラリデータ格納ブロックの割り当て処理の第２の例を示す図である。この例において、ブロックＢ０１〜Ｂ０９は既にテンポラリデータ格納ブロックとして使用されており、ブロックＢ１１，Ｂ１２は既に代替ブロックとして使用されている。従って、未使用の浮遊ブロックはブロックＢ１０のみであり、未使用の浮遊ブロック数は閾値ＴＨ１以下である。メモリコントローラ２２は、ブロックＢ０１〜Ｂ０９を対象とするガベージコレクションを行うことによって新たな空きブロック（この例ではブロックＢ０８，Ｂ０９）を生成する。そして、未使用の浮遊ブロックＢ０８〜Ｂ１０の中から選択した一つの浮遊ブロックＢ０８を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。
【００５０】
次にステップＳＰ１０６においてメモリコントローラ２２は、ステップＳＰ１０５で割り当てられたテンポラリデータ格納ブロックに、書き込み対象データを書き込む。
【００５１】
次にステップＳＰ１０７においてメモリコントローラ２２は、ＳＲＡＭ２１内のページ論物変換テーブル３２を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内のページ論物変換テーブル３２を更新するとともに、管理領域Ｒ２内のページ論物変換テーブル３２も同様に更新する。
【００５２】
図７は、後発不良ブロックが発生した場合にメモリコントローラ２２が実行する処理の流れを示すフローチャートである。
【００５３】
まずステップＳＰ２０１においてメモリコントローラ２２は、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を確認することによって、未使用の浮遊ブロック数が所定の閾値ＴＨ１以下であるか否かを判定する。
【００５４】
未使用の浮遊ブロック数が閾値ＴＨ１より多い場合（つまりステップＳＰ２０１の判定結果が「ＮＯ」である場合）には、次にステップＳＰ２０３においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から選択した一つの浮遊ブロック１３を、後発不良ブロックの代替ブロックとして割り当てる。そして、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新するとともに、管理領域Ｒ２内の浮遊ブロック管理情報３３も同様に更新する。
【００５５】
図８は、代替ブロックの割り当て処理の第１の例を示す図である。この例において、ブロックＢ０１〜Ｂ０４は既にテンポラリデータ格納ブロックとして使用されており、ブロックＢ１１，Ｂ１２は既に代替ブロックとして使用されている。従って、ブロックＢ０５〜Ｂ１０は未使用の浮遊ブロックであり、未使用の浮遊ブロック数は閾値ＴＨ１より多い。メモリコントローラ２２は、未使用の浮遊ブロックＢ０５〜Ｂ１０の中から選択した一つの浮遊ブロックＢ１０を、後発不良ブロックの代替ブロックとして割り当てる。
【００５６】
一方、未使用の浮遊ブロック数が閾値ＴＨ１以下である場合（つまりステップＳＰ２０１の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ２０２においてメモリコントローラ２２は、浮遊領域Ｒ３を対象とするガベージコレクションを行うことによって、浮遊領域Ｒ３内に空きブロックを生成する。その後、メモリコントローラ２２は、空きブロックの生成によって確保された新たな浮遊ブロック１３の物理ブロックアドレスを、浮遊ブロック管理情報３３に追加する。
【００５７】
次にステップＳＰ２０３においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から選択した一つの浮遊ブロック１３を、後発不良ブロックの代替ブロックとして割り当てる。そして、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新するとともに、管理領域Ｒ２内の浮遊ブロック管理情報３３も同様に更新する。
【００５８】
図９は、代替ブロックの割り当て処理の第２の例を示す図である。この例において、ブロックＢ０１〜Ｂ０９は既にテンポラリデータ格納ブロックとして使用されており、ブロックＢ１１，Ｂ１２は既に代替ブロックとして使用されている。従って、未使用の浮遊ブロックはブロックＢ１０のみであり、未使用の浮遊ブロック数は閾値ＴＨ１以下である。メモリコントローラ２２は、ブロックＢ０１〜Ｂ０９を対象とするガベージコレクションを行うことによって新たな空きブロック（この例ではブロックＢ０８，Ｂ０９）を生成する。そして、未使用の浮遊ブロックＢ０８〜Ｂ１０の中から選択した一つの浮遊ブロックＢ１０を、後発不良ブロックの代替ブロックとして割り当てる。
【００５９】
次にステップＳＰ２０４においてメモリコントローラ２２は、発生した後発不良が消去エラーであるか否かを判定する。後発不良が消去エラーである場合（つまりステップＳＰ２０４の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ２０６においてメモリコントローラ２２は、ＳＲＡＭ２１内のブロック論物変換テーブル３１を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内のブロック論物変換テーブル３１を更新するとともに、管理領域Ｒ２内のブロック論物変換テーブル３１も同様に更新する。
【００６０】
一方、後発不良が書き込みエラー又は読み出しエラーである場合（つまりステップＳＰ２０４の判定結果が「ＮＯ」である場合）には、次にステップＳＰ２０５においてメモリコントローラ２２は、ブロックの代替処理を実行する。つまり、後発不良が発生したブロックに格納されているデータを、ステップＳＰ２０３で割り当てた代替ブロックにコピーする。次にステップＳＰ２０６においてメモリコントローラ２２は、ＳＲＡＭ２１内のブロック論物変換テーブル３１を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内のブロック論物変換テーブル３１を更新するとともに、管理領域Ｒ２内のブロック論物変換テーブル３１も同様に更新する。
【００６１】
なお、以上の説明では、ガベージコレクションによる空きブロックの生成処理（ステップＳＰ１０４，ＳＰ２０２）を、浮遊ブロック１３の割り当て処理（ステップＳＰ１０５，ＳＰ２０３）より前に実行する例について述べた。この例に限らず、空きブロックの生成処理は浮遊ブロック１３の割り当て処理より後に実行しても良い。
【００６２】
また、ガベージコレクションの実行タイミングは、ホストコンピュータに対する半導体記憶装置１の動作中であっても良いし、アイドル中であっても良い。
【００６３】
また、ガベージコレクションの対象領域は、テンポラリデータ格納ブロックとして使用されている全ての浮遊ブロック１３であっても良いし、その中の一部の浮遊ブロック１３であっても良い。
【００６４】
また、以上の説明では、ＳＲＡＭ２１内の浮遊ブロック管理情報３３が更新されると、管理領域Ｒ２内の浮遊ブロック管理情報３３もそれに同期して更新する例について述べた。この例に限らず、管理領域Ｒ２内の浮遊ブロック管理情報３３は、前回の更新時から一定時間が経過したタイミング、書き込み回数が所定回数に達したタイミング、又は、半導体記憶装置１の電源をオフする直前のタイミング等の、所定のタイミングで更新しても良い。ブロック論物変換テーブル３１及びページ論物変換テーブル３２についても同様である。
【００６５】
また、以上の説明では、浮遊領域Ｒ３内に存在している全ての未使用の浮遊ブロック１３の物理ブロックアドレスを、浮遊ブロック管理情報３３に格納する例について述べた。この例に限らず、一部の浮遊ブロック１３については、浮遊ブロック管理情報３３への物理ブロックアドレスの格納を省略しても良い。また、必要になった場合には、浮遊領域Ｒ３の中で消去状態の浮遊ブロック１３を探索し、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３に追加しても良い。なお、あるブロックが消去状態であるか否かは、例えば、サイドバンド及びデータ領域の値が「ＦＦｈ」であればそのブロックは消去状態であり、それ以外であれば消去状態でないと判定することができる。
【００６６】
＜発展例＞
上記実施の形態では、未使用の浮遊ブロック数が閾値ＴＨ１以下である場合には、浮遊領域Ｒ３を対象とするガベージコレクションを行うことによって、浮遊領域Ｒ３内で新たな空きブロックを確保する例について説明した。この例に限らず、浮遊領域Ｒ３内での空きブロックの確保に代えて、あるいは浮遊領域Ｒ３内での空きブロックの確保に加えて、ユーザデータ領域Ｒ１で新たな空きブロックを確保しても良い。例えば、浮遊領域Ｒ３内では空きブロックを確保できなかった場合に、ユーザデータ領域Ｒ１で空きブロックを確保する処理を実行する。
【００６７】
以下、上記実施の形態との相違点を中心に、ユーザデータ領域Ｒ１で空きブロックを確保する処理について説明する。
【００６８】
図１０は、制御部２の構成を簡略化して示す図である。ＳＲＡＭ２１内には、ブロック論物変換テーブル３１、ページ論物変換テーブル３２、浮遊ブロック管理情報３３、及び貸付テーブル３４が格納されている。貸付テーブル３４には、浮遊ブロックとして割り当てられたユーザデータ格納ブロック（以下「貸付ブロック」と称す）の物理ブロックアドレスに対応する論理ブロックアドレスが格納される。貸付テーブル３４は、記憶部３の管理領域Ｒ２に格納されており、半導体装置１の電源が投入された直後に実行される起動処理において、メモリコントローラ２２によって管理領域Ｒ２からＳＲＡＭ２１に読み出される。なお、貸付テーブル３４は、必ずしも記憶部３に格納されている必要はなく、記憶部３とは別の再書き込み可能な不揮発性の記憶媒体（フラッシュメモリ等）に格納されていても良い。
【００６９】
図１１は、外部のホストコンピュータ等からデータの書き込み要求を受領した場合にメモリコントローラ２２が実行する処理の流れを示すフローチャートである。
【００７０】
まずステップＳＰ３０１においてメモリコントローラ２２は、書き込み対象データの論理ブロックアドレスが貸付テーブル３４に格納されているか否かを判定する。
【００７１】
書き込み対象データの論理ブロックアドレスが貸付テーブル３４に格納されている場合（つまりステップＳＰ３０１の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ３０２においてメモリコントローラ２２は、貸付ブロックの開放処理を実行する。貸付ブロックの開放処理については、後述の図１３を用いて詳細に説明する。
【００７２】
一方、書き込み対象データの論理ブロックアドレスが貸付テーブル３４に格納されていない場合（つまりステップＳＰ３０１の判定結果が「ＮＯ」である場合）には、次にステップＳＰ３０３においてメモリコントローラ２２は、書き込み対象データの論理ブロックアドレスに対してテンポラリデータ格納ブロックが既に割り当てられているか否かを判定する。
【００７３】
テンポラリデータ格納ブロックが既に割り当てられている場合（つまりステップＳＰ３０３の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ３０４においてメモリコントローラ２２は、当該テンポラリデータ格納ブロック内に、書き込み対象データを格納し得る空きページが存在しているか否かを判定する。
【００７４】
空きページが存在している場合（つまりステップＳＰ３０４の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ３１１においてメモリコントローラ２２は、書き込み対象データを当該空きページに書き込む。
【００７５】
テンポラリデータ格納ブロックが割り当てられていない場合（つまりステップＳＰ３０３の判定結果が「ＮＯ」である場合）、又は、空きページが存在していない場合（つまりステップＳＰ３０４の判定結果が「ＮＯ」である場合）には、次にステップＳＰ３０５においてメモリコントローラ２２は、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を確認することによって、未使用の浮遊ブロック数が所定の閾値ＴＨ２（例えば「２ブロック」）以下であるか否かを判定する。なお、閾値ＴＨ２は「３ブロック」以上に設定しても良い。
【００７６】
未使用の浮遊ブロック数が閾値ＴＨ２より多い場合（つまりステップＳＰ３０５の判定結果が「ＮＯ」である場合）には、次にステップＳＰ３１０においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から選択した一つの浮遊ブロック１３を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。
【００７７】
一方、未使用の浮遊ブロック数が閾値ＴＨ２以下である場合（つまりステップＳＰ３０５の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ３０６においてメモリコントローラ２２は、既に貸付ブロックとして割り当てられているブロックを除いた残り全てのユーザデータ格納ブロック１１を対象とする探索を行うことにより、ユーザデータ領域Ｒ１内に未使用のユーザデータ格納ブロック１１が存在するか否かを判定する。
【００７８】
未使用のユーザデータ格納ブロック１１が存在する場合（つまりステップＳＰ３０６の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ３０７においてメモリコントローラ２２は、未使用のユーザデータ格納ブロック１１を、新たな浮遊ブロック１３として割り当てる。その後、メモリコントローラ２２は、未使用ブロックの探索によって確保された新たな浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３に追加することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。
【００７９】
次にステップＳＰ３０８においてメモリコントローラ２２は、浮遊ブロック１３として割り当てられたユーザデータ格納ブロック１１の物理ブロックアドレスに対応する論理ブロックアドレスを貸付テーブル３４に追加することによって、ＳＲＡＭ２１内の貸付テーブル３４を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内の貸付テーブル３４を更新するとともに、管理領域Ｒ２内の貸付テーブル３４も同様に更新する。
【００８０】
未使用のユーザデータ格納ブロック１１が存在しない場合（つまりステップＳＰ３０６の判定結果が「ＮＯ」である場合）には、次にステップＳＰ３０９においてメモリコントローラ２２は、ユーザデータ領域Ｒ１又は浮遊領域Ｒ３を対象とするガベージコレクションを行うことによってユーザデータ領域Ｒ１又は浮遊領域Ｒ３内に空きブロックを生成し、その空きブロックを新たな浮遊ブロック１３として確保する。ここでメモリコントローラ２２は、既に貸付ブロックとして割り当てられているユーザデータ格納ブロック１１を優先して、ガベージコレクションを実行する。その後、メモリコントローラ２２は、空きブロックの生成によって確保された新たな浮遊ブロック１３の物理ブロックアドレスを、浮遊ブロック管理情報３３に追加する。
【００８１】
次にステップＳＰ３１０においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から選択した一つの浮遊ブロック１３を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。
【００８２】
次にステップＳＰ３１１においてメモリコントローラ２２は、ステップＳＰ３１０で割り当てられたテンポラリデータ格納ブロックに、書き込み対象データを書き込む。
【００８３】
次にステップＳＰ３１２においてメモリコントローラ２２は、ＳＲＡＭ２１内のページ論物変換テーブル３２を更新する。
【００８４】
図１２は、後発不良ブロックが発生した場合にメモリコントローラ２２が実行する処理の流れを示すフローチャートである。
【００８５】
まずステップＳＰ４０１においてメモリコントローラ２２は、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を確認することによって、未使用の浮遊ブロック数が所定の閾値ＴＨ２以下であるか否かを判定する。
【００８６】
未使用の浮遊ブロック数が閾値ＴＨ２より多い場合（つまりステップＳＰ４０１の判定結果が「ＮＯ」である場合）には、次にステップＳＰ４０６においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から選択した一つの浮遊ブロック１３を、後発不良ブロックの代替ブロックとして割り当てる。そして、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。
【００８７】
一方、未使用の浮遊ブロック数が閾値ＴＨ２以下である場合（つまりステップＳＰ４０１の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ４０２においてメモリコントローラ２２は、既に貸付ブロックとして割り当てられているブロックを除いた残り全てのユーザデータ格納ブロック１１を対象とする探索を行うことにより、ユーザデータ領域Ｒ１内に未使用のユーザデータ格納ブロック１１が存在するか否かを判定する。
【００８８】
未使用のユーザデータ格納ブロック１１が存在する場合（つまりステップＳＰ４０２の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ４０３においてメモリコントローラ２２は、未使用のユーザデータ格納ブロック１１を、新たな浮遊ブロック１３として割り当てる。その後、メモリコントローラ２２は、未使用ブロックの探索によって確保された新たな浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３に追加することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。
【００８９】
次にステップＳＰ４０４においてメモリコントローラ２２は、浮遊ブロック１３として割り当てられたユーザデータ格納ブロック１１の物理ブロックアドレスに対応する論理ブロックアドレスを貸付テーブル３４に追加することによって、ＳＲＡＭ２１内の貸付テーブル３４を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内の貸付テーブル３４を更新するとともに、管理領域Ｒ２内の貸付テーブル３４も同様に更新する。
【００９０】
未使用のユーザデータ格納ブロック１１が存在しない場合（つまりステップＳＰ４０２の判定結果が「ＮＯ」である場合）には、次にステップＳＰ４０５においてメモリコントローラ２２は、ユーザデータ領域Ｒ１又は浮遊領域Ｒ３を対象とするガベージコレクションを行うことによってユーザデータ領域Ｒ１又は浮遊領域Ｒ３内に空きブロックを生成し、その空きブロックを新たな浮遊ブロック１３として確保する。ここでメモリコントローラ２２は、既に貸付ブロックとして割り当てられているユーザデータ格納ブロック１１を優先して、ガベージコレクションを実行する。その後、メモリコントローラ２２は、空きブロックの生成によって確保された新たな浮遊ブロック１３の物理ブロックアドレスを、浮遊ブロック管理情報３３に追加する。
【００９１】
次にステップＳＰ４０６においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から選択した一つの浮遊ブロック１３を、後発不良ブロックの代替ブロックとして割り当てる。そして、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。
【００９２】
次にステップＳＰ４０７においてメモリコントローラ２２は、発生した後発不良が消去エラーであるか否かを判定する。後発不良が消去エラーである場合（つまりステップＳＰ４０７の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ４０９においてメモリコントローラ２２は、ＳＲＡＭ２１内のブロック論物変換テーブル３１を更新する。
【００９３】
一方、後発不良が書き込みエラー又は読み出しエラーである場合（つまりステップＳＰ４０７の判定結果が「ＮＯ」である場合）には、次にステップＳＰ４０８においてメモリコントローラ２２は、ブロックの代替処理を実行する。つまり、後発不良が発生したブロックに格納されているデータを、ステップＳＰ４０６で割り当てた代替ブロックにコピーする。
【００９４】
次にステップＳＰ４０９においてメモリコントローラ２２は、ＳＲＡＭ２１内のブロック論物変換テーブル３１を更新する。
【００９５】
図１３は、貸付ブロックの開放処理（図１１のステップＳＰ３０２）の流れを示すフローチャートである。
【００９６】
まずステップＳＰ５０１においてメモリコントローラ２２は、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を確認することによって、未使用の浮遊ブロック数が所定の閾値ＴＨ２以下であるか否かを判定する。
【００９７】
未使用の浮遊ブロック数が閾値ＴＨ２より多い場合（つまりステップＳＰ５０１の判定結果が「ＮＯ」である場合）には、次にステップＳＰ５０６においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から二つの浮遊ブロック１３を選択する。そして、一方の浮遊ブロック１３を、書き込み対象データを格納するためのユーザデータ格納ブロックとして割り当て、他方の浮遊ブロックを、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、これら二つの浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。
【００９８】
一方、未使用の浮遊ブロック数が閾値ＴＨ２以下である場合（つまりステップＳＰ５０１の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ５０２においてメモリコントローラ２２は、既に貸付ブロックとして割り当てられているブロックを除いた残り全てのユーザデータ格納ブロック１１を対象とする探索を行うことにより、ユーザデータ領域Ｒ１内に未使用のユーザデータ格納ブロック１１が存在するか否かを判定する。
【００９９】
未使用のユーザデータ格納ブロック１１が存在する場合（つまりステップＳＰ５０２の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ５０３においてメモリコントローラ２２は、未使用のユーザデータ格納ブロック１１を、新たな浮遊ブロック１３として割り当てる。その後、メモリコントローラ２２は、未使用ブロックの探索によって確保された新たな浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３に追加することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。
【０１００】
次にステップＳＰ５０４においてメモリコントローラ２２は、浮遊ブロック１３として割り当てられたユーザデータ格納ブロック１１の物理ブロックアドレスに対応する論理ブロックアドレスを貸付テーブル３４に追加することによって、ＳＲＡＭ２１内の貸付テーブル３４を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内の貸付テーブル３４を更新するとともに、管理領域Ｒ２内の貸付テーブル３４も同様に更新する。
【０１０１】
未使用のユーザデータ格納ブロック１１が存在しない場合（つまりステップＳＰ５０２の判定結果が「ＮＯ」である場合）には、次にステップＳＰ５０５においてメモリコントローラ２２は、ユーザデータ領域Ｒ１又は浮遊領域Ｒ３を対象とするガベージコレクションを行うことによってユーザデータ領域Ｒ１又は浮遊領域Ｒ３内に空きブロックを生成し、その空きブロックを新たな浮遊ブロック１３として確保する。ここでメモリコントローラ２２は、既に貸付ブロックとして割り当てられているユーザデータ格納ブロック１１を優先して、ガベージコレクションを実行する。その後、メモリコントローラ２２は、空きブロックの生成によって確保された新たな浮遊ブロック１３の物理ブロックアドレスを、浮遊ブロック管理情報３３に追加する。
【０１０２】
次にステップＳＰ５０６においてメモリコントローラ２２は、未使用の複数の浮遊ブロック１３の中から二つの浮遊ブロック１３を選択する。そして、一方の浮遊ブロック１３を、書き込み対象データを格納するためのユーザデータ格納ブロックとして割り当て、他方の浮遊ブロックを、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、これら二つの浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３から削除することによって、ＳＲＡＭ２１内の浮遊ブロック管理情報３３を更新する。
【０１０３】
次にステップＳＰ５０７においてメモリコントローラ２２は、書き込み対象データの論理ブロックアドレスを貸付テーブル３４から削除することによって、ＳＲＡＭ２１内の貸付テーブル３４を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内の貸付テーブル３４を更新するとともに、管理領域Ｒ２内の貸付テーブル３４も同様に更新する。
【０１０４】
次にステップＳＰ５０８においてメモリコントローラ２２は、上記した二つの浮遊ブロック１３の物理ブロックアドレスに論理ブロックアドレスを割り当てることによって、ＳＲＡＭ２１内のブロック論物変換テーブル３１を更新する。また、メモリコントローラ２２は、予期しない電源断に起因する不整合を回避すべく、ＳＲＡＭ２１内のブロック論物変換テーブル３１を更新するとともに、管理領域Ｒ２内のブロック論物変換テーブル３１も同様に更新する。
【０１０５】
図１４は、貸付ブロックを対象とする読み出し要求を受領した場合にメモリコントローラ２２が実行する処理の流れを示すフローチャートである。
【０１０６】
まずステップＳＰ６０１においてメモリコントローラ２２は、読み出し対象データの論理ブロックアドレスが貸付テーブル３４に格納されているか否かを判定する。
【０１０７】
読み出し対象データの論理ブロックアドレスが貸付テーブル３４に格納されていない場合（つまりステップＳＰ６０１の判定結果が「ＮＯ」である場合）には、次にステップＳＰ６０２においてメモリコントローラ２２は、通常の読み出し処理を実行する。つまり、読み出し対象データの論理ブロックアドレスに対応する物理ブロックアドレスが付与されているユーザデータ格納ブロック１１からデータを読み出す。
【０１０８】
一方、読み出し対象データの論理ブロックアドレスが貸付テーブル３４に格納されている場合（つまりステップＳＰ６０１の判定結果が「ＹＥＳ」である場合）には、次にステップＳＰ６０３においてメモリコントローラ２２は、貸付ブロックへのリードアクセスを省略し、予め定められた所定値（例えば「ＦＦｈ」）を、読み出しデータとして出力する。
【０１０９】
なお、以上の説明では、ガベージコレクションによる空きブロックの生成処理（ステップＳＰ３０９，ＳＰ４０５，ＳＰ５０５）を、浮遊ブロック１３の割り当て処理（ステップＳＰ３１０，ＳＰ４０６，ＳＰ５０６）より前に実行する例について述べた。この例に限らず、空きブロックの生成処理は浮遊ブロック１３の割り当て処理より後に実行しても良い。
【０１１０】
また、ガベージコレクションの実行タイミングは、ホストコンピュータに対する半導体記憶装置１の動作中であっても良いし、アイドル中であっても良い。
【０１１１】
また、ガベージコレクションの対象領域は、全てのユーザデータ格納ブロック１１であっても良いし、その中の一部のユーザデータ格納ブロック１１であっても良い。
【０１１２】
また、以上の説明では、ＳＲＡＭ２１内の貸付テーブル３４が更新されると、管理領域Ｒ２内の貸付テーブル３４もそれに同期して更新する例について述べた。この例に限らず、管理領域Ｒ２内の貸付テーブル３４は、前回の更新時から一定時間が経過したタイミング、書き込み回数が所定回数に達したタイミング、又は、半導体記憶装置１の電源をオフする直前のタイミング等の、所定のタイミングで更新しても良い。
【０１１３】
また、以上の説明では、浮遊領域Ｒ３内に存在している全ての未使用の浮遊ブロック１３の物理ブロックアドレスを、浮遊ブロック管理情報３３に格納する例について述べた。この例に限らず、一部の浮遊ブロック１３については、浮遊ブロック管理情報３３への物理ブロックアドレスの格納を省略しても良い。また、必要になった場合には、浮遊領域Ｒ３の中で消去状態の浮遊ブロック１３を探索し、その浮遊ブロック１３の物理ブロックアドレスを浮遊ブロック管理情報３３に追加しても良い。なお、あるブロックが消去状態であるか否かは、例えば、サイドバンド及びデータ領域の値が「ＦＦｈ」であればそのブロックは消去状態であり、それ以外であれば消去状態でないと判定することができる。
【０１１４】
＜まとめ＞
上記実施の形態に係る半導体記憶装置１によれば、記憶部３は、複数の浮遊ブロック１３を含む浮遊領域Ｒ３を有する。そして、制御部２は、後発不良ブロックが発生した場合に当該後発不良ブロックと代替するための代替ブロックとして浮遊ブロック１３を使用し、また、全ての浮遊ブロック１３のうちその時点で代替ブロックとして使用されていない残余の浮遊ブロック１３を、ユーザデータを一時的に格納するためのテンポラリデータ格納ブロックとして使用する。従って、後発不良ブロックの数が少ない時点では、残余の浮遊ブロック数が多いため、テンポラリデータ格納ブロックとして使用するブロック数を多く確保することができる。その結果、テンポラリデータ格納ブロックとして使用するブロック数を効率的に拡張できるため、レイテンシ及びライフタイムを改善することが可能となる。
【０１１５】
また、上記実施の形態に係る半導体記憶装置１によれば、制御部２は、テンポラリデータ格納ブロックを、ページ単位での論理−物理アドレス変換によってデータを管理するページ論物領域として使用する。ページ論物領域が効率的に拡張されることにより、無駄なブロック消去の発生を抑制できるため、レイテンシ及びライフタイムを改善することが可能となる。
【０１１６】
また、上記実施の形態に係る半導体記憶装置１によれば、データの書き込み要求を受領した場合、制御部２は、全ての浮遊ブロック１３のうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック１３に、当該データを書き込む。代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック１３が残存している場合には、当該浮遊ブロック１３を新たなテンポラリデータ格納ブロックとして割り当てて当該ブロックにデータを書き込むことにより、テンポラリデータ格納ブロックへのデータの書き込みを簡易に行うことが可能となる。
【０１１７】
また、上記実施の形態に係る半導体記憶装置１によれば、データの書き込み要求を受領した場合、制御部２は、当該データに対して割り当てられているテンポラリデータ格納ブロックの空きページに、当該データを書き込む。書き込み要求のあったデータに対して既にテンポラリデータ格納ブロックが割り当てられており、当該テンポラリデータ格納ブロックに空きページが存在している場合には、当該空きページにデータを書き込むことにより、テンポラリデータ格納ブロックへのデータの書き込みを簡易に行うことが可能となる。
【０１１８】
また、上記実施の形態に係る半導体記憶装置１によれば、後発不良ブロックが発生した場合、制御部２は、全ての浮遊ブロック１３のうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック１３を、当該後発不良ブロックの代替ブロックとして使用する。代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック１３が残存している場合には、当該浮遊ブロック１３を代替ブロックとして使用することにより、後発不良ブロックの代替処理を簡易に行うことが可能となる。
【０１１９】
また、上記実施の形態に係る半導体記憶装置１によれば、全ての浮遊ブロック１３のうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック１３の数が所定の閾値ＴＨ１以下となった場合、制御部２は、浮遊領域Ｒ３内で空きブロックを生成することにより、新たな浮遊ブロック１３を確保する。浮遊領域Ｒ３内に確保した新たな浮遊ブロック１３を代替ブロック又はテンポラリデータ格納ブロックとして使用することにより、レイテンシ及びライフタイムをさらに改善することが可能となる。
【０１２０】
また、上記発展例に係る半導体記憶装置１によれば、全ての浮遊ブロック１３のうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック１３の数が所定の閾値ＴＨ２以下となった場合、制御部２は、全てのユーザデータ格納ブロック１１のうち使用されていないユーザデータ格納ブロック１１を、浮遊ブロック１３として使用する。ユーザデータ領域Ｒ１内の未使用のユーザデータ格納ブロック１１を浮遊ブロック１３として確保し、当該浮遊ブロック１３を代替ブロック又はテンポラリデータ格納ブロックとして使用することにより、レイテンシ及びライフタイムをさらに改善することが可能となる。
【０１２１】
また、上記発展例に係る半導体記憶装置１によれば、全てのユーザデータ格納ブロック１１のうち使用されていないユーザデータ格納ブロックが存在しない場合、制御部２は、ユーザデータ領域Ｒ１内で空きブロックを生成することにより、新たな浮遊ブロック１３を確保する。ユーザデータ領域Ｒ１内に確保した新たな浮遊ブロック１３を代替ブロック又はテンポラリデータ格納ブロックとして使用することにより、レイテンシ及びライフタイムをさらに改善することが可能となる。
【０１２２】
また、上記発展例に係る半導体記憶装置１によれば、浮遊ブロック１３として使用されているユーザデータ格納ブロック１１に対するデータの書き込み要求を受領した場合、制御部２は、二つの浮遊ブロック１３を確保し、一方の浮遊ブロック１３を当該データに対するユーザデータ格納ブロックとして割り当て、他方の浮遊ブロック１３を当該データに対するテンポラリデータ格納ブロックとして割り当てる。これにより、浮遊ブロック１３として使用されているユーザデータ格納ブロック１１に対するデータの書き込み要求を受領した場合であっても、当該データを、割り当てられたユーザデータ格納ブロック及びテンポラリデータ格納ブロックへ書き込むことが可能となる。
【０１２３】
また、上記発展例に係る半導体記憶装置１によれば、浮遊ブロック１３として使用されているユーザデータ格納ブロック１１に対するデータの読み出し要求を受領した場合、制御部２は、予め定められた所定値を、読み出しデータとして出力する。これにより、浮遊ブロック１３として使用されているユーザデータ格納ブロック１１に対するデータの読み出し要求を受領した場合であっても、読み出しデータを簡易に出力することが可能となる。
【符号の説明】
【０１２４】
１  半導体記憶装置
２  制御部
３  記憶部
１１  ユーザデータ格納ブロック
１３  浮遊ブロック
Ｒ１  ユーザデータ領域
Ｒ３  浮遊領域
【図１】
2014106718.tif 000003
【図２】
2014106718.tif 000004
【図３】
2014106718.tif 000005
【図４】
2014106718.tif 000006
【図５】
2014106718.tif 000007
【図６】
2014106718.tif 000008
【図７】
2014106718.tif 000009
【図８】
2014106718.tif 000010
【図９】
2014106718.tif 000011
【図１０】
2014106718.tif 000012
【図１１】
2014106718.tif 000013
【図１２】
2014106718.tif 000014
【図１３】
2014106718.tif 000015
【図１４】
2014106718.tif 000016