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