JP2010204770A - 半導体記憶装置 - Google Patents

半導体記憶装置 Download PDF

Info

Publication number
JP2010204770A
JP2010204770A JP2009047304A JP2009047304A JP2010204770A JP 2010204770 A JP2010204770 A JP 2010204770A JP 2009047304 A JP2009047304 A JP 2009047304A JP 2009047304 A JP2009047304 A JP 2009047304A JP 2010204770 A JP2010204770 A JP 2010204770A
Authority
JP
Japan
Prior art keywords
block
data
information
parity
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009047304A
Other languages
English (en)
Other versions
JP5268710B2 (ja
Inventor
Kazuhiro Fukutomi
和弘 福冨
Hideaki Sato
英昭 佐藤
Shinichi Sugano
伸一 菅野
Shigehiro Asano
滋博 浅野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2009047304A priority Critical patent/JP5268710B2/ja
Priority to US12/713,631 priority patent/US8341497B2/en
Publication of JP2010204770A publication Critical patent/JP2010204770A/ja
Application granted granted Critical
Publication of JP5268710B2 publication Critical patent/JP5268710B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • G06F11/1052Bypassing or disabling error detection or correction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

【課題】データ損失の危険性を低減させ、半導体記憶装置全体の書き込み処理の速度等の性能の低下を低減させる、半導体記憶装置及び半導体記憶装置制御方法を提供すること。
【解決手段】ホスト装置から、書き込み要求を受け付ける受付部と、冗長データ生成有無情報を保持する記録部と、データを半導体記憶素子群に書き込み、書き込んだデータの冗長データ生成有無情報を記録部に書き込む書き込み部と、半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出する第1のデータ抽出部と、冗長データを生成する第1の冗長データ生成部と、生成した冗長データを半導体記憶素子群に書き込む第1の冗長データ書き込み部と、さらに、記録部が保持する冗長データが生成されたデータの冗長データ生成有無情報を更新する第1の冗長データ生成有無情報更新部と、を有することを特徴とする。
【選択図】図2

Description

本発明は、半導体記憶装置に関する。
近年、不揮発性半導体メモリは、コンピュータ、携帯電話、家電製品等、さまざまなところで利用されており、普及が著しい。特に、NAND型フラッシュメモリは、電気的に書き換えが可能であり、大容量化、高集積化が可能な不揮発性半導体メモリである。
また、最近では、ハードディスクドライブ(HDD)と同じ接続インタフェース規格、(例えば、ATA規格等)を持つNAND型フラッシュメモリが開発されており、SSD(Solid State Drive)と呼ばれている。SSDは、HDDに比べてデータの読み込み性能に優れ、さらに、低消費電力及び耐衝撃性が期待できる。
不揮発性半導体メモリにデータを記憶させる手法としては、例えば、ブロックと呼ばれる単位で一度データを消去してから書き込みを行うもの、ページと呼ばれる単位でデータの読み出しや書き込みを行うもの、これらの消去、読み出し、書き込みの単位が固定されているものがある。
また、NAND型フラッシュメモリの寿命は、消去して書き込む回数に依存しているといわれている。したがって、NAND型フラッシュメモリにおいては、特定のブロックのみにデータの書き込み、消去が集中すると、そのブロックだけ早く寿命を迎えてしまう。そこで、例えば、各ブロックの消去回数の平準化処理を行い、寿命を延ばす試みがなされている。平準化処理は、ウェアレベリングと呼ばれる。
一方、サーバ環境で使用されるディスクアレイなどのストレージステムでは、信頼性を向上させるために、非特許文献1に示すような複数の記憶装置を接続したRAID(Redundant Arrays of Independent/Inexpensive Disks)を構成することがある。
D. Patterson, G. Gibson, and R. Katz. "A Case for Redundant Arrays of Inexpensive Disks (RAID)", Proceedings of the 1988 ACM SIGMOD, pp.109-116, June 1988.
ところで、NAND型フラッシュメモリにおいては、大容量化や高集積化により、データの記録の際に保存したデータの値と、データの読み込みの際に読み出したデータの値が異なってしまい、記憶したデータを正しく再生できなくなる場合がある。そこで、RAIDのように、記録データすべてに対して冗長性を維持しようとした場合、データの更新のたびに冗長情報、すなわち、パリティデータを更新する必要が生じる。
半導体記憶素子の中には、データの読み出し時間に比べて、データの消去及び書き込み時間がかなり長いものもある。この場合、データの更新のたびにパリティデータを更新すると、半導体記憶装置全体の書き込み処理の速度等の性能が低下する。また、パリティデータの更新、つまりブロックの消去と書き込みの増加に伴い、寿命が短くなる。
本発明は、上記の点に鑑みて、これらの問題を解消するために発明されたものであり、データ損失の危険性を低減させ、半導体記憶装置全体の書き込み処理の速度等の性能の低下を低減させ、寿命の減少を低減させる、半導体記憶装置を提供することを目的としている。
上記目的を達成するために、本発明の半導体記憶装置は次の如き構成を採用した。
本発明の半導体記憶装置は、ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出する第1のデータ抽出部と、抽出された前記データに基づいて冗長データを生成する第1の冗長データ生成部と、生成した前記冗長データを半導体記憶素子群に書き込む第1の冗長データ書き込み部と、さらに、前記記録部が保持する前記冗長データが生成されたデータの冗長データ生成有無情報を更新する第1の冗長データ生成有無情報更新部と、を有することを特徴とする。
本発明の半導体記憶装置は、また、ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出し、抽出された前記データに基づいて冗長データを生成し、生成した前記冗長データを半導体記憶素子群に書き込み、さらに、前記記録部が保持する前記冗長データが生成されたデータの冗長データ生成有無情報を更新する、冗長データ生成書き込み部と、前記記録部が保持する冗長データ生成有無情報により、冗長データを保持する半導体記憶素子群の数を変更し、前記冗長データ生成有無情報を更新する、ブロック数変更部と、を有することを特徴とする。
本発明の半導体記憶装置は、また、ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出し、抽出された前記データに基づいて冗長データを生成し、さらに、前記冗長データが生成されたデータの冗長データ生成有無情報を更新する、冗長データ生成部と、生成した前記冗長データを記憶する、一時記憶部と、生成した前記冗長データを前記一時記憶部に記憶させ、前記冗長データ生成有無情報を更新させる、冗長データ生成有無情報更新部と、前記冗長データ生成有無情報に基づいて、前記一時記憶部に記憶されている冗長データを、前記半導体記憶素子群に書き込み、さらに、前記冗長データ生成有無情報を更新する、冗長データ書き出し部と、を有することを特徴とする。
本発明の半導体記憶装置によれば、データ損失の危険性を低減させ、半導体記憶装置全体の書き込み処理の速度等の性能の低下を低減させ、寿命の減少を低減させる、半導体記憶装置を提供することができる。
半導体記憶装置1の機能構成の概略を示す図である。 半導体記憶装置1が有するコントローラ200の機能構成の例を示す図である。 半導体記憶装置1が有するコントローラ200aの機能構成の例を示す図である。 並び順情報管理部270の構成の例を説明する図である。 並び順情報管理部270dの構成の例を説明する図である。 ブロック制御部210の機能を説明する図である。 誤り訂正制御部260の機能構成を説明する図である。 パリティ制御部230の機能構成の例を説明する図である。 第2の実施の形態における書き込み処理を説明するフロー図である。 第2の実施の形態における書き込み処理の前の各テーブル等の状態を説明する図である。 第2の実施の形態における書き込み処理の後の各テーブル等の状態を説明する図である。 読み込み処理を説明するフロー図である。 パリティ生成処理を説明する図である。 並び順がアドレス領域毎のデータ更新順序の場合のアドレステーブル11等の例を説明する図である。 静的な情報に従ってパリティグループを構成する場合のアドレステーブル11等の例を説明する図(その1−1)である。 静的な情報に従ってパリティグループを構成する場合のアドレステーブル11等の例を説明する図(その1−2)である。 静的な情報に従ってパリティグループを構成する場合のアドレステーブル11等の例を説明する図(その2)である。 静的な情報に従ってパリティグループを構成する場合のアドレステーブル11等の例を説明する図(その3−1)である。 静的な情報に従ってパリティグループを構成する場合のアドレステーブル11等の例を説明する図(その3−2)である。 読み込みパトロール処理を説明する図である。 半導体記憶装置1が有するコントローラ200bの機能構成の例を示す図である。 半導体記憶装置1が有するコントローラ200cの機能構成の例を示す図である。 ブロック数を変更する処理を説明するフロー図である。 半導体記憶装置1が有するコントローラ200dの機能構成の例を説明する図である。 第5の実施の形態における書き込み処理を説明するフロー図である。 第5の実施の形態における書き込み処理の前の各テーブル等の状態を説明する図である。 第5の実施の形態における書き込み処理の途中の各テーブル等の状態を説明する図である。 第5の実施の形態における書き込み処理の後の各テーブル等の状態を説明する図である。 更新前ブロック回収部242が未割当ブロックを回収する処理を説明するフロー図である。 更新前ブロック回収処理の後の各テーブル等の状態を説明する図である。 ブロック数が異なるパリティグループを新たに生成する処理を説明するフロー図である。 異なるブロック数により生成される新たなパリティグループを説明する図(その1)である。 異なるブロック数により生成される新たなパリティグループを説明する図(その2)である。 異なるブロック数により生成される新たなパリティグループを説明する図(その3)である。 パリティグループを構成するブロック数を動的に変化させてパリティグループを生成する処理を説明するフロー図である。 更新前ブロックが増えた際に、新たなパリティグループを生成する際の各テーブル等の状態を説明する図である。 パリティグループを構成するブロックの数を変更させる書き込み処理を説明するフロー図である。 所定の時間、パリティグループに含まれないアドレス割当ブロックに対する処理を説明するフロー図である。 パリティグループを説明する図である。 更新前ブロックの並び順と、パリティグループの生成の例を示す図(その1)である。 更新前ブロックの並び順と、パリティグループの生成の例を示す図(その2)である。 更新前ブロックの並び順と、パリティグループの生成の例を示す図(その3)である。 パリティグループの数を減じる例を説明する図である。 半導体記憶素子群9上のブロックに格納されるデータと、キャッシュメモリ293上に格納されるパリティデータとの例を説明する図である。 第2の実施の形態における書き込み処理の詳細を説明するフロー図である。 パリティデータをキャッシュメモリ293に格納する処理を説明するフロー図である。 パリティデータをキャッシュメモリ293から半導体記憶素子群9に移す処理を説明するフロー図である。 パリティデータを更新する際の演算を説明する図である。
以下、本実施の形態を図面に基づき説明する。
〔本実施の形態〕
サーバ環境で使用される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等のメインメモリをワークエリアとして使用し、実行される。
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。
1 半導体記憶装置
200、200a、200b、200c、200d コントローラ
9 半導体記憶素子
11 アドレステーブル
12 ブロックテーブル
31 パリティ生成部
32 復元部
33 付け替え部
39 パリティ対応リスト
61 検出・訂正情報管理部
62 誤り検出情報生成部
63 誤り検出部
64 誤り訂正情報生成部
65 誤り訂正部
210 ブロック制御部
215 ブロック数変更部
216 ブロック群選択部
220、220d 書き込み処理部
221 読み込み処理部
223 その他のコマンド処理部
224 コマンド処理部
230、230d パリティ制御部
240 パリティ生成パトロール部
241 読み込みパトロール部
242 更新前ブロック回収部
250 復元可否判断部
260 誤り訂正制御部
270 並び順情報管理部
291 ホストインタフェース部
292 半導体記憶素子インタフェース部
293 キャッシュメモリ
299 動的更新部

Claims (21)

  1. ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、
    前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、
    前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、
    前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出する第1のデータ抽出部と、
    抽出された前記データに基づいて冗長データを生成する第1の冗長データ生成部と、
    生成した前記冗長データを半導体記憶素子群に書き込む第1の冗長データ書き込み部と、さらに、前記記録部が保持する前記冗長データが生成されたデータの冗長データ生成有無情報を更新する第1の冗長データ生成有無情報更新部と、
    を有することを特徴とする半導体記憶装置。
  2. 前記論理アドレス情報と、前記半導体記憶素子群に記録されたデータの物理的なアドレスの情報である物理アドレス情報とを対応付けた情報であるアドレス対応付け情報を保持する第1の記録部をさらに有し、
    前記書き込み部は、さらに、前記半導体記憶素子群に書き込んだデータのアドレス対応付け情報を第1の記録部に書き込むことを特徴とする請求項1の半導体記憶装置。
  3. 前記受付部は、さらに、ホスト装置から、前記論理アドレス情報を含む読み込み要求を受け付け、
    前記論理アドレス情報に対応づけられる前記物理アドレス情報を用いて、半導体記憶素子群からデータを読み出し、読み出した前記データ、又は、前記読み込み要求に読み出した前記データを書き込む場所を表す情報が含まれる場合の、前記データが前記書き込む場所に書き込まれる処理が終了したことを表す情報を含む情報である読み込み回答をホスト装置に送付する読み込み部を有することを特徴とする請求項2記載の半導体記憶装置。
  4. 物理アドレス情報である前記半導体記憶素子群のブロックの識別情報と、前記半導体記憶素子群のブロックが保持するデータの種別の情報であるブロック状態情報と、を対応づけて管理するブロック制御部と、
    データを保持するブロックの識別情報と、該ブロックの保持するデータから生成される冗長データを保持するブロックの識別情報とを対応付けたパリティ対応情報を含む、前記冗長データ生成有無情報を管理するパリティ制御部と、
    を有し、
    前記第1のデータ抽出部は、前記パリティ対応情報に基づいて、前記ブロック状態情報が、前記アドレス対応付け情報において該ブロックの識別情報が論理アドレス情報に対応付けられているアドレス割当状態であるブロックのうち、冗長データを保持しているブロックである一以上のパリティ割当状態のブロックと、該パリティ割当状態のブロックに保持されている冗長データの生成の基となったデータを保持している、一以上のブロックによって構成されるパリティグループに含まれないブロックを抽出し、
    前記第1の冗長データ生成部は、前記抽出したブロックが保持するデータから、所定の方法に基づき、一以上の冗長データを生成し、
    前記第1の冗長データ書き込み部は、前記生成した冗長データを、前記ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させ、
    前記第1の冗長データ生成有無情報更新部は、パリティグループを、前記抽出したブロックと前記パリティ割当状態のブロックから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させ、
    前記書き込み部は、さらに、前記書き込み要求に含まれるデータまたは書き込むデータが格納されている場所の情報に基づいて取得したデータを、ブロック状態情報に基づいて、未割当状態のブロックに書き込み、前記データを書き込んだブロックのブロック状態情報をアドレス割当状態に変更させ、前記アドレス対応付け情報における、書き込んだ前記ブロックの物理アドレス情報に前記書き込み要求に含まれる論理アドレス情報を対応づけさせ、前記書き込み要求に含まれる論理アドレスに書き込み処理の前に対応づけられていた物理アドレスのブロックのブロック状態情報を未割当状態とさせ、該ブロックが、パリティグループに含まれる場合は、前記パリティ対応情報における該パリティグループの情報を削除させ、前記削除したパリティグループに含まれる、パリティ割当ブロックのブロック状態情報を未割当状態とさせることを特徴とする請求項3記載の半導体記憶装置。
  5. 前記第1のデータ抽出部および前記第1の冗長データ生成有無情報更新部は、新たにパリティグループを構成するアドレス割当状態のブロックを、所定の並び順に従い選択することを特徴とする請求項4記載の半導体記憶装置。
  6. 前記所定の並び順は、ブロック及び/又は論理アドレス情報毎に保持されるデータが書き込まれた時刻の順、ブロック及び/又は論理アドレス情報毎に保持されるデータが書き込まれた回数の順、または、前記時刻の順の情報と前記回数の順の情報から所定の評価関数に基づいて得られた評価値の順であることを特徴とする請求項5記載の半導体記憶装置。
  7. 物理アドレス情報である前記半導体記憶素子群のブロックの識別情報と、前記半導体記憶素子群のブロックが保持するデータの情報であるブロック状態情報と、を対応づけて管理するブロック制御部と、
    データを保持するブロックの識別情報と、該ブロックが保持するデータから生成される冗長データを保持するブロックの識別情報とを対応付けたパリティ対応情報を含む、前記冗長データ生成有無情報を管理するパリティ制御部と、
    を有し、
    前記書き込み部は、さらに、前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを、ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、書き込んだ前記ブロックのブロック状態情報を、前記アドレス対応付け情報において該ブロックの識別情報が論理アドレス情報に対応付けられているアドレス割当状態に変更させ、前記アドレス対応付け情報における、書き込んだ前記ブロックの物理アドレス情報に前記書き込み要求に含まれる論理アドレス情報を対応づけさせ、前記書き込み要求に含まれる論理アドレスに書き込み処理の前に対応づけられていた物理アドレスのブロックが、前記パリティグループに含まれる場合は、該ブロックのブロック状態情報を、有効ではないデータを保持する更新前割当状態とさせ、前記書き込み要求に含まれる論理アドレスに書き込み処理の前に対応づけられていた物理アドレスのブロックが前記パリティグループに含まれていない場合は、該ブロックのブロック状態情報を,データを保持しないブロックである未割当状態に変更し、
    ブロック状態情報が、更新前割当状態であるブロックを含むパリティグループの情報を前記パリティ対応情報から削除し、前記削除したパリティグループに含まれる、更新前割当状態のブロックとパリティ割当状態のブロックのブロック状態情報を、未割当状態に変更する第3の削除部と、
    前記削除したパリティグループに含まれる、アドレス割当状態のブロックを抽出する第3のデータ抽出部と、
    前記抽出したブロックから、一以上の冗長データを生成する第3の冗長データ生成部と、
    前記生成した冗長データを、ブロック状態情報に基づいて、未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させる第3の冗長データ書き込み部と、
    前記抽出したブロックと前記パリティ割当状態のブロックからパリティグループを新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させる第3の冗長データ生成有無情報と、
    を有することを特徴とする請求項3記載の半導体記憶装置。
  8. 前記更新前ブロック回収部は、ブロック状態情報を未割当状態に変更させる更新前割当状態のブロック、及び/又は、新たにパリティグループに含ませるアドレス割当状態のブロックを、所定の並び順に従い選択することを特徴とする請求項7記載の半導体記憶装置。
  9. 前記所定の並び順は、ブロック及び/又は論理アドレス情報毎に保持されるデータが書き込まれた時刻の順、または、ブロック及び/又は論理アドレス情報毎に保持されるデータが書き込まれた回数の順、または前記時刻の順の情報と前記回数の順の情報から所定の評価関数に基づいて得られた評価値の順であることを特徴とする請求項8記載の半導体記憶装置。
  10. ブロック状態情報がパリティ割当状態のブロックの数を変更する、ブロック数変更部を有することを特徴とする請求項4ないし9何れか一項に記載の半導体記憶装置。
  11. 前記ブロック数変更部は、
    所定の方法に基づいて抽出した、パリティグループの情報を前記パリティ対応情報から削除し、前記削除したパリティグループに含まれる、更新前割当状態のブロックとパリティ割当状態のブロックのブロック状態情報を、未割当状態に変更する第2の削除部と、
    前記削除したパリティグループに含まれる、またはいずれのパリティグループにも含まれないアドレス割当状態のブロックを抽出する第2のデータ抽出部と、
    前記抽出したブロックから、一以上の冗長データを生成する第2の冗長データ生成部と、
    前記生成した冗長データを、ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させる第2の冗長データ書き込み部と、
    パリティグループを前記抽出したブロックと前記パリティ割当状態のブロックから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させる、第2の冗長データ生成有無情報更新部と、
    を有し、
    前記第2の冗長データ生成部および前記第2の冗長データ生成有無情報更新部は、前記パリティグループが有する、該パリティ割当状態のブロックに保持されている冗長データの生成の基となったデータを保持しているブロックの数を変更し、及び/又は、異なる数のパリティ割当状態のブロックが対応づけられる複数の冗長データの生成方法から一の冗長データ生成方法を選択することを特徴とする請求項10記載の半導体記憶装置。
  12. 前記ブロック数変更部は、前記パリティグループが生成される時、又は、前記パリティグループの情報が前記パリティ対応情報から削除される時、に同期して、前記ブロック状態情報がパリティ割当状態のブロックの数を変更することを特徴とする請求項10又は11記載の半導体記憶装置。
  13. 前記パリティ対応情報に基づいて、ブロック状態情報がアドレス割当状態であるブロックのうち、所定の時間を超えて、パリティグループに含まれていないブロックを抽出する第4のデータ抽出部と、
    前記抽出したブロックから、一以上の冗長データを生成する第4の冗長データ生成部と、
    前記生成した冗長データを、ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させる第4の冗長データ書き込み部と、
    パリティグループを前記抽出したブロックと前記パリティ割当状態のブロックから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させる第4の冗長データ生成有無情報更新部と、
    を有することを特徴とする請求項4ないし12何れか一項記載の半導体記憶装置。
  14. 前記第1ないし第4の冗長データ生成部が生成した冗長データを記憶する、一時記憶部と、
    を有し、
    前記第1ないし第4の冗長データ書き込み部は、さらに、前記一時記憶部に記憶されている冗長データを、ブロック状態情報に基づいて、データを保持しないブロックである未割当状態のブロックに書き込み、前記冗長データを書き込んだブロックのブロック状態情報を、パリティ割当状態に変更させ、
    前記第1ないし第4の冗長データ生成有無情報更新部は、さらに、パリティグループを前記抽出したブロックと一時記憶部に記憶されている冗長データから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させ、また、前記登録したパリティグループの情報を前記パリティ対応情報から削除し、パリティグループを前記抽出したブロックと前記パリティ割当状態のブロックから新たに生成し、該パリティグループの情報を前記パリティ対応情報に登録させることを特徴とする請求項4ないし13何れか一項記載の半導体記憶装置。
  15. 前記冗長データを生成する際に用いるデータを保持する、冗長データ生成元データ保持部を有し、
    前記書き込み部は、さらに、前記冗長データ生成有無情報に基づいて、前記冗長データが、前記書き込み要求に含まれる論理アドレス情報に対応付けられていた、物理アドレス情報である前記半導体記憶素子群のブロックの識別情報が示す、ブロックが保持しているデータを復元するための情報を含む場合には、該冗長データを生成する際に用いるデータを、前記冗長データ生成元データ保持部に保持させ、
    前記第1ないし第4の冗長データ生成部は、さらに、前記冗長データを生成する際に、前記冗長データ生成元データ保持部が保持するデータを用いて、前記冗長データを生成することを特徴とする請求項14記載の半導体記憶装置。
  16. 前記パリティ対応情報に基づいて、パリティグループに含まれるブロックを、該ブロックが保持するデータの復元が可能であると判断する、復元可否判断部と、
    前記パリティ対応情報に基づいて、一のブロックが保持するデータを、該ブロックが含まれるパリティグループに含まれるブロックが保持するデータから復元する復元部と、
    を有し、
    前記読み込み部は、さらに、前記半導体記憶素子群から読み出したデータに少なくとも誤りが検出された場合に、前記復元可否判断部によって該ブロックが保持するデータの復元が可能であると判断されたとき、前記復元部に該ブロックが保持するデータを復元させ、復元された前記データの前記読み込み回答をホスト装置に送付することを特徴とする請求項3ないし15何れか一項に記載の半導体記憶装置。
  17. 前記半導体記憶素子群のブロックのうち、ブロック状態情報が未割当状態ではないブロックに記録されているデータを、前記読み込み要求に関わり無く読み込む際に、前記半導体記憶素子群から読み出したデータに少なくとも誤りが検出された場合に、
    前記復元可否判断部が、前記ブロックに記憶されているデータが復元可能と判断するとき、前記復元部に、前記ブロックに記憶されているデータを復元させ、復元された前記データを前記半導体記憶素子群に書き出し、前記冗長データ生成有無情報、及び/又は、前記アドレス対応付け情報、及び/又は、前記ブロック状態情報を更新する、読み込みパトロール部を有することを特徴とする請求項16記載の半導体記憶装置。
  18. 前記半導体記憶素子群の複数のブロックが保持するデータを、互いに他のブロックに入れ替えて書き込み、前記冗長データ生成有無情報、及び/又は、前記アドレス対応付け情報、及び/又は、前記ブロック状態情報を更新する、動的更新部を有することを特徴とする請求項3ないし17何れか一項に記載の半導体記憶装置。
  19. 前記動的更新部は、ブロック状態情報が未割当状態のブロックが保持するデータを入れ替えて書き込む処理を行わないことを特徴とする請求項18記載の半導体記憶装置。
  20. ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、
    前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、
    前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、
    前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出し、抽出された前記データに基づいて冗長データを生成し、生成した前記冗長データを半導体記憶素子群に書き込み、
    さらに、前記記録部が保持する前記冗長データが生成されたデータの冗長データ生成有無情報を更新する、冗長データ生成書き込み部と、
    前記記録部が保持する冗長データ生成有無情報により、冗長データを保持する半導体記憶素子群の数を変更し、前記冗長データ生成有無情報を更新する、ブロック数変更部と、
    を有することを特徴とする半導体記憶装置。
  21. ホスト装置から、半導体記憶素子群に書き込むデータまたは半導体記憶素子群に書き込むデータが格納されている場所の情報と、ホスト装置が出力する半導体記憶素子群の論理的なアドレス情報である論理アドレス情報と、を含む書き込み要求を、受け付ける受付部と、
    前記半導体記憶素子群が保持するデータの冗長データが生成されているか否かを表す情報である冗長データ生成有無情報を保持する記録部と、
    前記書き込み要求に含まれるデータまたは前記書き込み要求に含まれる書き込むデータが格納されている場所の情報に基づいて取得したデータを半導体記憶素子群に書き込み、書き込んだ前記データの冗長データ生成有無情報を前記記録部に書き込む書き込み部と、
    前記記録部が保持する冗長データ生成有無情報により、前記半導体記憶素子群が保持するデータのうち冗長データが生成されていないデータを抽出し、抽出された前記データに基づいて冗長データを生成し、さらに、前記冗長データが生成されたデータの冗長データ生成有無情報を更新する、冗長データ生成部と、
    生成した前記冗長データを記憶する、一時記憶部と、
    生成した前記冗長データを前記一時記憶部に記憶させ、前記冗長データ生成有無情報を更新させる、冗長データ生成有無情報更新部と、
    前記冗長データ生成有無情報に基づいて、前記一時記憶部に記憶されている冗長データを、前記半導体記憶素子群に書き込み、さらに、前記冗長データ生成有無情報を更新する、冗長データ書き出し部と、
    を有することを特徴とする半導体記憶装置。
JP2009047304A 2009-02-27 2009-02-27 半導体記憶装置 Expired - Fee Related JP5268710B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009047304A JP5268710B2 (ja) 2009-02-27 2009-02-27 半導体記憶装置
US12/713,631 US8341497B2 (en) 2009-02-27 2010-02-26 Semiconductor storage

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009047304A JP5268710B2 (ja) 2009-02-27 2009-02-27 半導体記憶装置

Publications (2)

Publication Number Publication Date
JP2010204770A true JP2010204770A (ja) 2010-09-16
JP5268710B2 JP5268710B2 (ja) 2013-08-21

Family

ID=42667800

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009047304A Expired - Fee Related JP5268710B2 (ja) 2009-02-27 2009-02-27 半導体記憶装置

Country Status (2)

Country Link
US (1) US8341497B2 (ja)
JP (1) JP5268710B2 (ja)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4334534B2 (ja) * 2005-11-29 2009-09-30 株式会社東芝 ブリッジ装置及びブリッジシステム
JP4564520B2 (ja) 2007-08-31 2010-10-20 株式会社東芝 半導体記憶装置およびその制御方法
WO2009084724A1 (en) 2007-12-28 2009-07-09 Kabushiki Kaisha Toshiba Semiconductor storage device
JP4439569B2 (ja) * 2008-04-24 2010-03-24 株式会社東芝 メモリシステム
JP2009295750A (ja) * 2008-06-04 2009-12-17 Toshiba Corp 半導体装置
JP5066209B2 (ja) 2010-03-18 2012-11-07 株式会社東芝 コントローラ、データ記憶装置、及びプログラム
US9558074B2 (en) * 2010-06-11 2017-01-31 Quantum Corporation Data replica control
JP5279785B2 (ja) 2010-09-17 2013-09-04 株式会社東芝 コントローラ、記憶装置、およびプログラム
JP5039193B2 (ja) 2010-09-22 2012-10-03 株式会社東芝 半導体記憶装置および制御方法
US8463991B2 (en) * 2010-09-28 2013-06-11 Pure Storage Inc. Intra-device data protection in a raid array
JP5269932B2 (ja) 2011-03-01 2013-08-21 株式会社東芝 コントローラ、データ記憶装置およびプログラム
US8640013B2 (en) 2011-09-22 2014-01-28 Kabushiki Kaisha Toshiba Storage device
JP2013131192A (ja) * 2011-12-22 2013-07-04 Fujitsu Ltd ストレージ装置及びストレージ装置の制御方法
KR20130075018A (ko) * 2011-12-27 2013-07-05 한국전자통신연구원 플래시 메모리 파일 시스템에 적용 가능한 데이터 업데이트 장치 및 방법
WO2013102163A1 (en) 2011-12-30 2013-07-04 Rambus Inc. Wear leveling in a memory system
US9239781B2 (en) 2012-02-07 2016-01-19 SMART Storage Systems, Inc. Storage control system with erase block mechanism and method of operation thereof
US9671962B2 (en) * 2012-11-30 2017-06-06 Sandisk Technologies Llc Storage control system with data management mechanism of parity and method of operation thereof
US9123445B2 (en) 2013-01-22 2015-09-01 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US9214965B2 (en) 2013-02-20 2015-12-15 Sandisk Enterprise Ip Llc Method and system for improving data integrity in non-volatile storage
US9329928B2 (en) 2013-02-20 2016-05-03 Sandisk Enterprise IP LLC. Bandwidth optimization in a non-volatile memory system
US9183137B2 (en) 2013-02-27 2015-11-10 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US9170941B2 (en) 2013-04-05 2015-10-27 Sandisk Enterprises IP LLC Data hardening in a storage system
US10049037B2 (en) 2013-04-05 2018-08-14 Sandisk Enterprise Ip Llc Data management in a storage system
US9543025B2 (en) 2013-04-11 2017-01-10 Sandisk Technologies Llc Storage control system with power-off time estimation mechanism and method of operation thereof
US10546648B2 (en) 2013-04-12 2020-01-28 Sandisk Technologies Llc Storage control system with data management mechanism and method of operation thereof
US9244519B1 (en) 2013-06-25 2016-01-26 Smart Storage Systems. Inc. Storage system with data transfer rate adjustment for power throttling
US9367353B1 (en) 2013-06-25 2016-06-14 Sandisk Technologies Inc. Storage control system with power throttling mechanism and method of operation thereof
US9146850B2 (en) 2013-08-01 2015-09-29 SMART Storage Systems, Inc. Data storage system with dynamic read threshold mechanism and method of operation thereof
US9448946B2 (en) 2013-08-07 2016-09-20 Sandisk Technologies Llc Data storage system with stale data mechanism and method of operation thereof
US9431113B2 (en) 2013-08-07 2016-08-30 Sandisk Technologies Llc Data storage system with dynamic erase block grouping mechanism and method of operation thereof
US9361222B2 (en) 2013-08-07 2016-06-07 SMART Storage Systems, Inc. Electronic system with storage drive life estimation mechanism and method of operation thereof
US9747157B2 (en) 2013-11-08 2017-08-29 Sandisk Technologies Llc Method and system for improving error correction in data storage
US9152555B2 (en) 2013-11-15 2015-10-06 Sandisk Enterprise IP LLC. Data management with modular erase in a data storage system
JP6287446B2 (ja) * 2014-03-26 2018-03-07 富士通株式会社 データ処理装置及びデータ処理装置の制御方法
US9465537B2 (en) 2014-05-16 2016-10-11 Kabushiki Kaisha Toshiba Memory system and method of controlling memory system
US9639418B2 (en) * 2015-09-01 2017-05-02 International Business Machines Corporation Parity protection of a register
US10665305B2 (en) * 2015-09-09 2020-05-26 Toshiba Memory Corporation Host device connectable to memory device performing patrol read and memory device performing patrol read
US10977119B2 (en) * 2018-09-28 2021-04-13 Apple Inc. Techniques for utilizing volatile memory buffers to reduce parity information stored on a storage device
CN111158589B (zh) * 2019-12-16 2023-10-20 绿晶半导体科技(北京)有限公司 存储阵列的动态管理方法和装置
JP2021189937A (ja) * 2020-06-03 2021-12-13 株式会社日立製作所 ストレージシステム及びストレージシステムの制御方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10198528A (ja) * 1997-01-08 1998-07-31 Hitachi Ltd アレイ記憶装置およびその制御方法
JP2000112668A (ja) * 1998-10-02 2000-04-21 Toshiba Corp ディスクアレイ制御装置及び同装置に適用されるキャッシュ制御方法
JP2002259062A (ja) * 2001-02-28 2002-09-13 Hitachi Ltd 記憶装置システム及び記憶装置システムにおけるデータの複写方法
JP2008015623A (ja) * 2006-07-03 2008-01-24 Hitachi Ltd 複数種類の記憶デバイスを備えたストレージシステムの制御装置

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4012420B2 (ja) * 2002-03-12 2007-11-21 株式会社日立製作所 磁気ディスク装置及びディスク制御装置
JP4413840B2 (ja) 2005-09-20 2010-02-10 株式会社東芝 記憶媒体再生装置、記憶媒体再生方法および記憶媒体再生プログラム
JP4660353B2 (ja) 2005-11-01 2011-03-30 株式会社東芝 記憶媒体再生装置
JP4575288B2 (ja) 2005-12-05 2010-11-04 株式会社東芝 記憶媒体、記憶媒体再生装置、記憶媒体再生方法および記憶媒体再生プログラム
US8493405B2 (en) * 2006-05-24 2013-07-23 Panasonic Corporation Image control device and image display system for generating an image to be displayed from received imaged data, generating display information based on the received image data and outputting the image and the display information to a display
JP4575346B2 (ja) 2006-11-30 2010-11-04 株式会社東芝 メモリシステム
JP2008217857A (ja) 2007-02-28 2008-09-18 Toshiba Corp メモリコントローラ及び半導体装置
JP2009005146A (ja) * 2007-06-22 2009-01-08 Panasonic Corp データ伝送装置
JP4564520B2 (ja) 2007-08-31 2010-10-20 株式会社東芝 半導体記憶装置およびその制御方法
JP4538034B2 (ja) 2007-09-26 2010-09-08 株式会社東芝 半導体記憶装置、及びその制御方法
WO2009084724A1 (en) 2007-12-28 2009-07-09 Kabushiki Kaisha Toshiba Semiconductor storage device
JP4461170B2 (ja) 2007-12-28 2010-05-12 株式会社東芝 メモリシステム
JP4653817B2 (ja) 2008-03-01 2011-03-16 株式会社東芝 メモリシステム
JP4439569B2 (ja) 2008-04-24 2010-03-24 株式会社東芝 メモリシステム
JP2009295750A (ja) 2008-06-04 2009-12-17 Toshiba Corp 半導体装置
JP2010009548A (ja) 2008-06-30 2010-01-14 Toshiba Corp 記憶装置、制御装置、記憶システム、および記憶方法
JP2010015195A (ja) 2008-06-30 2010-01-21 Toshiba Corp 記憶制御装置及び記憶制御方法
JP2010015197A (ja) 2008-06-30 2010-01-21 Toshiba Corp ストレージ制御装置、データ復元装置およびストレージシステム
JP5242264B2 (ja) 2008-07-07 2013-07-24 株式会社東芝 データ制御装置、ストレージシステムおよびプログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10198528A (ja) * 1997-01-08 1998-07-31 Hitachi Ltd アレイ記憶装置およびその制御方法
JP2000112668A (ja) * 1998-10-02 2000-04-21 Toshiba Corp ディスクアレイ制御装置及び同装置に適用されるキャッシュ制御方法
JP2002259062A (ja) * 2001-02-28 2002-09-13 Hitachi Ltd 記憶装置システム及び記憶装置システムにおけるデータの複写方法
JP2008015623A (ja) * 2006-07-03 2008-01-24 Hitachi Ltd 複数種類の記憶デバイスを備えたストレージシステムの制御装置

Also Published As

Publication number Publication date
US20100223531A1 (en) 2010-09-02
JP5268710B2 (ja) 2013-08-21
US8341497B2 (en) 2012-12-25

Similar Documents

Publication Publication Date Title
JP5268710B2 (ja) 半導体記憶装置
JP4958739B2 (ja) 障害の発生した記憶装置に記憶されているデータを修復するストレージシステム
JP6870246B2 (ja) ストレージ装置、及びストレージ制御装置
JP4901968B2 (ja) 半導体記憶装置
JP5066209B2 (ja) コントローラ、データ記憶装置、及びプログラム
JP6136460B2 (ja) 情報処理装置、情報処理装置の制御プログラムおよび情報処理装置の制御方法
JP5721344B2 (ja) システム、システムの制御方法、及び、プログラム
US20070067585A1 (en) Snapshot maintenance apparatus and method
JP2008204041A (ja) ストレージ装置及びデータ配置制御方法
CN110597455A (zh) 通过改进的元数据管理增加闪存耐用性的方法
JP2007179545A (ja) 不揮発性メモリをキャッシュとして用いる保存装置及びその管理方法
KR20130105666A (ko) Raid 어레이에서 장치내 데이터 보호
JP6798007B2 (ja) ストレージシステム、コンピュータ読み取り可能な記録媒体、システムの制御方法
KR20130111228A (ko) 메모리 액세스 테이블 저장 및 복원 시스템 및 방법
WO2015015611A1 (ja) ストレージシステム及びデータライト方法
KR20130118876A (ko) Ssd 환경에서의 적응형 raid
KR20130114668A (ko) 적응적 지오메트리를 구비한 raid 어레이에서의 복원 판독
WO2013186828A1 (ja) 計算機システム及び制御方法
JPWO2015097751A1 (ja) 不揮発性キャッシュメモリにデータをバックアップするストレージシステム
CN111831476A (zh) 控制raid系统的操作的方法
KR101738965B1 (ko) 가비지 컬렉션 저널링 장치 및 방법
JP6269253B2 (ja) 分散ストレージシステム、記憶装置制御方法、および記憶装置制御プログラム
JP2006011811A (ja) 記憶制御システム及び記憶制御方法
US11288006B2 (en) Storage system and volume copying method where changes to address conversion table is rolled back
KR101369408B1 (ko) 스토리지 시스템 및 이의 데이터 전송 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110325

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130115

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130318

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130409

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130507

LAPS Cancellation because of no payment of annual fees