(57)【特許請求の範囲】
【請求項１】
主記憶としてフラッシュメモリを有し、
上記フラッシュメモリにおける少なくとも一部領域の書き換えは、更新データを空き領域に追記し、元のデータを無効化する追記型の書き込みで実施され、
外部からアクセスの無い装置の待機時に、上記無効化領域を自動的に消去して空き領域に回復する回復処理を行う機能を有し、
当該記憶装置に格納されたデータに外部からアクセスが生じた場合に、上記回復処理を実行中であれば、当該回復処理を中断し、アクセスへの応答処理を行い、当該アクセスへの応答処理が終了し、待機状態になってから上記回復処理を再開する機能を有し、
上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、
上記回復処理は、回復対象たる無効ページ領域を含む消去ブロックに残存する有効ページ領域のデータを、他の消去ブロックの消去済みの空き領域に退避する処理を含み、
消去対象として選択されたブロックに対して、
別途システム内のメモリ上に設けたフラグを用いて有効ページを判定する処理、およびページ書き込み時に同時記載された論理アドレスと物理アドレスの対応がアドレス管理テーブルと照合しているか否かから有効ページを判定する処理により有効ページを判定し、その退避を行う
記憶装置。
【請求項２】
待機時にブロックを検査し、
同一ブロック内に一定数以上の無効ページ領域が存在する場合、空き領域に対して、一定割合以上の無効ページ領域が存在する場合、および空き領域が全体の容量の一定割合以下である場合のいずれかを含む場合に、回復処理の実行を判定する
請求項１記載の記憶装置。
【請求項３】
上記回復処理を中断する場合、回復処理の進捗情報を装置内のレジスタもしくはメモリに保存し、上記アクセスが終了すると当該進捗情報を参照して回復処理を再開する機能を有する
請求項１または２記載の記憶装置。
【請求項４】
内部に処理ユニットを有し、待機時に当該処理ユニットは上記回復処理を実施し、外部からアクセスが生じると当該処理ユニットに割り込みが発生し、当該割り込みイベントに従って上記処理ユニットは回復処理を中断し、アクセス処理を開始する
請求項３記載の記憶装置。
【請求項５】
上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、
ひとつの消去ブロック内に存在する一つまたは複数の無効ページ領域の回復処理は、複数の工程に分割され、外部からアクセスの無い記憶装置の待機時に、その一部が実行される
請求項１から４のいずれか一に記載の記憶装置。
【請求項６】
主記憶としてフラッシュメモリを有し、
上記フラッシュメモリにおける少なくとも一部領域の書き換えは、更新データを空き領域に追記し、元のデータを無効化する追記型の書き込みで実施され、
外部から所定のコマンドに応じて、上記無効化領域を消去して空き領域に回復する処理を実行する機能を有し、
当該記憶装置に格納されたデータに外部からアクセスコマンドが生じた場合に、上記回復処理を実行中であれば、当該回復処理を中断し、アクセスへの応答処理を行い、当該アクセスへの応答処理が終了し、待機状態になってから上記回復処理を再開する機能を有し、
上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、
上記回復処理は、回復対象たる無効ページ領域を含む消去ブロックに残存する有効ページ領域のデータを、他の消去ブロックの消去済みの空き領域に退避する処理を含み、
消去対象として選択されたブロックに対して、
別途システム内のメモリ上に設けたフラグを用いて有効ページを判定する処理、およびページ書き込み時に同時記載された論理アドレスと物理アドレスの対応がアドレス管理テーブルと照合しているか否かから有効ページを判定する処理により有効ページを判定し、その退避を行う
記憶装置。
【請求項７】
外部からの所定のコマンドに応じて、上記回復処理を中断する際、回復処理の進捗情報を装置内のレジスタもしくはメモリに保存し、再度回復処理の実行コマンドを受けると、当該進捗情報を参照して回復処理を再開する機能を有する
請求項６記載の記憶装置。
【請求項８】
上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、
ひとつの消去ブロック内に存在する一つまたは複数の無効ページ領域の回復処理は、複数の工程に分割され、外部から所定のコマンドに応じて、その一部が実行される
請求項６または７記載の記憶装置。
【請求項９】
主記憶としてのフラッシュメモリと、
キャッシュメモリと、を有し、
上記フラッシュメモリにおける少なくとも一部領域の書き換えは、更新データを空き領域に追記し、元のデータを無効化する追記型の書き込みで実施され、
外部からのアクセスがキャッシュメモリにヒットし、キャッシュへのアクセスが実施される間に、上記無効化データを消去して空き領域に回復させる処理の少なくとも一部を並行して実施する機能を有し、
外部からのアクセスがキャッシュメモリにミスヒットした場合に、上記回復処理を実行中であれば、当該回復処理を中断し、アクセスへの応答処理を行い、当該アクセスへの応答処理が終了し、外部からのアクセスがキャッシュメモリにヒットしたときまたは待機状態になってから上記回復処理を再開する機能を有し、
上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、
上記回復処理は、回復対象たる無効ページ領域を含む消去ブロックに残存する有効ページ領域のデータを、他の消去ブロックの消去済みの空き領域に退避する処理を含み、
消去対象として選択されたブロックに対して、
別途システム内のメモリ上に設けたフラグを用いて有効ページを判定する処理、およびページ書き込み時に同時記載された論理アドレスと物理アドレスの対応がアドレス管理テーブルと照合しているか否かから有効ページを判定する処理により有効ページを判定し、その退避を行う
記憶装置。
【請求項１０】
上記回復処理を中断する場合、回復処理の進捗情報を装置内のレジスタもしくはメモリに保存し、上記アクセスが終了すると当該進捗情報を参照して回復処理を再開する機能を有する
請求項９記載の記憶装置。
【請求項１１】
上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、
ひとつの消去ブロック内に存在する一つまたは複数の無効ページ領域の回復処理は、複数の工程に分割され、外部からのアクセスがキャッシュメモリにヒットしてキャッシュへのアクセスが実施される間に、その一部が実行される
請求項９または１０に記載の記憶装置。
【請求項１２】
制御回路を有し、
上記フラッシュメモリは、一括消去単位である消去ブロックを有し、各消去ブロックは複数のデータ領域を含み、
上記制御回路は、消去ブロックの消去を実行する前に、各データ領域ごとに、少なくとも領域の一部を読み出し、当該読み出した値から当該データ領域に有効なデータが記録されているか否かを判定し、判定の結果、有効なデータが記録されている場合に、当該データ領域のデータを他の消去ブロックにコピーする
請求項１から１１のいずれか一に記載の記憶装置。
【請求項１３】
ホストコンピュータと、
主記憶としてフラッシュメモリを含み、上記ホストコンピュータで扱う諸データを記憶するための不揮発性データストレージと、を有し、
上記フラッシュメモリにおける少なくとも一部領域の書き換えは、更新データを空き領域に追記し、元のデータを無効化する追記型の書き込みで実施され、
上記無効化領域を消去して空き領域に回復させる処理が、上記データストレージに対してそれ以外のデータ処理要求の無い待機時に実施され、
前記データストレージに対してデータ処理要求が生じた場合に、上記回復処理を実行中であれば、当該回復処理を中断し、アクセスへの応答処理を行い、当該アクセスへの応答処理が終了し、待機状態になってから上記回復処理を再開する機能を有し、
上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、
上記回復処理は、回復対象たる無効ページ領域を含む消去ブロックに残存する有効ページ領域のデータを、他の消去ブロックの消去済みの空き領域に退避する処理を含み、
消去対象として選択されたブロックに対して、
別途システム内のメモリ上に設けたフラグを用いて有効ページを判定する処理、およびページ書き込み時に同時記載された論理アドレスと物理アドレスの対応がアドレス管理テーブルと照合しているか否かから有効ページを判定する処理により有効ページを判定し、その退避を行う
コンピュータシステム。
【請求項１４】
上記ホストコンピュータにおいて、データストレージへのデータアクセスの要求が生じた場合に、上記回復処理を実行中であれば、当該回復処理を一時中断し、当該一時中断する際、回復処理の進捗情報をコンピュータシステム内部のいずれかのレジスタまたはメモリ内に保管し、再度回復処理を実行する際には当該進捗情報を参照して処理を再開、継続する
請求項１３記載のコンピュータシステム。
【請求項１５】
上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、
ひとつの消去ブロック内に存在する一つまたは複数の無効ページ領域の回復処理は、複数の工程に分割され、上記データストレージに対してそれ以外のデータ処理要求の無い、待機時にその一部が実施される
請求項１４記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリを含む記憶装置およびそれを備えたコンピュータシステム、並びに記憶システムに関するものであり、特にフラッシュメモリを含む記憶装置におけるデータ転送の高速化に関わるものである。
【背景技術】
【０００２】
近年、デジタルスチルカメラやモバイルコンピュータ機器の記憶媒体として、フラッシュメモリが注目されている。
【０００３】
フラッシュメモリは、トンネリングやホットエレクトロン加速を用いて、電子にゲート絶縁膜を通過させ、それらを浮遊ゲートやトラップ層に注入し、セルトランジスタの閾値を変化させることでデータを記憶させる半導体メモリである。積層ゲート構造やＭＮＯＳ構造等を用いたトランジスタ１つのみでメモリセルを構成できるため、安価かつ大容量のメモリを実現できる。
その代表例として、ＮＡＮＤ型フラッシュメモリが挙げられる。
【０００４】
図１は、ＮＡＮＤ型フラッシュメモリの内部構成例を示す図である。
図１のＮＡＮＤ型フラッシュメモリは、ビット線ＢＬ１〜ＢＬｎに接続された複数のメモリユニット１−１〜１−ｎがアレイ状（縦横）に配列されている。
たとえば、選択用トランジスタ２のゲートが選択ゲート線ＳＬ１に接続され、選択用トランジスタ３のゲートが選択ゲート線ＳＬ２に接続されている。また、各メモリセルＮ０〜Ｎ１５のゲートがワード線ＷＬ０〜ＷＬ１５に接続されている。
【０００５】
各メモリセルＮ０〜Ｎ１５は積層ゲート構造を持ち、浮遊ゲートへの電荷蓄積量に従ってデータを記憶する。すなわち、浮遊ゲートに多くの電子が蓄積されていると、トランジスタの閾値が上昇するので、チャージされたビット線ＢＬ１〜ＢＬｎからのメモリユニット１（−１〜−ｎ）への電流貫通の有無を、センスアンプ等を含むアクセス回路４で検出してデータ判定を行う。
【０００６】
このようなＮＡＮＤ型フラッシュメモリは、メモリセル毎にビット線へのコンタクト領域を設ける必要もないので、特に大容量で安価な記憶装置の媒体に適している。
【０００７】
ところで、一般にフラッシュメモリのプログラム速度は非常に遅く、セルあたり数百μ秒を必要とする。またデータの上書きはできないので、プログラムに先立って消去を行う必要があり、これには数ミリ（ｍ）秒もの時間がかかる。このような問題に対しては、多くのメモリセルを並列処理することで対処している。
【０００８】
すなわち、たとえば同一ワード線ＷＬ０に接続され、ページ単位を成すメモリセル群５を、同時一括に書き込み、さらに互いにメモリユニットを共有するページ群で構成されるセルブロック６を全て一括で消去することにより、プログラムの転送速度を向上させている。
【０００９】
具体的には、たとえば非特許文献１には１ＧｂのＮＡＮＤ型フラッシュメモリが掲載されており、ページサイズを２ｋバイト、消去ブロックサイズを１２８ｋＢとしている。すなわち、一つのメモリアレイ内で１２８ｋバイトのメモリセル群を並列消去し、そこにメモリセルを２ｋバイト毎に並列でプログラムしていくことによって、１０ＭＢ／ｓのプログラム転送速度を実現している。
【００１０】
また、近年フラッシュメモリはさらに多値化や微細化が進んでおり、それに伴う信号量の低下に対処するため、より非選択セルへの悪影響の少ない書き込み手法が検討され、実施されている。
【００１１】
たとえばＮＡＮＤ型フラッシュにおいては、消去ブロック内のページの書き込み順にも制限をつけたものが主流になりつつある。
特許文献１等にはその一つとしてローカルセルフブースト（Ｌｏｃａｌ  Ｓｅｌｆ−Ｂｏｏｓｔ）と呼ばれる手法を用いた書き込み手順が記載されている。
図１のＮＡＮＤ型フラッシュメモリにおいて、そのような書き込みの例を以下に説明する。
【００１２】
たとえば、メモリセルＮ１に書き込みを行い、その浮遊ゲートに電子を注入する場合、まず、メモリセルＮ１を挟む前後のワード線ＷＬ０，ＷＬ２をそれぞれ０Ｖにし、さらに選択用トランジスタ２をオンし、選択用トランジスタ３をオフにする。ここでビット線ＢＬ１を０Ｖ、書き込みを行いたくない隣接ビット線ＢＬ２を３Ｖとして、選択ワード線ＷＬ１を２０Ｖに、それ以外の全ワード線ＷＬ３〜ＷＬ１５を１０Ｖに持ち上げる。
このような書き込み手順を用いると、０Ｖのワード線ＷＬ０，ＷＬ２にはさまれ、かつ非選択ビット線に繋がるノードは他のノードから切り離され、ワード線ＷＬ１からのカップリングを受けて１０Ｖ程度まで電位が上昇する。
一方、選択されたメモリセルＮ１については、隣接したセルトランジスタＮ０がディプレッション状態の時に限って、ビット線ＢＬ１に印加された０ＶがセルトランジスタＮ１のチャンネルに伝達され、書き込みが実施される。
すなわち、上のような書き込み手法を用いる場合、書き込みを実施するセルのビット線側の隣接セルは常に消去され、ディプレッション状態に成っている必要がある。そのため、ブロック全体を消去した後、書き込みはメモリセルＮ１５、Ｎ１４、Ｎ１３、・・・、Ｎ０と順になされることが必須の条件となる。
【００１３】
このように近年の大容量フラッシュメモリは、そのページ書き込みにおいても、ランダムな書き込みは許されず、ブロック中の上位アドレスから下位アドレスにむけて順次書き込みを行うことが必須とされる傾向にある。
【非特許文献１】ＩＳＳＣＣ２００２予稿集のｐ１０６、セッション６．４
【特許文献１】特開２００２−２６０３９０号公報
【特許文献２】特開平８−３２８７６２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
近年、ハードディスクの消費電力の大きさや、シーク時間の長さ、耐衝撃性や携帯性等の問題を解消すべく、フラッシュメモリにその代替が期待されている。
しかし上述の如く、フラッシュメモリにはアクセス単位を大きくしないと高速化できないという欠点がある。また、データの上書きができないので、書き換えには必ず消去が必要であり、その際の消去ブロックはさらに大きい。このようにアクセス単位に対して消去単位が数十倍大きいのは、消去時間が長く、かつ書き込み時に非選択セルにディスターブが生じるフラッシュメモリには一般的な仕様である。しかしこれによりその書き込み効率は著しく低下する。
【００１５】
たとえば上記２ｋＢ単位のページ書き込み、１２８ｋＢ単位のブロック消去による、転送速度１０ＭＢ／ｓフラッシュメモリを用いて、ハードディスク代替用の記憶装置を構成するとする。
その転送速度を、シリアルＡＴＡ接続の高速ストレージで目標とされる１６０ＭＢ／ｓにまで高めようとした場合、マルチバンクやマルチチップの構成を取りながら、たとえば１６個のメモリアレイを並列動作させる必要がある。
【００１６】
図２は、そのような記憶装置を構成するフラッシュメモリの概念図を示す図である。
図２において、高速転送を実現するため、１６個のアレイＡＲ０〜ＡＲ１５を同時に動作させる。この場合データ書き込み時は、たとえばページＰ０，Ｐ１を同時書き込みし、消去時はブロックＢ０〜Ｂ１５を同時消去する。このとき一括書き込み単位となる実ページ領域２１は３２ｋＢ、一括消去単位となる実消去ブロック領域２２は２ＭＢに達することになる。
【００１７】
一方、通常のファイルシステムでは、最小の書き込み単位を成すクラスタサイズは４ｋＢ程度であり、この単位でランダムなアクセスがなされる。
さらに、通常のファイル記憶装置は、ＡＴＡ等のインターフェース仕様に従って、たとえば５１２バイトのセクタ単位でランダムアクセスされる。
その場合、たとえばページＰ０とＰ１のみを書き換える要求が頻繁に発生する。
しかし、上述のような装置でそのようなアクセスを行うと、結局実消去ブロック領域２２全体を消去しなければならない。かつその中の非選択領域に有効ファイルがあれば、それを消失から保護する必要がある。その典型的な対処例は次のようになる。
【００１８】
１．まずフラッシュメモリから、別途設けられたバッファメモリ２３のメモリ領域２４に、実消去ブロック領域２２全体のデータを読み出す。
２．次にメモリ領域２４内で、ページＰ０とＰ１に相当するデータを更新する。
３．次にフラッシュメモリ上のブロック領域２２の消去を実行する。
４．最後に上記消去済みの領域２２に、更新後のメモリ領域２４のブロックデータを全て書き戻す。
【００１９】
すなわち、４ｋバイトの書き込みのために、実際には消去と、２ＭＢのデータの読み出しおよび書き込みが必要となる。
具体的には、１ページ分のデータの読み出しおよび書き込みにはそれぞれ２００マイクロ秒（μｓ）を要し、ブロックの消去には２ミリ秒（ｍｓ）を要するので、３０ミリ秒（ｍｓ）近くを必要とする。
【００２０】
これに対し、予め予備の消去済みブロック２５を用意しておいて、消去済みブロック２５に領域２２の元のデータとページＰ０とＰ１の更新後データを合成させて書き込みを行う手法もある。
この場合、仮想アドレス構成を用いて消去ブロック単位で論理アドレスと物理アドレスの対応を更新し、アクセス対象とされた論理アドレスに対応する物理ブロックは元の消去ブロック領域２２からデータの移動先ブロック領域２５に入れ替える。
【００２１】
以下、仮想アドレス構成を用いて、たとえば消去ブロック内の１ページのみを書き換える際の手順の一例を、図３（Ａ），（Ｂ）を用いて具体的に説明する。
図３（Ａ）はフラッシュメモリ３０の記憶領域を、図３（Ｂ）はアドレステーブル４０を示している。
【００２２】
なお、この種の手法で現在最も頻繁に使用されているのは、消去ブロック単位でアドレス変換を実施するやり方である。
【００２３】
アドレステーブル４０を参照することにより、論理ブロックアドレス（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ  ＝ＬＢＡ）をインデックスとして、対応する消去ブロックのフラッシュメモリ上のアドレスである物理ブロックアドレス（Ｐｈｉｓｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ  ＝ＰＢＡ）を取得することができる。
たとえば、ホストまたはアプリケーションが”０ｘ５５”のブロックアドレスへのアクセスを要求した場合、そのアドレスはテーブルにより”０ｘ６Ｂ”に変換され、フラッシュメモリ３０の消去ブロック３１にアクセスが実施される。
このような管理下におけるフラッシュメモリ上のデータ更新手順は以下の通りである。
【００２４】
１．予め予備の消去済みブロック３２を用意しておく。その物理アドレスは”０ｘＡＡ”とする。
２．論理ブロックアドレス”０ｘ５５”が指定され、対応する物理ブロックアドレス”０ｘ６Ｂ”が取得され、ブロック３１内のページ３３にアクセスがなされたとする。このとき、フラッシュメモリ３０の書き換え対象ブロック３１から、別途設けられたページバッファ３４）を介して、予備ブロック３２にデータを順次コピーしていく。
３．更新対象となるページ３３のコピー時には、ページバッファ３４上で所望の箇所を更新してコピーを行い、コピー先ページ３５にそれが反映される。
４．有効なページデータのコピーが全て完了したら、アドレステーブル４０上で、ブロック３１と予備ブロック３２のアドレスを入れ替える。
５．最後に元ブロック３１の消去を実施する。
【００２５】
このような手順によって、以降論理ブロックアドレス”０ｘ５５”に対しては、物理ブロックアドレス”０ｘＡＡ”に対応する消去ブロック、すなわち、予備ブロック３２がアクセスされるようになり、全体との整合性が保たれる。
【００２６】
しかしこの場合、１ページを更新するために、ブロック３１のデータ全体を予備ブロック３２に退避させる作業が必要であり、そのためにブロック３１内の全データのページバッファ３４への読み出しと、予備ブロック３２への書き込みが必要になる。
したがって、この場合も現実の転送性能は著しく低いものになってしまう。
【００２７】
このような事情から、フラッシュメモリを用いた現在の記憶装置は、特に書き込み時においては、ハードディスクをはるかに下回る転送性能しか得られていない。
【００２８】
また、消去ブロック内の書き込み順序にも制限がついた場合、問題はさらに深刻となる。
一般のファイルシステムにおいては、セクタ間の書き込み順序に保証はなされない。したがって、消去ブロック途中から書き込みがなされることがしばしばあるが、その場合、ブロック内におけるそれより上位のアドレス領域が空いていても、そこにデータは書き込めなくなる。その結果、後でそれらの領域に書き込み要求が出ると、書き換えと同様の処理が必要となり、前述のデータ退避や消去、書き込みを繰り返さざるを得なくなってしまう。
【００２９】
このような問題は単に転送性能を低下させるのみならず、フラッシュメモリの消去回数を増加させ、その寿命まで低下させてしまう。
【００３０】
一方、上述の如き問題を緩和するデータの保存手法として、追記型の記憶システムが提案されている。
このようなシステムにおいては、書き換えは、更新データを空き領域に追記し、元のデータを無効化することで実施される。
より具体的には、論理アドレスを物理アドレスに対応させるアドレス変換テーブルを用い、書き換えは対照データの物理アドレスを変更し、記憶メディアの空き領域に追記することで実施する。
【００３１】
たとえば、特許文献２（特開平８−３２８７６２号公報）には、アドレス変換テーブルを用いた追記型記憶システムにおける管理方法の詳細が記載されている。
【００３２】
図４（Ａ），（Ｂ）は、アドレス変換テーブルを用いた追記型記憶システムにおける管理方法の一例を説明するための図である。
図４（Ａ）はフラッシュメモリ５０に記憶領域を、図４（Ｂ）はアドレステーブル６０を示している。
【００３３】
アドレステーブル６０を参照することにより、論理ページアドレス（Ｌｏｇｉｃａｌ  Ｐａｇｅ  Ａｄｄｒｅｓｓ  ＝ＬＰＡ）をインデックスとして、対応するページのフラッシュメモリ上のアドレスである物理ページアドレス（Ｐｈｉｓｉｃａｌ  Ｐａｇｅ  Ａｄｄｒｅｓｓ  ＝ＰＰＡ）を取得することができる。
たとえば、ホストから指定された論理ページアドレス”０ｘ５５０２”への書き込みに対して、アドレステーブルを用いてページ単位でアドレス変換を実施し、フラッシュメモリ５０上の物理ページアドレス”０ｘ６Ｂ０５”を取得する。これによりブロック５１内の対応するページ領域５３へアクセスが実施される。
一方、同ページに更新を行う際には、フラッシュメモリ５０内で直接書き込める適当な空きページ領域が検索される。たとえば物理ブロックアドレス”０ｘＡＡ”に相当する消去済み空きブロック５２の先頭ページ領域５５が適切な書き込み先として選択された場合、ページ領域５３のデータのみがページバッファ３４Ａを介して更新され、ページ領域５５に書き込まれる。この際、論理ページアドレス”０ｘ５５０２”はページ領域５５の物理アドレス”０ｘＡＡ００”にリマッピングされる。ページ領域５３上の旧データは、当面そのまま残して無効扱いとしておく。
【００３４】
このような管理を実施すれば、フラッシュメモリ内に空き領域が存在する限りは、各ページデータの更新に対して１ページ分のデータ書き込みで良い。したがって、高速に書き換えを実施することができる。その間消去の必要も無いので、フラッシュメモリの書き換え回数も大幅に低減でき、その寿命も向上させることができる。
【００３５】
しかし、このような追記型記憶システムでは、無効化した元データ領域が無駄になる。したがって、そのような領域は消去して、再度書き込みが可能となるよう回復処理を行うことが必要である。
しかしその場合、特に消去ブロックが複数のページ領域を含むと、無効化されたページ領域と同じ消去ブロック内に有効データを含むページ領域が存在するケースが多発する。このようなブロックを回復させるには、消去前に有効ページのみを、他のブロックに退避させる必要がある。
一方、このような各ページの有効／無効の情報をフラグによってＲＡＭ上に保管した場合、フラッシュデバイスの容量増加に伴って、フラグ保管に必要なＲＡＭ容量が著しく増加してしまう。
【００３６】
本発明の目的は、特に高並列化された高速なフラッシュメモリシステムを構築するにあたって、上述のオーバーヘッドを見かけ上消滅させ、常時高速なアクセスを可能とする新しいストレージ構成を実現可能な記憶装置、コンピュータシステム、および記憶システムを提供することにある。
また、本発明の目的は、特に追記型記憶システムにおいてブロック消去を実施する際、ＲＡＭ等のハードウエアリソースをなるべく使用せず、有効ページと無効ページを識別判定し、有効ページのみを他のブロックに速やかに退避させることが可能な記憶システムを提供することにある。
【課題を解決するための手段】
【００３７】
本発明の第１の観点の記憶装置は、主記憶としてフラッシュメモリを有し、上記フラッシュメモリにおける少なくとも一部領域の書き換えは、更新データを空き領域に追記し、元のデータを無効化する追記型の書き込みで実施され、外部からアクセスの無い装置の待機時に、上記無効化領域を自動的に消去して空き領域に回復する回復処理を行う機能を有し、当該記憶装置に格納されたデータに外部からアクセスが生じた場合に、上記回復処理を実行中であれば、当該回復処理を中断し、アクセスへの応答処理を行い、当該アクセスへの応答処理が終了し、待機状態になってから上記回復処理を再開する機能を有し、上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、上記回復処理は、回復対象たる無効ページ領域を含む消去ブロックに残存する有効ページ領域のデータを、他の消去ブロックの消去済みの空き領域に退避する処理を含み、消去対象として選択されたブロックに対して、別途システム内のメモリ上に設けたフラグを用いて有効ページを判定する処理、およびページ書き込み時に同時記載された論理アドレスと物理アドレスの対応がアドレス管理テーブルと照合しているか否かから有効ページを判定する処理により有効ページを判定し、その退避を行う。
【００３９】
好適には、待機時にブロックを検査し、同一ブロック内に一定数以上の無効ページ領域が存在する場合、空き領域に対して、一定割合以上の無効ページ領域が存在する場合、および空き領域が全体の容量の一定割合以下である場合のいずれかを含む場合に、回復処理の実行を判定する。
【００４０】
好適には、上記回復処理を中断する場合、回復処理の進捗情報を装置内のレジスタもしくはメモリに保存し、上記アクセスが終了すると当該進捗情報を参照して回復処理を再開する機能を有する。
【００４１】
好適には、上記回復処理の進捗情報の少なくとも一部が、不揮発性ＲＡＭ内に記録されている。
【００４２】
好適には、上記不揮発性ＲＡＭとは、少なくとも強誘電体メモリ（ＦｅＲＡＭ）、強磁性体メモリ（ＭＲＡＭ）、相変化メモリ（ＯＵＭ）、磁気抵抗効果メモリ（ＲＲＡＭ）のいずれかである。
【００４３】
好適には、内部に処理ユニットを有し、待機時に当該処理ユニットは上記回復処理を実施し、外部からアクセスが生じると当該処理ユニットに割り込みが発生し、当該割り込みイベントに従って上記処理ユニットは回復処理を中断し、アクセス処理を開始する。
【００４４】
好適には、ひとつの消去ブロック内に存在する一つまたは複数の無効ページ領域の回復処理は、複数の工程に分割され、外部からアクセスの無い記憶装置の待機時に、その一部が実行される。
【００４５】
本発明の第２の観点の記憶装置は、主記憶としてフラッシュメモリを有し、上記フラッシュメモリにおける少なくとも一部領域の書き換えは、更新データを空き領域に追記し、元のデータを無効化する追記型の書き込みで実施され、外部から所定のコマンドに応じて、上記無効化領域を消去して空き領域に回復する処理を実行する機能を有し、当該記憶装置に格納されたデータに外部からアクセスコマンドが生じた場合に、上記回復処理を実行中であれば、当該回復処理を中断し、アクセスへの応答処理を行い、当該アクセスへの応答処理が終了し、待機状態になってから上記回復処理を再開する機能を有し、上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、上記回復処理は、回復対象たる無効ページ領域を含む消去ブロックに残存する有効ページ領域のデータを、他の消去ブロックの消去済みの空き領域に退避する処理を含み、消去対象として選択されたブロックに対して、別途システム内のメモリ上に設けたフラグを用いて有効ページを判定する処理、およびページ書き込み時に同時記載された論理アドレスと物理アドレスの対応がアドレス管理テーブルと照合しているか否かから有効ページを判定する処理により有効ページを判定し、その退避を行う。
【００４６】
好適には、外部からの所定のコマンドに応じて、上記回復処理を中断する際、回復処理の進捗情報を装置内のレジスタもしくはメモリに保存し、再度回復処理の実行コマンドを受けると、当該進捗情報を参照して回復処理を再開する機能を有する。
【００４７】
好適には、ひとつの消去ブロック内に存在する一つまたは複数の無効ページ領域の回復処理は、複数の工程に分割され、外部（ホスト）から所定のコマンドに応じて、その一部が実行される。
【００４８】
本発明の第３の観点の記憶装置は、主記憶としてのフラッシュメモリと、キャッシュメモリと、を有し、上記フラッシュメモリにおける少なくとも一部領域の書き換えは、更新データを空き領域に追記し、元のデータを無効化する追記型の書き込みで実施され、外部からのアクセスがキャッシュメモリにヒットし、キャッシュへのアクセスが実施される間に、上記無効化データを消去して空き領域に回復させる処理の少なくとも一部を並行して実施する機能を有し、外部からのアクセスがキャッシュメモリにミスヒットした場合に、上記回復処理を実行中であれば、当該回復処理を中断し、アクセスへの応答処理を行い、当該アクセスへの応答処理が終了し、外部からのアクセスがキャッシュメモリにヒットしたときまたは待機状態になってから上記回復処理を再開する機能を有し、上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、上記回復処理は、回復対象たる無効ページ領域を含む消去ブロックに残存する有効ページ領域のデータを、他の消去ブロックの消去済みの空き領域に退避する処理を含み、消去対象として選択されたブロックに対して、別途システム内のメモリ上に設けたフラグを用いて有効ページを判定する処理、およびページ書き込み時に同時記載された論理アドレスと物理アドレスの対応がアドレス管理テーブルと照合しているか否かから有効ページを判定する処理により有効ページを判定し、その退避を行う。
【００５０】
好適には、ひとつの消去ブロック内に存在する一つまたは複数の無効ページ領域の回復処理は、複数の工程に分割され、外部からのアクセスがキャッシュメモリにヒットしてキャッシュへのアクセスが実施される間に、その一部が実行される。
【００５１】
本発明の第４の観点のコンピュータシステムは、ホストコンピュータと、主記憶としてフラッシュメモリを含み、上記ホストコンピュータで扱う諸データを記憶するための不揮発性データストレージと、を有し、上記フラッシュメモリにおける少なくとも一部領域の書き換えは、更新データを空き領域に追記し、元のデータを無効化する追記型の書き込みで実施され、上記無効化領域を消去して空き領域に回復させる処理が、上記データストレージに対してそれ以外のデータ処理要求の無い待機時に実施され、前記データストレージに対してデータ処理要求が生じた場合に、上記回復処理を実行中であれば、当該回復処理を中断し、アクセスへの応答処理を行い、当該アクセスへの応答処理が終了し、待機状態になってから上記回復処理を再開する機能を有し、上記フラッシュメモリは一括消去単位である消去ブロックを複数有し、各消去ブロックは各々独立した書き込み単位であるページ領域を複数含み、上記回復処理は、回復対象たる無効ページ領域を含む消去ブロックに残存する有効ページ領域のデータを、他の消去ブロックの消去済みの空き領域に退避する処理を含み、消去対象として選択されたブロックに対して、別途システム内のメモリ上に設けたフラグを用いて有効ページを判定する処理、およびページ書き込み時に同時記載された論理アドレスと物理アドレスの対応がアドレス管理テーブルと照合しているか否かから有効ページを判定する処理により有効ページを判定し、その退避を行う。
【００５２】
好適には、上記ホストコンピュータにおいて、データストレージへのデータアクセスの要求が生じた場合に、上記回復処理を実行中であれば、当該回復処理を一時中断し、当該一時中断する際、回復処理の進捗情報をコンピュータシステム内部のいずれかのレジスタまたはメモリ内に保管し、再度回復処理を実行する際には当該進捗情報を参照して処理を再開、継続する。
【００５３】
本発明の第５の観点の記憶システムは、記憶媒体としてのフラッシュメモリと、制御回路と、を有し、上記フラッシュメモリは、一括消去単位である消去ブロックを有し、各消去ブロックは複数のデータ領域を含み、上記制御回路は、消去ブロックの消去を実行する前に、各データ領域ごとに、少なくとも領域の一部を読み出し、当該読み出した値から当該データ領域に有効なデータが記録されているか否かを判定し、判定の結果、有効なデータが記録されている場合に、当該データ領域のデータを他の消去ブロックにコピーする。
【００５４】
好適には、上記制御回路は、上記データ領域の一部に記載されたフラグ値を読み出し、当該フラグ値が所定の値であれば有効と判定する。
【００５５】
好適には上記制御回路は、上記データ領域の一部に記載されたハンドル値を読み出し、当該データのメモリ上の物理アドレスとハンドル値との対応を所定のテーブルと対照し、一致している場合に有効と判定する。
【００５６】
このように、本記憶装置においては、フラッシュメモリにおける課題解決のため、追記型の記憶システムに着目している。
通常型の書き換えでは、有効ページ領域の退避等をはじめとする冗長な処理が、ユーザーのアクセスに応じてその都度発生する。それは、アクセスされるデータ領域の状況に依存する不可避な処理であって、その発生時期をアクセスと独立に制御することは困難である。
一方、追記型書き換えでは、無効化データ領域の回復時に同様のオーバーヘッドが生じるが、その発生時期はユーザーのアクセス状況にかかわらず、ストレージシステムもしくはホストの都合に応じて自由に決定することができる。
ところで、通常の用途において、データストレージは常にアクセスされているわけではなく、むしろアクセスの無い期間の方が長い。したがって、フラッシュメモリに直接アクセスの無い期間を抽出し、その期間を利用して上記回復処理を実施する機能を設けることにより、回復処理に伴うオーバーヘッドを見かけ上消滅させることができる。
【発明の効果】
【００５７】
本発明によれば、フラッシュメモリを記憶メディアとして使用しつつ、実使用上常態的に高速な書き換えを実現することができる。その消去回数も減少させることができ、書き換え疲労を低減することで、信頼性の高い書き換えが可能である。
さらにそのような性能向上を得つつ、フラッシュメモリにおいて無効化された領域の回復も適切に実施できる。
そして、フラッシュメモリを記憶メディアとして使用しつつ高速な書き換えを実現しつつ、低コストなハードウエアでフラッシュメモリ上の記憶領域を有効に活用できる。
【発明を実施するための最良の形態】
【００５８】
以下、本発明の実施形態を図面に関連付けて説明する。
【００５９】
図５は、本第１の実施形態に係る記憶装置を示す構成図である。図６は、第１の実施形態に係る制御回路のアドレス変換テーブルおよびページ状態の管理テーブルの構成例を示す図である。
【００６０】
図５の記憶装置７０は、インターフェース回路（Ｉ／Ｆ）７１、ページバッファ７２、内部データバス７３、制御回路７４、およびＮＡＮＤ型フラッシュメモリ７５，７６を、主構成要素として有している。
【００６１】
記憶装置７０において、３２ビットの内部データバス７３には、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ７５，７６が並列接続されている。２つのチップのフラッシュメモリ７５，７６は読み出しや書き込みにおいて、同時並列にアクセスされる。
ページバッファ７２は、アクセスされたページ領域を一時記憶するバッファであり、外部とのインターフェース回路７１に接続されている。
制御回路７４は、メモリチップであるフラッシュメモリ７５，７６とページバッファ７２およびインターフェース回路７１の間のデータのやりとりを管理するコントローラであり、処理ユニットである内蔵ＣＰＵ８５によって制御される。同じく内蔵されたＲＡＭ７７には、ＣＰＵ８５を制御するためのプログラム領域やワークエリアが確保されるとともに、アドレス変換テーブル７８、およびページ状態の管理テーブル８６が構築されている。
【００６２】
本記憶装置７０のアクセスは以下のようになされる。ここでは簡単のため、１６進数のアドレスは次のように割り振られるとする。たとえば外部入力アドレスが”０ｘ５５００Ｃ”であった場合、上位の”０ｘ５５００”はページアドレス、下位”０ｘＣ”はページ領域内のセクタアドレスであり、本記憶装置７０は１セクタ単位でランダムアクセスが可能である。
【００６３】
読み出しの際、外部から”０ｘ５５００Ｃ”のセクタドレスが入力されると、制御回路７４は上位のページアドレスを受けて内蔵ＲＡＭ７７にアクセスし、アドレス変換テーブル７８から論理ページアドレス（ＬＡ：ＬＯＧＩＣＡＬ  ＡＤＤＲＥＳＳ）”０ｘ５５００”に対応する物理ページアドレス（ＰＡ：ＰＨＩＳＩＣＡＬ  ＡＤＤＲＥＳＳ）”０ｘ００Ｂ０”を取得する。
この物理ページアドレスＰＡ中、上位の”０ｘ００”はメモリチップのフラッシュメモリ７５，７６内の消去ブロック８３，８４のアドレスである。下位”０ｘＢ０”は各消去ブロック内のページ領域７９，８０のアドレスである。
この物理アドレスＰＡをもとにメモリチップのフラッシュメモリ７５，７６が共にアクセスされ、各々からページアドレス”０ｘ００Ｂ０”に格納されたページ領域７９，８０のデータが読み出され、ページバッファ７２に格納される。インターフェース回路７１はその中から、下位アドレス”０ｘＣ”に相当するセクタを選択し、外部に出力する。
【００６４】
一方、外部から”０ｘ５５００Ｃ”に書き込みを行う場合は、まず読み出しと同様の手順でページ領域７９，８０のデータがメモリチップのフラッシュメモリ７５，７６から読み出され、ページバッファ７２に格納される。その後下位アドレス”０ｘＣ”に相当するセクタが選択され、外部から入力されたデータに更新される。
【００６５】
更新後のページデータは、フラッシュメモリ７５，７６に書き戻されるが、その際読み出し元のページ領域７９，８０が書き換えられるのでは無く、空き領域８１，８２に書き込まれる。
このページ領域の物理ページアドレスは”０ｘ０２８０”であり、すなわち消去ブロック”０ｘ０２”内の”０ｘ８０”のページに相当する。またこの処理の前まで、その領域はアドレス変換テーブル７８のいずれの物理アドレスフィールドにも登録されていない、未使用の空きページであった。
更新後のデータがこの領域に追記の形で書き込まれるとともに、アドレス変換テーブル７８の論理アドレス”０ｘ５５００”に対応する物理アドレスフィールドには、空き領域８１，８２の物理ページアドレス”０ｘ０２８０”が登録される。
【００６６】
このように更新データを追記するための空き領域の管理は、たとえば図６に示すようなページ状態管理テーブル８６をＲＡＭ７７上に構築して使用する。
本テーブルは（ＢＡ：Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）で表現される各消去ブロックに格納された各々のページの状態を２ビットのフラグ列で記録している。”０”は空き領域であり、”１”は書き込みが行なわれた有効領域、”２”はデータが更新され、無効化された無効領域を示す。
【００６７】
図６の状態はブロックアドレス”０ｘ０２”における物理ページ”０ｘ８０”以降が全て空き状態になっている。たとえば追記のための空き領域を決定するために、現在検索対象としているブロック”０ｘ０２”へのポインタをメモリ領域８７に保存しておく。
フラッシュへの書き込み要求があれば、その上位ページからこのテーブルのフラグをスキャンして空きページ領域を検索する。ブロック全ての空き領域が使用されていると、ポインタをインクリメントし、次は”０ｘ０３”のブロックから空きページ領域を探す。
このようにしてポインタをブロックアドレスの先頭から末尾にかけて循環させていけば、フラッシュメモリ全域に対して均一な書き込みが実施できる。
【００６８】
本構成では二つのメモリチップであるフラッシュメモリ７５，７６が並列化され、各々から読み出されたページデータが、ページバッファ７２に一括格納される。この際単独チップを使用した場合に比べてメモリ容量は２倍になるが、これは一括アクセス単位であり、アドレス変換テーブル７８の管理単位でもあるページ領域の容量が２倍になることで実現されるので、ページ数は増加しない。したがってアドレス変換テーブル７８は変化せず、それを格納するメモリ（ＲＡＭ）７７の容量も増加しない。
一方、並列化の弱点である消去回数の増加や、書き換え疲労が加速することはページ単位のアドレス変換を用いた追記型の書き込みで大幅に緩和される。
【００６９】
なお、たとえば大型のファイル書き換え等、消去ブロック全体を書き換える場合には、有効データの退避処理はもともと不要であり、ブロック消去のみで良い。したがって、このようなケースでは上記追記型書き込みの採用の有無で大きな性能差は生じない。したがって一般的な通常型書き換えと追記型書き換えをケースに応じて組み合わせても良い。
【００７０】
ところで、上述の如き追記型書き込みを実施した場合、更新前のデータが格納されていた物理ページアドレス”０ｘ００Ｂ０”に相当するページ領域７９，８０はアドレス変換テーブル７８の物理アドレスフィールドから削除され、外からアクセスできなくなる。すなわち無効化される。
しかしそれらにはデータが書き込まれており、そのままでは空き領域として使用することもできない。上述のような書き換えを何度も繰り返すと、多くの無効ページ領域が発生する。それらは再度空き領域として使用できるよう、消去して回復させる必要がある。またその場合、消去ブロック８３，８４に残された有効データは退避させなければならない。
【００７１】
このような回復処理は、たとえばまず対象ブロック内の有効データを、更新の際と同様に一旦ページバッファに読み出してから予備のページ領域に追記で書き込んでいき、それによって実質的な退避を行なえば良い。すなわち有効ページを仮更新することで、その元領域を全て無効化する。その後対象ブロックを消去することによって、回復処理が実施される。
【００７２】
図７（Ａ）〜（Ｃ）は、無効領域の回復手順を説明するための図である。
図７（Ａ）〜（Ｃ）には、消去ブロック８３，８４内部の有効データを退避し、無効ページ領域を実質的に回復させる、具体的手順＜１＞、＜２＞、＜３＞を例示している。
【００７３】
手順＜１＞
図６の状態からさらに追記による書き換えが進行し、消去ブロック８３，８４には、一度データが書き込まれた後、更新によって無効化されたページ領域群９４，９６が、有効なページ領域群９３，９５，９７と共存しているとする。ここで有効ページ領域のデータを残しつつ、無効化領域を空き領域に回復させる必要がある。
一方、ブロック９１，９２は現在追記用の空き領域として使用している消去ブロックであり、ページ領域１０２まで書き込みが行われている。
【００７４】
手順＜２＞
有効なページ領域群９３，９５，９７を消去ブロック９１，９２内の空き領域９８，９９，１００に上詰めにして順番にコピーしていく。この際たとえば図５のページバッファ７２に消去ブロック８３，８４から順次１ページ領域ずつを読み出し、消去ブロック９１，９２に書き込むとともに、アドレス変換テーブル７８を更新する。すなわち各々のページ領域の論理アドレスに対応する物理アドレスフィールドに、コピー先の物理ページアドレスを登録していく。
この操作は、すなわち有効ページ領域群９３，９５，９７を追記方式で書き換える作業（処理）に等しい。
実際には書き換えずコピーするのみであるが、この作業によって消去ブロック８３および８４内の全てのページは無効化され、有効ページ領域のデータは消去ブロック９１，９２に実質的に退避させられる。
【００７５】
手順＜３＞
消去ブロック８３，８４を消去する。これによってその内部は全て空き領域となり、後の追記に使用することが可能になる。これをもって無効領域９４，９６は実効的に回復される。
【００７６】
このように無効ページ領域の回復処理は、各有効ページ領域のコピーによる退避処理と、元消去ブロックの消去よりなる。また、回復対象となる消去ブロック内の有効ページに通常の更新処理と同様の手順でダミーの更新を施し、それをもってページの退避を実行すれば、回復処理時の有効ページ退避を通常の書き込みアルゴリズムに統合させることが可能である。
この場合、制御が容易になるばかりではなく、フラッシュメモリへの書き込みの均一化等、書き込み時の信頼性向上のための各種工夫を回復処理にも適用することができ、記憶装置の総合的な信頼性を向上させることができる。
【００７７】
ここにおいて、本発明の第１の実施形態は、上記フラッシュメモリへの追記型書き込みを採用した半導体記憶装置の内部に、その待機時に無効化された領域の回復処理を自動的に実施する機構を設けるものである。
【００７８】
ここでいう待機時とは、たとえば記憶装置に電源が入り、その初期化作業が終わって、いつでもアクセス可能でありながら、外部からアクセス要求の無い状態である。実際にハードディスクのようなファイル記憶装置は、常時外部からアクセスされている訳ではなく、むしろ待機状態の方が長い。
またはたとえば映像の録画のように、記憶装置に見かけ上継続的にアクセスがなされている場合でも、ホストから記憶装置に入力される平均的なデータ転送量が記憶装置自体のもつデータ転送能力より十分小さければ、実際にはホスト側バッファが一定量の映像データを蓄積した後でまとめて装置にデータが入力されることになる。したがってバッファに映像データを蓄積する間、装置は待機状態となる。
【００７９】
図８は、このような装置が回復処理を実行する制御手順の例を示すフローチャートである。
記憶装置は電源が入り、アクセスに必要となる初期化がなされた後（ＳＴ１）、無効ページ領域の回復処理を実行する。それは以下のステップＳＴ２〜ＳＴ５の処理の繰り返しから成る。
【００８０】
＜ステップＳＴ２＞
無効化されたページ領域を探査し、その回復処理を実施すべきか否かを、しかるべきアルゴリズムで判定する。たとえば以下のようなケースでの回復が有効である。
・同一ブロック内に一定数以上の無効ページ領域が存在する。
（このようなブロックは実質的に回復されるページ数が多い一方、退避の必要なページ数が少ない。したがって効率的な回復が可能である。）
・空き領域に対して、一定割合以上の無効ページ領域が存在する。
・空き領域が全体の容量の一定割合以下である。
回復処理が不要な場合は、処理を終了し、単にアクセスを待って何も実施しない通常の待機状態に入る。
【００８１】
＜ステップＳＴ３＞
回復処理が必要と判定されれば、回復対象とする消去ブロックと、他の消去ブロック内の退避先の空き領域を選定し、回復処理をスタートする。
【００８２】
＜ステップＳＴ４＞
回復対象となった消去ブロック中に、退避すべき有効ページ領域があるか否かを判定する。もしあれば、上位から１ページ領域ずつ空き領域に上詰でコピーしていく。各ページのコピーが完了する都度に、アドレス変換テーブルを更新する。
【００８３】
＜ステップＳＴ５＞
全ての有効ページ領域の退避が完了したら、元ブロックを消去する。
【００８４】
なお、このような記憶装置には、外部からアクセス要求がなされた際に、上記回復処理を中断する機構が必要である。また一つの消去ブロックに対して、その中の無効化ページ領域を回復処理させるには消去だけで数ミリ秒を要し、さらにステップＳＴ２〜ＳＴ５の処理を全て完了するには数十ミリ秒を要することもある。したがってそれらを分割して処理させる機構が必要である。
【００８５】
このような要求に対応する有効な施策の一つは、ステップＳＴ２〜ＳＴ５を記憶装置内のＣＰＵ（たとえば図５における内蔵ＣＰＵ８５）の制御で処理し、外部からアクセスコマンドが入力されるとＣＰＵに割り込みをいれて、アクセスへの応答処理プログラムに制御を渡すことである。
【００８６】
すなわち記憶装置内部を制御するＣＰＵへの割り込みでアクセスへの応答処理を実施すれば、回復処理が上記ステップＳＴ２〜ＳＴ５のどの工程にあってもその中断が可能である。この場合フラッシュメモリへのページデータの書き込みが開始されていれば、その１ページの書き込みを完了させ、アドレステーブルを更新させてから処理を中断する。これにより数百マイクロ（μ）秒程度の遅延で安全にアクセス処理を開始できる。
また、フラッシュへメモリの消去が開始されていれば、消去を完了したところで処理を中断する。これにより数ミリ秒の遅延で安全にアクセス処理を開始できる。
【００８７】
さらにフラッシュメモリチップ自体に中断処理に対応できる仕様が搭載されていれば、書き込みや消去動作の途中でも直ちにフラッシュメモリをリセットし、数十マイクロ秒のオーダーで要求されたデータアクセスを開始することが可能である。
この場合、書き込みや消去は中途半端な状態で中断されるが、書き込んでいたページ領域や消去中であった消去ブロックの所在が解れば、アクセス応答処理の完了後、再度上記書き込みまたは消去処理を再開することで、問題なく処理を完了できる。
【００８８】
なお、いずれの場合においても、回復処理を中断した場合には、その進捗状況を記憶装置内のメモリかレジスタに記録しておき、アクセスへの応答処理が完了すると、その情報に基づいて回復処理を再開することが望ましい。
たとえば、ステップＳＴ２〜ＳＴ５の処理中途で中断が成された際は、少なくとも回復対象の消去ブロックの所在を進捗情報として保存しておく。また望ましくは回復処理を中断したことを示すフラグを立てておく。その他必要に応じて有効ページの退避先の空き領域や退避中だったページの所在等を記録しておいても良い。
これらの情報は、たとえば図５におけるＲＡＭ７７内の適当な領域に保存する。たとえばＣＰＵを制御するファームウエア内で、変数として保存しておけば良い。
【００８９】
アクセスへの応答処理が完了すると再度待機状態に戻り、たとえばステップＳＴ２から回復処理が再開される。
その際、ステップＳＴ２では前記フラグに基づいて中断された処理があることを判定し、回復処理に進む。
ステップＳＴ３の処理で前回の処理を継続するように、回復対象の消去ブロックと退避先の空き領域を選択する。
さらにステップＳＴ４では、中断時に有効ページデータはどこまで退避が完了したか、もしくは既に退避は完了し、元ブロックの消去中に中断されたのかを検査、判定し、その情報に従って未完了の工程から回復処理を実施する。
【００９０】
このような構成をとることで、ホストからは全く意識されることなく、記憶装置内部で自動的に回復処理が実行される。アクセスが入ると自動的に回復処理を中断し、高速にアクセスへの応答処理を実行する。
【００９１】
ホストからは通常のハードディスクと同じインターフェース仕様やコマンドを使用することが可能である。たとえばＡＴＡ、ＰＣＩ−エクスプレス、ＵＳＢ等の汎用インターフェースを用い、かつ各規格ごとに用意された標準的なコマンドのみで動作させることができるので、専用のドライバーを用意する必要も無い。同様に、一般的なフラッシュメモリカード等を置き換えることも容易である。
【００９２】
ところで前述の例では、追記型書き換えで発生した無効ページ領域の回復処理ＳＴ２〜ＳＴ５を、ホストからのアクセス要求に伴うＣＰＵ割り込みで中断し、分割しながら実行した。すなわち本来数十ミリ秒かかる回復処理を、分割しつつアクセスの合間に実行した訳である。
しかし、回復処理の分割方法には各種バリエーションが考えられる。たとえば上記図８のステップＳＴ２〜ＳＴ５の回復処理を、予めより小さな作業に分割しておき、それを単位として実行して行けば、割り込みなしでも迅速にアクセスに対応できる。その例を図９に示す。
【００９３】
図９は、第１の実施形態の変形例であって、無効ページ領域回復の分割単位処理を説明するためのフローチャートである。
記憶装置は電源が入り、アクセスに必要となる初期化がなされた後（ＳＴ１１）、無効ページ領域の回復処理を分割単位ごとに実行する。分割単位処理は以下のステップＳＴ１２〜ＳＴ１５の処理より成る。
【００９４】
＜ステップＳＴ１２＞
無効化されたページ領域を探査し、その回復処理を実施すべきか否かを、しかるべきアルゴリズムで判定する。ここで、消去ブロックレベルで完了していない未完了の回復処理が残存している場合、その継続処理に進む。回復処理が不要な場合は、処理を終了し、単にアクセスを待って何も実施しない通常の待機状態に入る。
【００９５】
＜ステップＳＲ１３＞
回復処理が必要と判定されれば、回復対象とする消去ブロックと、退避先の空き領域を選定し、回復処理をスタートする。未完了の回復処理が残存している場合、そこで作業対象となっていた消去ブロックが選択される。
【００９６】
＜ステップＳＴ１４＞
回復対象となった消去ブロック中に、退避すべき有効ページ領域があるか否かを判定する。もしあれば、再上位の１ページを空き領域に上詰でコピーする（ＳＴ１６）。さらにアドレス変換テーブル７８を更新して分割単位処理を完了する（ＳＴ１７）。
【００９７】
＜ステップＳＴ１５＞
全ての有効ページ領域の退避が完了していたら、元ブロックを消去して、分割単位処理を完了する。なおフラッシュメモリチップに消去動作を中断し、再度同じブロックを消去することで分割して消去できる機能があれば、所定の時間消去を行って、消去完了前でもそれを中断し、分割単位処理を完了しても良い。すなわち分割消去を行っても良い。
【００９８】
なお、上記分割単位処理が終了し、また消去ブロックレベルでの無効ページ領域の回復作業が未完了である場合は、回復作業中の消去ブロック、或いは消去の累計時間等、回復処理の進捗情報を、記憶装置内のメモリかレジスタに保存しておくことが望ましい。
【００９９】
このような分割単位処理は、処理ごとに一旦作業を終了しても良いが、外部（ホスト）からアクセス要求が入っていない場合には、図のように継続して次の分割単位処理を実行しても良い。
【０１００】
次に、本発明の第２の実施形態について説明する。
本発明の第２の実施形態は、外部からの専用の回復コマンドに従って上記回復処理を実施する形態である。
【０１０１】
図１０は、本第２の実施形態に係る回復処理を説明するためのフローチャートである。
上述した第１の実施形態においては、装置が待機状態になると自動的に回復処理が実施されるのに対して、本第２の実施形態では装置外部から入力された回復コマンドに従って回復処理を実施する。図中、破線で示した無効ページ領域の回復処理ＳＴ２１〜ＳＴ２６は、第１の実施形態における図８の処理（作業）ＳＴ２〜ＳＴ７と同様である。
【０１０２】
さらに、本第２の実施形態では、ユーザーからの所定のコマンドに応じて回復処理を中断する機能を持つ。たとえばそれがデータへのアクセスコマンドであればアクセスの応答処理を行い、回復処理の中断のみを行うコマンドであれば装置をアクセス待機状態に推移させる。
アクセスコマンド、回復処理の開始コマンド、回復処理の中断コマンドは、統一的にＣＰＵへの割り込み処理をイベントとして、それぞれの処理ルーチンが実行されるようにする。
【０１０３】
また、回復処理を中断した場合、第１の実施形態と同様に、その進捗状況を記憶装置内のメモリかレジスタに記録しておき、再度回復コマンドが入力されると、その情報に基づいて回復処理を再開することが望ましい。
【０１０４】
たとえばステップＳＴ２１〜ＳＴ２４の処理中途で中断が成された際は、少なくとも回復対象の消去ブロックの所在を進捗情報として保存しておく。また望ましくは回復処理を中断したことを示すフラグを立てておく。その他必要に応じて有効ページの退避先の空き領域や退避中だったページの所在等を記録しておいても良い。これらの情報は、たとえば図５におけるＲＡＭ７７内の適当な空き領域に保存する。
【０１０５】
再度回復コマンドが入力されると、再び、ステップＳＴ２１から回復処理が再開される。その際、ステップＳＴ２１では前記フラグに基づいて中断された処理があることを判定し、回復処理に進む。
ステップＳＴ２２で前回の処理を継続するように、回復対象の消去ブロックと退避先の空き領域を選択する。
さらに、ステップＳＴ２３では、中断時に有効ページデータはどこまで退避が完了したか、もしくは既に退避は完了し、元ブロックの消去中に中断されたのかを検査、判定し、その情報に従って未完了の工程から回復処理を実施する。
【０１０６】
本第２の実施形態においては、ホスト側が回復処理の開始時期を判断する必要があり、記憶装置の管理に独自のコマンドや作業を要する一方で、ユーザー入力やアプリケーションプラグラムの状況に応じて、最も適切な時期に回復処理を実行できる利点がある。
また装置へのアクセスを事前に予測して、回復処理を中断し、待機状態に推移させておけば、中断処理に要する時間が不要となり、より迅速なアクセスへの応答処理が可能になる。
たとえばユーザーからのキー入力やマウス入力が一定時間なければ回復処理を開始し、入力が入ったところで回復処理を中断する。
【０１０７】
ところで第２の実施形態においては、追記型書き換えで発生した無効ページ領域の回復処理ステップＳＴ２１〜ＳＴ２４を、中断コマンド等に伴う割り込みで分割した。
しかし、第１の実施形態の変形例と同様に、予め回復処理をより小さな作業に分割しておき、それを単位として実行して行けば、割り込みなしでも迅速にアクセスに対応できる。
【０１０８】
図１１は、第２の実施形態の変形例であって、無効ページ領域回復の分割単位処理を説明するためのフローチャートである。
図中、破線で示した無効ページ領域回復の分割単位処理ＳＴ３１〜ＳＴ３６は、第１の実施形態の変形例における図９の処理（作業）ＳＴ１２〜ＳＴ１７と同様である。
【０１０９】
なお、上記分割単位処理が終了し、また消去ブロックレベルでの無効ページ領域の回復作業が未完了である場合は、作業中の消去ブロック、或いは必要に応じて消去の累計時間等、回復処理の進捗情報を、記憶装置内のメモリかレジスタに保存しておくことが望ましい。
【０１１０】
またこのような分割単位処理は、ホストからのコマンドに応じて複数回それを繰り返したり、分割作業の内容を変える等、さまざまなバリエーションが存在し得る。さらに一回のコマンドで１消去ブロック分の回復処理をまとめて行う「非分割モード」を追加しても良い。
【０１１１】
次に、本発明の第３の実施形態について説明する。
本発明の第３の実施形態は、記憶装置内部にキャッシュメモリを設け、それにヒットしている間に回復処理を行うものである。
【０１１２】
図１２は、本発明の第３の実施形態に係る記憶装置を示す構成図である。また、図１３は、第３の実施形態に係る制御回路のアドレス変換テーブルの構成例を示す図である。
【０１１３】
図１２の記憶装置１１０は、インターフェース回路（Ｉ／Ｆ）１１１、ページバッファ１１２、内部データバス１１３、制御回路１１４、ＮＡＮＤ型フラッシュメモリ１１５，１１６、キャッシュメモリ１１７、および第２の内部データバス１１８を、主構成要素として有している。
【０１１４】
記憶装置１１０において、３２ビットの内部データバス１１３には、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ１１５，１１６が並列接続されている。２つのチップのフラッシュメモリ１１５，１１６は読み出しや書き込みにおいて、同時並列にアクセスされる。
ページバッファ１１２はアクセスされたページ領域を一時記憶するバッファであり、外部とのインターフェース回路１１１に第２の内部データバス１１８を介して接続されている。さらに第２の内部データバス１１８にはキャッシュメモリ１１７が接続されている。
【０１１５】
制御回路１１４は、メモリチップのフラッシュメモリ１１５，１１６とページバッファ１１２、キャッシュメモリ１１７、およびインターフェース回路１１１の間のデータのやりとりを管理するコントローラであり、内蔵ＣＰＵ１１９によって制御される。
同じく内蔵されたＲＡＭ１２０には、ＣＰＵ１１９を制御するためのプログラム領域やワークエリアが確保されるとともに、アドレス変換テーブル１２１が構築されている。
さらに制御回路１１４には、ＣＰＵの制御無しでキャッシュメモリ１１７とインターフェース回路１１１間のデータ転送を制御する制御回路１２２が搭載されている。
【０１１６】
本記憶装置１１０のアクセスは、基本的には図５に示された第１の実施形態と同じである。ただし外部ホストと本記憶装置１１０の主記憶たるフラッシュメモリ１１５，１１６との間でやりとりされたデータの一部はキャッシュメモリ１１７の中に保存される。
【０１１７】
ホストが本記憶装置１１０を再度アクセスし、キャッシュメモリ１１７内に保存されたものと同じ論理アドレスのデータをアクセスしようとすると、キャッシュメモリ１１７側のデータがアクセスされる。したがってこの間、ページバッファ１１２、内部データバス１１３、ＮＡＮＤ型フラッシュメモリ１１５，１１６はいずれもアクセスに使用されない。本第３の実施形態ではその間を無効ページ領域の回復処理に利用する。
【０１１８】
図１４は、本第３の実施形態に係る回復処理を説明するためのフローチャートである。図中、破線で示した無効ページ領域の回復処理は、第１の実施形態における図８の処理（作業）ＳＴ２〜ＳＴ７と同様である。
【０１１９】
この例では第１の実施形態同様、装置が待機状態になると自動的に回復処理が実施されるが、割り込みによる回復処理の中断が入るのは、キャッシュメモリ１１７のミスヒット時である。
装置立ち上げ後、ホストからのアクセスがキャッシュにヒットしている間、アクセス処理は制御回路１２２に任され、ＣＰＵ１１９は無効ページ領域の回復処理を実施する。
キャッシュがミスヒットすると、制御回路１２２はＣＰＵ１１９に割り込みをかけ、ＣＰＵ１１９はそれに応じてミスヒットへの応答処理を実施する。
具体的にはホストのアクセス要求に応じてアドレス変換テーブル１２１を参照し、そこで取得された物理アドレスからフラッシュメモリ１１５，１１６をアクセスし、ページバッファ１１２を介してページデータの書き込みまたは読み出しを行う。
また必要に応じてホストからの入力データまたはホストへの出力データをキャッシュメモリ１１７にキャッシュする。
【０１２０】
なお、回復処理を中断した場合、第１の実施形態と同様に、その進捗状況を記憶装置内のメモリかレジスタに記録しておき、再度回復コマンドが入力されると、その情報に基づいて回復処理を再開することが望ましい。
【０１２１】
たとえばステップＳＴ４２〜ＳＴ４５の処理中途で中断が成された際は、少なくとも回復対象の消去ブロックの所在を進捗情報として保存しておく。また望ましくは回復処理を中断したことを示すフラグを立てておく。その他必要に応じて有効ページの退避先の空き領域や退避中だったページの所在等を記録しておいても良い。これらの情報は、たとえば図１２におけるＲＡＭ１２０内の適当な空き領域に保存する。
【０１２２】
ミスヒットへの応答処理が完了すると、アクセス制御は再び制御回路１２２に渡され、ＣＰＵ１１９は回復処理をステップＳＴ４２から再開する。
その際、ステップＳＴ４２では、前記フラグに基づいて中断された処理があることを判定し、回復処理に進む。
ステップＳＴ４３で前回の処理を継続するように、回復対象の消去ブロックと退避先の空き領域を選択する。
さらにステップＳＴ４４では、中断時に有効ページデータはどこまで退避が完了したか、もしくは既に退避は完了し、元ブロックの消去中に中断されたのかを検査、判定し、その情報に従って未完了の工程から回復処理を実施する。
【０１２３】
ところで第３の実施形態においては、キャッシュがヒットしている間、もしくは待機時に実施されていた無効ページ領域の回復処理ＳＴ４２〜ＳＴ４５を、キャッシュのミスヒットに伴う割り込みで分割した。しかし第１の実施形態の変形例と同様に、予め回復処理をより小さな作業に分割しておき、それを単位として実行して行けば、割り込みなしでも迅速にアクセスに対応できる。
【０１２４】
図１５は、第３の実施形態の変形例であって、無効ページ領域回復の分割単位処理を説明するためのフローチャートである。
図中、破線で示した無効ページ領域回復の分割単位処理は、第１の実施形態の変形例における図９の処理（作業）ＳＴ１２〜ＳＴ１５と同様である。
【０１２５】
なお、上記分割単位処理が終了し、また消去ブロックレベルでの無効ページ領域の回復作業が未完了である場合は、作業中の消去ブロックの所在、或いは必要に応じて消去の累計時間等、回復処理の進捗情報を、記憶装置内のメモリかレジスタに保存しておくことが望ましい。
【０１２６】
このような分割単位処理は、処理ごとに一旦作業を終了しても良いが、キャッシュのミスヒットが発生していない場合には、図のように次の分割単位処理を実行しても良い。
【０１２７】
また第３の実施形態において、無効ページ領域回復の分割単位処理を用いた異なる変形例について説明する。
【０１２８】
図１６は、第３の実施形態に第２の変形例であって、無効ページ領域回復の分割単位処理を説明するためのフローチャートである。
【０１２９】
ここではキャッシュヒットを起点として回復処理を実施している。
すなわちホストからのアクセスがキャッシュメモリ１１７にヒットすると、ＣＰＵ１１９はアクセスへの応答を制御回路１２２に渡し（ＳＴ６１）、無効ページ領域回復の分割単位処理を実施する。破線で示した無効ページ領域回復の分割単位処理は、第１の実施形態の変形例における図９の処理（作業）ＳＴ１２〜ＳＴ１７と同様である。
【０１３０】
以上３つの第１〜第３の実施形態について詳細に述べたが、このように無効ページ領域の回復処理を分割して実施する際、最も分割単位が長くなるのはブロックの消去である。
たとえばＮＡＮＤ型フラッシュメモリでは１ページのコピーが１５０〜２００マイクロ（μ）秒程度で終了するのに対し、消去は１〜２ミリ（ｍ）秒かかる。したがってホストがアクセスを行う際の遅延時間は、消去時がワーストとなる。
【０１３１】
たとえば、ホスト上のプログラムが記憶装置を用いて作業を行う場合、そのワーストの遅延を基準として全ての作業に対応したマージンを見込むケースがしばしばある。その場合プログラムの処理速度は大きな影響を受けてしまう。
【０１３２】
このような課題に対処するには、アクセスの合間に行う回復処理はページコピーのみに留め、ブロック消去は電源オン時またはオフ時にまとめて実施すれば良い。
電源オン・オフ時であれば、ユーザーは体感速度として２００ミリ（ｍ）秒以下の遅延は殆ど気にしない。したがって電源オンまたはオフ時だけでは１００ブロック以上を消去することが可能となる。
【０１３３】
または未消去ブロックの消去のみを実施するコマンドを持たせても良い。たとえばユーザーからの入力が暫く無い場合、ホストがそのようなコマンドを実施すれば、ユーザーが体感的な遅れを感じることなくブロック消去を実施することができる。
【０１３４】
第１の実施形態について、電源オン時にまとめて消去を実行した例を、第４の実施形態として説明する。第４の実施形態の装置構成は第１の実施形態の図５と同じである。
【０１３５】
図１７は、本第４の実施形態における無効領域の回復処理を説明するためのフローチャートである。
【０１３６】
記憶装置７０に電源が入り、アクセスに必要となる初期化がなされると（ＳＴ７１）、まず装置内部では予め消去可能としてマークされていた退避済みブロックの消去が開始される（ＳＴ７２）。その完了の後に、無効ページ領域の回復処理が実行される。それは以下のステップＳＴ７３〜ＳＴ７６の処理フローの繰り返しから成る。
【０１３７】
＜ステップＳＴ７３＞
無効化されたページ領域を探査し、その回復処理を実施すべきか否かを、しかるべきアルゴリズムで判定する。回復処理が不要な場合は、処理を終了し、単にアクセスを待って何も実施しない通常の待機状態に入る。
【０１３８】
＜ステップＳＴ７４＞
回復処理が必要と判定されれば、回復対象とする消去ブロックと、退避先の空き領域を選択し、回復処理をスタートする。
【０１３９】
＜ステップＳＴ７５＞
回復対象となった消去ブロック中に、退避すべき有効ページ領域があるか否かを判定する。もしあれば、上位から１ページ領域ずつ空き領域に上詰でコピーしていく（ＳＴ７７）。各ページのコピーが完了する都度に、アドレス変換テーブルを更新する（ＳＴ７８）。
【０１４０】
＜ステップＳＴ７６＞
全ての有効ページ領域の退避が完了したら、元ブロックを「退避済みブロック」としてマークする。マークの手法としてはたとえばブロックの末尾ページにフラグを立てるか、或いは退避済みブロックの物理アドレスを装置内のどこかに保存する。
【０１４１】
外部からアクセスコマンドが入力されるとＣＰＵに割り込みが入り、アクセスへの応答処理プログラムに制御が渡される。この場合、フラッシュメモリへのページデータの書き込みが開始されていれば、その１ページの書き込みを完了させ、アドレステーブルを更新させてから処理を中断する。これにより数百マイクロ（μ）秒程度の遅延で安全にアクセス処理を開始できる。
【０１４２】
以上一例を示したが、第１〜第３の実施形態および各々の変形例の全てに対して同様の対処が可能であることは言うまでも無い。
【０１４３】
なお、上述のような場合でも、ホストからの書き換え時に消去済みブロック数が不足した場合は、その時点で消去を実施するのが望ましい。
【０１４４】
以上、本発明を用いた記憶装置について具体的な実施形態を述べたが、装置内部の構成はモディファイすることができる。
たとえば図５におけるページバッファ７２は、制御回路７４内部のＲＡＭ７７上に構築しても良い。そのような場合にはインターフェース回路７１、フラッシュメモリ７５，７６および制御回路７４は共通の内部データバス７３で接続された構成となる。
またはページバッファ７２とフラッシュメモリ７５，７６との間にＥＣＣによるエラー訂正回路を設けて、ページバッファからフラッシュメモリへのページデータ書き込み時には符号化を実施してパリティビットを追加し、フラッシュメモリからページバッファへのページデータ読み出し時には復号化を行なっても良い。そのような装置構成の違いに関わらず、本発明を適用することは可能である。
または先に説明した第１〜第４の実施形態で述べたように、アドレス変換テーブル７８，１２１に従ってページ単位のアドレス変換を実施した後、フラッシュメモリ内の欠陥ブロックをスキップするために、さらにブロックレベルでのアドレス変換を挿入しても良い。このような場合でも、前述した例と同様の制御で、本発明は問題なく適用することが可能である。
【０１４５】
ところでここまでは、独立した記憶装置の内部に回復処理機構を設ける場合について説明してきた。
しかし、このようなアドレス変換テーブルの管理と回復処理を、ホスト側の制御で実施することも可能である。そのようなコンピュータシステムを第５の実施形態として、図１８に示す。
【０１４６】
図１８は、本第５の実施形態に係るコンピュータシステムの構成例を示す図である。また、図１９は、第５の実施形態に係る制御回路のアドレス変換テーブルの構成例を示す図である。
【０１４７】
図１８のコンピュータシステム１３０は、処理ユニットとしてのＣＰＵ１３１、システムメモリであるＲＡＭ１３２、システムバス１３３、ブリッジ回路１３４、ＮＡＮＤ型フラッシュメモリ１３５，１３６、データバス１３７、およびページバッファ１３８を、主構成要素として有している。
【０１４８】
ＣＰＵ１３１は３２ビットのシステムバス１３３を介してシステムメモリであるＲＡＭ１３２と接続されている。さらに、システムバス１３３にはブリッジ回路１３４が接続されている。ブリッジ回路１３４に繋がる３２ビットのデータバス１３７には、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ１３５，１３６が並列接続されている。２つのチップのフラッシュメモリ１３５，１３６は読み出しや書き込みにおいて、同時並列にアクセスされる。
ページバッファ１３８はアクセスされたページ領域を一時記憶するバッファであり、ブリッジ回路１３４に内蔵されている。
ブリッジ回路１３４はＣＰＵ１３１から各種コマンドを受け取り、フラッシュメモリ１３５，１３６とＣＰＵ１３１またはシステムメモリ１３２との間のデータのやり取りを、ページバッファ１３８を用いて媒介する。
ブリッジ回路１３４が受け取るコマンドは、たとえばフラッシュメモリ１３５，１３６の所定のページへのアクセスの他、同フラッシュメモリの所定ブロックの消去、および所定ページの指定アドレスへのコピー、フラッシュメモリのリセット等である。
【０１４９】
一方、システムメモリ１３２内には上記フラッシュ記憶システムを制御するためのドライバー１３９が常駐している。このドライバー１３９は、オペレーティイングシステム（ＯＳ）やアプリケーションからの記憶装置へのアクセスを受け、同じメモリ中に構成されたアドレス変換テーブル１４０を参照してアクセス時のページアドレスを変換する。
【０１５０】
本記憶システムのアクセスは以下のようになされる。ここでは簡単のため、１６進数のアドレスは次のように割り振られるとする。たとえば外部入力アドレスが”０ｘ５５００Ｃ”であった場合、上位の”０ｘ５５００”はページアドレス、下位”０ｘＣ”はページ領域内のセクタドレスであり、本記憶装置は１セクタ単位でランダムアクセスが可能である。
【０１５１】
読み出しの際、たとえばアプリケーションからアドレス”０ｘ５５００Ｃ”のセクタの読み出しが要求されると、ドライバー１３９は上位のページアドレスを受けてアドレス変換テーブル１４０から論理ページアドレス（ＬＡ：ＬＯＧＩＣＡＬ  ＡＤＤＲＥＳＳ）”０ｘ５５００”に対応する物理ページアドレス（ＰＡ：ＰＨＩＳＩＣＡＬ  ＡＤＤＲＥＳＳ）”０ｘ００Ｂ０”を取得する。
この物理ページアドレスＰＡ中、上位の”０ｘ００”はメモリチップのフラッシュメモリ１３５，１３６内の消去ブロック１４１，１４２のアドレスである。下位”０ｘＢ０”は各消去ブロック内のページ領域１４３，１４４のアドレスである。
この物理アドレスをもとに、ブリッジ回路１３４を介してメモリチップのフラッシュメモリ１３５，１３６が共にアクセスされ、各々からページアドレス”０ｘ００Ｂ０”に格納されたページ領域１４３，１４４のデータが読み出され、ページバッファ１３８に格納される。
ブリッジ回路１３４はその中から、下位アドレス”０ｘＣ”に相当するセクタを選択し、ＣＰＵ１３１またはシステムメモリ１３２に出力する。
【０１５２】
一方、アプリケーションから”０ｘ５５００Ｃ”への書き込み要求を受けた場合は、まず読み出しと同様の手順でドライバー１３９によってアドレス変換が実施され、ページ領域１４３，１４４のデータがメモリチップのフラッシュメモリ１３５，１３６から読み出され、ページバッファ１３８に格納される。その後下位アドレス”０ｘＣ”に相当するセクタが選択され、新規データに更新される。
更新後のページデータは、フラッシュメモリ１３５，１３６に書き戻されるが、その際各々の空き領域１４５，１４６に書き込まれる。このページ領域の物理ページアドレスは”０ｘ０２８０”であり、すなわち消去ブロック”０ｘ０２”内の”０ｘ８０”のページに相当する。またこの処理の前まで、その領域はアドレス変換テーブル１４０のいずれの物理アドレスフィールドにも登録されていない、未使用の空きページであった。
更新後のデータがこの領域に追記の形で書き込まれるとともに、アドレス変換テーブル１４０の論理アドレス”０ｘ５５００”に対応する物理アドレスフィールドには、空き領域１４５，１４６の物理ページアドレス”０ｘ０２８０”が登録される。
【０１５３】
ところで上述の如き追記型書き込みを実施した場合、更新前のデータが格納されていた物理ページアドレス”０ｘ００Ｂ０”に相当するページ領域１４３，１４４はアドレス変換テーブル１４０の物理アドレスフィールドから削除され、無効化される。
しかしそれらにはデータが書き込まれており、そのままでは空き領域として使用することもできない。上述のような書き換えを何度も繰り返すと、多くの無効ページ領域が発生する。それらは再度空き領域として使用できるよう、消去して回復させる必要がある。またその場合、消去ブロック１４１，１４２に残された有効データは退避させなければならない。
【０１５４】
このような回復処理は、たとえば図７（Ａ）〜（Ｃ）に関連つけて前述したのと同様のアルゴリズムで、空き領域を持つブロック１４７，１４８を使用して行われる。すなわち回復処理の対象ブロックである消去ブロック１４１，１４２上の有効なページ領域群のデータを退避先ブロック１４７，１４８内の空き領域に上詰めにして順番にコピーし、それに応じてアドレス変換テーブル１４０の物理アドレスを更新する。全て有効ページデータがコピーされ終わると、元ブロック１４１，１４２を消去する。
【０１５５】
ただし本第５の実施形態では、ドライバー１３９を用いてホストＣＰＵ１３１がブリッジ回路１３４にコマンドを送ることで、それらの処理（作業）を制御する。
たとえば上記回復作業における有効ページデータのコピーは、ホストＣＰＵ１３１からのコピーコマンドに応じて、ブリッジ回路１３４が所定のページをコピー元からページバッファ１３８に読み出してコピー先に書き込む。または所定のブロックを消去する。この際システムバス１３３は使用されないので、もし必要があれば、ＣＰＵ１３１は上記コマンドを送信した後は別の処理（作業）を並行して実施することも可能である。
【０１５６】
図２０は、プリエンプティブなマルチタスクシステムを用いた回復処理の一例を示すフローチャートである。
ホストＣＰＵ１３１はタイマーや優先順位を用いたスケジューリングに応じて回復タスクを適時実行する。各実行には５ミリ秒のタイムスライスが割り当てられるとする。ホストはこの割り当て時間を用いて、回復処理を分割して実行する。
【０１５７】
回復タスクが開始されると、ホストＣＰＵ１３１はまずブリッジ回路１３４に記憶システムの状態を問い合わせ、記憶システムが処理（作業）中か否かをチェックする（ＳＴ８１）。処理（作業）中であればタスクは終了し、記憶システムが待機中であれば、ドライバー１３９のプログラムに従って、以下のような無効領域の分割回復処理を実施する。
【０１５８】
＜ステップＳＴ８２＞
無効化されたページ領域を探査し、その回復処理を実施すべきか否かを、しかるべきアルゴリズムで判定する。ここで、消去ブロックレベルで完了していない未完了の回復処理が残存している場合、その継続処理に進む。回復処理が不要な場合は、タスクを終了する。
【０１５９】
＜ステップＳＴ８３＞
回復処理が必要と判定されれば、回復対象とする消去ブロックと、退避先の空き領域を選定し、回復処理をスタートする。未完了の回復処理が残存している場合、そこで作業対象となっていた消去ブロックと、退避先の空き領域が選択される。
【０１６０】
＜ステップＳＴ８４＞
回復対象となった消去ブロック中に、退避すべき有効ページ領域があるか否かを判定する。もしあれば、再上位の１ページを空き領域に上詰でコピーする（ＳＴ８６）。さらにアドレス変換テーブル１４０を更新して分割単位処理を完了する（ＳＴ８７）。
なお、本例のように一回のタスク実行に５ミリ秒の割り当てがある場合、その間に複数のページコピーが可能である。従って割り当てられたタイムスライスに従って処理ページの上限を設け（ＳＴ８８）、それに達するまでコピー処理を繰り返しても良い。
【０１６１】
＜ステップＳＴ８５＞
全ての有効ページ領域の退避が完了していたら、元ブロックを消去して、分割単位処理を完了する。
【０１６２】
なお、上記分割単位処理が終了し、また消去ブロックレベルでの無効ページ領域の回復作業が未完了である場合は、作業中の消去ブロックの所在を含む回復処理の進捗情報を、たとえばシステムメモリ１３２のワークエリア１４１内に保存しておくことが望ましい。
【０１６３】
以上、ホストが回復処理を制御するケースについて一例を述べたが、記憶装置の内部に回復処理機構を設けた場合と同様に、各種バリエーションが存在し得る。上述の如く他のタスクと時分割で実行する他に、たとえばユーザーからのキー入力やマウス入力が一定時間なければ回復処理を開始し、入力が入ったところで回復処理を中断しても良い。またはシステムの立ち上げや立ち下げ時にブロックの消去処理を実行しても良い。
中途にＥＣＣによるエラー訂正や、欠陥ブロック回避のための、ブロック単位のアドレス変換を挿入してもよく、その制御はホスト側で行なっても、記憶装置側、たとえばブリッジ回路１３４の内部で独立して行っても良い。
【０１６４】
ところで、これまで述べてきたような無効領域の回復処理を、ユーザーからのフラッシュメモリへのアクセスの無い期間を抽出して実施する場合、以下のような課題がある。
【０１６５】
たとえばメモリカードのような脱着可能な記憶装置の場合、待機時に回復処理を実施していても、ユーザー本人はアクセスを明示的に指示した訳ではない。したがってカードをホストから引き抜いてしまう可能性があり、その際記憶装置には電源瞬断が発生してしまう。また組み込みストレージであっても、ホスト機器の電源が、コンセントの引き抜き等で突然落とされてしまう場合がある。
【０１６６】
この際に回復処理の進捗情報が揮発性メモリに格納されていると、それらが消失し、回復途上にあった消去ブロックや退避先の領域は、非常に不安定な状況に陥ってしまう。
したがってこのようなケースでは、回復処理の進捗状況の少なくとも一部は、いわゆる不揮発性ＲＡＭに記録されているのが望ましい。
【０１６７】
不揮発性ＲＡＭとは不揮発性でありながら１マイクロ（μ）秒以下でランダムアクセスが可能なＲＡＭの性質を兼ね備える半導体メモリであって、強誘電体膜を用いたＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ＲＡＭ）、強磁性体を用いたＭＲＡＭ（Ｍａｇｎｅｔｉｃ  ＲＡＭ）や、相変化材料を用いたＯＵＭ（Ｏｖｏｎｉｃ  Ｕｎｉｆｉｅｄ  Ｍｅｍｏｒｙ）、ＲＲＡＭ等が提案されている。
【０１６８】
ＦｅＲＡＭは強誘電体キャパシタの分極方向の違いでデータを記憶する半導体メモリである。たとえばＵＳ４８７３６６４においてＳ．Ｓｈｅｆｆｅｉｅｌｄらがその一形態を提案している。
ＭＲＡＭは強磁性膜のスピン方向の違いでデータを記憶する半導体メモリである。たとえばＩＳＳＣＣ２０００の論文ダイジェストの１２８ページに、Ｒ．Ｓｃｈｅｕｅｒｌｅｉｎらが論文を掲載している。
ＯＵＭはたとえばカルコゲナイド膜の相転移でデータを記憶する半導体メモリである。たとえばＩＥＤＭ２００１の論文ダイジェストの８０３ページに、Ｓ．Ｌａｉらが論文を掲載している。
ＲＲＡＭは磁気抵抗効果材料の抵抗ヒステリシスでデータを記憶する半導体メモリである。たとえばＩＥＤＭ２００２の論文ダイジェストの７．５にはＷ．Ｗ．Ｚｈｕａｎｇらが論文を掲載している。
それらの不揮発性メモリは、いずれもセルレベルのアクセス速度や書き換え回数において、フラッシュメモリより数桁性能が高い。
【０１６９】
たとえば図５に関連付けた第５および第２の実施形態の場合、少なくとも回復処理中のブロックアドレスは保存される必要があり、不揮発性ＲＡＭに格納されている必要がある。
さらにアドレス変換テーブル７８やページ管理テーブル８６も進捗情報の一部を含むので、不揮発性ＲＡＭに保存されるのが望ましい。
たとえば図５のＲＡＭ７７をＳＲＡＭと不揮発性ＲＡＭの混合で構築し、上記回復処理の進捗状況や各種管理テーブルを不揮発性ＲＡＭ側に、記憶装置制御用のファームウェアプログラムやワークエリアをＳＲＡＭ側に構築しても良い。
【０１７０】
このような事情は、無効領域の回復処理において進捗情報を保存している他の実施形態においても、全て同様である。
【０１７１】
図２１は、第６の実施形態を示す図であって、そのようなＥＣＣ処理と欠陥ブロック管理を導入した、第３の実施形態（図１２）の装置構成上の応用変形例を示す図である。
図２２は、第６の実施形態に係る制御回路のアドレス変換テーブルおよびページ状態の管理テーブルの構成例を示す図である。
【０１７２】
記憶装置１１０Ａにおいて、３２ビットの内部データバス１１３Ａには、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ１１５Ａ，１１６Ａが並列接続されている。２つのチップのフラッシュメモリ１１５Ａ，１１６Ａは読み出しや書き込みにおいて、同時並列にアクセスされる。
ページバッファ１１２Ａはアクセスされたページ領域を一時記憶するバッファであり、外部とのインターフェース回路１１１Ａに第２の内部データバス１１８Ａを介して接続されている。さらに第２の内部データバス１１８Ａにはキャッシュメモリ１１７Ａが接続されている。
制御回路１２３はフラッシュメモリ１１５Ａ，１１６Ａとページバッファ１１２Ａの間の転送を制御する。制御回路１２３にはフラッシュメモリ内の欠陥ブロックがアクセスされぬよう、その内蔵ＲＡＭ１２４上に、ブロック単位のアドレス変換でそれらをスキップさせるためのアドレス変換テーブル１２６が構築されている。
さらに制御回路１２３にはＥＣＣ回路１２５が搭載されており、ページバッファ１１２Ａからフラッシュメモリ１１５Ａ，１１６Ａにデータが書き込まれる際には符号化によるパリティビットの追加を行い、フラッシュメモリ１１５Ａ，１１６Ａからページバッファ１１２Ａにデータが読み出される際には復号化によるエラー訂正を実施する。
制御回路１１４Ａはページバッファ１１２Ａ、キャッシュメモリ１１７Ａおよびインターフェース回路１１１Ａの間のデータのやりとりを管理するコントローラであり、内蔵ＣＰＵ１１９Ａによって制御される。同じく内蔵されたＲＡＭ１２０Ａには、ＣＰＵ１１９Ａを制御するためのプログラム領域やワークエリアが確保されるとともに、アドレス変換テーブル１２１Ａが構築されている。
さらに制御回路１１４Ａには、ＣＰＵ１１９Ａの制御無しでキャッシュメモリ１１７Ａとインターフェース回路１１１Ａ間のデータ転送を制御する制御回路１２２Ａが搭載されている。
なお本図面においては制御線の記載は省略されている。
【０１７３】
本第６の実施形態における第３の実施形態（図１２）との主たる相違は、ページバッファ１１２Ａとフラッシュメモリ１１５Ａ，１１６Ａとの間の転送に関して、アドレス変換テーブル１２６とＥＣＣ回路１２５を保有する専用の制御回路１２３が設けられていることである。
これにより外部から入力された論理アドレスは、それを元にフラッシュメモリ１１５Ａ，１１６Ａへのアクセスが成される場合、アドレス変換テーブル１２１Ａと１２６により二重の変換を受ける。さらに入出力データにもＥＣＣによる符号化、復号化の変換が施される。
具体的な動作を以下に述べる。
【０１７４】
読み出しの際、外部から”０ｘ５５００Ｃ”のセクタドレスが入力されると、制御回路１１４Ａは上位のページアドレスを受けて内蔵ＲＡＭ１２０Ａにアクセスし、アドレス変換テーブル１２１Ａから論理ページアドレス（ＬＰＡ：ＬＯＧＩＣＡＬ  ＰＡＧＥ  ＡＤＤＲＥＳＳ）”０ｘ５５００”に対応する物理ページアドレス（ＰＰＡ：ＰＨＩＳＩＣＡＬ  ＰＡＧＥ  ＡＤＤＲＥＳＳ）”０ｘ００Ｂ０”を取得する。
この物理ページアドレスＰＡ中、上位の”０ｘ００”は消去ブロックのアドレスを示すが、さらに制御回路１２３に入力されると、この部分は論理ブロックアドレス（ＬＢＡ：ＬＯＧＩＣＡＬ  ＢＬＯＣＫ  ＡＤＤＲＥＳＳ）として扱われ、アドレス変換テーブル１２６から物理ブロックアドレス（ＰＢＡ：ＰＨＩＳＩＣＡＬ  ＢＬＯＣＫ  ＡＤＤＲＥＳＳ）”０ｘ０１”が取得される。これがメモリチップのフラッシュメモリ１１５Ａ，１１６Ａ内の消去ブロック１２７，１２８のアドレスである。
【０１７５】
一方、下位”０ｘＢ０”は各消去ブロック１２７，１２８内のページ領域１２７１，１２８１のアドレスである。
この物理アドレスをもとにフラッシュメモリ１１５Ａ，１１６Ａが共にアクセスされ、各々からページアドレス”０ｘ０１Ｂ０”に格納されたページ領域１２７１，１２８１のデータが読み出され、さらにＥＣＣによる復号化が施されて、ページバッファ１１２Ａに格納される。
【０１７６】
一方、外部から”０ｘ５５００Ｃ”に書き込みを行う場合は、まず読み出しと同様の手順でページ領域１２７１，１２８１のデータがフラッシュメモリ１１５Ａ，１１６Ａから読み出され、ページバッファ１１２Ａに格納される。その後バッファ内の所望の箇所が、書き込みデータに更新される。
更新後のページデータは、フラッシュメモリ１１５Ａ，１１６Ａに書き戻されるが、その際読み出し元のページ領域１２７１，１２８１が書き換えられるのでは無く、アドレス変換テーブル１２１Ａのいずれの物理アドレスフィールドにも登録されていない、未使用の空きページに書き込まれる。そのような空きページは制御回路１１４Ａ側で管理されており、たとえば図６のような管理テーブル８６が使用されて、物理ページアドレス” ０ｘ０２８０”が選択される。
このうち上位の”０ｘ０２”は制御回路１２３に入力されると、アドレス変換テーブル１２６から”０ｘ０３”に変換され、合成されたアドレス”０ｘ０３８０”から、メモリチップのフラッシュメモリ１１５Ａ，１１６Ａのページ領域１２９ａ，１２９ｂに、ページバッファ１１２Ａの更新済みデータが書き込み転送される。この際データには、ＥＣＣ符号化によるパリティビットが追加される。
【０１７７】
一方、制御回路１１４Ａは、アドレス変換テーブル１２１Ａの論理ページアドレス”０ｘ５５００”に対応する物理ページアドレスのフィールドに、” ０ｘ０２８０”を登録し、元の物理ページアドレス”０ｘ００Ｂ０”は無効化ページ領域として管理する。いずれのページアドレスも制御回路１２３の変換を経れば、フラッシュメモリ１１５Ａ，１１６Ａ上の正しいページ領域をポイントする。
【０１７８】
本第６の実施形態においては、制御回路１１４Ａで導出される物理ページアドレスは、制御回路１２３によって一対一のブロックレベルの変換を受けるが、その際同一ブロック内の各ページの相対位置は全く変わらない。したがって制御回路１１４Ａからは、制御回路１２３で施される各種変換はブラックボックスとみなして良い。すなわち制御回路１１４Ａは、メモリチップのフラッシュメモリ１１５Ａ，１１６Ａと制御回路１２３を一体化したフラッシュメモリデバイスとみなし、独立した論理で任意のアクセスを実施しても、齟齬は発生しない。これはＥＣＣによる符号化、復号化についても同様である。
その結果、制御回路１１４Ａは、第３の実施形態と全く同様のアルゴリズムで無効化領域の回復処理を実施することが可能となる。
【０１７９】
次に、消去ブロックの消去を実行する前に、各データ領域ごとに、少なくとも領域の一部を読み出し、読み出した値からデータ領域に有効なデータが記録されているか否かを判定し、判定の結果、有効なデータが記録されている場合に、データ領域のデータを他の消去ブロックにコピーする機能を有する記憶装置について説明する。
たとえば、図５の第１実施形態は、無効領域を回復させる際、各データ領域が無効か有効かの判定にテーブル８６の”Ｐａｇｅ  Ｓｔａｔｅ”フラグを使用した。しかしこのようなフラグをデータ領域ごとに設けると、テーブル８６はかなり大きなＲＡＭ容量を占有することになる。したがって、このようなフラグは廃止し、異なる方法でデータ領域の有効判定を行なった方が、ＲＡＭ容量を節約でき、コスト的に有利である。本記憶装置はそのような要請から考案された。
【０１８０】
図２３は、本第７の実施形態に係るコンピュータシステム（記憶システム）の構成例を示す図である。また、図２４は、第７の実施形態に係る制御回路のアドレス変換テーブルおよびアドレス検索テーブルの構成例を示す図である。
【０１８１】
本コンピュータシステム１５０は、インターフェース回路（Ｉ／Ｆ）１５１、制御回路１５２、内部バス１５３、ページバッファ１５４、ＮＡＮＤ型フラッシュメモリ１５５，１５６、制御回路１５７、メモリバス１５８、およびホストシステム１５９を含んで構成されている。
【０１８２】
以上の構成要素のうち、インターフェース回路（Ｉ／Ｆ）１５１、制御回路１５２、内部バス１５３、ページバッファ１５４、ＮＡＮＤ型フラッシュメモリ１５５，１５６、制御回路１５７、およびメモリバス１５８によりファイル記憶装置１６０が構成されている。また、ファイル記憶装置１６０において、ページバッファ１５４、ＮＡＮＤ型フラッシュメモリ１５５，１５６、制御回路１５７、およびメモリバス１５８によりフラッシュメモリデバイス１６１が構成されている。
また、制御回路１５２は、ＲＡＭ１６２を内蔵しており、ＲＡＭ１６２にはワーキングエリア１６３、アドレス変換テーブル１６４、およびアドレス検索テーブル１６５が形成される。
【０１８３】
ファイル記憶装置１６０の内部においては、３２ビットのメモリバス１５８に、１６ビットの入出力を持つ２チップの８ＧｂＮＡＮＤ型フラッシュメモリ１５５，１５６が並列接続されている。２つのチップのフラッシュメモリ１５５，１５６は読み出しや書き込みにおいて、同時並列にアクセスされる。
すなわち、メモリバス１５８は１６ビットバスを２チャンネル備えた構成となっている。各々のフラッシュメモリ１５５，１５６は書き込みや読み出しのアクセスをたとえば４ｋＢのページ単位で行う。したがって、実ページサイズとしては８ｋＢが一括アクセスされることになる。
ページバッファ１５４はアクセスされたページ領域のデータを一時記憶するページバッファである。
フラッシュメモリ１５５，１５６とページバッファ１５４との間のデータの送受は、制御回路１５７で制御されている。
制御回路１５７は、必要に応じて転送データにＥＣＣ符号化によるエラー補正を施す。両フラッシュメモリ１５５，１５６はページバッファ１５４を介してファイル記憶装置１６０の内部バス１５３との間でデータを入出力する。すなわち、左記回路群は実質的に一つのフラッシュメモリデバイス１６１を構成し、ファイル記憶装置１６０の内部バス１５３に接続されているとみなすことができる。その総容量は１６Ｇｂ（２ＧＢ）であり、実ページサイズは８ｋＢである。すなわち、装置内には２５６ｋ個のページデータが格納される。
【０１８４】
さらに内部バス１５３にはインターフェース回路１５１、および制御回路１５２が接続されている。
インターフェース回路１５１はＡＴＡやＰＣＩエクスプレス等の規格に従ってホストシステム１５９との間で、データやコマンドの送受を行う。
制御回路１５２はファイル記憶装置１６０の内部においてページバッファ１５４とインターフェース回路１５１の間のデータの送受を管理する。制御回路１５２に内蔵されたＲＡＭ１６２には、プログラムを実行するためのコードエリアやワーキングエリア１６３が設けられており、さらにページ単位の仮想アドレスを管理するアドレス変換テーブル１６４および正常な空きブロックを検索するアドレス検索テーブル１６５が構築されている。
【０１８５】
本コンピュータシステム１５０においては、ホストシステム１５９は内蔵するＣＰＵによって制御され、アプリケーションやＯＳの要求に応じて、ファイル記憶装置１６０を介して、フラッシュメモリデバイス１６１にユーザーデータを保存する。
制御回路１５２はその間のデータ授受に介在し、アドレス変換テーブル１６４を用いてアドレス変換を伴う等のアクセス管理を実施する。
【０１８６】
ファイル記憶装置１６０はハードディスクと同様に５１２Ｂｙｔｅのセクタをアクセス単位とする。装置内部では簡単のため、１６進数のアドレスが次のように割り振られるとする。
たとえば、外部入力アドレスが”０ｘ０５５０２Ｃ”であった場合、上位２０ビットの”０ｘ０５５０２”はページアドレスであり、最大１Ｍページを管理できる。
一方、下位４ビットの”０ｘＣ”はページ領域内のセクタドレスであり、１ページ中には１６のセクタが含まれる。本記憶装置１６０はページバッファ１５４内のデータを選択することで、１セクタ単位のランダムアクセスが可能である。
【０１８７】
以下、このような記憶装置１６０の内部動作について説明する。
【０１８８】
本第７の実施形態ではページ単位の仮想アドレス管理が採用されている。
図２５は、図２４のアドレス変換テーブルおよび検索テーブルを使用したデータアクセス処理を説明するためのフローチャートである。
ファイル記憶装置１６０の内部におけるフラッシュメモリデバイス１６１への具体的アクセスは、図２５のフローチャートに従って、以下のような手順で実行される。
【０１８９】
＜ステップＳＴ１０１＞
ホストシステム１５９からユーザーデータのアクセスコマンドとともに”０ｘ０５５０２Ｃ”のセクタドレスが入力されると、制御回路１５２は論理ページアドレス部（ＬＰＡ）”０ｘ０５５０２”をインデックスにアドレス変換テーブル１６４を参照し、アクセス対象たるユーザーデータの物理ページアドレス（ＰＰＡ）”０ｘ０６０Ｂ０”を取得する。
【０１９０】
＜ステップＳＴ１０２＞
上記物理ページアドレスをもって、フラッシュメモリデバイス１６１がアクセスされ、ページバッファ１５４内にユーザーデータが格納されたページグループが読み出される。その後セクタドレス”０ｘＣ”に相当する部分がページバッファ１５４から選択的にホストシステム１５９に出力され、読み出し動作が完了する。
【０１９１】
さらにデータの更新は以下のように実施する。
同じ”０ｘ０５５０２Ｃ”のセクタを更新するとする。その場合、まずページバッファ１５４に所望のページを読み出す必要があり、その手順はステップＳＴ１０１，ＳＴ１０２と同様である。
ステップＳＴ１０１，ＳＴ１０２の読み出し時と同様に、フラッシュモメモリデバイス１６１より読み出した所望のデータをページバッファ１５４に格納する。
【０１９２】
＜ステップＳＴ１０３＞
ページバッファ１５４上で所望のセクタ箇所を更新する。
【０１９３】
＜ステップＳＴ１０４＞
更新したユーザーデータのフラッシュメモリデバイス１６１への書き込み先として、ＲＡＭ１６２内に常駐したアドレス検索テーブル１６５およびレジスタ１６６（図２４）から、適当なページ領域の物理ページアドレス（ＰＰＡ）が選択される。
ここでは簡単のため、物理ページアドレスは、上位１２ビットの物理ブロックアドレス部（Ｐｈｉｓｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ  ：ＰＢＡ）と下位８ビットのページオフセット部よりなるとする。この時各消去ブロックは２５６ページ（２８）より構成される。
アドレス検索テーブル１６５には、各ブロックごとにそれらが現在使用されているか、もしくは消去済みの空き状態であるかが、”Ｕｓｅｄ  Ｆｌａｇ”でマークされている。さらに欠陥ブロックの場合、”Ｄｅｆｅｃｔ  Ｆｌａｇ”が”１”となっている。
データの書き込みは、消去済みブロックの先頭ページから順に実行されていく。前回の書き込んだページの物理アドレスは、レジスタ１６６に保存されており、書き込み先にはそれがインクリメントされたページが順次選択される。選択がブロックの末尾に達したら、それ以降のブロックの”Ｕｓｅｄ  Ｆｌａｇ”と”Ｄｅｆｅｃｔ  Ｆｌａｇ”がスキャンされ、次の未使用かつ良品のブロックが検出されて、その先頭ページが選択される。
レジスタ１６６の値は現在”０ｘ０ＡＡ０１”であり、制御回路１５２はまずユーザーデータの書き込み先として、それをインクリメントした物理ページアドレス”０ｘ０ＡＡ０２”を選択する。
【０１９４】
＜ステップＳＴ１０５＞
上記物理ページアドレスをもって、フラッシュモメモリデバイス１６１がアクセスされ、ページバッファ１５４内のユーザーデータがフラッシュメモリデバイス１６１に一括書き込みされる。書き込みが完了すると、アドレス変換テーブル１６４が更新され、論理ページアドレス（ＬＰＡ）”０ｘ０５５０２”に対応する物理ページアドレス（ＰＰＡ）は”０ｘ０ＡＡ０２”に更新される。これに伴って旧物理ページアドレス”０ｘ０６０Ｂ０”に相当するページ領域は無効とる。
【０１９５】
＜ステップＳＴ１０６＞
さらに無効化された旧データのページ”０ｘ０６０Ｂ０”の予備領域に所定の値を書き込んで、無効である旨を刻印する。なおこのような作業はブロック内のページの書き込み順が制限されたフラッシュでは実施できない。この対処については後述する。
【０１９６】
ところで、上述のような追記型書き込みを実施した場合、更新前のデータが格納されていた物理ページアドレス” ０ｘ０６０Ｂ０”に相当するページ領域はアドレス変換テーブル１６４の物理アドレスフィールドから削除され、外からアクセスできなくなる。すなわち無効化される。
しかしそれらにはデータが書き込まれており、そのままでは空き領域として使用することもできない。上述のような書き換えを何度も繰り返すと、多くの無効ページ領域が発生する。それらは再度空き領域として使用できるよう、消去して回復させる必要がある。またその場合、消去ブロック”０ｘ０６０”に残された他の有効データは退避させなければならない。
【０１９７】
このような回復処理は、たとえばまず対象ブロック内の有効データを、更新の際と同様に一旦ページバッファに読み出してから、他のブロックの空き領域に追記で書き込んでいき、それによって実質的な退避を行なえば良い。すなわち、有効ページを仮更新することで、その元領域を全て無効化する。その後、対象ブロックを消去することによって、回復処理が実施される。
【０１９８】
図２６（Ａ）〜（Ｃ）は、本第７の実施形態に係る無効領域の回復手順を説明するための図である。
図２６（Ａ）〜（Ｃ）には消去ブロック１７０，１７１内部の有効データを退避し、無効ページ領域を実質的に回復させる手順を、概念的に図解している。
【０１９９】
手順＜１１＞
上述したような追記による書き換えが進行し、消去ブロック１７０，１７１には、一度データが書き込まれた後、更新によって無効化されたページ領域群１７５，１７７が、有効なページ領域群１７４，１５６，１７８と共存しているとする。ここで有効ページ領域のデータを残しつつ、無効化領域を空き領域に回復させる必要がある。一方、ブロック１７２，１７３は現在追記用の空き領域として使用している消去ブロックであり、ページ領域１８３まで書き込みが成されている。
【０２００】
手順＜１２＞
有効なページ領域群１７４，１７６，１７８を消去ブロック１７２，１７３内の空き領域１７９，１８０，１８１に上詰めにして順番にコピーしていく。
一方、無効なページ領域群１７５，１７７はコピーしない。有効ページと無効ページの判定は、消去ブロック１７２，１７３から各ページの予備領域をまず図２３のページバッファ１５４に読み込み、その値に基づいて実施するが、その詳細は後述する。
判定結果が有効ページの場合、今度は対象ページ内のデータ全体をページバッファ１５４に読み込み、消去ブロック１７２，１７３に書き込むとともに、アドレス変換テーブル１６４を更新する。すなわち、各々のページ領域の論理アドレスに対応する物理アドレスフィールドに、コピー先の物理ページアドレスを登録していく。
この操作は、すなわち有効ページ領域群１７４，１７６，１７８を追記方式で書き換える作業に等しい。実際には書き換えずコピーするのみであるが、この作業によって消去ブロック１７０および１７１内の全てのページは無効化され、有効ページ領域のデータは消去ブロック１７２，１７３に実質的に退避させられる。
【０２０１】
手順＜１３＞
消去ブロック１７０，１７１を消去する。これによってその内部は全て空き領域となり、後の追記に使用することが可能になる。これをもって無効領域１７５，１７７は実効的に回復される。
【０２０２】
このように無効ページ領域の回復処理は、各有効ページ領域のコピーによる退避処理と、元消去ブロックの消去よりなる。
また、回復対象となる消去ブロック内の有効ページに通常の更新処理と同様の手順でダミーの更新を施し、それをもってページの退避を実行すれば、回復処理時の有効ページ退避を通常の書き込みアルゴリズムに統合させることが可能である。
この場合、制御が容易になるばかりではなく、フラッシュメモリへの書き込みの均一化等、書き込み時の信頼性向上のための各種工夫を回復処理にも適用することができ、記憶装置の総合的な信頼性を向上させることができる。
【０２０３】
図２７は、本第７の実施形態における具体的な回復処理を説明するためのフローチャートである。
【０２０４】
＜ステップＳＴ１１１＞
ガベッジポインタを参照する。
ガベッジポインタは回復対象となっている消去ブロックの中で、処理中のページの物理アドレス（ＰＰＡ）を示している。回復処理開始時はブロックの先頭を指している。処理が進むにつれて、ブロックの末尾まで順次値がインクリメントされていく。
【０２０５】
＜ステップＳＴ１１２＞
上記ガベッジポインタが指すページを選択し、まずその予備領域のデータを読み込む。予備領域とは、ユーザーデータの格納とは別に、記憶装置システム内で生成された管理用データを格納する領域であり、たとえば２ｋＢｙｔｅのユーザーデータに対して７２Ｂｙｔｅ程度の予備領域がフラッシュメモリ上に予め設けられている。ここに記載された情報を元に、選択したページが有効か無効かを判定する。
【０２０６】
＜ステップＳＴ１１３＞
選択したページが有効か無効かを判定し、判定結果が有効であれば、ダミー更新処理を実施する。すなわちまず選択ページ全体をページバッファに読み込み（ＳＴ１１４）、図２４のアドレス検索テーブル１６５からフラッシュメモリ上の書き込み先を決定し、そこにデータを書き込む（ＳＴ１１５）。すなわちデータを他のブロックにコピー、退避する。
【０２０７】
＜ステップＳＴ１１６＞
ガベッジポインタがブロックの末尾ページであるか否かを判定し、ガベッジポインタがブロックの末尾ページであればガベッジポインタをクリアし（ＳＴ１１７）、対象ブロックを消去する（ＳＴ１１８）。中途であればガベッジポインタをインクリメントし（ＳＴ１１９）、ステップＳＴ１１１に戻って次のページの処理を行う。
【０２０８】
なお、ステップＳＴ１１２の工程で選択ページの全領域を読み込むことにより、ステップＳＴ１１３の読み込み工程を省略することも可能である。
すなわち、まず選択ページの全領域をページバッファに読み込み、その予備領域に記載されていたデータ箇所からそのページが有効か否かを判定する。無効であればそれらは全て破棄してステップＳＴ１１６に移る。
一方、有効ならば、既にページバッファにはページ内の全データが読み込まれているので、読み込み工程を省略してダミー更新処理を実施する。この場合無効ページについてはより多くのデータを読み出す必要があるが、有効ページについては多重の読み出しを防止でき、迅速に処理できる。
【０２０９】
ページ内に記載された予備領域のデータから、そのページの有効／無効を判定する具体的手法を以下に示す。
【０２１０】
まず、図２５におけるステップＳＴ１０６のように、無効となったページの予備領域に、特定の値をフラグとして記載しておけば、この判定はただちに実施できる。しかし消去ブロック内のページの書き込み順序に制限がある場合、既に一度データを書き込んだページ領域の予備領域に、さらにデータを追記できる保証は無い。
【０２１１】
このように一度書き込んだページ領域の部分変更が不可能な場合の判定手法を、前述の図２４の例に従って説明する。
【０２１２】
まず、ページデータを書き込む際に、予備領域に該当する論理アドレスを書き込んでおく。図２４の場合、当初ＬＰＡ”０ｘ０５５０２”の論理アドレスに対し、ＰＰＡ”０ｘ０６０Ｂ０”の物理アドレスが割り振られていた。すなわち、ＰＰＡ”０ｘ０６０Ｂ０”に相当するフラッシュメモリ上のページ領域には、ユーザーデータとともに、その予備領域に論理アドレス”０ｘ０５５０２”が記載されている。
【０２１３】
ここで、ホストからのコマンドでＬＰＡ”０ｘ０５５０２”のデータが更新された場合、更新後のデータはＰＰＡ”０ｘ０ＡＡ０２”に相当するページ領域に書き込まれる。その際、その予備領域にはやはり論理アドレス”０ｘ０５５０２”が記載される。一方、アドレス変換テーブル１６４のＬＰＡ”０ｘ０５５０２”に対応する物理アドレスフィールドは”０ｘ０ＡＡ０２”に更新される。
【０２１４】
ここで、元のデータ領域ＰＰＡ”０ｘ０６０Ｂ０”を含むブロックに回復処理を実施し、ガベッジポインタが左記ページに廻ってきたとする。このとき、予備領域から論理アドレス”０ｘ０５５０２”が読み込まれる。それをインデックスとしてアドレス変換テーブル１６４を参照すると、対応する物理アドレスフィールドは”０ｘ０ＡＡ０２”に更新されているため、選択されたページの物理アドレス”０ｘ０６０Ｂ０”には一致しない。これをもってこのページが無効であることが判定される。
【０２１５】
一方、有効なページであれば、その予備領域に記載された論理アドレスと物理アドレスとの照合は、常にアドレス変換テーブル１６４の照合に一致している。このときには、取得した論理アドレスをもって図２７におけるステップＳＴ１１３以降のダミー更新処理を実施すればよい。この場合、通常アクセスにおいてホストから与えられた論理アドレスにデータ更新を施すのと全く同様の手順で、容易に有効データを退避させることができる。
【０２１６】
なお、ここでは各ページの論理アドレスと物理アドレスとの直接的な対応を判定に使用したが、論理アドレスにはさまざまな形態が可能であり、一般にはホストが入力するアドレス情報に関連付けられたページデータのハンドル値とみなすことができる。
【０２１７】
ところで、ここまでは独立した記憶装置の内部に回復処理機構を設ける場合について説明してきた。しかしこのようなアドレス変換テーブルの管理と回復処理を、ホスト側の制御で実施することも可能である。そのようなコンピュータシステムの例を図９に示す。
【０２１８】
図２８は、本第８の実施形態に係るコンピュータシステムの構成例を示す図である。
【０２１９】
図２８のコンピュータシステム１９０は、処理ユニットとしてのＣＰＵ１９１、システムメモリであるＲＡＭ１９２、システムバス１９３、ブリッジ回路１９４、ＮＡＮＤ型フラッシュメモリ１９５，１９６、データバス１９７、ページバッファ１９８、および制御回路１９９を、主構成要素として有している。
【０２２０】
ＣＰＵ１９１は、３２ビットのシステムバス１９３を介してシステムメモリであるＲＡＭ１９２と接続されている。さらにシステムバス１９３にはブリッジ回路１９４が接続されている。ブリッジ回路１９４に繋がる３２ビットのデータバス１９７には、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ１９５，１９６が並列接続されている。２つのチップのフラッシュメモリ１９５，１９６は読み出しや書き込みにおいて、同時並列にアクセスされる。アクセスされたページ領域を一時記憶するページバッファ１９８および制御回路１９９は、ブリッジ回路１９４に内蔵されている。
【０２２１】
ブリッジ回路１９４は、ＣＰＵ１９１から各種コマンドを受け取り、フラッシュメモリ１９５，１９６とＣＰＵ１９１またはシステムメモリ１９２との間のデータのやり取りを、ページバッファ１９８を用いて媒介する。また、必要に応じて転送データにＥＣＣ符号化によるエラー補正を施す。
ブリッジ回路１９４が受け取るコマンドは、たとえばフラッシュメモリ１９５，１９６の所定のページへのアクセスの他、同フラッシュメモリ１９５，１９６の所定ブロックの消去、および所定ページの指定アドレスへのコピー、フラッシュメモリ１９５，１９６のリセット等である。
【０２２２】
一方、システムメモリ１９２内には上記フラッシュ記憶システムを制御するためのドライバー２００が常駐している。このドライバー２００は、ＯＳやアプリケーションからの記憶装置へのアクセスを受け、同じメモリ中に構成されたアドレス変換テーブル２０１を参照してアクセス時のページアドレスを変換する。また、データ更新時にはアドレス検索テーブル２０２を参照して書き込み先ページアドレスを決定し、更新用データとともにフラッシュメモリ１９５，１９６への書き込み命令をブリッジ回路１９４に送信する。
【０２２３】
このようなケースではＣＰＵ１９１とシステムメモリ１０２よりなるホストシステム２１０自体が図２３における制御回路１５２の役割を代替し、アドレス変換テーブルの管理と無効ページ領域の回復処理を実施する。
すなわち、ドライバー２００はアドレス変換テーブル２０１やアドレス検索テーブル２０２に図２４に示したテーブル１６４，１６５と同じものを使用し、ＯＳやアプリケーションから論理アドレスを受け、物理アドレス（ＰＰＡ）を生成してブリッジ回路１９４にコマンドを送信することで、フラッシュメモリ１９５，１９６の各種アクセスを実施する。
【０２２４】
このようなシステムにおいても本発明は同様に適用することが可能であって、ホストシステム２１０はフラッシュメモリ１９５，１９６に対し、消去ブロックの消去を実行する前に、各データ領域ごとに以下の処理を実施する。
・まず、少なくとも領域の一部を読み出し、
・その値からデータ領域に有効なデータが記録されているか否かを判定し、
・判定の結果有効なデータが記録されていれば、データ領域のデータを他の消去ブロックにコピーする。
【０２２５】
すなわち、本ケースではホストシステム２１０とフラッシュメモリ等を併せて、ひとつの記憶システムを構成しているとみなすことが可能である。
【図面の簡単な説明】
【０２２６】
【図１】ＮＡＮＤ型フラッシュメモリの内部構成例を示す図である。
【図２】記憶装置を構成するフラッシュメモリの概念図を示す図である。
【図３】たとえば消去ブロック内の１ページのみを書き換える際の手順の一例を説明するための図である。
【図４】アドレス変換テーブルを用いた追記型記憶システムにおける管理方法の一例を説明するための図である。
【図５】第１の実施形態に係る記憶装置を示す構成図である。
【図６】第１の実施形態に係る制御回路のアドレス変換テーブルおよびページ状態の管理テーブルの構成例を示す図である。
【図７】第１の実施形態の無効領域の回復手順を説明するための図である。
【図８】第１の実施形態の装置が回復処理を実行する制御手順の例を示すフローチャートである。
【図９】第１の実施形態の変形例であって、無効ページ領域回復の分割単位処理を説明するためのフローチャートである。
【図１０】第２の実施形態に係る回復処理を説明するためのフローチャートである。
【図１１】第２の実施形態の変形例であって、無効ページ領域回復の分割単位処理を説明するためのフローチャートである。
【図１２】第３の実施形態に係る記憶装置を示す構成図である。
【図１３】第３の実施形態に係る制御回路のアドレス変換テーブルの構成例を示す図である。
【図１４】第３の実施形態に係る回復処理を説明するためのフローチャートである。
【図１５】第３の実施形態の変形例であって、無効ページ領域回復の分割単位処理を説明するためのフローチャートである。
【図１６】第３の実施形態の第２の変形例であって、無効ページ領域回復の分割単位処理を説明するためのフローチャートである。
【図１７】第４の実施形態における無効領域の回復処理を説明するためのフローチャートである。
【図１８】本第５の実施形態に係るコンピュータシステムの構成例を示す図である。
【図１９】第５の実施形態に係る制御回路のアドレス変換テーブルの構成例を示す図である。
【図２０】プリエンプティブなマルチタスクシステムを用いた回復処理の一例を示すフローチャートである。
【図２１】第６の実施形態を示す図であって、そのようなＥＣＣ処理と欠陥ブロック管理を導入した、第３の実施形態（図１２）の装置構成上の応用変形例を示す図である。
【図２２】第６の実施形態に係る制御回路のアドレス変換テーブルおよびページ状態の管理テーブルの構成例を示す図である。
【図２３】本第７の実施形態に係るコンピュータシステム（記憶システム）の構成例を示す図である。
【図２４】第７の実施形態に係る制御回路のアドレス変換テーブルおよびアドレス検索テーブルの構成例を示す図である。
【図２５】図２４のアドレス変換テーブルおよび検索テーブルを使用したデータアクセス処理を説明するためのフローチャートである。
【図２６】本第７の実施形態に係る無効領域の回復手順を説明するための図である。
【図２７】本第７の実施形態における具体的な回復処理を説明するためのフローチャートである。
【図２８】本第８の実施形態に係るコンピュータシステムの構成例を示す図である。
【符号の説明】
【０２２７】
７０・・・記憶装置、７１・・・インターフェース回路（Ｉ／Ｆ）、７２・・・ページバッファ、７３・・・内部データバス、７４・・・制御回路、７５，７６・・・ＮＡＮＤ型フラッシュメモリ、７８・・・アドレス変換テーブル、１１０，１１０Ａ・・・記憶装置、１１１，１１１Ａ・・・インターフェース回路（Ｉ／Ｆ）、１１２，１１２Ａ・・・ページバッファ、１１３，１１３Ａ・・・内部データバス、１１４，１１４Ａ・・・制御回路、１１５，１１６、１１５Ａ，１１６Ａ・・・ＮＡＮＤ型フラッシュメモリ、１１７，１１７Ａ・・・キャッシュメモリ、１１８，１１８Ａ・・・第２の内部データバス、１１９，１１９Ａ・・・ＣＰＵ、１２１，１２１Ａ・・・アドレス変換テーブル、１２３・・・制御回路、１２６・・・アドレス変換回路、１３０・・・コンピュータシステム、１３１・・・ＣＰＵ、１３２・・・システムメモリ（ＲＡＭ）、１３３・・・システムバス、１３４・・・ブリッジ回路、１３５，１３６・・・ＮＡＮＤ型フラッシュメモリ、１３７・・・データバス、１３８・・・ページバッファ、１５０・・・コンピュータシステム、１５１・・・インターフェース回路（Ｉ／Ｆ）、１５２・・・制御回路、１５３・・・内部バス、１５４・・・ページバッファ、１５５，１５６・・・ＮＡＮＤ型フラッシュメモリ、１５７・・・制御回路、１５８・・・メモリバス、１５９・・・ホストシステム、１６０・・・ファイル記憶装置、１６１・・・フラッシュメモリデバイス、１６２・・・ＲＡＭ、１６３・・・ワーキングエリア、１６４・・・アドレス変換テーブル、１６５・・・アドレス検索テーブル、１９０・・・コンピュータシステム、１９１・・・ＣＰＵ、１９２・・・ＲＡＭ、１９３・・・システムバス、１９４・・・ブリッジ回路、１９５，１９６・・・ＮＡＮＤ型フラッシュメモリ、１９７・・・データバス、１９８・・・ページバッファ、１９９・・・制御回路、２００・・・ドライバー、２０１・・・アドレス変換テーブル、２０２・・・アドレス検索テーブル、２１０・・・ホストシステム。
【図１】
0005162846.tif 000002
【図２】
0005162846.tif 000003
【図３】
0005162846.tif 000004
【図４】
0005162846.tif 000005
【図５】
0005162846.tif 000006
【図６】
0005162846.tif 000007
【図７】
0005162846.tif 000008
【図８】
0005162846.tif 000009
【図９】
0005162846.tif 000010
【図１０】
0005162846.tif 000011
【図１１】
0005162846.tif 000012
【図１２】
0005162846.tif 000013
【図１３】
0005162846.tif 000014
【図１４】
0005162846.tif 000015
【図１５】
0005162846.tif 000016
【図１６】
0005162846.tif 000017
【図１７】
0005162846.tif 000018
【図１８】
0005162846.tif 000019
【図１９】
0005162846.tif 000020
【図２０】
0005162846.tif 000021
【図２１】
0005162846.tif 000022
【図２２】
0005162846.tif 000023
【図２３】
0005162846.tif 000024
【図２４】
0005162846.tif 000025
【図２５】
0005162846.tif 000026
【図２６】
0005162846.tif 000027
【図２７】
0005162846.tif 000028
【図２８】
0005162846.tif 000029