以下、本実施の形態を図面に基づき説明する。
〔本実施の形態〕
サーバ環境で使用されるRAID構成では、ある特定の記憶装置が故障してデータの読み込みが出来なくなった場合でも、故障した記憶装置に保存していたデータを、その他の記憶装置に保存していたデータから復元することができる。このようなRAID機能を実装するディスクアレイ装置では、耐障害性の向上、また、単体の記憶装置の提供する記憶容量に比してディスクアレイ装置の提供する記憶容量の大容量化を実現している。以下の実施の形態では、フラッシュメモリ等の半導体記憶素子からなるブロックにより、RAIDのような冗長構成を実現する例について説明する。
なお、半導体記憶素子からなる「ブロック」とは、半導体記憶素子群にデータが記録される際の所定の単位である。以下の実施の形態では、データの記録単位と消去の単位とを同一にしている。しかし、データの記録単位は、消去の単位と同一でなくてもよく、適切な単位としても良い。また、図中の「半導体記憶素子」は、本文中の「半導体記憶素子群」に対応する。
また、以下の実施の形態では、主としてウェアレベリング(平準化処理)により、半導体記憶素子群が有するブロックへのデータの書き込み及び消去を行う例について説明する。本発明は、ウェアレベリングによる例に限らず、半導体記憶素子群が有するブロックへのデータの書き込み及び消去を行う際に適用することができる。
(全体ブロック図)
図1は、実施の形態に係る半導体記憶装置1の機能構成の概略を示す図である。半導体記憶装置1は、コントローラ200と半導体記憶素子群9とを有する。コントローラ200は、図示しないホスト装置からの書き込み要求、読み込み要求等のコマンドを受け付ける。コントローラ200は、半導体記憶素子群9に対し、受け付けた要求に応じて所定の処理を実行する。半導体記憶素子群9は、データを記録し、再生する。半導体記憶素子群9は、複数のブロックを有する。各ブロックは複数の半導体記憶素子を有する。
〔第1の実施の形態〕
図2は、本実施形態に係る半導体記憶装置の機能構成を示す図である。本実施形態に係る半導体記憶装置は、ホスト装置に接続されたコントローラ200、及び、半導体記憶素子群9を有する。コントローラ200は、受付部29、第1の記録部28a、第2の記録部28b、第1の書込み部22a、第2の書き込み部22b、及び、読み込み部21を有する。
受付部29は、ホスト装置から書き込み要求を受け付ける。この書き込み要求は、ホスト装置が認識できる論理的なアドレス情報である論理アドレス情報、及び、書き込むべきデータを特定する情報である書き込みデータ特定情報を含む。論理アドレス情報は、ホスト装置が書き込みを要求するアドレスの範囲であるアドレス領域の情報を含む情報である。書き込みデータ特定情報とは、書き込むべきデータそのものや、書き込むべきデータが格納されている記憶場所の情報を含む情報である。
受付部20は、また、ホスト装置から読み込み要求を受け付ける。この読み込み要求は、ホスト装置が認識できる論理的なアドレス情報である論理アドレス情報を含む。論理アドレス情報は少なくともホスト装置が読み込みを要求するアドレスの範囲であるアドレス領域を含む。また、読み込み要求には、読み込んだデータを格納(書き込み)する場所を表す格納場所情報が含まれても良い。
第1の記録部28aは、物理アドレス情報と論理アドレス情報とを対応付けた情報であるアドレス対応付け情報を記録する。物理アドレス情報は半導体記憶素子群9に記録されたデータの物理的なアドレスの情報である。
第2の記録部28bは、半導体記憶素子群9に記憶されたデータに基づいて冗長情報(パリティ)が生成されているか否かを表す情報であるパリティ生成有無情報を記録する。
第1の書き込み部22aは、受付部29で受け付けたデータを半導体記憶素子群9に書き込む。第1の書き込み部22aは、また、書き込んだデータのアドレス対応付け情報を第1の記録部28aに書き込む。第1の書き込み部22aは、また、半導体記憶素子群9に書き込んだデータに関するパリティ生成有無情報を第2の記録部28bに書き込む。
第2の書き込み部22bは、第2の記録部28bに記録されたパリティ生成有無情報を用いて、パリティの生成の基礎となっていないデータを抽出する。第2の書き込み部22bは、抽出されたデータに基づいてパリティを生成する。第2の書き込み部22bは、生成したパリティを半導体記憶素子群に書き込む。第2の書き込み部22bは、また、パリティの生成の基礎となったデータについて、第2の記録部28bに記録されたパリティ生成有無情報を更新する。
読み込み部21は、受付部29で受け付けた読み込み要求に含まれる読み込み対象のデータの論理アドレス情報を抽出し、抽出した論理アドレス情報を用いて第1の記録部28aから物理アドレス情報を抽出する。そして、抽出した物理アドレス情報を用いて、半導体記憶素子群9から読み込み対象のデータを読み出し、受付部29を介してホスト装置に読み込み回答を送付する。ここで、読み込み回答とは、読み込んだデータそのものや、読み込んだデータが格納場所情報で特定される場所に格納が完了した旨の情報を含む情報である。
〔第2の実施の形態〕
本実施の形態における半導体記憶装置の詳細な説明に先んじて、ウェアレベリングについて説明する。ウェアレベリングとは、半導体記憶素子からなるブロックに対するデータの消去の回数を、ブロック間において平準化、すなわちなるべく同数にさせる処理である。
実施の形態において、半導体記憶素子群9が有するブロックは、少なくとも以下の3つの状態の何れか1つであることを表すブロック状態の情報と対応づけられる。
(A1)後に説明するアドレステーブル11にブロック番号が設定されている(以下、この状態を「アドレス割当状態」という)。
(A2)冗長情報、すなわちパリティデータを保持するブロックとして使用されている(以下、この状態を「パリティ割当状態」という)。
(A3)上記(A1)及び(A2)の何れの状態でもなく、未使用状態である(以下、この状態を「未割当状態」という)。
ここで、ブロック番号とはブロックの識別情報である。
なお、「アドレス割当状態のブロック」を「アドレス割当ブロック」といい、「パリティ割当状態のブロック」を「パリティ割当ブロック」といい、「未割当状態のブロック」を「未割当ブロック」という。また、「アドレス割当ブロック」のうち、書き込み処理により「未割当ブロック」になるブロックの、書き込み処理前の状態を「更新前ブロック」ともいう。
(コントローラブロック図)
図3は、図1の半導体記憶装置1が有するコントローラ200の図2とは異なる形態であるコントローラ200aの機能構成を示す図である。図3のコントローラ200aは、書き込み処理部220、読み込み処理部221、その他のコマンド処理部223、誤り訂正制御部260、パリティ制御部230、復元可否判断部250、パリティ生成パトロール部240、読み込みパトロール部241、ブロック制御部210、並び順情報管理部270、キャッシュメモリ293、ホストインタフェース部291、及び、半導体記憶素子インタフェース部292を有する。
なお、以下の実施の形態の説明におけるコントローラのブロック図を含めて、ブロック図中の各部を結ぶ線は、各部間の処理等の関係を示す。但し、線で結ばれない各部間の処理については、図示しない関係を含んでもよい。
書き込み処理部220は、書き込み要求をホスト装置からホストインタフェース部291を介して受け付ける。書き込み要求には、少なくともホスト装置が書き込みを要求するアドレスの範囲であるアドレス領域、書き込むべきデータを特定する情報である書き込みデータ特定情報を含む。書き込みデータ特定情報とは、書き込むべきデータそのものや、書き込むべきデータが格納されている記憶場所の情報を含む情報である。
パリティ制御部230の詳細は後述するが、パリティ生成部31、復元部32、付け替え部33、パリティ対応リスト管理部34、パリティ対応リスト39を有する。
誤り訂正制御部260の詳細は後述するが、誤り検出・訂正情報管理部61、誤り検出情報生成部62、誤り検出部63、誤り訂正情報生成部64、及び、誤り訂正部65を有する。
書き込み処理部220は、書き込むべきデータから誤り訂正制御部260の誤り検出情報生成部62に誤り検出情報を生成することを要求し、要求に対応して誤り検出情報生成部62で生成された誤り検出情報を受け取る。書き込み処理部220は、また、書き込むべきデータから誤り訂正情報生成部64に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正情報生成部64で生成された誤り訂正情報を受け取る。
書き込み処理部220は、後述するブロック制御部210に書き込み先となるブロックを問い合わせる(つまり、未割当ブロックの取り出しを要求する)。
書き込み処理部220は、ブロック制御部210から書き込み先ブロックのブロック番号を受け付けると、半導体記憶素子インタフェース部292を介して半導体記憶素子群9のブロック番号に対応するブロックのデータを消去し、書き込み要求されたデータと誤り検出情報と誤り訂正情報を書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
ここで、平準化処理とは、各ブロックの残り寿命を平準化する処理をいうが、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部210に当該ブロックの平準化情報の更新の要求を行う。
後段でも詳述するが、ブロック制御部210は、アドレス領域とブロック番号とを対応付けた情報であるアドレステーブル11を記憶および管理している。アドレス領域とはホスト装置から送られてくる論理的なアドレスの範囲(領域)の情報をいう。ブロック番号は1つのブロックの番号がアドレス領域と対応付けられている場合もあれば、複数のブロックの番号がアドレス領域と対応付けられている場合もある。このアドレス領域とブロック番号との対応付けは必要に応じて変化する。また、アドレス領域とブロック番号との対応付けを「マッピング」という。
書き込み処理部220は、書き込み要求に含まれるアドレス領域のマッピングを、上記処理により書き込み要求されたデータを書き込んだブロックに変更する。より詳細には、書き込み処理部220は、書き込み要求に含まれるアドレス領域に対応付けられていたブロック(更新前ブロック)のブロック番号を、ブロック制御部210に問い合わせ、書き込み要求に含まれるアドレス領域に対応付けられていた更新前ブロックのブロック番号の削除要求をブロック制御部210に行う。また、上記処理により書き込み要求されたデータを書き込んだブロックのブロック番号を、書き込み要求に含まれるアドレス領域に対応付ける要求をブロック制御部210に行う。
また、書き込み処理部220は、上記更新前ブロックのブロック状態を未割当状態に設定する要求をブロック制御部210に行い、結果として上記更新前ブロックを未割り当てブロックとして回収し、また、書き込み処理部220は、上記処理により書き込み要求されたデータを書き込んだブロックのブロック状態をアドレス割当状態に設定する要求をブロック制御部に行う。
アドレステーブル11が更新されたことに伴い、書き込み処理部220は、並び順情報管理部270にアドレス領域情報テーブルの中で、更新されたアドレス領域について更新を要求する通知であるアドレス領域の更新通知を送る。更新通知に含まれる情報としては、各アドレス領域が更新された旨の情報や各アドレス領域が更新された時期の情報がある。これらの情報が並び順情報管理部270に送られると、並び順情報管理部270が管理する情報として必要な各アドレス領域が更新された回数や更新された順序に加工する。書き込み処理部220は、さらに、書き込み要求の対象となるアドレス領域に、書き込み要求を受け付ける直前に対応付けられていたブロックがパリティグループを構成しているかをパリティ制御部230に問い合わせる。書き込み処理部220は、パリティ制御部230からパリティグループを構成していた旨の回答を得た場合は、そのパリティグループを解体する。
より詳細には、書き込み処理部220は、当該パリティグループを構成しているパリティブロック群のブロック状態を未割り当て状態に設定する要求をブロック制御部210に行い、結果として未割り当てブロックとして回収する。また、当該パリティグループの登録解除要求をパリティ制御部230に行う。
ここで、パリティグループとは、データが記憶された複数のブロックとその複数のブロックに記憶されたデータから生成された冗長データ(パリティデータ)が記憶された1つ以上のブロックを含むグループである。なお、冗長データは所定の方法により生成される。
読み込み処理部221は、読み込み要求をホスト装置からホストインタフェース部291を介して受け付ける。読み込み要求には、少なくともホスト装置が読み込みを要求するアドレスの範囲であるアドレス領域を含む。また、読み込み要求には読み込んだデータを格納(書き込み)する場所を表す格納場所情報が含まれても良い。読み込み処理部221は読み込みを要求されたデータを読み込む。そして、読み込み回答をホストインタフェース部291を介してホスト装置に出力する。ここで、読み込み回答とは、読み込んだデータそのものや、読み込んだデータが格納場所情報で特定される場所に格納が完了した旨の情報を含む情報である。
より詳細には、読み込み処理部221は、読み込み要求に含まれるアドレス領域に基づいて、ブロック制御部210に読み込み要求されているデータが記憶されているブロック番号を問い合わせる。ブロック制御部210から該当するブロック番号を受け付ける。そして、受け付けたブロック番号に基づいて、半導体記憶素子インタフェース部292を介して半導体記憶素子群9から当該ブロック番号により特定されるブロックのデータと特定されるブロックのデータに対応付けて記憶された誤り検出情報と特定されるブロックのデータに対応付けて記憶された誤り訂正情報を読み込む。なお、誤り検出情報と誤り訂正情報の少なくとも一方が書き込まれるブロックとは別のブロックなどに記憶された場合は、誤り検出・訂正情報管理61に読み込むべきデータと対応付けられた誤り検出情報と誤り訂正情報の記憶されている場所を問い合わせて、誤り検出情報と誤り訂正情報を読み込む。
また、読み込み処理部221は、誤り訂正制御部260の誤り検出部63と連携して読み込んだデータが誤っているか否かを判定し、誤っている場合は誤り訂正部65と連携して訂正する。訂正できない場合は、復元可否判断部250に誤り訂正ができなかったデータの復元が可能か否かの判断を要求して可能な場合は誤り訂正ができなかったデータの復元を復元部32に依頼し、復元部32が復元する。
読み込み処理部221は、復元されたデータから誤り検出情報生成部62に誤り検出情報を生成することを要求し、要求に対応して誤り検出情報生成部62で生成された誤り検出情報を受け取る。また、復元されたデータから誤り訂正情報生成部64に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正情報生成部64で生成された誤り訂正情報を受け取る。
読み込み処理部221は、復元できたデータ等を書き込むべきブロック番号をブロック制御部210に問い合わせて(つまり、未割当ブロックの取り出しを要求する)、その回答であるブロック番号を受け付ける。そして、読み込み処理部221は、ブロック番号を受け付けると、半導体記憶素子インタフェース部292を介して半導体記憶素子群9のブロック番号に対応するブロックのデータを消去する。
そして、読み込み処理部221は、ブロック番号で特定されるブロックに復元されたデータと誤り検出情報と誤り訂正情報を半導体記憶素子インタフェース部292を介して半導体記憶素子群9に書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部210に当該ブロックの平準化情報の更新の要求を行う。
そして、読み込み処理部221は、付け替え部33に付け替え要求を行う。ここで、読み込み処理部221が、復元されたデータから誤り検出情報を生成することを誤り検出情報生成部62に要求してから、付け替え部33に付け替え要求を行なうまでの処理をアクセス先変更処理という。
なお、読み込み処理部221は、アクセス先変更処理と同様に、誤り訂正したデータにより、誤り訂正前のデータが記録されているブロックを誤り訂正データを記録したブロックに付け替えてもよい。これにより、さらに誤りの状態が悪くなり、やがて誤り訂正不能になることを防ぐことができる。また、この付け替え処理は、誤り訂正が成功する都度、行う必要はなく、誤りの度合いが所定の閾値を超えたときに行うようにしてもよい。
その他のコマンド処理部223は、書き込み処理及び読み込み処理の他の処理に対応するコマンドを受け付けた際に、そのコマンドに対応する処理を行う。
誤り訂正制御部260は、ブロックから読み出されたデータに対する誤り検出処理と誤り訂正処理とを行う。誤り訂正制御部260は、誤り検出情報の生成や誤り訂正情報の生成を要求されたデータに基づいて、誤り検出情報の生成や誤り訂正情報の生成を行う。詳しくは後述する。
パリティ制御部230は、複数のブロックからなるパリティグループと、パリティグループ毎のパリティとを管理する。詳細については後述する。
復元可否判断部250は、誤り訂正制御部260により誤り検出され、さらに誤り訂正不能であったブロックに対し、パリティによるデータの復元が可能か否かを判断する。より詳細には、復元可否判断部250は、誤り検出され、さらに誤り訂正不能であったブロックがパリティグループを構成しているか否かをパリティ制御部230に問い合わせる。パリティ制御部230から、パリティグループを構成している旨の回答を受けた場合はパリティによるデータの復元が可能と判断し、パリティグループを構成していない旨の回答を受けた場合はパリティによるデータの復元が不可能と判断する。
本実施の形態では、誤りが検出され、かつ、誤り訂正不可能であったデータを、パリティによる冗長情報から復元する。ただし、パリティによる冗長情報から復元する処理に係る必要要件は、これに限られない。例えば、誤りが検出されたデータを、パリティによる冗長情報から復元する方針を採用してもよい。このようにすることで、誤り訂正によって得られる耐障害性は低下するものの、誤り訂正情報の分量の記憶領域を削減することができる。本実施の形態で説明する処理内容は、例えば、誤りが検出されたデータを、パリティによる冗長情報から復元する方針に、適宜読み替え可能である。
パリティ生成パトロール部240は、アドレス割当ブロックのうち、何れのパリティグループにも属さないブロックを検出し、検出したパリティグループを構成していないアドレス割当ブロックの個数が所定の閾値を上回った場合に、所定数のブロックを基に新たなパリティグループを生成する。なお、パリティグループを構成していないアドレス割当ブロックの個数が所定の閾値を上回った場合に、パリティグループを生成することに限らず、定期的に処理を行うようにしても良く、コントローラ200aの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行なうようにしても良い。
より詳細には、パリティ生成パトロール部240は、並び順序情報管理部270に、並び順情報にしたがってアドレス領域の参照要求であるアドレス領域参照要求を順番に送る。そして、要求に対応したアドレス領域の情報を並び順序情報管理部270から受け取る。パリティ生成パトロール部240は、受け取った順番でアドレス領域に対応するブロック番号をブロック制御部210に問い合わせる。ブロック制御部210からブロック番号を受け取る。
パリティ生成パトロール部240は、ブロック番号を受け取った順番で、パリティ制御部230に受け取ったブロック番号が既にパリティグループを構成しているか否かを問い合わせる。パリティ制御部230から受け取ったブロック番号のブロックがパリティグループを構成していない旨の回答を受け取ると、パリティグループを構成していないブロックをパリティ生成の対象として収集する。
そして、パリティ生成パトロール部240は、パリティグループを構成していないブロックを所定数収集すると、パリティ生成部31にその所定数のブロックに記録されたデータに基づいてパリティデータの生成を要求し、パリティ生成部31で生成されたパリティデータを受け取る。パリティ生成パトロール部240は、誤り検出情報生成部62に、パリティデータから誤り検出情報を生成することを要求し、誤り検出情報生成部62で生成された誤り検出情報を受け取る。パリティ生成パトロール部240は、誤り訂正情報生成部64に、パリティデータから誤り訂正情報を生成することを要求し、誤り訂正情報生成部64で生成された誤り訂正情報を受け取る。
パリティ生成パトロール部240は、ブロック制御部210に未割当ブロックの取り出しを要求し、ブロック制御部210からブロック番号を受け取る。そして、パリティ生成パトロール部240は、半導体記憶素子インタフェース部292を介して、半導体記憶素子群9のブロック番号に対応するブロックのデータを消去する。パリティ生成パトロール部240は、パリティ制御部230のパリティ生成部31が生成したパリティデータと、誤り検出情報生成部62がパリティデータから生成した誤り検出情報と、誤り訂正情報生成部64がパリティデータから生成した誤り訂正情報を受け取ったブロック番号のブロックに半導体記憶素子インタフェース292を介して書き込む。
なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
パリティ生成パトロール部240は、ブロック制御部210に、消去したブロックの平準化情報の更新要求を行う。パリティ生成パトロール部240は、ブロック制御部210に、書き込んだブロックのブロック状態をパリティ割当状態に更新する更新要求を送る。
パリティ生成パトロール部240は、収集したブロックと、書き込んだブロックとからなるパリティグループの登録をパリティ制御部230に要求する。
また、パリティ生成パトロール部240、並び順序情報管理部270、ブロック制御部210、パリティ制御部230において、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
読み込みパトロール部241は、より耐障害性を高めるためのものであり、読み込み処理部221が読み込み要求の処理時に行うであろうパリティデータを利用したデータの復元を事前に行う。
より詳細には、読み込みパトロール部241は、ブロックテーブル12のうち、ブロック状態が未割当状態ではないブロックのブロック番号をブロック制御部210に問い合わせ、ブロック制御部210からブロック番号を取得する。未割当状態ではないブロックとは、有効なデータが記録されたブロックである。未割当状態ではないブロックとは、例えば、アドレス割当ブロックやパリティ割当ブロックが含まれる。取得した各ブロックについて、以下の事前復元処理を行う。
事前復元処理では、読み込みパトロール部241は、受け付けたブロック番号に基づいて、半導体記憶素子インタフェース部292を介して半導体記憶素子群9から当該ブロック番号により特定されるブロックのデータと特定されるブロックのデータに対応付けて記憶された誤り検出情報と特定されるブロックのデータに対応付けて記憶された誤り訂正情報を読み込む。なお、誤り検出情報と誤り訂正情報の少なくとも一方が書き込まれるブロックとは別のブロックなどに記憶された場合は、誤り検出・訂正情報管理部61に読み込むべきデータと対応付けられた誤り検出情報と誤り訂正情報の記憶されている場所を問い合わせて、誤り検出情報と誤り訂正情報を読み込む。
また、読み込みパトロール部241は、誤り訂正制御部260の誤り検出部63と連携して読み込んだデータが誤っているか否かを判定し、誤っている場合は誤り訂正部65と連携して訂正する。訂正できない場合は、復元可否判断部250に誤り訂正ができなかったデータの復元が可能か否かの判断を要求して可能な場合は誤り訂正ができなかったデータの復元を復元部32に依頼し、復元部32が復元する。
読み込みパトロール部241は、復元されたデータから誤り検出情報生成部62に誤り検出情報を生成することを要求し、要求に対応して誤り検出情報生成部62で生成された誤り検出情報を受け取る。また、復元されたデータから誤り訂正情報生成部64に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正情報生成部64で生成された誤り訂正情報を受け取る。
読み込みパトロール部241は、復元できたデータ等を書き込むべきブロック番号をブロック制御部210に問い合わせて(つまり、未割当ブロックの取り出しを要求する)、その回答であるブロック番号を受け付ける。そして、読み込みパトロール部241は、ブロック番号を受け付けると、半導体記憶素子インタフェース部292を介して半導体記憶素子群9のブロック番号に対応するブロックのデータを消去する。
そして、読み込みパトロール部241は、ブロック番号で特定されるブロックに復元されたデータと誤り検出情報と誤り訂正情報を半導体記憶素子インタフェース部292を介して半導体記憶素子群9に書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部210に当該ブロックの平準化情報の更新の要求を行う。
そして、読み込みパトロール部241は、付け替え部33に付け替え要求を行う。
なお、読み込みパトロール部241は、アクセス先変更処理と同様に、誤り訂正したデータにより、誤り訂正前のデータが記録されているブロックを誤り訂正データを記録したブロックに付け替えてもよい。これにより、さらに誤りの状態が悪くなり、やがて誤り訂正不能になることを防ぐことができる。また、この付け替え処理は、誤り訂正が成功する都度、行う必要はなく、誤りの度合いが所定の閾値を超えたときに行うようにしてもよい。
以上が事前復元処理である。
上記事前復元処理で、復元可否判断部250が誤り訂正ができなかったデータの復元が不可能であると判断し、かつ、復元不可能なデータが記録されていたブロックのブロック番号がアドレステーブル11に含まれる場合は、アドレステーブル11のうち、復元不可能なデータが記録されていたブロックと対応付けられたアドレス領域にさらにエラーであることを記録しても良い。
上述の事前復元処理により、誤り訂正不可能であったデータの復元を実際の読み込み処理の前に行っておくことにより、冗長性が無くなっていたものの冗長性を事前に復元させることができ、耐障害性を高めることができる。
読み込み処理の際に検出される誤りの発生頻度が、所定の閾値を超えた場合に、読み込みパトロール処理を行う。なお、読み込み処理時の誤りの発生頻度が所定の閾値を超えた場合に限らず、定期的に処理を行うようにしても良く、コントローラ200aの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行うようにしても良い。
並び順情報管理部270は、アドレス領域の情報と並び順情報とが対応づけられた情報であるアドレス領域情報テーブルを有し、さらにそのアドレス領域情報テーブルを管理する。
図4−1は、並び順情報管理部270の構成の例を示す図である。図4−1の並び順情報管理部270は、アドレス領域情報テーブルを有する。
アドレス領域情報テーブルは、アドレス領域毎に、並び順情報が対応づけられる。並び順情報としては、データの更新順などがある。管理としては、例えば、並び順情報管理部270は、書き込み処理部220からアドレス領域の更新通知を受けると、更新の対象となっているアドレス領域に対応付けられている並び順情報を更新する。より詳細には、書き込み処理部220から受けたアドレス領域の更新通知に含まれる各アドレス領域が更新された旨の情報や各アドレス領域が更新された時期の情報に基づいて、例えば各アドレス領域が更新された回数の情報や更新された順序の情報を生成する。そして例えば各アドレス領域が更新された回数の情報または更新された順序の情報を所定の評価関数で評価した値に基づいて並び順情報を更新する。
並び順情報管理部270は、パリティ生成パトロール部240からアドレス領域参照要求を受け付ける。受け付けたアドレス領域参照要求に含まれる並び順と対応付けられているアドレス領域の情報を抽出してパリティ生成パトロール部240に送る。
なお、読み込み処理部221からの要求により誤り訂正部65が誤り訂正したデータを、読み込み処理部221が未割当ブロックに対してデータを書き込んでアドレス領域のマッピングを変更する際、または、読み込み処理部221からの要求により復元部32が復元したデータを、読み込み処理部221が未割当ブロックに対してデータを書き込んでアドレス領域のマッピングを変更する際に、読み込み処理部221が並び順情報管理部270に要求することにより、並び順情報管理部270が、上記並び順情報を更新しても良い。また、読み込みパトロール部241の処理における、読み込み処理部221の前述した処理と同等の処理についても、同様に並び順情報を更新しても良い。並び順情報を更新することで、次回の書き込み等の処理の際に、より好適な情報が得られる。
並び順情報は、全てのブロックがパリティグループを構成しているとは限らないという条件の下で、できるだけ耐障害性を高めるために導入するものである。以降に、詳細に記す。
データを書き込むときは、未割当ブロックに対してデータを書き込み、書き込み要求のあったアドレス領域とのマッピングを、データを書き込んだブロックに更新する。したがって、更新頻度(つまり、書き込み頻度)が高いアドレス領域にマッピングされているブロックは、当該アドレスにマッピングされている期間が短く、更新頻度が低いアドレス領域にマッピングされているブロックは、当該アドレス領域にマッピングされている期間が長いという状態になる。
ここでは、簡単のために、ブロックに記録されているデータに対して発生する誤りは、全てのブロックにおいて同程度の確率で発生するものと仮定する。
この仮定の下では、あるアドレス領域にマッピングされている期間が長いブロックでは、当該アドレス領域にマッピングされている期間中に、当該ブロックに記録されているデータに対して誤りが発生する可能性が比較的高くなる。一方、あるアドレス領域にマッピングされている期間が短いブロックでは、当該アドレス領域にマッピングされている期間中に、当該ブロックに記録されているデータに対して誤りが発生する可能性は比較的低くなる。
したがって、耐障害性を高めるためには、更新頻度が低いアドレス領域にマッピングされているブロックを優先してパリティグループを生成したほうが効果的である。また、更新頻度が低いアドレス領域にマッピングされているブロックを集めてパリティグループを生成することで、該パリティグループが解体される可能性を減じることができる。このため、結果としてパリティグループの生成回数を減じることができ、パリティグループの生成処理に伴うパリティデータの書き込み処理回数を減じることができるため、半導体記憶装置全体の処理速度等の性能の低下を低減させ、また、半導体記憶素子群9の寿命の減少を低減することができる。
更新頻度の評価は、以下の2種類の情報を所定の評価関数により評価した値を使用すれば良い。なお、情報は以下の2種類の情報だけに限定されるものではなく、更新頻度を評価できる適切な情報であれば良い。
(1)あるアドレス領域のマッピングが最後にいつ変更されたかの情報(更新されてからの時間の情報)。
(2)あるアドレス領域のマッピングが何回変更されたかの情報(更新回数の情報)。
なお、実施形態の説明においては、上記評価関数の一形態である、更新されてからの時間の情報のみを評価に採用する例と、更新回数の情報のみを評価に採用する例の2通りについて説明する。
キャッシュメモリ293は、コントローラ200aが処理中のデータなどを一時的に保存する。ホストインタフェース部291は、コントローラとホスト装置との間のインタフェース処理を行う。半導体記憶素子インタフェース部292は、コントローラ200aと半導体記憶素子群9との間のインタフェース処理を行う。
(ブロック制御部)
図5は、本実施の形態における半導体記憶装置が有する半導体記憶素子からなるブロックを管理することにより、各ブロックに対するデータの書き込み等を制御するブロック制御部210の機能を説明する図である。ブロック制御部210は、アドレステーブル11とブロックテーブル12とを管理する。
ブロック制御部210は、ブロックへのデータの書き込み処理やブロックに記憶されているデータの消去処理の際に、ブロック毎の属性の情報(後述するブロック状態の情報または、ブロック状態の情報と平準化情報が対応する)を更新する。なお、ブロック制御部210は、平準化情報も管理して、ブロック毎の消去回数がなるべく同数になるように平準化処理を行い、平準化情報の更新を行っても良い。ブロック制御部210は、また、平準化処理を行う場合は、ブロックの書き込み処理やブロックの消去処理などに伴って必要になる、平準化処理の要求を受け付ける。
ブロック制御部210は、アドレス領域とブロック番号とを対応付けた情報であるアドレステーブル11を記憶および管理している。アドレス領域とはホスト装置から送られてくる論理的なアドレスの範囲(領域)をいう。ブロック番号は1つのブロックの番号がアドレス領域と対応付けられている場合もあれば、複数のブロックの番号がアドレス領域と対応付けられている場合もある。このアドレス領域とブロック番号との対応付けは必要に応じて変化する。また、半導体記憶素子群9内のブロックの番号は、物理ブロックアドレスである。
アドレステーブル11により、ホスト装置から送られてくるアドレスを含むアドレス領域に対応するブロックを特定することができる。アドレステーブル11は、例えば、後述するアドレステーブルへのブロック番号対応付け処理や、アドレステーブルへのブロック番号削除処理などに伴い更新される。
ブロックテーブル12は、ブロック番号とブロック状態とを対応付けた情報である。また、平準化処理を行う場合は、ブロックテーブル12はブロック番号とブロック状態と平準化情報とを対応付けた情報であってもよい。平準化情報とは、平準化処理に必要な情報である。平準化処理に必要な情報とは、各ブロックの残り寿命を直接的または間接的に表す情報であり、例えば、ブロックのデータが消去された回数や、ブロックのデータが消去された時期の情報等である。ブロックテーブル12は、例えば、後述するブロック状態変更処理や、平準化情報の更新処理などに伴い更新される。
なお、アドレステーブル11及びブロックテーブル12は、キャッシュメモリ293に格納してもよく、キャッシュメモリ293及び半導体記憶素子群9の両方に格納してもよい。また、半導体記憶素子群9以外の記憶領域に格納しても良い。半導体記憶素子群9に格納されたアドレステーブルやブロックテーブルの情報は、必ずしもキャッシュメモリ293の情報を更新した都度更新する必要はない。アドレステーブル11及びブロックテーブル12には必要な情報が適切に記録されていればよく、記録に係るデータ構造等は問わない。
ブロック制御部210が実行する処理は、アドレステーブル11へのブロック番号対応付け、アドレステーブル11からのブロック番号削除、ブロック状態変更、書き込み処理部220またはパリティ生成パトロール部240からの書き込み先となるブロックの問い合わせへの応答であるブロック番号の回答、読み込み処理部221または読み込みパトロール部241からの復元部32が復元したデータの書き込み先となるブロックの問い合わせへの応答であるブロック番号の回答が含まれる。また、上記処理のうち、ブロック番号の回答としては未割当ブロックを取り出して回答する処理が含まれ、及び、平準化処理を行う場合は、さらに平準化情報の更新が含まれる。
(アドレステーブルへのブロック番号対応付け)
ブロック制御部210は、書き込み処理部220または付け替え部33からアドレステーブル11へのブロック番号対応付け要求を受け、要求されたアドレス領域に対応するブロック番号を設定する。このように、アドレス領域とブロック番号とを対応付けることで、例えば、読み込み処理において、要求されたアドレスに対応付けられたブロックに記録されている、データを読み込むことができる。
(アドレステーブルへのブロック番号削除)
ブロック制御部210は、書き込み処理部220または付け替え部33からアドレステーブル11へのブロック番号削除要求を受け、要求されたアドレス領域に対応するブロック番号を、ブロック番号が設定されていない状態である未設定状態に変更する。未設定状態を示す情報としては、例えばNULL値等を設定する。これにより、アドレス領域とブロック番号の対応付けが解除される。
(ブロック状態変更)
ブロック制御部210は、ブロック状態変更要求を受け、要求されたブロック番号に対応するブロック状態を、要求されたブロック状態に設定する。ブロック状態には、少なくとも「アドレス割当状態」、「パリティ割当状態」、及び、「未割当状態」の3種類がある。これにより、各種処理において、ブロック状態を判別することができる。
(未割当ブロックの取り出し)
ブロック制御部210は、未割当ブロックの取り出し要求を受けると、まず、ブロックテーブル12から、全ブロックの情報を取得する。ブロック制御部210は、全ブロックのうち、ブロック状態が未割当状態のブロックを抽出し、抽出されたブロックから任意のブロックまたは所定の方式で選択されたブロックを取り出す。また、平準化処理をする場合は、ブロック制御部210は、さらに、未割当ブロックの中から、平準化処理にあたって最適と判断するブロック番号を返却する。平準化処理にあたって最適と判断するブロックとは、例えば、消去間隔が長く、消去回数が少ないブロックである。本実施の形態では、何れの判断方法による判断でもよく、さまざまな判断方法を必要に応じて採用してよい。このように、平準化処理にあたって最適と判断された未割当ブロックに対してのみ、データの消去及び書き込み処理を行うことで、たとえば消去回数の平準化が実現でき、各ブロックの残り寿命を平準化することができる。
(平準化情報の更新)
ブロック制御部210は、平準化情報の更新要求を受け、要求されたブロック番号に対応する平準化情報を適切に更新する。この処理は、例えば、ブロックのデータ消去に合わせて実行する。この平準化情報により、未割当ブロックの取り出し処理において、平準化処理にあたって最適なブロックを取り出すことができる。平準化情報とは、ブロックが保持するデータが消去された回数や、ブロックのデータが消去された時期の情報等である。なお、本実施の形態においては、平準化情報の内容は上記に限定せず、上記未割当ブロックの取り出し処理において採用した、最適なブロックの判断処理において必要な平準化情報を、必要に応じて採用することができる。
(誤り訂正制御部)
図6は、誤り訂正制御部260の機能構成を説明する図である。図6の誤り訂正制御部260は、誤り検出情報及び誤り訂正情報の生成処理、誤り検出処理及び誤り訂正処理を行い、これらの処理に必要な各種情報を管理する。
誤り訂正制御部260は、誤り検出・訂正情報管理部61、誤り検出情報生成部62、誤り検出部63、誤り訂正情報生成部64、及び、誤り訂正部65を有する。誤り検出・訂正情報管理部61は、要求されたデータから生成した誤り検出情報及び誤り訂正情報と、要求されたデータとの対応関係を管理する。誤り検出情報生成部62は、要求されたデータに対する誤り検出情報を生成する。
誤り検出部63は、要求されたデータと誤り検出情報とから、要求されたデータに誤りがないかどうかを判断する。誤り訂正情報生成部64は、要求されたデータに対する誤り訂正情報を生成する。
誤り訂正部65は、誤り検出部63で誤りと判定された要求されたデータと誤り訂正情報とから、データの誤りを訂正する。なお、誤り訂正部65が誤り訂正を行う能力には、所定の強度があり、データの誤り状況によっては、訂正できない場合がある。
なお、誤り検出情報及び/又は誤り訂正情報を、データを書き込むブロックにデータとともに記録してもよく、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子群9以外の記憶領域に記録してもよい。
誤り検出情報及び/又は誤り訂正情報を、データを書き込むブロックにデータとともに記録する場合には、例えば、誤り検出・訂正情報管理部61は、ブロックに記録されるデータ、誤り検出情報及び/又は誤り訂正情報の記録方法、すなわち、記録フォーマットを管理する。
また、誤り検出情報及び/又は誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録する場合や、半導体記憶素子群9以外の記憶領域に記録する場合には、例えば、誤り検出・訂正情報管理部61は、データとそのデータに対応する誤り訂正情報及び/又は誤り訂正情報との記録場所及び記録方法を管理する。
また、誤り検出・訂正情報管理部61が管理する情報は、半導体記憶素子群9の所定のブロックに保存しても良く、キャッシュメモリ293に格納してもよく、キャッシュメモリ293及び半導体記憶素子群9の両方に格納してもよい。また、半導体記憶素子群9以外の記憶領域に格納しても良い。半導体記憶素子群9に格納された情報は、必ずしもキャッシュメモリ293の情報を更新した都度更新を行う必要はない。
誤り検出・訂正情報管理部61が管理する情報は、必要な情報が適切に記録されていればよく、記録に係るデータ構造等は問わない。
以下の実施の形態では、誤り検出情報及び誤り訂正情報を、データを書き込むブロックにデータとともに記録する場合について説明する。なお、以下の実施形態は、誤り検出情報及び/又は誤り訂正情報を、データを書き込むブロックにデータと共に記録しない場合にも、適宜読み替えることができる。
(パリティ制御部詳細)
図7は、パリティ制御部230の機能構成の例を説明する図である。パリティ制御部230は、パリティデータの生成やデータの復元処理を行い、それらの処理に必要な各種情報を管理する。
パリティ制御部230は、パリティ対応リスト39を管理し、パリティ生成部31、復元部32、付け替え部33、及び、パリティ対応リスト管理部34を有する。
パリティ対応リスト39は、どのデータブロックのデータから生成されたパリティデータが、どのパリティ生成方法により、どのブロックに記録されているかを示す情報である。ここで、データブロックとはパリティデータの生成の基となっているデータが記憶されたブロックをいう。パリティブロックとはデータブロックに記録されたデータから生成されたパリティデータを記録するブロックをいう。また、上述したように、パリティグループとは、データが記憶された複数のブロックとその複数のブロックに記憶されたデータから生成された冗長データ(パリティデータ)が記憶された1つ以上のブロックを含むグループである。なお、冗長データは所定の方法により生成される。
例えば、図7中、パリティ対応リスト39は、パリティグループ番号1のパリティグループが示されている。パリティグループ番号1のパリティグループは、ブロック番号0、1、2、3のブロック群から生成された2つのパリティデータが、それぞれブロック番号4、5のブロックに記録されている。パリティグループ番号1の各パリティのパリティ生成方法は、方法1である。パリティ生成方法によっては、パリティ割当ブロックはひとつとは限らず、複数のパリティ割当ブロックからなるパリティ割当ブロック群でもよい。
パリティ対応リスト39は、例えば、後述するパリティグループ登録処理や、パリティグループ登録解除処理等の際にパリティ制御部230が更新する。より詳細には、パリティ対応リスト管理部34が更新する。パリティ対応リスト39は、また、パリティグループの増減に伴い、管理する情報量が増減する。
パリティ生成部31は、要求されたブロック群のデータから、所定の方法に従ってパリティデータを生成する。より詳細には、パリティ生成パトロール部240からパリティ生成の要求を受けると、要求に含まれるデータブロック群とパリティ生成方法の情報に基づいて、データブロック群に記憶されたデータから当該パリティ生成方法によりパリティデータを生成し、パリティ生成パトロール部240に生成したパリティデータを送る。
復元部32は、読み込み処理部221または読み込みパトロール部241から誤り訂正できなかったブロックに記憶されているデータの復元要求を受け、要求されたブロックのデータを、要求されたブロックが所属しているパリティグループを構成しているブロックに記録されているデータから、所定の方法に従って復元する。そして、復元したデータを要求を受けた読み込み処理部221または読み込みパトロール部241に送る。
付け替え部33は、読み込み処理部221または読み込みパトロール部240から付け替え要求を受け、復元前のデータ、すなわち、誤り訂正不能となったデータが記録されているブロックである訂正不能ブロックを指す各種情報を、復元されたデータを新たに記録したブロックである復元ブロックを指す各種情報に更新する。
より詳細には、付け替え部33は、訂正不能ブロックが、アドレステーブル11に登録されていた場合は、アドレステーブル11の訂正不能ブロックを指すブロック番号の削除をブロック制御部210に要求する。付け替え部33は、ブロック制御部210が削除したブロック番号が対応付けられていたアドレス領域と復元ブロックを指すブロック番号とを対応付ける要求をブロック制御部210に行う。
付け替え部33は、さらに、ブロックテーブル12において、復元ブロックのブロック状態を訂正不能ブロックのブロック状態に変更する要求をブロック制御部210に行う。続いて、訂正不能ブロックのブロック状態を未割当状態に変更する要求をブロック制御部210に行う。
なお、読み込み処理部221または読み込みパトロール部240は、訂正不能ブロックの誤りの発生度合いを付け替え部33に通知してもよい。これにより、誤りの度合いによっては、訂正不能ブロックの状態を「誤り多発状態」というブロック状態に設定し、そのブロックを、以降使用しないように制御することができる。
また、付け替え部33は、パリティ対応リスト39のうち、訂正不能ブロックを指すブロック番号が対応付けられているグループのパリティグループ登録解除処理の要求をパリティ対応リスト管理部34に行う。その後、登録解除となったパリティグループのグループ番号と対応付けられていたデータブロックのブロック番号とパリティブロックのブロック番号のうち、訂正不能ブロックを指すブロック番号を復元ブロックを指すブロック番号に置き換えたパリティグループの登録処理をパリティ対応リスト管理部34に要求する。
これにより、読み込み処理部221等の各部が、訂正不能ブロックにアクセスするのではなく、復元ブロックにアクセスすることができる。このため、誤り訂正不能となったことにより失われた冗長性が再度もたらされることになる。
パリティ対応リスト管理部34は、パリティグループ登録解除処理の要求を受けると解除処理の要求対象となっているグループの情報をパリティ対応リスト39から削除する。
パリティ対応リスト管理部34は、パリティグループ登録処理の要求を受けるとデータブロックのブロック番号の群とパリティブロックのブロック番号の群とパリティ生成方法の情報とグループ番号とを対応付けて登録する。
なお、パリティ対応リスト39は、半導体記憶素子群9の所定のブロックに保存しても良く、キャッシュメモリ293に格納しても良く、又は、キャッシュメモリ293と半導体記憶素子群9との両方に格納しても良い。また、半導体記憶素子群9以外の記憶領域に格納しても良い。半導体記憶素子群9に格納されたパリティ対応リストの情報は、必ずしもキャッシュメモリ293の情報を更新した都度更新を行う必要はない。また、パリティ対応リスト39には必要な情報が適切に記録されていればよく、記録に係るデータ構造等は問わない。
(書き込み処理)
図8は、書き込み処理を説明するフロー図である。図8の書き込み処理は、ホスト装置からの書き込み要求に基づいて開始される。ステップS101では、書き込み処理部220が、書き込み要求を受け、その書き込み要求データから、誤り検出情報生成部62が誤り検出情報を生成し、誤り訂正情報生成部64が誤り訂正情報を生成し、ブロックに書き込む内容を準備する。さらに、ブロック制御部220が、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。
ステップS102では、書き込み処理部220が、ステップS101で確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、例えば、誤り検出情報や誤り訂正情報を、データを書き込むブロックにデータとともに記録する。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
ステップS102では、平準化処理を行なう場合は、さらに、書き込み処理部220が未割当ブロックの更新処理を行うことにより、ブロック制御部210が、その未割当ブロックの平準化情報を更新する。
ステップS103では、ブロック制御部210と書き込み処理部220とが、更新済みの情報が記録されている未割当ブロックと更新前ブロックとのマッピングを更新する。より詳細には、まず、書き込み処理部220からの要求を受けてブロック制御部210は、ブロック制御部210のアドレステーブル11に保持されている情報により、書き込み要求アドレスが含まれるアドレス領域に対応している、更新前のブロックのブロック番号を取得する。そして、ブロック制御部210は書き込み処理部220に更新前のブロック番号を通知する。そして、書き込み処理部220からの要求を受けてブロック制御部210は、アドレステーブル11の当該アドレス領域から、更新前ブロックのブロック番号を削除し、新たにデータが書き込まれた未割当ブロックの番号を設定する。これにより、アドレステーブルの更新が完了する。
ステップS103では、さらに、書き込み処理部220からの要求を受けてブロック制御部210が、更新前ブロックの状態を、未割当状態に設定し、更新済みの情報が記録されている未割当ブロックの状態を、アドレス割当状態に設定する。これにより、ブロックの状態の設定が完了する。なお、更新前ブロックの状態を、未割当状態に設定することで、ステップS103の処理が終了した際には、更新前ブロックを、未割当ブロックとして回収することができる。
ステップS103では、さらに、書き込み処理部220からの要求を受けて並び順情報管理部270が、アドレステーブル11の更新に対応させて、並び順情報を更新する。
ステップS104では、書き込み処理部220からの要求によりパリティ制御部230が、更新前ブロック、すなわち、未割当状態に設定したブロックが、何れかのパリティグループに属していたか否かを判定する。パリティグループに属している場合にはステップS105に進み、パリティグループに属していない場合は処理を終了する。
パリティグループに属しているか否かの判定は、書き込み処理部220からの要求によりパリティ制御部230が、更新前ブロックが属するパリティグループを検索し、返却値からそのブロックが属する当該パリティグループが存在するかどうかを判断することにより行うとよい。
ステップS105では、書き込み処理部220からの要求により、パリティ制御部230とブロック制御部210とが、パリティグループの解体を行う。パリティグループの解体は、更新前ブロックがパリティグループに属していた場合に、更新前ブロックと該パリティグループに属するパリティブロック群を未割当ブロックとして回収するために実行される。
より詳細には、書き込み処理部220からの要求により、ブロック制御部210が、そのパリティグループを構成しているパリティブロック群の状態を、未割当状態に変更し、結果として未割当ブロックとして回収する。さらに、書き込み処理部220からの要求により、パリティ制御部230が、そのパリティグループの登録解除を行う。これによりパリティグループの解体処理が実現できる。
(書き込み処理例)
図9と図10とは、書き込み処理の前と後との各テーブル等の状態を説明する図である。なお、図9及び図10には、各テーブルが有する情報の一部を示す。図9の(a)ないし(c)は、それぞれ、書き込み処理前の、アドレステーブル11、ブロックテーブル12、及び、パリティ対応リスト39の状態を示す図である。(a)のアドレステーブル11では、例えば、アドレス領域0にブロック番号0が対応づけられている。
(b)のブロックテーブル12では、ブロック番号0から7までが、アドレス割当状態のブロックであり、ブロック番号8及び9が、パリティ割当ブロックであり、ブロック番号10から12までが、未割当ブロックである。
また(c)のパリティ対応リスト39では、グループ番号0及び1の2つのパリティグループが示されている。
図9(d)は、(a)から(c)に対応するブロックとパリティグループとの関係を示す模式図である。ここでは、図9(d)では、並び順をアドレス領域毎のデータの更新順序、すなわち、消去時期としている。より詳細には、ブロック番号0から2までが、パリティグループ0を形成し、パリティデータは、ブロック番号8に格納されている。また、ブロック番号3から5までが、パリティグループ1を形成し、パリティデータは、ブロック番号9に格納されている。
図10(a)から(c)は、図9に示す状態の際に、アドレス領域0に対して書き込み要求が発生した場合に、アドレステーブル11、ブロックテーブル12、及び、パリティ対応リスト39において更新される箇所を説明する図である。なお、図には更新された箇所に関係する箇所のみを示している。
書き込み処理の際は、まず、ブロック制御部210により、たとえば未割当ブロック10が取り出され、書き込み処理部220が、データを書き込む。さらに、ブロック制御部210が、ブロック0とブロック10とのブロック状態の情報を更新する。これにより、図10(a)及び(b)に示すように、ブロック0が未割当ブロックとなり、ブロック10がアドレス割当ブロックとなる。
さらに、パリティ制御部230が、パリティグループ0を解体する。これにより、図10(b)及び(c)に示すように、パリティデータが格納されていたブロック8が未割当ブロックとなり、グループ番号0のパリティグループがパリティ対応リスト39から削除される。
図10(d)は、図10(a)から(c)の処理に対応する模式図である。ここでは、ブロックの並び順はアドレス領域ごとのデータの更新順序としている。そこで、新しくアドレス割当状態になったブロック10の並び順は、一番左側に位置する。
(読み込み処理)
図11は、読み込み処理を説明するフロー図である。図11のステップS201では、読み込み処理部221が、ホスト装置からの読み込み要求を受けつける。そして、読み込み処理部221からの要求により、ブロック制御部210が、読み込み要求に含まれるアドレス領域とアドレステーブル11に基づいて、ブロック番号を特定し、読み込み処理部221に返却する。読み込み処理部221は、そのブロックに記録されているデータを読み込む。ステップS201では、さらに、誤り検出情報及び誤り訂正情報を読み込む。
ステップS202では、読み込み処理部221からの要求により誤り検出部63が、読み込んだデータ誤り検出処理を行い、読み込んだデータが誤っているか否かを判定する。誤っている場合には、ステップS204に進み、誤っていない場合には、ステップS203に進む。ステップS203では、読み込んだデータを読み込み要求元に返却する。
一方、ステップS204では、読み込み処理部221からの要求により誤り訂正部65が、読み込んだデータの誤り訂正処理を行う。誤り訂正が成功した場合には、ステップS205に進み、誤り訂正ができない場合には、ステップS206に進む。ステップS205では、ステップS204で誤り訂正したデータを、読み込み要求元に返却する。
なお、読み込み処理部221は、以降に記述するステップS209とステップS210の処理と同様に、誤り訂正したデータにより、誤り訂正前のデータが記録されているブロックを誤り訂正データを記録したブロックに付け替えてもよい。これにより、さらに誤りの状態が悪くなり、やがて誤り訂正不能になることを防ぐことができる。また、この付け替え処理は、誤り訂正が成功する都度、行う必要はなく、誤りの度合いが所定の閾値を超えたときに行うようにしてもよい。
ステップS206では、読み込み処理部221からの要求により復元可否判断部250が、誤り訂正できなかったデータが記録されているブロックがパリティグループに属しているか否かを判定する。そのブロックがパリティグループに属している場合には、ステップS207に進み、復元処理を行う。一方、パリティグループに属していない場合には、復元処理ができないため、ステップS212に進む。なお、この判定は、パリティ対応リスト39において、ブロックが属するパリティグループを検索し、パリティグループが存在するかどうかを判断することで実現できる。
本実施の形態では、誤りが検出され、かつ、誤り訂正不可能であったデータを、パリティによる冗長情報から復元する。ただし、パリティによる冗長情報から復元する処理に係る必要要件は、これに限られない。例えば、誤りが検出されたデータを、パリティによる冗長情報から復元する方針を採用してもよい。このようにすることで、誤り訂正によって得られる耐障害性は低下するものの、誤り訂正情報の分量の記憶領域を削減することができる。本実施の形態で説明する処理内容は、例えば、誤りが検出されたデータを、パリティによる冗長情報から復元する方針に、適宜読み替え可能である。
ステップS207では、読み込み処理部221からの要求により復元部32が、誤り訂正できなかったデータの復元処理を行う。ステップS208では、復元部32が、復元ができたか否かを判定する。復元できた場合には、ステップS209に進み、復元処理を試みたものの、何らかの要因により復元できなかった場合は、ステップS212に進む。
ステップS209では、読み込み処理部221が、復元できたデータにより、そのブロックを更新する。すなわち、未割当ブロックを取得し、復元したデータを書き込む。より詳細には、読み込み処理部221が誤り検出情報生成部62に対して要求することにより、誤り検出情報生成部62が、復元したデータから誤り検出情報を生成し、読み込み処理部221が誤り訂正情報生成部64に対して要求することにより、誤り訂正情報生成部64が、復元したデータから誤り訂正情報を生成し、ブロックに書き込む内容を準備する。
続いて、読み込み処理部221からの要求により、ブロック制御部210が未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。そして、読み込み処理部221は確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックにデータとともに記録する。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、半導体記憶素子以外の記憶領域に記録してもよい。
ステップS209では、平準化処理を行なう場合は、さらに、未割当ブロックの更新処理を行ったため、読み込み処理部221からの要求によりブロック制御部210がその未割当ブロックの平準化情報を更新する。
ステップS210では、読み込み処理部221からの要求により付け替え部33が、復元ブロックと、訂正不能ブロックと、の付け替え処理を行う。これにより、読み込み処理部221等が、訂正不能ブロックにアクセスするのではなく、復元ブロックにアクセスするようになる。このため、誤り訂正不能となったことにより失われた冗長性が再度もたらされることになる。
なお、誤りが発生するブロックは、半導体記憶素子自体が故障するブロックに限らない。例えば、記録したデータが壊れただけであり、再度消去と書き込み処理を行うことで、そのブロックの使用を継続できる場合がある。このため、誤りが発生したブロックは未割当ブロックとして回収しても良い。
なお、復元前のブロックの誤りの発生度合いを付け替え部33に通知してもよい。これにより、誤りの度合いによっては、復元前ブロックの状態を「誤り多発状態」というブロック状態に設定し、そのブロックを、以降使用しないように制御することができる。
ステップS211では、読み込み処理部221は、復元したデータを、読み込み要求元に返却し、処理を終了する。なお、復元したデータを読み込み要求元に返却する処理は、ステップS209又はステップS210より前に実行してもよい。これにより、読み込み要求元は、読み込み要求に続く処理を、より早く再開することができる。
ステップ212では、読み込み処理部221は、エラーを示す値を読み込み要求元に返却する。なお、アドレステーブル11に、読み込みエラーであるという情報を別途付加し、さらに、そのアドレス領域に対する以降の読み込み要求の際には、ステップS201以降の処理を行うことなく、読み込みエラーを返却するようにしてもよい。これにより、処理量が削減できる。
(パリティ生成処理)
図12は、パリティ生成処理を説明する図である。図12のパリティ生成処理は、パリティ生成パトロール部240により行われる。パリティ生成パトロール部240は、パリティグループを構成していないアドレス割当ブロックの個数が所定の閾値を上回った場合に、パリティ生成処理を行う。なお、パリティ生成処理は、パリティグループを構成していないアドレス割当ブロックの個数が所定の閾値を上回ったときに限らず、定期的に処理を行うようにしてもよいし、コントローラ200aの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行うようにしても良い。
図12のステップS301では、パリティ生成パトロール部240は、並び順情報管理部270が管理する並び順情報とブロック制御部210が管理するブロックの状態情報とパリティ制御部230が管理するパリティグループの情報とに基づいて、更新順序が古い順にパリティグループを構成していないアドレス割当ブロックを集める。
ステップS302では、パリティ生成パトロール部240が、所定の個数のアドレス割当ブロックが集められたか否かを判定する。集められたブロックの個数が所定の個数有る場合には、ステップS303に進み、集められたブロックの個数が所定の個数無い場合には、ステップS304に進む。
ステップS303では、パリティ生成パトロール部240、ブロック制御部210、パリティ制御部230、誤り検出情報生成部62、及び、誤り訂正情報生成部64が、新たなパリティグループを生成する。まず、パリティ生成部31が、集められたブロックに記録されたデータからパリティデータを生成する。続いて、生成したパリティデータから、パリティ生成パトロール部240からの要求により誤り検出情報生成部62が、誤り検出情報を生成し、パリティ生成パトロール部240からの要求により誤り訂正情報生成部64が、誤り訂正情報を生成する。これにより、パリティ割当ブロックに書き込む内容を準備する。
さらに、ブロック制御部210が未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。パリティ生成パトロール部240は、確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報及び誤り訂正情報とデータとを、一のブロックに記録する。
なお、誤り検出情報及び誤り訂正情報を書き込むブロックと、データを書き込むブロックとを異ならせてもよく、誤り検出情報及び誤り訂正情報を所定のブロックに記録させてもよい。またさらに、誤り検出情報及び誤り訂正情報を半導体記憶素子群9とは別の記憶領域に記録してもよい。
パリティ生成パトロール部240からの要求によりブロック制御部210が、さらに、この未割当ブロックの状態の情報を、パリティ割当状態とする。平準化処理を行なう場合は、パリティ生成パトロール部240からの要求によりブロック制御部210が、さらに、この未割当ブロックの更新処理を行ったことによる未割当ブロックの平準化情報の更新を行う。
パリティ生成パトロール部240からの要求によりパリティ制御部230が、集められたブロックと、パリティ割当ブロックとを、新しいパリティグループとして、パリティグループの登録処理を行う。
ステップS304では、パリティ生成パトロール部240は並び順において次のパリティグループを解体する。これにより、次の繰り返し処理におけるステップS301で、アドレス割当ブロックが所定の個数集まることが期待できる。
より詳細には、まず、並び順情報管理部270が管理する並び順情報に従い、パリティ生成パトロール部240からパリティ制御部230とブロック制御部210とに対して要求することにより、並び順として次の順序のパリティグループの登録解除処理が行われる。より詳細には、パリティ生成パトロール部240からの要求により、パリティ制御部230とブロック制御部210とが、そのパリティグループを構成しているパリティブロック群の状態を、未割当状態に変更し、結果として未割当ブロックとして回収する。さらに、パリティ生成パトロール部240からの要求によりパリティ制御部230が、そのパリティグループの登録解除を行う。これによりパリティグループの解体処理が実現できる。
ステップS303及びステップS304の処理の後、ステップS301に戻り、並び順における全てのブロックに係る処理が終了するまで、処理を繰り返す。繰り返し処理は、並び順情報の終端に達したら終了する。
なお、終端に達したとき、アドレス割当ブロックが所定の個数集められていない場合には、それらのアドレス割当ブロックによるパリティグループは構成しない。これらのアドレス割当ブロックは、以降のパリティ生成処理が実行された際に、並び順によっては、パリティグループを構成するようになる。
なお、並び順に所定の閾値を設けておいて、所定の閾値を超える、更新頻度が高いアドレス割当ブロックからは、パリティグループを構成しないようにしてもよい。なお、更新頻度が高いアドレス割当ブロックとは、アドレス割当ブロックとなってからの期間が短いアドレス割当ブロックを意味する。
より詳細には、例えば、更新頻度において上位の所定の割合のアドレス割当ブロックは、パリティグループを構成しなくてもよい。所定の割合とは、例えば、10%等の値が利用できる。これにより、パリティ生成回数をさらに削減することができ、処理パフォーマンスを向上することができるとともに、パリティデータの書き込みに伴う、半導体記憶素子群9の寿命の減少を低減することができる。
(パリティ生成処理のバリエーション)
以上説明したパリティ生成処理では、並び順情報が動的に変更される。これは、ブロックの並び順情報の導入の際の、更新頻度と耐障害性に関する考察結果によるものである。
並び順情報を動的に変更させてパリティグループを構成するのではなく、静的な情報、例えば、アドレス領域番号順等にしたがってパリティグループを構成してもよい。静的な情報に従わせる場合は、動的に変更される並び順情報に従ってパリティグループを構成する場合に比して、耐障害性は低下する。一方で、静的な情報に従ってパリティグループを構成させると、図12のステップS302の判定の際に、アドレス割当ブロックが、必ず所定の個数集まるようになるという利点がある。
(パリティ生成処理例)
図13から図16は、パリティグループを生成する処理の際のアドレステーブル11等の例を説明する図である。
図13は、並び順がアドレス領域毎のデータ更新順序の場合のアドレステーブル11等の例を説明する図である。より詳細には、図9の状態において、アドレス領域0に対して書き込み要求が発生し、図10に示す状態になった後、パリティグループが生成される場合のアドレステーブル11等の例である。図13(a)は、アドレステーブル11、(b)は、ブロックテーブル12、(c)は、パリティ対応リスト39である。ここでは、説明に最低限必要な情報のみを記載している。また、図13(d)は、生成されるパリティグループを説明する模式図である。
図10に示す状態において、パリティ生成パトロール部240が、アドレス割当ブロックのブロック1及び2を集めるものの、アドレス割当ブロックが所定の個数、ここでは3個が集まらない。そこで、パリティ制御部230が、並び順情報に従って、次のパリティグループ1を解体する。これにより、ブロック9が未割当ブロックとなり、図10(c)に示すパリティ対応リスト39から、グループ番号1が削除される。
さらにパリティ生成パトロール部240が、アドレス割当ブロックであるブロック3を集めることにより、アドレス割当ブロックを3個集めることができる。これにより、パリティグループを構成することができる。この処理により、たとえばブロック11がパリティ割当ブロックとなり、パリティグループ2がパリティ対応リスト39に登録される。
次に、アドレス割当ブロックであるブロック4、5、及び、6を集めることにより、アドレス割当ブロックを3個集めることができ、パリティグループを構成することができる。この処理により、たとえばブロック12がパリティ割当ブロックとなり、パリティグループ3がパリティ対応リスト39に登録される。
さらに、パリティ生成パトロール部240が、アドレス割当ブロックであるブロック7及び10を集めるものの、アドレス割当ブロックが所定の個数集まらない。この時点で、並び順の終端に達し、パリティ生成処理を終了する。
以上の処理により、図13に示すテーブル等が実現される。
図14ないし図16は、静的な情報に従ってパリティグループを構成する場合のアドレステーブル11等の例を説明する図である。図14は、書き込み処理を開始する処理を開始する前の状態を説明する図であり、図15は、書き込み処理が行われた後の状態を説明する図であり、図16は、パリティグループが生成された後の状態を説明する図である。
なお、図には更新された箇所に関係する箇所のみを示している。
図14ないし図16において、(a)は、アドレステーブル11、(b)は、ブロックテーブル12、(c)は、パリティ対応リスト39である。また、(d)は、(a)から(c)に対応する状態を示す模式図である。
図14−2(d)に示す状態の場合に、アドレス領域1、6、及び、7に書き込み処理を行うと、図15(d)に示す状態となる。この書き込み処理において、パリティグループ0及び2が解体される。また、たとえばブロック16、17、18が、新たにアドレス割当ブロックとなる。さらに、パリティ生成処理を行うと、図16−2(d)に示す状態となる。
動的に変更される並び順情報にしたがってパリティグループを構成する場合と異なり、アドレス割当ブロックは、必ず所定の個数集まる。図15及び図16の例では、アドレス割当ブロック0、16、2から、パリティグループ4が、アドレス割当ブロック17、18、8から、パリティグループ5がそれぞれ生成される。
(読み込みパトロール処理)
図17は、読み込みパトロール処理を説明する図である。図17の処理は、図11の読み込み処理と、データを読み込み要求元に返却しない点が異なる。より詳細には、ステップS401において読み込み対象となるブロックは、アドレス割当ブロックに限定しなくてもよい。すべての使用中のブロック、すなわち、アドレス割当ブロック、パリティ割当ブロックを読み込み対象にしてよい。
また、図11におけるステップS203、ステップS205、及び、ステップS211の処理が行われない。また、図11におけるステップS212の処理に代えて、ステップS412では、読み込みパトロール部241が、アドレステーブル11に、読み込み処理を行ったアドレス領域が、エラーであることを記録する。これにより、そのアドレス領域に対する以降の読み込み処理において、読み込みエラーを返却することができるようになる。なお、エラーであることをホスト装置に通知するようなプロトコルを別途用意し、ホスト装置に通知するようにしてもよい。
図17におけるその他のステップは、図11のステップと同様であるので、ここでは説明を省略する。
なお、読み込みパトロール部241は、読み込み処理時の誤りの発生頻度が所定の閾値を上回ったときに、読み込みパトロール処理を行う。なお、読み込み処理時の誤りの発生頻度が所定の閾値を上回ったときに限らず、定期的に処理を行うようにしてもよく、コントローラ200aの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行うようにしても良い。
読み込みパトロール処理を行うことで、実際の読み込み処理に先立って、誤り訂正不能となっていたブロックの復元処理が可能になる。これにより、耐障害性が高まるとともに、実際の読み込み処理時の処理量を削減することができる。
以上の構成をとることで、データを復元することができ、耐障害性を高めることができる。また、書き込み要求を受ける度にパリティデータを生成および書き込みしないため、書き込み処理の速度等の性能低下を低減し、パリティデータをブロックに書き込む回数を削減して寿命の減少を低減することができる。
なお、第1の実施形態の受付部29は第2の実施形態のホストインタフェース部291と書き込み処理部220と読み込み処理部221の一部が対応する。第1の実施形態の第1の記録部28aは第2の実施形態のブロック制御部210の一部が対応する。第1の実施形態の第2の記録部22bは第2の実施形態のパリティ制御部230の一部が対応する。第1の実施形態の第1の書き込み手段22aは第2の実施形態の書き込み処理部220の一部と半導体記憶素子インタフェース部292とブロック制御部210の一部とパリティ制御部230の一部が対応する。第1の実施形態の第2の書き込み手段22bは第2の実施形態のパリティ生成パトロール部240の一部とパリティ制御部230の一部と半導体記憶素子インタフェース部292とブロック制御部210の一部とが対応する。
〔第3の実施の形態〕
本実施の形態では、ホスト装置からの書き込み要求を処理する際に、ホスト装置が認識できる論理的なアドレス情報である論理アドレス情報と、半導体記憶素子群9に記録されたデータの物理的なアドレス情報である物理アドレス情報との、対応付けを更新し、さらに、予めまたは動的に定められたタイミングで、論理アドレス情報と物理アドレス情報との対応付けを更新する。
図18は、本実施の形態に係る半導体記憶装置1が有するコントローラ200bの機能構成の例を示す図である。図18は、図3に示すコントローラ200aの構成に加え、動的更新部299を有する。ここでは、第2の実施形態と異なる部分のみ説明する。なお、本実施の形態では、第2の実施の形態に動的更新部299を付加する実施の形態を説明しているが、以降に説明するその他の実施の形態に動的更新部299を付加するように適宜読み替えることが可能である。
図18に示す各部のうち、誤り訂正制御部260b、パリティ制御部230b、ブロック制御部210b、並び順情報管理部270b、半導体記憶素子インタフェース部292bについては、動的更新部299と連携し、処理を行う点が異なるだけで、連携処理の内容自体は図3のものと同一であるため、説明は省略する。
動的更新部299は、予めまたは動的に定められたタイミングで、論理アドレス情報と物理アドレス情報との対応付けを更新する。
例えば、アドレス領域A1とブロック番号B1とが対応付けられており、アドレス領域A2とブロック番号B2とが対応付けられている場合に、その対応付けを入れ替えて更新するときには、動的更新部299は、次の処理をする。
動的更新部299は、ブロック番号B1が示すブロックに記録されているデータを、ブロック番号B2が示すブロックに記録(コピー)し、さらに、ブロック番号B2が示すブロックに記録されているデータを、ブロック番号B1が示すブロックに記録(コピー)する。たとえば、上記コピー処理は、キャッシュメモリ293(一時記憶領域)を利用し、ブロック番号B1が示すブロックに記録されているデータをキャッシュメモリ293にコピーし、ブロック番号B2が示すブロックに記録されているデータを、ブロック番号B1が示すブロックに記録(コピー)し、キャッシュメモリ293にコピーしたデータをブロック番号B2が示すブロックに記録(コピー)することで、実現できる。
また、動的更新部299は、半導体記憶素子群に記録されたデータに基づいてパリティが生成されているか否かを表す情報であるパリティ生成有無情報については、パリティ対応リスト39において、ブロック番号B1が対応付けられている情報と、ブロック番号B2が対応付けられている情報と、を入れ替える。
これは、入れ替え対象ブロックに記憶されているデータには変更がないため、入れ替え対象ブロックに記憶されているデータがパリティデータ生成の基礎となっている場合であっても、パリティデータを作り直す必要はないからである。したがって、動的更新部299は、パリティ対応リスト39において、ブロック番号B1が対応付けられている情報と、ブロック番号B2が対応付けられている情報と、を入れ替えるだけで良い。なお、入れ替え対象ブロックがパリティデータを記憶している場合でも同様である。
また、動的更新部299は、アドレス領域A1に対応付けられているブロック番号(B1)と、アドレス領域A2に対応付けられているブロック番号(B2)と、の対応付けを入れ替える。また、動的更新部299は、ブロック番号(B1)のブロック状態と、ブロック番号(B2)のブロック状態を入れ替える。
なお、入れ替え対象ブロックは、アドレス領域に対応付けられているブロック(アドレス割当ブロック)に限られない。例えば、どちらか一方が未割当ブロックである場合は、未割当ブロックに記録されていたデータは意味を持たないので、上記データ内容のコピー処理のうち、コピー元データが未割当ブロックに記録されているもののコピー処理は、省略することができる。これにより、ブロックの消去/書き込み回数を削減することができるため、処理速度を向上し、また、半導体記憶装置の寿命の低下を低減することができる。
なお、上記処理では、新たにデータを書き込んでアドレス領域のマッピングを変更しているため、動的更新部299は、並び順情報管理部270bが管理する並び順情報を更新させても良い。並び順情報を更新することで、次回の書き込み等の処理の際に、より好適な情報が得られる。
より詳細には、動的更新部299は、ブロック番号B1に基づいて、半導体記憶素子インタフェース部292bを介して半導体記憶素子群9から当該ブロック番号により特定されるブロックのデータと特定されるブロックのデータに対応付けて記憶された誤り検出情報と特定されるブロックのデータに対応付けて記憶された誤り訂正情報を読み込む。なお、誤り検出情報と誤り訂正情報との少なくとも一方が書き込まれるブロックとは別のブロックなどに記憶された場合は、誤り訂正制御部260bの誤り検出・訂正情報管理部61に読み込むべきデータと対応付けられた誤り検出情報と誤り訂正情報の記憶されている場所を問い合わせて、誤り検出情報と誤り訂正情報を読み込む。読み込んだデータと、誤り検出情報と、誤り訂正情報は、キャッシュメモリ293に保存する。
続いて、動的更新部299は、ブロック番号B2に基づいて、半導体記憶素子インタフェース部292bを介して半導体記憶素子群9から当該ブロック番号により特定されるブロックのデータと特定されるブロックのデータに対応付けて記憶された誤り検出情報と特定されるブロックのデータに対応付けて記憶された誤り訂正情報を読み込む。なお、誤り検出情報と誤り訂正情報の少なくとも一方が書き込まれるブロックとは別のブロックなどに記憶された場合は、誤り訂正制御部260bの誤り検出・訂正情報管理部61に読み込むべきデータと対応付けられた誤り検出情報と誤り訂正情報の記憶されている場所を問い合わせて、誤り検出情報と誤り訂正情報を読み込む。
そして、動的更新部299は、半導体記憶素子インタフェース部292bを介して半導体記憶素子群9のブロック番号B1で特定されるブロックのデータを消去する。そして、動的更新部299は、ブロック番号B1で特定されるブロックに、上記ブロック番号B2で特定されるブロックから読み込んだデータ、および誤り検出情報、および誤り訂正情報を、半導体記憶素子インタフェース部292bを介して半導体記憶素子群9に書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
また、上記ブロック番号B2で特定されるブロックから読み込んだデータの誤りを訂正または復元するために、図17の読み込みパトロール処理におけるステップS402からステップS407の処理に相当する処理を行い、誤りを訂正したデータまたは誤りを復元したデータを書き込み対象のデータとしてよい。
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部210bに当該ブロックの平準化情報の更新の要求を行う。
さらに、動的更新部299は、半導体記憶素子インタフェース部292bを介して半導体記憶素子群9のブロック番号B2で特定されるブロックのデータを消去する。そして、動的更新部299は、ブロック番号B2で特定されるブロックに、上記キャッシュメモリ293に保存したデータを、半導体記憶素子インタフェース部292bを介して半導体記憶素子群9に書き込む。ここで書き込まれるデータは、例えば、上記ブロック番号B1で特定されるブロックから読み込んだデータ、誤り検出情報、及び、誤り訂正情報である。
なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
また、上記ブロック番号B1で特定されるブロックから読み込んだデータの誤りを訂正または復元するために、図17の読み込みパトロール処理におけるステップS402からステップS407の処理に相当する処理を行い、誤りを訂正したデータまたは誤りを復元したデータを書き込み対象のデータとしてよい。
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部210bに当該ブロックの平準化情報の更新の要求を行う。
なお、入れ替え対象ブロックは、アドレス領域に対応付けられているブロック(アドレス割当ブロック)に限られない。例えば、どちらか一方が未割当ブロックである場合は、未割当ブロックに記録されていたデータは意味を持たないものであるので、上記データ内容のコピー処理のうち、コピー元データが未割当ブロックに記録されているもののコピー処理は、省略することができる。これにより、ブロックの消去/書き込み回数を削減することができるため、処理速度を向上し、また、半導体記憶装置の寿命の低下を低減することができる。
また、動的更新部299は、ブロック番号B1またはブロック番号B2が、パリティグループを構成しているか否かを、パリティ制御部230bに問い合わせる。パリティグループを構成していた場合は、動的更新部299は、当該パリティグループの削除要求をパリティ制御部230bに行う。続いて、動的更新部299は、削除したパリティグループの当該ブロック番号の情報を、もう一方のブロック番号の情報で更新したパリティグループ情報のパリティグループ登録要求を、パリティ制御部230bに行う。
なお、これらの、パリティグループ削除要求およびパリティグループ登録要求を発行する一連の処理は、ブロック番号B1およびブロック番号B2について、整合性を保ったまま、他のブロックに係る情報等が変更されることなく、入れ替える必要がある。
また、動的更新部299は、ブロック番号B1またはブロック番号B2が、アドレステーブル11に登録されていた場合は、アドレステーブル11の当該ブロック番号の削除をブロック制御部210bに要求する。動的更新部299は、ブロック制御部210bが削除したブロック番号が対応付けられていたアドレス領域と、もう一方のブロック番号とを対応付ける要求をブロック制御部210bに行う。
なお、これらの、ブロック番号削除要求およびブロック番号登録要求を発行する一連の処理は、ブロック番号B1およびブロック番号B2について、整合性を保ったまま、他のブロックに係る情報等が変更されることなく、入れ替える必要がある。
なお、上記処理では、新たにデータを書き込んでアドレス領域のマッピングを変更しているため、動的更新部299は、並び順情報管理部270bが管理する並び順情報を更新しても良い。並び順情報を更新することで、次回の書き込み等の処理の際に、より好適な情報が得られる。
動的更新部299は、さらに、ブロックテーブル12において、ブロック番号B1のブロック状態を、ブロック番号B2のブロック状態に変更する要求をブロック制御部210bに行うとともに、ブロック番号B2のブロック状態を、ブロック番号B1のブロック状態に変更する要求をブロック制御部210bに行う。なお、前記2つのブロック状態変更要求を発行する一連の処理は、ブロック番号B1およびブロック番号B2について、整合性を保ったまま、他のブロックに係る情報等を変更することなく、入れ替える必要がある。
以上の処理により、予め定められたタイミングまたは動的に定められたタイミングで、論理アドレス情報と物理アドレス情報との対応付けを更新することができる。
〔第4の実施の形態〕
本実施の形態では、パリティ割当ブロックの数を、所定の条件に基づいて増減させる。平準化処理、すなわち、ウェアレベリングと呼ばれる処理では、データを書き込むときに、未割当ブロックにデータを書き込み、更新対象の古いデータが記録されているブロックを無効状態、すなわち、未割当状態にし、ブロックのマッピング情報を更新するという処理を行う。
そのため、同一の平準化処理方法の下では、未割当ブロックの数が多いほど、1ブロックあたりの消去又は書き込み回数が減ることになり、半導体記憶装置の寿命が延びることになる。
ここで、パリティ割当ブロックとして使用するブロック数を増やすと、冗長度が高くなり耐障害性は高まる。しかし、未割当ブロックの数は減り、ウェアレベリングによる寿命の長大化効果は低下する。一方、パリティ割当ブロックとして使用するブロック数を減らせば、冗長度が低くなり耐障害性は低下する。しかし、未割当ブロックの数が増え、ウェアレベリングによる寿命の長大化効果は高まる。
そこで、例えば、データの読み込みエラーの発生度合いの増減や、読み込みエラーにおける誤り率の増減に応じて、パリティ割当ブロックとして使用するブロック数を増減するとよい。このように、耐障害性よりも寿命の長大化効果を重視する場合は、パリティ割当ブロックとして使用するブロック数を減らし、逆の場合は、パリティ割当ブロックとして使用するブロック数を増やすことで、必要な冗長度に応じた未割当ブロックの数を確保することが可能になる。
(全体ブロック図)
図19は、本実施の形態に係る半導体記憶装置1が有するコントローラ200cの機能構成の例を示す図である。図19のコントローラ200cにおいて、図3のコントローラ200aと同一の機能及び作用を有する各部は、図3と同一の符号を付し、ここでは説明を省略する。
図19のコントローラ200cは、ブロック数変更部215、ブロック群選択部216、誤り訂正制御部260c、パリティ制御部230c、ブロック制御部210c、コマンド処理部224、キャッシュメモリ293、ホストインタフェース部291c、及び、半導体記憶素子インタフェース部292cを有する。なお、図示しないが、動的更新部299を有していても良い。
このうち、誤り訂正制御部260c、パリティ制御部230c、ブロック制御部210c、ホストインタフェース部291c、半導体記憶素子インタフェース部292cについては、コマンド処理部224またはブロック数変更部215またはブロック群選択部216と連携し、処理を行う点が異なるだけで、連携処理の内容自体は図3のものと同一であるため、説明は省略する。
コマンド処理部224は、ホストインタフェース部291cを介して、ホスト装置からの書き込み要求や読み込み要求等のコマンドを受け付け、ブロック制御部210c、パリティ制御部230c、誤り訂正制御部260c等と連携して、必要に応じてアドレス領域とブロック番号との対応付けであるマッピングの更新処理や、パリティグループの更新処理などを伴って、所定の処理を行う。
本実施の形態では、たとえばパリティグループを構成しているデータブロックの数を増減させる手法や、パリティ生成方法を変更するなどの手法により、半導体記憶装置全体におけるパリティ割当ブロックの数を増減させることに着目しており、パリティグループがどのタイミングで構成あるいは解体されるかは問わない。
つまり、コマンド処理部224が、図3のコントローラ200aに含まれる、書き込み処理部220、読み込み処理部221、その他のコマンド処理部223、復元可否判断部250、パリティ生成パトロール部240、読み込みパトロール部241、並び順情報管理部270等が有する機能を有し、第2の実施形態のように,書き込み処理においてパリティグループを解体し、パリティ生成パトロール処理においてパリティグループを構成(生成)する構成を採っても良い。また、書き込み処理において、要求されたデータの書き込みと共にパリティデータを更新し、パリティグループの情報を更新するような構成を採り、第2の実施形態におけるパリティ生成パトロール処理を不要とする構成を採っても良い。なお、以降に説明するその他の実施の形態にブロック数変更部215およびブロック群選択部216を付加するように適宜読み替えることが可能である。
ブロック数変更部215は、必要とされる冗長度が変わった場合に、ブロック数変更処理を行う。なお、必要とされる冗長度が変わったときに限らず、定期的に処理を行うようにしてもよく、コントローラ200cの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行うようにしても良い。
より詳細には、ブロック数変更部215は、ブロック群選択部216に、ブロック数を変更した新たなパリティグループを構成するための、パリティの生成の基礎となるデータが記録されているブロックのブロック番号とパリティ生成方法を問い合わせる。ブロック数変更部215は、問い合わせの結果として、複数のブロック番号およびパリティ生成方法を受け取ると、当該ブロックがパリティグループを構成しているか否かをパリティ制御部230cに順番に問い合わせ、パリティグループを構成している場合は、当該パリティグループを解体する。より詳細には、ブロック数変更部215は、当該パリティグループを構成している全てのパリティブロックの状態を未割当状態に変更するように、ブロック制御部210cに依頼し、結果として、当該パリティグループを構成している全てのパリティブロックを未割り当てブロックとして回収する。また、ブロック数変更部215は、当該パリティグループの登録解除要求を、パリティ制御部230cに行う。
また、ブロック数変更部215は、パリティ制御部230cに、当該ブロックに記録されているデータから当該パリティ生成方法に従ってパリティデータを生成する依頼を行う。ブロック数変更部215は、依頼の結果として、パリティデータを受け取ると、誤り訂正制御部260cに、当該パリティデータの誤り検出情報と誤り訂正情報の生成を依頼する。ブロック数変更部215は、依頼の結果として、誤り検出情報と誤り訂正情報を受け取ると、ブロック制御部210cに、未割当ブロックの取り出しを要求する。ブロック数変更部215は、ブロック制御部210cから書き込み先ブロックのブロック番号を受け付けると、半導体記憶素子インタフェース部292cを介して半導体記憶素子群9のブロック番号に対応するブロックのデータを消去し、書き込み要求されたデータと誤り検出情報と誤り訂正情報を書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部210cに当該ブロックの平準化情報の更新の要求を行う。
ブロック数変更部215は、ブロック制御部210cに、当該の書き込んだブロックのブロック状態をパリティ割当状態に変更する要求を行う。また、パリティ制御部230cに、ブロック群選択部216から受け取ったブロック番号およびパリティ生成方法と、前記パリティ割当状態にしたブロック番号の情報を含むパリティグループ登録依頼を行う。
ブロック数変更部215は、また、ブロック群選択部216によってブロック数変更対象と判定された、パリティの生成の基礎となるデータが記録されているブロックが属するパリティグループが存在している場合は、当該パリティグループを解体する上記処理を遅らせて、当該パリティグループを監視しておき、書き込み処理等によって監視していたパリティグループに属するブロックが更新されるなどの要因により、当該パリティグループのパリティを更新する必要性が生じたタイミングで、遅らせていたパリティグループ解体処理を実行し、ブロック数変更処理を実行してもよい。このようにすることで、パリティグループの生成回数を少なくとも1回省略できる。これにより、ブロックの消去回数や書き込み回数を削減することができるので、処理速度を向上し、また、半導体記憶装置の寿命の低減化を抑制することができる。
また、ブロック数変更部215が、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
ブロック群選択部216は、ブロック数変更部215から、ブロック数を変更した新たなパリティグループを構成するための,パリティの生成の基礎となるデータが記録されているブロックのブロック番号とパリティ生成方法の問い合わせを受ける。ブロック群選択部216は、パリティ制御部230cまたはブロック制御部210cなどに順番に問い合わせるなどして、所定の方法に基づいて、新たなパリティグループを構成するための、パリティグループ又はパリティグループを構成していないブロックを選択する。選択したパリティグループから、ブロック数を変更した新たなパリティグループを構成する方法は、例えば、以下の3つの方法がある。
(B1)ひとつのパリティグループを、複数のパリティグループに分割する。
(B2)複数のパリティグループを、ひとつのパリティグループに統合する。
(B3)複数のパリティグループから、元のパリティグループとは構成ブロック数が異なるように、複数のパリティグループを生成する。
また、パリティグループを構成していないブロックを、パリティの生成の基礎となるデータが記録されているブロックとして、上記3つの方法に組み合わせても良い。また、パリティグループを構成している、パリティの生成の基礎となるデータが記録されているブロックは同一のものを使用し、異なるパリティ生成方法を採用し、パリティデータを記録するブロックの数を変更するようにしてもよい。また、パリティの生成の基礎となるデータが記録されているブロックは同一のものではなく、上記3つの方法によるものと組み合わせても良いし、パリティグループを構成していないブロックを組み合わせてもよい。
なお、ブロック数を変更した新たなパリティグループを構成する方法は上記に限らず、上記以外の適切な方法を採用しても良い。
ブロック群選択部216は、上記選択結果をブロック数変更部215に回答する。
また、ブロック群選択部216が、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
(ブロック数変更処理)
図20は、ブロック数を変更する処理を説明するフロー図である。図20の処理は、ブロック数変更部215及びブロック群選択部216により行われる。
図20のステップS501では、ブロック群選択部216が、ブロック数を変更する対象になる、1つ以上のパリティグループを選択する。また、パリティグループを構成していないブロックを、パリティの生成の基礎となるデータが記録されているブロックとして選択しても良い。
ステップS502では、ブロック数変更部215が、選択したパリティグループの解体処理を行う。より詳細には、まず、ブロック数変更部215は、パリティ制御部230cと協力して、選択したパリティグループの登録解除処理を行う。続いて、ブロック数変更部215は、ブロック制御部210cと協力して、登録解除したパリティグループを構成していた、パリティ割当ブロックのブロック状態を、未割当状態に設定し、結果としてそのブロックを未割当ブロックとして回収する。
なお、ブロック数を変更した新たなパリティグループを構成するための,パリティの生成の基礎となるデータが記録されているブロックとして、パリティグループを構成していないブロックを選択した場合は、上記パリティグループの登録解除処理は不要である。
ステップS503及びステップS504は、生成するパリティグループの数だけ繰り返す。ステップS503では、ブロック群選択部216が、ステップS502でパリティグループが解体されたことにより得られたデータブロック群の中から、新たなパリティグループを構成するデータブロック群(パリティの生成の基礎となるデータが記録されているブロック)を選択する。
また、データブロック群の数を変更し、結果として必要となるパリティ割当ブロックの数を変更するのではなく、パリティ生成方法を変更し、必要となるパリティブロック群の数を変更するようにしてもよい。例えば、パリティ割当ブロックを2つ必要とするパリティ生成方法から、パリティ割当ブロックを1つ必要とするパリティ生成方法に変更してもよい。
なお、上記を組み合わせて、たとえば、パリティグループを構築する際に、それぞれのパリティグループが、異なるブロック数で構築されるようにしてもよい。例えば、データブロック群の数が、5つ、4つ、3つであるようなパリティグループを混在させてパリティグループを構築してもよい。また例えば、上記を組み合わせて、異なるパリティ生成方法を採用し、必要なパリティブロック群の数が、2つ、1つであるようなパリティグループを混在させてパリティグループを構築してもよい。
なお、ブロック数を変更した新たなパリティグループを構成する方法は上記に限らず、上記以外の適切な方法を採用しても良い。
ステップS504では、ステップS503において選択されたデータブロック群から、選択されたパリティ生成方法に従って、パリティグループを構成する。より詳細には、まず、パリティ制御部230cが、選択したブロック群から、パリティデータを生成する。続いて、誤り訂正制御部260cが、生成したパリティデータから、誤り検出情報と誤り訂正情報を生成する。これにより、パリティ割当ブロックに書き込む内容を準備する。
続いて、ブロック制御部210cが、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。そして、ブロック数変更部215が、半導体記憶素子インタフェース部292cを介して確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックにデータとともに記録するとしている。しかし、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよいし、半導体記憶素子以外の記憶領域に記録してもよい。
また、ブロック数変更部215が、未割当ブロックの更新処理を行ったため、ブロック制御部210cが、その未割当ブロックの平準化情報を更新する。続いて、ブロック制御部210cが、その未割当ブロックの状態を、パリティ割当状態にする。
続いて、パリティ制御部230cが、選択したブロック群と、パリティ割当ブロックを、新しいパリティグループとして、パリティグループ登録処理を行う。
なお、ブロック数をパリティグループ毎に異なるように変更させる、以上の処理を続けていくと、パリティグループを構成するブロック数が、いわゆる局所最適値となり、全体としての最適値にならない場合がある。例えば、データブロック群の数が多いパリティグループとデータブロック群の数が少ないパリティグループとが、並び順では交互に存在するというような状況になる場合が考えられる。同様に、例えば、パリティブロック群の数が多いパリティグループとパリティブロック群の数が少ないパリティグループとが、並び順では交互に存在するというような状況になる場合が考えられる。
このため、パリティグループを構成するデータブロック群の数あるいはパリティブロック群の数が、半導体記憶装置の全体において最適となるように、半導体記憶装置の全体に対するブロック数変更処理を、前記の処理とは独立に実行してもよい。
(初回パリティ生成処理)
パリティグループの構築は、半導体記憶装置1の初期化処理時等に行う構成にしてもよい。
なお、第1の実施形態の受付部29は第4の実施形態のホストインタフェース部291cとコマンド処理部224の一部が対応する。第1の実施形態の第1の記録部28aは第4の実施形態のブロック制御部210cの一部が対応する。第1の実施形態の第2の記録部28bは第4の実施形態のパリティ制御部230cの一部が対応する。第1の実施形態の第1の書き込み手段22aは第4の実施形態のコマンド処理部224の一部と半導体記憶素子インタフェース部292cとブロック制御部210cの一部とパリティ制御部230cの一部が対応する。第1の実施形態の第2の書き込み手段22bは第4の実施形態のコマンド処理部224の一部とブロック数変更部215の一部とブロック群選択部216の一部とパリティ制御部230cの一部と半導体記憶素子インタフェース部292cとブロック制御部210cの一部とが対応する。
〔第5の実施の形態〕
本実施の形態では、データを書き込む際に、更新対象となる古いデータが記録されているブロックをすぐに無効状態にしない。これにより、パリティの更新回数を抑えることができ、パリティ更新に伴う処理パフォーマンス低下の影響を抑えることが可能になり、また、パリティ更新に伴うブロックの消去・書き込み処理を削減することにより、半導体記憶装置の寿命の減少を低減することができる。
本実施の形態において、半導体記憶素子群9が有するブロックは、少なくとも以下の4つの状態の何れか1つであることを表すブロック状態の情報と対応づけられる。
(C1)アドレステーブル11にブロック番号が設定されている(以下、この状態を「アドレス割当状態」という)。
(C2)アドレステーブル11にブロック番号が設定されていないが、直前のアドレス割当状態の際に保持していたデータを保持している(以下、この状態を「更新前割当状態」という)。
(C3)冗長情報、すなわちパリティデータを保持するブロックとして使用されている(以下、この状態を「パリティ割当状態」という)。
(C4)上記(C1)ないし(C3)の何れの状態でもなく、未使用状態である(以下、この状態を「未割当状態」という)。
なお、「アドレス割当状態のブロック」を、「アドレス割当ブロック」、「更新前割当状態のブロック」を、「更新前割当ブロック」、「パリティ割当状態のブロック」を、「パリティ割当ブロック」、「未割当状態のブロック」を「未割当ブロック」という。また、「アドレス割当ブロック」のうち、書き込み処理により「未割当ブロック」または「更新前割当ブロック」になるブロックの、書き込み処理前の状態を「更新前ブロック」ともいう。
(コントローラブロック図)
図21は、本実施の形態に係る半導体記憶装置1が有するコントローラ200dの機能構成の例を説明する図である。本実施の形態に係る半導体記憶装置のコントローラ200dは、第2の実施の形態におけるコントローラ200aと、同一の機能及び作用を有する各部を含む。コントローラ200dは、さらに、コントローラ200aとは異なる機能及び作用を有する各部を含む。
コントローラ200dは、書き込み処理部220d、読み込み処理部221、その他のコマンド処理部223、誤り訂正制御部260d、パリティ制御部230d、復元可否判断部250、更新前ブロック回収部242、読み込みパトロール部241d、ブロック制御部210d、並び順情報管理部270d、キャッシュメモリ293、ホストインタフェース部291d、及び、半導体記憶素子インタフェース部292dを有する。なお、コントローラ200dは、図18に示した動的更新部299を含んでいても良い。
図21において、図3のコントローラ200aと同一の機能及び作用を有する各部には、同一の符号を付し、ここでは説明を省略する。
このうち、ホストインタフェース部291d、半導体記憶素子インタフェース部292d、誤り訂正制御部260dについては、書き込み処理部220dまたは更新前ブロック回収部242と連携し、処理を行う点が異なるだけで、連携処理の内容自体は図3のものと同一であるため、説明は省略する。
また、ブロック制御部210dについては、ブロックの状態として、アドレス割当状態、パリティ割当状態、未割当状態に加えて、更新前割当状態が含まれる点と、並び順情報管理部270dと連携し、処理を行う点が異なるだけで、連携処理の内容自体は図3のものと同一であるため、詳細な説明は省略する。
また、パリティ制御部230dについては、データブロックとなるブロックは、アドレス割当ブロックに加えて、更新前割当ブロックが含まれる点が異なるのみであるため、詳細な説明は省略する。
また、読み込みパトロール部241dについては、読み込み対象となる未割当状態ではないブロックには、アドレス割当ブロックやパリティ割当ブロックに加えて、更新前割当ブロックが含まれる点が異なるのみであるため、詳細な説明は省略する。
書き込み処理部220dは、書き込み要求に基づいて、ブロックへのデータの書き込みを行う。書き込み処理部220dは、また、書き込み処理の際に、新たに更新前ブロックとなるブロックを未割当ブロックとしてすぐには回収しない。より詳細には、書き込み処理部220dは、書き込み要求をホスト装置からホストインタフェース部291dを介して受け付ける。
書き込み処理部220dは、書き込むべきデータから誤り訂正制御部260dの誤り検出情報生成部62に誤り検出情報を生成することを要求し、要求に対応して誤り訂正制御部260dの誤り検出情報生成部62で生成された誤り検出情報を受け取る。書き込み処理部220dは、また、書き込むべきデータから誤り訂正制御部260dの誤り訂正情報生成部64に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正制御部260dの誤り訂正情報生成部64で生成された誤り訂正情報を受け取る。
書き込み処理部220dは、ブロック制御部210dに書き込み先となるブロックを問い合わせる(つまり、未割当ブロックの取り出しを要求する)。
書き込み処理部220dは、ブロック制御部210dから書き込み先ブロックのブロック番号を受け付けると、半導体記憶素子インタフェース部292dを介して半導体記憶素子群9のブロック番号に対応するブロックのデータを消去し、書き込み要求されたデータと誤り検出情報と誤り訂正情報を書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部210dに当該ブロックの平準化情報の更新の要求を行う。
書き込み処理部220dは、書き込み要求に含まれるアドレス領域のマッピングを上記処理により書き込み要求されたデータを書き込んだブロックに変更する。より詳細には、書き込み処理部220dは、書き込み要求に含まれるアドレス領域に対応付けられていたブロック(更新前ブロック)のブロック番号を、ブロック制御部に問い合わせ、更新前ブロックのブロック番号の削除要求をブロック制御部210dに行う。また、上記処理により書き込み要求されたデータを書き込んだブロックのブロック番号を、書き込み要求に含まれるアドレス領域に対応付ける要求をブロック制御部210dに行う。
また、書き込み処理部220dは、上記更新前ブロックの状態を、更新前割当状態に、新たに書き込んだ未割当ブロックの状態を、アドレス割当状態に変更する要求をブロック制御部210dに行い、ブロックの状態を更新する。
アドレステーブル11が更新されたことに伴い、書き込み処理部220dは、並び順情報管理部270dにアドレス領域情報テーブルの中で、更新されたアドレス領域について更新を要求する通知であるアドレス領域の更新通知を送ると共に、更新前割当ブロックとなったブロックのブロック番号の通知を、並び順情報管理部270dに送る。更新通知に含まれる情報としては、各アドレス領域が更新された旨の情報や各アドレス領域が更新された時期の情報がある。これらの情報が並び順情報管理部270dに送られると、並び順情報管理部270dが管理する情報として必要な各アドレス領域が更新された回数や更新された順序に加工する。
書き込み処理部220dは、さらに、上記更新前割当状態にしたブロック(更新前割当ブロック)が、パリティグループを構成していたかをパリティ制御部230dに問い合わせる。書き込み処理部220dは、パリティ制御部230dから、更新前割当ブロックがパリティグループに属していない旨の回答を受けると、ブロック制御部210dに、当該更新前割当ブロックのブロック状態を未割当状態に変更する要求を行い、結果として当該更新前割当ブロックを未割り当てブロックとして回収する。
書き込み処理部220dは、パリティ制御部230dから、更新前割当ブロックがパリティグループに属している旨の回答を受けると、さらに、パリティ制御部230dに対して、当該パリティグループのデータブロック群のブロック番号を問い合わせる。そして、書き込み処理部220dは、ブロック制御部210dに、該ブロックが更新前割当ブロックであるかを問い合わせる。書き込み処理部220dは、データブロック群が全て更新前割当ブロックによって構成されていた場合、当該パリティグループを構成している全てのブロックの状態を未割当状態に変更するように、ブロック制御部210dに要求すると共に、当該パリティグループの登録解除要求をパリティ制御部230dに要求し、結果として当該パリティグループを構成している全てのブロックを未割当ブロックとして回収する。
また、書き込み処理部220dは、ブロック制御部210dに順番に問い合わせて、アドレス割当ブロックのうち、パリティグループを構成していないブロックを集める。集めたブロックの数が所定の個数に達した場合、書き込み処理部220dは、パリティ制御部230dのパリティ生成部31に対して、集めたブロックに記録されているデータから、パリティデータを生成することを要求する。書き込み処理部220dは、パリティ制御部230dのパリティ生成部31から、生成されたパリティデータを受け取ると、該パリティデータから誤り訂正制御部260dの誤り検出情報生成部62に誤り検出情報を生成することを要求し、要求に対応して誤り訂正制御部260dの誤り検出情報生成部62で生成された誤り検出情報を受け取る。書き込み処理部220dは、また、該パリティデータから誤り訂正制御部260dの誤り訂正情報生成部64に誤り訂正情報を生成することを要求し、要求に対応して誤り訂正制御部260dの誤り訂正情報生成部64で生成された誤り訂正情報を受け取る。
書き込み処理部220dは、ブロック制御部210dに書き込み先となるブロックを問い合わせる(つまり、未割当ブロックの取り出しを要求する)。
書き込み処理部220dは、ブロック制御部210dから書き込み先ブロックのブロック番号を受け付けると、半導体記憶素子インタフェース部292dを介して半導体記憶素子群9のブロック番号に対応するブロックのデータを消去し、該パリティデータと誤り検出情報と誤り訂正情報を書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
ここで、平準化処理を行う場合にブロックのデータが消去された回数やブロックのデータが消去された時期の情報を利用する場合は、データを消去したタイミングでブロック制御部210dに当該ブロックの平準化情報の更新の要求を行う。
書き込み処理部220dは、ブロック制御部210dに、書き込んだブロックのブロック状態をパリティ割当状態に更新する更新要求を送る。
書き込み処理部220dは、収集したブロックと、書き込んだブロックとからなるパリティグループの登録をパリティ制御部230dに要求する。
また、書き込み処理部220dが、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
以上のように、書き込み処理部220dが、書き込み処理の際に、新たに更新前ブロックとなるブロックを未割当ブロックとして回収せず、パリティグループの解体を行わないことにより、そのパリティグループに属するアドレス割当ブロックが保持するデータに対する耐障害性を実現する。なお、「回収」又は「未割当ブロックとして回収する」とは、他の状態のブロックのブロック状態の情報を「未割当状態に変更する」ことをいう。
更新前ブロック回収部242は、更新前割当ブロックが所定の個数たまった場合に、それらの更新前割当ブロックを未割当状態に変更する。
更新前ブロック回収部242は、また、所定の時間間隔により、更新前割当ブロックの回収を行ってよい。更新前ブロック回収部242は、更新前割当ブロック又は未割当ブロック等が所定の個数又は所定の割合になった場合に、更新前割当ブロックを回収してもよい。また、コントローラ200dの処理負荷が所定の閾値を下回ったときに処理を行うようにしても良い。そのほか、予めまたは動的に定められたタイミングで処理を行なうようにしても良い。
より詳細には、更新前ブロック回収部242は、並び順序情報管理部270dに、並び順情報にしたがって、アドレス領域またはブロック番号の参照要求を順番に送る。そして、要求に対応したアドレス領域またはブロック番号の情報を並び順序情報管理部270dから受け取る。このうち、更新前ブロック回収部242は、受け取った順番でアドレス領域の情報を受け取った場合は、該アドレス領域に対応するブロック番号をブロック制御部210dに問い合わせ、ブロック制御部210dからブロック番号を受け取る。
更新前ブロック回収部242は、並び順情報管理部270dまたはブロック制御部210dからブロック番号を受け取った順番で、パリティ制御部230dに受け取ったブロック番号のブロックが構成しているパリティグループの情報を問い合わせる。
更新前ブロック回収部242は、パリティ制御部230dから受け取ったパリティグループを解体し、更新前割当ブロックと、パリティ割当ブロックを未割り当てブロックとして回収する。より詳細には、更新前ブロック回収部242は、パリティ制御部230dに、該パリティグループの登録解除を要求する。そして、更新前ブロック回収部242は、ブロック制御部210dに、該パリティグループを構成している更新前割当ブロックと、パリティ割当ブロックのブロック状態を、未割当状態に設定する要求を行い、結果として未割り当てブロックとして回収する。
更新前ブロック回収部242は、該パリティグループを構成していた、アドレス割当ブロックを、パリティ生成の対象として収集する。
そして、更新前ブロック回収部242は、該パリティ生成対象ブロックを所定数収集すると、パリティ制御部230dのパリティ生成部31にその所定数のブロックに記録されたデータに基づいてパリティデータの生成を要求し、パリティ制御部230dのパリティ生成部31で生成されたパリティデータを受け取る。更新前ブロック回収部242は、誤り訂正制御部260dの誤り検出情報生成部62に、パリティデータから誤り検出情報を生成することを要求し、誤り訂正制御部260dの誤り検出情報生成部62で生成された誤り検出情報を受け取る。更新前ブロック回収部242は、誤り訂正制御部260dの誤り訂正情報生成部64に、パリティデータから誤り訂正情報を生成することを要求し、誤り訂正制御部260dの誤り訂正情報生成部64で生成された誤り訂正情報を受け取る。
更新前ブロック回収部242は、ブロック制御部210dに未割当ブロックの取り出しを要求し、ブロック制御部210dからブロック番号を受け取る。更新前ブロック回収部242は、半導体記憶素子インタフェース部292dを介して、受け取ったブロック番号に対応する半導体記憶素子群9のブロックのデータを消去し、パリティ制御部230dのパリティ生成部31が生成したパリティデータと、誤り訂正制御部260dの誤り検出情報生成部62がパリティデータから生成した誤り検出情報と、誤り訂正制御部260dの誤り訂正情報生成部64がパリティデータから生成した誤り訂正情報を受け取ったブロック番号のブロックに半導体記憶素子インタフェース292dを介して書き込む。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、また、半導体記憶素子以外の記憶領域に記録してもよい。
更新前ブロック回収部242は、ブロック制御部210dに、消去したブロックの平準化情報の更新要求を行う。更新前ブロック回収部242は、ブロック制御部210dに、パリティデータを書き込んだブロックのブロック状態をパリティ割当状態に更新する更新要求を送る。
更新前ブロック回収部242は、収集したブロックと、書き込んだブロックとからなるパリティグループの登録をパリティ制御部230dに要求する。
また、更新前ブロック回収部242が、順番に問い合わせ等している取得対象の情報は、順番の情報と取得対象の情報とを対応付けて一括で取得し、受け取り側で対応付けられた順番の情報と取得対象の情報とを用いて処理しても良い。
本実施の形態に係る並び順情報管理部270dは、図4−2に示すように、アドレス領域情報テーブルとブロック番号情報テーブルとを有する構成である。このうち、アドレス領域情報テーブルについては、図4−1に示す構成と同一のため、詳細な説明は省略する。
ブロック番号情報テーブルは、アドレス領域情報テーブルのみでは管理できない並び順情報を管理する。これは、本実施の形態では、更新前割当ブロックを利用することによるものである。より詳細には、本実施の形態では、書き込み処理等において、あるアドレス領域に、書き込み要求を受け付ける前にマッピングされていたアドレス割当ブロックを更新前割当ブロックに状態遷移させ、新たにデータを書き込んだブロックを当該アドレス領域にマッピングしなおし、アドレス領域のマッピングを変更する処理が含まれるが、このマッピング変更処理において、新たにマッピングされたブロックについての並び順情報はアドレス領域情報テーブルから取得できるものの、更新前割当ブロックに状態遷移したブロックについての並び順情報は、アドレス領域情報テーブルから得られなくなってしまうからである。更新前割当ブロックに状態遷移したブロックについての並び順情報を取得できるようにするために、並び順情報管理部270dは、ブロック番号情報テーブルを用いて、以下の処理を行う。
並び順情報管理部270dは、書き込み処理部220dからアドレス領域の更新通知を受ける際に、あわせて、更新前割当ブロックに状態遷移するブロックのブロック番号の通知を受け取る。そして、第2の実施の形態の並び順情報管理部270のアドレス領域情報テーブルの更新処理と同一の更新処理を行い、さらに、アドレス領域情報テーブルの当該アドレス領域に、アドレス領域の更新通知を受け付ける前に対応付けられて記録されていた並び順情報を、ブロック番号情報テーブルにおける、受け取ったブロック番号に対応付けて記録する(つまり、情報をコピーする)。これにより、アドレス領域情報テーブルから、更新前割当ブロックの並び順情報を引き継ぐことが可能になる。
並び順情報管理部270dは、更新前ブロック回収部242から並び順情報の参照要求を受けると、ブロック制御部210dに、全てのブロックのうち、更新前割当状態のブロック番号を問い合わせる。そして、並び順情報管理部270dは、受け取ったブロック番号に対応する並び順情報をブロック番号情報テーブルから抽出する。そして、並び順情報管理部270dは、該抽出した並び順情報とアドレス領域テーブルに記録されている並び順情報とを統合し、更新前ブロック回収部242に回答する。
(書き込み処理)
図22は、書き込み処理を説明するフロー図である。図22の書き込み処理は、図8の書き込み処理と異なり、一のパリティグループに属しているブロックが、全てアドレス割当ブロックではなくなった場合に、そのパリティグループを解体する。
図22のステップS601では、ブロック制御部210d等が、書き込み要求を受け、未割当ブロックを取得する。より詳細には、まず、書き込み要求データから、誤り訂正制御部260dが、誤り検出情報及び誤り訂正情報を生成し、ブロックに書き込む内容を準備する。続いて、ブロック制御部210dが、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。
ステップS602では、書き込み処理部220dが、確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックに記録する。しかし、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよいし、半導体記憶素子群9以外の記憶領域に記録してもよい。
また、未割当ブロックの更新処理を行ったことにより、ブロック制御部210dが、その未割当ブロックの平準化情報を更新する。
ステップS603では、更新済みの情報が記録されている未割当ブロックと、更新前ブロックとのマッピングを更新する。より詳細には、まず、ブロック制御部210dが管理するアドレステーブル11に基づいて、書き込み要求アドレスが含まれるアドレス領域に対応する、アドレス割当ブロックのブロック番号を取得する。そして、アドレステーブル11のそのアドレス領域から、更新前ブロックのブロック番号を削除し、当該未割当ブロックの番号を設定する。これにより、アドレステーブルの更新が完了する。
続いて、ブロック制御部210dが、更新前ブロックの状態を、更新前割当状態に設定し、さらに、その未割当ブロックの状態を、アドレス割当状態に設定する。これにより、ブロックの状態の設定が完了する。並び順情報管理部270dは、アドレステーブル11が更新されたことに基づき、並び順情報を更新する。
ステップS604では、パリティ制御部230dが、更新前ブロックがパリティグループに属していたかを判定する。パリティグループに属していない場合には、ステップS605に進み、パリティグループに属している場合には、ステップS606に進む。
この判定は、パリティ制御部230dが、更新前ブロックが属するパリティグループを検索し、返却値からそのパリティグループが存在するかどうかを判断することにより行うとよい。
ステップS605では、ブロック制御部210dが、更新前ブロックを未割当ブロックとして回収する。この回収処理は、更新前ブロックの状態を未割当状態に変更することで可能である。
あるブロックを更新した際、更新前ブロックがパリティグループに属していない場合は、パリティ構成を維持する必要はなく、また、当該アドレス領域のデータは更新済みのアドレス割当ブロックに保存されている。したがって、更新前割当ブロックとしてデータを保持させることは不要になるため、ステップS605では、未割当ブロックとして回収する。
ステップS606では、書き込み処理部220dとパリティ制御部230dとブロック制御部210dが協力して、更新前ブロックが属するパリティグループのデータブロックが、全て更新前割当ブロックになっているか否かを判定する。全てのブロックが更新前割当ブロックの場合には、ステップS607に進み、そうではない場合には、ステップS608に進む。
この判定は、パリティ制御部230dが、ステップS604で得られたパリティグループについて、パリティ対応リスト39からデータブロック群を抽出し、それぞれのブロックの状態をブロック制御部210dが管理するブロックテーブル12で調べることにより行われる。
ステップS607では、パリティ制御部230dが、ステップS606で判定されたパリティグループの破棄処理を行う。より詳細には、ブロック制御部210dが、そのパリティグループを構成しているすべてのブロックの状態を、未割当状態に変更する。また、パリティ制御部230dは、そのパリティグループの登録解除を行う。
パリティグループのデータブロック群が全て更新前割当ブロックの場合には、そのパリティグループを保持する必要性がない。そこで、そのパリティグループの破棄処理を行うことで、当該パリティグループを構成しているすべてのブロックを、未割当ブロックとして回収することができる。また、パリティグループの破棄処理は、パリティデータの生成および書き込み処理を伴わないため、後述する更新前ブロック回収処理に比べて処理コストが低い。
ステップS608では、パリティ制御部230dが、新たにアドレス割当ブロックとなったブロックが所定の個数集まったか否かを判定する。所定の個数集まっている場合には、ステップS609に進み、集まっていない場合は処理を終了する。
この判定は、ブロック制御部210dが管理するブロックテーブル12の全てのブロックの中で、アドレス割当ブロックを抽出し、さらに、パリティ制御部230dが管理するパリティ対応リスト39に基づいてパリティグループに属していないブロックを抽出し、抽出したブロックの数を見るとよい。
なお、ステップS602で、データを書き込んだ未割当ブロックは、ステップS603でアドレス割当ブロックになる。このアドレス割当ブロックは、パリティグループに属していないので、このアドレス割当ブロックをパリティ対応リスト39又はその他の図示しないリスト等で管理しておいてもよい。このように管理することで、パリティグループに属していないブロックを抽出する処理を簡略化することができる。
ステップS609では、パリティ制御部230dが、収集したブロックからパリティグループを構成する。より詳細には、まず、収集したブロックに記録されているデータから、パリティ制御部230dのパリティ生成部31が、パリティデータを生成する。続いて、生成したパリティデータから、誤り訂正制御部260dが、誤り検出情報と誤り訂正情報を生成する。これにより、パリティ割当ブロックに書き込む内容を準備する。
続いて、ブロック制御部210dが、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。そして、書き込み処理部220dが、確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックにデータとともに記録するとしている。しかし、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよいし、半導体記憶素子群9以外の記憶領域に記録してもよい。
また、当該未割当ブロックの更新処理を行ったことに対応して、ブロック制御部210dが、未割当ブロックの平準化情報を更新する。ブロック制御部210dは、また、その未割当ブロックの状態を、パリティ割当状態にする。
パリティ制御部230dは、収集したブロックとパリティ割当ブロックとを、新しいパリティグループとして、パリティグループ登録処理を行う。
(書き込み処理例)
図23から図25は、本実施の形態により実現される書き込み処理の例を説明するため図である。図23ないし図25において、(a)は、アドレステーブル11、(b)は、ブロックテーブル12、(c)は、パリティ対応リスト39である。また、(d)は、(a)から(c)に対応する状態を示す模式図である。ここでは、説明に最低限必要な情報のみを記載している。
なお、図には更新された箇所に関係する箇所のみを示している。
図23は、書き込み処理が開始される前の各テーブル等を示す図である。図23(d)において、△は、更新前割当ブロックであり、□は、アドレス割当ブロックまたはパリティ割当ブロックを表す。
図23の状態で、アドレス領域2に対して書き込み要求が発生した場合は、以下の(D1)から(D5)の処理が行われる。
(D1)ブロック制御部210dにより、たとえば未割当ブロック10が取り出され、書き込み処理部220dが、データを書き込む。
(D2)ブロック制御部210dが、ブロック2及びブロック10の状態を更新する。これにより、ブロック2が、更新前割当ブロックとなり、ブロック10が、アドレス割当ブロックとなる。
(D3)ブロック制御部210dが、アドレス領域2に対応するブロック番号を更新する。これにより、アドレス領域2がブロック10と対応づけられる。
(D4)パリティ制御部230dが、ブロック2の属するパリティグループ0のデータブロックがすべて更新前ブロックであることにより、パリティグループ0を破棄する。これにより、ブロック0、1、2、及び、8が、未割当ブロックとなり、パリティ対応リスト39から、グループ番号0を削除する。
(D5)パリティ制御部230が、アドレス割当ブロックが所定の個数集まったことにより、新たなパリティグループを構成する。すなわち、ブロック制御部210dが、たとえば未割当ブロック11を取り出し、書き込み処理部220dが、パリティ制御部230dが生成したパリティデータを書き込む。これにより、ブロック11がパリティ割当ブロックとなり、パリティ対応リスト39にグループ番号2が追加される。
以上の(D1)から(D5)の処理により、図24に示す状態が得られる。
また、図23に示す状態の際に、アドレス領域4に対する書き込み要求が発生した場合には、以下の(E1)から(E4)の処理が行われる。
(E1)ブロック制御部210dにより、たとえば未割当ブロック10が取り出され、書き込み処理部220dが、データを書き込む。
(E2)ブロック制御部210dが、ブロック7とブロック10の状態を更新する。これにより、ブロック7が、更新前割当ブロックとなり、ブロック10が、アドレス割当ブロックとなる。
(E3)ブロック制御部210dが、アドレス領域4に対応するブロック番号を更新する。これにより、アドレス領域4に対応するブロックが、ブロック7からブロック10となる。
(E4)ブロック7はパリティグループに属していないので、未割当ブロックとして回収する。これにより、ブロック7は、未割当ブロックとなる。
以上の(E1)から(E4)の処理により、図25に示す状態が得られる。
(更新前ブロック回収処理)
図26は、更新前ブロック回収部242が更新前割当ブロックを回収する処理を説明するフロー図である。更新前ブロック回収部242は、未割当ブロックの個数が所定の閾値を下回ったときに、更新前ブロックの回収処理を行う。なお、未割当ブロックの個数が所定の閾値を下回ったときに限らず、定期的に処理を行うようにしてもよく、コントローラ200dの処理負荷が所定の閾値を下回ったときに処理を行うようにしてもよい。そのほか、予めまたは動的に定められたタイミングで処理を行なうようにしても良い。
図26のステップS701では、更新前ブロック回収部242が、並び順情報管理部270dが管理する並び順情報に従い、更新順序が古い順にパリティグループを解体する。より詳細には、まず、並び順情報管理部270が管理する並び順情報に従い、更新前ブロック回収部242が、更新順序が古いブロックが属するパリティグループを検索する。次に、パリティ制御部230dが、そのパリティグループの登録解除処理を行う。
ステップS702では、更新前ブロック回収部242が、ステップS701で解体したパリティグループを構成していた、更新前割当ブロックとパリティ割当ブロックとを未割当ブロックとして回収する。この回収処理では、更新前割当ブロックとパリティ割当ブロックの状態とを、未割当状態に設定する。
ステップS703では、更新前ブロック回収部242が、ステップS701で解体したパリティグループを構成していた、アドレス割当ブロックが、所定の個数収集されたか否かを判定する。所定の個数収集された場合には、ステップS704に進み、収集されていない場合には、ステップS705に進む。
ステップS704では、パリティ制御部230dが、パリティグループを構成する。詳細には、まず、パリティ制御部230dが、収集されたブロックに記録されているデータから、パリティデータを生成する。続いて、誤り訂正制御部260dが、生成したパリティデータから、誤り検出情報と誤り訂正情報を生成する。この処理により、パリティ割当ブロックに書き込む内容が準備される。
続いて、ブロック制御部210dが、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。そして、更新前ブロック回収部242が、確保した未割当ブロックの消去処理を行った後に、準備した書き込み内容を書き込む。ここでは、誤り検出情報や誤り訂正情報を、データを書き込むブロックに記録する。なお、誤り検出情報や誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、半導体記憶素子以外の記憶領域に記録してもよい。
また、未割当ブロックの更新処理を行ったことにより、ブロック制御部210dが、未割当ブロックの平準化情報を更新する。また、ブロック制御部210dが、その未割当ブロックの状態を、パリティ割り当て状態にする。
さらに、パリティ制御部230dは、収集されたブロックと、パリティ割当ブロックとを、新しいパリティグループとして、パリティグループ登録処理を行う。
ステップS705では、並び順の終端に達したか否かの判定がなされる。終端に達している場合には、処理を終了し、終端に達していない場合には、ステップS701に戻って処理を繰り返す。
なお、終端に達したとき、アドレス割当ブロックの個数が、ステップS703で判定する所定の個数に満たない場合がある。その場合は、所定の個数に満たないアドレス割当ブロックのパリティグループを構成しない。これらのアドレス割当ブロックは、後ほど書き込み処理が行われた際に、更新された新しいアドレス割当ブロックとともに、パリティグループを構成することが期待される。
なお、ステップS702において回収する更新前割当ブロックを、すぐに未割当状態にするのではなく、未割当状態にする処理を並び順の終端に達するまで適宜保留しておいてもよい。それらの更新前割当ブロックとアドレス割当ブロックとの合計の個数が所定の個数を満たす場合は、パリティグループを構成することができ、並び順の終端における耐障害性を高めることができる。
(更新前ブロック回収処理例)
図27は、更新前ブロック回収処理の例を示す図であって、図23の状態から更新前ブロック回収処理が実行された状態を示す図である。ここでは、説明に最低限必要な情報のみを記載している。
なお、図には更新された箇所に関係する箇所のみを示している。
図27において、(a)は、アドレステーブル11、(b)は、ブロックテーブル12、(c)は、パリティ対応リスト39である。また、(d)は、(a)から(c)に対応する状態を示す模式図である。
図23の状態において、更新前ブロック回収処理が実行されると、次の(F1)から(F7)の処理が実行される。
(F1)パリティ制御部230dが、パリティグループ0を解体する。これにより、パリティグループ0が、パリティ対応リスト39から登録解除される。
(F2)更新前ブロック回収部242が、更新前割当ブロックとパリティ割当ブロックとを回収する。ブロック制御部210dが、ブロック0、1、及び、8を、未割当ブロックとする。
(F3)パリティ制御部230dが、集まっているアドレス割当ブロックの数を判定する。ここでは、個数は1であり、所定の個数集まっていない。
(F4)パリティ制御部230dが、パリティグループ1を解体する。これにより、パリティグループ1が、パリティ対応リスト39から登録解除される。
(F5)更新前ブロック回収部242が、更新前割当ブロックとパリティ割当ブロックとを回収する。ブロック制御部210dが、ブロック4及び9を未割当ブロックとする。
(F6)パリティ制御部230dが、集まっているアドレス割当ブロックの数を判定する。ここでは、集まっているアドレス割当ブロックは2、3、及び、5であり、所定の個数である3個たまったため、パリティ制御部230dが、パリティグループを構成する。また、ブロック制御部210dが、たとえば未割当ブロック10を取り出し、更新前ブロック回収部242がパリティデータを書き込む。ブロック制御部210dは、ブロック10をパリティ割当ブロックとし、パリティ制御部230dが、パリティ対応リスト39にグループ番号2を追加する。
(F7)ここまでの処理で、アドレス割当ブロック6及び7は、パリティグループを構成しない。
以上の構成をとることで、データを復元することができ、耐障害性を高めることができる。また、書き込み処理の速度等の性能低下を低減し、寿命の減少を低減することができる。
なお、第1の実施形態の受付部29は第5の実施形態のホストインタフェース部291dと書き込み処理部220dと読み込み処理部221dの一部が対応する。第1の実施形態の第1の記録部28aは第5の実施形態のブロック制御部210dの一部が対応する。第1の実施形態の第2の記録部28bは第5の実施形態のパリティ制御部230dの一部が対応する。第1の実施形態の第1の書き込み手段22aは第5の実施形態の書き込み処理部220dの一部と半導体記憶素子インタフェース部292dとブロック制御部210dの一部とパリティ制御部230dの一部が対応する。第1の実施形態の第2の書き込み手段22bは第5の実施形態の書き込み処理部220dの一部と更新前ブロック回収部242の一部とパリティ制御部230dの一部と半導体記憶素子インタフェース部292dとブロック制御部210dの一部とが対応する。
〔第6の実施の形態〕
本実施の形態では、第2の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させる。なお、第3の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させてもよい。第3の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させる場合は、以下の説明における各機能ブロックに付した符号を適宜読み替えることで可能である。
動的に変更される並び順情報にしたがってパリティグループを構成すると、パリティを生成する処理の際にパリティグループの解体および生成の処理が発生する場合がある。パリティグループの解体および生成の処理は、パリティ割当ブロックの書き込み処理の発生が伴うため、処理時間の増大と半導体記憶装置の寿命を短くすることにつながる。
そこで、パリティグループを構成するブロックの数を動的に変化させることにより、パリティグループを解体する処理の数を低減させることができる。また、パリティを生成する処理と同時に、ブロック数を変更する処理を行うことにより、結果として、半導体記憶装置全体におけるパリティ割当ブロックの数を変更することができる。
図28は、第2の実施の形態のパリティ生成パトロール処理におけるパリティグループ生成処理に代えた、ブロック数が異なるパリティグループを新たに生成する処理を説明するフロー図である。図28のステップS801では、ブロック数が異なる新たなパリティグループを構成するための、ブロック群を選択する。
ステップS802では、パリティ制御部230が、ステップS801で選択したブロック群からパリティデータを生成する。ステップS803では、誤り検出情報生成部62が、ステップS802で生成されたパリティデータの誤り検出情報を生成し、誤り訂正情報生成部64が、ステップS802で生成されたパリティデータの誤り訂正情報を生成する。
ステップS804では、ブロック制御部210が、パリティデータを書き込むための未割当ブロックを取得する。ステップS805では、パリティ生成パトロール部240が、ステップS804で取得された未割当ブロックの消去処理を行い、ステップS802で生成されたパリティデータを、ステップS804で取得された未割当ブロックに書き込む。なお、平準化処理を行う場合は、ブロック制御部210は、該ブロックの平準化情報を更新する。
ステップS806では、所定の記憶領域にステップS803で生成された誤り検出情報と誤り訂正情報を保存する。なお、所定の記憶領域は、パリティデータが書き込まれるブロックでもよく、他のブロックでもよく、又は、半導体記憶素子群9ではない記憶部でもよい。
ステップS807では、ブロック制御部210が、ステップS805でパリティデータを書き込んだブロックのブロック状態の情報をパリティ割当状態に更新する。これにより、このブロックがパリティ割当ブロックとしてブロックテーブル12に登録される。
ステップS808では、パリティ制御部230が、パリティ対応リスト39に、生成したパリティグループを登録する。これにより、パリティ対応リスト39が更新される。
以降、図29から図31を用いて、ブロック数が異なるパリティグループを構成する方法の例について説明する。図29から図31は、異なるブロック数により生成される新たなパリティグループを説明する図である。なお、図中アルファベット記号を付した四角形はアドレス割当ブロックを表し、数字記号を付した四角形はパリティ割当ブロックを表す。また、パリティグループが構成されていることを、複数のアドレス割当ブロックと、該アドレス割当ブロックと矢印で関係付けられているパリティ割当ブロックでもって表している。図29では、一のパリティグループの中で、書き込み要求に対応する書き込み処理等で更新されたブロックを除く他のブロックにより、新たなパリティグループを生成する。すなわち、パリティグループを構成しない1以上の連続するブロックから、1以上のパリティグループが生成される。
図29(a)では、3つのブロック毎に1のパリティグループが構成されている。なお、図中、右方のブロックほど、書き込み要求に対応する書き込み処理等による更新によりアドレス割当ブロックとなってからの経過時間が長いブロックである。
図29(b)では、アドレス割当ブロックCとアドレス割当ブロックKとが、書き込み要求に対応する書き込み処理等で更新されて未割当状態となり、結果として未割当ブロックとして回収される。また、新たなデータが書き込みされたブロックC’とブロックK’とが、新たなアドレス割当ブロックとなる。これにより、ブロックAないしCからなるパリティグループが解体される。ここまでは、第2の実施の形態と同様である。そして、本実施の形態において、第2の実施の形態のパリティ生成パトロール処理におけるパリティグループ生成処理に代えて、パリティグループを構築する際には、たとえば、図29(c)では、並び順で連続するアドレス割当ブロックA及びアドレス割当ブロックBからなるパリティグループを新たに生成し、そのパリティ割当ブロックはブロック4である構成を表している。
このようにパリティグループを構成することで、ブロックD,E,F,2からなるパリティグループ、または、ブロックG,H,I,3からなるパリティグループを解体し、新たにパリティデータをブロックに書き込む必要がなくなるため、処理時間の増大と、半導体記憶装置の寿命の低下を低減することができる。
図30は、異なるブロック数により生成される新たなパリティグループを説明する図であって、解体されたパリティグループのブロックを、並び順で隣接するパリティグループに含ませる例を説明する図である。図30(a)及び(b)は、図29(a)及び(b)と、それぞれ同一である。
図30(c)では、アドレス割当ブロックA及びアドレス割当ブロックBと、並び順で隣接するパリティグループを構成するアドレス割当ブロックDないしFと、からなるパリティグループを生成する。これにより、図29(c)よりも、パリティグループの数を1減じることができ、パリティ割当ブロックの数を減じることができる。これにより、結果として、半導体記憶装置における未割当ブロックの数が増加する。したがって、平準化処理を行うにあたっては、未割当ブロックの数が多いほど、平準化処理をより好適に実施することができるようになる。
なお、パリティ割当ブロックの数を減ずる方法としては、上記方法に限らず、パリティ生成方法を変更することにより、パリティグループにおけるパリティ割当ブロックの数を減ずる方法を採用しても良い。
図31は、異なるブロック数により生成される新たなパリティグループを説明する図であって、解体されたパリティグループのブロックと、並び順で隣接するパリティグループのブロックと、から複数のパリティグループを生成する例を説明する図である。図31(a)及び(b)は、図29(a)及び(b)と、それぞれ同一である。
図31(c)では、アドレス割当ブロックA、B、及び、Dから1のパリティグループを生成し、アドレス割当ブロックE及びブロックFから1のパリティグループを生成する。なお、図31(c)は、図31(a)と、パリティグループの数が同数となるが、本実施の形態は、図31の例に限らず、更新前に比して、パリティグループの数が異なってよい。これにより、耐障害性を高めるためにはパリティグループの数を増やすことができる。また、半導体記憶装置におけるパリティ割当ブロックの数を減じ、結果として未割当ブロックを増やし、平準化処理をより好適に実施するためには、パリティグループの数を減じることができる。
なお、図中、ブロック制御部210が有するブロックテーブル12は、ブロック状態毎に分類されるリストを含んでよい。例えば、アドレス割当ブロックからなるリストには、書き込み処理が行われる更新時刻の古い順に、アドレス割当ブロックの情報が並び、未割当ブロックからなるリストには、未割当状態になる更新時刻の古い順に、未割当ブロックの情報が並ぶ。
なお、ブロック数をパリティグループ毎に異なるように変更させる、以上の処理を続けていくと、パリティグループを構成するブロック数が、いわゆる局所最適値となり、全体としての最適値にならない場合がある。例えば、データブロック群の数が多いパリティグループとデータブロック群の数が少ないパリティグループとが、並び順では交互に存在するというような状況になる場合が考えられる。同様に、例えば、パリティブロック群の数が多いパリティグループとパリティブロック群の数が少ないパリティグループとが、並び順では交互に存在するというような状況になる場合が考えられる。
このため、パリティグループを構成するデータブロック群の数あるいはパリティブロック群の数が、半導体記憶装置の全体において最適となるように、半導体記憶装置の全体に対するブロック数変更処理を、前記の処理とは独立に実行してもよい。
以上の構成をとることで、パリティグループの解体および生成処理回数を低減させることができ、処理速度等の性能低下を低減し、寿命の減少を低減することができる。
〔第7の実施の形態〕
本実施の形態では、第5の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させる。
例えば、第5の実施の形態において、更新前割当ブロックの数が多くなると、未割当ブロックの数が減少する。これにより、平準化が好適に行われない。そこで、未割当ブロックの数を多くする必要が生じる。また例えば、第5の実施の形態において、長期間、書き込み処理が発生しなかった場合には、アドレス割当ブロックが、所定の個数集まらずに、パリティグループを構成しない状態が長く続く。これにより、それらのブロックに対する耐障害性が低下する。
そこで、本実施の形態では、パリティグループを構成するブロックの数を動的に変化させることにより、例えば、パリティ割当ブロックの数を減らして未割当ブロックの数を増加させる。また例えば、パリティグループを構成しない期間が所定の閾値を超えるアドレス割当ブロックに対して、所定の個数よりも少ない個数によりパリティグループを構成する。
第5の実施の形態における更新前ブロック回収処理の際に、パリティグループを構成するブロック数の変更を行う。これにより、更新前ブロックの回収処理に伴うパリティグループの解体と、ブロック数を変更することによるパリティグループの解体とを、同時に行うことができ、パリティの書き込み処理の回数を減じることができる。
より詳細には、図26のステップS701及びS702の際に、パリティグループを解体し、さらに、ブロック数の変更処理を行う。
なお、更新前ブロックの回収によるパリティグループの解体と、ブロック数の変更によるパリティグループの解体と、を一の処理とすることにより、更新前ブロックを含んでいないパリティグループを解体する処理を省略することができる。
図32は、更新前ブロック回収処理と、ブロック数変更処理を同時に行い、新たなパリティグループを生成する処理を説明するフロー図である。
図32のステップS901では、ブロック数が異なる新たなパリティグループを構成するための,パリティグループ群を選択する。ステップS902では、ステップS901で選択したパリティグループ群を解体する。より詳細には、そのパリティグループの登録解除処理を行い、そのパリティグループに属していた更新前割当ブロックおよびパリティ割当ブロックを未割当ブロックとして回収する。
ステップS903では、パリティ制御部230が、ステップS902で得られたアドレス割当ブロック群からパリティデータを生成する。ステップS904からステップS909は、図28のステップS803からステップS808までと同じ処理であるので,説明は省略する。
図33は、異なるブロック数により生成される、新たなパリティグループの例を説明する図である。図中、アルファベット記号を付した四角形のうち、無地の四角形は、アドレス割当ブロックを表し、ハッチングが施されているブロックは、更新前割当ブロックを表す。また、数字記号を付した四角形はパリティ割当ブロックを表す。また、パリティグループが構成されていることを、複数のアドレス割当ブロックと、該アドレス割当ブロックと矢印で関係付けられているパリティ割当ブロックでもって表している。
図33(a)の例では、パリティ割当ブロック1が属するパリティグループからパリティ割当ブロック6が属するパリティグループまでの6個のパリティグループがあり、各パリティグループには、4個のデータブロック群のブロックが含まれる。
図33(b)では、(a)の状態から、更新前割当ブロックを並び順に従って未割当ブロックとして回収し、新たに2個のパリティグループが生成されている。パリティ割当ブロック7が属するパリティグループは、(a)のパリティ割当ブロック1が属するパリティグループないしパリティ割当ブロック3が属するパリティグループから新たに生成され、6個のアドレス割当ブロック(B,D,G,I,J,L)を含む。パリティ割当ブロック8が属するパリティグループは、(a)のパリティ割当ブロック4が属するパリティグループ及びパリティ割当ブロック5が属するパリティグループから新たに生成され、5個のアドレス割当ブロック(N,A’,C’,E’,F’)を含む。
パリティ割当ブロック6が属するパリティグループは、(a)のパリティ割当ブロック6が属するパリティグループと同じである。これは、(a)のパリティ割当ブロック6が属するパリティグループが更新前割当ブロックを含んでいなかったためで、パリティグループを構成するブロック数を変更することにより、パリティグループを解体せずとも良くなったためである。また、端のアドレス割当ブロックP’は、ここでは、何れのパリティグループにも含まれない。
このように、更新前ブロック回収処理とブロック数変更処理を同時に行うことで、不要なパリティグループ解体処理を省略することができる。
図34は、書き込み処理を説明するフロー図である。図34は、図22にステップS1010とステップS1011とが追加されており、図22のステップS608の結果がNoのときにステップS1010に進み、図22のステップS609の処理が終わるとステップS1011に進む点が異なる他は、図22と同一である。したがって、ここでは、ステップS1010とステップS1011の説明のみを行い、他のステップの説明は省略する。
ステップS1008に続くステップS1010では、ステップS1002で書き込み処理が行われた際の書き込み処理時刻を保存する。一方、ステップS1009に続くステップS1016では、ステップS1009においてパリティグループを構成したブロック全ての書き込み処理時刻を初期化する。これらの処理により、所定の時間周期で、パリティグループを再構成する際の、基準となる書き込み処理時刻を設定することができる。なお、書き込み処理時刻の情報は、例えば、ブロックテーブル12のブロック毎の情報に含ませるとよい。
図35は、所定の時間、パリティグループに含まれないアドレス割当ブロックに対する処理を説明するフロー図である。図35の処理は、例えば、図34のステップS1010及びS1011で設定された書き込み処理時刻等に基づいて行われるとよい。
図35のステップS1101では、図示しない、パリティ未構成ブロック冗長化パトロール部が、パリティグループを構成しないアドレス割当ブロックの書き込み処理時刻を確認する。ステップS1102では、パリティ未構成ブロック冗長化パトロール部が、ステップS1101で確認された書き込み処理時刻が、所定の閾値を超えているか否かを判定する。所定の閾値を超えている場合には、ステップS1103に進み、超えていない場合には、処理を終了する。
ステップS1103の処理では、経過時間が超えているアドレス割当ブロックの個数でパリティグループを構成する。パリティグループの構成手順については、既にいくつか上述しているため、詳細の説明は省略する。また、ステップS1104の処理では、ステップS1103で構成したパリティグループの情報をパリティ対応リストに登録する。パリティ対応リストの登録手順については、既に上述しているため、ここでは、詳細な説明は省略する。
図36は、図34および図35のフローによって実現されるパリティグループの生成処理を説明する図である。図36では、所定の時間、パリティグループを構成しないアドレス割当ブロックK’、M’、O’、P’に対し、これらの4個のブロックからなるパリティ割当ブロック3が含まれるパリティグループが生成される。
以上の構成をとることで、パリティグループの解体および生成処理回数を低減させることができ、処理速度等の性能低下を低減し、寿命の減少を低減することができる。また、長期間パリティグループを構成しないアドレス割当ブロックの数を減ずることができるため、冗長性を高めることができる。
〔第8の実施の形態〕
本実施の形態では、第2の実施の形態または第3の実施の形態における書き込み処理の際に,解体されてしまうパリティグループの数を減じるために、更新前割当ブロックを用いて好適に制御する。以下の説明における各機能ブロックに付した符号は、適用する実施の形態に基づいて、適宜読み替える。
より詳細には、書き込み処理が行われると、書き込んだブロックの冗長性が無い上に、更新前ブロックが含まれているパリティグループの別のアドレス割当ブロックも冗長性を失う。そこで、更新前ブロックを未割当ブロックにせずに、更新前割当ブロックとして利用し、パリティグループの解体処理を適宜保留する。ここで、新たに書き込んだアドレス割当ブロックからのパリティ生成処理を優先しても良いし、更新前ブロックの回収処理を優先しても良い。
図37から図39は、並び順として採用する情報の種類によって、パリティグループの生成の方針が異なる例を示す図である。図中、アルファベット記号を付した四角形のうち、無地の四角形は、アドレス割当ブロックを表し、ハッチングが施されているブロックは、更新前割当ブロックを表す。また、数字記号を付した四角形はパリティ割当ブロックを表す。また、パリティグループが構成されていることを、複数のアドレス割当ブロックと、該アドレス割当ブロックと矢印で関係付けられているパリティ割当ブロックでもって表している。
なお、採用される並び順情報は、ここに例示する並び順の情報に限られない。
図37は、更新回数が少ない並び順により、パリティグループを構成する場合の例を説明する図である。図中のブロックの並び順は、図の右に行くほど、更新回数が少ない。図37では、3個のブロック毎に、1のパリティグループが構成される。
図37(b)は、(a)の状態から更新が進行した例を示す図である。(b)では、新たにアドレス割当ブロックとなるブロックは、更新の回数に基づいて、並び順が決定される。図37では、ブロックCに対して更新するブロックC’は、図中、ブロックFとブロックGとの間に配される例を示している。また、ブロックKに対して更新するブロックK’は、ブロックKの直後に配される例を示している。(b)では、更新前割当ブロックとなったブロックCにより、ブロックAとブロックBとの冗長性は保たれる。
また、ブロックKはパリティグループに属していないため、未割当ブロックとして回収される。
ここで、パリティ生成処理を優先すると、ブロックG,H,I,3からなるパリティグループを解体し、ブロックC’,G,Hを有するパリティグループ(パリティグループα)を生成し、ブロックI,J,K’を有するパリティグループ(パリティグループβ)を生成する。このように、並び順情報として更新回数を採用する場合は、パリティグループの解体処理を伴う場合がある。一方、更新前ブロック回収処理には、パリティグループの解体処理が必ず伴う。したがって、並び順情報として更新回数を採用する場合は、更新前ブロック回収処理とパリティ生成処理を同期させて行ったほうが効率が良いと考えられる。
図37(c)は、(b)に示す状態から、更新前割当ブロックを未割当てブロックとして回収し、さらに、パリティグループを再構成させた例である。(c)では、(b)における更新前割当ブロックのブロックCが回収され、さらに、更新回数の少ない順に、右方から3個のブロック毎にパリティグループが構成される。
図37の例では、更新前ブロックを回収する処理と、パリティを生成する処理とを、同期させることにより、パリティデータの更新回数を減じている。また、(b)から(c)への遷移の際に、2個のパリティグループが再構成される。
図38は、更新時刻順の並び順により、パリティグループを構成する場合の例を説明する図である。図中のブロックの並び順は、図の右にいくほど、更新時刻が古い。図38では、3個のブロック毎に、1のパリティグループが構成される。
図38(b)は、(a)の状態から更新が進行した例を示す図である。(b)では、新たにアドレス割当ブロックとなるブロックは、更新の時刻に基づいて、並び順が決定される。ブロックCに対して更新されるブロックC’は、(a)の並び順において、最も更新時が新しいブロックであるブロックKの次に配される。また、ブロックKに対して更新されるブロックK’は、ブロックC’の次に配される。(b)のパリティグループは、(a)と同じ構成である。また、ブロックKはパリティグループに属していないため、未割当ブロックとして回収される。
図38では、更新後のアドレス割当ブロックが配置される位置は、必ず左端になる。また、更新されたブロックを更新前割当ブロックとする。したがって、一旦パリティグループが構成されると、そのパリティグループは、更新前ブロックの回収処理がなされるまで解体されることはない。
また、パリティグループを構成していないアドレス割当ブロックは、並び順に連続して存在するため、パリティ生成処理の際に、パリティグループの解体処理は発生しない。
並び順の情報として、更新時刻を採用する場合は、耐障害性と、半導体記憶装置の寿命の長大化との、何れを重視するかにより、次の2つの方法の何れか一を採用するとよい。
(G1)耐障害性を重視し、冗長性を重視する場合は、パリティ生成処理を優先的に行う。
(G2)ウェアレベリングにより半導体記憶装置の寿命の長大化を重視する場合は、未割当ブロックを増加させるために、更新前ブロックの回収処理を優先的に行う。
なお、更新前ブロック回収処理を行う際には、パリティグループの解体処理が必ず発生するため、上記耐障害性と、半導体記憶装置の寿命の長大化との重視の視点に加えて、パリティ生成処理の必要とされる頻度と、更新前ブロック回収処理の必要とされる頻度を勘案して、更新前ブロック回収処理とパリティ生成処理を同期させて行っても良い。
ここで、図38の(c)および(d)では、更新前ブロック回収処理を優先して行う例を示している。
図38(c)では、更新前割当ブロックであるブロックCが、未割当ブロックとして回収され、新しいパリティグループが生成される。(c)では、並び順の右端から順に、3個のブロック毎に1個のパリティグループが構成される。
図38(d)では、さらに、パリティグループの生成が進み、計3個のパリティグループが生成される。
図39は、静的な情報(たとえば論理アドレス情報など)の並び順情報に従ってパリティグループを構成する例を説明する図である。図39(a)は、3個のブロック毎にパリティグループが構成されている。図39(b)は、(a)の状態から更新が進行した例を示している。(b)では、新たなアドレス割当ブロックの並び順は更新前のブロックと同一となる。また、ブロックJ’はパリティグループに属していない更新前のブロックであるので、未割当ブロックとして回収される。
図39(c)は、(b)の状態から、並び順情報に従って、パリティグループが再生成された例を示す図である。(b)から(c)に遷移する際に、静的な情報に従ってパリティグループを再生成すると、元のパリティグループを構成していた更新前割当ブロックは必ず不要になるため、更新前割当ブロックを未割当ブロックとして回収することができる。
このように、静的な情報に従ってパリティグループを生成している場合は、パリティ生成処理と更新前ブロック回収処理とが同一の結果になる。
〔第9の実施の形態〕
本実施の形態では、第8の実施の形態におけるパリティグループを構成するブロックの数を動的に変化させる。これにより、第8の実施の形態におけるパリティ生成処理や、更新前ブロック回収処理におけるパリティグループの解体処理の回数を減ずることができ、処理時間の増大化と半導体記憶装置の寿命の低下との低減が可能になる。
ここで、さらに、パリティグループを構成するブロックの数を動的に変化させることで、耐障害性を高めるためにはパリティグループの数を増やすことができ、また、半導体記憶装置におけるパリティ割当ブロックの数を減じ、結果として未割当ブロックを増やし、平準化処理をより好適に実施するためには、パリティグループの数を減じることができる。
以降の説明では、パリティ割当ブロックの数を減ずる場合について述べる。
図40は、パリティグループの数を減じる例を説明する図である。図中、アルファベット記号を付した四角形のうち、無地の四角形は、アドレス割当ブロックを表し、ハッチングが施されているブロックは、更新前割当ブロックを表す。また、数字記号を付した四角形はパリティ割当ブロックを表す。また、パリティグループが構成されていることを、複数のアドレス割当ブロックと、該アドレス割当ブロックと矢印で関係付けられているパリティ割当ブロックでもって表している。
図40(a)では、パリティ割当ブロック1が属するパリティグループ1からパリティ割当ブロック6が属するパリティグループまでの6個のパリティグループがある。各パリティグループには、4個のデータブロック群のブロックが含まれる。
図40(b)では、(a)の状態から、更新前割当ブロックを並び順に従って未割当ブロックとして回収し、新たに2個のパリティグループが生成されている。パリティ割当ブロック7が属するパリティグループは、(a)のパリティ割当ブロック1が属するパリティグループないしパリティ割当ブロック3が属するパリティグループから新たに生成され、6個のアドレス割当ブロック(B,D,G,I,J,L)を含む。パリティ割当ブロック8が属するパリティグループは、(a)のパリティ割当ブロック4が属するパリティグループ及びパリティ割当ブロック5が属するパリティグループから新たに生成され、5個のアドレス割当ブロック(N,A’,C’,E’,F’)を含む。
パリティ割当ブロック6が属するパリティグループは、(a)のパリティ割当ブロック6が属するパリティグループと同じである。これは、(a)のパリティ割当ブロック6が属するパリティグループが更新前割当ブロックを含んでいなかったためで、パリティグループを構成するブロック数を変更することにより、パリティグループを解体せずとも良くなったためである。また、端のアドレス割当ブロックP’は、ここでは、何れのパリティグループにも含まれない。このように、パリティグループを構成するブロックの数を増やしてパリティグループの数を減じることにより、パリティデータを格納するパリティ割当ブロックの数を減らすことができる。
〔第10の実施の形態〕
本実施の形態では、パリティによりブロックに冗長性を持たせる構成を採る半導体記憶装置において、パリティデータを生成した後、該パリティデータを半導体記憶素子群のブロックに保持させる前に、一時記憶領域(キャッシュメモリ)に該パリティデータを保持させる例について説明する。また、本実施の形態を、第1の実施の形態から第9の実施の形態の何れか一の実施の形態と併せて一の実施の形態とすることもできる。以降の説明では、本実施の形態を、第1の実施の形態から第9の実施の形態の何れか一の実施の形態と併せて一の実施の形態とする場合を説明するが、各機能部に付した番号は、適用される実施形態に応じて適宜読み替えることができる。
本実施の形態では、パリティ生成パトロール部240等の処理において、パリティデータを生成した後、キャッシュメモリ293にそのパリティデータを保持させることで、パリティ生成処理は完了したものとする。詳細については後述する。キャッシュメモリ293は、例えば、DRAM等として構成される。また、キャッシュメモリ293に格納されたパリティデータは、図示しないパリティデータ書き込みパトロール部が、所定のタイミングで半導体記憶素子群9に書き込む。詳細については後述する。本実施の形態では、半導体記憶素子群9は、例えば、NANDフラッシュメモリ等で構成される。
本実施の形態による半導体記憶装置1のコントローラ200は、新たなパリティグループが生成される際に、キャッシュメモリ293上に更新すべきパリティデータが存在する場合は、キャッシュメモリ293上のパリティデータを更新するだけでよいことになる。これにより、パリティデータを半導体記憶素子群9に格納させることなく更新を実現してもよい。
これにより,ブロックの更新回数を減じることができ,処理速度等の性能低下を低減し、寿命の減少を低減することができる。
図41は、パリティ対応リスト39に代えて本実施の形態に用いられるパリティ対応リストを示したものである。また、パリティ対応リストに示される半導体記憶素子群9上のブロックに格納されるデータおよびパリティデータと、キャッシュメモリ293上に格納されるパリティデータを模式的に表している図である。なお、図中、半導体記憶素子を「NAND」と表記する。なお、パリティ対応リストは、以下に説明するパリティブロック群に記録する情報がパリティ対応リスト39と異なるのみで、他の部分はパリティ対応リスト39と同様であるので、該他の部分についての説明は省略する。なお、図41に示すパリティ対応リストには、以降の説明に必要な部分のみを示し、以降の説明に不要な部分(たとえば、パリティ生成方法)の記載を省略している。
図41(1)は、更新前、すなわち、書き込み処理が行われる前のブロック等の状態を説明する図である。図41(1)において、パリティデータP1からP4は、全て、半導体記憶素子群9上のブロックに格納されている。キャッシュメモリ293上のパリティデータ領域は、空である。これらの対応情報は、パリティ対応リストに保持されている。たとえば、パリティブロック群の項目の、「P1」は、半導体記憶素子上にパリティデータP1が記憶されていることを示している。
図41(2)は、(1)の状態において、書き込み処理等によりブロック5が更新されブロック5’となり、また、パリティデータを更新する処理において、パリティデータP2の代わりに新たに生成されるパリティデータP2’は、キャッシュメモリ上のパリティデータ領域に保持される状態を示す。これらの対応情報は、パリティ対応リストに保持されている。たとえば、パリティブロック群の項目の、「キャッシュメモリ(P2’)」は、パリティデータP2’がキャッシュメモリ上に記憶されていることを示している。この際、パリティデータP2’は、図中の式(A)に従い、ブロック4、5’、及び、6に格納されるデータから生成されてもよく、式(B)に従い、更新前のパリティデータP2と、更新前のブロック5に格納されたデータ及び5’に格納されるデータと、から生成されてもよい。
なお、パリティグループを構成するデータ群の規定数が多いほど、式(A)に従うと処理量が多くなる。そこで、式(B)に従う方法で計算するとよい。
図41(3)は、(2)の状態において、キャッシュメモリ293上に格納されていたパリティデータP2’が、ブロックに書き込まれた状態を説明する図である。パリティ対応リストにおける該パリティブロック群の項目は、「P2’」となり、半導体記憶素子上にパリティデータP2’が記憶されていることを示している。
なお、図41(2)の状態で、例えば、ブロック4が更新されブロック4’になり、パリティデータがP2”となる場合には、新たなパリティデータP2”によりP2’を更新する処理は、キャッシュメモリ293上の書き換えとなる。このため、パリティの更新に関しては、半導体記憶素子群9への書き込みが伴わなくなるため、処理時間の増大と半導体記憶装置の寿命の低下とを低減することができる。
キャッシュメモリ293に格納されたパリティデータを、半導体記憶素子群9に書き出す処理のタイミング、及び、書き出すデータの種類は、例えば、以下の(H1)から(H3)の3種類がある。なお、これらは処理のタイミングおよび書き出すデータの種類を例示するものであり、以下に示す3種類に限られるものではない。たとえば、予めまたは動的に定められたタイミングで処理を開始し、予めまたは動的に定められた量のパリティデータを半導体記憶素子群9に書き出すようにしても良い。
(H1)キャッシュメモリ293の格納領域を超えてパリティデータを格納する要求が発生した場合、又は、キャッシュメモリ293に格納されるパリティデータの量が所定の閾値を超えた場合に、キャッシュメモリ293に格納されているパリティデータの全部又は一部を、半導体記憶素子群9に書き出す。
(H2)ホスト装置からキャッシュメモリ293上にあるデータを全て半導体記憶素子に書き出すコマンドであるキャッシュフラッシュコマンドを受けた場合に、キャッシュメモリ293に格納されているパリティデータを全て書き出す。
(H3)ホスト装置から電源切断の予告通知コマンドを受けた場合に、キャッシュメモリ293に格納されているパリティデータの全部又は一部を書き出す。
キャッシュメモリ293に格納されているパリティデータは、格納順の古いものから半導体記憶素子群9に書き出すとよい。格納順の判断基準は、例えば、更新回数、更新順序、又は、更新回数と更新順序とを所定の評価関数により評価した値、の何れか一でよい。これにより、キャッシュメモリ293上でのパリティデータの書き換えが、より多く発生することが期待でき、半導体記憶素子群9上におけるパリティデータの書き換えを低減できる。なお、格納順の判断基準はこれらに限られず、適切な判断基準を適宜採用することができる。なお、この判断基準は、並び順情報管理部270dによって管理されるアドレス割当ブロック等の並び順情報と同一でもよい。
また、半導体記憶素子群9へのパリティデータの書き出し量が多く電源切断に間に合わないと判断したときは、その時点のパリティデータの管理情報を不揮発性メモリである半導体記憶素子や,その他の記憶領域に保存する。管理情報とは、例えば、以下の情報であるが、以下に例示する情報に限られない。
・パリティデータが半導体記憶素子群9上にあるか否か、すなわち、電源切断でも消えない状態にあるか否か。
・パリティデータがキャッシュメモリ293上にあるか否か、すなわち、電源切断によって消える状態にあるか否か。
電源切断に間に合わず、パリティデータの管理情報を保存した場合には、電源再投入後の適切なタイミングで、電源切断によって消えてしまったパリティデータを、図示しない冗長状態再構成部が再び生成し、キャッシュメモリ293または半導体記憶素子群9に格納させると良い。これにより、電源切断前の冗長構成の状態を復元できる。
本実施の形態では、パリティデータの生成処理と、パリティデータを半導体記憶素子群9に書き込む処理とを分離する。したがって、本実施の形態を、第1の実施の形態から第9の実施の形態の何れか一の実施の形態と併せて一の実施の形態とする場合には、パリティ生成処理における、パリティ生成部31によるパリティデータ生成処理と、生成したパリティデータの半導体記憶素子への書き込み処理と、を連続して実行させない。
なお、第1ないし第9の実施の形態では、書き込み処理等におけるデータブロックの更新処理とパリティ生成処理等におけるパリティデータの更新処理とを別個に実行する。このため、データブロックの更新処理時に更新前のデータブロックまたはパリティ割当ブロックを未割当ブロックとして回収してしまい、パリティデータの更新処理の際に上記更新前のデータを参照することができず、上記式(B)によりパリティ生成の演算ができない場合がある。そこで、更新前データをパリティデータの生成時に参照できるとよい。
図42から44は、パリティデータの生成とパリティデータの書き込み処理とを分離する際の、処理を説明するフロー図である。図42は、たとえば図20のS503およびS504の処理を抜粋してその詳細を説明するものであり、パリティデータ生成とパリティデータの書き込み処理とを分離する際の注目すべき項目を示すフロー図である。したがって、たとえば図42の処理に代えて、図20のステップS503及びステップS504の処理でもよい。
図42のステップS1201では、集められた、パリティグループを生成する所定数のアドレス割当ブロックから、パリティ生成部31がパリティデータを生成する。ステップS1202では、誤り検出情報生成部62がパリティデータの誤り検出情報を生成し、誤り訂正情報生成部64がパリティデータの誤り訂正情報を生成する。
ステップS1203では、ブロック制御部210が、ブロックテーブル12に基づいて未割当ブロックを取り出す。ステップS1204では、ステップS1203で取得された未割当ブロックのデータの消去処理を行い、また、ステップS1203で取得された未割当ブロックにステップS1201で生成したパリティデータを書き込む。
ステップS1205では、ブロック制御部210が、ブロックテーブル12におけるブロックの平準化情報を更新する。ステップS1206では、ブロック制御部210が、ステップS1204でパリティデータを書き込んだブロックについてブロック状態の情報をパリティ割当状態に変更する。
ステップS1207では、パリティ制御部230が、パリティ対応リスト39に生成したパリティグループの情報を追加し登録する。
図43及び44は、図42の処理において、パリティデータをキャッシュメモリ293に格納する処理と、パリティデータをキャッシュメモリ293から半導体記憶素子群9に書き込む処理とを、不連続に行う場合の例を説明する図である。
図43は、パリティデータを生成してキャッシュメモリ293に格納させる処理を説明するフロー図であり、パリティ生成処理等における図42で示された処理に代えて適宜適用される。図43のステップS1301では、パリティ制御部230が、集められた、パリティグループを生成する所定数のアドレス割当ブロックから、パリティデータを生成する。ステップS1302では、キャッシュメモリ293が、ステップS1301で生成されたパリティデータを保持する。
ステップS1303では、パリティ制御部230が、パリティ対応リスト39に該パリティデータを含む情報を登録することにより、パリティグループの登録を行う。
図44は、図示しないパリティデータ書き込みパトロール部が、キャッシュメモリ293に格納されたパリティデータを、半導体記憶素子群9に書き込む処理を説明するフロー図である。キャッシュメモリ293から半導体記憶素子群9にパリティデータを書き込む処理は、例えば、キャッシュメモリ293のパリティ用の全ての領域にパリティデータが格納され、新たなパリティデータを格納することができない場合、又は、キャッシュメモリ293のパリティ用領域の使用量が所定の閾値を超えた場合に、行われるとよい。
なお、これらの場合に限らず、ホスト装置から、キャッシュメモリ293上にあるデータを全て半導体記憶素子に書き出すコマンドであるキャッシュフラッシュコマンドを受けた時や、電源切断の予告通知コマンドを受けた時に、キャッシュメモリ293上のパリティデータを半導体記憶素子群9に書き込ませてもよい。また、定期的に実行しても良く、コントローラ200の処理負荷が低いときに実行しても良い。そのほか、予めまたは動的に定められたタイミングで実行しても良い。
図44のステップS1401では、図示しないパリティデータ書き込みパトロール部が、キャッシュメモリ293に格納されているパリティデータの中から、半導体記憶素子群9に書き込むパリティデータを選択する。選択の際に、たとえばキャッシュメモリ293に格納された順番がより古いパリティデータから書き出すことにより、パリティデータの更新をキャッシュメモリ上で行う可能性が高くなり、半導体記憶素子群9への書き込み処理を減じることができる。
なお、格納順の判断基準は、例えば、更新回数、更新順序、又は、更新回数と更新順序とを所定の評価関数により評価した値、の何れか一により定められるとよい。なお、格納順の判断基準はこれに限られず、適切な判断基準を適宜採用することができる。
ステップS1402では、誤り訂正制御部260が、ステップS1401で選択したパリティデータから、誤り検出情報及び誤り訂正情報を生成し、ブロックに書き込む内容を準備する。
ステップS1403では、ブロック制御部210が、未割当ブロックの取り出し処理を行い、未割当ブロックを確保する。ステップS1404では、ステップS1403で確保した未割当ブロックに対する消去処理を行った後に、ステップS1401及びステップS1402で準備した書き込み内容を書き込む。ここでは、誤り検出情報及び誤り訂正情報を、データを書き込むブロックに記録する。しかし、誤り検出情報及び誤り訂正情報を、データを書き込むブロックとは異なる、所定のブロックに記録してもよく、半導体記憶素子群9以外の記憶領域に記録してもよい。
ステップS1405では、ブロック制御部210が、ブロックテーブル12における平準化情報を更新する。ステップS1406では、ブロック制御部210が、ブロックテーブル12におけるブロック状態の情報をパリティ割当状態に変更する。これにより、ステップS1404で書き込み処理が行われたブロックがパリティ割当ブロックとなる。
ステップS1407では、パリティ制御部230が、パリティ対応リスト39における、パリティグループの情報を更新する処理を行う。より詳細には、図43のステップS1302でパリティデータの所在がキャッシュメモリ293にある旨の情報により登録されたパリティグループの情報を、パリティデータの所在が書き込んだブロックである旨の情報に更新する。
なおステップS1401からステップS1407の処理は、必要に応じて繰り返し実行されるとよい。例えば、キャッシュメモリ293の記憶領域があふれた場合、又は、キャッシュメモリ293の記憶領域におけるパリティデータの格納量が所定の閾値を超えた場合に、キャッシュメモリ293に格納される全てのパリティデータを書き出してもよく、その一部を書き出してもよい。
例えば、キャッシュフラッシュコマンドを受けた場合は、全てパリティデータを書き出す。また例えば、電源切断の予告通知コマンドを受けた場合は、全てのパリティデータを書き出してもよく、一部を書き出してもよい。
なお、キャッシュメモリ293に格納されるパリティデータのうちの一部のパリティデータを書き出す例として、パリティデータの書き出し量が多くて電源切断に間に合わないと判断される場合がある。この際に、その時点のパリティデータの管理情報を保存するとよい。パリティデータの管理情報は、所定のブロックに保存してもよく、又は、半導体記憶素子群9以外の記憶領域に記録してもよい。
パリティデータの管理情報は、例えば、以下の情報があるが、以下に例示する情報に限られない。
・あるパリティグループのパリティデータが半導体記憶素子群9上にあるか否か、すなわち、電源切断でも消えない状態にあるか否か。
・あるパリティグループのパリティデータがキャッシュメモリ293上にあるか否か、すなわち、電源切断によって消える状態にあるか否か。
なお、キャッシュメモリ293に格納されているパリティデータのうちの一部を書き出した場合、電源再投入後の適切なタイミングで、図示しない冗長状態再構成部が、パリティデータの管理情報に基づいて、電源切断によって消えてしまったパリティデータを生成し、キャッシュメモリ293または半導体記憶素子群9に書き込むとよい。これにより、電源切断前の冗長構成の状態が復元でき、パリティによる冗長構成を復元することができる。
(復元処理)
読み込み処理等において、パリティによりデータを復元するにあたって、データを復元するためのパリティデータは、以下の2箇所の何れか一から読み込む。
(J1)半導体記憶素子群9のブロックにパリティデータが保存されている場合は、ブロックからパリティデータを読み込む。
(J2)キャッシュメモリ293にパリティデータが保存されている場合は、キャッシュメモリ293からパリティデータを読み込む。この場合は、(J1)に比して、読み込み時間の短縮化が期待できる。
(パリティデータ更新の演算)
図45は、パリティデータを更新する際の演算方法を説明する図である。パリティデータを更新する際の演算は、以下の2通りの方法がある。なお、以下で説明するのは、書き込み処理等により、パリティグループを構成しているデータブロックのデータが更新され、その後、該パリティグループのパリティデータを更新する場合である。
まず、書き込み処理等により、パリティグループを構成しているデータブロックのデータが1箇所更新され、その後、該パリティグループのパリティデータを更新する例を示す。より詳細には、図45の(1)では、AないしGのブロックに記録されているデータからパリティデータPが生成されて、パリティグループが構成されている状態で、ブロックCのデータが更新されてC’となった際に、パリティデータPを更新し、パリティデータP’を生成する例を示している。
第1の方法を、図45(1)の式(1)に示す。式(1)は、パリティグループを構成するデータ群から更新後のパリティデータを計算する方法である。この方法は、更新後の情報のみでパリティデータを計算できる。一方、パリティグループを構成するデータの規定数が多いほど処理量が多くなる。
第2の方法を、図45(1)の式(2)に示す。式(2)は、更新前のデータ、更新前のパリティデータ、及び、更新後のデータから更新後のパリティデータを計算する方法である。この方法は、更新前の情報が必要になる。一方、第1の方法よりも処理量が少なくなる場合がある。
次に、書き込み処理等により、パリティグループを構成しているデータブロックのデータが2箇所以上更新され、その後、該パリティグループのパリティデータを更新する例を示す。
図45(2)は、2箇所のデータが同時にまたは連続して更新された場合を説明する図である。より詳細には、図45の(2)では、AないしGのブロックに記録されているデータからパリティデータPが生成されて、パリティグループが構成されている状態で、ブロックCのデータが更新されてC’となり、同時にまたは連続してブロックFのデータが更新されてF’となった際に、パリティデータPを更新し、パリティデータP’を生成する例を示している。
2箇所のデータが同時にまたは連続して更新された場合でも、第1の方法によりパリティデータを計算する場合は、処理内容および処理量は、上記1箇所のデータが更新された場合と同様である。図45(2)において、第2の方法によりパリティデータを計算する場合には、計算式(2)に示すように、1箇所のデータが更新された場合の演算結果の組み合わせとすることができる。
したがって、パリティデータを計算する場合は、パリティグループを構成するデータ群の規定数に基づいて、第1の方法及び第2の方法を選択することで、処理量を削減することができる。
ところで、第2の実施の形態の図8の書き込み処理の例では、ステップS103のマッピングの更新の際に、更新前ブロックを未割当ブロックとして回収する。また、ステップS105では、更新前のパリティ割当ブロックを未割当ブロックとして回収する。
本実施の形態では、更新前ブロックと更新前のパリティ割当ブロックとを、それぞれ、ステップS103及びステップS105において未割当ブロックとして回収するのではなく、パリティデータを生成する際に回収してもよい。これにより、第2の方法で計算することが可能になる。
なお、パリティデータを生成するまでデータを保持しておく場所は、ブロックでなくともよい。例えば、更新前ブロックのデータと更新前のパリティ割当ブロックのデータとをキャッシュメモリ293等に読み込んで保持しておいてもよい。これにより、未割当ブロックの消費量を抑えることができ、ウェアレベリングを好適に実施することができる。
また、一部計算済みのデータをキャッシュメモリ293等に保存してもよい。例えば、図45(2)の式(2)に含まれる、図45(3)の式(1)に示す一部計算済みのデータTをキャッシュメモリ293等に保存するとよい。パリティデータは、一部計算済みのデータTと更新後のデータC’及びF’とから、図45(3)の式(2)により計算できる。これにより、キャッシュメモリ293の消費量を抑えることができるとともに、パリティデータ生成時の計算量を抑えることができる。
〔第11の実施の形態〕
なお、本発明の実施の形態に係る半導体記憶装置が有するコントローラは、例えばCPU等で実現されてもよい。また、本発明の実施形態に係る半導体記憶素子の制御方法は、例えば、CPUがROMやハードディスク装置等に記憶されたプログラムに従い、RAM等のメインメモリをワークエリアとして使用し、実行される。
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。