(57)【要約】【課題】  アドレス変換テーブルの変更動作中に異常が発生しても以後の読み書き動作が正常に行える記憶装置等を提供することである。【解決手段】  フラッシュメモリ１１は、ブロックの物理アドレスと論理アドレスとの対応関係を表すＢＰＴ（Block Pointer Table）を、現在のもの及び過去のものについて記憶する。コントローラ１２はユーザデータを書き込む際、ユーザデータ書き込み後の新たな現在のＢＰＴを空きブロックに書き込む場合は、当該空きブロックがＢＰＴの格納に利用された順序、１個前のＢＰＴの位置、前にＢＰＴの格納に利用されていたブロックが不良ブロックであるか否か、を示す各情報を新たなＢＰＴに含める形でＢＰＴを更新する。次回の初期化時は、これらの情報に基づいて現在のＢＰＴの訂正等を行い、また、これらの情報のいずれかが欠けていた場合は、残る情報に基づいて、現在のＢＰＴの内容を特定する。【選択図】    図１
2006285600.tif 000002
【特許請求の範囲】
【請求項１】
物理アドレスを割り当てられた、ユーザデータを記憶するための複数のメモリブロックを含み、各々の前記メモリブロックの物理アドレス及び論理アドレスの対応関係を表す現在のアドレス変換テーブルを記憶する記憶手段と、
書き込み対象のユーザデータ及び論理アドレスが自己に供給されたとき、前記メモリブロックを構成するページのうちからユーザデータを記憶可能な状態にある空きページを特定して、当該書き込み対象のデータを、当該空きページに書き込み、当該書き込み後の各メモリブロックの物理アドレスと論理アドレスとの対応付けを表す新たな現在のアドレス変換テーブルを前記記憶手段に格納する書込手段と、を備え、
前記記憶手段は、新たな現在のアドレス変換テーブルを格納される直前まで現在のアドレス変換テーブルであった過去のアドレス変換テーブルを引き続き記憶しており、
前記書込手段は、前記新たな現在のアドレス変換テーブルに、前記過去のアドレス変換テーブルが記憶されているページを示す前テーブル情報を付加して前記記憶手段に格納するものである、
ことを特徴とする記憶装置。
【請求項２】
前記書込手段は、前記前テーブル情報に基づいて過去のアドレス変換テーブルの位置を特定し、位置を特定した当該過去のアドレス変換テーブルに基づいて、現在のアドレス変換テーブルの内容を訂正する、
ことを特徴とする請求項１に記載の記憶装置。
【請求項３】
前記書込手段は、アドレス変換テーブルを格納していないメモリブロックに、前記新たな現在のアドレス変換テーブルを格納する場合、当該メモリブロックが、アドレス変換テーブルを格納するメモリブロックとしての使用を開始された順序を示すブロック使用順序情報を、前記新たな現在のアドレス変換テーブルに付加して前記記憶手段に格納するものである、
ことを特徴とする請求項１又は２に記載の記憶装置。
【請求項４】
前記書込手段は、ブロック使用順序情報に基づいて過去のアドレス変換テーブルの位置を特定し、位置を特定した当該過去のアドレス変換テーブルに基づいて、現在のアドレス変換テーブルの内容を訂正する、
ことを特徴とする請求項３に記載の記憶装置。
【請求項５】
前記書込手段は、各ページに付された、各ページのメモリブロック内での順位に従って、アドレス変換テーブルを空きページに格納するものであり、アドレス変換テーブルを格納していないメモリブロックに、前記新たな現在のアドレス変換テーブルを格納する場合、前記過去のアドレス変換テーブルを格納しているメモリブロックの位置を示す前テーブル格納ブロック情報を、前記新たな現在のアドレス変換テーブル付加して前記記憶手段に格納するものである、
ことを特徴とする請求項３又は４に記載の記憶装置。
【請求項６】
前記書込手段は、前記ブロック使用順序情報及び前記前テーブル格納ブロック情報に基づいて前記過去のアドレス変換テーブルの位置を特定し、位置を特定した当該過去のアドレス変換テーブルに基づいて、現在のアドレス変換テーブルの内容を訂正する、
ことを特徴とする請求項５に記載の記憶装置。
【請求項７】
物理アドレスを割り当てられた、ユーザデータを記憶するための複数のメモリブロックを含むメモリに、書き込み対象のユーザデータを格納し、各々の前記メモリブロックの物理アドレス及び論理アドレスの対応関係を表す現在のアドレス変換テーブルを格納するメモリ管理装置であって、
書き込み対象のユーザデータ及び論理アドレスが自己に供給されたとき、前記メモリブロックを構成するページのうちからユーザデータを記憶可能な状態にある空きページを特定して、当該書き込み対象のデータを、当該空きページに書き込むユーザデータ書込手段と、
前記ユーザデータ書込手段による書き込み後の各メモリブロックの物理アドレスと論理アドレスとの対応付けを表す新たな現在のアドレス変換テーブルを前記メモリに格納するテーブル書込手段と、を備え、
前記メモリは、新たな現在のアドレス変換テーブルを格納される直前まで現在のアドレス変換テーブルであった過去のアドレス変換テーブルを引き続き記憶しており、
前記テーブル書込手段は、前記新たな現在のアドレス変換テーブルに、前記過去のアドレス変換テーブルが記憶されているページを示す前テーブル情報を付加して前記メモリに格納するものである、
ことを特徴とするメモリ管理装置。
【請求項８】
物理アドレスを割り当てられた、ユーザデータを記憶するための複数のメモリブロックを含むメモリに、書き込み対象のユーザデータを格納し、各々の前記メモリブロックの物理アドレス及び論理アドレスの対応関係を表す現在のアドレス変換テーブルを格納するメモリ管理方法であって、
書き込み対象のユーザデータ及び論理アドレスが自己に供給されたとき、前記ページのうちからユーザデータを記憶可能な状態にある空きページを特定して、当該書き込み対象のデータを、当該空きページに書き込むユーザデータ書込ステップと、
前記ユーザデータ書込ステップでの書き込み後の各メモリブロックの物理アドレスと論理アドレスとの対応付けを表す新たな現在のアドレス変換テーブルを前記メモリに格納するテーブル書込ステップと、より構成されており、
前記メモリは、新たな現在のアドレス変換テーブルを格納される直前まで現在のアドレス変換テーブルであった過去のアドレス変換テーブルを引き続き記憶しており、
前記テーブル書込ステップでは、前記新たな現在のアドレス変換テーブルに、前記過去のアドレス変換テーブルが記憶されているページを示す前テーブル情報を付加して前記メモリに格納する、
ことを特徴とするメモリ管理方法。
【請求項９】
コンピュータを、
物理アドレスを割り当てられた、ユーザデータを記憶するための複数のメモリブロックを含むメモリに、書き込み対象のユーザデータを格納し、各々の前記メモリブロックの物理アドレス及び論理アドレスの対応関係を表す現在のアドレス変換テーブルを格納するメモリ管理装置であって、
書き込み対象のユーザデータ及び論理アドレスが自己に供給されたとき、前記メモリブロックを構成するページのうちからユーザデータを記憶可能な状態にある空きページを特定して、当該書き込み対象のデータを、当該空きページに書き込むユーザデータ書込手段と、
前記ユーザデータ書込手段による書き込み後の各メモリブロックの物理アドレスと論理アドレスとの対応付けを表す新たな現在のアドレス変換テーブルを前記メモリに格納するテーブル書込手段と、を備え、
前記メモリは、新たな現在のアドレス変換テーブルを格納される直前まで現在のアドレス変換テーブルであった過去のアドレス変換テーブルを引き続き記憶しており、
前記テーブル書込手段は、前記新たな現在のアドレス変換テーブルに、前記過去のアドレス変換テーブルが記憶されているページを示す前テーブル情報を付加して前記メモリに格納するものである、
ことを特徴とするメモリ管理装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記録媒体を用いたデータ処理システム及び記録媒体へのアクセスを行うためのプログラムを記憶したコンピュータ読み取り可能なプログラムに関する。
【背景技術】
【０００２】
コンピュータ等によりアクセス（データの読み書き及び消去）可能な記録媒体として、ＥＥＰＲＯＭ（Electrically Erasable/Programmable Read Only Memory）フラッシュメモリが用いられている。
フラッシュメモリは、データの消去が、所定の記憶容量の単位（一般に「ブロック」と呼ばれる）で行われる。
【０００３】
フラッシュメモリのうち、特にＮＡＮＤ型のものは、データの記憶が正常に行えない不良ブロックの発生を製造段階で十分に防止することが困難である。このため、従来より、各ブロックに割り当てられる物理アドレスとは別個の連続した論理アドレスを正常なブロックに動的に割り当て、論理アドレスとの対応関係を表すアドレス変換テーブルを作成して、アドレスが不連続となることによる外部からのアクセス手順の複雑化を回避している。
【０００４】
このアドレス変換テーブルは、フラッシュメモリとは別個のメモリに格納されて用いられる場合も多いものの、フラッシュメモリの使用を開始するたびにアドレス変換テーブルを新たに作成し直す煩雑さを避ける等の目的で、フラッシュメモリ自身の記憶領域内に格納される場合もある（例えば、特許文献１参照）。
【特許文献１】特開２０００−１１６７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、アドレス変換テーブルをフラッシュメモリ自身に記憶させる場合、フラッシュメモリへのアクセスを行う装置が、アドレス変換テーブルを更新する動作を行っている間に、停電などの事情により、この動作を中断し、あるいは異常な動作を始めてしまった場合、書き込まれるアドレス変換テーブルの内容も異常なものとなり、以後の読み書き動作が正常に行えなくなる危険性が高かった。
【０００６】
この発明は上記実状に鑑みてなされたもので、アドレス変換テーブルの変更動作中に異常が発生しても以後の読み書き動作が正常に行える記憶装置、メモリ管理装置、メモリ管理方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明の第１の観点にかかる記憶装置は、
物理アドレスを割り当てられた、ユーザデータを記憶するための複数のメモリブロックを含み、各々の前記メモリブロックの物理アドレス及び論理アドレスの対応関係を表す現在のアドレス変換テーブルを記憶する記憶手段と、
書き込み対象のユーザデータ及び論理アドレスが自己に供給されたとき、前記メモリブロックを構成するページのうちからユーザデータを記憶可能な状態にある空きページを特定して、当該書き込み対象のデータを、当該空きページに書き込み、当該書き込み後の各メモリブロックの物理アドレスと論理アドレスとの対応付けを表す新たな現在のアドレス変換テーブルを前記記憶手段に格納する書込手段と、を備え、
前記記憶手段は、新たな現在のアドレス変換テーブルを格納される直前まで現在のアドレス変換テーブルであった過去のアドレス変換テーブルを引き続き記憶しており、
前記書込手段は、前記新たな現在のアドレス変換テーブルに、前記過去のアドレス変換テーブルが記憶されているページを示す前テーブル情報を付加して前記記憶手段に格納するものである、
ことを特徴とする。
【０００８】
このような記憶装置によれば、過去のアドレス変換テーブルの位置を特定する情報が確保される結果、現在のアドレス変換テーブルに異常が生じていた場合も、現在及び過去のアドレス変換テーブルを用いて、現在のアドレス変換テーブルの正しい内容を決定することが可能となる。従って、アドレス変換テーブルの変更動作中に異常が発生しても、以後の読み書き動作を正常に行える。
【０００９】
前記書込手段は、前記前テーブル情報に基づいて過去のアドレス変換テーブルの位置を特定し、位置を特定した当該過去のアドレス変換テーブルに基づいて、現在のアドレス変換テーブルの内容を訂正するものとすれば、現在のアドレス変換テーブルに異常が生じていた場合、現在及び過去のアドレス変換テーブルを用いて、現在のアドレス変換テーブルの正しい内容が決定される。
【００１０】
前記書込手段は、アドレス変換テーブルを格納していないメモリブロックに、前記新たな現在のアドレス変換テーブルを格納する場合、当該メモリブロックが、アドレス変換テーブルを格納するメモリブロックとしての使用を開始された順序を示すブロック使用順序情報を、前記新たな現在のアドレス変換テーブルに付加して前記記憶手段に格納するものであってもよい。
このような構成を有していれば、前テーブル情報が正常に記憶されていなかった場合も、ブロック使用順序情報を用いて過去のアドレス変換テーブルを正しく特定することが可能となる。
【００１１】
前記書込手段は、ブロック使用順序情報に基づいて過去のアドレス変換テーブルの位置を特定し、位置を特定した当該過去のアドレス変換テーブルに基づいて、現在のアドレス変換テーブルの内容を訂正するものとすれば、現在のアドレス変換テーブルに異常が生じていて、前テーブル情報も正常に記憶されていなかった場合であっても、ブロック使用順序情報を用いて過去のアドレス変換テーブルを正しく特定された上、現在及び過去のアドレス変換テーブルを用いて、現在のアドレス変換テーブルの正しい内容を決定する。
【００１２】
前記書込手段は、各ページに付された、各ページのメモリブロック内での順位に従って、アドレス変換テーブルを空きページに格納するものであってもよく、アドレス変換テーブルを格納していないメモリブロックに、前記新たな現在のアドレス変換テーブルを格納する場合、前記過去のアドレス変換テーブルを格納しているメモリブロックが不良ブロックであるか否かを示す前テーブル格納ブロックステータス情報を、前記新たな現在のアドレス変換テーブル付加して前記記憶手段に格納するものであってもよい。
このような構成を有していれば、前テーブル情報が正常に記憶されておらず、過去のアドレス変換テーブルを格納するメモリブロックが不良ブロックとなっていて、最終順位のページまでアドレス変換テーブルが書き込まれていないような場合でも、ブロック使用順序情報及び前テーブル格納ブロックステータス情報を用いて過去のアドレス変換テーブルを正しく特定することが可能となる。
【００１３】
前記書込手段は、前記ブロック使用順序情報及び前記前テーブル格納ブロックステータス情報に基づいて前記過去のアドレス変換テーブルの位置を特定し、位置を特定した当該過去のアドレス変換テーブルに基づいて、現在のアドレス変換テーブルの内容を訂正するものとすれば、現在のアドレス変換テーブルに異常が生じていて、前テーブル情報も正常に記憶されておらず、更に過去のアドレス変換テーブルを格納するメモリブロックが不良ブロックとなっていて、最終順位のページまでアドレス変換テーブルが書き込まれていないような場合であっても、ブロック使用順序情報及び前テーブル格納ブロックステータス情報を用いて過去のアドレス変換テーブルを正しく特定された上、現在及び過去のアドレス変換テーブルを用いて、現在のアドレス変換テーブルの正しい内容を決定する。
【００１４】
また、本発明の第２の観点にかかるメモリ管理装置は、
物理アドレスを割り当てられた、ユーザデータを記憶するための複数のメモリブロックを含むメモリに、書き込み対象のユーザデータを格納し、各々の前記メモリブロックの物理アドレス及び論理アドレスの対応関係を表す現在のアドレス変換テーブルを格納するメモリ管理装置であって、
書き込み対象のユーザデータ及び論理アドレスが自己に供給されたとき、前記メモリブロックを構成するページのうちからユーザデータを記憶可能な状態にある空きページを特定して、当該書き込み対象のデータを、当該空きページに書き込むユーザデータ書込手段と、
前記ユーザデータ書込手段による書き込み後の各メモリブロックの物理アドレスと論理アドレスとの対応付けを表す新たな現在のアドレス変換テーブルを前記メモリに格納するテーブル書込手段と、を備え、
前記メモリは、新たな現在のアドレス変換テーブルを格納される直前まで現在のアドレス変換テーブルであった過去のアドレス変換テーブルを引き続き記憶しており、
前記テーブル書込手段は、前記新たな現在のアドレス変換テーブルに、前記過去のアドレス変換テーブルが記憶されているページを示す前テーブル情報を付加して前記メモリに格納するものである、
ことを特徴とする。
【００１５】
このような記憶装置によれば、過去のアドレス変換テーブルの位置を特定する情報が確保される結果、現在のアドレス変換テーブルに異常が生じていた場合も、現在及び過去のアドレス変換テーブルを用いて、現在のアドレス変換テーブルの正しい内容を決定することが可能となる。従って、アドレス変換テーブルの変更動作中に異常が発生しても、以後の読み書き動作を正常に行える。
【００１６】
また、本発明の第３の観点にかかるメモリ管理方法は、
物理アドレスを割り当てられた、ユーザデータを記憶するための複数のメモリブロックを含むメモリに、書き込み対象のユーザデータを格納し、各々の前記メモリブロックの物理アドレス及び論理アドレスの対応関係を表す現在のアドレス変換テーブルを格納するメモリ管理方法であって、
書き込み対象のユーザデータ及び論理アドレスが自己に供給されたとき、前記メモリブロックを構成するページのうちからユーザデータを記憶可能な状態にある空きページを特定して、当該書き込み対象のデータを、当該空きページに書き込むユーザデータ書込ステップと、
前記ユーザデータ書込ステップでの書き込み後の各メモリブロックの物理アドレスと論理アドレスとの対応付けを表す新たな現在のアドレス変換テーブルを前記メモリに格納するテーブル書込ステップと、より構成されており、
前記メモリは、新たな現在のアドレス変換テーブルを格納される直前まで現在のアドレス変換テーブルであった過去のアドレス変換テーブルを引き続き記憶しており、
前記テーブル書込ステップでは、前記新たな現在のアドレス変換テーブルに、前記過去のアドレス変換テーブルが記憶されているページを示す前テーブル情報を付加して前記メモリに格納する、
ことを特徴とする。
【００１７】
このようなメモリ管理方法によれば、過去のアドレス変換テーブルの位置を特定する情報が確保される結果、現在のアドレス変換テーブルに異常が生じていた場合も、現在及び過去のアドレス変換テーブルを用いて、現在のアドレス変換テーブルの正しい内容を決定することが可能となる。従って、アドレス変換テーブルの変更動作中に異常が発生しても、以後の読み書き動作を正常に行える。
【００１８】
また、本発明の第４の観点にかかるプログラムは、
コンピュータを、
物理アドレスを割り当てられた、ユーザデータを記憶するための複数のメモリブロックを含むメモリに、書き込み対象のユーザデータを格納し、各々の前記メモリブロックの物理アドレス及び論理アドレスの対応関係を表す現在のアドレス変換テーブルを格納するメモリ管理装置であって、
書き込み対象のユーザデータ及び論理アドレスが自己に供給されたとき、前記ページのうちからユーザデータを記憶可能な状態にある空きページを特定して、当該書き込み対象のデータを、当該空きページに書き込むユーザデータ書込手段と、
前記ユーザデータ書込手段による書き込み後の各メモリブロックの物理アドレスと論理アドレスとの対応付けを表す新たな現在のアドレス変換テーブルを前記メモリに格納するテーブル書込手段と、を備え、
前記メモリは、新たな現在のアドレス変換テーブルを格納される直前まで現在のアドレス変換テーブルであった過去のアドレス変換テーブルを引き続き記憶しており、
前記テーブル書込手段は、前記新たな現在のアドレス変換テーブルに、前記過去のアドレス変換テーブルが記憶されているページを示す前テーブル情報を付加して前記メモリに格納するものである、
ことを特徴とするメモリ管理装置として機能させるためのものであることを特徴とする。
【００１９】
このようなプログラムを実行するコンピュータによれば、過去のアドレス変換テーブルの位置を特定する情報が確保される結果、現在のアドレス変換テーブルに異常が生じていた場合も、現在及び過去のアドレス変換テーブルを用いて、現在のアドレス変換テーブルの正しい内容を決定することが可能となる。従って、アドレス変換テーブルの変更動作中に異常が発生しても、以後の読み書き動作を正常に行える。
【発明の効果】
【００２０】
この発明によれば、アドレス変換テーブルの変更動作中に異常が発生しても以後の読み書き動作が正常に行える記憶装置、メモリ管理装置、メモリ管理方法及びプログラムが実現される。
【発明を実施するための最良の形態】
【００２１】
以下、この発明の実施の形態を、フラッシュメモリを備えた記憶システムを例とし、図面を参照して説明する。
【００２２】
図１は、この発明の実施の形態にかかる記憶システムの物理的構成を示すブロック図である。図示するように、この記憶システムは、メモリユニット１と、コンピュータ２とから構成されている。
【００２３】
メモリユニット１は、コンピュータ２に接続される。メモリユニット１とコンピュータ２との接続は固定的に行われていてもよいし、あるいは、例えばコンピュータ２がPC Card Standardに準拠したバスを中継するためのスロットを備えるものとして、メモリユニット１がこのスロットを介し、コンピュータ２に着脱可能に装着されるようになっていてもよい。
【００２４】
メモリユニット１は、フラッシュメモリ１１及びコントローラ１２からなる。
【００２５】
フラッシュメモリ１１は、コントローラ１２が行うアクセスに応答し、コントローラ１２から供給されたデータの記憶と、記憶しているデータのコントローラ１２への供給と、記憶しているデータの消去とを行う。
【００２６】
フラッシュメモリ１１が有する記憶領域は、例えば図２に示すように８１９２個のページからなり、各々のページは５２８バイトの記憶容量を有する。ページには連続的に０から８１９１までのページアドレスが付与され、各ページに含まれるメモリセルには、連続的に０から５２７までの番地が与えられている。
【００２７】
各ページは、先頭から３２ページ単位で１つのブロックを構成する。各ブロックは１６キロバイトの記憶容量を有し、記憶領域全体は、２５６個のブロックから構成され、先頭から連続的に０から２５５までの物理ブロックアドレスを与えられている。
【００２８】
また、各ページは、図示するように、先頭から５１２バイトの領域を占めるデータ領域と、末尾１６バイトを占める冗長部とから構成される。
データ領域には、ユーザデータ（コンピュータ２から供給され書き込まれるデータや、コンピュータ２に供給される対象となるデータ）が格納され、冗長部には、ユーザデータの内容が破壊されていないことを確認するための誤り訂正コード等が格納される。また、ブロックが後発的に、データの正常な読み書きのできない状態になったとき、このようなブロック（後発不良ブロック）に属するページの冗長部には、コントローラ１２の後述の処理に従い、当該ブロックが後発不良ブロックであることを示すデータである不良ブロックフラグが格納される。
【００２９】
また、各々のブロックに属する各ページの冗長部には、そのブロックに割り当てられている論理ブロックアドレスの値が格納される。
論理ブロックアドレスは、フラッシュメモリ１１が後述する動作により読み書きされるときに、コントローラ１２により、データ読み書きの単位として認識される単位である。論理ブロックアドレスが割り当てられているブロックの総量は、フラッシュメモリ１１が物理的に備えるブロックの総量より小さい所定量、例えば２５０個である。
【００３０】
また、データ領域は、ＢＰＴ（Block Pointer Table）の格納にも用いられる。ＢＰＴは、後述するコントローラ１２が行う処理に従って格納されるデータであり、例えば図３に示すように、フラッシュメモリ１１の各々のブロックについて、当該ブロックの論理ブロックアドレス及び物理ブロックアドレスを互いに対応付けて格納するテーブルからなっている。なお、ＢＰＴが格納されているページの冗長部には、ＢＰＴの内容が破壊されていないことを確認するための誤り訂正コード等が格納される。
【００３１】
コントローラ１２は、ＢＰＴの内容が、実際のブロックの論理ブロックアドレス及び物理ブロックアドレスの対応関係との不一致を生じるたびに、後述の処理を行うことにより、正しい対応関係を示す新たなＢＰＴを作成してフラッシュメモリ１１のデータ領域に格納する。
【００３２】
なお、コントローラ１２は、ＢＰＴが格納されるページを含むブロック（以下、ＢＰＴブロックと呼ぶ）には、ユーザデータを格納しない。また、ＢＰＴが格納されるページからなるブロックの論理ブロックアドレスの値がとり得る範囲と、また、ユーザデータが格納されるページからなるブロックの論理ブロックアドレスの値がとり得る範囲とは、互いに重複しないものとする。
【００３３】
ＢＰＴ１個はフラッシュメモリ１１のデータ領域１ページ分以内の記憶容量を有しており、１個のＢＰＴは、１個のページのデータ領域内に格納される。
【００３４】
メモリユニット１が製造され出荷される時に、フラッシュメモリ１１には自身に割り当てられる論理ブロックアドレスより大きな値が格納されたページ冗長部と書込みカウンタの初期値と前ページポインタの初期値を持つ初期ＢＰＴページを先頭のページに持つ物理ブロックが１つ作成される。またユーザーがフラッシュメモリ１１の内容を全て消去しメモリユニット１を前記出荷時と同様な状態とする操作をした場合も、同様な初期ＢＰＴページを先頭のページに持つ物理ブロックが１つ作成される。
その後、コントローラは新たなＢＰＴを作成するたびに、順次、当該ブロック内の後続のページへと格納する。つまり、当該ブロック内でＢＰＴを格納していないページのうちの先頭のページへと格納する。
【００３５】
一方、コントローラ１２は、一部が正しい対応関係を示さなくなった古いＢＰＴも直ちには消去せず、新しいＢＰＴ及び古いＢＰＴを、あわせて最大で１ブロック中のページ数と同数（つまり、図２に示す記憶領域を有するフラッシュメモリ１１では、３２個）まで、データ領域に格納された状態に保つ。
【００３６】
ＢＰＴは、各々の論理ブロックアドレスに対応付けられた、番地の連続する複数の記憶領域を備えている。１個の論理ブロックアドレスに対応付けられた記憶領域には、当該論理ブロックアドレスに対応付けられた物理ブロックアドレスが格納される。
【００３７】
具体的には、例えば図３に示すように、番地が（２・ｎ）及び｛（２・ｎ）＋１｝（ｎは０以上２５５以下の整数）である合計２バイトの記憶領域が論理ブロックアドレスｎに対応付けられているとして、番地１の記憶領域に値”００５Ａｈ”が格納されているとする。この場合は、物理ブロックアドレスが００５Ａｈであるブロックには、論理ブロックアドレスとして０００１ｈが対応付けられている。
【００３８】
ただし、この記憶領域に格納されている内容が所定の値を表す場合（例えば、図示するように、値“ＦＦＦＦｈ”を表す場合）は、その値を格納している記憶領域に対応付けられている論理ブロックアドレスには物理ブロックアドレスが対応付けられていないことを表す。
【００３９】
また、ブロックの先頭のページに格納されているＢＰＴ、つまり、作成された順序が自己の１つ前であるＢＰＴ（以下、１個前のＢＰＴと呼ぶ）が自己と共通のブロック内に格納されていないＢＰＴは、前ページポインタ、前ブロック書込失敗フラグ、及び、書込カウンタを格納する。
コントローラ１２は、新たなＢＰＴを作成する時にＢＰＴブロック内でＢＰＴを格納しているページがブロックの最終ページであった場合は、空きブロック内の先頭のページに新たなＢＰＴと前ページポインタ、前ブロック書込失敗フラグ及び書込カウンタを格納した新たなＢＰＴブロックを作成する。
【００４０】
前ページポインタは、当該前ページポインタが格納されているＢＰＴの１個前のＢＰＴが格納されているページの物理ページアドレス（すなわち、当該ページが含まれるブロックの物理ブロックアドレスと、当該ブロック内での当該ページのページアドレスとの組）を示す。前ページポインタの値は、例えば“ＦＦＦＦｈ”である。
【００４１】
前ブロック書込失敗フラグは、当該前ブロック書込失敗フラグが格納されているＢＰＴの１個前のＢＰＴが格納されているブロック（以下、前ブロックと呼ぶ）が後発不良ブロックであるか否かを示すフラグである。
前ブロック書込失敗フラグの初期値は例えば“Ｆｈ”とし、前ブロックの書込が正しく行われた場合には変化せず、前ブロックの書込が失敗した場合には例えば“０ｈ”に変化するものとする。
【００４２】
書込カウンタは、当該書込カウンタが格納されているＢＰＴを格納するブロックが、ＢＰＴを格納するブロックとして利用を開始された順序を示す。書込カウンタの初期値は任意である（例えば０であればよい）。また、書込カウンタの値はサイクリックに割り当てられてもよい。つまり、過去最も新しく格納された書込カウンタの値が所定の値（例えば２５５）であるとき、次に格納される新たな書込カウンタの値が初期値に戻るようになっていてもよい。
【００４３】
フラッシュメモリ１１は、メモリユニット１のコントローラ１２より、特定のブロックのデータを消去するよう指示されると、当該ブロックに含まれるすべてのメモリセルの記憶内容をリセットする（例えば、フラッシュメモリ１１がＮＡＮＤ型のフラッシュメモリからなる場合は、各メモリセルの記憶値を「１」とする）。
【００４４】
フラッシュメモリ１１は、工場出荷時に全てのブロックについて当該ブロックが正しく読み書きできるかをチェックされ、正しく読み書きできないブロックに含まれる各ページの冗長部に当該ブロックが使用できないことを示すフラグ（先発不良ブロック）が書込まれ、当該ブロックの使用を禁止する。またフラッシュメモリ１１を使用中に当該ブロックが正しく読み書き出来なくなった場合にも、正しく読み書きできないブロックに含まれる各ページの冗長部に当該ブロックが使用できないことを示すフラグ（後発不良ブロック）が書込まれ、以降当該ブロックへのアクセスは禁止される。
メモリユニット１は、工場出荷時にフラッシュメモリ１１の論理ブロックアドレスが割り当てられるブロックでページの冗長部に出荷時に不良であると判断された不良ブロックフラグを含むブロック以外の正常ブロックのページが初期化（例えば全ビットが論理値“１”）され、フラッシュメモリ１１に1個のＢＰＴページを含むＢＰＴブロックが作成される。このＢＰＴページは論理−物理変換テーブルが全て初期状態（値“ＦＦＦＦｈ”）、前ページポインタが初期値“ＦＦＦＦｈ”、前ブロック書込み失敗フラグが初期値“Ｆｈ”および書込みカウンタが初期値“０”に設定され更に冗長部にフラッシュメモリが物理的に備えるブロックの総数より大きい値の論理ブロックアドレス（例えば“１００ｈ”）が格納される。
【００４５】
コントローラ１２は、図１に示すように、ＣＰＵ（Central Processing Unit）１２１と、ＲＯＭ（Read Only Memory）１２２と、ＲＡＭ（Random Access Memory）１２３とを備えている。
ＣＰＵ１２１は、ＲＯＭ１２２、ＲＡＭ１２３及びフラッシュメモリ１１に接続されており、また、コンピュータ２に接続されている。ＣＰＵ１２１とコンピュータ２との接続は、固定的な接続でもよいし、あるいは、例えばコンピュータ２が備える上述のスロットを介して着脱可能に行われるようになっていてもよい。
【００４６】
ＣＰＵ１２１は、コントローラ１２の製造者等によって予めＲＯＭ１２２に格納されているプログラムの処理に従って、後述する処理を行う。
そして、ＣＰＵ１２１は、アクセス装置を構成するコンピュータ２から供給される命令を取得すると、その命令を実行する。ＣＰＵ１２１が実行する命令には、フラッシュメモリ１１にアクセスする命令が含まれる。
【００４７】
ＲＡＭ１２３は、例えばＳＲＡＭ（Static RAM）等より構成されており、ＣＰＵ１２１の作業領域となる記憶領域と、退避用メモリ領域とを提供する。退避用メモリ領域は、後述するデータ書き込みの処理において、書き込みを行う対象のページを含むブロックに格納されているデータの１ページ分を一時的に格納する（退避する）ための記憶領域である。退避する対象のデータとしては、例えばユーザデータ及びＢＰＴがある。
【００４８】
また、ＲＡＭ１２３は、ＣＰＵ１２１が作成するＢＳＩ（Block Search Index）を格納する。ＢＳＩは、フラッシュメモリ１１の各ブロックのうちどれが空きブロックであるかを特定する情報を格納する。ＢＳＩは、コントローラ１２の処理に従って作成及び更新され、ＲＡＭ１２３に格納される。
【００４９】
ＢＳＩは、フラッシュメモリ１１の各ブロックのいずれが空きブロック（すなわち、リセットされた状態にあるブロック）であるかを表す情報を格納する。
ＢＳＩは、この記憶システムが起動する度にコントローラ１２の後述する処理に従って作成され、ＲＡＭ１２３に格納される。
【００５０】
フラッシュメモリ１１のブロックの総数が２５６個であるときのＢＳＩの構造の一例を図４に示す。図示するように、ＢＳＩは、３２バイトのデータからなり、先頭のビットから順に、ブロック０からブロック２５５に１対１に対応し、対応するブロックが空きブロックであるとき“１”、空きブロックでないとき“０”を格納する。
【００５１】
コンピュータ２はパーソナルコンピュータ等からなり、ＯＳ及びドライバを表すプログラムデータを記憶し、電源投入後、ＯＳを実行する。そしてＯＳの処理に従ってドライバを起動する。
【００５２】
ドライバの処理を行うコンピュータ２は、コントローラ１２に上述の命令を供給したり、フラッシュメモリ１１に書き込む対象のデータを供給して、ＣＰＵ１２１に、フラッシュメモリ１１へのアクセスを行わせる。そして、自らが供給した命令に従ってＣＰＵ１２１がフラッシュメモリ１１から読み出して自らに供給したデータを、ＣＰＵ１２１より取得する。
【００５３】
（動作）
次に、この記憶システムの動作を、図５−図１０を参照して説明する。
図５は、初期処理を示すフローチャートである。
図６は、データ書き込みの処理を示すフローチャートである。
図７は、旧ユーザデータ読み込みの処理を示すフローチャートである。
図８及び図９は、ＢＰＴ更新の処理を示すフローチャートである。
図１０は、旧ＢＰＴ消去の処理を示すフローチャートである。
【００５４】
（初期処理）
この記憶システムが起動すると、メモリユニット１のコントローラ１２のＣＰＵ１２１は、図５に示す初期処理を実行する。
初期処理を開始すると、ＣＰＵ１２１は、ＲＡＭ１２３の記憶領域のうち、ＢＰＴ及びＢＳＩを格納する部分の初期化を行う（図５、ステップＳ００１）。具体的には、例えばＲＡＭ１２３の記憶領域のうちＢＰＴ又はＢＳＩを格納する部分のビットの論理値を、すべて”０”とすればよい。
【００５５】
次に、ＣＰＵ１２１は、フラッシュメモリ１１の不良ブロックでない各ブロックの先頭ページのデータ領域内の書込カウンタを検索する等して、最新のＢＰＴが格納されているＢＰＴブロックを特定する（ステップＳ００２）。
【００５６】
次に、ＣＰＵ１２１は、ステップＳ００２で特定したブロック内の各ページのうち、データ領域にＢＰＴが書き込まれている最も後方のページを特定し、特定したページのデータ領域からＢＰＴを読み出し、また、特定したページの冗長部から誤り訂正符号を読み出して、ＲＡＭ１２３の記憶領域に格納する（ステップＳ００３）。
【００５７】
次に、ＣＰＵ１２１は、フラッシュメモリ１１の記憶領域を検索し、ステップＳ００３で読み出したＢＰＴ（以下、現在のＢＰＴと呼ぶ）の１個前のＢＰＴを特定することにより、当該１個前のＢＰＴがフラッシュメモリ１１に格納されているか否かを判別する（ステップＳ００４）。
そして、格納されていないと判別すれば（ステップＳ００４；ＮＯ）、ＲＡＭ１２３に記憶されている現在のＢＰＴに含まれている訂正可能な誤りを、ステップＳ００３で読み出した誤り訂正符号を用いて公知の手法により訂正した上、処理をステップＳ００８に移す。
【００５８】
現在のＢＰＴの１個前のＢＰＴは、具体的には、以下（ａ）及び（ｂ）として示す基準に合致するＢＰＴである。
【００５９】
（ａ）  現在のＢＰＴがブロックの先頭のページに格納されているものでない場合は、現在のＢＰＴが格納されているページよりページアドレスが１つ小さなページに格納されている古いＢＰＴが、現在のＢＰＴの１個前のＢＰＴである。
【００６０】
（ｂ）  現在のＢＰＴがブロックの先頭のページに格納されている場合は、現在のＢＰＴが有効な値の前ページポインタを含んでおり、この前ページポインタが示す物理ブロックがＢＰＴを含んでいればこの前ページポインタが示す物理ページアドレスを割り当てられたページに格納されている古いＢＰＴが現在のＢＰＴの１個前のＢＰＴである。現在のＢＰＴが有効な値の前ページポインタを含んでいないか前ページポインタが示す物理ブロックがＢＰＴを含んでいなければ１個前のＢＰＴがフラッシュメモリ１１に格納されていない場合である。
【００６１】
一方、現在のＢＰＴの１個前のＢＰＴが特定され、当該１個前のＢＰＴがフラッシュメモリ１１に格納されていると判別すると（ステップＳ００４；ＹＥＳ）、ＣＰＵ１２１は、当該１個前のＢＰＴと、ＲＡＭ１２３に記憶されている現在のＢＰＴとを検索して、同一の論理ブロックアドレスに対応付けられている物理ブロックアドレスがこれら２個のＢＰＴの間で互いに異なっている箇所を、それぞれのＢＰＴ内で（論理ブロックアドレス１個につき合計２箇所）特定する（ステップＳ００５）。
【００６２】
次に、ＣＰＵ１２１は、物理ブロックアドレスとの対応関係がこれら２個のＢＰＴ間で異なっていると特定されたそれぞれの論理ブロックアドレスにつき、これら２個のＢＰＴが対応付けている２個の物理ブロックアドレスのいずれが正しいかを特定するため、これら２個の物理ブロックアドレスが示す２個のブロックにアクセスし、データ領域にユーザデータが格納されていて、且つ、正しい論理ブロックアドレスが冗長部に書き込まれている方のブロックを特定する（ステップＳ００６）。
【００６３】
次に、ＣＰＵ１２１は、現在のＢＰＴが、ステップＳ００６で特定したブロックを示す物理ブロックアドレスを正しい論理ブロックアドレスに対応付けたものとなるように、ＲＡＭ１２３に記憶されている現在のＢＰＴを書き換えて（ステップＳ００７）、処理をステップＳ００８に移す。
【００６４】
ただし、ステップＳ００７では、ステップＳ００６で２個のブロックのいずれもデータ領域にユーザデータを格納しておらず、または正しい論理ブロックアドレスが冗長部に格納していなかった、という論理ブロックアドレスについては、当該論理ブロックアドレスに対応付けるべき物理ブロックアドレスがない旨を示す上述の所定の値を対応付けるように、現在のＢＰＴを書き換え、当該2個の物理ブロックの全ページの内容を消去（フラッシュイレース）する。
【００６５】
ステップＳ００８でＣＰＵ１２１は、ＢＳＩを作成する。具体的には、ＣＰＵ１２１は、フラッシュメモリ１１の、各ブロックのページの冗長部に格納されているデータを順次に（例えば、物理ブロックアドレスが先頭のブロックから末尾のブロックまで１ブロックずつ順次に）読み出す。一方、１個のブロックからデータを読み出す毎に、読み出したデータに基づき、データを読み出した当該ブロックが空きブロックであるか否かを判別する（具体的には、例えば、読み出したページの冗長部に不良ブロックである事を示す不良ブロックフラグが格納されていなく、且つ、論理ブロックアドレスが格納されていないか否かを判別すればよい）。そして、この判別の結果を、ＲＡＭ１２３が記憶するＢＳＩに追加する（例えば、当該ブロックが空きブロックであれば、ＢＳＩ内で当該ブロックに対応するビットの値を“１”とし、空きブロックでなければ“０”のままとする）。
【００６６】
そして、ＢＳＩの作成が完了すると、この記憶システムは初期処理を終了する。
以上説明した初期処理により、現在のＢＰＴがＲＡＭ１２３の記憶領域に転記され、正しい内容となるように更新され、また、ＢＳＩが作成される。
【００６７】
（データ読み出しの処理）
初期処理が終了すると、ＣＰＵ１２１は、コンピュータ２より、フラッシュメモリ１１へのアクセスの指示を受け付ける。
そして、コンピュータ２が、ユーザデータの読み出しを指示する命令と、読み出す対象のページを示すための論理ブロックアドレス及びページアドレスとをコントローラ１２に供給すると、コントローラ１２のＣＰＵ１２１は、供給された論理ブロックアドレスをキーとしてＢＰＴを検索し、この論理ブロックアドレスに対応付けられた物理ブロックアドレスを索出する。ＣＰＵ１２１は、索出した物理ブロックアドレスと、コンピュータ２より供給されたページアドレスとより特定されるページよりデータを読み出して、コンピュータ２に供給する。
この結果、フラッシュメモリ１１よりデータが読み出され、コンピュータ２へと供給される。
【００６８】
なお、フラッシュメモリ１１の記憶領域がＭＳ−ＤＯＳ（登録商標）のファイルシステムに従ったものである場合、フラッシュメモリ１１は、例えばディレクトリ及びＦＡＴ（File Allocation Table）を予め記憶していればよい。そしてコンピュータ２は、ユーザデータの読み出しに先立って、まずディレクトリ及びＦＡＴをＣＰＵ１２１に読み出させてこれらを取得し、取得したディレクトリ及びＦＡＴに基づいて、読み出す対象のページのページアドレス及び当該ページが属するブロックの論理ブロックアドレスを特定するようにすればよい。この場合、例えば、ディレクトリ及びＦＡＴが記憶されているブロックには、所定の論理ブロックアドレスが割り当てられていればよい。
【００６９】
（データ書き込みの処理）
また、フラッシュメモリ１１へのデータの書き込みを行う場合、まず、コンピュータ２はコントローラ１２に、フラッシュメモリ１１へのデータの書き込みを指示する命令と、書き込む対象のファイルに含まれるデータを書き込むページの論理ブロックアドレス及びページアドレスとを供給する。
【００７０】
なお、フラッシュメモリ１１の記憶領域がＭＳ−ＤＯＳのファイルシステムに従ったものであって、ディレクトリ及びＦＡＴを予め記憶している場合、コンピュータ２は、例えば、メモリユニット１よりまずディレクトリ及びＦＡＴを取得し、これらに基づき、データが格納されていないページのページアドレス及び論理ブロックアドレスを特定して、当該論理ブロックアドレスが登録された状態へとこれらのディレクトリあるいはＦＡＴを更新した上、フラッシュメモリ１１へと書き戻すようにしてもよい。
【００７１】
コンピュータ２より、データの書き込みを指示する命令と、論理ブロックアドレス及びページアドレスとを供給されると、メモリユニット１はまず、指示された書込みが上書きか新規書込みかをチェックするため旧ユーザデータ読み込みの処理を行う（図６、ステップＳ１００）。
【００７２】
旧ユーザデータ読み込みの処理において、ＣＰＵ１２１はコンピュータ２から供給された論理ブロックアドレスをキーとしてＲＡＭ１２３にあるＢＰＴを検索する。ＢＰＴに論理ブロックアドレスが存在している場合は旧データの上書きと判断し論理ブロックアドレスに対応する物理ブロックアドレスを特定する。
【００７３】
図８及び図９に詳細を示すＢＰＴ更新の処理を開始すると、まず、ＣＰＵ１２１は、新たにユーザデータを書き込むための１個の空きブロックの物理ブロックアドレスを検索する（図８、ステップＳ２０１）。そして、ＣＰＵ１２１は、空きブロックが索出されたか否かを判別し（ステップＳ２０２）、索出されなかったと判別すると（ステップＳ２０２；ＮＯ）、ＣＰＵ１２１は、空きブロックがなく書き込みが行えないと判断して、データ書き込みの処理を異常終了する。
【００７４】
一方、空きブロックが索出されたと判別すると、ＣＰＵ１２１は、索出された空きブロックが以後は空きブロックではない旨を示すようにＢＳＩの内容を更新し（ステップＳ２０３）、また、索出された空きブロックの物理ブロックアドレスが、コンピュータ２よりデータの書込みを指示する命令とともに供給された論理ブロックアドレスに対応付けられるように、ＲＡＭ１２３が記憶するＢＰＴを更新する（ステップＳ２０４）。
【００７５】
次にＣＰＵ１２１は、更新前の現在のＢＰＴを記憶しているブロック内に、ＢＰＴがまだ書き込まれていない空きページがあるか否かを判別する（ステップＳ２０５）。そして、あると判別すると（ステップＳ２０５；ＹＥＳ）、更新前の現在のＢＰＴを記憶しているページに後続する空きページのデータ領域に、ＲＡＭ１２３に記憶されている更新後の現在のＢＰＴを書き込み、また、更新後の現在のＢＰＴの誤り訂正符号を生成して、この誤り訂正符号を当該ページの冗長部に書き込んで（ステップＳ２０６）、処理をステップＳ２１１に移す。
【００７６】
一方、空きページがないとステップＳ２０５で判別すると（ステップＳ２０５；ＮＯ）、ＣＰＵ１２１は、新たにＢＰＴを書き込むための１個の空きブロックの物理ブロックアドレスを検索する（ステップＳ２０７）。そして、ＣＰＵ１２１は、空きブロックが索出されたか否かを判別し（ステップＳ２０８）、索出されたと判別すると（ステップＳ２０８；ＹＥＳ）、ステップＳ２０３と同様にＢＳＩの内容を更新して図９に示すステップＳ２０９へと処理を移す。一方、索出されなかったと判別すると（ステップＳ２０８；ＮＯ）、空きブロックがなくＢＰＴの書き込みが行えないと判断して、データ書き込みの処理を異常終了する。
【００７７】
ステップＳ２０９でＣＰＵ１２１は、更新前の現在のＢＰＴの物理ページアドレスを特定する。また、更新前の現在のＢＰＴを記憶しているブロックの先頭のページに格納されている書込カウンタを読み出す。
【００７８】
次に、ＣＰＵ１２１は、ステップＳ２０７で索出された空きブロックの先頭のページのデータ領域に、ＲＡＭ１２３に記憶されている更新後の現在のＢＰＴを書き込む（ステップＳ２１０）。また、当該データ領域には、ステップＳ２０９で特定した物理ページアドレスを、新たな前ページフラグとして書き込み、また、ステップＳ２０９で読み出した書込カウンタをブロック１個分インクリメントした値を、新たな書込カウンタとして書き込む。また、ステップＳ２１０でＣＰＵ１２１は、更新後の現在のＢＰＴの誤り訂正符号を生成して、この誤り訂正符号を、更新後の現在のＢＰＴを書き込むページの冗長部に書き込む。
【００７９】
ステップＳ２１１でＣＰＵ１２１は、ステップＳ２０６又はＳ２１０でＢＰＴを書き込んだ後フラッシュメモリ１１の書込み終了信号を受取り、フラッシュメモリ１１のステータスを読み出す事によって、ステップＳ２１０での書き込みが正常に行われたか否かを判別する（ステップＳ２１１）。そして、正常に行われていると判別すると（ステップＳ２１１；ＹＥＳ）、新ユーザデータ書き込みの処理に移る（図６、ステップＳ３００）。
【００８０】
一方、正常に行われていないとステップＳ２１１で判別すると（ステップＳ２１１；ＮＯ）、ＣＰＵ１２１は、ステップＳ２０６、Ｓ２１０又は後述するＳ２１４での書き込みが正常に行われなかったブロックが後発不良ブロックになったものとして、当該ブロック内のページの冗長部に不良ブロックフラグを書き込む（ステップＳ２１２）。
そして、更新後の現在のＢＰＴの書き込みを再度試みるため、ステップＳ２０７及びＳ２０８の処理と実質的に同一の処理を行い（ステップＳ２１３）、空きブロックが索出されなければデータ書き込みの処理を異常終了し（ステップＳ２１３；ＮＯ）、索出されれば（ステップＳ２１３；ＹＥＳ）、ステップＳ２１０の処理と実質的に同一の処理を行うことにより、更新後の現在のＢＰＴ、前ページフラグ、書込カウンタ及び誤り訂正符号の書き込みを行う（ステップＳ２１４）。
【００８１】
ユーザーデータの書き込みは例えば特願平１１−１１２２２２（特開２０００−３０５８３９）に開示されている手法により行われる。
メモリユニット１はコンピュータ２から１ページ分のデータとデータを書き込む論理ブロックアドレス及びページアドレスを受け取りＲＡＭ１２３へ保管する。次にＣＰＵ１２１は、更新後のＢＰＴを検索し論理ブロックアドレスに対応した書き込み対象物理ブロックアドレスを特定し書き込み対象物理ページアドレスを最初のページに設定する。次にＣＰＵ１２１はステップＳ１００で上書きと判断され旧物理ブロックが特定されているか判別する。
旧物理ブロックが特定していない（新規書き込み）場合は、論理ページアドレスを書き込み対象物理ページアドレスに設定し書き込み対象物理ページアドレスが指示するフラッシュメモリ１１のページにＲＡＭ１２３に保管されている１ページ分のデータと論理ブロックアドレスを書き込む。
旧物理ブロックが特定している場合は、コンピュータ２からデータを書き込む論理ページアドレスが書き込み対象物理ページアドレスと一致するかを判別し、一致しない場合は旧物理ブロックのページアドレスが示すページの内容を対象物理ページアドレスが示すページにコピーする。その後対象物理ページアドレスを次のページに設定しデータを書き込む論理ページアドレスが書き込み対象物理ページアドレスと一致するまで同様のコピー動作を繰り返す。一致した場合は書き込み対象物理ページアドレスが指示するフラッシュメモリ１１のページにＲＡＭ１２３に保管されている１ページ分のデータと論理ブロックアドレスを書き込む。
次にＣＰＵ１２１は後続のページがあるか否か判別し、ある場合はコンピュータ２から１ページ分のデータをＲＡＭ１２３に受取り書き込み対象物理ページアドレスを次のページに設定してフラッシュメモリ１１のページにＲＡＭ１２３に保管されている１ページ分のデータと論理ブロックアドレスを書き込む。無い場合は書き込み対象物理ページアドレスがブロックの最後のページになるまで旧物理ブロックのページからのコピーを継続し、書き込み対象物理ページアドレスがブロックの最後のページであるページの書き込みが終了後旧物理ブロックを消去する。
ユーザーデータの書き込み後ＣＰＵ１２１は旧ＢＰＴ消去の処理に移る（ステップＳ５００）。
【００８２】
図１０に詳細を示す旧ＢＰＴ消去の処理に移ると、ＣＰＵ１２１はまず、ステップＳ２０５で、更新前の現在のＢＰＴを記憶しているブロック内に空きページがあると判別したかを判別する（図１０、ステップＳ５０１）。そして、あると判別していた場合は、データ書き込みの処理全体を終了する。一方、ないと判別していた場合、ＣＰＵ１２１は、更新前の現在のＢＰＴが格納されているブロックをフラッシュイレースし、データを消去したブロックに属するカラムの冗長部が、空きブロックである事をあらわす初期値となるようにする（ステップＳ５０２）。そしてＢＳＩにもアクセスし、ステップＳ５０２でデータを消去されたブロックが空きブロックであることを表すようにＢＳＩの内容を書き換え（ステップＳ５０３）、データ書き込みの処理全体を終える。
【００８３】
以上説明したこの記憶システムは、正常な動作を行っている限りにおいて、ＢＰＴを格納するブロックに、前ページポインタ及び書込カウンタを記録する。また、この記憶システムは過去のＢＰＴも引き続き記憶する。
そして、現在のＢＰＴやユーザーデータが書き込み途中の電源断などでフラッシュメモリ１１に正常に記憶されなかった場合は、前ページポインタを用いて１個前のＢＰＴを特定した上、現在及び１個前のＢＰＴを用いて、ＢＰＴの正しい内容を決定する。また、最も新しく作成されたＢＰＴが大幅に破壊されている等の原因で現在のＢＰＴとしてコントローラ１２により特定されない場合は、ＢＰＴとして正常な内容を有している最新のＢＰＴが、現在のＢＰＴとして特定される。
従って、ユーザーデータの書き込み中やアドレス変換テーブルの変更動作中に異常が発生しても、この記憶システムは以後の読み書き動作を正常に行える。
【００８４】
なお、この記憶システムの構成は、上述のものに限られない。
例えば、フラッシュメモリ１１の記憶領域のブロックの数、１ブロック当たりのページの数、各ページの記憶容量、データ領域及び冗長部の記憶容量は、いずれも任意である。また、フラッシュメモリ１１は、ＥＥＰＲＯＭから構成されるものである必要はなく、コンピュータにより読み書き可能な任意の記憶装置であってよい。
また、コントローラ１２は、前ページポインタ、書込カウンタ又は前ブロック書込失敗フラグを用いた１個前のＢＰＴの特定が行えない場合、過去のＢＰＴのうちいずれかを、任意の基準に従い、１個前のＢＰＴとして特定するようにしてもよい。
【００８５】
以上、この発明の実施の形態を説明したが、この発明の記憶装置及びメモリ管理装置は、専用のシステムによらず、通常のコンピュータシステムを用いて実現可能である。例えば、フラッシュメモリ１１に接続されるパーソナルコンピュータに上述のコントローラ１２及びコンピュータ２の動作を実行するためのプログラムを格納した媒体（フレキシブルディスク、ＣＤ−ＲＯＭ等）から該プログラムをインストールすることにより、上述の処理を実行する記憶システムを構成することができる。
【００８６】
また、例えば、通信ネットワークの掲示板（ＢＢＳ）に該プログラムをアップロードし、これを通信ネットワークを介して配信してもよい。そして、該プログラムを起動し、ＯＳの制御下に、他のアプリケーションプログラムと同様に実行することにより、上述の処理を実行することができる。
【００８７】
なお、ＯＳが処理の一部を分担する場合、あるいは、ＯＳが本願発明の１つの構成要素の一部を構成するような場合には、記録媒体には、その部分を除いたプログラムを格納してもよい。この場合も、この発明では、その記録媒体には、コンピュータが実行する各機能又はステップを実行するためのプログラムが格納されているものとする。
【図面の簡単な説明】
【００８８】
【図１】本発明の実施の形態にかかる記憶システムの構成を示すブロック図である。
【図２】フラッシュメモリの記憶領域の論理的構造を模式的に示す図である。
【図３】ＢＰＴのデータ構造を模式的に示す図である。
【図４】ＢＳＩのデータ構造を模式的に示す図である。
【図５】初期処理の手順を示すフローチャートである。
【図６】データ書き込みの処理を示すフローチャートである。
【図７】旧ユーザデータ読み込みの処理を示すフローチャートである。
【図８】ＢＰＴ更新の処理を示すフローチャートである。
【図９】ＢＰＴ更新の処理を示すフローチャートの続きである。
【図１０】旧ＢＰＴ消去の処理を示すフローチャートである。
【符号の説明】
【００８９】
１          メモリユニット
１１        フラッシュメモリ
１２        コントローラ
１２１      ＣＰＵ
１２２      ＲＯＭ
１２３      ＲＡＭ
２          コンピュータ
【図１】
2006285600.tif 000003
【図２】
2006285600.tif 000004
【図３】
2006285600.tif 000005
【図４】
2006285600.tif 000006
【図５】
2006285600.tif 000007
【図６】
2006285600.tif 000008
【図７】
2006285600.tif 000009
【図８】
2006285600.tif 000010
【図９】
2006285600.tif 000011
【図１０】
2006285600.tif 000012