以下、本発明の実施の形態について、図面を用いて詳細に説明する。なお、異なる図面において同一の符号を付した要素は、同一又は相応する要素を示すものとする。
図1は、本発明の実施の形態に係る半導体記憶装置1のシステム構成を簡略化して示す図である。図1に示すように半導体記憶装置1は、制御部2と、制御部2によって制御される記憶部3とを備えている。記憶部3は、例えばNAND型のフラッシュメモリによって構成されている。記憶部3は複数のブロックに分割されており、各ブロックには複数のページが含まれている。NAND型フラッシュメモリにおいて、ページはデータの書き込み及び読み出しの最小単位であり、ブロックはデータの消去の最小単位である。
図2は、記憶部3のメモリマップを簡略化して示す図である。図2に示すように記憶部3は、ユーザデータ領域R1、管理領域R2、浮遊領域R3、及び初期不良ブロック領域R4に区分される。ユーザデータ領域R1には、ユーザデータが格納されるブロックである複数のユーザデータ格納ブロック11が含まれる。管理領域R2には、記憶部3を管理するための管理情報が格納されるブロックである複数の管理情報格納ブロック12が含まれる。初期不良ブロック領域R4には、製造時に発生した初期不良ブロック14が含まれる。
浮遊領域R3には、複数の浮遊ブロック13が含まれる。浮遊ブロック13は、テンポラリデータ格納ブロック又は代替ブロックとして使用される。具体的に制御部2は、使用時に後発不良ブロックが発生した場合に、当該後発不良ブロックと代替するための代替ブロックとして浮遊ブロック13を使用する。また、制御部2は、全ての浮遊ブロック13のうちその時点で代替ブロックとして使用されていない残余の浮遊ブロック13を、ユーザデータを一時的に格納するためのテンポラリデータ格納ブロックとして使用する。テンポラリデータ格納ブロックは、ページ単位での論物変換(論理−物理アドレス変換)によってデータを管理するためのページ論物領域として使用することができる。なお、後発不良には、データを完全に消去できない消去エラー、データの書き込み時にビットエラーが発生する書き込みエラー、及び、データの読み出し時に閾値以上のビットエラーが発生する読み出しエラーが含まれる。
図3は、制御部2の構成を簡略化して示す図である。図3に示すように制御部2は、SRAM21及びメモリコントローラ22を備えて構成されている。SRAM21内には、ブロック論物変換テーブル31、ページ論物変換テーブル32、及び浮遊ブロック管理情報33が格納されている。
ブロック論物変換テーブル31は、ブロック単位で論物変換を行うためのテーブルである。ページ論物変換テーブル32は、ページ単位で論物変換を行うためのテーブルである。
浮遊ブロック管理情報33は、浮遊ブロック13の物理ブロックアドレスが格納される待ち行列である。待ち行列としては、例えばFIFO(First In First Out)方式のキューを使用することができる。FIFO方式のキューを使用することによって、浮遊ブロック13の使用頻度が分散され、その結果、ライフタイムの向上を図ることができる。浮遊ブロック管理情報33には、全ての浮遊ブロック13のうち、代替ブロックとしてもテンポラリデータ格納ブロックとしても使用されていない未使用の浮遊ブロック13の物理ブロックアドレスが格納される。
未使用の浮遊ブロック13が代替ブロック又はテンポラリデータ格納ブロックとして使用されると、浮遊ブロック管理情報33に格納されている当該浮遊ブロック13の物理ブロックアドレスが、浮遊ブロック管理情報33から削除される。また、テンポラリデータ格納ブロックとして使用されている浮遊ブロック13のデータが消去されることにより当該浮遊ブロック13が空きブロックとなった場合には、当該浮遊ブロック13の物理ブロックアドレスが浮遊ブロック管理情報33に追加される。また、後述するガベージコレクション(garbage collection)によって浮遊領域R3内に新たな空きブロックが生成された場合には、当該空きブロックの物理ブロックアドレスが浮遊ブロック管理情報33に追加される。
ブロック論物変換テーブル31、ページ論物変換テーブル32、及び浮遊ブロック管理情報33は、記憶部3の管理領域R2に格納されており、半導体記憶装置1の電源を投入した直後に実行される起動処理において、メモリコントローラ22によって管理領域R2からSRAM21に読み出される。なお、ブロック論物変換テーブル31、ページ論物変換テーブル32、及び浮遊ブロック管理情報33は、必ずしも記憶部3に格納されている必要はなく、記憶部3とは別の再書き込み可能な不揮発性の記憶媒体(フラッシュメモリ等)に格納されていても良い。
図4は、外部のホストコンピュータ等からデータの書き込み要求を受領した場合にメモリコントローラ22が実行する処理の流れを示すフローチャートである。
まずステップSP101においてメモリコントローラ22は、書き込み要求があったデータ(以下「書き込み対象データ」と称す)の論理ブロックアドレスに対して、テンポラリデータ格納ブロックが既に割り当てられているか否かを判定する。
テンポラリデータ格納ブロックが既に割り当てられている場合(つまりステップSP101の判定結果が「YES」である場合)には、次にステップSP102においてメモリコントローラ22は、当該テンポラリデータ格納ブロック内に、書き込み対象データを格納し得る空きページ(消去済みページ)が存在しているか否かを判定する。
空きページが存在している場合(つまりステップSP102の判定結果が「YES」である場合)には、次にステップSP106においてメモリコントローラ22は、書き込み対象データを当該空きページに書き込む。
テンポラリデータ格納ブロックが割り当てられていない場合(つまりステップSP101の判定結果が「NO」である場合)、又は、空きページが存在していない場合(つまりステップSP102の判定結果が「NO」である場合)には、次にステップSP103においてメモリコントローラ22は、SRAM21内の浮遊ブロック管理情報33を確認することによって、未使用の浮遊ブロック数が所定の閾値TH1(例えば「2ブロック」)以下であるか否かを判定する。なお、閾値TH1は「3ブロック」以上に設定しても良い。
未使用の浮遊ブロック数が閾値TH1より多い場合(つまりステップSP103の判定結果が「NO」である場合)には、次にステップSP105においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から選択した一つの浮遊ブロック13を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内の浮遊ブロック管理情報33を更新するとともに、管理領域R2内の浮遊ブロック管理情報33も同様に更新する。
図5は、テンポラリデータ格納ブロックの割り当て処理の第1の例を示す図である。説明の簡単化のため、浮遊領域R3にブロックB01〜B12が含まれる例を示している。この例において、ブロックB01〜B04は既にテンポラリデータ格納ブロックとして使用されており、ブロックB11,B12は既に代替ブロックとして使用されている。従って、ブロックB05〜B10は未使用の浮遊ブロックであり、未使用の浮遊ブロック数は閾値TH1より多い。メモリコントローラ22は、未使用の浮遊ブロックB05〜B10の中から選択した一つの浮遊ブロックB05を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。
一方、未使用の浮遊ブロック数が閾値TH1以下である場合(つまりステップSP103の判定結果が「YES」である場合)には、次にステップSP104においてメモリコントローラ22は、浮遊領域R3を対象とするガベージコレクションを行うことによって、浮遊領域R3内に空きブロックを生成する。ガベージコレクションによる空きブロックの生成アルゴリズムとしては、任意のものを使用することができる。例えば、不連続の空きページを1ブロックサイズ以上連続させることによって、新たな空きブロックを生成する。その後、メモリコントローラ22は、空きブロックの生成によって確保された新たな浮遊ブロック13の物理ブロックアドレスを、浮遊ブロック管理情報33に追加する。
次にステップSP105においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から選択した一つの浮遊ブロック13を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内の浮遊ブロック管理情報33を更新するとともに、管理領域R2内の浮遊ブロック管理情報33も同様に更新する。
図6は、テンポラリデータ格納ブロックの割り当て処理の第2の例を示す図である。この例において、ブロックB01〜B09は既にテンポラリデータ格納ブロックとして使用されており、ブロックB11,B12は既に代替ブロックとして使用されている。従って、未使用の浮遊ブロックはブロックB10のみであり、未使用の浮遊ブロック数は閾値TH1以下である。メモリコントローラ22は、ブロックB01〜B09を対象とするガベージコレクションを行うことによって新たな空きブロック(この例ではブロックB08,B09)を生成する。そして、未使用の浮遊ブロックB08〜B10の中から選択した一つの浮遊ブロックB08を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。
次にステップSP106においてメモリコントローラ22は、ステップSP105で割り当てられたテンポラリデータ格納ブロックに、書き込み対象データを書き込む。
次にステップSP107においてメモリコントローラ22は、SRAM21内のページ論物変換テーブル32を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内のページ論物変換テーブル32を更新するとともに、管理領域R2内のページ論物変換テーブル32も同様に更新する。
図7は、後発不良ブロックが発生した場合にメモリコントローラ22が実行する処理の流れを示すフローチャートである。
まずステップSP201においてメモリコントローラ22は、SRAM21内の浮遊ブロック管理情報33を確認することによって、未使用の浮遊ブロック数が所定の閾値TH1以下であるか否かを判定する。
未使用の浮遊ブロック数が閾値TH1より多い場合(つまりステップSP201の判定結果が「NO」である場合)には、次にステップSP203においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から選択した一つの浮遊ブロック13を、後発不良ブロックの代替ブロックとして割り当てる。そして、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内の浮遊ブロック管理情報33を更新するとともに、管理領域R2内の浮遊ブロック管理情報33も同様に更新する。
図8は、代替ブロックの割り当て処理の第1の例を示す図である。この例において、ブロックB01〜B04は既にテンポラリデータ格納ブロックとして使用されており、ブロックB11,B12は既に代替ブロックとして使用されている。従って、ブロックB05〜B10は未使用の浮遊ブロックであり、未使用の浮遊ブロック数は閾値TH1より多い。メモリコントローラ22は、未使用の浮遊ブロックB05〜B10の中から選択した一つの浮遊ブロックB10を、後発不良ブロックの代替ブロックとして割り当てる。
一方、未使用の浮遊ブロック数が閾値TH1以下である場合(つまりステップSP201の判定結果が「YES」である場合)には、次にステップSP202においてメモリコントローラ22は、浮遊領域R3を対象とするガベージコレクションを行うことによって、浮遊領域R3内に空きブロックを生成する。その後、メモリコントローラ22は、空きブロックの生成によって確保された新たな浮遊ブロック13の物理ブロックアドレスを、浮遊ブロック管理情報33に追加する。
次にステップSP203においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から選択した一つの浮遊ブロック13を、後発不良ブロックの代替ブロックとして割り当てる。そして、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内の浮遊ブロック管理情報33を更新するとともに、管理領域R2内の浮遊ブロック管理情報33も同様に更新する。
図9は、代替ブロックの割り当て処理の第2の例を示す図である。この例において、ブロックB01〜B09は既にテンポラリデータ格納ブロックとして使用されており、ブロックB11,B12は既に代替ブロックとして使用されている。従って、未使用の浮遊ブロックはブロックB10のみであり、未使用の浮遊ブロック数は閾値TH1以下である。メモリコントローラ22は、ブロックB01〜B09を対象とするガベージコレクションを行うことによって新たな空きブロック(この例ではブロックB08,B09)を生成する。そして、未使用の浮遊ブロックB08〜B10の中から選択した一つの浮遊ブロックB10を、後発不良ブロックの代替ブロックとして割り当てる。
次にステップSP204においてメモリコントローラ22は、発生した後発不良が消去エラーであるか否かを判定する。後発不良が消去エラーである場合(つまりステップSP204の判定結果が「YES」である場合)には、次にステップSP206においてメモリコントローラ22は、SRAM21内のブロック論物変換テーブル31を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内のブロック論物変換テーブル31を更新するとともに、管理領域R2内のブロック論物変換テーブル31も同様に更新する。
一方、後発不良が書き込みエラー又は読み出しエラーである場合(つまりステップSP204の判定結果が「NO」である場合)には、次にステップSP205においてメモリコントローラ22は、ブロックの代替処理を実行する。つまり、後発不良が発生したブロックに格納されているデータを、ステップSP203で割り当てた代替ブロックにコピーする。次にステップSP206においてメモリコントローラ22は、SRAM21内のブロック論物変換テーブル31を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内のブロック論物変換テーブル31を更新するとともに、管理領域R2内のブロック論物変換テーブル31も同様に更新する。
なお、以上の説明では、ガベージコレクションによる空きブロックの生成処理(ステップSP104,SP202)を、浮遊ブロック13の割り当て処理(ステップSP105,SP203)より前に実行する例について述べた。この例に限らず、空きブロックの生成処理は浮遊ブロック13の割り当て処理より後に実行しても良い。
また、ガベージコレクションの実行タイミングは、ホストコンピュータに対する半導体記憶装置1の動作中であっても良いし、アイドル中であっても良い。
また、ガベージコレクションの対象領域は、テンポラリデータ格納ブロックとして使用されている全ての浮遊ブロック13であっても良いし、その中の一部の浮遊ブロック13であっても良い。
また、以上の説明では、SRAM21内の浮遊ブロック管理情報33が更新されると、管理領域R2内の浮遊ブロック管理情報33もそれに同期して更新する例について述べた。この例に限らず、管理領域R2内の浮遊ブロック管理情報33は、前回の更新時から一定時間が経過したタイミング、書き込み回数が所定回数に達したタイミング、又は、半導体記憶装置1の電源をオフする直前のタイミング等の、所定のタイミングで更新しても良い。ブロック論物変換テーブル31及びページ論物変換テーブル32についても同様である。
また、以上の説明では、浮遊領域R3内に存在している全ての未使用の浮遊ブロック13の物理ブロックアドレスを、浮遊ブロック管理情報33に格納する例について述べた。この例に限らず、一部の浮遊ブロック13については、浮遊ブロック管理情報33への物理ブロックアドレスの格納を省略しても良い。また、必要になった場合には、浮遊領域R3の中で消去状態の浮遊ブロック13を探索し、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33に追加しても良い。なお、あるブロックが消去状態であるか否かは、例えば、サイドバンド及びデータ領域の値が「FFh」であればそのブロックは消去状態であり、それ以外であれば消去状態でないと判定することができる。
<発展例>
上記実施の形態では、未使用の浮遊ブロック数が閾値TH1以下である場合には、浮遊領域R3を対象とするガベージコレクションを行うことによって、浮遊領域R3内で新たな空きブロックを確保する例について説明した。この例に限らず、浮遊領域R3内での空きブロックの確保に代えて、あるいは浮遊領域R3内での空きブロックの確保に加えて、ユーザデータ領域R1で新たな空きブロックを確保しても良い。例えば、浮遊領域R3内では空きブロックを確保できなかった場合に、ユーザデータ領域R1で空きブロックを確保する処理を実行する。
以下、上記実施の形態との相違点を中心に、ユーザデータ領域R1で空きブロックを確保する処理について説明する。
図10は、制御部2の構成を簡略化して示す図である。SRAM21内には、ブロック論物変換テーブル31、ページ論物変換テーブル32、浮遊ブロック管理情報33、及び貸付テーブル34が格納されている。貸付テーブル34には、浮遊ブロックとして割り当てられたユーザデータ格納ブロック(以下「貸付ブロック」と称す)の物理ブロックアドレスに対応する論理ブロックアドレスが格納される。貸付テーブル34は、記憶部3の管理領域R2に格納されており、半導体装置1の電源が投入された直後に実行される起動処理において、メモリコントローラ22によって管理領域R2からSRAM21に読み出される。なお、貸付テーブル34は、必ずしも記憶部3に格納されている必要はなく、記憶部3とは別の再書き込み可能な不揮発性の記憶媒体(フラッシュメモリ等)に格納されていても良い。
図11は、外部のホストコンピュータ等からデータの書き込み要求を受領した場合にメモリコントローラ22が実行する処理の流れを示すフローチャートである。
まずステップSP301においてメモリコントローラ22は、書き込み対象データの論理ブロックアドレスが貸付テーブル34に格納されているか否かを判定する。
書き込み対象データの論理ブロックアドレスが貸付テーブル34に格納されている場合(つまりステップSP301の判定結果が「YES」である場合)には、次にステップSP302においてメモリコントローラ22は、貸付ブロックの開放処理を実行する。貸付ブロックの開放処理については、後述の図13を用いて詳細に説明する。
一方、書き込み対象データの論理ブロックアドレスが貸付テーブル34に格納されていない場合(つまりステップSP301の判定結果が「NO」である場合)には、次にステップSP303においてメモリコントローラ22は、書き込み対象データの論理ブロックアドレスに対してテンポラリデータ格納ブロックが既に割り当てられているか否かを判定する。
テンポラリデータ格納ブロックが既に割り当てられている場合(つまりステップSP303の判定結果が「YES」である場合)には、次にステップSP304においてメモリコントローラ22は、当該テンポラリデータ格納ブロック内に、書き込み対象データを格納し得る空きページが存在しているか否かを判定する。
空きページが存在している場合(つまりステップSP304の判定結果が「YES」である場合)には、次にステップSP311においてメモリコントローラ22は、書き込み対象データを当該空きページに書き込む。
テンポラリデータ格納ブロックが割り当てられていない場合(つまりステップSP303の判定結果が「NO」である場合)、又は、空きページが存在していない場合(つまりステップSP304の判定結果が「NO」である場合)には、次にステップSP305においてメモリコントローラ22は、SRAM21内の浮遊ブロック管理情報33を確認することによって、未使用の浮遊ブロック数が所定の閾値TH2(例えば「2ブロック」)以下であるか否かを判定する。なお、閾値TH2は「3ブロック」以上に設定しても良い。
未使用の浮遊ブロック数が閾値TH2より多い場合(つまりステップSP305の判定結果が「NO」である場合)には、次にステップSP310においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から選択した一つの浮遊ブロック13を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。
一方、未使用の浮遊ブロック数が閾値TH2以下である場合(つまりステップSP305の判定結果が「YES」である場合)には、次にステップSP306においてメモリコントローラ22は、既に貸付ブロックとして割り当てられているブロックを除いた残り全てのユーザデータ格納ブロック11を対象とする探索を行うことにより、ユーザデータ領域R1内に未使用のユーザデータ格納ブロック11が存在するか否かを判定する。
未使用のユーザデータ格納ブロック11が存在する場合(つまりステップSP306の判定結果が「YES」である場合)には、次にステップSP307においてメモリコントローラ22は、未使用のユーザデータ格納ブロック11を、新たな浮遊ブロック13として割り当てる。その後、メモリコントローラ22は、未使用ブロックの探索によって確保された新たな浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33に追加することによって、SRAM21内の浮遊ブロック管理情報33を更新する。
次にステップSP308においてメモリコントローラ22は、浮遊ブロック13として割り当てられたユーザデータ格納ブロック11の物理ブロックアドレスに対応する論理ブロックアドレスを貸付テーブル34に追加することによって、SRAM21内の貸付テーブル34を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内の貸付テーブル34を更新するとともに、管理領域R2内の貸付テーブル34も同様に更新する。
未使用のユーザデータ格納ブロック11が存在しない場合(つまりステップSP306の判定結果が「NO」である場合)には、次にステップSP309においてメモリコントローラ22は、ユーザデータ領域R1又は浮遊領域R3を対象とするガベージコレクションを行うことによってユーザデータ領域R1又は浮遊領域R3内に空きブロックを生成し、その空きブロックを新たな浮遊ブロック13として確保する。ここでメモリコントローラ22は、既に貸付ブロックとして割り当てられているユーザデータ格納ブロック11を優先して、ガベージコレクションを実行する。その後、メモリコントローラ22は、空きブロックの生成によって確保された新たな浮遊ブロック13の物理ブロックアドレスを、浮遊ブロック管理情報33に追加する。
次にステップSP310においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から選択した一つの浮遊ブロック13を、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。
次にステップSP311においてメモリコントローラ22は、ステップSP310で割り当てられたテンポラリデータ格納ブロックに、書き込み対象データを書き込む。
次にステップSP312においてメモリコントローラ22は、SRAM21内のページ論物変換テーブル32を更新する。
図12は、後発不良ブロックが発生した場合にメモリコントローラ22が実行する処理の流れを示すフローチャートである。
まずステップSP401においてメモリコントローラ22は、SRAM21内の浮遊ブロック管理情報33を確認することによって、未使用の浮遊ブロック数が所定の閾値TH2以下であるか否かを判定する。
未使用の浮遊ブロック数が閾値TH2より多い場合(つまりステップSP401の判定結果が「NO」である場合)には、次にステップSP406においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から選択した一つの浮遊ブロック13を、後発不良ブロックの代替ブロックとして割り当てる。そして、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。
一方、未使用の浮遊ブロック数が閾値TH2以下である場合(つまりステップSP401の判定結果が「YES」である場合)には、次にステップSP402においてメモリコントローラ22は、既に貸付ブロックとして割り当てられているブロックを除いた残り全てのユーザデータ格納ブロック11を対象とする探索を行うことにより、ユーザデータ領域R1内に未使用のユーザデータ格納ブロック11が存在するか否かを判定する。
未使用のユーザデータ格納ブロック11が存在する場合(つまりステップSP402の判定結果が「YES」である場合)には、次にステップSP403においてメモリコントローラ22は、未使用のユーザデータ格納ブロック11を、新たな浮遊ブロック13として割り当てる。その後、メモリコントローラ22は、未使用ブロックの探索によって確保された新たな浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33に追加することによって、SRAM21内の浮遊ブロック管理情報33を更新する。
次にステップSP404においてメモリコントローラ22は、浮遊ブロック13として割り当てられたユーザデータ格納ブロック11の物理ブロックアドレスに対応する論理ブロックアドレスを貸付テーブル34に追加することによって、SRAM21内の貸付テーブル34を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内の貸付テーブル34を更新するとともに、管理領域R2内の貸付テーブル34も同様に更新する。
未使用のユーザデータ格納ブロック11が存在しない場合(つまりステップSP402の判定結果が「NO」である場合)には、次にステップSP405においてメモリコントローラ22は、ユーザデータ領域R1又は浮遊領域R3を対象とするガベージコレクションを行うことによってユーザデータ領域R1又は浮遊領域R3内に空きブロックを生成し、その空きブロックを新たな浮遊ブロック13として確保する。ここでメモリコントローラ22は、既に貸付ブロックとして割り当てられているユーザデータ格納ブロック11を優先して、ガベージコレクションを実行する。その後、メモリコントローラ22は、空きブロックの生成によって確保された新たな浮遊ブロック13の物理ブロックアドレスを、浮遊ブロック管理情報33に追加する。
次にステップSP406においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から選択した一つの浮遊ブロック13を、後発不良ブロックの代替ブロックとして割り当てる。そして、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。
次にステップSP407においてメモリコントローラ22は、発生した後発不良が消去エラーであるか否かを判定する。後発不良が消去エラーである場合(つまりステップSP407の判定結果が「YES」である場合)には、次にステップSP409においてメモリコントローラ22は、SRAM21内のブロック論物変換テーブル31を更新する。
一方、後発不良が書き込みエラー又は読み出しエラーである場合(つまりステップSP407の判定結果が「NO」である場合)には、次にステップSP408においてメモリコントローラ22は、ブロックの代替処理を実行する。つまり、後発不良が発生したブロックに格納されているデータを、ステップSP406で割り当てた代替ブロックにコピーする。
次にステップSP409においてメモリコントローラ22は、SRAM21内のブロック論物変換テーブル31を更新する。
図13は、貸付ブロックの開放処理(図11のステップSP302)の流れを示すフローチャートである。
まずステップSP501においてメモリコントローラ22は、SRAM21内の浮遊ブロック管理情報33を確認することによって、未使用の浮遊ブロック数が所定の閾値TH2以下であるか否かを判定する。
未使用の浮遊ブロック数が閾値TH2より多い場合(つまりステップSP501の判定結果が「NO」である場合)には、次にステップSP506においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から二つの浮遊ブロック13を選択する。そして、一方の浮遊ブロック13を、書き込み対象データを格納するためのユーザデータ格納ブロックとして割り当て、他方の浮遊ブロックを、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、これら二つの浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。
一方、未使用の浮遊ブロック数が閾値TH2以下である場合(つまりステップSP501の判定結果が「YES」である場合)には、次にステップSP502においてメモリコントローラ22は、既に貸付ブロックとして割り当てられているブロックを除いた残り全てのユーザデータ格納ブロック11を対象とする探索を行うことにより、ユーザデータ領域R1内に未使用のユーザデータ格納ブロック11が存在するか否かを判定する。
未使用のユーザデータ格納ブロック11が存在する場合(つまりステップSP502の判定結果が「YES」である場合)には、次にステップSP503においてメモリコントローラ22は、未使用のユーザデータ格納ブロック11を、新たな浮遊ブロック13として割り当てる。その後、メモリコントローラ22は、未使用ブロックの探索によって確保された新たな浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33に追加することによって、SRAM21内の浮遊ブロック管理情報33を更新する。
次にステップSP504においてメモリコントローラ22は、浮遊ブロック13として割り当てられたユーザデータ格納ブロック11の物理ブロックアドレスに対応する論理ブロックアドレスを貸付テーブル34に追加することによって、SRAM21内の貸付テーブル34を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内の貸付テーブル34を更新するとともに、管理領域R2内の貸付テーブル34も同様に更新する。
未使用のユーザデータ格納ブロック11が存在しない場合(つまりステップSP502の判定結果が「NO」である場合)には、次にステップSP505においてメモリコントローラ22は、ユーザデータ領域R1又は浮遊領域R3を対象とするガベージコレクションを行うことによってユーザデータ領域R1又は浮遊領域R3内に空きブロックを生成し、その空きブロックを新たな浮遊ブロック13として確保する。ここでメモリコントローラ22は、既に貸付ブロックとして割り当てられているユーザデータ格納ブロック11を優先して、ガベージコレクションを実行する。その後、メモリコントローラ22は、空きブロックの生成によって確保された新たな浮遊ブロック13の物理ブロックアドレスを、浮遊ブロック管理情報33に追加する。
次にステップSP506においてメモリコントローラ22は、未使用の複数の浮遊ブロック13の中から二つの浮遊ブロック13を選択する。そして、一方の浮遊ブロック13を、書き込み対象データを格納するためのユーザデータ格納ブロックとして割り当て、他方の浮遊ブロックを、書き込み対象データを格納するためのテンポラリデータ格納ブロックとして割り当てる。そして、これら二つの浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33から削除することによって、SRAM21内の浮遊ブロック管理情報33を更新する。
次にステップSP507においてメモリコントローラ22は、書き込み対象データの論理ブロックアドレスを貸付テーブル34から削除することによって、SRAM21内の貸付テーブル34を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内の貸付テーブル34を更新するとともに、管理領域R2内の貸付テーブル34も同様に更新する。
次にステップSP508においてメモリコントローラ22は、上記した二つの浮遊ブロック13の物理ブロックアドレスに論理ブロックアドレスを割り当てることによって、SRAM21内のブロック論物変換テーブル31を更新する。また、メモリコントローラ22は、予期しない電源断に起因する不整合を回避すべく、SRAM21内のブロック論物変換テーブル31を更新するとともに、管理領域R2内のブロック論物変換テーブル31も同様に更新する。
図14は、貸付ブロックを対象とする読み出し要求を受領した場合にメモリコントローラ22が実行する処理の流れを示すフローチャートである。
まずステップSP601においてメモリコントローラ22は、読み出し対象データの論理ブロックアドレスが貸付テーブル34に格納されているか否かを判定する。
読み出し対象データの論理ブロックアドレスが貸付テーブル34に格納されていない場合(つまりステップSP601の判定結果が「NO」である場合)には、次にステップSP602においてメモリコントローラ22は、通常の読み出し処理を実行する。つまり、読み出し対象データの論理ブロックアドレスに対応する物理ブロックアドレスが付与されているユーザデータ格納ブロック11からデータを読み出す。
一方、読み出し対象データの論理ブロックアドレスが貸付テーブル34に格納されている場合(つまりステップSP601の判定結果が「YES」である場合)には、次にステップSP603においてメモリコントローラ22は、貸付ブロックへのリードアクセスを省略し、予め定められた所定値(例えば「FFh」)を、読み出しデータとして出力する。
なお、以上の説明では、ガベージコレクションによる空きブロックの生成処理(ステップSP309,SP405,SP505)を、浮遊ブロック13の割り当て処理(ステップSP310,SP406,SP506)より前に実行する例について述べた。この例に限らず、空きブロックの生成処理は浮遊ブロック13の割り当て処理より後に実行しても良い。
また、ガベージコレクションの実行タイミングは、ホストコンピュータに対する半導体記憶装置1の動作中であっても良いし、アイドル中であっても良い。
また、ガベージコレクションの対象領域は、全てのユーザデータ格納ブロック11であっても良いし、その中の一部のユーザデータ格納ブロック11であっても良い。
また、以上の説明では、SRAM21内の貸付テーブル34が更新されると、管理領域R2内の貸付テーブル34もそれに同期して更新する例について述べた。この例に限らず、管理領域R2内の貸付テーブル34は、前回の更新時から一定時間が経過したタイミング、書き込み回数が所定回数に達したタイミング、又は、半導体記憶装置1の電源をオフする直前のタイミング等の、所定のタイミングで更新しても良い。
また、以上の説明では、浮遊領域R3内に存在している全ての未使用の浮遊ブロック13の物理ブロックアドレスを、浮遊ブロック管理情報33に格納する例について述べた。この例に限らず、一部の浮遊ブロック13については、浮遊ブロック管理情報33への物理ブロックアドレスの格納を省略しても良い。また、必要になった場合には、浮遊領域R3の中で消去状態の浮遊ブロック13を探索し、その浮遊ブロック13の物理ブロックアドレスを浮遊ブロック管理情報33に追加しても良い。なお、あるブロックが消去状態であるか否かは、例えば、サイドバンド及びデータ領域の値が「FFh」であればそのブロックは消去状態であり、それ以外であれば消去状態でないと判定することができる。
<まとめ>
上記実施の形態に係る半導体記憶装置1によれば、記憶部3は、複数の浮遊ブロック13を含む浮遊領域R3を有する。そして、制御部2は、後発不良ブロックが発生した場合に当該後発不良ブロックと代替するための代替ブロックとして浮遊ブロック13を使用し、また、全ての浮遊ブロック13のうちその時点で代替ブロックとして使用されていない残余の浮遊ブロック13を、ユーザデータを一時的に格納するためのテンポラリデータ格納ブロックとして使用する。従って、後発不良ブロックの数が少ない時点では、残余の浮遊ブロック数が多いため、テンポラリデータ格納ブロックとして使用するブロック数を多く確保することができる。その結果、テンポラリデータ格納ブロックとして使用するブロック数を効率的に拡張できるため、レイテンシ及びライフタイムを改善することが可能となる。
また、上記実施の形態に係る半導体記憶装置1によれば、制御部2は、テンポラリデータ格納ブロックを、ページ単位での論理−物理アドレス変換によってデータを管理するページ論物領域として使用する。ページ論物領域が効率的に拡張されることにより、無駄なブロック消去の発生を抑制できるため、レイテンシ及びライフタイムを改善することが可能となる。
また、上記実施の形態に係る半導体記憶装置1によれば、データの書き込み要求を受領した場合、制御部2は、全ての浮遊ブロック13のうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック13に、当該データを書き込む。代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック13が残存している場合には、当該浮遊ブロック13を新たなテンポラリデータ格納ブロックとして割り当てて当該ブロックにデータを書き込むことにより、テンポラリデータ格納ブロックへのデータの書き込みを簡易に行うことが可能となる。
また、上記実施の形態に係る半導体記憶装置1によれば、データの書き込み要求を受領した場合、制御部2は、当該データに対して割り当てられているテンポラリデータ格納ブロックの空きページに、当該データを書き込む。書き込み要求のあったデータに対して既にテンポラリデータ格納ブロックが割り当てられており、当該テンポラリデータ格納ブロックに空きページが存在している場合には、当該空きページにデータを書き込むことにより、テンポラリデータ格納ブロックへのデータの書き込みを簡易に行うことが可能となる。
また、上記実施の形態に係る半導体記憶装置1によれば、後発不良ブロックが発生した場合、制御部2は、全ての浮遊ブロック13のうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック13を、当該後発不良ブロックの代替ブロックとして使用する。代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック13が残存している場合には、当該浮遊ブロック13を代替ブロックとして使用することにより、後発不良ブロックの代替処理を簡易に行うことが可能となる。
また、上記実施の形態に係る半導体記憶装置1によれば、全ての浮遊ブロック13のうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック13の数が所定の閾値TH1以下となった場合、制御部2は、浮遊領域R3内で空きブロックを生成することにより、新たな浮遊ブロック13を確保する。浮遊領域R3内に確保した新たな浮遊ブロック13を代替ブロック又はテンポラリデータ格納ブロックとして使用することにより、レイテンシ及びライフタイムをさらに改善することが可能となる。
また、上記発展例に係る半導体記憶装置1によれば、全ての浮遊ブロック13のうち代替ブロック及びテンポラリデータ格納ブロックとして使用されていない浮遊ブロック13の数が所定の閾値TH2以下となった場合、制御部2は、全てのユーザデータ格納ブロック11のうち使用されていないユーザデータ格納ブロック11を、浮遊ブロック13として使用する。ユーザデータ領域R1内の未使用のユーザデータ格納ブロック11を浮遊ブロック13として確保し、当該浮遊ブロック13を代替ブロック又はテンポラリデータ格納ブロックとして使用することにより、レイテンシ及びライフタイムをさらに改善することが可能となる。
また、上記発展例に係る半導体記憶装置1によれば、全てのユーザデータ格納ブロック11のうち使用されていないユーザデータ格納ブロックが存在しない場合、制御部2は、ユーザデータ領域R1内で空きブロックを生成することにより、新たな浮遊ブロック13を確保する。ユーザデータ領域R1内に確保した新たな浮遊ブロック13を代替ブロック又はテンポラリデータ格納ブロックとして使用することにより、レイテンシ及びライフタイムをさらに改善することが可能となる。
また、上記発展例に係る半導体記憶装置1によれば、浮遊ブロック13として使用されているユーザデータ格納ブロック11に対するデータの書き込み要求を受領した場合、制御部2は、二つの浮遊ブロック13を確保し、一方の浮遊ブロック13を当該データに対するユーザデータ格納ブロックとして割り当て、他方の浮遊ブロック13を当該データに対するテンポラリデータ格納ブロックとして割り当てる。これにより、浮遊ブロック13として使用されているユーザデータ格納ブロック11に対するデータの書き込み要求を受領した場合であっても、当該データを、割り当てられたユーザデータ格納ブロック及びテンポラリデータ格納ブロックへ書き込むことが可能となる。
また、上記発展例に係る半導体記憶装置1によれば、浮遊ブロック13として使用されているユーザデータ格納ブロック11に対するデータの読み出し要求を受領した場合、制御部2は、予め定められた所定値を、読み出しデータとして出力する。これにより、浮遊ブロック13として使用されているユーザデータ格納ブロック11に対するデータの読み出し要求を受領した場合であっても、読み出しデータを簡易に出力することが可能となる。