(57)【要約】【課題】循環書き込みを効果的に解消でき、各ブロックの書き換え回数の上限を統計的に管理することが可能な記憶装置およびコンピュータシステム、記憶装置の管理方法を提供する。【解決手段】主記憶メディアとしてフラッシュメモリデバイス３９と、制御部３２と、を有し、制御部３２は、ユーザーアクセスへの応答とは別個に、フラッシュメモリデバイス３９の任意の書き込み済みブロックのデータを、乱数を用いて選んだ空きブロックに時折移動させ、しかる後移動元ブロックを消去する。【選択図】図４
2008181203.tif 000002
【特許請求の範囲】
【請求項１】
主記憶メディアとしてフラッシュメモリデバイスと、
制御部と、を有し、
上記制御部は、
ユーザーアクセスへの応答とは別個に、
上記フラッシュメモリデバイスの任意の書き込み済みブロックのデータを、乱数を用いて選んだ空きブロックに時折移動させ、当該移動元ブロックを消去する
記憶装置。
【請求項２】
上記制御部は、
上記移動元の書き込み済みブロックを、上記フラッシュメモリデバイスにおけるブロックアドレスに従って、特定の順番で循環するように選択する
請求項１記載の記憶装置。
【請求項３】
上記制御部は、
上記移動処理を、上記フラッシュメモリデバイスに一定のデータ量が書き込まれる毎に実施する
請求項１記載の記憶装置。
【請求項４】
主記憶メディアとしてフラッシュメモリデバイスと、
制御部と、
上記フラッシュメモリデバイスのデータにアクセス可能な処理装置と、を有し、
上記制御部は、
ユーザーアクセスへの応答とは別個に、
上記フラッシュメモリデバイスの任意の書き込み済みブロックのデータを、乱数を用いて選んだ空きブロックに時折移動させ、当該移動元ブロックを消去する
コンピュータシステム。
【請求項５】
上記制御部は、
上記移動元の書き込み済みブロックを、上記フラッシュメモリデバイスにおけるブロックアドレスに従って、特定の順番で循環するように選択する
請求項４記載のコンピュータシステム。
【請求項６】
上記制御部は、
上記移動処理を、上記フラッシュメモリデバイスに一定のデータ量が書き込まれる毎に実施する
請求項４記載のコンピュータシステム。
【請求項７】
記憶メディアたるフラッシュメモリデバイスの任意の書き込み済みブロックのデータを、ユーザーアクセスへの応答とは別個に、乱数を用いて選んだ空きブロックに時折移動させ、
しかる後に特定のブロックに書き込みと消去が集中することを防止するように上記移動元ブロックを消去する
記憶装置の管理方法。
【請求項８】
上記移動元の書き込み済みブロックは、上記フラッシュメモリデバイスにおけるブロックアドレスに従って、特定の順番で循環するように選択される
請求項７記載の記憶装置の管理方法。
【請求項９】
上記移動処理は、上記フラッシュメモリデバイスに一定のデータ量が書き込まれる毎に実施される
請求項７記載の記憶装置の管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリを含む記憶装置およびコンピュータシステム、記憶装置の管理方法に関するものである。
【背景技術】
【０００２】
近年、デジタルスチルカメラやモバイルコンピュータ機器の記憶媒体として、フラッシュメモリが注目されている。
【０００３】
フラッシュメモリは、トンネリングやホットエレクトロン加速を用いて、電子にゲート絶縁膜を通過させ、それらを浮遊ゲートやトラップ層に注入し、セルトランジスタの閾値を変化させることでデータを記憶させる半導体メモリである。積層ゲート構造やＭＮＯＳ構造等を用いたトランジスタ１つのみでメモリセルを構成できるため、安価かつ大容量のメモリを実現できる。
その代表例として、ＮＡＮＤ型フラッシュメモリが挙げられる。
【０００４】
図１は、ＮＡＮＤ型フラッシュメモリの内部構成例を示す図である。
図１のＮＡＮＤ型フラッシュメモリは、ビット線ＢＬ１〜ＢＬｎに接続された複数のメモリユニット１−１〜１−ｎがアレイ状に（縦横）に配列されている。
たとえば、選択用トランジスタ２のゲートが選択ゲート線ＳＬ１に接続され、選択用トランジスタ３のゲートが選択ゲート線ＳＬ２に接続されている。また、各メモリセルＮ０〜Ｎ１５のゲートがワード線ＷＬ０〜ＷＬ１５に接続されている。
【０００５】
各メモリセルＮ０〜Ｎ１５は積層ゲート構造を持ち、浮遊ゲートへの電荷蓄積量に従ってデータを記憶する。すなわち、浮遊ゲートに多くの電子が蓄積されていると、トランジスタの閾値が上昇するので、チャージされたビット線ＢＬ１〜ＢＬｎからのメモリユニット１（−１〜−ｎ）への電流貫通の有無を、センスアンプ等を含むアクセス回路４で検出してデータ判定を行う。
【０００６】
このようなＮＡＮＤ型フラッシュメモリは、メモリセル毎にビット線へのコンタクト領域を設ける必要もないので、特に大容量で安価な記憶装置の媒体に適している。
【０００７】
ところで、一般にフラッシュメモリのプログラム速度は非常に遅く、セルあたり数百マイクロ（μ）秒を必要とする。またデータの上書きはできないので、プログラムに先立って消去を行う必要があり、これには数ｍ秒もの時間がかかる。このような問題に対しては、多くのメモリセルを並列処理することで対処している。
【０００８】
すなわち、たとえば同一ワード線ＷＬ０に接続され、ページ単位を成すメモリセル群５を、同時一括に書き込み、さらに互いにメモリユニットを共有するページ群で構成されるセルブロック６を全て一括で消去することにより、プログラムの転送速度を向上させている。
【０００９】
具体的には、たとえば非特許文献１には１ＧｂのＮＡＮＤ型フラッシュメモリが掲載されており、ページサイズを２ｋバイト、消去ブロックサイズを１２８ｋＢとしている。すなわち、一つのメモリアレイ内で１２８ｋバイトのメモリセル群を並列消去し、そこにメモリセルを２ｋバイト毎に並列でプログラムしていくことによって、１０ＭＢ／ｓのプログラム転送速度を実現している。
【００１０】
なお、通常ＮＡＮＤ型フラッシュの各ページは、たとえば２ｋバイトのユーザーデータ格納領域に対して６４バイトの予備領域を有している。
この予備領域には、ＮＡＮＤ型フラッシュを使用するシステム側で、パリティビット等の各種管理データを格納することが可能である。この予備領域への書き込みは、通常ユーザーデータ領域への書き込みと一括で行なう必要があり、両者は常にセットとして扱われる。
【００１１】
ところで、フラッシュメモリの使用において注意すべき制約事項として、消去回数の上限が規定されていることが挙げられる。
同一ブロックの書き換えが繰り返されて、その消去回数が上限値を越えると、該ブロックにおけるデータ保持は保証されなくなる。たとえば上記ＮＡＮＤ型フラッシュの消去回数の上限は１０万回またはそれ以下である。
今後メモリセルの微細化に伴ってセルトランジスタの閾値ばらつきが増大し、動作マージンが劣化するため、さらに消去回数の上限は低下していく傾向にある。
【００１２】
また、近年微細化に伴う内部構造と書き込みメカニズムの変化から、特にＮＡＮＤ型フラッシュには以下のような制約が新たに課される傾向にある。
【００１３】
まず、ブロック内の各ページの書き込み順序に制約がつくようになった。
すなわち、各ページの書き込みは下位アドレスから上位アドレスへの順方向に制限されており、逆方向の書き込みは禁止されている。たとえば、一旦どこかのページに書き込みを実施したら、同一ブロック内のそれより下位のアドレスが未書き込みの状態でも、そこにデータを書き込むことはできない。
【００１４】
さらに、各ページの多重書き込みが困難になった。すなわち同一ページ内のデータは２回に分けて書き込むことが出来ない。従って各ページにデータを書き込む前に予備領域の一部のビットを予めマークしたり、データ書き込み後に予備領域にフラグを立てる等、これまでフラッシュメモリの管理に使用されていた各種テクニックが使えない状況になりつつある。
【非特許文献１】ＩＳＳＣＣ２００２予稿集のｐ１０６、セッション６．４
【特許文献１】特開平８−３２８７６２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
近年、ハードディスクの消費電力の大きさや、シーク時間の長さ、耐衝撃性や携帯性等の問題を解消すべく、フラッシュメモリにその代替が期待されている。
しかし上述の如く、フラッシュメモリにはアクセス単位を大きくしないと高速化できないという欠点がある。また、データの上書きができないので、書き換えには必ず消去が必要であり、その際の消去ブロックはさらに大きい。このようにアクセス単位に対して消去単位が数十倍大きいのは、消去時間が長く、かつ書き込み時に非選択セルにディスターブが生じるフラッシュメモリには一般的な仕様である。
【００１６】
このようなフラッシュメモリの仕様に対応し、小型のデータに関しても高速に書き換えを実施すべく、追記型の記憶システムが提案されている。
このようなシステムにおいては、書き換えは、更新データを空き領域に追記し、元のデータを無効化することで実施される。
より具体的には、ページ単位で論理アドレスを物理アドレスに対応させるアドレス変換テーブルを用い、書き換えは対照データの物理アドレスを変更し、記憶メディアの空き領域に追記することで実施する。
【００１７】
たとえば、特許文献１には、アドレス変換テーブルを用いた追記型記憶システムにおける管理方法の詳細が記載されている。図２に一例を示す。
【００１８】
図２において、１１はブロック、１２はページ領域、１３はページバッファ、１４は消去済み空きブロック、１５はアドレス変換テーブル、１６はページ領域をそれぞれ示している。
【００１９】
アドレス変換テーブル１５からは、論理ページアドレス（Ｌｏｇｉｃａｌ  Ｐａｇｅ  Ａｂｂｒｅｓｓ  ＝ＬＰＡ）をインデックスとして、対応するページのフラッシュメモリ上のアドレスである物理ページアドレス（Ｐｈｉｓｉｃａｌ  Ｐａｇｅ  Ａｂｂｒｅｓｓ  ＝ＰＰＡ）を取得することができる。
たとえば、ホストから指定された論理ページアドレス“０ｘ５５０２”への書き込みに対して、アドレス変換テーブルを用いてページ単位でアドレス変換を実施し、フラッシュメモリ上の物理ページアドレス“０ｘ６Ｂ０５”を取得する。これによりブロック１１内の対応するページ領域１２へアクセスが実施される。
【００２０】
一方、同ページに更新を行う際には、フラッシュメモリ内で直接かきこめる適当な空きページ領域が検索される。たとえば物理ブロックアドレス“０ｘＡＡ”に相当する消去済み空きブロック１４の先頭ページ領域１６が適切な書き込み先として選択された場合、ページ領域１２のデータのみがページバッファ１３を介して更新され、ページ領域１６に書き込まれる。この際論理ページアドレス“０ｘ５５０２”はページ領域１６の物理アドレス“０ｘＡＡ００”にリマッピングされる。ページ領域１２上の旧データは、当面そのまま残して無効扱いとしておく。
【００２１】
なお、このように無効化されたページが蓄積してくると、ストレージの記憶領域を圧迫する。したがって、適時無効化されたページを多く含むブロックを選択し、そこに回復処理を実施する。
具体的には消去前に有効ページのみを他のブロックに全てコピーし、これに応じて変換テーブルに記載された物理アドレスを書き換え、最後に元ブロックを消去する。これらの作業は、記憶装置の待機時や、システムのアイドル時に実施することで、そのオーバーヘッドをユーザーから隠蔽することができる。
このような管理を実施すれば、フラッシュメモリ内に空き領域が存在する限りは、各ページデータの更新に対して１ページ分のデータ書き込みで良い。したがって、高速に書き換えを実施することができる。その間消去の必要も無いので、フラッシュメモリの書き換え回数も大幅に低減でき、その寿命も向上させることができる。
【００２２】
しかしそのような対策をとっても、ハードディスク代替のような用途では、十分な寿命が補償されるとは言えない。
たとえば、フラッシュメモリ内に格納されるデータにはアプリケーションプログラムやオペレーティングシステム（ＯＳ）のように書き換え頻度が極めて小さな静的データと、ユーザーデータのように書き換え頻度の大きな動的データとが混在している。
前者が格納されたブロックは殆ど無効化ページが発生しないが、後者のブロックは高頻度で書き換えられて、無効化ページが発生しやすい。
ここで後者のブロックに回復処理が施されると、それらは再び格納領域として開放され、動的なデータが再度格納される可能性が高まる。一方前者のブロックは全く書き換えがなされないまま、放置される。こうして後者のみに書き換えと消去が集中し、消去回数の上限値を越えて不良を発生させてしまう懸念がある。
【００２３】
図３は集中書き換えの一例を示す図である。
図３は物理アドレス上の領域を示しており、空白の領域は消去済み領域、ハッチングを付した領域は有効ページ領域。黒塗りの領域は無効ページ領域である。
【００２４】
ステップＳＴ１：
まずストレージが満杯になるまでＯＳ、アプリケーション、ユーザーデータ等が物理アドレス領域２１に書き込まれる。なお、論理的に満杯まで書き込まれても、物理アドレス上には予備領域２２が残っている。
【００２５】
ステップＳＴ２：
次に書き込んだデータ領域２１の一部領域２３が論理的に消去され、その一部に小さなＷＥＢキャッシュ領域２４が確保される。
【００２６】
ステップＳＴ３：
それ以降ユーザーがブラウザを起動し、ＷＥＢを閲覧する都度に、ＷＥＢキャッシュ領域に繰り返し書き換えが実施される。
【００２７】
ここでの集中書き換えは論理アドレス上の話であり、物理アドレス上においては消去済み領域を循環するようにデータが書き込まれる。すなわち、物理的には順次旧領域が無効化され、消去済み領域に更新後データが書き込まれる。
【００２８】
一方、ステップＳＴ２で消去された一部領域２３は、ファイルシステムの管理の中で見かけ上消去されたに過ぎない。すなわち、その記憶装置上の論理及び物理アドレス領域には、有効ページとしてデータが残存しており、論理的に上書き更新がなされた際に、初めて対応する物理アドレス領域のページが無効化する。
【００２９】
したがってこの例では、ＷＥＢキャッシュとして確保され、更新された領域２４のみが無効化し、他は有効ページとして残存する。そして無効化された領域のみが前述の回復処理或いは消去を施され、再度書き込み可能になる。
したがって、それ以降ＷＥＢキャッシュに書き込まれるデータは、無効化した領域２４と予備領域２２の間を循環し、それ以外の領域は使用されない。
通常、予備領域１２の大きさは全体の１〜２％程度であり、８ＧＢのストレージであれば、８０ＭＢ程度である。たとえばパーソナルコンピュータ（パソコン）においてＨＤＤに累計で書き込まれるデータ量を１０ＴＢとすると、ここに１２５，０００回の書き換えが繰り返され、フラッシュメモリの消去寿命を越えてしまう。
【００３０】
本発明は、循環書き込みを効果的に解消でき、各ブロックの書き換え回数の上限を統計的に管理することが可能な記憶装置およびコンピュータシステム、記憶装置の管理方法を提供することにある。
【課題を解決するための手段】
【００３１】
本発明の第１の観点の記憶装置は、主記憶メディアとしてフラッシュメモリデバイスと、制御部と、を有し、上記制御部は、ユーザーアクセスへの応答とは別個に、上記フラッシュメモリデバイスの任意の書き込み済みブロックのデータを、乱数を用いて選んだ空きブロックに時折移動させ、当該移動元ブロックを消去する。
【００３２】
本発明の第２の観点のコンピュータシステムは、主記憶メディアとしてフラッシュメモリデバイスと、制御部と、上記フラッシュメモリデバイスのデータにアクセス可能な処理装置と、を有し、上記制御部は、ユーザーアクセスへの応答とは別個に、上記フラッシュメモリデバイスの任意の書き込み済みブロックのデータを、乱数を用いて選んだ空きブロックに時折移動させ、当該移動元ブロックを消去する。
【００３３】
本発明の第３の観点のフラッシュメモリ管理方法は、記憶メディアたるフラッシュメモリデバイスの任意の書き込み済みブロックのデータを、ユーザーアクセスへの応答とは別個に、乱数を用いて選んだ空きブロックに時折移動させ、しかる後に特定のブロックに書き込みと消去が集中することを防止するように上記移動元ブロックを消去する。
【００３４】
本発明によれば、制御部の制御の下、ユーザーアクセスへの応答とは別個に、フラッシュメモリデバイスの任意の書き込み済みブロックのデータが、乱数を用いて選んだ空きブロックに時折移動され、しかる後に移動元ブロックが消去される。
【発明の効果】
【００３５】
本発明によれば、循環書き込みを効果的に解消でき、各ブロックの書き換え回数の上限を統計的に管理することが可能になる。これによって記憶装置やシステムに保存されたデータの信頼性を大幅に向上させることが可能である。
【発明を実施するための最良の形態】
【００３６】
以下、本発明の実施形態を図面に関連付けて説明する。
【００３７】
図４は、本発明の実施形態に係る記憶装置を採用したコンピュータシステムの構成例を示す図である。
【００３８】
本コンピュータシステムＣＯＭＳＹＳは、記憶装置３０、およびホストシステム（処理装置）５０を主構成要素として有している。
記憶装置３０は、インターフェース回路（Ｉ／Ｆ）３１、制御回路３２、内部バス３３、ページバッファ３４、ＮＡＮＤ型フラッシュメモリ３５，３６、制御回路３７、およびメモリバス３８を有する。
制御回路３２は、第２メモリとしてのＲＡＭ４０を含み、ＲＡＭ４０にはワーキングエリア４１が設けられ、アドレス変換テーブル４２、検索テーブル４３、無効カウンタテーブル４４、ライトポインタ４５、および周回カウンタ４６が構築されている。
ホストシステム５０は、ＣＰＵ、ＲＡＭ、ＲＯＭ、システムバス等を含んで構成されている。
【００３９】
記憶装置３０の内部においては、３２ビットのメモリバス３８に、１６ビットの入出力を持つ２チップの８ＧｂＮＡＮＤ型フラッシュメモリ（フラッシュメモリチップという場合もある）３５，３６が並列接続されている。２つのチップは読み出しや書き込みにおいて、同時並列にアクセスされる。すなわち、メモリバス３８は１６ビットバスを２チャンネル備えた構成となっている。各々のフラッシュメモリは書き込みや読み出しのアクセスをたとえば４ｋＢのページ単位で行う。したがって、実ページサイズとしては８ｋＢが一括アクセスされることになる。
ページバッファ３４はアクセスされたページ領域のデータを一時記憶する。フラッシュメモリ３５，３６とページバッファ３４との間のデータの送受は、制御回路３７で制御されている。
さらに、制御回路３７は、必要に応じて転送データにＥＣＣ符号化によるエラー補正を施す。両フラッシュメモリ３５，３６は、ページバッファ３４を介して記憶装置の内部バス３３との間でデータを入出力する。
すなわち、ページバッファ３４、ＮＡＮＤ型フラッシュメモリ３５，３６、制御回路３７、およびメモリバス３８の回路群は実質的に一つのフラッシュメモリデバイス（フラッシュメモリモジュールという場合もある）３９を構成し、記憶装置３０の内部バス３３に接続されているとみなすことができる。その総容量は１６Ｇｂ（２ＧＢ）であり、実ページサイズは８ｋＢである。すなわち装置内には２５６ｋ個のページデータが格納される。
【００４０】
さらに、内部バス３３にはインターフェース回路３１、および制御回路３２が接続されている。
インターフェース回路３１は、ＡＴＡやＰＣＩエクスプレス等の規格に従ってホストシステム５０との間で、データやコマンドの送受を行う。
制御回路３２はＣＰＵを内蔵し、制御プログラムに従って、記憶装置の内部においてページバッファ３４とインターフェース回路３１の間のデータの送受を管理する。
制御回路３２に内蔵されたＲＡＭ４０には、制御プログラムを実行するためのコードエリアやワーキングエリア４１が設けられており、さらにページ単位の仮想アドレスを管理するアドレス変換テーブル４２、正常な空きブロックを検索する検索テーブル４３、各ブロックの無効ページ数を管理する無効カウンタテーブル４４、ライトポインタ４５、およびライトポインタ４５の周回カウンタ４６等が構築されている。
【００４１】
本コンピュータシステムＣＯＭＳＹＳにおいては、ホストシステム５０は内蔵するＣＰＵによって制御され、アプリケーションやオペレーティングシステム（ＯＳ）の要求に応じて、記憶装置３０を介して、フラッシュメモリデバイス３９にユーザーデータを保存する。
制御回路３２はその間のデータ授受に介在し、アドレス変換テーブル４２等を用いてアドレス変換を伴うアクセス管理を実施する。
【００４２】
記憶装置３０は、ハードディスクと同様に５１２バイト（Ｂｙｔｅ）のセクタをアクセス単位とする。
記憶装置内部では簡単のため、１６進数のアドレスが次のように割り振られるとする。
たとえば、外部入力アドレスが“０ｘ０５５０２Ｃ”であった場合、上位２４ビットの“０ｘ０５５０２”はページアドレスであり、最大１Ｍページを管理できる。一方、下位４ビットの“０ｘＣ”はページ領域内のセクタドレスであり、１ページ中には１６のセクタが含まれる。
本記憶装置はページバッファ３４内のデータを選択することで、１セクタ単位のランダムアクセスが可能である。
【００４３】
以下、このような記憶装置３０の内部動作を説明する。
本実施形態ではページ単位の仮想アドレス管理が採用されている。
【００４４】
図５は、アドレス変換テーブル４２、検索テーブル４３、および無効カウンタテーブル４４の構成例を示す図である。また、図６は、そのようなテーブルを使用したデータクセスのフローを示す図である。記憶装置３０の内部におけるフラッシュメモリデバイス３９への具体的アクセスは、図６のフロー図に従って、以下のような手順で実行される。
【００４５】
＜データの読み出し動作＞
ステップＳＴ１１：
ホストシステム５０からユーザーデータのアクセスコマンドとともに“０ｘ００５５０２Ｃ”のセクタドレスが入力されると、制御回路３２は論理ページアドレス部（ＬＰＡ）“０ｘ００５５０２”をインデックスにアドレス変換テーブル４２を参照し、アクセス対象たるユーザーデータの物理ページアドレスＰＰＡ“０ｘ００６０Ｂ０”を取得する。
【００４６】
ステップＳＴ１２：
上記物理ページアドレスをもって、フラッシュメモリデバイス３９がアクセスされ、ページバッファ３４内にユーザーデータが格納されたページグループが読み出される。その後セクタドレス“０ｘＣ”に相当する部分がページバッファ３４から選択的にホストに出力され、読み出し動作が完了する。
さらにデータの更新は以下のように実施する。同じ“０ｘ００５５０２Ｃ”のセクタを更新するとする。
【００４７】
＜データの更新（書き込み）動作＞
ステップＳＴ１１，ＳＴ１２：
読み出し時と同様に、フラッシュメモリデバイス３９より読み出した所望のデータをページバッファ３４に格納する。
【００４８】
ステップＳＴ１３：
ページバッファ上で所望のセクタ箇所を更新する。
【００４９】
ステップＳＴ１４：
更新したユーザーデータのフラッシュメモリデバイス３９への書き込み先として、ＲＡＭ４０内に常駐した検索テーブル４３およびライトポインタ４５から、適当なページ領域の物理ページアドレスＰＰＡが選択される。
【００５０】
以下のその手順の詳細を説明する。ここでは簡単のため、物理ページアドレスは、上位１６ビットの物理ブロックアドレス部（Ｐｈｉｓｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ  ：ＰＢＡ）と下位８ビットのページオフセット部よりなるとする。この時各消去ブロックは２５６ページ（２８）より構成される。
検索テーブル４３には、各ブロックごとにそれらが現在使用されているか、もしくは消去済みの空き状態であるかが、“Ｕｓｅｄ  Ｆｌａｇ”でマークされている。さらに欠陥ブロックの場合、“Ｄｅｆｅｃｔ  Ｆｌａｇ”が“１”となっている。
【００５１】
ライトポインタ４５は、まずその物理ブロックアドレス部のインクリメントに従って、検索テーブル４３のアドレス上を下位から上位に向けて良品の消去済みブロックを検索しつつ巡回する。一旦対象ブロックが検出されれば、検索テーブル４３の所定の“Ｕｓｅｄ  Ｆｌａｇ”に“１”が立ち、まずその先頭ページが書き込み先として選択される。
さらにここからはページオフセット部のインクリメントに従って、書き込み先のページが下位アドレスから順次選択されていく。選択がブロックの末尾に達したら、それ以降再び物理ブロックアドレス部のインクリメントに従って、次の未使用かつ良品のブロックの検索を進める。
このようにしてライトポインタ４５はフラッシュメモリデバイス３９のアドレス上を循環する。そして検索テーブル４３の末尾アドレスのブロックに達し、更にあるいはその末尾ページに達したら、周回カウンタ４６を一つインクリメントして再びその先頭アドレスに戻る。
【００５２】
ライトポインタ４５の値は現在“０ｘ００ＡＡ０１”であり、制御回路３２はまずユーザーデータの書き込み先として、それをインクリメントした物理ページアドレス“０ｘ００ＡＡ０２”を選択する。
【００５３】
ステップＳＴ１５：
上記物理ページアドレスをもって、フラッシュメモリデバイス３９がアクセスされ、ページバッファ３４内のユーザーデータがフラッシュメモリデバイス３９に一括書き込みされる。
この時同時に、ページ領域内の冗長部に、周回カウンタ４６のカウンタ値“０ｘ０００３５２”と、データの論理ページアドレス“０ｘ００５５０２”が記載される。なお、周回カウンタ４６の値の記載はタイムスタンプに相当し、これを参照することで各ページに記載されたデータの新旧を判別することが可能である。
書き込みが完了すると、アドレス変換テーブル４２が更新され、論理ページアドレスＬＰＡ“０ｘ００５５０２”に対応する物理ページアドレスＰＰＡは“０ｘ００ＡＡ０２”に更新される。
【００５４】
ステップＳＴ１６：
また、これに伴って旧物理ページアドレス“０ｘ００６０Ｂ０”に相当するページ領域は無効となる。そこで上記無効ページ発生に対応して、無効カウンタテーブル４４の、物理ブロックアドレス“０ｘ００６０”に対応するカウンタ値を“０ｘ１０”から“０ｘ１１”にインクリメントする。
【００５５】
ところで、上述の如き追記型書き込みを実施した場合、更新前のデータが格納されていた物理ページアドレス“０ｘ００６０Ｂ０”に相当するページ領域はアドレス変換テーブル４２の物理アドレスフィールドから削除され、外からアクセスできなくなる。すなわち無効化される。
しかし、それらにはデータが書き込まれており、そのままでは空き領域として使用することもできない。上述のような書き換えを何度も繰り返すと、多くの無効ページ領域が発生する。それらは再度空き領域として使用できるよう、消去して回復させる必要がある。またその場合、消去ブロック“０ｘ００６０”に残された他の有効データは退避させる必要がある。
【００５６】
このような回復処理は、たとえばまず対象ブロック内の有効データを、更新の際と同様に一旦ページバッファに読み出してから、他のブロックの空き領域に追記で書き込んでいき、それによって実質的な退避を行なえば良い。すなわち有効ページを仮更新することで、その元領域を全て無効化する。その後対象ブロックを消去することによって、回復処理が実施される。
【００５７】
図７（Ａ）〜（Ｃ）には消去ブロック５１，５２内部の有効データを退避し、無効ページ領域を実質的に回復させる手順を、概念的に図解している。
【００５８】
ステップＳＴ２１：
上述の如く追記による書き換えが進行し、消去ブロック５１、５２には、一度データが書き込まれた後、更新によって無効化されたページ領域群５６、５８が、有効なページ領域群５５、５７、５９と共存しているとする。
ここで有効ページ領域のデータを残しつつ、無効化領域を空き領域に回復させる必要がある。
一方、５３、５４は現在ライトポインタ４５によって選択されて、追記用の空き領域として使用している消去ブロックを示し、ページ領域６０まで書き込みがなされている。
【００５９】
ステップＳＴ２２：
有効なページ領域群５５、５７、５９のデータを消去ブロック５３、５４内の空きページ領域群６１、６２、６３に下詰めにして順番にコピーしていく。
一方、無効なページ領域群５６、５８はコピーしない。各ページの有効／無効の判定は、たとえばデータ書き込み時に冗長部に論理ページアドレスを記載しておき、それと物理ページアドレスとの対応が、アドレス変換テーブル４２と一致するか否かをチェックすることで実施する。
有効ページの場合、対象ページ内のデータ全体をページバッファ３４に読み込み、消去ブロック５３、５４に、ライトポインタ４５のインクリメントに従って書き込みを実施する。この際、ページの冗長領域には、通常のデータ書き込み時と同様に、論理アドレスと周回カウンタ４６のカウンタ値が記載される。
さらにアドレス変換テーブル４２を更新する。すなわち各々のページ領域の論理アドレスに対応する物理アドレスフィールドに、コピー先の物理ページアドレスを登録していく。またこの作業に伴って、元のページ領域５５、５７、５９は無効化される。したがって、各ページの処理ごとに、無効カウンタテーブル４４の該当ブロックのカウンタ値がインクリメントされる。
この操作は、すなわち有効ページ領域群５５、５７、５９を追記方式で書き換える作業に等しい。
実際には書き換えずコピーするのみであるが、この作業によって消去ブロック５１、５２内の全てのページは無効化され、有効ページ領域のデータは消去ブロック５３、５４に実質的に退避させられる。
【００６０】
ステップＳＴ２３：
消去ブロック５１、５２を消去する。これに伴って検索テーブル４３における該当ブロックの“Ｕｓｅｄ  Ｆｌａｇ”はゼロにリセットされる。また、消去カウンタテーブル４５における該当ブロックの消去カウンタ値がインクリメントされる。これによってその内部は全て空き領域となり、後の追記に使用することが可能になる。
これをもって無効領域５６、５８は実効的に回復される。
【００６１】
このように無効ページ領域の回復処理は、各有効ページ領域のコピーによる退避処理と、元消去ブロックの消去よりなる。また、回復対象となる消去ブロック内の有効ページに通常の更新処理と同様の手順でダミーの更新を施し、それをもってページの退避を実行すれば、回復処理時の有効ページ退避を通常の書き込みアルゴリズムに統合させることが可能である。この場合、制御が容易になるばかりではなく、フラッシュメモリへの書き込みの均一化等、書き込み時の信頼性向上のための各種工夫を回復処理にも適用することができ、記憶装置の総合的な信頼性を向上させることができる。
【００６２】
ところで、上記回復処理は、記憶装置の待機時やシステムのアイドル時に実施することで、ユーザーからその存在を隠蔽できる。この場合たとえば、待機状態に入ると自動的に回復処理を実施する機能を記憶装置３０に設けたり、またはシステムがアイドル状態になるとホストシステム５０が回復処理用のコマンドを送信し、それに応じて記憶装置３０が回復処理を実行する。
この際、回復処理の対象ブロックを選定する機能が必要となるが、これはたとえば無効カウンタテーブル４４の一部または全部をスキャンし、無効ページの多いブロックを検索してそれを回復対象とすることで、効率の良い回復処理が実行できる。
【００６３】
ただし、このようなシステムは、図３に示したように、小さな物理領域内での循環書き込みに陥る可能性がある。そこで、本実施形態では、循環書き込みに陥った領域内の各ブロックに対し、一定の書き換え回数以内で循環領域から離脱させるような仕組みを提供する。これは一種の攪拌操作とみなすことができる。
【００６４】
図８は、本実施形態における攪拌操作の概念図である。以下、図８等に関連付けて攪拌操作について説明する。なお、図８においては、理解を容易にするために、図３と同一構成部分は同一符号を付している。
【００６５】
ステップＳＴ３１：
図３におけるステップＳＴ１のように、領域２２および２４に循環的に書き込みが実施されている。論理アドレス上に確保されたＷＥＢキャッシュ領域に繰り返される更新に従って、その中に書き込まれたデータは順次無効化され、さらに消去が実施される。すなわち上記循環領域内には、旧データが格納された無効ページ（図中、黒ぬりの領域）と現在のＷＥＢキャッシュ内容が格納された有効ページ（図中、ハッチングを付加した領域）、さらに新規データが格納されるべき消去済みページ（図中、空白の領域）が混在している。
なお、消去はブロック単位で実施されるので、現在書き込み中のブロック以外の消去済みページは、各々消去済みブロックとして存在する。
【００６６】
ステップＳＴ３２：
ここで書き込み済み領域から、たとえば攪拌操作ごとにインクリメントされる専用アドレスポインタに従って、書き込み済みブロック２５がデータの移動元として選択される。さらに上記循環領域中の消去済みブロックから、乱数を用いてブロック２６データの移動先として選択される。そして、ブロック２５のデータがブロック２６に、図７に示したダミー更新と同様の手順で移動させられる。
【００６７】
ステップＳＴ３３：
最後にデータ移動元たるブロック２５が消去される。この時点で繰り返し書き込みがなされていた循環領域からブロック２６が離脱し、代わりにブロック２５がそこに加わることになる。
【００６８】
図９は、本実施形態に係る攪拌操作の手順を示すフロー図である。
【００６９】
ステップＳＴ４１：
ユーザーコマンドへの応答に従って、フラッシュメモリへのデータ書き込みが実施される。なお、フラッシュメモリに１ブロック分の書き込みがなされるごとにブロックカウンタがインクリメントされていく。
【００７０】
ステップＳＴ４２：
たとえば上記ブロックカウンタ値が１２８以上になると、以下の攪拌操作に移行する。
【００７１】
ステップＳＴ４３：
専用のアドレスポインタのインクリメントに従って、図５の検索テーブル４３から使用済みブロックが検索され、データの移動元ブロックとして選択される。
【００７２】
ステップＳＴ４４：
乱数で発生させたブロックアドレスから、図５の検索テーブル４３より直近の空きブロックが検索され、データの移動先ブロックとして選択される。
【００７３】
ステップＳＴ４５：
移動元ブロックから移動先ブロックに、たとえば図７に示したダミー更新と同様の手順でデータが移動させられる。なお、移動したデータは、対応する論理アドレスは変わらないが、物理アドレスとなる格納場所が変化する。したがって図５のアドレス変換テーブル４２にその更新が反映される必要がある。
【００７４】
ステップＳＴ４６：
移動元ブロックが消去される。ブロックカウンタはクリアされ、通常の書き込みに戻る。
【００７５】
なお、このような攪拌作業はユーザーアクセスへの応答とは別個の作業追加となり、たとえば１２８ブロックに対して１ブロック分のデータ読み出しと書き込みが必要となるが、実施頻度が少ない上、待機時に実施することもできるので、性能には殆ど影響しない。
書き込みブロック数のカウントについては主としてユーザーデータの書き込みに応じて行うが、無効領域の回復処理や管理用データの保存に伴うフラッシュメモリへのデータ書き込みについてもカウントに入れて良い。
以下にこのような攪拌操作の効果を説明する。
【００７６】
たとえば、８０ブロックの領域間で循環書き込みがなされているとする。一回の攪拌操作で離脱するのは１ブロックであり、平均的には凡そ８０回の攪拌操作で離脱することが見込まれる。
ここで１２８ブロックの書き込みごとに一回の攪拌操作が成されるとすれば、この間１２８ｘ８０ブロックの書き込みがストレージに実施される。これが８０ブロックの領域内に循環的に書き込まれるので、上記ブロックには離脱前に１２８回の書き換え、消去が実施されることになる。
【００７７】
このように、循環書き込みの状態に陥ったブロックがそこから離脱するまでに受ける書き換え、消去の回数は、平均値としてはほぼ攪拌操作の実行頻度に従う。一方、循環領域に存在するブロック数自体への依存度は非常に小さい。
そこで、攪拌操作の頻度を適切に設定し、これによって書き換え寿命に対して十分小さい書き換え回数で、各ブロックを循環状態から離脱させることができれば、ストレージの寿命を保証することが可能になる。
【００７８】
ここで重要なのは、循環領域から離脱させるブロックの選択に偏りが出ないことである。たとえば特定の物理アドレスが何らかの規則性を持って高頻度で選択されるようなことがあると、その一方でいつまでも循環書き込みから離脱できないブロックが発生することになる。このような選択の偏りがあると、ばらつきの問題が深刻となって、ストレージ全域に対する書き換え寿命の保証は困難になる。
逆にこのような偏りを排除すれば、消去回数の分布は統計的に予測でき、信頼性の保証が可能になる。
【００７９】
すなわち本実施形態のポイントは、図８のステップＳＴ３２の工程において、データ移動先たる空きブロックの選択に偏りが発生するのを排除することであり、具体的にはその選択に乱数を使用する。
たとえば、全物理アドレスの範囲で均一に乱数を発生させ、物理アドレスがその値か、あるいはその上位で最も近接している空きブロックを、データの移動先として選択する。
あるいは空きブロックの総数をカウントしておき、その範囲内で均一に乱数を発生させ、図５に示した検索テーブル４３の先頭からＵｓｅｄのフラグをスキャンして、その値が“０”のフィールドが乱数値分だけカウントされたところを対象ブロックとして選択すれば、より厳密に偏りのない選択が実現できる。
完全な乱数による選択が実施された場合、各ブロックが循環領域から離脱するまでになされる攪拌操作回数及び消去回数のばらつきは、二項分布で予測できる。
【００８０】
また、この際データの移動元となる書き込み済みブロックの選択にも偏りが出ないことが望ましい。ここに偏りがあると、特定のブロックが何度も繰り返し循環書き込みに入る可能性が生じ、消去回数の累計値が大きくばらつく原因となる。
ただし、書き換え寿命が問題になるのは非常に小さな領域内で書き込みの循環が発生するケースであり、このような状況では、それ以外の領域から選ばれるデータの移動元ブロックは、殆どアドレス領域全体（たとえば全体の９９％）を対象に選択されることになる。
したがって、各攪拌操作において個々のブロックが選択される確率は非常に小さく、各ブロックはストレージの寿命中に、ごく僅かな回数（たとえば１０回）しか選択されない。この選択に乱数を使うと１回も選択されないブロックが発生する等、均一な選択条件の下でも統計的なばらつきそのものが、かなり大きくなってしまう。
したがって、データの移動先ブロックについては、乱数を使用するより、単にアドレス順に使用済みブロックを検索し、順次選択を行なった方が、簡単で効果的である。この際は攪拌操作の度に、ユーザーデータ（ＯＳやプログラムを含む）の格納領域となっている全物理アドレスを特定の順番で循環するように専用のポインタを進め、それに従って使用済みブロックを順次検出して選択していく。
【００８１】
図１０（Ａ），（Ｂ）は、本実施形態の効果を、簡単なシミュレーションで定量的に見積もった結果を示す図である。
【００８２】
８ｋブロックよりなるストレージにおいて、８０ブロックの領域内で循環書き込みが発生したケースを想定した。簡単のためデータはブロック単位の塊で書き込まれ、更新されるとし、無効化されたブロックは即座に消去されるとした。ここにライトポインタのインクリメントに従って１０Ｍブロック分のデータが書き込まれた際の、ブロック消去回数の分布が示されている。
【００８３】
攪拌操作を全く行なわない場合は、８０ブロックのみにそのまま１０Ｍブロックが循環書き込みされるので、その８０ブロックには各々１２，５０００回の消去がなされ、他のブロックは一切消去されない。
図９の例においては、これに対して１２８ブロックの書き込みごとに、２種類の方法で攪拌操作を実施している。
攪拌操作では、まず循環領域以外からデータの移動元ブロックが、循環領域からデータの移動先ブロックが選択される。データ移動の後、前者は消去されて新たに循環領域に入り、後者は循環領域から離脱する。
【００８４】
図１０（Ａ）のケースでは、攪拌操作の際、データの移動先たる空きブロックの選択は、通常の書き込みや回復処理の際と全く同様に図５のライトポインタ４５に従っており、その直後の空きブロックにそのまま移動データの書き込みを行っている。
一方、図１０（Ｂ）のケースでは、全物理アドレス領域の範囲で乱数を発生させ、それ以降で最も近接した空きブロックを、データ移動先として選択している。
なお、データの移動元についてはアドレス順に使用済みブロックを検索して選択している。
いずれのケースも攪拌効果が現われているが、図１０（Ａ）では、プロファイルに変則的なばらつきがあるのに対し、図１０（Ｂ）のプロファイルは際立ってシャープであり、どのブロックの消去回数も１０００回〜１５００回の範囲に入っている。すなわち全ブロックに均一に書き込んだ理想ケース（１２５０回）に非常に近い状態になっていることが解る。
図１０（Ａ）の変則的ばらつきは、ブロック選択をライトポインタの成り行きにまかせたことで、その選択に規則性に起因する偏りが生じたことによる。図１０（Ｂ）のようにブロック選択に乱数を導入し、外部要因等による規則性を完全に排除することで、消去分布を統計的に制御することが可能になった。
【００８５】
なお、攪拌操作の実施時期について、上記例では１２８ブロックの書き込みが実施されるごととしたが、たとえば図５のライトポインタ４５が一巡するごと、あるいは特定ブロック数進行するごとに実施する等、各種バリエーションが考えられる。長期的な使用の中で一定の頻度が保証されていれば良く、実施基準にゆらぎや曖昧さがあっても良い。
【００８６】
またデータの移動元をアドレス順に選択する場合も、さらにデータの新旧に配慮したバリエーションが考えられる。すなわちたとえば攪拌操作ごとに以下の操作を行なう。
まず、アドレス順に８個ずつの使用済みブロックを候補として選択する。次に、その先頭ページの予備領域を検査することで、そこに記載されたタイムスタンプを検査する。タイムスタンプにはたとえば図５の周回カウンタ４６の値が使用される。その中で最も更新の古い（記載された周回カウンタ値の小さい）データが、データ移動元ブロックとして選択される。
【００８７】
ところでここまでは、独立した記憶装置の内部に、アドレス変換等各種制御を実装する場合について説明してきた。しかしアドレス変換テーブルの管理と関連処理を、ホスト側の制御で実施することも可能である。このような形態は、特にフラッシュメモリが内部に組み込まれた、安価なコンピュータシステムに適している。そのようなコンピュータシステムの例を図１１に示す。
【００８８】
図１１は、アドレス変換テーブルの管理と関連処理を、ホスト側の制御で実施するコンピュータシステムの構成例を示す図である。
【００８９】
この場合、ホストシステム８０ｂは、ＣＰＵ８１ｂとシステムメモリ８２ｂを含む。
ＣＰＵ８１ｂは３２ビットのシステムバス８３ｂを介してシステムメモリであるＲＡＭ８２ｂと接続されている。さらに、システムバス８３ｂにはブリッジ回路８４ｂが接続されており、ブリッジ回路８４ｂに繋がる３２ビットのデータバス３８ｂには、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ３５ｂ，３６ｂが並列接続されている。２つのチップは読み出しや書き込みにおいて、同時並列にアクセスされる。アクセスされたページ領域を一時記憶するページバッファ３４ｂは、ブリッジ回路８４ｂに内蔵されている。
【００９０】
ブリッジ回路８４ｂは、ＣＰＵ８１ｂから各種コマンドを受け取り、フラッシュメモリ３５ｂ、３６ｂとＣＰＵ８１ｂまたはシステムメモリ８２ｂとの間のデータのやり取りを、ページバッファ３４ｂを用いて媒介する。また必要に応じて転送データにＥＣＣ符号化によるエラー補正を施す。
ブリッジ回路８４ｂが受け取るコマンドは、たとえばフラッシュメモリ３５ｂ、３６ｂの所定のページへのアクセスの他、同フラッシュメモリの所定ブロックの消去、および所定ページの指定アドレスへのコピー、フラッシュメモリのリセット等である。
【００９１】
一方、システムメモリ８２ｂ内には上記フラッシュ記憶システムを制御するためのドライバ８６ｂが常駐している。このドライバ８６ｂは、ＯＳやアプリケーションからの記憶装置へのアクセスを受け、同じメモリ中に構成されたアドレス変換テーブル４２ｂを参照してアクセス時のページアドレスを変換する。
また、データ更新時には検索テーブル４３ｂとライトポインタ４５ｂを参照して書き込み先ページアドレスを決定し、更新用データとともにフラッシュメモリへの書き込み命令をブリッジ回路８４ｂに送信する。あるいは更新され無効化されたページが発生すると、それを無効カウンタテーブル４４ｂに反映させる。
【００９２】
すなわちこのようなケースでは、ＣＰＵ８１ｂとシステムメモリ８２ｂよりなるホストシステム８５ｂ自体が図４における制御回路３２の役割を代替し、アドレス変換テーブルの管理と無効ページ領域の回復処理を実施する。すなわちドライバ８６ｂは各種テーブルやポインタを使用し、ＯＳやアプリケーションから論理アドレスを受け、物理アドレスＰＰＡを生成してブリッジ回路８４ｂにコマンドを送信することで、フラッシュメモリ３５ｂ、３６ｂの各種アクセスを実施する。
【００９３】
なお、これらアドレス変換テーブル４２ｂ、検索テーブル４３ｂ、無効カウンタテーブル４４ｂ、およびライトポインタ４５ｂには、たとえば図５に示したテーブル４２、４３、４４、よびポインタ４５と同様のものが使用される。
【００９４】
このようなシステムにおいても本発明の概念は同様に適用することが可能である。すなわちドライバ８６ｂは、アプリケーションからのフラッシュメモリへのアクセス要求への応答とは別個に、フラッシュメモリ３５ｂ、３６ｂに特定ブロック数分のデータを書き込むごとに、データの移動元たる使用済みブロックをたとえばアドレス順で、データの移動先たる消去済みブロックを乱数を用いて選択し、データの移動を実施する。
【図面の簡単な説明】
【００９５】
【図１】ＮＡＮＤ型フラッシュメモリの内部構成例を示す図である。
【図２】フラッシュメモリにおける書き込みとマッピング手順を説明するための図である。
【図３】集中書き換えの一例を示す図である。
【図４】本発明の実施形態に係る記憶装置を採用したコンピュータシステムの構成例を示す図である。
【図５】アドレス変換テーブル、検索テーブル、および無効カウンタテーブルの構成例を示す図である。
【図６】記憶装置の内部におけるフラッシュメモリデバイスへの具体的アクセス処理を説明するためのフローチャートである。
【図７】消去ブロック内部の有効データを退避し、無効ページ領域を実質的に回復させる手順を概念的に示す図である。
【図８】本実施形態における攪拌操作の概念図である。
【図９】本実施形態に係る攪拌操作の手順を示すフロー図である。
【図１０】本実施形態の効果を、簡単なシミュレーションで定量的に見積もった結果を示す図である。
【図１１】アドレス変換テーブルの管理と関連処理を、ホスト側の制御で実施するコンピュータシステムの構成例を示す図である。
【符号の説明】
【００９６】
３０・・・記憶装置、３１・・・インターフェース回路、３２・・・制御回路、３３・・・内部バス、３４・・・ページバッファ、３５，３６・・・ＮＡＮＤ型フラッシュメモリ、３７・・・制御回路、３８・・・メモリバス、３９・・・フラッシュメモリデバイス（フラッシュメモリモジュール）、４０・・・ＲＡＭ、４１・・・ワーキングエリア、４２，４２ｂ・・・アドレス変換テーブル、４３，４３ｂ・・・、検索テーブル、４４，４４ｂ・・・無効カウンタテーブル、４５，４５ｂ・・・ライトカウンタ、４６，４６ｂ・・・周回カウンタ、５０，８０ｂ・・・ホストシステム。
【図１】
2008181203.tif 000003
【図２】
2008181203.tif 000004
【図３】
2008181203.tif 000005
【図４】
2008181203.tif 000006
【図５】
2008181203.tif 000007
【図６】
2008181203.tif 000008
【図７】
2008181203.tif 000009
【図８】
2008181203.tif 000010
【図９】
2008181203.tif 000011
【図１０】
2008181203.tif 000012
【図１１】
2008181203.tif 000013