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