(57)【要約】【課題】フラッシュメモリを主媒体とする記憶装置に小容量でもヒット率が高く、アクセスのオーバーヘッドも少ないキャッシュメモリを付与することが可能になり、フラッシュメモリへの書き込みを高速化し、書き換え回数も低減させることが可能な記憶装置、コンピュータシステム、およびデータ書き込み方法を提供する。【解決手段】主記憶媒体であるフラッシュメモリデバイスＦＬＭＤ（３５，３６等）と、フラッシュメモリデバイスのためのキャッシュメモリ３８と、制御回路３４と、を有し、制御回路３４は外部から入力された書き込みコマンドとアドレス情報をもとに、入力データの書き込み先をフラッシュメモリデバイス３５，３６またはキャッシュメモリ３８の何れかに、適時選択する。【選択図】図３
2007115004.tif 000002
【特許請求の範囲】
【請求項１】
主記憶媒体であるフラッシュメモリデバイスと、
上記フラッシュメモリデバイスのためのキャッシュメモリと、
制御回路と、を有し、
上記制御回路は外部から入力された書き込みコマンドとアドレス情報をもとに、入力データの書き込み先を上記フラッシュメモリデバイスまたはキャッシュメモリの何れかに、適時選択する
記憶装置。
【請求項２】
上記フラッシュメモリデバイスの書き込み単位または消去単位をもとに、単位区画が設定されており、各単位区画は複数のセクタを含み、
上記セクタまたは連続したセクタ群へのブロックデータの書き込み命令を受けた場合、上記制御回路は上記ブロックデータを上記単位区画に応じてサブブロックに分割し、各サブブロックごとに既定の基準に従って、各サブブロックの書き込み先を上記フラッシュメモリデバイスまたはキャッシュメモリの何れかに選択する
請求項１記載の記憶装置。
【請求項３】
上記単位区画は、ひとつまたは複数の書き込みページを含み、上記フラッシュメモリデバイスの一括書き込み単位である
請求項２記載の記憶装置。
【請求項４】
上記制御回路は、各サブブロックに対して、区画におけるデータの占有状態を検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する
請求項３記載の記憶装置。
【請求項５】
上記制御回路は各サブブロックに対して、同区画または所属データに対応するキャッシュメモリのエントリを検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する
請求項３記載の記憶装置。
【請求項６】
上記制御回路は、書き込み先が上記フラッシュメモリデバイスに選択されたサブブロックのデータのうち、上記キャッシュメモリにヒットしたデータがある場合、対応するキャッシュメモリ上のエントリを解放する
請求項２記載の記憶装置。
【請求項７】
書き込み先がフラッシュメモリデバイスに選択されたサブブロックのデータのうち、キャッシュメモリにヒットしたデータがある場合、対応するキャッシュメモリ上のエントリを上記書き込みデータで更新する
請求項２記載の記憶装置。
【請求項８】
上記制御回路は、書き込み先が上記フラッシュメモリデバイスに選択されたサブブロックと同じ区画内の領域に対応するエントリが上記キャッシュメモリに存在する場合、対応するエントリを当該サブブロックのデータと合成して同時にフラッシュメモリに書き戻す
請求項２記載の記憶装置。
【請求項９】
上記単位区画は、ひとつまたは複数の消去ブロックを含み、上記フラッシュメモリデバイスの一括消去単位である
請求項２記載の記憶装置。
【請求項１０】
上記制御回路は各サブブロックに対して、区画におけるデータの占有状態を検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する
請求項９記載の記憶装置。
【請求項１１】
上記制御回路は、各サブブロックに対して、同区画または所属データに対応するキャッシュメモリのエントリを検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する
請求項９記載の記憶装置。
【請求項１２】
上記制御回路は、各サブブロックに対して、対応区画におけるフラッシュメモリ上の空き状態を検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する
請求項９記載の記憶装置。
【請求項１３】
アプリケーションソフトウェアを実行する処理ユニットと、
ファイルストレージであるフラッシュメモリデバイスと、
上記フラッシュメモリデバイスのためのキャッシュメモリ領域と、を有し、
上記処理ユニットは、ドライバソフトの制御のもとに、アプリケーションソフトウェアからの上記ファイルストレージへの書き込み要求を受けて、当該アドレス情報をもとに、入力データの書き込み先を上記フラッシュメモリデバイスまたは上記キャッシュメモリの何れかに、適時選択する
コンピュータシステム。
【請求項１４】
フラッシュメモリデバイスと、上記フラッシュメモリデバイスのためのキャッシュメモリ領域を有する記憶装置へのデータ書き込み方法であって、
上記フラッシュメモリデバイスの書き込み単位または消去単位をもとに、単位区画が設定されており、各単位区画は複数のセクタを含み、
上記セクタまたは連続したセクタ群へブロックデータを書き込む要請が生じた場合、当該ブロックデータが上記区画に応じてサブブロックに分割され、
各サブブロックごとに既定の基準に従って、各サブブロックの書き込み先が上記フラッシュメモリデバイスまたはキャッシュメモリ領域の何れかに選択される
データ書き込み方法。
【請求項１５】
上記単位区画は一つまたは複数の書き込みページより形成されるフラッシュメモリデバイスへの一括書き込み単位であり、各サブブロックの書き込み先は、対応する区画におけるデータの占有状態、あるいは当該区画に対応した上記キャッシュメモリのエントリが検査され、当該検査結果に応じて選択される
請求項１４記載のデータ書き込み方法。
【請求項１６】
上記単位区画は、ひとつまたは複数の消去ブロックを含むフラッシュメモリデバイスの一括消去単位であり、各サブブロックの書き込み先は、対応する区画におけるデータの占有状態、あるいは当該区画に対応した上記キャッシュメモリのエントリ、あるいは上記フラッシュメモリ上の対応区画における空き領域の状態が検査され、当該検査結果に応じて選択される
請求項１４記載のデータ書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリを有する記憶装置、この記憶装置を用いたコンピュータシステム、およびデータ書き込み方法に関するものであり、特に記憶装置におけるデータ転送の高速化に関するものである。
【背景技術】
【０００２】
近年、デジタルスチルカメラやモバイルコンピュータ機器の記憶媒体として、フラッシュメモリが注目されている。
【０００３】
フラッシュメモリは、トンネリングやホットエレクトロン加速を用いて、電子にゲート絶縁膜を通過させ、それらを浮遊ゲートやトラップ層に注入し、セルトランジスタの閾値を変化させることでデータを記憶させる半導体メモリである。積層ゲート構造やＭＮＯＳ構造等を用いたトランジスタ１つのみでメモリセルを構成できるため、安価かつ大容量のメモリを実現できる。
その代表例として、ＮＡＮＤ型フラッシュメモリが挙げられる。
【０００４】
図１は、ＮＡＮＤ型フラッシュメモリの内部構成例を示す図である。
図１のＮＡＮＤ型フラッシュメモリは、ビット線ＢＬ１〜ＢＬｎに接続された複数のメモリユニット１−１〜１−ｎがアレイ状に（縦横）に配列されている。
たとえば、選択用トランジスタ２のゲートが選択ゲート線ＳＬ１に接続され、選択用トランジスタ３のゲートが選択ゲート線ＳＬ２に接続されている。また、各メモリセルＮ０〜Ｎ１５のゲートがワード線ＷＬ０〜ＷＬ１５に接続されている。
【０００５】
各メモリセルＮ０〜Ｎ１５は積層ゲート構造を持ち、浮遊ゲートへの電荷蓄積量に従ってデータを記憶する。すなわち、浮遊ゲートに多くの電子が蓄積されていると、トランジスタの閾値が上昇するので、チャージされたビット線ＢＬ１〜ＢＬｎからのメモリユニット１（−１〜−ｎ）への電流貫通の有無を、センスアンプ等を含むアクセス回路４で検出してデータ判定を行う。
【０００６】
このようなＮＡＮＤ型フラッシュメモリは、メモリセル毎にビット線へのコンタクト領域を設ける必要もないので、特に大容量で安価な記憶装置の媒体に適している。
【０００７】
ところで、一般にフラッシュメモリのプログラム速度は非常に遅く、セルあたり数百μ秒を必要とする。またデータの上書きはできないので、プログラムに先立って消去を行う必要があり、これには数ｍ秒もの時間がかかる。このような問題に対しては、多くのメモリセルを並列処理することで対処している。
【０００８】
すなわち、たとえば同一ワード線ＷＬ０に接続され、ページ単位を成すメモリセル群５を、同時一括に書き込み、さらに互いにメモリユニットを共有するページ群で構成されるセルブロック６を全て一括で消去することにより、プログラムの転送速度を向上させている。
【０００９】
具体的には、たとえば非特許文献１には１ＧｂのＮＡＮＤ型フラッシュメモリが掲載されており、ページサイズを２ｋバイト、消去ブロックサイズを１２８ｋＢとしている。すなわち、一つのメモリアレイ内で１２８ｋバイトのメモリセル群を並列消去し、そこにメモリセルを２ｋバイト毎に並列でプログラムしていくことによって、１０ＭＢ／ｓのプログラム転送速度を実現している。
【非特許文献１】ＩＳＳＣＣ２００２予稿集のｐ１０６、セッション６．４
【特許文献１】特開平５−２１６７７５号公報
【特許文献２】特開平６−３４９２８６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
近年、ハードディスクの消費電力の大きさや、シーク時間の長さ、耐衝撃性や携帯性等の問題を解消すべく、フラッシュメモリにその代替が期待されている。
しかし上述の如く、フラッシュメモリにはアクセス単位を大きくしないと高速化できないという欠点がある。また、データの上書きができないので、書き換えには必ず消去が必要であり、その際の消去ブロックはさらに大きい。
このようにアクセス単位に対して消去単位が数十倍大きいのは、消去時間が長く、かつ書き込み時に非選択セルにディスターブが生じるフラッシュメモリには一般的な仕様である。しかしこれによりその書き込み効率は著しく低下する。
【００１１】
たとえば上記２ｋＢ単位のページ書き込み、１２８ｋＢ単位のブロック消去による、転送速度１０ＭＢ／ｓフラッシュメモリを用いて、ハードディスク代替用の記憶装置を構成するとする。
その転送速度を、シリアルＡＴＡ接続の高速ストレージで目標とされる１６０ＭＢ／ｓにまで高めようとした場合、マルチバンクやマルチチップの構成を取りながら、たとえば１６個のメモリアレイを並列動作させる必要がある。
【００１２】
図２は、そのような記憶装置を構成するフラッシュメモリの概念図を示す図である。
図２において、高速転送を実現するため、１６個のアレイＡＲ０〜ＡＲ１５を同時に動作させる。この場合データ書き込み時は、たとえばページＰ０〜Ｐ１５を同時書き込みし、消去時はブロックＢ０〜Ｂ１５を同時消去する。このとき括書き込み単位となる実ページ領域２４は３２ｋＢ、一括消去単位となる実消去ブロック領域２１は２ＭＢに達することになる。
【００１３】
一方、通常のファイルシステムでは、最小の書き込み単位を成すクラスタサイズは４ｋＢ程度であり、この単位でランダムなアクセスがなされる。
その場合、たとえばページＰ０とＰ１のみを書き換える要求が発生する。
しかし、上述のような装置でそのようなアクセスを行うと、結局実消去ブロック領域２１全体を消去しなければならない。かつその中の非選択領域に有効ファイルがあれば、それを消失から保護する必要がある。その典型的な対処例は次のようになる。
【００１４】
１．まずフラッシュメモリから、別途設けられたバッファメモリ２３のメモリ領域２２に、実消去ブロック領域２１全体のデータを読み出す。
２．次にメモリ領域２２内で、ページＰ０とＰ１に相当するデータを更新する。
３．次にフラッシュメモリ上のブロック領域２１の消去を実行する。
４．最後に上記消去済の領域２１に、更新後のメモリ領域２２のブロックデータを全て書き戻す。
【００１５】
すなわち、４ｋバイトの書き込みのために、実際には消去と、２ＭＢのデータの読み出しおよび書き込みが必要となる。
具体的には、１ページ分のデータの読み出しおよび書き込みにはそれぞれ２００μｓを要し、ブロックの消去には２ｍｓを要するので、３０ｍｓ近くを必要とする。
【００１６】
これに対し、予め予備の消去済みブロック領域２７を用意しておいて、このブロック領域２７にブロック領域２１の元のデータとページＰ０とＰ１の更新後データを合成させて書き込みを行う手法もある。
この場合、仮想アドレス構成を用いて消去ブロック単位で論理アドレスと物理アドレスの対応を更新し、アクセス対象とされた論理アドレスに対応する物理ブロックは元の消去ブロック領域２１からデータの移動先ブロック領域２７に張り替えられる。
しかしこの場合も、有効データを消去ブロック領域２１から移動先ブロック領域２７に退避させる作業は必要である。またこの際、通常は元のブロック領域２１を消去して、そちらを予備ブロックに変える。したがって、結局は従来とほぼ同様の読み出し、書き込み、消去が必要であり、大きなオーバーヘッドが生じることに変わりは無い。
【００１７】
実際にファイルを更新する場合、該当ファイルのみではなく、その管理領域やログの記載等、関連する複数の小領域を同時に更新するのが普通である。またファイル自体も複数の小領域に断片化して存在しているケースがある。
したがって、上述の如き制約があると、現実の転送性能は著しく低いものになってしまう。
【００１８】
また上述の例では４ｋバイトの書き換えであったが、ハードディスク等の通常のファイル記憶装置はさらに小さい５１２バイト単位の書き換えまでサポートしている。
しかしどのように小単位の書き換えであっても、上述の如き消去ブロック全体の書き換えが必要になる。
【００１９】
このような事情から、フラッシュメモリを用いた現在の記憶装置は、特に書き込み時においては、ハードディスクをはるかに下回る転送性能しか得られていない。さらに上述のような冗長性は、単に転送性能を悪化させるのみならず、フラッシュメモリの消去回数を増加させ、その寿命まで低下させてしまう。
【００２０】
このような問題に対して、たとえば特許文献１（特開平０５−２１６７７５号公報）、特許文献２（特開平０６−３４９２８６号公報）においてはキャッシュメモリの使用が記載されている。
ここで例示されているのは、フラッシュメモリの消去単位であるブロックデータ、あるいは一括書き込み単位であるページデータを、そのままエントリとしてキャッシュメモリに保存するものである。更新しようとするデータを含むブロックがキャッシュに格納されていれば、すなわちキャッシュがヒットすれば、キャッシュ内のデータのみが更新されるので、上述のような冗長な動作は直ちには発生しない。
【００２１】
しかしこのようなキャッシュメモリの使用は、必ずしも効率の向上をもたらさない。たとえば、動画映像のように巨大な連続データよりなるファイルを記録する場合、キャッシュメモリは録画の間中ミスヒットを続け、新たなエントリを追加するために、既存のエントリの解放が必要になる。そのため、外部からキャッシュメモリに書き込んだデータと等量のデータが、常時キャッシュメモリからフラッシュメモリに書き戻される。従ってキャッシュへの書き込む工程は単なるオーバーヘッドとなってしまい、逆にプログラム能力を低下させてしまう。
【００２２】
本発明の目的は、フラッシュメモリを主媒体とする記憶装置に小容量でもヒット率が高く、アクセスのオーバーヘッドも少ないキャッシュメモリを付与することが可能になり、フラッシュメモリへの書き込みを高速化し、書き換え回数も低減させることが可能な半導体記憶装置およびコンピュータシステム、並びにデータ書き込む方法を提供することにある。
【課題を解決するための手段】
【００２３】
本発明の第１の観点の記憶装置は、主記憶媒体であるフラッシュメモリデバイスと、上記フラッシュメモリデバイスのためのキャッシュメモリと、制御回路と、を有し、上記制御回路は外部から入力された書き込みコマンドとアドレス情報をもとに、入力データの書き込み先を上記フラッシュメモリデバイスまたはキャッシュメモリの何れかに、適時選択する。
【００２４】
好適には、上記フラッシュメモリデバイスの書き込み単位または消去単位をもとに、単位区画が設定されており、各単位区画は複数のセクタを含み、上記セクタまたは連続したセクタ群へのブロックデータの書き込み命令を受けた場合、上記制御回路は上記ブロックデータを上記単位区画に応じてサブブロックに分割し、各サブブロックごとに既定の基準に従って、各サブブロックの書き込み先を上記フラッシュメモリデバイスまたはキャッシュメモリの何れかに選択する。
【００２５】
好適には、上記単位区画は、ひとつまたは複数の書き込みページを含み、上記フラッシュメモリデバイスの一括書き込み単位である。
【００２６】
好適には、上記制御回路は、各サブブロックに対して、区画におけるデータの占有状態を検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する。
【００２７】
好適には、上記制御回路は各サブブロックに対して、同区画または所属データに対応するキャッシュメモリのエントリを検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する。
【００２８】
好適には、上記制御回路は、書き込み先が上記フラッシュメモリデバイスに選択されたサブブロックのデータのうち、上記キャッシュメモリにヒットしたデータがある場合、対応するキャッシュメモリ上のエントリを解放する。
【００２９】
好適には、書き込み先がフラッシュメモリデバイスに選択されたサブブロックのデータのうち、キャッシュメモリにヒットしたデータがある場合、対応するキャッシュメモリ上のエントリを上記書き込みデータで更新する。
【００３０】
好適には、上記制御回路は、書き込み先が上記フラッシュメモリデバイスに選択されたサブブロックと同じ区画内の領域に対応するエントリが上記キャッシュメモリに存在する場合、対応するエントリを当該サブブロックのデータと合成して同時にフラッシュメモリに書き戻す。
【００３１】
好適には、上記単位区画は、ひとつまたは複数の消去ブロックを含み、上記フラッシュメモリデバイスの一括消去単位である。
【００３２】
好適には、上記制御回路は各サブブロックに対して、区画におけるデータの占有状態を検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する。
【００３３】
好適には、上記制御回路は、各サブブロックに対して、同区画または所属データに対応するキャッシュメモリのエントリを検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する。
【００３４】
好適には、上記制御回路は、各サブブロックに対して、対応区画におけるフラッシュメモリ上の空き状態を検査し、当該検査結果に応じて各サブブロックの書き込み先を選択する。
【００３５】
本発明の第２の観点のコンピュータシステムは、アプリケーションソフトウェアを実行する処理ユニットと、ファイルストレージであるフラッシュメモリデバイスと、上記フラッシュメモリデバイスのためのキャッシュメモリ領域と、を有し、上記処理ユニットは、ドライバソフトの制御のもとに、アプリケーションソフトウェアからの上記ファイルストレージへの書き込み要求を受けて、当該アドレス情報をもとに、入力データの書き込み先を上記フラッシュメモリデバイスまたは上記キャッシュメモリの何れかに、適時選択する。
【００３６】
本発明の第３の観点は、フラッシュメモリデバイスと、上記フラッシュメモリデバイスのためのキャッシュメモリ領域を有する記憶装置へのデータ書き込み方法であって、上記フラッシュメモリデバイスの書き込み単位または消去単位をもとに、単位区画が設定されており、各単位区画は複数のセクタを含み、上記セクタまたは連続したセクタ群へブロックデータを書き込む要請が生じた場合、当該ブロックデータが上記区画に応じてサブブロックに分割され、各サブブロックごとに既定の基準に従って、各サブブロックの書き込み先が上記フラッシュメモリデバイスまたはキャッシュメモリ領域の何れかに選択される。
【００３７】
本発明によれば、一般的なキャッシュメモリを搭載したストレージシステムにおける課題は、書き込み入力されたデータが、状況にかかわらず、必ず一旦キャッシュメモリに書き込まれていたことにある。
それに対して本発明の記憶装置は、外部から入力された書き込みコマンドとアドレス情報をもとに、入力されたデータの書き込み先をキャッシュメモリかフラッシュメモリの何れかに、装置内部で適時選択する。これによって、フラッシュメモリへの書き込みに負担の大きい小領域の更新や小型のファイルについてはキャッシュメモリ側に書き込み、キャッシュメモリへの書き込みが無駄になるような連続データよりなる大型ファイルは直接フラッシュメモリに書き込むようにする。
【発明の効果】
【００３８】
本発明によれば、フラッシュメモリを主媒体とする記憶装置に小容量でもヒット率が高く、アクセスのオーバーヘッドも少ないキャッシュメモリを付与することが可能になり、フラッシュメモリへの書き込みを高速化し、書き換え回数も低減させることが可能になる。
このようなシステムではフラッシュメモリを高速なハードディスクのように使用することもでき、待機時の消費電力が低く、コンパクトで高速なストレージシステムを獲得できる。
【発明を実施するための最良の形態】
【００３９】
以下、本発明の実施形態を図面に関連付けて説明する。
【００４０】
図３は、本発明の第１の実施形態に係るファイル記憶装置を示す構成図である。
【００４１】
ファイル記憶装置３０は、インターフェース回路（Ｉ／Ｆ）３１、ページバッファ３２、メモリバス３３、制御回路３４、ＮＡＮＤ型フラッシュメモリ３５，３６、制御回路３７、キャッシュメモリ３８、および内部バス３９を含んで構成されている。また、４０〜４３はページ領域を示し、制御回路３４は、アドレス変換テーブル４４、およびキャッシュの管理テーブル４５を有する。
そして、たとえば、ページバッファ３２、メモリバス３３、ＮＡＮＤ型フラッシュメモリ３５，３６、制御回路３７、および内部バス３９によりフラッシュメモリデバイスＦＬＭＤが形成される。
【００４２】
ファイル記憶装置３０の内部においては、３２ビットのメモリバス３３に、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ３５，３６が並列に接続されている。２つのチップのＮＡＮＤ型フラッシュメモリ３５，３６は読み出しや書き込みにおいて、同時並列にアクセスされる。
各々のフラッシュメモリ３５，３６は書き込みや読み出しのアクセスをたとえば４ｋBのページ単位で行う。
したがって、実ページサイズとしては８ｋBが一括アクセスされることになる。
ページバッファ３２はアクセスされたページ領域のデータを一時記憶するページバッファである。
フラッシュメモリ３５，３６とページバッファ３２との間のデータの送受は、制御回路３７で制御されている。
さらに制御回路３７は、必要に応じて転送データにＥＣＣ符号化によるエラー補正を施したり、フラッシュメモリ内の欠陥ブロックの管理を実施する。両フラッシュメモリ３５，３６はページバッファ３２を介してファイル記憶装置３０の内部バス３９との間でデータを入出力する。
すなわち、フラッシュメモリ３５、３６あるいはメモリバス３３上に接続されたページバッファ３２と転送制御回路３７を併せた回路群ＦＬＭＤは、実質的に一つのフラッシュメモリデバイスを構成し、記憶装置３０の内部バス３９に接続されているとみなすことができる。
【００４３】
さらに内部バス３９には書き込み用のキャッシュメモリ３８とインターフェース回路３１、および制御回路３４が接続されている。
インターフェース回路３１はATAやPCIエクスプレス等の規格に従ってホストとの間で、データやコマンドの送受を行う。
制御回路３４は、ファイル記憶装置３０の内部においてページバッファ３２、キャッシュメモリ３８、およびインターフェース回路３１の間のデータの送受を管理する。ここに内蔵されたＲＡＭには、ページ単位の仮想アドレスを管理するアドレス変換テーブル４４およびキャッシュメモリ３８の管理テーブル４５が構築されている。
【００４４】
本記憶装置３０は、ハードディスク等と同様に５１２バイト（Ｂｙｔｅ）のセクタをアクセス単位とする。装置内部では簡単のため、１６進数のアドレスが次のように割り振られるとする。
たとえば外部入力アドレスが”０ｘ５５００Ｃ”であった場合、上位１６ビットの”０ｘ５５００”はページアドレス、下位４ビットの”０ｘＣ”はページ領域内のセクタドレスであり、１ページ中には１６のセクタが含まれる。
本記憶装置３０は１セクタ単位でランダムアクセスが可能であり、それは後述するようにページバッファ３２またはキャッシュメモリ３８を介して実施される。
【００４５】
キャッシュメモリ３８へのエントリは、実ページの１／４、すなわち４セクタを単位として構成する。したがって、各々のエントリは、対応する１６ビットのページアドレスに加え、４ビットのセクタドレス中上位２ビットを持って管理されることになる。
上述の例では実ページサイズが８ｋBなので、１エントリのサイズは２ｋBである。たとえば１２８ｋBのＲＡＭをキャッシュメモリとした場合、約６４個のエントリを持つことが可能である。
【００４６】
図４は、キャッシュメモリのキャッシュ管理テーブル４５の構成例を示す図である。
ここではテーブル管理の容易さとヒット率を勘案し、ページ内セクタドレスの上位２ビットをインデックスとして、四つのセットを構成した。各セットは独立に１６個ずつのエントリを保有する。すなわち４セット１６ウエイのセットアソシアティブ構成が採用されている。テーブル内の各フィールドには、そこにエントリが存在する場合、各エントリに対応するページアドレスが格納されている。
【００４７】
たとえば、外部からアドレス”０ｘ５５００Ｃ”のセクタへのアクセスが要求された場合、まずセクタドレス”０ｘＣ”の上位２ビットがインデックスとして使用され、”１１”に対応するセットが選択される。
さらに、このセットに登録されている最大１６個のエントリが検索され、”０ｘ５５００”のページアドレスに対応するエントリの有無が判定される。
【００４８】
さらに、本実施形態においては、ページ単位の仮想アドレス管理が採用されている。
図５は、アドレス変換テーブル４４の構成例を示す図である。
メモリへの具体的アクセスは以下のようになされる。
【００４９】
読み出しの際、外部から”０ｘ５５００Ｃ”のセクタドレスが入力されると、制御回路３４はまずキャッシュテーブル４５からヒットの有無を判定する。キャッシュにヒットしていれば、データはキャッシュメモリ（４６）より読み出される。
【００５０】
一方ミスヒットの場合、次の手順でフラッシュメモリ３５，３６からページバッファ３２へ該当する実ページを読み出す。
まず，ページアドレス”０ｘ５５００”を受けて内蔵ＲＡＭにアクセスし、アドレス変換テーブル４４から論理ページアドレス（ＬＡ：ＬＯＧＩＣＡＬ  ＡＤＤＲＥＳＳ）”０ｘ５５００”に対応する物理ページアドレス（ＰＡ：ＰＨＩＳＩＣＡＬ  ＡＤＤＲＥＳＳ）”０ｘ００Ｂ０”を取得する。
【００５１】
この物理ページアドレスＰＡ中、上位の”０ｘ００”はメモリチップ、すなわちフラッシュメモリ３５，３６内の消去ブロックＢＬ１、ＢＬ２のアドレスである。
下位”０ｘＢ０”は各消去ブロック内のページ領域４０，４１のアドレスである。この物理アドレスをもとにメモリチップであるフラッシュメモリ３５，３６が共にアクセスされ、各々からページアドレス”０ｘ００Ｂ０”に格納されたページ領域４０，４１のデータが読み出され、ページバッファ３２に格納される。
インターフェース回路３１はその中から、下位アドレス”０ｘＣ”に相当するセクタを選択し、外部に出力する。
【００５２】
一方、書き込みの際には、キャッシュメモリ３８に書き込む場合、１セクタ単位で高速に書き込みが実施できる。
一方、フラッシュメモリ３５，３６に書き込む場合には、一旦対応する実ページを読み出し時と同様の手順でフラッシュメモリ３５，３６からページバッファ３２に読み出し、ページバッファ３２上で対応するセクタを書き換えて、しかる後にフラッシュメモリ上に書き戻す必要がある。
１セクタのみの書き換えでも同じ手順を要し、実ページ全体（１６セクタ分）のデータの読み出しと書き戻しが必要である。
さらに前述の如く、フラッシュメモリ３５，３６への書き込みは時間がかかる上、構成によっては消去に伴なう制約がある。したがって，そのパフォーマンスはキャッシュメモリ３８への書き込みに比較して大きく劣る。
【００５３】
ただし、キャッシュメモリ３８への書き込みにおいても、ミスヒットし、かつメモリ内にエントリを新規に追加するための空き領域が無ければ、一旦既存のエントリを解放し、空きをつくらねばならない。解放したエントリのデータは結局フラッシュメモリに書き戻す必要があり、その作業はフラッシュメモリへの書き込みと同じである。
【００５４】
ところでＡＴＡ等、通常のファイルストレージにおけるインターフェース仕様では、データアクセスは幾つかの連続したセクタよりなるブロック単位での転送指定で実行される。
たとえば、コマンドは「先頭アドレスｘｘｘからｘｘ個のセクタ群に対して書き込みを実施」という形態で送受される。上述の如く、キャッシュメモリとフラッシュメモリとでは書き込みの性能が大きく異なるので、そのようなブロックの構成に応じてアクセス手順を最適化することがパフォーマンスの向上に重要となる。
【００５５】
本実施形態においては、上記のような転送ブロックを実ページごとの区画で分割し、各々の区画単位でアクセス手順を決定する。
たとえば、セクタドレス”０ｘ００００Ｃ”〜”０ｘ０００２０”の範囲のブロックデータが書き込まれるとすると、それらはページアドレスをもとに以下の如く３つのサブブロックに分割される。
【００５６】
区画１（サブブロック１）：  ”０ｘ００００Ｃ”〜”０ｘ００００Ｆ”
区画２（サブブロック２）：  ”０ｘ０００１０”〜”０ｘ０００１Ｆ”
区画３（サブブロック３）：  ”０ｘ０００２０”
【００５７】
このように分割した各々のサブブロックについて、最適な書き込み先を選択していく。
図６に従って、以下にその判定基準の例を示す。
【００５８】
ここでキャッシュメモリのエントリが満杯で、かつ書き込みセクタが全てミスヒットするという、最悪のケースへの対応を考えてみる。
そこに書き込みを行うには、前述の如く、書き込みに要するだけのエントリを解放し、それをフラッシュメモリに書き戻す必要が生じる。したがって、書き込むべきデータサイズが大きいほどその際の処理量が大きくなり、キャッシュメモリ使用の不利が増す。
【００５９】
たとえば、サブブロック２はセクタ１６個より成り、実ページ”０ｘ０００１”をまるごと（すべて）含んでいる。これをキャッシュメモリ３８に格納すると、エントリ４個を消費する。この場合、最悪４個の互いに異なるページに属するエントリを解放する必要があり、フラッシュメモリに４ページ分の書き込みを行う必要が生じる。
すなわち、フラッシュメモリ３５，３６からページバッファ３２に実ページデータを読み出し、各エントリに対応するデータ領域を更新して再度フラッシュメモリに書き戻す作業を４回繰り返さねばならない。
一方、このサブブロックをフラッシュメモリにそのまま書き込めば、単に１ページ分の書き込みで良い。したがって、このようなケースではキャッシュメモリへの書き込みは、むしろ逆効果となるリスクが高い。
【００６０】
一方、サブブロック１はセクタ４個、サブブロック３はセクタ１個より成り、ともにキャッシュメモリ３８の１エントリ分を消費するのみである。したがって、上記最悪ケースでもキャッシュから解放し、フラッシュメモリにデータを書き戻すべきエントリは１個であり、フラッシュメモリへの書き込みは同じ１ページ分ですむ。キャッシュメモリ３８にヒットしていたり、エントリ追加の空きがある場合は、フラッシュメモリ３８にアクセスすることなく、高速に処理できる。したがって、このサブブロックは殆どの場合キャッシュメモリ３８側に書き込む方が効率が良い。
【００６１】
ここにおいて、有効な書き込み手法の一つは、実ページ単位で区画分けされた各サブブロックごとに、そのデータの実ページ内の占有状態を検査し、それに応じて書き込み先をフラッシュメモリかキャッシュメモリの何れかに選択することである。
【００６２】
たとえば、各サブブロックにおいて書き込むべきセクタ数を判定基準とし、５個以上ならばフラッシュメモリ３５，３６に、４個以下ならキャッシュメモリ３８に書き込みを実施する。あるいはキャッシュメモリに書き込む際に消費されるエントリ数を基準として採用しても良い。たとえば消費されるエントリ数が２個以上ならフラッシュメモリに、１個ならキャッシュメモリに書き込みを実施する。
各サブブロックにおけるセクタ数や消費されるエントリ数は、アドレス情報から瞬時に取得できる。したがって、このような判定アルゴリズムを用いてデータの書き込み先を適時選択すれば、簡便に書き込み効率及び性能を向上させることができる。
【００６３】
また、さらにキャッシュメモリのエントリを検査すれば、より精緻な判定が可能になる。
まず、サブブロックに属するデータのキャッシュメモリへのヒットの有無を、書き込みの事前に検査する。これはアドレス情報をもとにキャッシュテーブル４５を検索することで実施できる。これにより、このサブブロックをキャッシュメモリに書き込む場合、新規エントリを何個追加する必要があるかが明らかになる。これを判定の基準とすることで、より的確な選択が可能になる。
【００６４】
仮に、サブブロック２が４個のエントリを消費する場合でも、既に２３個がキャッシュメモリ３８内にあれば（すなわちヒットしていれば）新規の追加は１個で良い。たとえば２個以上のエントリを新規に追加する必要がある場合にはフラッシュメモリ３５，３６にそのまま書き込み、１個以下のエントリしか追加の必要がない場合にはキャッシュメモリ３８に書き込む。
【００６５】
あるいは、さらにキャッシュメモリ３８の空き状態も勘案し、解放すべきエントリ数を選択の基準にしても良い。仮に、３つのエントリを新規に追加する必要が生じても、そのうち２つの対応するセット内に空きがあれば、解放すべきエントリは一つで良い。たとえば２個以上のエントリをする必要がある場合にはフラッシュメモリ３５，３６にそのまま書き込み、１個以下のエントリしか解放の必要がない場合にはキャッシュメモリ３８に書き込む。
【００６６】
あるいは、サブブロックをフラッシュメモリ３５，３６へ書き込む際に、同時にキャッシュメモリ３８から書き戻しが可能なデータを検査し、判定に使用する方法も有効である。
たとえば、上記サブブロック１を、仮にフラッシュメモリにそのまま書き込もうとした場合、キャッシュテーブル４５から同じ区画１に対応するエントリを検索する。すなわちサブブロック１は、論理ページアドレス”０ｘ００００”に属するが、同じページに対応するエントリがキャッシュメモリ３８内に存在すれば、そのデータは同時にフラッシュメモリ３５，３６に書き戻すことができる。
【００６７】
該当したエントリはクリーンとなり、必要に応じて解放することも可能である。その場合、サブブロックの書き込みデータが４セクタ（エントリが１つ分）でも、実際には複数のエントリから多くのデータが書き込まれ、効率の良い書き込みが実施されることになる。たとえば、フラッシュメモリ３５，３６へ同時書き込みが可能な総セクタ数を基準とし、それが規定値より大きければフラッシュメモリにそのまま書き込み、規定値以下ならキャッシュメモリ３８に書き込む。
【００６８】
このように、選択アルゴリズムには種々のバリエーションが存在し、さらにそれらは場合に応じて互いに組み合わせることも可能である。
【００６９】
本発明の記憶装置における基本的な書き込み手順は以下の通りである。
１．入力コマンドとアドレス情報を取得する。
２．書き込みページによる区画をもとに、ブロックデータをサブブロックに分割し、各々のブロックについて順次書き込み処理を実施する。
３．その際、サブブロック内のデータの占有状態、或いはキャッシュメモリ内のエントリの検査を行い、その結果に応じて書き込み先を選択する。
【００７０】
また、上記３．の判定においては、各々のサブブロックに対して、
・キャッシュメモリにおけるエントリの解放も考慮した上で、実質的なフラッシュメモリへの書き込み回数を減らす。
・フラッシュメモリへのアクセスが必要な場合は、より多くのセクタが同時に書き込まれるようにする。
という視点に立ち、さらに判定に要する時間や処理の煩雑さも鑑みて、選択アルゴリズムが決定されるのが望ましい。
【００７１】
以下に、ブロックデータの書き込み手順について説明する。
図７は、本実施形態に係るブロックデータの書き込み手順を示すフローチャートである。ここで、外部からセクタ単位の先頭アドレスと書き込みセクタ数が指定され、セクタまたは連続した複数セクタよりなるブロックデータが入力されたとする。セクタは一般的なファイルストレージの基本アクセス単位であり、通常５１２バイト（Ｂｙｔｅ）であるが、必ずしもそのサイズに限定されるものではない。
【００７２】
＜１＞  ブロックデータの区画分け
制御回路３４は、まず入力されたブロックデータを、前述の如く実ページに従って区画分けを行い、各サブブロックごとに以降の処理を行う（ＳＴ１）。通常は先頭セクタを含む区画のサブブロックから順に書き込み処理を実行していく。全サブブロックの書き込みが完了すれば、処理は終了となる（ＳＴ２）。
【００７３】
＜２＞  サブブロックの書き込み処理
処理対処として選択されたサブブロックの区画内のデータの占有状態が検査され、さらに必要に応じてサブブロックの区画または所属データに対応するキャッシュメモリ３８のエントリが検査される（ＳＴ３）。これらの情報をもとに、このサブブロックをフラッシュメモリ３５，３６にそのまま書き込むか、もしくはキャッシュメモリ３８に書き込むかが判定される（ＳＴ４）。
なおここでエントリの検査が実施された場合、データがヒットしたエントリ等の情報は制御回路３４内のメモリまたはレジスタに保管しておく。
【００７４】
＜３＞  フラッシュメモリへの書き込み
サブブロックの書き込み先がフラッシュメモリに選定された場合は、まず所属データに対応するキャッシュメモリのエントリが調べられ、対応するエントリがあれば、整合をとるべくその処理が行われる。既に上記＜２＞の処理でエントリを検査済みの場合は、改めてキャッシュテーブル４５を検索する必要は無い。
しかる後に、サブブロックのフラッシュメモリへの書き込みが、たとえば以下ように行われる。
まず、サブブロックの区画に相当するページデータが、フラッシュメモリ３５，３６からページバッファ３２に読み出され、それがサブブロックのデータで更新される。なお、サブブロックがページ全域を含む場合、この読み出し工程は省略可能である。次に、ページバッファ３２の内容がフラッシュメモリ３５，３６に書き戻される（ＳＴ５〜ＳＴ７）。
【００７５】
＜４＞  キャッシュメモリへの書き込み
サブブロックの書き込み先がキャッシュメモリ３８に選定された場合も、まず所属データに対応するキャッシュメモリ３８のエントリが調べられる。既に上記＜２＞の処理でエントリを検査済みの場合は、改めてキャッシュテーブル４５を検索する必要は無い。
ヒットしているセクタはそのまま対応エントリに書き込みを実施する。ミスヒットのセクタには新規にエントリを追加し、そこに書き込みを実施する。この際既存エントリの解放が必要であれば、まず適当なエントリを解放し、そのデータをフラッシュメモリに書き戻す（ＳＴ８〜ＳＴ１０）。
【００７６】
ところで、上記＜３＞の処理において、サブブロックをフラッシュメモリ側に書き込む際、キャッシュメモリ３８との整合をとるため、データがヒットしたエントリの処理を行った。
本発明を採用した場合、サブブロックに属するデータの一部がキャッシュメモリ３８にヒットしていても、それらをフラッシュメモリ側に書き込むという選択がなされ得る。その場合キャッシュ内のデータは最新では無くなるので、対処が必要である。
その具体的対応手段としては、該当エントリのデータをサブブロックのデータで更新しておくか、もしくはヒットしたエントリそのものを解放する。
【００７７】
また、サブブロックをフラッシュメモリ３５，３６に書き込む際には、前述の如く、同区間（同一ページ）に属し、サブブロックには含まれないセクタについてもキャッシュテーブル４５を検索し、ヒットしている（すなわち書き込み先と同一ページに対応する）エントリがあれば、そのデータは同時にフラッシュメモリに書き込むのが望ましい。書き戻したエントリはクリーンとなり、必要に応じて解放することが可能である。
【００７８】
書き戻しの際は、たとえば以下のようにページバッファ３２上で各種データを合成し、完全な実ページを構成してから、フラッシュメモリ３５，３６に書き込みを行う。
まず、ページバッファ３２上にフラッシュメモリ３５，３６からの対応ページを読み出す。次に、キャッシュメモリ内の同一区画に対応したエントリの有効データで、それを上書きする。さらにサブブロックのデータをそこに上書きし、最後にそれらをフラッシュメモリ３５，３６に書き戻す。
【００７９】
ところで、ページバッファ３２からフラッシュメモリ３５，３６へのページの書き戻し作業は、以下に示すような追記型書き換えを採用すると、さらに効率が良い。
【００８０】
たとえば論理アドレス”０ｘ５５００”のページを書き戻す場合、アドレス変換テーブル４４における対応物理ページは”０ｘ００Ｂ０”のアドレス位置にある４０，４１である。しかし、このページをそのまま書き換えるには、前述のごとき消去ブロック全体での有効ページの退避処理等が必要となる。
そこで、本実施形態においては、更新後のページデータは、適当な空き領域４２，４３に書き込む。このページ領域の物理ページアドレスは”０ｘ０２８０”であり、すなわち消去ブロック”０ｘ０２”内の”０ｘ８０”のページに相当する。
この処理の前まで、その領域はアドレス変換テーブル４４のいずれの物理アドレスフィールドにも登録されていない、未使用の空きページであった。更新後のデータがこの領域に追記の形で書き込まれるとともに、アドレス変換テーブル４４の論理アドレス”０ｘ５５００”に対応する物理アドレスフィールドには、領域４２，４３の物理ページアドレス”０ｘ０２８０”が登録される。
【００８１】
すなわち、本実施形態においては、フラッシュメモリ３５，３６への実ページデータの書き戻しは、更新されたページデータを消去済みの領域に追記し、元のページ領域を無効化することによって行われている。したがって、外部で書き込み先のページアドレスをランダムに設定しても、装置内部では空き領域にシリアルに書き込む等、フラッシュメモリの構成上最も効率の良い書き込みに変換できる。
このような手法を採用すれば、書き戻しの際に元ブロックのデータ退避等を行う必要が無く、フラッシュメモリ３５，３６には見かけ上消去ブロックの制約を受けず、実ページ単位で高速にランダムにアクセスできる。
本実施形態にように実ページを元にした区画による分割でサブブロックを構成した場合、消去ブロックレベルでの書き込み効率の検査は困難である。したがって、消去ブロックに伴なう制約を受けにくい本機構との組み併せで、記憶システムは最大の効率を得ることができる。
【００８２】
なお、ここで言う実ページとはフラッシュメモリ３５，３６に一括で書き込まれる連続データの基本単位を示すが、それが複数デバイスからのページグループで構成される場合、各デバイスへのデータ転送や書き込みのタイミング設定には制約は受けない。
本実施形態においては、１６ビットＩＯのチップ２個を３２ビットバスに接続することで完全な並列動作としたが、１６ビットのバスを両チップで共有すれば、転送は個々に行なわざるを得ない。その場合、ページバッファ３２から片側のメモリチップにデータを転送している間に、もう片側のメモリチップ内で書き込みをスタートしても良いし、両者への転送を順次行なった後に、書き込みを同時スタートしても良い。
【００８３】
すなわち、これらの複数デバイスを実質的に一つのフラッシュメモリデバイスとみなした場合、内部の動作タイミングに関わらず、その一括書き込みの基本単位が実ページとなる。
図３の例では、フラッシュメモリ３５，３６、あるいはメモリバス３３上に接続されたページバッファ３２と転送制御回路３７を併せた回路群ＭＦＬＤをひとつのフラッシュメモリデバイスとみなすことができ、その一括書き込み単位である実ページはフラッシュメモリ３５，３６における各々の書き込みページを併せたページグループである。
【００８４】
以上、フラッシュメモリの一括書き込み単位たるページを区画として書き込みデータ群をサブブロックに分割し、それごとに書き込み先を選択する実施形態について説明した。
【００８５】
ところで現在、フラッシュメモリを用いた多くのファイルストレージには、消去ブロック単位でフラッシュメモリの書き換えを管理する従来手法が採用されている。
この場合、消去ブロックの部分書き換えには、前述の如き消去ブロック全体での有効データの退避が必要になるケースが頻出する。その際のオーバーヘッドは非常に大きいので、このようなケースではその発生頻度を下げるべく、消去ブロックを元に区画を設定し、それごとに書き込み先を最適化した方が効率が上がり、性能が高くなる可能性がある。
そのようなケースに本発明を応用した第２の実施形態について、以下に説明する。
【００８６】
図７は、本発明の第２の実施形態に係るファイル記憶装置を示す構成図である。
【００８７】
ファイル記憶装置３０ｂは、インターフェース回路（Ｉ／Ｆ）３１ｂ、ページバッファ３２ｂ、メモリバス３３ｂ、制御回路３４ｂ、ＮＡＮＤ型フラッシュメモリ３５ｂ，３６ｂ、制御回路３７ｂ、キャッシュメモリ３８ｂ、および内部バス３９ｂを含んで構成されている。また、制御回路３４ｂは、およびキャッシュの管理テーブル４５ｂ、および消去ブロックの管理テーブル４６ｂを有する。
本第２の実施形態に係るファイル記憶装置３０ｂは、第１の実施例とほぼ同様の構成となっているが、ページ単位のアドレス変換は行っていない。
【００８８】
ファイル記憶装置３０ｂの内部においては、３２ビットのメモリバス３３ｂに、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ３５ｂ，３６ｂが並列に接続されている。２つのチップのＮＡＮＤ型フラッシュメモリ３５ｂ，３６ｂは読み出しや書き込みにおいて、同時並列にアクセスされる。
各々のフラッシュメモリ３５，３６は書き込みや読み出しのアクセスをたとえば４ｋBのページ単位で行う。
したがって、実ページサイズとしては８ｋBが一括アクセスされることになる。
ページバッファ３２ｂはアクセスされたページ領域のデータを一時記憶するページバッファである。
フラッシュメモリ３５ｂ，３６ｂとページバッファ３２ｂとの間のデータの送受は、制御回路３７ｂで制御されている。
さらに、制御回路３７ｂは、必要に応じて転送データにＥＣＣ符号化によるエラー補正を施したり、フラッシュメモリ内の欠陥ブロックの管理を実施する。両フラッシュメモリ３５ｂ，３６ｂはページバッファ３２ｂを介して記憶装置の内部バス３９ｂとの間でデータを入出力する。
すなわち、フラッシュメモリ３５ｂ、３６ｂあるいはメモリバス３３ｂ上に接続されたページバッファ３２ｂと転送制御回路３７ｂを併せた回路群ＦＬＭＤは実質的に一つのフラッシュメモリデバイスを構成し、記憶装置３０ｂの内部バス３９ｂに接続されているとみなすことができる。
【００８９】
さらに内部バス３９ｂには書き込み用のキャッシュメモリ３８ｂとインターフェース回路３１ｂ、および制御回路３４ｂが接続されている。
インターフェース回路３１ｂはＡＴＡやＰＣＩエクスプレス等の規格に従ってホストとの間で、データやコマンドの送受を行う。
制御回路３４ｂは、ファイル記憶装置３０ｂの内部においてページバッファ３２ｂ、キャッシュメモリ３８ｂ、およびインターフェース回路３１ｂの間のデータの送受を管理する。ここに内蔵されたＲＡＭには消去ブロックの管理テーブル４６ｂ、およびキャッシュメモリの管理テーブル４５ｂが構築されている。
【００９０】
制御回路３４ｂは、消去ブロック管理テーブル４６ｂを使用し、転送制御回路３７ｂにコマンドを送ることで、フラッシュメモリデバイスである記憶装置３０ｂの消去ブロック単位の書き換えも制御する。すなわち、ページバッファ３２ｂを介して元ブロックから予備ブロックへの有効ページの退避処理を実施し、消去ブロック管理テーブル４６ｂを更新して、対象論理ブロックアドレスに対応する物理ブロックアドレスの張替えを行い、さらに元ブロックの消去を実施する。
【００９１】
図９は、第２の実施形態に係るキャッシュ管理テーブル４５ｂの構成例を示す図である。
キャッシュメモリ３８ｂへのエントリは、実ページ、すなわち１６セクタを単位として構成する。本例では、消去ブロック内のページアドレスをインデックスとしたダイレクトビットマップ方式が採用されている。すなわち、消去ブロック内の各ページアドレスに対応して、独立して一つずつのエントリを持っている。
【００９２】
たとえば、書き込みのために外部から入力されたセクタのアドレスが”０ｘ０３０１Ａ”であれば、消去ブロックの論理アドレスを上位２ビットの”０ｘ０３”、ページアドレスをその下位の”０ｘ０１”、セクタドレスは最下位の”０ｘＡ”と定義できる。
図９のテーブルでは、インデックスたるページアドレス”０ｘ０１”のエントリには消去ブロック”０ｘ０３”からのページが格納されている。すなわちこのセクタ”０ｘ０３０１Ａ”はキャッシュにヒットしている。
【００９３】
上述の例では実ページサイズが８ｋBであり、２５６個のエントリを持つので、キャッシュサイズは２Ｍバイトを必要とする。無論キャッシュ構成は第１の実施形態と同様の形態や、それ以外にもさまざまな形態を取ることができる。それに伴なってエントリの単位等が変わるものの、本発明の基本的なアルゴリズムはキャッシュメモリの構成に関わらず適用できる。
【００９４】
図１０は、本第２の実施形態に係る消去ブロック管理テーブルの構成例を示す図である。
【００９５】
図１０に示すように、消去ブロック管理テーブル４６ｂには、各論理ブロックアドレス（ＬＢＡ）に対応して物理ブロックアドレス（ＰＢＡ）、および書き込みポインタ（Ｗｒｉｔｅ  Ｐｏｉｎｔｅｒ）が格納されている。
【００９６】
書き込みポインタは、各々に対応するブロックのどのページまで書き込みが完了したかを示している。
前述の如く、フラッシュメモリのデータは消去ブロック内のページアドレス”０ｘ００”から”０ｘＦＦ”に向けて順方向で書き込まれる必要がある。たとえば消去ブロック”０ｘ００”の書き込みポインタは”０ｘＦＦ”であり、一杯まで書き込まれていることが判る。したがって、この中のデータを更新するには、必ず消去が必要となる。
一方、消去ブロック”０ｘ０１”の書き込みポインタは”０ｘ８０”であり、”０ｘ８１”以降のページ領域にはそのまま書き込むことが可能である。ここにページ”０ｘＡ０”が書き込まれた場合、ポインタは”０ｘＡ０”にまで一気に移動する。消去ブロック”０ｘ７Ｅ”の書き込みポインタはどこも指していない。すなわち規定値以外の数字が入っており、この場合消去された状態から一切書き込みが行なわれていないことを示している。
【００９７】
本実施形態において、読み出しについての手順は第１の実施形態とほぼ同様であるが、アドレス変換はページ単位ではなくブロック単位で実施する。
【００９８】
一方、たとえば”０ｘ００１１ａ”というセクタの更新が成された場合、これをフラッシュメモリデバイス３０ｂ側に書き込むには、以下の処理が必要である。
【００９９】
消去ブロック（ＬＢＡ）”０ｘ００”は、既に末尾まで書き込まれており上書きができない。
したがって、制御回路３４ｂは予備ブロック（ＰＢＡ）”０ｘ７Ｆ”に元ブロック（ＰＢＡ）”０ｘ００”のページデータを順次コピーしていく。すなわち各ページ領域のデータを先頭から順にページバッファ３２ｂに一旦読み出し、さらに予備ブロックの同じ相対位置に書き込んでいく。この際、ページバッファ３２ｂに更新すべきセクタを含むページ”０ｘ１１”が読み出されたら、その中のセクタ”０ｘａ”のデータをバッファ上で更新する。さらに、末尾ページまでコピーが終わると、（ＬＢＡ）”０ｘ００”に対応する物理ブロックを（ＰＢＡ）”０ｘ７Ｆ”に張り替える。さらに元ブロック（ＰＢＡ）”０ｘ００”を消去して予備ブロックとする。
【０１００】
すなわちこのようなケースでは、１セクタの更新に消去ブロック全体の有効データの退避と元ブロックの消去が必要となる。このような処理が発生すると、書き込みの能力は極度に劣化する。このような更新をキャッシュメモリで処理すれば、上記オーバーヘッドを緩和することができる。
ただし、第１の実施形態と同様に、キャッシュメモリ３８ｂへの書き込む場合でも、ミスヒットし、かつエントリ追加のための空きも無ければ、一旦既存のエントリを解放し、空きをつくらねばならない。解放したエントリのデータは結局フラッシュメモリ３５ｂ，３６ｂに書き戻す必要があり、その作業はフラッシュメモリ３８ｂへの書き込みと同じである。
【０１０１】
本実施形態においては、転送ブロックを消去ブロックごとの区画で分割し、各々の区画単位でアクセス手順を決定する。たとえば、セクタドレス”０ｘ００８０Ｃ”〜”０ｘ０２００Ｃ”の範囲のブロックデータが書き込まれるとすると、それらは以下の如く３つのサブブロックに分割される。
【０１０２】
区画１（サブブロック１）：  ”０ｘ００８０Ｃ”〜”０ｘ００ＦＦＦ”
区画２（サブブロック２）：  ”０ｘ０１０００”〜”０ｘ０１ＦＦＦ”
区画３（サブブロック３）：  ”０ｘ０２０００”〜”０ｘ０２００Ｃ”
【０１０３】
このように分割した各々のサブブロックについて、最適な書き込み先を選択していく。図１１に従って、以下にその判定基準の例を示す。
【０１０４】
ここで、キャッシュメモリのエントリが満杯で、かつ書き込みセクタが全てミスヒットするという、最悪のケースへの対応を考えてみる。
そこに書き込みを行うには、書き込みに要するだけのエントリを解放し、それをフラッシュメモリ３５ｂ，３６ｂに書き戻す必要が生じる。したがって、書き込むべきデータサイズが大きいほどその際の処理量が大きくなり、キャッシュメモリ使用の不利が増す。
【０１０５】
たとえば、サブブロック２は２５６ページより成り、消去ブロック”０ｘ０１”をまるごと含んでいる。これをキャッシュメモリ３８ｂに格納すると、全エントリを消費する。この場合、最悪２５６個の互いに異なる消去ブロックに属するエントリを解放する必要があり、フラッシュメモリの２５６消去ブロックに対してページ書き込みを行う必要が生じる。
一方、このサブブロックをフラッシュメモリにそのまま書き込めば、単に１ページ分の書き込みで良い。従ってこのようなケースでは、キャッシュメモリ３８ｂへの書き込みが逆効果となるリスクが極めて高い。
【０１０６】
一方，サブブロック３は消去ブロック”０ｘ０２”に属する１３個のセクタよりなり、キャッシュメモリ３８ｂの１エントリ分を消費するのみである。したがって、上記最悪ケースでもキャッシュから解放し、フラッシュメモリに書き戻すべきエントリは１個であり、同じ１消去ブロックへの書き込みですむ。キャッシュメモリ３８ｂにヒットしていたり、エントリ追加のための空きがある場合は、フラッシュメモリにアクセスすることなく高速に処理できる。したがって、このサブブロックは殆どの場合キャッシュメモリ３８ｂ側に書き込む方が効率が良い。
【０１０７】
ここにおいて、本第２の実施形態においても、第１の実施形態と同様のアルゴリズムで、適切な書き込み先を選択できる。
たとえば、有効な書き込み手法の一つは、消去ブロック単位で区画分けされた各サブブロックごとに、そのデータの区画内の占有状態を検査し、それに応じて書き込み先をフラッシュメモリかキャッシュメモリの何れかに選択することである。
すなわち、各サブブロックにおいて書き込むべきセクタ数、あるいはキャッシュメモリ３８ｂに書き込む際に消費されるエントリ数を基準として、それらが既定数より多ければフラッシュメモリ３５ｂ，３６ｂに、既定数以下ならキャッシュメモリ３８ｂに書き込みを実施する。
各サブブロックにおけるセクタ数や消費されるエントリ数は、アドレス情報から瞬時に取得できる。従ってこのような判定アルゴリズムを用いてデータの書き込み先を適時選択すれば、簡便に書き込み効率及び性能を向上させることができる。
【０１０８】
あるいは、キャッシュメモリ３８ｂのエントリを検査して、データのヒットやエントリ追加のための空き状態を調べ、各サブブロックをキャッシュメモリ３８ｂに書き込む際、新規に追加すべきエントリ数または解放すべきエントリ数を導出する。しかる後にそれを基準に書き込み先を選定する。すなわち既定数より多くのエントリを追加または解放する必要があればフラッシュメモリ３５ｂ，３６ｂに、それ以下であればキャッシュメモリ３８ｂに書き込みを実施する。
【０１０９】
あるいは、フラッシュメモリ３５ｂ，３６ｂへの書き込み時にキャッシュメモリ３８ｂから同一消去ブロックに書き戻し可能なデータを検査し、判定に使用する。
たとえば上記サブブロック３を、仮にフラッシュメモリにそのまま書き込もうとした場合、キャッシュテーブル４５ｂから同じ区画３の消去ブロックに対応するエントリが検索できる。
すなわち、サブブロック３は、消去ブロック”０ｘ０２”に属するが、同じ消去ブロックからのエントリがキャッシュメモリ内に存在すれば、その消去ブロックへの書き込みに消去を必要とした場合には、該当ページの退避処理の際にそのデータをフラッシュメモリに書き戻すことができる。そのようなエントリはクリアとなり、必要に応じて解放することが可能である。すなわち、たとえばフラッシュメモリ３５ｂ，３６ｂへ同時書き込みが可能な総ページ数を基準とし、それが規定値以上ならフラッシュメモリにそのまま書き込む。
【０１１０】
ところで、本実施形態の如く、消去ブロックが基本的な書き換えの管理単位である場合、このブロック内の同じ場所に同じページ数を書き込む場合でも、図７の消去ブロックの管理テーブル４６ｂに関して前述したように、書き込み先ブロックの空き状況次第で必要とされる作業量は大きく異なる。
したがって、消去ブロック管理テーブル４６ｂから該当ブロックの空き状態を検査して、たとえば元の消去ブロックにそのまま書き込める場合は、書き込み先をフラッシュメモリ３５ｂ，３６ｂに選択し、それ以外の場合には前述の選択基準のいずれかに従うことで、さらに効率の良い書き込みが可能である。
【０１１１】
上述の如く、選択アルゴリズムには様々なバリエーションが存在し、さらにそれらは場合に応じて互いに組み合わせることも可能である。その基本的な手順は以下の通りである。
１．入力コマンドとアドレス情報を取得する。
２．消去ブロックによる区画をもとに、ブロックデータをサブブロックに分割し、各々のブロックについて順次書き込み処理を実施する。
３．その際、サブブロック内のデータの占有状態、さらにはキャッシュテーブルの検査、または書き込み先消去ブロックの空き領域の検査を行い、その結果に応じて書き込み先を選択する。
【０１１２】
上記３．の判定については、各々のサブブロックの書き込みに際して、
・フラッシュメモリデバイスにおけるブロック消去の発生回数を最小限に抑える
・ブロック消去が発生する場合には、該当ブロックの一連の処理の際に、なるべく多くの更新データを同じブロック内に書き込む
という視点に立ち、さらに判定に要する時間や処理の煩雑さも鑑みてその手順が設定されるのが望ましい。
【０１１３】
なお、サブブロックをフラッシュメモリ側に書き込む際は、第１の実施形態と同様に、キャッシュメモリとの整合を取るため、データがヒットしたエントリの処理を行う。その具体的対応手段としては、対応エントリ内のデータをサブブロックのデータで更新しておくか、もしくは対応エントリそのものを解放する。
【０１１４】
また、サブブロックをフラッシュメモリに書き込む際に少なくともブロック消去が必要であれば、前述の如く、同区間（同一消去ブロック）に属し、サブブロックに含まれないページについてもキャッシュテーブル４５ｂを検索し、ヒットしている（すなわち書き込み先と同一の消去ブロックに属する）エントリがあれば、そのデータを同時にフラッシュメモリに書き込むのが望ましい。書き戻したエントリはクリアとなり、必要に応じて解放することが可能である。
【０１１５】
ところで、ここまでの説明は半導体記憶装置を対象に、記憶装置自体がその内部でデータの書き込み先をキャッシュメモリとフラッシュメモリに振り分ける形態を説明した。しかし本発明の実施形態の書き込み手順や選択アルゴリズムに関しては、それ以外の形態でも応用が可能である。
【０１１６】
たとえばファイルストレージとしてフラッシュメモリデバイスが組み込まれたコンピュータシステムでは、ＣＰＵがシステムメモリ内にフラッシュメモリデバイス用のキャッシュメモリやアドレス変換テーブルを構築し、ドライバソフトを用いてフラッシュメモリデバイスへの書き込み管理を実施することも多い。
【０１１７】
図１２は、そのような本実施形態に係るコンピュータシステムの構成例を示す図である。
【０１１８】
図１２のコンピュータシステムＣＯＭＳＹＳは、ファイル記憶装置としてのフラッシュメモリデバイス３０ｃおよび処理装置５０を主構成要素として有している。
【０１１９】
フラッシュメモリデバイス３０ｃは、ページバッファ３２ｃを含むブリッジ回路３１ｃ、およびＮＡＮＤ型フラッシュメモリ３５ｃ，３６ｃを含む。
また、処理装置５０は、ＣＰＵ(処理ユニット)５１、ＲＡＭからなるシステムメモリ、およびシステムバス５３ｃを有する。
【０１２０】
ＣＰＵ５１ｃは３２ビットのシステムバス５３ｃを介してシステムメモリ５２ｃであるＲＡＭと接続されている。
さらに、このシステムバス５３ｃにはフラッシュメモリデバイス３０ｃのブリッジ回路３１ｃが接続されている。このブリッジ回路３１ｃに繋がる３２ビットのデータバス３３ｃ）には、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ３５ｃ，３６ｃが並列接続されている。
２つのチップのＮＡＮＤ型フラッシュメモリ３５ｃ，３６ｃは読み出しや書き込みにおいて、同時並列にアクセスされる。
ページバッファ３２ｃはアクセスされたページ領域を一時記憶するページバッファであり、ブリッジ回路３１ｃに内蔵されている。
ブリッジ回路３１ｃはＣＰＵ５１ｃから各種コマンドを受け取り、フラッシュメモリ３５ｃ，３６ｃとＣＰＵ５１ｃまたはシステムメモリ５２ｃとの間のデータのやり取りを、ページバッファ３２ｃを用いて媒介する。
ブリッジ回路３１ｃが受け取るコマンドは、たとえばフラッシュメモリ３５ｃ，３６ｃの所定のページへのアクセスの他、同フラッシュメモリの所定ブロックの消去、及び所定ページの指定アドレスへのコピー、フラッシュメモリのリセット等である。すなわちＣＰＵ５１ｃから見れば、ブリッジ回路３１ｃ以降は一つのフラッシュメモリデバイス３０ｃとみなすことができる。
【０１２１】
一方，システムメモリ５２ｃ内には、上記フラッシュ記憶システム(ファイル記憶装置)を制御するためのドライバ５４ｃが常駐している。このドライバ５４ｃは、オペレーティングシステム（ＯＳ）やアプリケーションからの記憶装置へのアクセスを受け、同じメモリ中に構成されたアドレス変換テーブル５５ｃ（第１および第２の実施形態のアドレス変換テーブルに３８ｃに相当する）を参照してアクセス時のページアドレスを変換する。
さらにシステムメモリ５２ｃ内にはフラッシュメモリデバイスのキャッシュメモリ領域５６ｃおよびキャッシュテーブル５７ｃが構築されている。
【０１２２】
このようなケースでは、アプリケーションから発行されたファイルストレージへの書き込み要求をドライバ５４ｃが受けて、そのアドレス情報からデータブロックの書き込み先を、キャッシュメモリ領域５６ｃかフラッシュメモリデバイス３０ｃに選択すれば良い。その際には前述の実施形態と全く同様の手順で、書き込みの効率を向上させることが可能である。
すなわち、フラッシュメモリデバイス３０ｃの書き込みページまたは消去ブロックをもとに区画を設けてデータをサブブロックに分割し、各々のサブブロックごとに既定の基準に従って書き込み先を選択する。
一括書き込み単位であるページを区画とした場合には、選択に際しては各サブブロックのデータの占有状況、さらにはキャッシュテーブル５７ｃを検査し、その結果をもとに選択を実施すれば良い。
一括消去単位である消去ブロックを区画とした場合には、選択に際しては各サブブロックのデータの占有状況、キャッシュテーブル５７ｃ、あるいは書き込み先のフラッシュデバイス３０ｃの消去ブロック空き状況を検査し、その結果をもとに選択を実施すれば良い。
【０１２３】
なお、本発明の実施形態に係る半導体記憶装置やコンピュータシステムにおけるキャッシュメモリにはＳＲＡＭ、ＤＲＡＭ等揮発性ＲＡＭを使用しても良いが、たとえば半導体記憶装置がモバイルメディアの場合、急な引き抜き等の電源瞬断に耐性が必要となる。また組み込み型であっても、コンピュータ機器そのものの電源瞬断に備える必要がある。
【０１２４】
したがって、キャッシュメモリには強誘電体メモリ等の不揮発性ＲＡＭを使用し、さらにはキャッシュテーブルやアドレス変換テーブルもそのような不揮発性ＲＡＭ内に格納することが望ましい。
【０１２５】
図１３は、キャッシュメモリに強誘電体メモリ等の不揮発性ＲＡＭを使用した構成を採用したファイル記憶装置の構成例を示す図である。
【０１２６】
ファイル記憶装置３０ｄは、インターフェース回路（Ｉ／Ｆ）３１ｄ、ページバッファ３２ｄ、メモリバス３３ｄ、制御回路３４ｄ、ＮＡＮＤ型フラッシュメモリ３５ｄ，３６ｄ、制御回路３７ｄ、内部バス３９ｄ、および強誘電体メモリ４７ｄを含んで構成されている。
【０１２７】
ファイル記憶装置３０ｄの内部においては、３２ビットのメモリバス３３ｄに、１６ビットの入出力を持つ２チップのＮＡＮＤ型フラッシュメモリ３５ｄ，３６ｄが並列接続されている。
２つのチップのＮＡＮＤ型フラッシュメモリ３５ｄ，３６ｄは読み出しや書き込みにおいて、同時並列にアクセスされる。
各々のフラッシュメモリ３５ｄ、３６ｄは書き込みや読み出しのアクセスをたとえば４ｋBのページ単位で行う。
したがって、実ページサイズとしては８ｋBが一括アクセスされることになる。
ページバッファ３２ｄはアクセスされたページ領域のデータを一時記憶するページバッファである。
フラッシュメモリ３５ｄ，３６ｄとページバッファ３２ｄとの間のデータの送受は、制御回路３７ｄで制御されている。
さらに制御回路３７ｄは、必要に応じて転送データにＥＣＣ符号化によるエラー補正を施したり、フラッシュメモリ内の欠陥ブロックの管理を実施する。両フラッシュメモリはページバッファ３２ｄを介して記憶装置の内部バス３９ｄとの間でデータを入出力する。
すなわち、フラッシュメモリ３５ｄ、３６ｄあるいはメモリバス３３ｄ上に接続されたページバッファ３２ｄと転送制御回路３７ｄを併せた回路群ＦＬＭＤは実質的に一つのフラッシュメモリデバイスを構成し、記憶装置の内部バス３９ｄに接続されているとみなすことができる。
【０１２８】
さらに、内部バス３９ｄには強誘電体メモリ４７ｄとインターフェース回路３１ｄ、および制御回路３４ｄが接続されている。インターフェース回路３１ｄはＡＴＡやＰＣＩエクスプレス等の規格に従ってホストとの間で、データやコマンドの送受を行う。
強誘電体メモリ４７ｄ内には、実ページサイズの１／Ｎ（Ｎは２以上の整数）をエントリとしたキャッシュメモリ３８ｄ、ページ単位の仮想アドレスを管理するアドレス変換テーブル４４ｄ、およびキャッシュメモリの管理テーブル４５ｄが構築されている。
制御回路３４ｄは、記憶装置３０ｄの内部においてページバッファ３２ｄ、キャッシュメモリ３８ｄ、およびインターフェース回路３１ｄの間のデータの送受を管理する。
【０１２９】
または、図１１におけるキャッシュメモリ３８ｄと制御回路３４ｄは一つのＩＣチップに統合して同時に製造しても良い。
さらに望ましくはインターフェース回路３１ｄ、ページバッファ３２ｄおよび制御回路３７ｄ）も同一のＩＣチップに統合し、ファイル記憶装置を左記ＩＣチップとフラッシュメモリのＳＩＰ（Ｓｙｓｔｅｍ  Ｉｎ  Ｐａｃｋａｇｅ）で構成しても良い。
【０１３０】
なお、不揮発性ＲＡＭとしては、強誘電体膜を用いたＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ＲＡＭ）、強磁性体を用いたＭＲＡＭ（Ｍａｇｎｅｔｉｃ  ＲＡＭ）や、相変化材料を用いたＯＵＭ（Ｏｖｏｎｉｃ  Ｕｎｉｆｉｅｄ  Ｍｅｍｏｒｙ）、ＲＲＡＭ等が提案されている。
ＦｅＲＡＭは強誘電体キャパシタの分極方向の違いでデータを記憶する半導体メモリである。たとえばＵＳ４８７３６６４においてＳ．Ｓｈｅｆｆｅｉｅｌｄらがその一形態を提案している。
【０１３１】
ＭＲＡＭは強磁性膜のスピン方向の違いでデータを記憶する半導体メモリである。たとえばＩＳＳＣＣ２０００の論文ダイジェストの１２８ページに、Ｒ．Ｓｃｈｅｕｅｒｌｅｉｎらが論文を掲載している。
ＯＵＭはたとえばカルコゲナイド膜の相転移でデータを記憶する半導体メモリである。たとえばＩＥＤＭ２００１の論文ダイジェストの８０３ページに、Ｓ．Ｌａｉらが論文を掲載している。
ＲＲＡＭは磁気抵抗効果材料の抵抗ヒステリシスでデータを記憶する半導体メモリである。たとえばＩＥＤＭ２００２の論文ダイジェストの７．５にはＷ．Ｗ．Ｚｈｕａｎｇらが論文を掲載している。
それらの不揮発性メモリは、いずれもセルレベルのアクセス速度や書き換え回数において、フラッシュメモリより数桁性能が高い。
【図面の簡単な説明】
【０１３２】
【図１】ＮＡＮＤ型フラッシュメモリの内部構成例を示す図である。
【図２】記憶装置を構成するフラッシュメモリの概念図を示す図である。
【図３】本発明の第１の実施形態に係るファイル記憶装置を示す構成図である。
【図４】本発明の第１の実施形態に係るキャッシュメモリ管理テーブルの構成例を示す図である。
【図５】アドレス変換テーブルの構成例を示す図である。
【図６】第１の実施形態に係る区画による分割と判定基準例を示す図である。
【図７】第１の実施形態に係るブロックデータ書き込み手順を示すフローチャートである。
【図８】本発明の第２の実施形態に係るファイル記憶装置を示す構成図である。
【図９】本発明の第２の実施形態に係るキャッシュ管理テーブルの構成例を示す図である。
【図１０】本発明の第２の実施形態に係る消去管理テーブルの構成例を示す図である。
【図１１】第２の実施形態に係る区画による分割と判定基準例を示す図である。
【図１２】本発明の実施形態に係るコンピュータシステムの構成例を示す図である。
【図１３】上述のキャッシュメモリに強誘電体メモリ等の不揮発性ＲＡＭを使用した構成を採用したファイル記憶装置の構成例を示す図である。
【符号の説明】
【０１３３】
３０，３０ｂ，３０ｃ、３０ｄ・・・ファイル記憶装置、３１，３１ｂ，３１ｄ・・・インターフェース回路（Ｉ／Ｆ）、３１ｃ・・・ブリッジ回路、３２，３２ｂ，３２ｃ，３２ｄ・・・ページバッファ、３３，３３ｂ，３３ｃ，３３ｄ・・・メモリバス、３４，３４ｂ、３４ｄ・・・制御回路、３５，３６，３５ｂ，３６ｂ，３５ｃ，３６ｃ，３５ｄ，３６ｄ・・・ＮＡＮＤ型フラッシュメモリ、３７，３７ｂ，３７ｄ・・・制御回路、３８，３８ｂ，３８ｄ，５６ｃ・・・キャッシュメモリ、３９，３９ｂ・・・内部バス、４４，４４ｄ・・・アドレス変換テーブル、４５，４５ｂ，４５ｄ・・・キャッシュの管理テーブル（キャッシュテーブル）、４７ｄ・・・強誘電体メモリ、ＣＯＭＳＹＳ・・・コンピュータシステム、５０・・・処理装置、５１・・・ＣＰＵ、５２・・・システムメモリ（ＲＡＭ）、５３・・・システムバス。
【図１】
2007115004.tif 000003
【図２】
2007115004.tif 000004
【図３】
2007115004.tif 000005
【図４】
2007115004.tif 000006
【図５】
2007115004.tif 000007
【図６】
2007115004.tif 000008
【図７】
2007115004.tif 000009
【図８】
2007115004.tif 000010
【図９】
2007115004.tif 000011
【図１０】
2007115004.tif 000012
【図１１】
2007115004.tif 000013
【図１２】
2007115004.tif 000014
【図１３】
2007115004.tif 000015