(57)【要約】【課題】データの更新や消去が高速に行われる記憶装置等や、劣化が起きにくい記憶装置等を提供することである。【解決手段】フラッシュメモリ１１の記憶領域は、消去の単位であるブロックが物理ページへと分割され、物理ページは更に論理ページへと分割されており、物理ページ毎に冗長部がある。ＣＰＵ１２１は、書き込むデータと書込先の論理アドレスとを供給されると、空いている論理ページにこのデータを書き込み、供給された論理アドレスをこの論理ページに割り当てる。古いデータを記憶している論理ページがある物理ページの冗長部の旧データフラグは、この論理ページ内のデータが無効であることを示すよう変更される。新たなデータの書き込みは、論理アドレスの割り当てがない論理ページへとなされる。ブロックをフラッシュイレースするとき、旧データフラグにより指示されている論理ページが記憶するデータは転記されない。【選択図】　図１
2004078907.tif 000002
【特許請求の範囲】
【請求項１】
ユーザ用データを記憶するための複数のメモリブロックを含み、各々の前記メモリブロックが１個以上の物理ページより構成されていて、各々の前記物理ページが１個以上の論理ページを含んでいる記憶手段と、
書き込み対象のユーザ用データが自己に供給されたとき、当該書き込み対象のユーザ用データを、前記論理ページのうちユーザ用データを記憶可能な状態にある空き論理ページに書き込むユーザ用データ書込手段と、
前記書き込み対象のユーザ用データにより置換される対象のユーザ用データが前記論理ページに記憶されているか否かを判別して、記憶されていると判別したとき、当該置換される対象のユーザ用データが有効なユーザ用データではないことを示す有効性データを、前記置換される対象のユーザ用データを記憶する論理ページを含む物理ページに書き込むフラグ書込手段と、を備える、
ことを特徴とする記憶装置。
【請求項２】
前記論理ページには物理アドレスが割り当てられており、
前記論理ページの物理アドレスと、当該論理ページを外部の装置が特定するために用いる論理アドレスとの対応付けを表すアドレス変換テーブルを記憶するテーブル記憶手段と、
前記論理ページのうちからユーザ用データを記憶可能な状態にある空き論理ページを特定して、特定した空き論理ページの物理アドレスを指示する書込ポインタを記憶する空きページポイント手段と、を更に備え、
前記ユーザ用データ書込手段は、書き込み対象のデータ及び論理アドレスが自己に供給されたとき、当該書き込み対象のデータを、前記書込ポインタにより指示された空き論理ページに書き込み、当該空き論理ページの物理アドレスと当該論理アドレスとの対応付けを表すよう前記アドレス変換テーブルを更新する、
ことを特徴とする請求項１に記載の記憶装置。
【請求項３】
前記フラグ書込手段は、書き込んだ前記書き込み対象のユーザ用データが有効なユーザ用データであることを示す有効性データを、当該書き込み対象のユーザ用データを記憶した論理ページを含む物理ページに書き込み、
前記ユーザ用データ書込手段は、各前記有効性データに基づき、ユーザ用データを記憶していない論理ページを特定し、特定した論理ページを前記空き論理ページとして扱う、
ことを特徴とする請求項１又は２に記載の記憶装置。
【請求項４】
消去対象のメモリブロック内の各前記論理ページに記憶されているユーザ用データが有効か否かを前記有効性データに基づいて判別し、有効と判別したユーザ用データを他のメモリブロックに転記してから、当該消去対象のメモリブロックが記憶するデータを消去する消去手段を備え、
前記消去手段は、各前記有効性データに基づき、前記他のメモリブロック内にあってユーザ用データを記憶していない論理ページを特定し、特定した論理ページに、前記有効と判別したユーザ用データを転記する、
ことを特徴とする請求項１、２又は３に記載の記憶装置。
【請求項５】
読み出し対象の論理ページを特定するための情報が自己に供給されたとき、前記情報に基づいて当該読み出し対象の論理ページを特定し、特定した読み出し対象の論理ページよりユーザ用データを読み出して外部に出力する読出手段を備える、
ことを特徴とする請求項１乃至４のいずれか１項に記載の記憶装置。
【請求項６】
ユーザ用データを記憶するための複数のメモリブロックを含み、各々の前記メモリブロックが１個以上の物理ページより構成されていて、各々の前記物理ページが１個以上の論理ページを含んでいるメモリを管理するメモリ管理方法であって、
書き込み対象のユーザ用データが自己に供給されたとき、当該書き込み対象のユーザ用データを、前記論理ページのうちユーザ用データを記憶可能な状態にある空き論理ページに書き込み、
前記書き込み対象のユーザ用データにより置換される対象のユーザ用データが前記論理ページに記憶されているか否かを判別して、記憶されていると判別したとき、当該置換される対象のユーザ用データが有効なユーザ用データではないことを示す有効性データを、前記置換される対象のユーザ用データを記憶する論理ページを含む物理ページに書き込む、
ことを特徴とするメモリ管理方法。
【請求項７】
ユーザ用データを記憶するための複数のメモリブロックを含み、各々の前記メモリブロックが１個以上の物理ページより構成されていて、各々の前記物理ページが１個以上の論理ページを含んでいるメモリに接続されたコンピュータを、
書き込み対象のユーザ用データが自己に供給されたとき、当該書き込み対象のユーザ用データを、前記論理ページのうちユーザ用データを記憶可能な状態にある空き論理ページに書き込むユーザ用データ書込手段と、
前記書き込み対象のユーザ用データにより置換される対象のユーザ用データが前記論理ページに記憶されているか否かを判別して、記憶されていると判別したとき、当該置換される対象のユーザ用データが有効なユーザ用データではないことを示す有効性データを、前記置換される対象のユーザ用データを記憶する論理ページを含む物理ページに書き込むフラグ書込手段と、
して機能させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、記憶装置、メモリ管理方法及びプログラムに関し、特に、ブロック消去型の記憶装置、ブロック消去型の記憶装置の記憶領域を管理するメモリ管理方法及びプログラムに関する。
【０００２】
【従来の技術】
コンピュータ等によりアクセス（データの読み書き及び消去）可能な記録媒体として、ハードディスク装置やフロッピー（登録商標）ディスクに加え、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ　Ｅｒａｓａｂｌｅ／Ｐｒｏｇｒａｍｍａｂｌｅ　Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）フラッシュメモリが用いられている。フラッシュメモリを、例えばマイクロソフト社のＭＳ−ＤＯＳ（登録商標）やＷｉｎｄｏｗｓ（登録商標）などのディスクオペレーティングシステムの制御の下でファイルを記憶させるために使用する場合は、ハードディスク装置の使用時に従来より用いられているデータの読み書き単位（例えば、５１２バイト）を用いた手法で読み書きを行うと、制御が容易である。
【０００３】
フラッシュメモリは、データの読み書きを行う場合の記憶容量の単位（一般に「ページ」あるいは「セクタ」と呼ばれる）より、データの消去を行う場合の記憶容量の単位（一般に「ブロック」と呼ばれる）の方が大きい。さらに、データを記憶する場合に記憶単位（セル）の論理状態を一方向にしか変更できず（例えば、“１”から“０”という方向にしか変更できず）、記憶単位を初期状態（例えば、“１”）とするには、記憶内容をブロック単位で消去する動作（フラッシュイレース）が必要である。
【０００４】
このため、フラッシュメモリに記憶されているデータの更新や消去を行う場合は、まず、更新する対象であるデータを含むブロック内にある更新や消去の対象でないデータを他のブロックへと転記してから、更新や消去の対象であるデータを含むブロックのフラッシュイレースや、更新後のデータの書き込みを行っていた。
【０００５】
なお、フラッシュメモリのうち、特にＮＡＮＤ型のものは、データの記憶が正常に行えない不良ブロックの発生を製造段階で十分に防止することが困難である。このため、従来より、各ブロックに割り当てられる物理アドレスとは別個の連続した論理アドレスを正常なブロックに動的に割り当て、論理アドレスとの対応関係を表すアドレス変換テーブルを作成して、アドレスが不連続となることによる外部からのアクセス手順の複雑化を回避している（例えば、特許文献１参照）。
【０００６】
【特許文献１】
国際公開第９９／３０２３９号パンフレット
【０００７】
【発明が解決しようとする課題】
フラッシュメモリに記憶されているデータの更新や消去を行う場合、従来は、更新や消去の対象となるデータがあるブロック内のすべてのデータを読み出していた。このため、データの読み出しに長時間がかかり、結局、データの書き換えや消去に要する時間は全体としても非常に長くなっていた。
【０００８】
また、データ量が１ブロック分の記憶容量に比べて非常に小さなファイルを書き換える場合には、このファイルと無関係なデータを格納するページや、データを格納していない空きページを大量に含んだブロックがフラッシュイレースされる。一方、ＮＡＮＤ型のフラッシュメモリは、大容量の構成を安価に実現できる一方、フラッシュイレースを繰り返すことにより劣化し、データの読み書きが正常にできなくなる、という特徴がある。
このため、上述の操作を行うと、少量のデータの書き換えのために効率の悪いフラッシュイレースが頻繁に行われることになり、フラッシュメモリの劣化が早まる。
【０００９】
特に近年は、フラッシュメモリの大容量化が進み、１ページあたりの記憶容量や１ブロックあたりの記憶容量は非常に大きくなっている。（例えば、１ページあたり約２キロバイト、１ブロックあたり約１２８キロバイト、等。）
また、フラッシュメモリの大容量化に伴って、物理的に１ページにあたる記憶領域（以下、物理ページと呼ぶこととする）が仮想的に複数の記憶領域（以下、論理ページと呼ぶこととする）に分割されて用いられる場合が増えている。物理ページを分割して用いる場合は、更新又は消去する対象のデータが物理ページ１個分に満たない場合でも、このデータを記憶するブロックを消去している。
このため、効率の悪いフラッシュイレースを防止する必要が更に高まっている。
【００１０】
この発明は上記実状に鑑みてなされたもので、データの更新や消去が高速に行われる記憶装置や、記憶装置が記憶するデータの更新や消去を高速に行うためのメモリ管理方法を提供することを目的とする。
また、この発明は、劣化が起きにくい記憶装置や、記憶装置の劣化を起こしにくいメモリ管理方法を提供することも目的とする。
【００１１】
【課題を解決するための手段】
上記目的を達成するため、本発明の第１の観点に係る記憶装置は、
ユーザ用データを記憶するための複数のメモリブロックを含み、各々の前記メモリブロックが１個以上の物理ページより構成されていて、各々の前記物理ページが１個以上の論理ページを含んでいる記憶手段と、
書き込み対象のユーザ用データが自己に供給されたとき、当該書き込み対象のユーザ用データを、前記論理ページのうちユーザ用データを記憶可能な状態にある空き論理ページに書き込むユーザ用データ書込手段と、
前記書き込み対象のユーザ用データにより置換される対象のユーザ用データが前記論理ページに記憶されているか否かを判別して、記憶されていると判別したとき、当該置換される対象のユーザ用データが有効なユーザ用データではないことを示す有効性データを、前記置換される対象のユーザ用データを記憶する論理ページを含む物理ページに書き込むフラグ書込手段と、を備える、
ことを特徴とする。
【００１２】
このような記憶装置においては、置換される対象のユーザ用データ（たとえばユーザ用データを更新する場合は、更新前の古いユーザ用データ）は、消去される代わりに、有効性データによって無効であることを示される。従って、更新時にメモリブロックの効率の悪いフラッシュイレースが行われずに済み、記憶装置の劣化が起きにくい。
また、有効性データを参照すれば、無効なユーザ用データの所在が特定される。このため、メモリブロックの記憶内容を消去する場合に、有効性データにより無効であることが示されている論理ページにあるデータの読み出しを省略しても、有効なユーザ用データを他のメモリブロックに保存しつつ正常に消去を行うことが可能である。従って、ユーザ用データの更新や消去が高速になる。
【００１３】
なお、前記論理ページには物理アドレスが割り当てられていてもよく、この場合、前記記憶装置は、例えば、
前記論理ページの物理アドレスと、当該論理ページを外部の装置（例えば、コンピュータ）が特定するために用いる論理アドレスとの対応付けを表すアドレス変換テーブルを記憶するテーブル記憶手段と、
前記論理ページのうちからユーザ用データを記憶可能な状態にある空き論理ページを特定して、特定した空き論理ページの物理アドレスを指示する書込ポインタを記憶する空きページポイント手段と、を更に備え、
前記ユーザ用データ書込手段は、書き込み対象のデータ及び論理アドレスが自己に供給されたとき、当該書き込み対象のデータを、前記書込ポインタにより指示された空き論理ページに書き込み、当該空き論理ページの物理アドレスと当該論理アドレスとの対応付けを表すよう前記アドレス変換テーブルを更新するものであってもよい。
このような構成を有していれば、ユーザ用データを書き込む毎に新たな空きブロック（ユーザ用データを記憶していないブロック）を探索して書き込むという操作が不要である。従って、ユーザ用データの書き込みが古いデータの消去を伴う場合（具体的には、ユーザ用データの書き換えを行う場合）でも、メモリブロックの効率の悪いフラッシュイレースが行われずに済み、記憶装置の劣化が起きにくい。
【００１４】
前記フラグ書込手段は、書き込んだ前記書き込み対象のユーザ用データが有効なユーザ用データであることを示す有効性データを、当該書き込み対象のユーザ用データを記憶した論理ページを含む物理ページに書き込むものであってもよい。
この場合、前記ユーザ用データ書込手段は、各前記有効性データに基づき、ユーザ用データを記憶していない論理ページを特定し、特定した論理ページを前記空き論理ページとして扱うものであってもよい。
【００１５】
前記記憶装置は、消去対象のメモリブロック内の各前記論理ページに記憶されているユーザ用データが有効か否かを前記有効性データに基づいて判別し、有効と判別したユーザ用データを他のメモリブロックに転記してから、当該消去対象のメモリブロックが記憶するデータを消去する消去手段を備えていてもよい。
この場合、前記消去手段は、各前記有効性データに基づき、前記他のメモリブロック内にあってユーザ用データを記憶していない論理ページを特定し、特定した論理ページに、前記有効と判別したユーザ用データを転記するものであってもよい。
【００１６】
前記記憶装置は、読み出し対象の論理ページを特定するための情報が自己に供給されたとき、前記情報に基づいて当該読み出し対象の論理ページを特定し、特定した読み出し対象の論理ページよりユーザ用データを読み出して外部に出力する読出手段を備えるものであってもよい。
【００１７】
また、本発明の第２の観点に係るメモリ管理方法は、
ユーザ用データを記憶するための複数のメモリブロックを含み、各々の前記メモリブロックが１個以上の物理ページより構成されていて、各々の前記物理ページが１個以上の論理ページを含んでいるメモリを管理するメモリ管理方法であって、
書き込み対象のユーザ用データが自己に供給されたとき、当該書き込み対象のユーザ用データを、前記論理ページのうちユーザ用データを記憶可能な状態にある空き論理ページに書き込み、
前記書き込み対象のユーザ用データにより置換される対象のユーザ用データが前記論理ページに記憶されているか否かを判別して、記憶されていると判別したとき、当該置換される対象のユーザ用データが有効なユーザ用データではないことを示す有効性データを、前記置換される対象のユーザ用データを記憶する論理ページを含む物理ページに書き込む、
ことを特徴とする。
【００１８】
このようなメモリ管理方法においては、置換される対象のユーザ用データ（たとえばユーザ用データを更新する場合は、更新前の古いユーザ用データ）は、消去される代わりに、有効性データによって無効であることを示される。従って、更新時にメモリブロックの効率の悪いフラッシュイレースが行われずに済み、メモリの劣化が起きにくい。
また、有効性データを参照すれば、無効なユーザ用データの所在が特定される。このため、メモリブロックの記憶内容を消去する場合に、有効性データにより無効であることが示されている論理ページにあるデータの読み出しを省略しても、有効なユーザ用データを他のメモリブロックに保存しつつ正常に消去を行うことが可能である。従って、ユーザ用データの更新や消去が高速になる。
【００１９】
また、本発明の第３の観点に係るプログラムは、
ユーザ用データを記憶するための複数のメモリブロックを含み、各々の前記メモリブロックが１個以上の物理ページより構成されていて、各々の前記物理ページが１個以上の論理ページを含んでいるメモリに接続されたコンピュータを、
書き込み対象のユーザ用データが自己に供給されたとき、当該書き込み対象のユーザ用データを、前記論理ページのうちユーザ用データを記憶可能な状態にある空き論理ページに書き込むユーザ用データ書込手段と、
前記書き込み対象のユーザ用データにより置換される対象のユーザ用データが前記論理ページに記憶されているか否かを判別して、記憶されていると判別したとき、当該置換される対象のユーザ用データが有効なユーザ用データではないことを示す有効性データを、前記置換される対象のユーザ用データを記憶する論理ページを含む物理ページに書き込むフラグ書込手段と、
して機能させるためのものであることを特徴とする。
【００２０】
このようなプログラムを実行するコンピュータによれば、置換される対象のユーザ用データ（たとえばユーザ用データを更新する場合は、更新前の古いユーザ用データ）は、消去される代わりに、有効性データによって無効であることを示される。従って、更新時にメモリブロックの効率の悪いフラッシュイレースが行われずに済み、メモリの劣化が起きにくい。
また、有効性データを参照すれば、無効なユーザ用データの所在が特定される。このため、メモリブロックの記憶内容を消去する場合に有効性データが示す論理ページにあるデータの読み出しを省略しても、有効なユーザ用データを他のメモリブロックに保存しつつ正常に消去を行うことが可能である。従って、ユーザ用データの更新や消去が高速になる。
【００２１】
【発明の実施の形態】
以下、この発明の実施の形態を、フラッシュメモリを備えた記憶システムを例とし、図面を参照して説明する。
【００２２】
図１は、この発明の実施の形態にかかる記憶システムの物理的構成を示すブロック図である。
図示するように、この記憶システムは、メモリユニット１と、コンピュータ２とから構成されている。メモリユニット１は、コンピュータ２が備えるスロットを介して、コンピュータ２に着脱可能に装着されている。
コンピュータ２が備えるスロットは、例えば、ＰＣＭＣＩＡバスを中継するためのＰＣＭＣＩＡスロットからなる。
【００２３】
メモリユニット１は、フラッシュメモリ１１及びコントローラ１２からなる。
【００２４】
フラッシュメモリ１１は、例えば、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ　Ｅｒａｓａｂｌｅ／Ｐｒｏｇｒａｍｍａｂｌｅ　Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）等の記憶装置からなる。フラッシュメモリ１１は、コントローラ１２が行うアクセスに応答し、コンピュータ２から供給されたデータの記憶と、記憶しているデータのコンピュータ２への供給と、記憶しているデータの消去とを行う。
【００２５】
フラッシュメモリ１１が有する記憶領域は、例えば図２に示すように６５５３６個の物理ページからなり、各々の物理ページは２１１２バイトの記憶容量を有する。
各物理ページは、各５１２バイトの論理ページ４個と、物理ページの末尾６４バイトを占める冗長部とから構成される。各論理ページに含まれるメモリセルには、連続的に０から５１１までの番地が与えられている。
【００２６】
論理ページには、ユーザデータ（コンピュータ２から供給され書き込まれるデータや、コンピュータ２に供給される対象となるデータ）が格納される。
冗長部には、この冗長部と同じ物理ページに属する各論理ページに格納されているユーザデータの内容が破壊されていないことを確認するためのＥＣＣ（エラー訂正コード）や、不良ブロックフラグが格納される。
【００２７】
不良ブロックフラグは、この不良ブロックフラグが格納されている物理ページが属するブロック（後述）が、データを正常に格納可能なブロック（良品ブロック）であるか、良品ブロックでないブロックすなわち不良ブロックであって、フラッシュメモリ１１の製造者等によって出荷前に不良と判断されたブロック（初期不良ブロック）であるか、不良ブロックであって、フラッシュメモリ１１の使用中にデータの正常な格納ができないと判断されたブロック（後発不良ブロック）であるか、を示すデータである。
【００２８】
なお、良品ブロックを表している不良ブロックフラグは、後発不良ブロックを示す値を上書きすることで、後発不良ブロックを表すように更新できるものとする。
ＮＡＮＤ型のフラッシュメモリは、値“１”を格納するメモリセルに値“０”を上書きすることが可能である。（値“０”を格納するメモリセルに値“１”を上書きすることはできず、当該メモリセルを含むブロックをいったんフラッシュイレース（後述）する必要がある。）
このため、例えば、フラッシュメモリ１１がＮＡＮＤ型のフラッシュメモリより構成されており、不良ブロックフラグが２ビットのデータより構成されているとした場合は、良品ブロックを示す値が“１１”、後発不良ブロックを示す値が“０１”又は“１０”、初期不良ブロックを示す値が“００”であれば、良品ブロックを表している不良ブロックフラグは、後発不良ブロックを示す値を上書きすることで、後発不良ブロックを表すように更新でき、この不良ブロックフラグを格納するブロックをフラッシュイレースする操作は不要となる。
【００２９】
また、冗長部には、この冗長部と同じ物理ページに属する各論理ページのうち無効なユーザデータを格納しているものがどれであるかを示す有効フラグが、後述する処理により格納される。なお、論理ページに格納されているユーザデータが無効なデータである場合としては、たとえば、このデータを更新したものがフラッシュメモリ１１の他の論理ページに格納された場合等がある。
【００３０】
なお、ある論理ページが無効なデータを格納していないことを示す有効フラグは、上書きすることで、当該論理ページが無効なデータを格納していることを表すように更新することができるものとする。
【００３１】
そして、各物理ページは、先頭から６４ページ単位で１つのブロックを構成する。各ブロックは２５６個の論理ページを有し、各々のブロックに属する各論理ページには、連続的に０から２５５までのページアドレスが付与されている。フラッシュメモリ１１の記憶領域全体は、１０２４個のブロックから構成され、先頭から連続的に０から１０２３までの物理ブロックアドレスを与えられている。
【００３２】
また、各々の物理ページの冗長部には、当該物理ページ内にある各論理ページに与えられている論理アドレスの値が格納される。論理アドレスは、フラッシュメモリ１１が後述する動作により読み書きされるときに、コントローラ１２により、データ読み書きの単位として認識される単位である。
【００３３】
論理ページの論理アドレスは、例えば、当該論理ページが属するブロックを示す上位の桁（論理ブロックアドレス）と、当該ブロック内での当該論理ページの位置を示す下位の桁（ページアドレス）とからなっている。論理アドレスの総数は、フラッシュメモリ１１が物理的に備える論理ページの総数（１ブロックあたりの論理ページは２５６個でブロックは１０２４個、総計２６２１４４個）より小さい所定量、例えば２５６０００個である。
【００３４】
フラッシュメモリ１１は、メモリユニット１のコントローラ１２より、特定のブロックのデータを消去するよう指示されると、当該ブロックに含まれるすべてのメモリセルの記憶内容をフラッシュイレースする（具体的には、例えばフラッシュメモリ１１がＮＡＮＤ型のフラッシュメモリからなる場合は、各メモリセルの記憶値を“１”とする）。
【００３５】
また、フラッシュメモリ１１の論理ページには、ディレクトリと、ＦＡＴ（Ｆｉｌｅ　Ａｌｌｏｃａｔｉｏｎ　Ｔａｂｌｅ）と、書き込みポインタ初期値とが格納され、後述する処理によって更新される。
【００３６】
ディレクトリ、ＦＡＴ及び書き込みポインタ初期値が格納される論理ページには、所定の条件に合致する論理アドレスが付される。具体的には、例えば、論理アドレスとして先頭の４０９６個のアドレス（すなわち、０ｈ以上ＦＦＦｈ以下のアドレス）が付される。（なお、本明細書及び図面において、末尾に文字“ｈ”を付した数字は１６進数を表す。）
【００３７】
図３は、ディレクトリ、ＦＡＴ及び論理ブロックアドレスの相互の対応関係を示す図である。図示するように、ディレクトリ及びＦＡＴが記憶された論理ページの論理アドレスは、例えば、ＣＰＵ１２１が記憶する（あるいはＣＰＵ１２１がＲＡＭ１２３に記憶させる）ディレクトリポインタによって示されている。
【００３８】
ディレクトリは、フラッシュメモリ１１内に記憶されているファイル（すなわち、一括して扱う対象としてコンピュータ２が指定するデータの集合）のファイル名と、そのファイルの先頭部分が記憶されている論理ページの論理アドレスとを示すテーブルである。
【００３９】
ＦＡＴは、フラッシュメモリ１１の記憶領域内でのファイルの配置を示すテーブルであり、ファイルが１つの論理ページ内に収まらないとき、図３に示すように、後続の部分を記憶する論理ページの論理アドレスをそれぞれ示すものである。ファイルの最終部分が記憶されている論理ページの論理アドレスは、図３に示すように、終了コード（ＥＣ）を付されることによって、この論理アドレスが最終部分を表すものであることが示される。
【００４０】
書き込みポインタ初期値は、ＣＰＵ１２１がユーザデータを書き込むべき論理ページを指し示す変数である後述の書き込みポインタの最新の値を表すものであり、この記憶システムが起動後最初にフラッシュメモリ１１へのユーザデータの書き込みにおいてユーザデータを書き込むべき論理ページを指定するものとなる。
【００４１】
コントローラ１２は、図１に示すように、ＣＰＵ（Ｃｅｎｔｒａｌ　Ｐｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ）１２１と、ＲＯＭ（Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）１２２と、ＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）１２３とを備えている。ＲＡＭ１２３は、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ　ＲＡＭ）より構成されている。
【００４２】
ＣＰＵ１２１は、ＲＯＭ１２２、ＲＡＭ１２３及びフラッシュメモリ１１に接続されており、また、コンピュータ２が備えるＰＣＭＣＩＡスロットを介してコンピュータ２に着脱可能に接続されている。
【００４３】
ＣＰＵ１２１は、コントローラ１２の製造者等によって予めＲＯＭ１２２に格納されているプログラムの処理に従って、後述する処理を行う。
そして、ＣＰＵ１２１は、アクセス装置を構成するコンピュータ２から供給される命令を取得すると、その命令を実行する。ＣＰＵ１２１が実行する命令には、フラッシュメモリ１１にアクセスする命令が含まれる。
【００４４】
ＲＡＭ１２３が有する記憶領域は、ＣＰＵ１２１の作業領域として用いられ、また、この記憶領域は退避用メモリ領域を含んでおり、更に、ＣＰＵ１２１が後述する処理により作成するＢＳＩ（Ｂｌｏｃｋ　Ｓｅａｒｃｈ　Ｉｎｄｅｘ）及びＢＰＴ（Ｂｌｏｃｋ　Ｐｏｉｎｔｅｒ　Ｔａｂｌｅ）と、書き込みポインタとを格納する。
【００４５】
退避用メモリ領域は、後述するデータ書き込みの処理において、書き込みを行う対象の論理ページを含むブロックに格納されているデータを一時的に格納するための記憶領域である。
【００４６】
ＢＳＩは、フラッシュメモリ１１の記憶領域に含まれる各ブロックのうちどれが空きブロック（すなわち、フラッシュイレースされユーザデータを記憶していない状態にあるブロック）であるかを特定する情報を格納する。ＢＳＩは、コントローラ１２の後述する処理に従って作成及び更新される。
【００４７】
フラッシュメモリ１１のブロックの総数が１０２４個であるときのＢＳＩの構造の一例を図４に示す。図示するように、ＢＳＩは１２８バイトのデータからなり、先頭のビットから順に、先頭のブロックから１０２４個目のブロックまで順に１対１に対応付けられており、対応付けられたブロックが空きブロックであるとき“１”、空きブロックでないとき“０”を格納する。
【００４８】
ＢＰＴは、各々の論理ページについて、当該ページの論理アドレスと物理アドレスとの対応関係を示す情報を格納するものである。ＢＰＴは、ＣＰＵ１２１による後述の処理に従って作成あるいは更新される。
【００４９】
ＢＰＴは、具体的には、例えば図５に示すデータ構造を有する。
すなわち、ＢＰＴは、例えばＲＡＭ１２３の記憶領域中の所定の論理的位置を占め、各々の論理アドレスに対応付けられた物理アドレスを記憶するための記憶領域を備える。そして、論理アドレスの総数が２５６０００個であるとした場合、例えば、図示するように、先頭から１８ビット毎に付されたアドレスが０ｈ〜３Ｅ７ＦＦｈである、合計５７６０００バイトの記憶領域を備えていればよい。
【００５０】
ＢＰＴが図５に示すデータ構造を有するとした場合、ＢＰＴを形成する記憶領域に付された各々のアドレスは、論理アドレスに所定のオフセット値を加えたもの等しい。
そして、各々のアドレスを付された１８ビットの記憶領域に格納されている内容は、当該アドレスが示す論理アドレスに対応付けられている論理ページの物理アドレス（物理ブロックアドレス及びページアドレスの組）を表す。
【００５１】
具体的には、例えば図５に示すように、アドレス０００１ｈを付された記憶領域に値“０Ａ１０Ｆｈ”が格納されており、オフセット値が００００ｈであるとする。この場合は、物理アドレスが０Ａ１０Ｆｈ（物理ブロックアドレスが“０Ａ１ｈ”で、ページアドレスが“０Ｆｈ”）である論理ページには、論理アドレスとして０００１ｈが対応付けられている。
【００５２】
ただし、各々のアドレスを付された記憶領域に格納されている内容が所定の値を表す場合（例えば、図示するように、物理アドレスの値“３ＦＦＦＦｈ”を表す場合）は、その値を格納している記憶領域のアドレスが示す論理アドレスには、物理アドレスが対応付けられていないことを表す。
【００５３】
書き込みポインタは、ＣＰＵ１２１がユーザデータを書き込むべき論理ページを指定する変数（ポインタ）であり、具体的には、該当する論理ページの物理アドレスを示しているものである。書き込みポインタの値は、後述する処理に従って更新される。
【００５４】
コンピュータ２はパーソナルコンピュータ等からなり、ＰＣＭＣＩＡスロットを備え、ＯＳ及びドライバを表すプログラムデータを記憶し、電源投入後、ＯＳを実行する。そして、ＰＣＭＣＩＡスロットにメモリユニット１が装着されたことを検知すると、ＯＳの処理に従ってドライバを起動する。
【００５５】
ドライバの処理を行うコンピュータ２は、コントローラ１２に上述の命令を供給したり、フラッシュメモリ１１に書き込む対象のデータを供給して、ＣＰＵ１２１に、フラッシュメモリ１１へのアクセスを行わせる。そして、自らが供給した命令に従ってＣＰＵ１２１がフラッシュメモリ１１から読み出して自らに供給したデータを、ＣＰＵ１２１より取得する。
【００５６】
（動作）
次に、この記憶システムの動作を、図６〜図１０を参照して説明する。
図６は、初期処理を示すフローチャートである。
図７は、データ読み出しの処理を示すフローチャートである。
図８は、データ書き込みの処理を示すフローチャートである。
図９は、ディレクトリ及びＦＡＴ更新の処理を示すフローチャートである。
図１０は、空きブロック確保の処理を示すフローチャートである。
【００５７】
（初期処理）
この記憶システムが起動すると、メモリユニット１のコントローラ１２のＣＰＵ１２１は、図６に示す初期処理を実行する。
初期処理を開始すると、ＣＰＵ１２１は、ＲＡＭ１２３の記憶領域のうち、ＢＰＴ及びＢＳＩを格納する部分の初期化を行う（図６、ステップＳ１０１）。
【００５８】
ステップＳ１０１でＣＰＵ１２１は、具体的には、ＲＡＭ１２３の記憶領域のうちＢＰＴを格納する部分について、上述のアドレスが示す各１８ビットの区画に、物理アドレスが対応付けられていないことを示す所定の値（例えば、上述の値“３ＦＦＦＦｈ”）を書き込む。また、ＢＳＩを格納する部分のビットの論理値を、すべて“０”とする。
【００５９】
次に、ＣＰＵ１２１は、フラッシュメモリ１１の、冗長部にあるデータを未だ読み出されていないブロックのうちから、最も物理ブロックアドレスが若いものを特定し、特定されたブロックに属する各物理ページの冗長部に格納されているデータをすべて読み出す（ステップＳ１０２）。
【００６０】
次に、ＣＰＵ１２１は、ステップＳ１０２で読み出したデータに基づき、ステップＳ１０２でデータを読み出したブロックが空きブロックであるか否かを判別する（ステップＳ１０３）。具体的には、例えば、ステップＳ１０２で読み出したデータが、所定の形式の空きブロックコードを含んでいるか否かを判別する。そして、空きブロックでないと判別すると、ＣＰＵ１２１は、処理をステップＳ１０５に移す。
【００６１】
一方、このブロックが空きブロックであるとステップＳ１０３で判別すると、ＣＰＵ１２１は、このブロックを示す物理ブロックアドレスから、ＢＳＩのうちこのブロックの状態を示すビットがＲＡＭ１２３の記憶領域中で占める位置を算出する。そして、位置を算出したビットの論理値を“１”に書き換える（ステップＳ１０４）。ステップＳ１０４の処理を終えると、ＣＰＵ１２１は処理をステップＳ１０６に移す。
【００６２】
一方、ステップＳ１０５で、ＣＰＵ１２１は、フラッシュメモリ１１の冗長部から読み出した、各論理ページの物理アドレスを、ＲＡＭ１２３の記憶領域に書き込む。ステップＳ１０５でＣＰＵ１２１が論理ページの物理アドレスを書き込む論理的位置は、冗長部から読み出した当該論理ページの論理アドレスに相当するアドレスを付された部分とする。これにより、ＢＰＴに、物理アドレスと論理アドレスとの対応付けを示す新たな情報が追加される。
【００６３】
そして、ＣＰＵ１２１は、フラッシュメモリ１１の同一のブロックから読み出したすべての論理アドレスについてステップＳ１０５の処理を終えると、処理をステップＳ１０６に移す。
【００６４】
ステップＳ１０６で、ＣＰＵ１２１は、ステップＳ１０２で冗長部に格納されているデータを読みとられたブロックの次のブロックが存在するか否かを判別する。そして、存在すると判別すると処理をステップＳ１０２に戻し、存在しないと判別すると、処理をステップＳ１０７に移す。
【００６５】
ステップＳ１０７でＣＰＵ１２１は、書き込みポインタ初期値が格納されている論理ページにアクセスして書き込みポインタ初期値を読み出し、ＲＡＭ１２３に記憶させ、初期処理を終了する。
以上説明した初期処理により、ＢＳＩ及びＢＰＴが作成され、書き込みポインタの初期値が特定される。
【００６６】
（データ読み出しの処理）
初期処理が終了すると、メモリユニット１のＣＰＵ１２１は、コンピュータ２より、フラッシュメモリ１１へのアクセスの指示を受け付ける。
コンピュータ２は、ＣＰＵ１２１にフラッシュメモリ１１からのデータの読み出しを指示するときは、まず、ディレクトリ及びＦＡＴを読み出すため、読み出しを指示する命令と、ディレクトリ及びＦＡＴが記憶されている各論理ページの論理アドレスを、ＣＰＵ１２１に供給する（図７、ステップＳ２０１）。
【００６７】
データの読み出しを指示する命令と、論理アドレスとを供給されたＣＰＵ１２１は、論理アドレスをキーとしてＢＰＴを検索し、ディレクトリ及びＦＡＴが記憶されている各論理ページの物理アドレスを索出し、索出した物理アドレスが示す各論理ページより、ディレクトリやＦＡＴを構成するデータを読み出して、コンピュータ２に供給する（ステップＳ２０２）。コンピュータ２は、ＣＰＵ１２１から供給されたディレクトリ及びＦＡＴを一時記憶する。
【００６８】
次に、コンピュータ２は、読み出す対象のデータを含むファイルのファイル名を有するファイルの内容が格納されている先頭の論理ページの論理アドレスを索出するため、このファイル名をキーとして、ＣＰＵ１２１より供給され一時記憶したディレクトリを検索する（ステップＳ２０３）。
【００６９】
次に、コンピュータ２は、ステップＳ２０３で索出した論理アドレスをキーとして、ＣＰＵ１２１から供給されたＦＡＴを検索し、ディレクトリから論理アドレスを索出されたページに後続する論理ページの論理アドレスがあればすべて索出して、該当する論理ページが連続する順序を特定する（ステップＳ２０４）。
【００７０】
そして、コンピュータ２は、ステップＳ２０３及びＳ２０４で索出された論理ページの記憶内容を読み出すため、読み出しを指示する命令と、ユーザデータを読み出すべき論理ページ（つまり、ステップＳ２０３及びＳ２０４で索出されたページで未だデータを読み出されていない論理ページのうちの先頭の論理ページ）の論理アドレスとを、ＣＰＵ１２１に供給する（ステップＳ２０５）。
【００７１】
ＣＰＵ１２１は、ステップＳ２０５で読み出しを指示する命令及び論理アドレスを供給されると、ＲＡＭ１２３にアクセスし、ステップＳ２０５でコンピュータ２より供給された論理アドレスをキーとしてＢＰＴを検索して、この論理アドレスに対応付けられた物理アドレスがあるか否かを判別する（ステップＳ２０６）。
そして、該当する物理アドレスがないと判別すると、ＣＰＵ１２１は、所定のエラーメッセージ（例えば、所定値“ＦＦｈ”）をコンピュータ２に供給して（ステップＳ２０７）、データ読み出しの処理を終了（異常終了）する。
【００７２】
一方、該当する物理アドレスがあると判別すると、ＣＰＵ１２１は、この物理アドレスが示す論理ページよりデータを読み出し、また、この論理ページと同じ物理ページの冗長部から、この論理ページのＥＣＣを読み出す（ステップＳ２０８）。
【００７３】
そして、ステップＳ２０８で読み出したデータのうち論理ページに格納されていたデータに基づいてＥＣＣを生成し、生成したＥＣＣと、読み出したデータのうち冗長部に格納されていたＥＣＣとに基づいて、論理ページに格納されていたデータが正しく読み出されたか否かを判別する（ステップＳ２０９）。
【００７４】
ステップＳ２０９で、正しく読み出されたと判別すると、ＣＰＵ１２１は、論理ページに格納されていたデータをコンピュータ２に供給する（ステップＳ２１０）。
【００７５】
正しく読み出されていないと判別すると、ＣＰＵ１２１は、論理ページに格納されていたデータを正しい内容へと訂正することが可能か否かを、冗長部に格納されていたＥＣＣ等に基づいて判別する（ステップＳ２１１）。そして、復元が可能であると判別すると、論理ページに格納されていたデータを訂正してコンピュータ２に供給する（ステップＳ２１２）。
【００７６】
ステップＳ２１１で、訂正ができないと判別すると、訂正できない当該データを読み出した論理ページと同じ物理ページの冗長部（又は、この論理ページと同じブロック内の他の任意の物理ページの冗長部）に格納されている不良ブロックフラグを、後発不良ブロックを表す値へと上書き更新し、データの読み取りに失敗したことをコンピュータ２に通知する（ステップＳ２１３）。コンピュータは、この通知を受けると、データ読み出しの処理を中断（異常終了）する。
【００７７】
一方、コンピュータ２は、ステップＳ２１０又はＳ２１２でＣＰＵ１２１より読み出し対象のデータを供給されると、ユーザデータを読み出すべき論理ページが残っているか否かを判別する（ステップＳ２１４）。そして、該当する論理ページが残っていると判別したときは処理をステップＳ２０５に戻し、残っていないと判別したときは処理を終了する。
【００７８】
以上説明したステップＳ２０１〜Ｓ２１４の処理により、フラッシュメモリ１１よりデータが読み出され、コンピュータ２へと供給される。
【００７９】
（データ書き込みの処理）
また、フラッシュメモリ１１へのデータの書き込みを行う場合、まず、コンピュータ２は、ディレクトリ及びＦＡＴを読み出すため、上述のステップＳ２０１と同様に、読み出しを指示する命令と、ディレクトリ及びＦＡＴが記憶されている各論理ページの論理アドレスを、ＣＰＵ１２１に供給する（図８、ステップＳ３０１）。ただし、既にデータの読み出し等のためにディレクトリ及びＦＡＴを一時記憶している場合はステップＳ３０１の処理を省略し、ステップＳ３０３から処理を始める。
【００８０】
データの読み出しを指示する命令及び論理アドレスを供給されたＣＰＵ１２１は、上述のステップＳ２０２と実質的に同一の処理を行うことによりディレクトリ及びＦＡＴを読み出して、コンピュータ２に供給する（ステップＳ３０２）。コンピュータ２は、ＣＰＵ１２１から供給されたディレクトリ及びＦＡＴを一時記憶する。
【００８１】
次に、コンピュータ２は、フラッシュメモリ１１に書き込む対象のファイルのファイル名をキーとして、ＣＰＵ１２１より供給されたディレクトリを検索し、そのファイル名がディレクトリに格納されているか否かを判別する（ステップＳ３０３）そして、格納されていないと判別したときは、処理を後述のステップＳ３０５に移す。
【００８２】
一方、格納されていると判別したとき、コンピュータ２は、ステップＳ３０３での検索により索出したファイル名に対応付けられている論理アドレスをキーとして、ＣＰＵ１２１から供給されたＦＡＴを検索し、このファイル名が示すデータを格納する各論理ページの論理アドレスを索出して一時記憶し（ステップＳ３０４）、処理をステップＳ３０５に移す。
【００８３】
ステップＳ３０５で、コンピュータ２は、後述するステップＳ３０６及びＳ３１３でＣＰＵ１２１に供給すべきデータを決定する。
具体的には、ステップＳ３０５でコンピュータ２は、例えばまず、書き込み対象のファイルの書き込みが完了しているか否かを判別し、完了していないと判別した場合は、書き込み対象のファイルに含まれるデータのうちフラッシュメモリ１１にまだ書き込まれていない、論理ページ１個分のデータをステップＳ３１３で供給することと決定し、また、このデータを格納する論理ページの論理アドレス（書込先の論理アドレス）をステップＳ３０６で供給することと決定する。
一方、書き込み対象のファイルの書き込みが完了していると判別した場合は、自己が一時記憶しているディレクトリ及びＦＡＴをフラッシュメモリに書き込んだか否かを判別する。そして、書き込みを終えていないと判別した場合は、自己が一時記憶するディレクトリ及びＦＡＴを構成するデータを論理ページ１個分、ステップＳ３１３で供給することと決定し、また、ディレクトリ及びＦＡＴを格納する論理ページの論理アドレス（書込先の論理アドレス）をステップＳ３０６で供給することと決定する。
また、ディレクトリ及びＦＡＴの書き込みも完了していると判別した場合は、書き込みの完了を通知する所定のデータをステップＳ３０６で供給することと決定する。
【００８４】
ステップＳ３０６で、コンピュータ２は、ステップＳ３０５で決定した結果に従い、データを格納する対象の論理ページの論理アドレス又は書き込み完了の通知を供給する。また、論理アドレスを供給する場合は、更に、フラッシュメモリ１１への論理ページ１個分のデータの書き込みを指示する命令も供給する。
【００８５】
なお、コンピュータ２は、書き込み対象のファイルに含まれるデータをステップＳ３１３で供給すると決定した場合、例えば、図９に示すディレクトリ及びＦＡＴ更新の処理を行うことにより、ステップＳ３０６でＣＰＵ１２１に供給する論理アドレスの決定と、ディレクトリ及びＦＡＴの更新を行う。
【００８６】
すなわち、コンピュータ２はまず、自己が一時記憶しているディレクトリ及びＦＡＴを解析して、データが書き込まれていない論理ページの論理アドレス（つまり、ファイル名に対応付けられていない論理アドレス）を、書き込むデータを格納するために必要な数だけ、書き込み対象の論理ページに割り当てる論理アドレスとして特定する（図９、ステップＳ４０１）。
【００８７】
ただし、書き込む対象のファイルのファイル名がディレクトリに含まれるとステップＳ３０３で判別した場合、ステップＳ４０１でコンピュータ２は、このファイル名に対応付けられている論理アドレス（つまり、ステップＳ３０４で一時記憶した論理アドレス）を、データを書き込む対象の論理ページの論理アドレスとして優先的に特定するようにしてもよい。
【００８８】
次に、コンピュータ２は、ステップＳ４０１で特定した各論理アドレスの並び順を決定する（ステップＳ４０２）。この並び順は、これらの論理アドレスを割り当てられた各論理ページの並び順を表すものであり、また、これらの論理ページに書き込まれたデータの並び順を表すものでもある。
【００８９】
コンピュータ２がステップＳ４０１〜Ｓ４０２の処理を行った場合、ステップＳ３０６でコンピュータ２は、ステップＳ４０１で特定した論理アドレスでＣＰＵ１２１に供給していないもののうちで、ステップＳ４０２で決めた並び順の先頭にあたる論理アドレスを、ＣＰＵ１２１に供給すればよい。
【００９０】
次に、コンピュータ２は、自ら一時記憶しているディレクトリ及びＦＡＴに、ステップＳ４０１で特定した論理アドレスを、図３に示す上述のデータ構造をとるようにして格納する（ステップＳ４０３）。なお、ディレクトリ及びＦＡＴにより表される論理アドレスの前後関係は、ステップＳ４０１で特定した並び順通りになるようにする。ステップＳ４０３の処理により、フラッシュメモリ１１に新たに書き込むべきディレクトリ及びＦＡＴが作成される。
【００９１】
一方、ＣＰＵ１２１は、ステップＳ３０６でコンピュータより書込先の論理アドレス又は書き込み完了の通知などのデータを供給されると、これらのデータのうちに、書き込み完了の通知が含まれているか否かを判別する（図８、ステップＳ３０７）。そして、含まれていると判別すると処理をステップＳ３１９に移し、供給されていないと判別すると、ステップＳ３０８以降の処理を行う。
【００９２】
ステップＳ３０８でＣＰＵ１２１はＲＡＭ１２３にアクセスして、ステップＳ３０６でコンピュータ２より供給された論理アドレスが示す論理ページの物理アドレスを、ＢＰＴより検索する。そして、ステップＳ３０８で物理アドレスが索出されたか否かを判別し（ステップＳ３０９）、索出されなかったと判別すると処理をステップＳ３１１に進める。
【００９３】
一方、ＣＰＵ１２１は、物理アドレスが索出されたとステップＳ３０９で判別すると、フラッシュメモリ１１にアクセスし、索出された物理アドレスを割り当てられている論理ページが属する物理ページの冗長部の有効フラグを、これらの論理ページが無効なデータを格納していることを表すように上書き更新し（ステップＳ３１０）、ステップＳ３１１に処理を進める。また、ステップＳ３１０でＣＰＵ１２１はＲＡＭ１２３にアクセスして、ステップＳ３０８で特定された物理アドレスを、物理アドレスが対応付けられていないことを表す値（例えば上述の値“３ＦＦＦＦｈ”）へと更新する。つまり、この論理ページへの論理アドレスの割り当てを解除する。
【００９４】
ステップＳ３１１でＣＰＵ１２１は、ＲＡＭ１２３にアクセスし、書き込みポインタが現在指し示している物理アドレスを、コンピュータ２より供給された書込先の論理アドレスに対応付けた形で、ＢＰＴに格納する。そしてＣＰＵ１２１は、フラッシュメモリ１１に書き込むべき論理ページ１個分のデータがコンピュータ２から供給されるのを待機する（ステップＳ３１２）。
【００９５】
フラッシュメモリ１１に書き込むデータがコンピュータ２から供給されると（ステップＳ３１３）、ＣＰＵ１２１はフラッシュメモリ１１にアクセスし、書き込みポインタが現在指し示している論理ページに、コンピュータ２から供給された論理ページ１個分のデータを書き込む（ステップＳ３１４）。また、ステップＳ３１４でＣＰＵ１２１は、この論理ページと同じ物理ページの冗長部に、ステップＳ３０６でコンピュータ２から供給された論理アドレスを、この論理ページの論理アドレスとして書き込む。
【００９６】
次に、ＣＰＵ１２１はＲＡＭ１２３にアクセスし、ステップＳ３１４で新たにデータを書き込まれたページが、このページを含むブロックの末尾のページだったか否かを、例えば書き込みポインタの現在の値に基づいて判別する（ステップＳ３１５）。そして、末尾のページではなかったと判別すると、処理をステップＳ３１８に移す。
【００９７】
一方、新たにデータを書き込まれたページがブロックの末尾のページであったとステップＳ３１５で判別すると、ＣＰＵ１２１は、ＲＡＭ１２３が記憶するＢＳＩの内容を、このブロックが空きブロックでないことを表すように更新する（ステップＳ３１６）。
【００９８】
次に、ＣＰＵ１２１は、ブロックをフラッシュイレースして空きブロックを確保するか否かを、任意の基準に基づいて決定する（ステップＳ３１７）。具体的には、ＣＰＵ１２１は、例えばＢＳＩの内容に基づいて現在の空きブロックの数を数え、空きブロックの数が２個以下であれば空きブロックを確保すると決定し、３個以上であれば空きブロックを確保しないと決定すればよい。
【００９９】
そして、ＣＰＵ１２１は、空きブロックを確保しないと決定すると、処理をステップＳ３１８に移し、空きブロックを確保すると決定すると、図１０に示す空きブロック確保の処理を開始する。
【０１００】
空きブロック確保の処理を開始すると、ＣＰＵ１２１は、データを消去して空きブロックにする対象のブロックを１個以上特定する（図１０、ステップＳ５０１）。
【０１０１】
なお、ステップＳ５０１でＣＰＵ１２１がフラッシュイレースする対象のブロックを決定する基準は任意であり、例えばＣＰＵ１２１は、フラッシュイレースされて空きブロックになった最新のブロック以降のブロック（つまり、このブロックより大きな物理ブロックアドレスを与えられているブロック）のうち、物理ブロックアドレスがもっとも小さい非空きブロック（空きブロックでないブロック）を、フラッシュイレースする対象として決定すればよい。ただし、該当する非空きブロックが１個もない場合は、フラッシュメモリ１１のすべての非空きブロックのうちもっとも物理ブロックアドレスが小さいものを、フラッシュイレースする対象とする。
【０１０２】
次に、ＣＰＵ１２１は、特定したブロックのうちから、最初にフラッシュイレースするブロックを１個指定する（ステップＳ５０２）。なお、ステップＳ５０２でＣＰＵ１２１がブロックを指定する基準も任意であり、例えばＣＰＵ１２１は、ステップＳ５０１で特定したブロックのうち物理ブロックアドレスがもっとも小さいブロックを指定すればよい。
【０１０３】
次に、ＣＰＵ１２１は、ステップＳ５０２又は後述のステップＳ５１２で最も新しく指定したブロック内の各物理ページの冗長部が格納する有効フラグを参照することにより、当該ブロック内の各論理ページのうち有効なユーザデータを格納しているものを特定する（ステップＳ５０３）。そして、ステップＳ５０３で特定した各論理ページからユーザデータ（退避対象のデータ）を読み出し、ＲＡＭ１２３に記憶させる（ステップＳ５０４）。また、ステップＳ５０４では、ステップＳ５０３で特定した各論理ページの論理アドレス、及び、退避対象のデータのＥＣＣも、冗長部から読み出してＲＡＭ１２３に記憶させる。
なお、ＣＰＵ１２１は、ステップＳ５０４で読み出したユーザデータ及びＥＣＣの誤りをチェックし、訂正可能な誤りがあれば訂正したユーザデータ及びＥＣＣをＲＡＭ１２３に記憶させるようにしてもよい。
【０１０４】
次に、ＣＰＵ１２１は、書き込みポインタをインクリメントする（ステップＳ５０５）。具体的には、ＣＰＵ１２１は、書き込みポインタが現在指し示している論理ページ以降の論理ページを含む物理ページの冗長部を参照することにより、書き込みポインタが現在指し示している論理ページ以降であって論理アドレスが冗長部に書き込まれていない論理ページのうち先頭のものを特定する。そして、特定した論理ページの物理アドレスを指し示すように、ＲＡＭ１２３が記憶する書き込みポインタの値を更新する。なお、書き込みポインタが現在指し示している論理ページがブロックの末尾の論理ページである場合、ステップＳ５０５でＣＰＵ１２１は、ＢＳＩを検索することにより新たな空きブロックを１個特定し、特定した空きブロックの先頭の論理ページを特定し、特定した当該先頭の論理ページの物理アドレスを指し示すように、ＲＡＭ１２３が記憶する書き込みポインタの値を更新すればよい。
【０１０５】
次に、ＣＰＵ１２１は、新たな退避対象のデータを書き戻す（ステップＳ５０６）。すなわち、ステップＳ５０４でＲＡＭ１２３に記憶させた退避対象のデータのうち、まだフラッシュメモリ１１に書き戻されていないものを論理ページ１個分、書き込みポインタが現在指し示している論理ページに書き込む。なお、ＣＰＵ１２１は、退避対象のデータのうちフラッシュメモリ１１に書き戻した部分をＲＡＭ１２３の記憶領域から消去してもよい。
【０１０６】
また、ステップＳ５０６では、書き戻すべき新たな退避対象のデータが従前格納されていた論理ページに与えられていた論理アドレスを、書き込みポインタが現在指し示している論理ページを含む物理ページの冗長部に、この論理ページの論理アドレスとして書き込む。
【０１０７】
次に、ＣＰＵ１２１は、ＲＡＭ１２３にアクセスし、ステップＳ５０６で新たに退避対象のデータが書き込まれた論理ページの論理アドレスに対応付けた形で、ＢＰＴに、書き込みポインタが現在指し示している物理アドレス（つまり、新たに退避対象のデータが書き込まれた論理ページの物理アドレス）を格納する（ステップＳ５０７）。
【０１０８】
次に、ＣＰＵ１２１は、退避対象のデータがすべて書き戻されたか否かを判別し（ステップＳ５０８）、書き戻されていないものがあると判別すると、処理をステップＳ５０５に戻す。
【０１０９】
一方、すべて書き戻されたとステップＳ５０８で判別すると、ＣＰＵ１２１は、ステップＳ５０２又はＳ５１２で最も新しく指定したブロックをフラッシュイレースして空きブロックにし、空きブロックとなったこのブロックの各物理ページの冗長部に空きブロックコードを書き込む（ステップＳ５０９）。（ただし、フラッシュメモリ１１がＮＡＮＤ型のフラッシュメモリより構成されている場合であって、空きブロックコードが値“１”のビットのみからなっている場合は、特に空きブロックコードを書き込む動作は不要である。）
また、ＣＰＵ１２１はＲＡＭ１２３にアクセスして、ＢＳＩの内容を、このブロックが空きブロックであることを表すように更新する（ステップＳ５１０）。
【０１１０】
そして、ＣＰＵ１２１は、ステップＳ５０１でフラッシュイレースの対象として特定したブロックのうち、まだフラッシュイレースされていないブロックがあるか否かを判別する（ステップＳ５１１）。そして、まだフラッシュイレースされていないブロックがあると判別すると、該当するブロックのうちから１個を新たに指定し（ステップＳ５１２）、処理をステップＳ５０３に戻す。なお、該当するブロックが複数ある場合において、ステップＳ５１２でＣＰＵ１２１がそのうちの１個を指定する基準も任意である。
【０１１１】
一方、フラッシュイレースの対象として特定したブロックがすべてフラッシュイレースされたとステップＳ５１１で判別すると、ＣＰＵ１２１は空きブロック確保の処理を終了し、ステップＳ５０５の処理と同様にして書き込みポインタをインクリメントし（ステップＳ３１８）、次の書込先の論理アドレス又は書き込み完了の通知がコンピュータ２から供給されるのを待機する。
なお、ステップＳ５０２の処理を省略し、ステップＳ５０１で特定されたすべてのブロックについて、一括してステップＳ５０３〜Ｓ５１０の処理を行うようにしてもよい。また、データの退避が済んだブロックを、退避したデータの書き戻しを行う前にフラッシュイレースすることも可能である。
【０１１２】
ＣＰＵ１２１が次の書込先の論理アドレス又は書き込み完了の通知を待機する状態に入ると、コンピュータ２は処理をステップＳ３０５に戻す。そして、ＣＰＵ１２１は、ステップＳ３０６で次の書込先の論理アドレス又は書き込み完了の通知がコンピュータ２から供給されると、処理をステップＳ３０７に戻す。
【０１１３】
一方、ＣＰＵ１２１は、書き込み完了の通知を供給されてステップＳ３１９に処理を移すと、ステップＳ５０５と同様の処理を行うことにより、ＲＡＭ１２３に格納されている書き込みポインタの現在の値をインクリメントした結果を求め、一時記憶する。なお、書き込みポインタ自体はインクリメントしない。
【０１１４】
次に、ＣＰＵ１２１は、書き込みポインタが現に指し示す物理アドレスを、書き込みポインタ初期値を格納する論理ページに与えられる論理アドレス（ポインタ初期値用の論理アドレス）に対応付けた形で、ＢＰＴに格納する（ステップＳ３２０）。
【０１１５】
次に、ＣＰＵ１２１は、ステップＳ３１９で求めた値を、書き込みポインタが現に指し示す論理ページに、書き込みポインタ初期値として書き込む（ステップＳ３２１）。また、ステップＳ３２１では、この論理ページと同じ物理ページの冗長部に、ポインタ初期値用の論理アドレスを、この論理ページの論理アドレスとして書き込む。
ステップＳ３２１の処理が終わると、この記憶システムはデータ書き込みの処理を終了する。
【０１１６】
以上説明した処理により、コンピュータ２から供給されたデータがフラッシュメモリ１１に格納される。また、ＢＳＩの内容が、データの書き込みの結果新たに生じた空きブロック及び消滅した空きブロックを示すよう変更される。一方、ＢＰＴの内容も変更され、新たに空きブロックとなったブロック内で有効なユーザデータを格納していた論理ページに割り当てられていた論理アドレスが、その論理ページの内容を転記された論理ページに新たに割り当てられる。
【０１１７】
この記憶システムでは、ユーザデータが更新される場合、古いユーザデータは、消去される代わりに有効フラグにより無効であることを示される。従って、更新時にブロックの効率の悪いフラッシュイレースを行わなくて済み、フラッシュメモリ１１の劣化が起きにくい。
また、空きブロックを確保するために有効なユーザデータを転記する場合は、有効フラグにより無効であることを示された論理ページからのデータの読み出しを省略して処理を進める。従って、空きブロックの確保が高速である。
【０１１８】
なお、この記憶システムの構成は、上述のものに限られない。
例えば、フラッシュメモリ１１の記憶領域のブロックの数、１ブロック当たりの論理ページの数、各論理ページの記憶容量、論理ページ及び冗長部の記憶容量は、いずれも任意である。また、フラッシュメモリ１１は、ＥＥＰＲＯＭから構成されるものである必要はなく、コンピュータにより読み書き可能な任意の記憶装置であってよい。
また、ディレクトリ及びＦＡＴが格納される論理ページの論理アドレスは上述の値である必要はなく、また、ディレクトリ及びＦＡＴが格納される論理ページの個数も任意である。
また、フラッシュメモリ１１の冗長部は必ずしも物理ページの末尾にある必要はなく、物理ページ内の任意の位置にあってもよいし、冗長部の位置が動的に割り当てられてもよい。
【０１１９】
また、ＲＡＭ１２３は、例えばＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ　ＲＡＭ：強誘電性ＲＡＭ）からなる不揮発性メモリより構成されていてもよい。この場合、この記憶システムは、既にＲＡＭ１２３がＢＳＩ及びＢＰＴを記憶している場合には、初期処理を省略してもよい。すなわち、起動するたびにＢＰＴやＢＳＩの作成を逐一行わなくてもよい。
【０１２０】
また、ＣＰＵ１２１は、必ずしもＰＣＭＣＩＡスロットを介してコンピュータ２に接続されるものでなくてもよく、ＩＥＥＥ１３９４インターフェースやＵＳＢ（Ｕｎｉｖｅｒｓａｌ　Ｓｅｒｉａｌ　Ｂｕｓ）あるいはその他の任意のインターフェースを介して接続されていてもよい。また、ＣＰＵ１２１は必ずしもコンピュータ２に有線接続される必要はなく、例えばＢｌｕｅｔｏｏｔｈ等の規格に準拠したインターフェースを介してコンピュータ２に無線接続されるものであってもよい。
また、フラッシュメモリ１１は必ずしもメモリユニット１の内部に固定されている必要はなく、例えばコントローラ１２と着脱可能に接続されてもよい。この場合、フラッシュメモリ１１及びコントローラ１２は、例えば、スマートメディア（登録商標）とその駆動装置とが備える端子と同様の端子や、あるいは、コンパクトフラッシュ（登録商標）とその駆動装置とが備える端子と同様の端子などを介して互いに接続されるように構成されていればよい。
【０１２１】
また、組み込みメモリユニット１とコンピュータ２とは互いに固定的に接続されていてもよく、図１１に示すように、メモリユニット１及びコンピュータ２が同一の筐体に組み込まれていてもよい。
【０１２２】
以上、この発明の実施の形態を説明したが、この発明の記憶システムは、専用のシステムによらず、通常のコンピュータシステムを用いて実現可能である。例えば、フラッシュメモリ１１を装着するスロットを備えるパーソナルコンピュータに上述の動作を実行するためのプログラムを格納した媒体（フレキシブルディスク、ＣＤ−ＲＯＭ等）から該プログラムをインストールすることにより、上述の処理を実行する記憶システムを構成することができる。
【０１２３】
また、例えば、通信回線のＢＢＳに該プログラムをアップロードし、これらを通信回線を介して配信してもよく、また、該プログラムを表す信号により搬送波を変調し、得られた変調波を伝送し、この変調波を受信した装置が変調波を復調して該プログラムを復元するようにしてもよい。
そして、該プログラムを起動し、ＯＳの制御下に、他のアプリケーションプログラムと同様に実行することにより、上述の処理を実行することができる。
【０１２４】
なお、ＯＳが処理の一部を分担する場合、あるいは、ＯＳが本願発明の１つの構成要素の一部を構成するような場合には、記録媒体には、その部分を除いたプログラムを格納してもよい。この場合も、この発明では、その記録媒体には、コンピュータが実行する各機能又はステップを実行するためのプログラムが格納されているものとする。
【０１２５】
【発明の効果】
以上説明したように、この発明によれば、データの更新や消去が高速に行われる記憶装置や、記憶装置が記憶するデータの更新や消去を高速に行うためのメモリ管理方法が実現される。
また、この発明によれば、劣化が起きにくい記憶装置や、記憶装置の劣化を起こしにくいメモリ管理方法も実現される。
【図面の簡単な説明】
【図１】本発明の実施の形態にかかる記憶システムの構成を示すブロック図である。
【図２】フラッシュメモリの記憶領域の論理的構造を模式的に示す図である。
【図３】ディレクトリ及びＦＡＴのデータ構造を模式的に示す図である。
【図４】ＢＳＩのデータ構造を模式的に示す図である。
【図５】ＢＰＴのデータ構造を模式的に示す図である。
【図６】初期処理を示すフローチャートである。
【図７】データ読み出しの処理を示すフローチャートである。
【図８】データ書き込みの処理を示すフローチャートである。
【図９】ディレクトリ及びＦＡＴ更新の処理を示すフローチャートである。
【図１０】空きブロック確保の処理を示すフローチャートである。
【図１１】図１の記憶システムの変形例の構成を示すブロック図である。
【符号の説明】
１　　　　　メモリユニット
１１　　　　フラッシュメモリ
１２　　　　コントローラ
１２１　　　ＣＰＵ
１２２　　　ＲＯＭ
１２３　　　ＲＡＭ
２　　　　　コンピュータ
【図１】
2004078907.tif 000003
【図２】
2004078907.tif 000004
【図３】
2004078907.tif 000005
【図４】
2004078907.tif 000006
【図５】
2004078907.tif 000007
【図６】
2004078907.tif 000008
【図７】
2004078907.tif 000009
【図８】
2004078907.tif 000010
【図９】
2004078907.tif 000011
【図１０】
2004078907.tif 000012
【図１１】
2004078907.tif 000013